XML模式,用于限制十六进制值的范围(最小值,最大值)

时间:2017-09-15 14:40:41

标签: xml xsd

我想使用模式限制XML文档中十六进制内存地址值的范围。 xml十六进制条目必须是字符串格式,因为它是从GUI文本框中解析出来的,并在使用模式文档验证后直接保存到XML文档中。

我有这个。

XSD:

<xs:simpleType name="memory_address_type">
  <xs:restriction base="xs:string">
    <xs:pattern value="([0-9A-Fa-f])+"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="memory_address"
    type="x:memory_address_type"
    x:use="required"
    x:default="00000000">

XML:

<memory_address>4FFF</memory_address>

我应该如何编写XSD以限制XML条目的范围(最小值和最大值)从40000到47FFF或从0000到FFFF?

2 个答案:

答案 0 :(得分:2)

你差不多完成了,改变你的<xs:simpleType>声明如下:

<xs:simpleType name="memory_address_type">
    <xs:restriction base="xs:hexBinary">
        <xs:pattern value="4[0-9A-F]{3}"></xs:pattern>
    </xs:restriction>
</xs:simpleType>

它将完成这项工作。

答案 1 :(得分:0)

在XML中,十六进制数字的唯一数值数据类型是xsd:hexBinary,但是,这仅允许两个十六进制数字(表示八位字节序列)。因此,描述任意十六进制值的唯一方法是使用带有模式限制的xsd:string数据类型,如问题所示,但字符串不能包含允许值的数值范围,只有数字可以。

当然,您可以逐个定义允许的字符,并尽可能分组(取决于范围),例如4 [A-F0-9] {4}或40-7。但是,为十六进制数字定义正则表达式字符串模式不仅繁琐,而且会丢失相应数字的语义。