微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

YANG和Choice-XML是什么样的?

如何解决YANG和Choice-XML是什么样的?

我正在尝试找出正确的语法,以实现将yang模型中的choice字段实现为其对应的配置xml。不幸的是,RFC 6020和其他与Yang有关的网页中的文档似乎并未显示如何在与Yang模型相关的实际XML中使用choice字段。

例如,这是我的YANG模型:

container RMBN {
    container PacketoperationConf {
        list RuleID {
            key id;
            leaf id {
                type int32;
            }
            leaf priority { 
                type int32; 
            }
            leaf name { 
                type string; 
            }
            choice type {
                case flow {
                    list action {
                        key order;
                        uses rmbn:action;
                    }
                    container match {
                        uses rmbn:match;
                    }
                }
                case function {
                    container function {
                        
                    }
                }
            }
        }
        ...

此容器有相应的XML:

<?xml version="1.0" encoding="UTF-8" ?>
<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <edit-config>
        <target>
            <running />
        </target>
        <config>
            <RMBN xmlns="urn:com:tug:rmbn-full">
                <PacketoperationConf>
                    <RuleID>
                        <id>101</id>
                        <type>
                            <flow>
                                <action>
                                    <order>1</order>
                                    <set-dl-src-action>
                                        <address>01:02:03:04:05:06</address>
                                    </set-dl-src-action>
                                </action>
                            </flow>
                        </type>
                    </RuleID>
                </PacketoperationConf>
            </RMBN>
        </config>
    </edit-config>
</rpc>

但是当我通过yang2dsdl运行此命令时,出现以下错误

$ yang2dsdl -t edit-config -v rmbn-full-test-1.xml -d /tmp rmbn-full.yang
== Generating RELAX NG schema '/tmp/rmbn-full-edit-config.rng'
Done.

== Validating grammar and datatypes ...
rmbn-full-test-1.xml:13: element type: Relax-NG validity error : Element RuleID has extra content: type
Relax-NG validity error : Extra element RuleID in interleave
rmbn-full-test-1.xml:11: element RuleID: Relax-NG validity error : Element PacketoperationConf Failed to validate content
rmbn-full-test-1.xml fails to validate

因此发生错误是因为它不知道如何处理type元素。 type元素是yang模型中我选择的部分的名称

我已经尝试过各种安排,但是都没有奏效。我也无法在SOF或Google上找到关于以XML实现的选择示例的任何信息。

解决方法

大小写和选择都是RFC所指的架构节点,但它们也不是数据节点-可以实例化的架构节点。因此,选择节点和案例节点永远不会出现在有效的实例文档中,它们仅对什么是有效的实例文档施加了限制。

在您的情况下,这意味着可以在以下选项之间进行可选(XOR):

  • 包含<action>(列表)和/或<match>(容器)的(逻辑)元素组,
  • <function>容器。

换句话说,如果<action>出现在实例文档中,则<match>也可能出现(反之亦然),但是<function>可能不会出现。

这是有效的文档(未经过实际测试)。

<?xml version="1.0" encoding="UTF-8" ?>
<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <edit-config>
        <target>
            <running />
        </target>
        <config>
            <RMBN xmlns="urn:com:tug:rmbn-full">
                <PacketOperationConf>
                    <RuleID>
                        <id>101</id>
                        <action>
                            <order>1</order>
                            <set-dl-src-action>
                                <address>01:02:03:04:05:06</address>
                            </set-dl-src-action>
                        </action>
                    </RuleID>
                </PacketOperationConf>
            </RMBN>
        </config>
    </edit-config>
</rpc>

下面是来自RFC6020(YANG版本1.0)的一些文本,因为您专门询问了该版本(Section 7.9)。

“ choice”语句定义了一组备选方案,其中只有一个 可能随时存在。参数是一个标识符, 然后是包含详细选择的部分子陈述 信息。该标识符用于标识中的选择节点 模式树。 数据树中不存在选择节点。

选择项由多个分支组成,用“ case”定义 子陈述。每个分支包含许多子节点。的 最多一个选择分支的节点存在于同一节点 时间。

“ case”语句用于定义选择的分支。它 以标识符作为参数,后跟一个 包含详细案例信息的子陈述。

标识符用于标识架构树中的案例节点。 案例节点在数据树中不存在。

在“ case”语句中,“ anyxml”,“ choice”,“ container”, “ leaf”,“ list”,“ leaf-list”和“ uses”语句可用于 定义案例节点的子节点。所有这些的标识符 子节点在所有情况下都必须是唯一的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?