我想使用模式限制XML文档中十六进制内存地址值的范围。 xml十六进制条目必须是字符串格式,因为它是从GUI文本框中解析出来的,并在使用模式文档验证后直接保存到XML文档中。
我有这个。
<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">
<memory_address>4FFF</memory_address>
我应该如何编写XSD以限制XML条目的范围(最小值和最大值)从40000到47FFF或从0000到FFFF?
答案 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。但是,为十六进制数字定义正则表达式字符串模式不仅繁琐,而且会丢失相应数字的语义。