7.19. “扩展”声明

extension”语句允许定义YANG语言中的新语句。这个新的语句定义可以被其他模块导入和使用。

extension”语句的参数是一个标识符,它是扩展名的新关键字,后面必须跟着一个包含详细扩展信息的子语句块。 “extension”语句的目的是定义一个关键字,使其可以被其他模块导入和使用。

扩展名可以像普通的YANG语句一样使用,如果语句名由“extension”语句定义,则语句名后跟一个参数,并且可以包含一个可选的子语句块。该语句的名称是通过组合定义扩展名的模块的前缀,冒号(“:”)和扩展的关键字来创建的,没有交织空白。扩展的子语句由“extension”语句定义,使用本规范范围之外的某种机制。语法上,子语句必须是YANG语句,包括使用“extension”语句定义的扩展名。在扩展中的YANG语句必须遵循第14节中的语法规则。

扩展可以允许细化(参见7.13.2节)和偏差(参见7.20.3.2),但是定义的机制超出了本规范的范围。

7.19.1. extension子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | argument | 7.19.2 | 0..1 |
  5. | description | 7.21.3 | 0..1 |
  6. | reference | 7.21.4 | 0..1 |
  7. | status | 7.21.2 | 0..1 |
  8. +--------------+---------+-------------+

7.19.2. “argument”声明

可选的“argument”语句将一个字符串作为参数,该字符串是关键字参数的名称。 如果不存在“argument”语句,则关键字在使用时不需要参数。

这个参数的名字在YIN映射中使用,它被用作XML属性或元素名称,具体取决于参数的“yin-element”语句。

7.19.2.1. “argument”子语句

  1. +--------------+----------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+----------+-------------+
  4. | yin-element | 7.19.2.2 | 0..1 |
  5. +--------------+----------+-------------+

7.19.2.2. “yin-element”声明

yin-element”语句是可选的,它将字符串“true”或“false”作为参数。 此语句指示参数是映射到YIN中的XML元素还是映射到XML属性(请参阅第13节)。

如果没有“yin-element”语句,则默认为“false”。

7.19.3. 使用示例

要定义一个扩展:

  1. module example-extensions {
  2. yang-version 1.1;
  3. ...
  4. extension c-define {
  5. description
  6. "Takes as an argument a name string.
  7. Makes the code generator use the given name
  8. in the #define.";
  9. argument "name";
  10. }
  11. }

要使用扩展名:

  1. module example-interfaces {
  2. yang-version 1.1;
  3. ...
  4. import example-extensions {
  5. prefix "myext";
  6. }
  7. ...
  8. container interfaces {
  9. ...
  10. myext:c-define "MY_INTERFACES";
  11. }
  12. }