我有这样的xsd类型
<xsd:simpleType name="carsEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Seat"/>
<xsd:enumeration value="Opel"/>
</xsd:restriction>
</xsd:simpleType>
Run Code Online (Sandbox Code Playgroud)
现在我可以这样使用它 - <xsd:attribute name="carModel" type="carsEnum"/>
我如何重建carEnum以使用任何其他字符串?
举个例子 -
< ... carModel="Seat"/>
< ... carModel="Some string"/>
< ... carModel="Opel"/>
Run Code Online (Sandbox Code Playgroud)
因为我可以像往常一样制作类型carsEnum String,但是在IDE Idea中使用这样的构造相当舒服,因为它显示了工具提示.
如果我总结一下你的问题我理解的是你想要维护一个元素汽车的可能值列表,也想接受出现在有界列表之外的任何值.这可以在XSD中实现UNION.我用下面的例子说明了它.
示例XML:
<?xml version="1.0" encoding="utf-8"?>
<cars>ssd</cars>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
在上面的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>
Run Code Online (Sandbox Code Playgroud)
所以可能的价值观 Seat, Opel, "Any string but no Number", "Any string but no special char"
更换
`<xs:pattern value="[A-Za-z]*"/>`
Run Code Online (Sandbox Code Playgroud)
通过
<xs:pattern value="[A-Za-z]+"/>
Run Code Online (Sandbox Code Playgroud)
不允许空字符串.这是一种重新定义元素的方法..不仅仅是坚持枚举列表.
现在你的模式也有枚举列表.希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
13720 次 |
| 最近记录: |