如果我有以下型号
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唯一?
答案 0 :(得分:2)
对于嵌套列表,正确的答案可能是:it is unclear
。
“唯一”约束指定所有的组合值 参数字符串中指定的叶子实例,包括叶子 默认值,必须在所有列表条目实例中是唯一的 所有引用的叶子都存在或具有默认值。
“list”语句用于定义内部数据节点 架构树。列表节点可以存在于数据中的多个实例中 树。每个这样的实例都称为列表条目。
同一文字出现在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';
...
}