7.2. “子模块”声明
YANG
中的主要单元是一个模块,而YANG
模块本身可以由几个子模块构成。子模块允许模块设计人员将复杂模型拆分为多个子模块,其中所有子模块对包含子模块的模块定义的单个名称空间起作用。
“submodule
”语句定义子模块的名称,并将属于子模块的所有语句组合在一起。 “submodule
”语句的参数是子模块的名称,后面跟着一个包含详细子模块信息的子语句块。子模块名称是一个标识符(见第6.2节)。
RFC
流发布的子模块的名称必须由IANA
分配;参见[RFC6020]中的第14节。
私有子模块名称由拥有子模块的组织分配,没有中央注册表。有关如何命名子模块的建议,请参见第5.1节。
子模块通常具有以下布局:
submodule <module-name> {
<yang-version statement>
// module identification
<belongs-to statement>
// linkage statements
<import statements>
// meta-information
<organization statement>
<contact statement>
<description statement>
<reference statement>
// revision history
<revision statements>
// module definitions
<other statements>
}
7.2.1. 子模块的子语句
submodule的子语句基本上和
module
的子语句(参见7.1.1节)一致,只是多了一个belongs-to
子语句
+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| anydata | 7.10 | 0..n |
| anyxml | 7.11 | 0..n |
| augment | 7.17 | 0..n |
| belongs-to | 7.2.2 | 1 |
| choice | 7.9 | 0..n |
| contact | 7.1.8 | 0..1 |
| container | 7.5 | 0..n |
| description | 7.21.3 | 0..1 |
| deviation | 7.20.3 | 0..n |
| extension | 7.19 | 0..n |
| feature | 7.20.1 | 0..n |
| grouping | 7.12 | 0..n |
| identity | 7.18 | 0..n |
| import | 7.1.5 | 0..n |
| include | 7.1.6 | 0..n |
| leaf | 7.6 | 0..n |
| leaf-list | 7.7 | 0..n |
| list | 7.8 | 0..n |
| notification | 7.16 | 0..n |
| organization | 7.1.7 | 0..1 |
| reference | 7.21.4 | 0..1 |
| revision | 7.1.9 | 0..n |
| rpc | 7.14 | 0..n |
| typedef | 7.3 | 0..n |
| uses | 7.13 | 0..n |
| yang-version | 7.1.2 | 1 |
+--------------+---------+-------------+
7.2.2。 “belongs-to”声明
“belongs-to
”语句指定子模块所属的模块。 参数是一个标识符,即模块的名称。
一个子模块只能被它所属的模块或属于该模块的另一个子模块所包含。
强制的“prefix
”子状态为子模块所属的模块分配一个前缀。 子模块所属模块中的所有定义及其所有子模块都可以使用前缀进行访问。
"belongs-to"的子语句
+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| prefix | 7.1.4 | 1 |
+--------------+---------+-------------+
7.2.3 使用示例
submodule example-types {
yang-version 1.1;
belongs-to "example-system" {
prefix "sys";
}
import ietf-yang-types {
prefix "yang";
}
organization "Example Inc.";
contact
"Joe L. User
Example Inc.
42 Anywhere Drive
Nowhere, CA 95134
USA
Phone: +1 800 555 0100
Email: joe@example.com";
description
"This submodule defines common Example types.";
revision "2007-06-09" {
description "Initial revision.";
}
// definitions follow...
}