杨模型中的独特约束

unique constraint in yang models

如果我有以下型号

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 ?

假设我将 'interface' 对象存储在关系 table 中并将名称标记为唯一列,我不能同时拥有数据行 3 和 4。这就是规范的意思吗?

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

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

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

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

The "unique" constraint specifies that the combined values of all the leaf instances specified in the argument string, including leafs with default values, MUST be unique within all list entry instances in which all referenced leafs exist or have default values.

RFC7950, Section 7.8.3.

The "list" statement is used to define an interior data node in the schema tree. A list node may exist in multiple instances in the data tree. Each such instance is known as a list entry.

RFC7950, Section 7.8.

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

如果你严格解释它,你别无选择:你必须使所有列表条目在全局范围内具有唯一的 name 才能满足约束。请注意,由于措辞相似,这同样适用于列表的键。

不清楚这是否是本意。

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

请注意,RFC 无法避免错误。

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

的接口

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

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