0

想弄清楚以下几点:

say, (omitting key for brevity)
list l1 {
   leaf lx {
     leafref /x/y;
     require-instance false;
     mandatory false;
   }
}
  1. 因为强制是假的,我可以有一个没有叶子 lx 的 l1 实例。
  2. 因为 require-instance 为 false,所以无论是否存在相应的 /x/y,我都可以拥有一个具有任何值(有效类型)的 lx 的列表实例。

并且,假设叶子是强制性的;

list l1 {
   leaf lx {
     leafref /x/y;
     require-instance false;
     mandatory true;
   }
}

现在,列表实例必须携带叶子 lx。并且任何值(正确类型)都是有效的,因为 require-instance 是错误的。

正确的 ?

我什么时候应该使用这个设施?

4

1 回答 1

0

如果require-instance设置为false,则leafref节点的值空间与被引用节点的值空间相同。如果引用节点的值空间特别复杂,有很多限制等,这可能很有用。因此,基本上,模块创建者可以重用他们之前定义的内容。

如果require-instance设置为true(或省略),则当没有指定leafref节点的值空间的叶实例时,它的值空间为空。因此,您无法创建leafref节点的有效实例,因为它没有可能的值。

以下是YANG 1.1 RFC 7950的相关部分:

9.9。Leafref 内置类型

Leafref 内置类型受限于模式树中某个叶子或叶子列表节点的值空间,并且可选地进一步受限于数据树中的相应实例节点。“路径”子语句(第 9.9.2 节)用于标识模式树中引用的叶或叶列表节点。引用节点的值空间是被引用节点的值空间。

require-instance以及关于声明的片段:

9.9.3。“require-instance”声明

[...] 如果此语句不存在,则默认为“true”。

如果“require-instance”为“true”,则意味着被引用的实例必须存在才能使数据有效。这个约束是根据第 8 节中的规则执行的。

如果“require-instance”为“false”,则表示被引用的实例可能存在于有效数据中。

恕我直言,YANG 1.1 RFC 7950 的这一部分有点误导。首先,它说引用节点的值空间是被引用节点的值空间,但后来它说默认情况下存在实例存在限制。这意味着,默认情况下,引用节点的值空间是被引用节点的一组叶实例值,而不是该节点的完整值空间。

于 2016-12-31T14:13:37.963 回答