如果我总结您的问题,我的理解是您想要维护一个元素汽车的可能值列表,还想要接受出现在该有界列表之外的任何值。这可以在 XSD 中使用UNION
. 我用下面的例子来说明它。
示例 XML:
<?xml version="1.0" encoding="utf-8"?>
<cars>ssd</cars>
XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="cars" type="carsType"/>
<xs:simpleType name="carsType">
<xs:union memberTypes="carsEnum carsAnyString"/>
</xs:simpleType>
<xs:simpleType name="carsEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Seat"/>
<xs:enumeration value="Opel"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="carsAnyString">
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:schema>
在上面的 XSD 中,我使用了 CAR 的多个定义,一次作为枚举列表,一次作为任何字符串。定义结合这两者的 UNION 类型将type
用于汽车。
所以<cars
可以有如下值:Seat、Opel、anyOtherCar、AnyString2 ..
我还想提一种控制ANY STRING
. 以上 XSD 可以接受任何字符串,即使是特殊字符和数字。我们可以通过restriction pattern
仅添加 Alpha 字符来限制这一点。下面是 XSD 代码:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="cars" type="carsType"/>
<xs:simpleType name="carsType">
<xs:union memberTypes="carsEnum carsAnyAlphaString"/>
</xs:simpleType>
<xs:simpleType name="carsEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Seat"/>
<xs:enumeration value="Opel"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="carsAnyAlphaString">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z]*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
所以可能的值可以是Seat, Opel, "Any string but no Number", "Any string but no special char"
更换
`<xs:pattern value="[A-Za-z]*"/>`
经过
<xs:pattern value="[A-Za-z]+"/>
不允许空字符串。这是一种重新定义元素的方法.. 不只是坚持枚举列表。
现在你也有了枚举列表的模式。希望能帮助到你。