簡體   English   中英

根據 XSD 架構驗證 XML

[英]Validate XML against XSD schema

我有一個 XML 文件來驗證 XSD 模式。 這就是我的 XML 文件的樣子。

<service>
  <id>myid</id>
  <name>myname</name>
  <arg>arg1</arg>
  <arg>arg2</arg>
</service>

這些是驗證規則。

  • idname是唯一且必需的。 這些元素不能超過一個。
  • arg可以重復
  • 順序無關緊要。 元素可以按任何順序排列。

這是我為此創建的 XSD 文件。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="service">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">

        <xs:element type="xs:string" name="id" minOccurs="1" maxOccurs="1"/>
        <xs:element type="xs:string" name="name" minOccurs="1" maxOccurs="1"/>
        <xs:element type="xs:string" name="arg" minOccurs="1" maxOccurs="unbounded"/>

        </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

當我嘗試使用此 ( https://www.freeformatter.com/xml-validator-xsd.html ) 在線驗證器進行驗證時,此方法有效。 但它現在顯示任何錯誤,即使有兩個id元素或沒有id元素。

<service>
  <id>myid</id>
  <id>anotherid</id>
  <name>myname</name>
  <arg>arg1</arg>
  <arg>arg2</arg>
</service>

這應該是錯誤的,因為有兩個id元素。 如何在choice元素中同時擁有可重復和不可重復的元素。 Sequence在這里是不可能的,因為順序無關緊要。

<service>
  <name>myname</name>
  <arg>arg1</arg>
  <arg>arg2</arg>
</service>

這應該會失敗,因為id元素不存在。

你必須做出選擇。 如果允許元素以任何順序排列(使用 UnorderedSet),則不允許設置 maxOccurs > 1。如果使用重復選擇,則無法驗證出現次數,因為每次出現都匹配標簽的一次出現的選擇。 但是如果你使用一個序列,你必須接受標簽必須以正確的順序排列。 幾乎每個人都接受 XML 中有序標簽的需要——盡管這很不方便。

暫無
暫無

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

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