我知道您可以创建一个单独的 yang 文件(类似于存储 MIBS 语法值的文本约定)并将其导入另一个 yang 文件以使数据更有条理和结构化,但我似乎无法理解包含的内容声明有什么不同?
它是否将整个文件“导入”到包含它的文件中 - 如果是这样,是否会在包含它的文件之前读取它......?
请帮忙 :)
我知道您可以创建一个单独的 yang 文件(类似于存储 MIBS 语法值的文本约定)并将其导入另一个 yang 文件以使数据更有条理和结构化,但我似乎无法理解包含的内容声明有什么不同?
它是否将整个文件“导入”到包含它的文件中 - 如果是这样,是否会在包含它的文件之前读取它......?
请帮忙 :)
YANG 在很大程度上依赖于一个称为“命名空间”的概念,它源于 XML 命名约定。每个命名空间都有一个唯一的资源标识符,并允许定义(在不同的命名空间中)在相同的定义级别具有相同的名称,同时避免名称冲突。当你定义一个 YANG 模块时,你实际上是在定义一个命名空间。
import
语句用于访问来自外部命名空间(另一个模块)的定义,而语句include
引入了一种机制,该机制允许将单个命名空间(单个模块)在逻辑上拆分为多个文件,方便地命名为module
和submodules
. 对于包含,总是只有一个模块文件,它包含所有属于它的子模块文件。一个子模块可能只属于一个模块,不能(直接)导入。对于导入模块,包含子模块的模块看起来像一个单一的实体。子模块可以相互包含,但是在 YANG 1.1 版本中,这已经变得不必要了,因为子模块可以立即访问所有子模块中的所有定义以及它们都属于的模块。在 YANG 版本 1 中,您必须显式包含一个子模块才能在另一个子模块中使用它的定义,而永远无法访问它们所属模块中的定义。
Animport
不会将定义“内联”到导入模块中,而 aninclude
正是这样做的。导入模块使您可以访问其顶级定义(typedef、分组、标识、特性和扩展),并允许您使用模式节点标识符来标识导入模块中的节点(例如,为了增加和偏差) .
来自外部命名空间的定义总是通过 a 访问prefix
,它是import
语句定义的一部分。来自包含的定义在使用时不需要前缀,如果是,则以包含模块(或子模块)的前缀作为前缀。
YANG“编译器”通常在遇到一个import
或一个include
语句时处理这些文件。他们需要处理它们以便能够解析定义模块的主体语句中的定义。这就是为什么这些语句需要出现在模块的标题部分中的原因。
YANG 规范中有一个完整的部分专门用于模块和子模块,您可以在其中阅读有关该主题的更多信息。