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

时间:2018-08-23 13:02:24

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

我了解您可以创建一个单独的yang文件(类似于用于存储MIBS语法值的文本约定),然后将其导入另一个yang文件中,以使数据更加有条理和结构化,但是我似乎无法理解包含语句有何不同之处?

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

请帮助:)

1 个答案:

答案 0 :(得分:0)

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

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

import不会将内联定义“内联”到导入模块中,而include确实可以做到这一点。导入模块使您可以访问其顶级定义(typedef,分组,标识,特征和扩展),并允许您使用架构节点标识符来标识导入模块中的节点(例如,出于扩充和偏离的目的)

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

YANG“编译器”通常在命中include$string = " + $days days"; $date1 = strtotime($next_travel_date . $string); $date2 = strtotime($next_endDate . $string); $next_travel_date = date('d-m-Y', $date1); $next_endDate = date('d-m-Y', $date2); 语句时处理这些文件。他们需要处理它们,以便能够解析定义模块的主体语句中的定义。这就是为什么要求这些语句出现在模块的标题部分的原因。

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