我正在尝试为接受图像的服务器编写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
同意,这是我的一个概念性错误 –