7.12. “分组”声明

grouping”语句用于定义一个可重用的节点块,这些节点可以在模块或子模块中本地使用,也可以根据第5.5节中的规则使用其他模块。它需要一个参数,它是一个标识符,后面是一个包含详细分组信息的子语句块。

grouping”语句不是一个数据定义语句,因此,它不定义模式树中的任何节点。

分组就像传统编程语言中的“结构(structure)”或“记录(record)”。

一旦定义了分组,就可以在“uses”语句中引用它(参见7.13)。一个分组不能引用自己,也不能直接或间接地通过其他分组。

如果分组是在YANG模块或子模块的顶层定义的,那么分组的标识符必须在模块中是唯一的。

分组不仅仅是一种文本替换的机制;它还定义了一个节点集合。在分组中出现的标识符相对于定义分组的作用域,而不是在使用的位置。前缀映射、类型名称、分组名称和扩展使用都在“grouping”语句出现的层次结构中进行了评估。对于扩展,这意味着将直接子定义为“grouping”语句的扩展被应用到分组本身。

注意,如果一个分组在它的层次结构中定义了一个动作或一个通知节点,那么它就不能在所有的上下文中使用。例如,它不能在rpc定义中使用。参见第7.157.16节

7.12.1. grouping子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | action | 7.15 | 0..n |
  5. | anydata | 7.10 | 0..n |
  6. | anyxml | 7.11 | 0..n |
  7. | choice | 7.9 | 0..n |
  8. | container | 7.5 | 0..n |
  9. | description | 7.21.3 | 0..1 |
  10. | grouping | 7.12 | 0..n |
  11. | leaf | 7.6 | 0..n |
  12. | leaf-list | 7.7 | 0..n |
  13. | list | 7.8 | 0..n |
  14. | notification | 7.16 | 0..n |
  15. | reference | 7.21.4 | 0..1 |
  16. | status | 7.21.2 | 0..1 |
  17. | typedef | 7.3 | 0..n |
  18. | uses | 7.13 | 0..n |
  19. +--------------+---------+-------------+

7.12.2 使用示例

  1. import ietf-inet-types {
  2. prefix "inet";
  3. }
  4. grouping endpoint {
  5. description "A reusable endpoint group.";
  6. leaf ip {
  7. type inet:ip-address;
  8. }
  9. leaf port {
  10. type inet:port-number;
  11. }
  12. }