0

入力 xml インスタンスを yang データ モデルに対して検証するために、pyang の yang2dsl を使用します。ただし、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 example.xml

エラー: 要素 "param1" はまだ許可されていません。必要な要素「param2」がありません

param1 と param2 は入力 xml ファイルにありますが、YANG モデルと同じ順序ではないため、エラーがスローされます。

誰かがこの問題を解決する方法を教えてもらえますか?

4

1 に答える 1

2

YANG RFC では、rpcs とその他のデータの子要素の順序が異なるようです。rpcs では、順序はモデルで定義されたとおりでなければなりません。他のデータの場合、子要素の順序は重要ではありません。

したがって、あなたの場合、rpc 入力は YANG 標準に従って準備されていないため、修正する必要があります。yang2dsdl ツールは問題なく動作し、「rpcs の順序を無視する」オプションがあるとは思わないでください。

rpc XML マッピング規則

入力パラメータは、子 XML 要素として rpc ノードの XML 要素にエンコードされます。この順序は、"input" ステートメント内で定義されている順序と同じです。

RPC 操作の呼び出しが成功し、出力パラメーターが返されない場合、<rpc-reply> には [RFC4741] で定義されている単一の <ok/> 要素が含まれます。出力パラメーターが返される場合、[RFC4741] で定義されている <rpc-reply> 要素の子要素として、"output" ステートメント内で定義されているのと同じ順序でエンコードされます。

コンテナーの XML マッピング規則

コンテナーの子ノードは、コンテナー要素のサブ要素としてエンコードされます。コンテナーが RPC 入力または出力パラメーターを定義する場合、これらのサブエレメントは、「コンテナー」ステートメント内で定義されているのと同じ順序でエンコードされます。それ以外の場合、サブ要素は任意の順序でエンコードされます。

于 2015-12-31T12:42:59.720 に答える