如何定义 XSD 范围或单个数字的限制?

How to define XSD Restrictions for a range or a single number?

我有一个 XML 字段,它可以是 -1,或者介于 0-100.[=13 之间=]

如果我想定义一个范围,我会简单地做:

<xsd:restriction base="xsd:double">
    <xsd:minInclusive value="0.0"/>
    <xsd:maxInclusive value="100.0"/>
</xsd:restriction>

如果我想定义一个特定的有效数字,我可以这样做:

<xsd:restriction base="xsd:double">
    <xsd:enumeration value="-1.0"></xsd:enumeration>
</xsd:restriction>

但我如何将它们组合起来,即一个数字,范围内的一个数字?

您可以在两个分别声明值和范围的 simpleType 声明中执行此操作,如下所示:

<xsd:simpleType name="rangeAndValue">
    <xsd:union memberTypes="range">
        <xsd:simpleType>
            <xsd:restriction base="xsd:double">
                <xsd:enumeration value="-1.0" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:union>
</xsd:simpleType>

<xsd:simpleType name="range">
    <xsd:restriction base="xsd:double">
        <xsd:minInclusive value="0.0"/>
        <xsd:maxInclusive value="100.0"/>
    </xsd:restriction>
</xsd:simpleType>

要将它与元素一起使用,请设置类型属性:

<xsd:element name="elem" type="rangeAndValue" />

这应该可以达到你想要的效果。


如果您想添加另一个范围,可以将其添加到 memberTypes 属性,如下所示:

<xsd:union memberTypes="range range2">

例如,这个 range2 simpleType:

<xsd:simpleType name="range2">
    <xsd:restriction base="xsd:double">
        <xsd:minInclusive value="200.0"/>
        <xsd:maxInclusive value="300.0"/>
    </xsd:restriction>
</xsd:simpleType>