如何定义 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>
我有一个 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>