Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML架构来限制十六进制值的范围(最小值、最大值)_Xml_Xsd - Fatal编程技术网

XML架构来限制十六进制值的范围(最小值、最大值)

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文档中十六进制内存地址值的范围。xml十六进制条目必须是字符串格式,因为它是从GUI文本框解析的,并在使用模式文档验证后直接保存到xml文档中

我有这个

XSD:

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>