7.12. “分组”声明
“grouping
”语句用于定义一个可重用的节点块,这些节点可以在模块或子模块中本地使用,也可以根据第5.5节中的规则使用其他模块。它需要一个参数,它是一个标识符,后面是一个包含详细分组信息的子语句块。
“grouping
”语句不是一个数据定义语句,因此,它不定义模式树中的任何节点。
分组就像传统编程语言中的“结构(structure
)”或“记录(record
)”。
一旦定义了分组,就可以在“uses
”语句中引用它(参见7.13)。一个分组不能引用自己,也不能直接或间接地通过其他分组。
如果分组是在YANG
模块或子模块的顶层定义的,那么分组的标识符必须在模块中是唯一的。
分组不仅仅是一种文本替换的机制;它还定义了一个节点集合。在分组中出现的标识符相对于定义分组的作用域,而不是在使用的位置。前缀映射、类型名称、分组名称和扩展使用都在“grouping
”语句出现的层次结构中进行了评估。对于扩展,这意味着将直接子定义为“grouping
”语句的扩展被应用到分组本身。
注意,如果一个分组在它的层次结构中定义了一个动作或一个通知节点,那么它就不能在所有的上下文中使用。例如,它不能在rpc
定义中使用。参见第7.15和7.16节。
7.12.1. grouping
子语句
+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| action | 7.15 | 0..n |
| anydata | 7.10 | 0..n |
| anyxml | 7.11 | 0..n |
| choice | 7.9 | 0..n |
| container | 7.5 | 0..n |
| description | 7.21.3 | 0..1 |
| grouping | 7.12 | 0..n |
| leaf | 7.6 | 0..n |
| leaf-list | 7.7 | 0..n |
| list | 7.8 | 0..n |
| notification | 7.16 | 0..n |
| reference | 7.21.4 | 0..1 |
| status | 7.21.2 | 0..1 |
| typedef | 7.3 | 0..n |
| uses | 7.13 | 0..n |
+--------------+---------+-------------+
7.12.2 使用示例
import ietf-inet-types {
prefix "inet";
}
grouping endpoint {
description "A reusable endpoint group.";
leaf ip {
type inet:ip-address;
}
leaf port {
type inet:port-number;
}
}