簡體   English   中英

如何允許 XSD 中的無序元素交錯?

[英]How to allow interleaving of unordered elements in XSD?

我必須編寫一個模式,其中嵌套元素的順序無關緊要,並且可以有更多相同類型的嵌套元素。

我嘗試使用xs:allxs:sequence ,但它不起作用。

這個 XML 應該是有效的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="test.xsd">
    <elementB>B</elementB>
    <elementA>A</elementA>
    <elementA>A</elementA>
</test>

這是我嘗試過的 XSD:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="test">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="elementA" type="xs:string" 
                            minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="elementB" type="xs:string" 
                            minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

第一個 XSD 架構在排序上有問題。

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           vc:minVersion="1.1">
    <xs:element name="test">
        <xs:complexType>
            <xs:all>
                <xs:element name="elementA" type="xs:string" 
                            minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="elementB" type="xs:string" 
                            minOccurs="0" maxOccurs="unbounded"/>
            </xs:all>
        </xs:complexType>
    </xs:element>
</xs:schema>

第二個 XSD 看起來很有希望,但我無法設置 Intellij 以將其正確用於 XML。 (我在這里切換使用 XML Schema 1.1 File->Settings->Languages & Frameworks->Schemas and DTDs->Default XML Schemas )我的 IntelliJ 版本是 2019.2.3。

顯然,XSD 的xs:sequence版本強加了一個排序。

XSD 的xs:all版本使用xs:all/xs:element[@maxOccurs="unbounded"] ,這需要 XSD 1.1。

XML Oxygen 成功驗證了您的 XML 與您的xs:all XSD。

IntelliJ 支持 XSD 1.1,但它可能不完整,或者這里的規范不明確——現在沒有時間調查。

但是,如果您的實際案例與您發布的案例一樣簡單,您可以使用xs:choice來實現訂單獨立性,而不依賴於 XSD 1.1:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
  vc:minVersion="1.0">
  <xs:element name="test">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="elementA" type="xs:string"/>
        <xs:element name="elementB" type="xs:string"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

希望這將使您能夠解決任何可能阻礙您的 IntelliJ 問題。

你的第二個模式(“有前途的”一個)對我有用。 在 oXygen 中嘗試過,效果很好。 恐怕我不知道如何為 XSD 1.1 驗證設置 IntelliJ。

如果固定集合中的任何元素(A、B、C...)可以出現任意次數,那么您不需要 XSD 1.1:您可以將內容 Z20F35E630DAF44DBFA4C3F68F539D

<xs:choice minOccurs="0" maxOccurs="unbounded">
  <xs:element name="A">
  <xs:element name="B">
  <xs:element name="C">
</xs:choice>

暫無
暫無

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

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