繁体   English   中英

YANG 和 Choice - XML 是什么样子的?

[英]YANG and Choice - what does the XML look like?

我试图找出将choice字段从 yang model 实现到其相应配置 xml 的正确语法。不幸的是,RFC 6020 和其他与 Yang 相关的 web 页面中的文档似乎没有显示如何在与 Yang model 通话的实际 XML。

例如,这是我的 YANG model:

container MYMODEL {
    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 mymodel:action;
                    }
                    container match {
                        uses mymodel: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>
            <MYMODEL xmlns="urn:com:tug:mymodel">
                <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>
            </MYMODEL>
        </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 model中选择的部分的名称。

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

case 和 choice 都是 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)中的一些文本,因为您专门询问了该版本(第 7.9 节)。

“选择”语句定义了一组备选方案,在任何时候只能存在其中一个。 参数是一个标识符,后跟一个包含详细选择信息的子语句块。 标识符用于标识模式树中的选择节点。 数据树中不存在选择节点。

选择由多个分支组成,用“case”子语句定义。 每个分支包含多个子节点。 来自至多一个选择分支的节点同时存在。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM