[英]Is it possible in W3C's XML Schema language (XSD) to allow a series of elements to be in any order but still limit occurrences?
我了解all
和choice
,但是它們並不能說明我確實希望某些元素能夠多次出現的情況,例如:
<Root>
<ThingA/>
<ThingB/>
<ThingC/>
<ThingC/>
<ThingC/>
</Root>
我可以使用sequence
,但是我更希望允許這些子元素以任意順序排列。 我可以用any
,但是之后我不能有一個以上的ThingC
。 我可以使用choice
,但是不能將ThingA
和ThingB
限制為0或1。
我想我可能在某處已經讀到這在XSD中是困難的還是不可能的,但是使用RELAX NG可能是可能的。 不幸的是,我不記得我從哪里讀到的。
謝謝你的幫助!
沒錯:您無法在XML Schema中完成您想做的事情,但是您可以在RELAX NG中執行以下操作:
<element name="Root">
<interleave>
<element name="ThingA"><empty /></element>
<element name="ThingB"><empty /></element>
<oneOrMore><element name="ThingC"><empty /></element></oneOrMore>
</interleave>
</element>
您在XML模式中的選項是:
<xs:sequence>
<xs:choice>
,並添加額外的驗證(例如使用Schematron)以檢查是否有不超過一個<ThingA>
或<ThingB>
事實證明,第三個通常是最好的選擇。 XML生成器以特定順序輸出元素通常沒有多少成本,而且如果可以提前知道順序,它不僅有助於驗證,而且還有助於XML的使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.