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
语句的参数映射
+------------------+---------------+-------------+
| keyword | argument name | yin-element |
+------------------+---------------+-------------+
| action | name | false |
| anydata | name | false |
| anyxml | name | false |
| argument | name | false |
| augment | target-node | false |
| base | name | false |
| belongs-to | module | false |
| bit | name | false |
| case | name | false |
| choice | name | false |
| config | value | false |
| contact | text | true |
| container | name | false |
| default | value | false |
| description | text | true |
| deviate | value | false |
| deviation | target-node | false |
| enum | name | false |
| error-app-tag | value | false |
| error-message | value | true |
| extension | name | false |
| feature | name | false |
| fraction-digits | value | false |
| grouping | name | false |
| identity | name | false |
| if-feature | name | false |
| import | module | false |
| include | module | false |
| input | <no argument> | n/a |
| key | value | false |
| leaf | name | false |
| leaf-list | name | false |
| length | value | false |
| list | name | false |
| mandatory | value | false |
| max-elements | value | false |
| min-elements | value | false |
| modifier | value | false |
| module | name | false |
| must | condition | false |
| namespace | uri | false |
| notification | name | false |
| ordered-by | value | false |
| organization | text | true |
| output | <no argument> | n/a |
| path | value | false |
| pattern | value | false |
| position | value | false |
| prefix | value | false |
| presence | value | false |
| range | value | false |
| reference | text | true |
| refine | target-node | false |
| require-instance | value | false |
| revision | date | false |
| revision-date | date | false |
| rpc | name | false |
| status | value | false |
| submodule | name | false |
| type | name | false |
| typedef | name | false |
| unique | tag | false |
| units | name | false |
| uses | name | false |
| value | value | false |
| when | condition | false |
| yang-version | value | false |
| yin-element | value | false |
+------------------+---------------+-------------+
13.1.1. 使用示例
以下的YANG
模块:
module example-foo {
yang-version 1.1;
namespace "urn:example:foo";
prefix "foo";
import example-extensions {
prefix "myext";
}
list interface {
key "name";
leaf name {
type string;
}
leaf mtu {
type uint32;
description "The MTU of the interface.";
myext:c-define "MY_MTU";
}
}
}
在7.19.3节定义的扩展名“c-define
”被翻译成以下的YIN
:
<module name="example-foo"
xmlns="urn:ietf:params:xml:ns:yang:yin:1"
xmlns:foo="urn:example:foo"
xmlns:myext="urn:example:extensions">
<namespace uri="urn:example:foo"/>
<prefix value="foo"/>
<import module="example-extensions">
<prefix value="myext"/>
</import>
<list name="interface">
<key value="name"/>
<leaf name="name">
<type name="string"/>
</leaf>
<leaf name="mtu">
<type name="uint32"/>
<description>
<text>The MTU of the interface.</text>
</description>
<myext:c-define name="MY_MTU"/>
</leaf>
</list>
</module>