我希望限制xsd:complexType
仅包含0.5
到20
之间的值的内容,包括0.5
。这意味着数字:
0.5 1 1.5 2 2.5 3 3.5 .. up to 20
我的代码在这里:
<xsd:complexType name="skillType">
<xsd:simpleContent>
<xsd:extension base="skillHalfDoubleType">
<xsd:attribute name="special">
<!-- Irrelevant attribute -->
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:simpleType name="skillHalfDoubleType">
<xsd:restriction base="xsd:double">
<!-- What more? -->
</xsd:restriction>
</xsd:simpleType>
可以使用xsd:string
上应用的正则表达式执行此操作,但我会查找限制xsd:double
的解决方案。
答案 0 :(得分:3)
一个简单(尽管详细)的解决方案是使用枚举:
ID extends Serializable
更优雅的解决方案是使用结合min和maxInclusive的模式:
<xs:enumerationvalue="0.5"/>
<xs:enumerationvalue="1"/>
<xs:enumerationvalue="1.5"/>
...
后者允许更容易的范围适应,但可能会混淆一些模式意识的建议提供者,正如C. M. Sperberg-McQueen所指出的那样。
答案 1 :(得分:2)
使用XML Schema 1.1,您可以编写一个限制值
的断言<xs:simpleType name="skillHalfDoubleType">
<xs:restriction base="xs:double">
<xs:assertion test="$value = (for $d in 1 to 40 return 0.5 * $d)"></xs:assertion>
</xs:restriction>
</xs:simpleType>