2010-03-23 100 views
2

我剛剛學習XML/XSD,並且正在努力實現模擬文件夾結構的XML模式。 我想到的是爲該文件夾定義一個complexType,該文件夾可以具有表示子文件夾的其他文件夾實例。使用xsd模式驗證器here總是返回模式無效。複雜類型的Xsd遞歸

我試圖限定的complexType前面,然後使用子文件夾的REF關鍵字:

<xs:complexType name="tFolder"> 
<xs:sequence> 
    <xs:element name="Path" type="tFolderType" msdata:Ordinal="0" />      
    <xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" /> 
    <xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded"> 
    <xs:complexType> 
     <xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0"> 
     <xs:extension base="xs:string"> 
     </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
    </xs:element>        
</xs:sequence> 
<xs:attribute name="Type" type="tFolderType" /> 

至於元件本身:

<xs:element name="Folder" type="tFolder" /> 

錯誤由返回驗證者是:

「無法將名稱'文件夾'解析爲(n)'元素聲明'組件。」

,並在該行

<xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" /> 

元素本身中定義複雜類型時出現錯誤產生完全相同的錯誤:

<xs:element name="Folder"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="Path" type="tFolderType" msdata:Ordinal="0" /> 
     <xs:element ref="Folder" minOccurs="0" maxOccurs="unbounded" />       
     <xs:element name="File" nillable="true" minOccurs="0" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:simpleContent msdata:ColumnName="File_Text" msdata:Ordinal="0"> 
      <xs:extension base="xs:string"> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element>        
    </xs:sequence> 
    <xs:attribute name="Type" type="tFolderType" /> 
    </xs:complexType> 
</xs:element> 

我讀過,這種遞歸的應使用參考

任何人都可以告訴我我做錯了什麼嗎?也許xsd驗證器只是錯誤?如果是這樣,有沒有人知道更好的選擇?我利用W3.org網站,以及一個嘗試,但它似乎是離線...

回答

2

我覺得這是做(不使用REF)的方式:

<element name="test" type="tns:TestType"></element> 

<complexType name="TestType"> 
    <sequence> 
     <element name="test" type="tns:TestType"></element> 
    </sequence> 
</complexType> 
+0

爲什麼不應該使用ref? – anhoppe 2016-09-16 13:56:03

+0

我的答案是元素和類型定義之間的常用參考。我個人沒有使用過ref,所以我不能推薦它。你有沒有看到這個答案:http://stackoverflow.com/questions/1448888/what-does-the-ref-attribute-on-an-element-in-an-xsd-do – 2016-09-19 14:34:36