【发布时间】:2013-12-13 17:26:14
【问题描述】:
我正在尝试为接受图像的服务器编写 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>
【问题讨论】: