我无法弄清楚如何制作一个" must"对于使其在列表中唯一的叶子。
这是包含叶子的列表,此叶子可能与此列表中的任何其他叶子的值不同。
代码示例:
list myList {
key name;
leaf name {
type uint32;
}
container myContainer {
leaf myLeaf {
type uint32;
}
must "count(/myList/myContainer/myLeaf = .) > 1" { //Dont know how to create this must function.
error-message "myLeaf needs to be unique in the myList list";
}
}
}
所以如果myList中已存在具有当前值的元素,我希望myLeaf触发错误消息。
答案 0 :(得分:3)
为此目的,您拥有列表的unique
关键字,无需抨击must
表达式。它在其参数中需要一个或多个空格分隔的模式节点标识符。
list myList {
key name;
unique "myContainer/myLeaf";
leaf name {
type uint32;
}
container myContainer {
leaf myLeaf {
type uint32;
}
}
}
如果你真的想要一个must
来处理这个问题(你不应该这样做),你可以这样做:
leaf myLeaf {
must "count(/myList/myContainer/myLeaf[current()=.])=1";
type uint32;
}
current()
XPath函数返回正在检查的叶子(初始上下文节点),而.
代表self::node()
并适用于您选择的任何内容(当前XPath上下文节点集)。
另请注意:must
约束表示断言 - 它必须求值为true()
,否则实例被视为无效。因此,> 1
条件将达到您所要求的相反水平。