A - 强制选择
YANG - mandatory choice
The behavior of the [mandatory] constraint depends on the type of the choice's
closest ancestor node in the schema tree that is not a non-presence(see Section 7.5.1):
- If no such ancestor exists in the schema tree, the constraint is enforced.
- Otherwise, if this ancestor is a case node, the constraint is enforced if any other node from the case exists.
- Otherwise, it is enforced if the ancestor node exists.
现在:第一点和最后一点似乎很简单,但我无法理解第二点。
它是不是想说,如果第一个 non-presence container
祖先是一个 case
节点,那么如果 case
有多个 child 节点,则必须强制执行约束?基本上,这意味着如果 case
包含 uses
?
我必须强制执行
强制选择意味着只有一个案例分支(案例的数据节点后代)必须存在于有效的实例文档中 - RFC 用术语 "valid data".第二个项目符号是一个例外。
第二个项目符号适用于嵌套选择 - 如果一个选择的祖先是一个案例节点,那么您正在处理嵌套在另一个选择中的一个选择。
module choice-case {
yang-version 1.1;
namespace "org:example:choice-case";
prefix "cc";
container top {
choice choice {
case mandatory-choice { // <-- case mentioned in 2nd bullet
choice choice {
mandatory true; // <-- constraint not enforced until f is instantiated
case a-b-c {
leaf a {type string;}
leaf b {type string;}
leaf c {type string;}
}
case d-e {
leaf d {type string;}
leaf e {type string;}
}
}
leaf f {
type string;
}
}
}
}
}
在上面的例子中,强制选择约束没有被强制执行,直到叶子 f
也出现在实例文档中。如果来自 a-b-c
或 d-e
分支的叶节点被实例化,约束也将被强制执行,但条件将始终得到满足。
Is it trying to say that if first non-presence container ancestror is a case node, then the constraint must be enforced if the case has more than one child?
没有。如果实例文档中存在此类子项的实例,则强制执行约束。
Basically, it means that I must enforce the mandatory if the case contains a uses?
强制约束适用于实例文档,不适用于架构 - 架构仅规定约束。 uses
永远不会存在于强制约束被强制执行的上下文中。只有引用分组定义的实例化数据节点可能存在于此类上下文中,并且在强制执行约束时可能会被考虑。
The behavior of the [mandatory] constraint depends on the type of the choice's closest ancestor node in the schema tree that is not a non-presence(see Section 7.5.1):
- If no such ancestor exists in the schema tree, the constraint is enforced.
- Otherwise, if this ancestor is a case node, the constraint is enforced if any other node from the case exists.
- Otherwise, it is enforced if the ancestor node exists.
现在:第一点和最后一点似乎很简单,但我无法理解第二点。
它是不是想说,如果第一个 non-presence container
祖先是一个 case
节点,那么如果 case
有多个 child 节点,则必须强制执行约束?基本上,这意味着如果 case
包含 uses
?
强制选择意味着只有一个案例分支(案例的数据节点后代)必须存在于有效的实例文档中 - RFC 用术语 "valid data".第二个项目符号是一个例外。
第二个项目符号适用于嵌套选择 - 如果一个选择的祖先是一个案例节点,那么您正在处理嵌套在另一个选择中的一个选择。
module choice-case {
yang-version 1.1;
namespace "org:example:choice-case";
prefix "cc";
container top {
choice choice {
case mandatory-choice { // <-- case mentioned in 2nd bullet
choice choice {
mandatory true; // <-- constraint not enforced until f is instantiated
case a-b-c {
leaf a {type string;}
leaf b {type string;}
leaf c {type string;}
}
case d-e {
leaf d {type string;}
leaf e {type string;}
}
}
leaf f {
type string;
}
}
}
}
}
在上面的例子中,强制选择约束没有被强制执行,直到叶子 f
也出现在实例文档中。如果来自 a-b-c
或 d-e
分支的叶节点被实例化,约束也将被强制执行,但条件将始终得到满足。
Is it trying to say that if first non-presence container ancestror is a case node, then the constraint must be enforced if the case has more than one child?
没有。如果实例文档中存在此类子项的实例,则强制执行约束。
Basically, it means that I must enforce the mandatory if the case contains a uses?
强制约束适用于实例文档,不适用于架构 - 架构仅规定约束。 uses
永远不会存在于强制约束被强制执行的上下文中。只有引用分组定义的实例化数据节点可能存在于此类上下文中,并且在强制执行约束时可能会被考虑。