5.1. 模块和子模块

该模块是YANG定义的基本单位。一个模块定义一个单一的数据模型。一个模块也可以增加一个现有的数据模型和其他节点。

子模块是为模块提供定义的部分模块。模块可以包括任意数量的子模块,但是每个子模块可以仅属于一个模块。

YANG模块和子模块的开发人员建议选择其模块名称,与标准模块或其他企业模块冲突的可能性较低,例如,使用企业或组织名称作为模块名称的前缀。在服务器中,所有模块名称必须是唯一的。

一个模块使用“include”语句来列出其所有的子模块。属于该模块的模块或子模块可以引用模块中包含的定义和模块包含的所有子模块。

模块或子模块使用“import”语句来引用外部模块。模块或子模块中的语句可以使用“import”语句中指定的前缀引用外部模块中的定义。

为了向后兼容YANG版本1,子模块可以使用“include”语句来引用其模块中的其他子模块,但是在版本1.1中这不是必需的。子模块可以引用它所属的模块和模块包含的所有子模块中的任何定义。子模块不得包含与其模块包含的修订版不同的其他子模块版本。

模块或子模块不能包含其他模块的子模块,子模块不能导入自己的模块。

import”和“include”语句用于从其他模块中提供定义:

  • 要使模块或子模块引用外部模块中的定义,必须导入外部模块。

  • 模块必须包含所有的子模块。

  • 属于该模块的模块或子模块可以在模块中引用定义,也可以在模块中包含所有子模块。

不得有任何引入环形链。例如,如果模块“a”导入模块“b”,“b”不能导入“a”。

引用外部模块中的定义时,必须使用本地定义的前缀,后跟冒号(“:”),然后是外部标识符。对本地模块中定义的引用可以使用前缀表示法。由于内置数据类型不属于任何模块且不含前缀,因此对内置数据类型(例如int32)的引用不能使用前缀表示法。定义参考的语法由第14节中的“identifier-ref”规则正式定义。