簡體   English   中英

楊 model 驗證錯誤。 元素不允許在任何地方,預期的結束標簽

[英]Yang model validation error. Element not allowed anywhere, expected end-tag

我有以下YANG model。 我想根據自定義 xml 數據驗證 model。

module turing-machine {

  namespace "http://example.net/turing-machine";

  prefix "tm";

  description
    "Data model for the Turing Machine.";

  revision 2013-12-27 {
    description
      "Initial revision.";
  }

  /* State data and Configuration */

  container turing-machine {
    list router {
      config false;
      leaf name {
        type string;
      }
      leaf interface {
        type string;
      }
    }
  }
}

我要驗證的 xml 是:

<?xml version="1.0" encoding="utf-8"?>
<!-- file: turing-machine-config.xml -->
<config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <turing-machine xmlns="http://example.net/turing-machine">
    <router>
      <name>A</name>
    </router>
    <router>
      <interface>B</interface>
    </router>
  </turing-machine>
</config>

使用以下命令完成驗證:

yang2dsdl -t config model.yang
trang -I rng -O rnc model-config.rng model-config.rnc
yang2dsdl -s -j -b model -t config -v data.xml

驗證結果為:

Element `router` not allowed anywhere, expected element end-tag.

請注意,由於子元素在路由器內部並不常見,因此我無法使用“config true”,因為我無法選擇密鑰,我認為解決方法是使用 config false。

問題是在 xml 和驗證命令中使用了配置而不是數據。 一個有效的 xml 是:

<?xml version="1.0" encoding="utf-8"?>
<!-- file: turing-machine-config.xml -->
<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <turing-machine xmlns="http://example.net/turing-machine">
    <router>
      <name>A</name>
    </router>
    <router>
      <interface>B</interface>
    </router>
  </turing-machine>
</data>

然后為了驗證必須執行以下命令。 請注意, -t data 是可選的,因為 data 無論如何都是默認選項。

yang2dsdl -t data model.yang
trang -I rng -O rnc model-config.rng model-config.rnc
yang2dsdl -s -j -b model -t data -v data.xml

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM