我遇到了这个问题,我不能为我的生活找到一个简单的解决方案。
我正在尝试编写操作系统列表,其中XML文件包含给定人员具有的操作系统列表。有一个固定的操作系统列表(XP,Vista,Win7,OSX和Ubuntu) 我有以下XML
<operatingSystems>
<operatingSystem name="Windows XP" />
<operatingSystem name="Windows Vista" />
<operatingSystem name="Windows 7" />
<operatingSystem name="OS X" />
<operatingSystem name="Ubuntu Linux" />
</operatingSystems>
<operatingSystems>
元素可以包含0个或多个列出的操作系统。
如此有效的例子是:
<operatingSystems>
<operatingSystem name="Windows XP" />
<operatingSystem name="OS X" />
<operatingSystem name="Ubuntu Linux" />
</operatingSystems>
或
<operatingSystems />
我正在尝试编写一个XSD架构来验证这一点。我的问题是验证<operatingSystems>
元素是否仅包含子<operatingSystem>
元素的最佳方法是什么,其中名称来自给定集,并且每个名称元素不会出现多次。< / p>
无效的例子是:
<operatingSystems>
<operatingSystem name="OS X" />
<operatingSystem name="OS X" />
<operatingSystem name="Ubuntu Linux" />
</operatingSystems>
或
<operatingSystems>
<operatingSystem name="Sun Solaris" />
</operatingSystems>
我试过这个:
<element name="operatingSystems">
<complexType>
<sequence>
<element name="operatingSystem" minOccurs="0" maxOccurs="1">
<complexType>
<attribute name="name" fixed="Windows XP" />
</complexType>
</element>
<element name="operatingSystem" minOccurs="0" maxOccurs="1">
<complexType>
<attribute name="name" fixed="Windows Vista" />
</complexType>
</element>
.......
</sequence>
</complexType>
</element>
但是它忽略了minOccurs为0的事实,如果缺少任何元素操作系统,它会抱怨。
任何帮助都将不胜感激。
由于
答案 0 :(得分:0)
您可以使用xs:unique
元素:
<xs:element name="operatingSystems">
<xs:complexType>
<xs:sequence>
<xs:element ref="operatingSystem" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="oneOperatingSystem">
<xs:selector xpath="operatingSystem"/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:element name="operatingSystem">
<xs:complexType>
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="Windows XP"/>
<xs:enumeration value="Windows Vista"/>
<xs:enumeration value="Windows 7"/>
<xs:enumeration value="OS X"/>
<xs:enumeration value="Ubuntu Linux"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>