13.1. 正式的YIN定义

YANG关键字和YIN元素之间有一对一的对应关系。YIN元素的本地名称与相应的YANG关键字相同。这尤其意味着,YIN文档的文档元素(root)始终是<module><submodule>

对应于YANG关键字的YIN元素属于关联URI为“urn:ietf:params:xml:ns:yang:yin:1”的命名空间。

与扩展关键字对应的YIN元素属于通过“extension”语句声明扩展关键字的YANG模块的名称空间。

所有YIN元素的名称必须使用[XML-NAMES]的标准机制,即“xmlns”和“xmlns:xxx”属性,用它们的命名空间(如上所述)进行适当的限定。

YANG语句的参数在YIN中表示为关键字元素的XML属性或子元素。表1定义了一组YANG关键字的映射。对于扩展,参数映射在“extension”语句中指定(参见第7.19节)。以下规则适用于参数:

  • 如果参数表示为属性,则此属性没有名称空间。

  • 如果参数被表示为一个元素,则它的名称空间与其父关键字元素相同。

  • 如果参数表示为元素,则它必须是关键字元素的第一个子元素。

YANG语句的子语句被表示为关键字元素的(额外的)子元素,它们的相对顺序务必与YANG中的子语句顺序相同。

YANG MAY中的注释可映射到XML注释。

表1:YANG语句的参数映射

  1. +------------------+---------------+-------------+
  2. | keyword | argument name | yin-element |
  3. +------------------+---------------+-------------+
  4. | action | name | false |
  5. | anydata | name | false |
  6. | anyxml | name | false |
  7. | argument | name | false |
  8. | augment | target-node | false |
  9. | base | name | false |
  10. | belongs-to | module | false |
  11. | bit | name | false |
  12. | case | name | false |
  13. | choice | name | false |
  14. | config | value | false |
  15. | contact | text | true |
  16. | container | name | false |
  17. | default | value | false |
  18. | description | text | true |
  19. | deviate | value | false |
  20. | deviation | target-node | false |
  21. | enum | name | false |
  22. | error-app-tag | value | false |
  23. | error-message | value | true |
  24. | extension | name | false |
  25. | feature | name | false |
  26. | fraction-digits | value | false |
  27. | grouping | name | false |
  28. | identity | name | false |
  29. | if-feature | name | false |
  30. | import | module | false |
  31. | include | module | false |
  32. | input | <no argument> | n/a |
  33. | key | value | false |
  34. | leaf | name | false |
  35. | leaf-list | name | false |
  36. | length | value | false |
  37. | list | name | false |
  38. | mandatory | value | false |
  39. | max-elements | value | false |
  40. | min-elements | value | false |
  41. | modifier | value | false |
  42. | module | name | false |
  43. | must | condition | false |
  44. | namespace | uri | false |
  45. | notification | name | false |
  46. | ordered-by | value | false |
  47. | organization | text | true |
  48. | output | <no argument> | n/a |
  49. | path | value | false |
  50. | pattern | value | false |
  51. | position | value | false |
  52. | prefix | value | false |
  53. | presence | value | false |
  54. | range | value | false |
  55. | reference | text | true |
  56. | refine | target-node | false |
  57. | require-instance | value | false |
  58. | revision | date | false |
  59. | revision-date | date | false |
  60. | rpc | name | false |
  61. | status | value | false |
  62. | submodule | name | false |
  63. | type | name | false |
  64. | typedef | name | false |
  65. | unique | tag | false |
  66. | units | name | false |
  67. | uses | name | false |
  68. | value | value | false |
  69. | when | condition | false |
  70. | yang-version | value | false |
  71. | yin-element | value | false |
  72. +------------------+---------------+-------------+

13.1.1. 使用示例

以下的YANG模块:

  1. module example-foo {
  2. yang-version 1.1;
  3. namespace "urn:example:foo";
  4. prefix "foo";
  5. import example-extensions {
  6. prefix "myext";
  7. }
  8. list interface {
  9. key "name";
  10. leaf name {
  11. type string;
  12. }
  13. leaf mtu {
  14. type uint32;
  15. description "The MTU of the interface.";
  16. myext:c-define "MY_MTU";
  17. }
  18. }
  19. }

7.19.3节定义的扩展名“c-define”被翻译成以下的YIN

  1. <module name="example-foo"
  2. xmlns="urn:ietf:params:xml:ns:yang:yin:1"
  3. xmlns:foo="urn:example:foo"
  4. xmlns:myext="urn:example:extensions">
  5. <namespace uri="urn:example:foo"/>
  6. <prefix value="foo"/>
  7. <import module="example-extensions">
  8. <prefix value="myext"/>
  9. </import>
  10. <list name="interface">
  11. <key value="name"/>
  12. <leaf name="name">
  13. <type name="string"/>
  14. </leaf>
  15. <leaf name="mtu">
  16. <type name="uint32"/>
  17. <description>
  18. <text>The MTU of the interface.</text>
  19. </description>
  20. <myext:c-define name="MY_MTU"/>
  21. </leaf>
  22. </list>
  23. </module>