2013-02-08 59 views
0

我的XML看起來是這樣的:具有屬性和子元素的元素的XSD表示是什麼?

<root> 
    <elt att1="bla" att2="ble"> 
    <subelt satt1="bli" satt2="1" /> 
    <subelt satt1="blo" satt2="18" /> 
    <subelt satt1="blu" satt2="4" /> 
    </elt> 
</root> 

可能有1到任何ELT。 elt可能有1到任何子帶。 我嘗試使用此實用程序驗證我的模式:http://www.utilities-online.info/xsdvalidation。這是我的xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="elt" minOccurs="1" maxOccurs="unbounded"> 
      <xs:complexType> 
      <xs:attribute name="att1" type="xs:string" use="required"/> 
      <xs:attribute name="att2" type="xs:string" use="required"/> 
      <xs:sequence> 
       <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:attribute name="subatt1" type="xs:string" use="required"/> 
        <xs:attribute name="subatt2" type="xs:integer"/> 
       </xs:complexType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

問題來自具有屬性和子元素(序列)的元素。我嘗試在序列周圍放置一個xs:complexType,但仍然得到一個不同的錯誤。我是一個XML模式的初學者,所以對於我如何格式化它有點困難。你能給我一些關於它的建議嗎?謝謝。

(有可能是在我的文件中有一些錯別字,因爲我改變元素和屬性名)

回答

1

由於歷史的原因,XSD複雜類型首先指定元素的內容模型,然後屬性。所以elt元素的複雜類型應該看起來像這樣:

<xs:complexType> 
    <xs:sequence> 
    <xs:element name="subelt" minOccurs="1" maxOccurs="unbounded"> 
     <xs:complexType> 
     <xs:attribute name="subatt1" type="xs:string" use="required"/> 
     <xs:attribute name="subatt2" type="xs:integer"/> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
    <xs:attribute name="att1" type="xs:string" use="required"/> 
    <xs:attribute name="att2" type="xs:string" use="required"/> 
</xs:complexType> 
+0

我永遠不會猜到。謝謝。 – Cyctemic 2013-02-11 13:58:21

+0

猜測對於某些語言來說效果驚人,對於XSD通常不那麼好。如果我是你,我會得到一本好書和一個好的XSD編輯器。 – 2013-02-11 16:36:55

相關問題