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網站,以及一個嘗試,但它似乎是離線...
爲什麼不應該使用ref? – anhoppe 2016-09-16 13:56:03
我的答案是元素和類型定義之間的常用參考。我個人沒有使用過ref,所以我不能推薦它。你有沒有看到這個答案:http://stackoverflow.com/questions/1448888/what-does-the-ref-attribute-on-an-element-in-an-xsd-do – 2016-09-19 14:34:36