XML架构来限制十六进制值的范围(最小值、最大值)
我想使用模式限制XML文档中十六进制内存地址值的范围。xml十六进制条目必须是字符串格式,因为它是从GUI文本框解析的,并在使用模式文档验证后直接保存到xml文档中 我有这个 XSD:XML架构来限制十六进制值的范围(最小值、最大值),xml,xsd,Xml,Xsd,我想使用模式限制XML文档中十六进制内存地址值的范围。xml十六进制条目必须是字符串格式,因为它是从GUI文本框解析的,并在使用模式文档验证后直接保存到xml文档中 我有这个 XSD: XML: 4FFF 我应该如何编写XSD以限制XML条目的范围(最小值和最大值)为40000到47FFF或0000到FFFF?您几乎完成了,请更改声明如下: <xs:simpleType name="memory_address_type"> <xs:restriction bas
XML:
4FFF
我应该如何编写XSD以限制XML条目的范围(最小值和最大值)为40000到47FFF或0000到FFFF?您几乎完成了,请更改
声明如下:
<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>
在XML中,十六进制数的唯一数字数据类型是xsd:hexBinary,但是,这只允许两个十六进制数字(表示八位字节序列)。因此,描述任意十六进制值的唯一方法是使用xsd:string数据类型和模式限制,如问题中所示,但是字符串不能具有允许值的数字范围,只能使用数字
当然,您可以一个接一个地定义允许的字符,并且尽可能分组(取决于范围),例如4[A-F0-9]{4}或40-7。然而,为十六进制数字定义正则表达式字符串模式不仅单调乏味,而且会丢失相应数字的语义。使用正则表达式定义任意数字范围(例如0x20到0x3FF)的一般问题当然要困难得多,但我似乎记得读过这样的文章:这总是可能的。是的。这里的问题有点简单,但不是一般情况。正如Michael所说,我正在寻找一个更通用的解决方案来涵盖任意数字范围。我可能需要重新表述我最初的问题。你不想把这个模式改为:?现在,假设第一个数字始终为“4”,即您只覆盖范围[4000-4FFF]。我想您可能希望在这里允许[0000-4FFF]。
<memory_address>4FFF</memory_address>
<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>