【问题标题】:What's the difference between the include and import statement in NETCONF (.Yin/Yang files)NETCONF(.Yin/Yang 文件)中的 include 和 import 语句有什么区别
【发布时间】:2019-01-29 20:56:45
【问题描述】:

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

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

请帮忙:)

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-09
      • 2015-07-20
      • 1970-01-01
      • 2010-10-01
      • 2011-07-15
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多