我有下面的XML,我想用YANG来建模。XML包含一个节点列表,每个节点包含一个邻居节点列表。
<nodes>
<node>
<id>1</id>
<node>
<id>2</id>
</node>
</node>
<node>
<id>3</id>
<node>
<id>4</id>
</node>
</node>
</nodes>请在下面找到我试图创建的杨模型。不幸的是,Yang不支持分组中的循环引用。
grouping node {
list node {
leaf id {
type int32;
}
uses node;
}
}
container nodes {
uses node;
}我在草案-ietf-netmod-路由-cfg-16和ietf邮件存档上看到,模拟递归的一种方法是使用leafref。如何使用分组和leafref对上述xml进行建模?
发布于 2019-10-25 22:39:33
正如您所说,不支持使用分组的递归。最简单的方法是有一个平面的节点列表,其中每个节点都有一个父节点,引用为nodes。类似于:
container nodes {
list node {
key id;
leaf id { type int32; }
leaf parent-id {
type leafref {
path "../../node/id";
}
}
}
}对应的XML是:
<nodes>
<node>
<id>1</id>
<node>
<node>
<id>2</id>
<parent-id>1</parent-id>
</node>
<node>
<id>3</id>
<node>
<node>
<id>4</id>
<parent-id>3</parent-id>
</node>
</nodes>您可以做相反的事情,节点引用它的子节点(通过叶列表)而不是它的父节点。
当然,直接递归地使用相同的数据节点确实有效:
container nodes {
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
list node {
key id;
leaf id { type int32; }
// and so on
}
}
}
}但这不允许无限期的深层次结构。不过,我会避免这种模式,而不是一个干净的模型设计。
https://stackoverflow.com/questions/58524896
复制相似问题