XSD允许双倍减半

时间:2016-04-03 18:41:01

标签: xml xsd attributes double complextype

我希望限制xsd:complexType仅包含0.520之间的值的内容,包括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的解决方案。

2 个答案:

答案 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>