我有一个看起来像这样的XML。
<c>
<node>
<id1>value</id1>
<id2>value</id2>
</node>
<node>
<id3>value</id3>
<id4>value</id4>
</node>
</c>
该列表如何用YANG建模?这里的问题是每个列表都需要一个键。我试图做的:
container c {
list node {
key ""; /* What is the key? */
leaf id1 {
type string;
}
leaf id2{
type string;
}
leaf id3 {
type string;
}
leaf id4 {
type string;
}
}
}
答案 0 :(得分:1)
在YANG中没有很好的建模方法。就像您说的那样,每个(配置为true)列表都需要一个键。将叶子指定为键使该叶子成为必选,因此您不能像示例中那样真正拥有实例文档-如果将所有四个叶子都设置为键(可以有多个列表键),则每个节点都具有使其全部有效并且仅将其中几个用作键,对于您的示例也不起作用。
请注意,配置错误列表不需要任何键。如果您不对配置(或与NETCONF / RESTCONF相关的数据)进行建模,那可能就是您的出路。
list node {
config false;
// ...
}
否则,您别无选择-您需要引入另一个叶子作为条目的ID。
无论哪种方式,您都可能会利用unique
语句(我假设是基于叶子的名称)来使列表中的条目唯一。它的工作方式与key
类似,但是如果您使用元素,则不需要在实例文档中出现-它仅要求确实出现在实例中的节点组合在列表的所有条目中都是唯一的。
list node {
config false;
unique "id1 id2 id3 id4";
// ...
}
注意:还有一个类似的answered question,其中包含更多详细信息。