[英]How to allow interleaving of unordered elements in XSD?
我必須編寫一個模式,其中嵌套元素的順序無關緊要,並且可以有更多相同類型的嵌套元素。
我嘗試使用xs:all
和xs: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.