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

标签 networking mib ietf-netmod-yang ietf-netconf

我知道您可以创建一个单独的 yang 文件(类似于存储 MIBS 语法值的文本约定)并将其导入另一个 yang 文件以使数据更有组织性和结构化,但我似乎无法理解include 语句的作用有何不同?

它是否将整个文件“导入”到包含该文件的文件中 - 如果是这样,是否会在包含该文件的文件之前读取该文件...?

请帮忙:)

最佳答案

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

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

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

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

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

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

关于networking - NETCONF(.Yin/Yang 文件)中的 include 和 import 语句有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51986470/

相关文章:

networking - 在定义的接口(interface) IP 地址上启动 erlang/elixir

docker - Docker-使用macvlan网络,尝试发布端口吗?

linux - 用于查找路由器是否繁忙的 SNMP MIB

snmp - 如何使用snmpset在MIB表中添加行?

opendaylight - 杨: How can I include a container from another module?

Ubuntu,删除网络 TAP 接口(interface)

android - 如何在不在同一网络且没有互联网的情况下在windows和android之间发送数据?

java - 如何使用 snmp4j-2.7.0 获取 snmpv3 中的系统信息

ietf-netmod-yang - 如果 'config false' YANG 添加数据