【问题标题】:How to make yang2dsl ignore the order of input parameters during yang validation?如何让 yang2dsl 在 yang 验证期间忽略输入参数的顺序?
【发布时间】:2015-09-23 01:35:32
【问题描述】:

我使用 pyang 的 yang2dsl 针对 yang 数据模型验证输入 xml 实例。但是,当 xml 实例中的参数顺序与 yang 模型中的不同时,它会引发错误。有没有一个选项可以让它忽略参数的顺序? 这是我的 xml 代码(example.xml):

<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="100">
<action>
<param1>aaa</param1>
<param2>bbb</param2>
</action>
</rpc>

这是我的 YANG 模型,example.yang(为简洁起见,我只粘贴了与之比较的部分):

module example {
    rpc action {
       input {
           leaf param2 {
               type string
           }
           leaf param1 {
               type string
           }
    }
}

yang2dsdl -t rpc example.yang 架构已成功生成。

yang2dsdl -s -j -b 例子 -t rpc -v 例子.xml

错误:元素“param1”还不允许;缺少必需元素“param2”

虽然 param1 和 param2 在输入的 xml 文件中,但由于它们与 YANG 模型中的顺序不同,因此会引发错误。

谁能告诉我如何解决这个问题?

【问题讨论】:

    标签: python xml data-modeling xml-rpc ietf-netmod-yang


    【解决方案1】:

    YANG RFC 对 RPC 和其他数据的子元素顺序似乎有所不同。在 rpcs 中,顺序必须与模型中定义的完全相同。对于其他数据,子元素的顺序并不重要。

    因此,在您的情况下,rpc 输入未根据 YANG 标准准备,应该修复。 yang2dsdl 工具工作得很好,你不应该期望有任何“忽略 RPC 的顺序”选项。

    rpc XML Mapping Rules

    输入参数被编码为 rpc 节点的 XML 元素的子 XML 元素,与它们在“输入”语句中定义的顺序相同

    如果 RPC 操作调用成功,并且没有返回输出参数,则 包含 [RFC4741] 中定义的单个 元素。如果返回输出参数,它们将被编码为 [RFC4741] 中定义的 元素的子元素,按照它们在“输出”语句中定义的顺序。。 p>

    container XML Mapping Rules

    容器的子节点被编码为容器元素的子元素。 如果容器定义了 RPC 输入或输出参数,这些子元素的编码顺序与它们在“容器”语句中定义的顺序相同。否则,子元素将按任意顺序编码。

    【讨论】:

    • 请注意,这显然与 JSON encoding for YANG data (draft) 中指定的内容不同,后者声称符合 I-JSON。并且 I-JSON 明确表示:“I-JSON 消息中对象成员的顺序不会改变 I-JSON 消息的含义。”
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多