2012-04-21 82 views
2

是否可以在xsd中使用具有可變元素順序的繼承?是否有可能在變量元素順序中使用xsd繼承?

基本上,像這樣是不行的,因爲「所有」不「擴展」允許入內:

<xs:complexType name="root"> 
    <xs:complexContent> 
      <xs:all> 
       <xs:element name="A" type="xs:string"/> 
       <xs:element name="B" type="xs:string"/> 
      </xs:all> 
    </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="extended"> 
    <xs:complexContent> 
     <xs:extension base="root"> 
      <xs:all> 
       <xs:element name="C" type="xs:string"/> 
       <xs:element name="D" type="xs:string"/> 
      </xs:all> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 

最簡單的解決辦法是隻使用「序列」,而不是「所有」,但於我而言,這是不是一種選擇,因爲該元素的順序不能保證,所以是這樣的:

<obj> 
    <B/> 
    <C/> 
    <D/> 
    <A/> 
</obj> 

會因爲錯誤的元素順序無效,但不應該因爲所有的元素都存在。

回答

1

您的示例在XSD 1.1中合法,它在上週成爲推薦標準。 XSD 1.1在Xerces和Saxon中實施。

+0

我剛剛用Xerces測試版分析器在Java中測試了這個版本,它支持1.1 XML模式,並且得到了和以前一樣的錯誤 - 在哪裏/如何根據XSD 1.1規範測試模式是否合法? – Shajirr 2012-04-23 23:26:11

相關問題