簡體   English   中英

在W3C的XML模式語言(XSD)中是否可以允許一系列元素按任何順序排列但仍限制出現次數?

[英]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?

我了解allchoice ,但是它們並不能說明我確實希望某些元素能夠多次出現的情況,例如:

<Root>
    <ThingA/>
    <ThingB/>
    <ThingC/>
    <ThingC/>
    <ThingC/>
</Root>

我可以使用sequence ,但是我更希望允許這些子元素以任意順序排列。 我可以用any ,但是之后我不能有一個以上的ThingC 我可以使用choice ,但是不能將ThingAThingB限制為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模式中的選項是:

  • 添加將輸入XML規范化為特定順序的預處理步驟,然后使用<xs:sequence>
  • 使用<xs:choice> ,並添加額外的驗證(例如使用Schematron)以檢查是否有不超過一個<ThingA><ThingB>
  • 決定修改標記語言中元素的順序

事實證明,第三個通常是最好的選擇。 XML生成器以特定順序輸出元素通常沒有多少成本,而且如果可以提前知道順序,它不僅有助於驗證,而且還有助於XML的使用。

暫無
暫無

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

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