NETCONF(.Yin/Yang文件)中的include和import语句有什么区别

What's the difference between the include and import statement in NETCONF (.Yin/Yang files)

我知道你可以创建一个单独的 yang 文件(类似于文本约定来存储 MIBS 的语法值)并将其导入另一个 yang 文件以使数据更有条理和结构化,但我似乎不能了解 include 语句的不同之处?

是否 "import" 将整个文件放入包含它的文件中 - 如果是这样,是否会在包含它的文件之前读取它...?

请帮忙:)

YANG 在很大程度上依赖于一个名为“命名空间”的概念,该概念源于 XML 命名约定。每个名称空间都有一个唯一的资源标识符,并允许定义(在不同的名称空间中)在相同的定义级别具有相同的名称,同时避免名称冲突。当你定义一个 YANG 模块时,你实际上是在定义一个命名空间。

import 语句用于从外部命名空间(另一个模块)访问定义,而 include 语句引入了一种允许单个命名空间(单个模块)逻辑拆分的机制分成几个文件,方便地命名为 modulesubmodules。对于includes,总是恰好有一个模块文件,其中包含属于它的所有个子模块文件。一个子模块只能属于一个模块,不能(直接)导入。对于导入模块,包含子模块的模块看起来像一个实体。子模块可能包含彼此,但对于 YANG 1.1 版,这已变得不必要,因为子模块立即获得对所有子模块及其所属模块中的所有定义的访问权限。在 YANG 版本 1 中,您必须显式包含一个子模块才能在另一个子模块中使用它的定义,而 never 无法访问它们所属模块中的定义。

import 不会将定义“内联”到导入模块中,而 include 正是这样做的。导入模块使您可以访问其 top-level 定义(typedef、分组、idenitites、功能和扩展),并允许您使用模式节点标识符来标识导入模块中的节点(用于扩充和偏差的目的,例如例如)。

来自外部名称空间的定义始终通过 prefix 访问,这是 import 语句定义的一部分。来自 include 的定义在使用时不需要加前缀,如果是,则以包含模块(或子模块)的前缀为前缀。

YANG“编译器”通常在遇到 importinclude 语句时处理这些文件。他们需要处理它们以便能够解析定义模块的 body 语句中的定义。这就是为什么这些语句需要出现在模块的 header 部分中。

有一个 entire section in YANG specification 专用于模块和子模块,您可以在其中阅读有关该主题的更多信息。