我正在嘗試爲接受圖像的服務器編寫XML架構。圖像應該全部有一個面具或沒有應該。具有相同元素的XML架構子代
我想產生這樣的XML:
<?xml version="1.0" encoding="utf-8"?>
<FIVR>
<meal>
<media>
<image2D filename="filename1">
<mask filename="filename1" />
</image2D>
<image2D filename="filename2">
<mask filename="filename1" />
</image2D>
<image2D filename="filename3">
<mask filename="filename1" />
</image2D>
<image2D filename="filename4">
<mask filename="filename1" />
</image2D>
<image2D filename="filename5">
<mask filename="filename1" />
</image2D>
</media>
</meal>
</FIVR>
或
<?xml version="1.0" encoding="utf-8"?>
<FIVR>
<meal>
<media>
<image2D filename="filename1">
</image2D>
<image2D filename="filename2">
</image2D>
<image2D filename="filename3">
</image2D>
<image2D filename="filename4">
</image2D>
<image2D filename="filename5">
</image2D>
</media>
</meal>
</FIVR>
但是,如果一些image2D元素有一個面具子元素,但別人不,驗證應該失敗。例如,應拒絕以下內容:
<?xml version="1.0" encoding="utf-8"?>
<FIVR>
<meal>
<media>
<image2D filename="filename1">
</image2D>
<image2D filename="filename2">
<mask filename="filename1" />
</image2D>
<image2D filename="filename3">
<mask filename="filename1" />
</image2D>
<image2D filename="filename4">
</image2D>
<image2D filename="filename5">
</image2D>
</media>
</meal>
</FIVR>
我可以使用XSD模式來表達它嗎?
架構我已經現在看起來是這樣的:
<xs:element name="FIVR">
<xs:complexType>
<xs:sequence>
<xs:element name="meal" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="media" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:choice>
<xs:element name="image2D" minOccurs="5" maxOccurs="5" >
<xs:complexType>
<xs:all minOccurs="0">
<xs:element name="mask">
<xs:complexType>
<xs:attribute name="filename" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="filename" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
如果OP有以這種方式重新設計的餘地,我更喜歡這種方法,而不是我的Schema 1.1'xs:assert'答案。 +1 – kjhughes
同意,這是我的一個概念性錯誤 –