希望明确以下内容:
say, (omitting key for brevity)
list l1 {
leaf lx {
leafref /x/y;
require-instance false;
mandatory false;
}
}
并且,假设叶子是强制性的;
list l1 {
leaf lx {
leafref /x/y;
require-instance false;
mandatory true;
}
}
现在, list实例必须携带叶lx。任何值(正确类型)都是有效的,因为require-instance为false。
正确吗?
什么时候应该使用这个设施?
答案 0 :(得分:0)
如果require-instance
设置为false
,则leafref
节点的值空间与引用节点的值空间相同。如果引用节点的值空间特别复杂,有很多限制等,这可能很有用。因此,基本上,模块创建者可以重用之前定义的内容。
如果require-instance
设置为true
(或省略),那么当没有叶子实例指定leafref
节点的值空间时它的价值空间是空的。因此,您无法创建leafref
节点的有效实例,因为它没有可能的值。
以下是YANG 1.1 RFC 7950的相关部分:
<强> 9.9。 leafref内置类型
leafref内置类型仅限于架构树中某些叶子或叶子列表节点的值空间,并且可选地由数据树中的相应实例节点进一步限制。 &#34;路径&#34;子语句(第9.9.2节)用于标识模式树中的引用叶子或叶子列表节点。引用节点的值空间是引用节点的值空间。
以及关于require-instance
语句的片段:
<强> 9.9.3。 &#34; require-instance&#34;声明强>
[...]如果此声明不存在,则默认为&#34; true&#34;。
如果&#34;要求实例&#34;是&#34; true&#34;,这意味着必须存在被引用的实例才能使数据有效。根据第8节中的规则强制执行此约束。
如果&#34;要求实例&#34;是&#34; false&#34;,这意味着被引用的实例可能存在于有效数据中。
恕我直言,YANG 1.1 RFC 7950的这一部分有点误导。首先,它表示引用节点的值空间是引用节点的值空间,但稍后它表示默认情况下存在实例存在限制。这意味着,默认情况下,引用节点的值空间od是引用节点的一组叶子实例值,而不该节点的完整值空间。