杨模型中的唯一约束

时间:2016-11-16 15:51:02

标签: ietf-netmod-yang

如果我有以下型号

devices {
  device {
     key id;
     interfaces {
        interface {
            key id;
            unique name;        
        }
     }
  }
}

which data is valid or invalid according to yang's key and unique    specification ?
1. devices/device=1/interfaces/interface=1; name = a 
2. devices/device=1/interfaces/interface=1; name = b  // key violation 
3. devices/device=1/interfaces/interface=2; name = a  // unique violation
4. devices/device=2/interfaces/interface=1; name = a  // unique violation ?

假设我存储了'界面'关系表中的对象和标记名称作为唯一列,我不能同时拥有数据行3和4.这是规范的含义吗?

,或者 我可以将唯一性或关键约束解释为唯一的资源路径吗? 如果我这样做,以下数据行不会发生冲突,因为它们是两个不同的资源URL,因为它们属于不同的设备。

devices/device=1/interfaces/interface=2; name = a  
devices/device=2/interfaces/interface=2; name = a  

什么是正确的解释?列表父列表中的全局唯一vs唯一?

2 个答案:

答案 0 :(得分:2)

对于嵌套列表,正确的答案可能是:it is unclear

  

“唯一”约束指定所有的组合值      参数字符串中指定的叶子实例,包括叶子      默认值,必须在所有列表条目实例中是唯一的      所有引用的叶子都存在或具有默认值。

     

RFC7950, Section 7.8.3

     

“list”语句用于定义内部数据节点      架构树。列表节点可以存在于数据中的多个实例中      树。每个这样的实例都称为列表条目。

     

RFC7950, Section 7.8

同一文字出现在RFC6020(YANG版本1)中。

如果您严格解释它,则别无选择:您必须使所有列表条目全局具有唯一name才能满足约束条件。请注意,由于类似的措辞,同样适用于列表的密钥。

目前还不清楚这是否是意图。

RFC6110,它使用现有的XML技术处理基于YANG的实例验证,将其解释为unique within parent,它由同一个工作组创建:它使用preceding-sibling:: XPath轴来强制执行约束,它不会在device/id=2内获取device/id=1接口条目,因为device/id=1/interfaces/interface实例和device/id=2/interfaces/interface实例不是XML文档中的兄弟。

请注意,RFC不会对bug产生免疫力。

答案 1 :(得分:0)

unique的范围与key的范围相同。也就是说,在您的示例中,不同的设备具有单独的接口列表。以相同的方式,设备“ 1”和“ 2”都具有接口“ 1”,设备“ 1”和“ 2”可以具有名称为“ a”的接口。

请注意,与key不同,unique可以引用后代节点。如果要在设备之间使名称唯一,则可以在设备列表中使用unique

list device {
    key 'id';
    unique 'interfaces/interface/name';
    ...
}