工作不是那么困难。 我非常肯定有一个更优雅的解决方案, 但这样会奏效。 唯一的事情是, 我们并不真的需要具体的例子, 而是创建特殊类型来与这些值匹配。 我非常肯定有办法可以不设置类型限制, 固定值, 但我无法记住属性, 我不知道它是否与三个值的替代值相配合 。
这里 xsd 是一个 xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/FruitSchema"
xmlns:fr="http://www.example.org/FruitSchema" xmlns:tns="http://www.example.org/FruitSchema"
elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="fruits">
<xs:complexType>
<xs:sequence>
<xs:element ref="fr:common" minOccurs="1" maxOccurs="1"/>
<xs:element ref="fr:exotic" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="fruit">
<xs:complexType>
<xs:sequence>
<xs:element ref="fr:name" />
<xs:element ref="fr:supplier" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:NCName" />
<xs:element name="supplier" type="xs:string" />
<xs:element name="exotic">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="fr:fruit" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="common">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="fruit">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="name" type="fr:CommonFruitType" />
<xs:element ref="fr:supplier" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="CommonFruitType">
<xs:restriction base="xs:NCName">
<xs:enumeration value="apple" />
<xs:enumeration value="orange" />
<xs:enumeration value="banana" />
</xs:restriction>
</xs:simpleType>
在此举一个无法验证的示例 。
<?xml version="1.0" encoding="UTF-8"?>
<fruits xmlns="http://www.example.org/FruitSchema" xmlns:fr="http://www.example.org/FruitSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/FruitSchema FruitSchema.xsd">
<common>
<!-- the common section should always include fruits with these names -->
<fruit>
<name>apple</name>
<supplier>Shady Orchard</supplier>
</fruit>
<fruit>
<name>apple</name>
<supplier>Shady Orchard</supplier>
</fruit>
<fruit>
<name>orange</name>
<supplier>Florida Orange Co.</supplier>
</fruit>
<fruit>
<name>banana</name>
<supplier>Bananaland</supplier>
</fruit>
<fruit>
<name>kiwano</name>
<supplier>Fancy fruits</supplier>
</fruit>
</common>
<exotic>
<fruit>
<name>kiwano</name>
<supplier>Fancy fruits</supplier>
</fruit>
<fruit>
<name>rambutan</name>
<supplier>Indonesia fruit Co.</supplier>
</fruit>
<!-- the list goes on... -->
</exotic>
</fruits>
它只验证common
中的水果,即苹果、橙子或香蕉,不论供应商是什么。