首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >杨氏模型中如何用叶参实现递归?

杨氏模型中如何用叶参实现递归?
EN

Stack Overflow用户
提问于 2019-10-23 14:15:13
回答 1查看 261关注 0票数 0

我有下面的XML,我想用YANG来建模。XML包含一个节点列表,每个节点包含一个邻居节点列表。

代码语言:javascript
复制
<nodes>
  <node>
    <id>1</id>
    <node>
      <id>2</id>
    </node>
  </node>
  <node>
    <id>3</id>
    <node>
      <id>4</id>
    </node>
  </node>
</nodes>

请在下面找到我试图创建的杨模型。不幸的是,Yang不支持分组中的循环引用。

代码语言:javascript
复制
grouping node {
  list node {
    leaf id {
      type int32;
    }
    uses node;
  }
}

container nodes {
   uses node;
}

我在草案-ietf-netmod-路由-cfg-16ietf邮件存档上看到,模拟递归的一种方法是使用leafref。如何使用分组和leafref对上述xml进行建模?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-25 22:39:33

正如您所说,不支持使用分组的递归。最简单的方法是有一个平面的节点列表,其中每个节点都有一个父节点,引用为nodes。类似于:

代码语言:javascript
复制
container nodes {
  list node {
    key id;
    leaf id { type int32; }
    leaf parent-id {
      type leafref {
        path "../../node/id";
      }
    }
  }
}

对应的XML是:

代码语言:javascript
复制
<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>

您可以做相反的事情,节点引用它的子节点(通过叶列表)而不是它的父节点。

当然,直接递归地使用相同的数据节点确实有效:

代码语言:javascript
复制
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
      }
    }
  }
}

但这不允许无限期的深层次结构。不过,我会避免这种模式,而不是一个干净的模型设计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58524896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档