杨-强制性选择

时间:2018-10-05 13:22:15

标签: ietf-netmod-yang

来自RFC 7950#7.9.4

  

[强制性]约束的行为取决于选择项的类型      模式树中不是不存在的最接近祖先节点(请参见第7.5.1节):

     
      
  • 如果架构树中不存在此类祖先,则会强制执行约束。

  •   
  • 否则,如果此祖先是案例节点,则如果存在该案例中的任何其他节点,则将强制执行约束。

  •   
  • 否则,如果祖先节点存在,则强制实施。

  •   

现在:第一点和最后一点似乎很简单,但是我无法获得第二点。

是否要说如果第一个non-presence container祖先是一个case节点,那么如果case有多个子节点,则必须强制执行约束?基本上,这意味着如果case包含uses,我必须强制执行强制性命令?

1 个答案:

答案 0 :(得分:1)

强制性选择意味着有效的实例文档中必须确切存在一个案例分支(案例的数据节点后代)-RFC用术语“有效数据”来指代该分支。第二个项目符号是一个例外。

第二个项目符号适用于嵌套选择-如果选择的祖先是案例节点,则您正在处理嵌套在另一个选择中的选择。

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-cd-e分支中的叶节点,则也将强制执行约束,但始终满足条件。

  

是否要说如果第一个不存在的容器祖先是一个案例节点,那么如果该案例有多个孩子,那么必须强制执行约束?

不。如果实例文档中有此类子实例,则强制执行约束。

  

基本上,这意味着如果案件包含使用权,我必须强制执行强制性命令?

强制性约束适用于实例文档,而不适用于架构-架构仅指示约束。 uses在强制实施约束的环境中将永远不存在。在这种情况下,可能仅存在由引用的分组定义的实例化数据节点,并且在执行约束时可以考虑该数据节点。