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>

results matching ""

    No results matching ""