XML 架构检查失败,模式匹配



我在XSD架构中有这样的样板代码。

<xs:attribute name="version" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="1.1"/>
<xs:enumeration value="1.2"/>
<xs:enumeration value="1.3"/>
<xs:enumeration value="1.4"/>
<xs:enumeration value="1.5"/>
<xs:enumeration value="1.6"/>
<xs:enumeration value="1.7"/>
<xs:enumeration value="1.8"/>
<xs:enumeration value="1.9"/>
<xs:enumeration value="1.10"/>
<xs:enumeration value="1.11"/>
<xs:enumeration value="1.12"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>

我只想用以下模式替换。

<xs:pattern value="1.[1-9]|[1-1][0-2]"/>

它通过 1.2 或 1.6,但失败并显示"1.10"。 与 lxml.etree.文档无效: 元素 'sfd', 属性 'version': [facet 'pattern'] 模式 '1'不接受值 '1.10'。[1-9]|[1-1][0-2]'

我想 [1-9]|[1-1][0-2] 表示 1-9 和 10-12 之间的范围。

问题出在哪里?

您的正则表达式(请参阅其演示(匹配的字符串

  • 1.[1-9]- 以1开头,然后具有除换行符字符和从19的数字以外的任何字符
  • |- 或
  • [1-1][0-2]- 以1开头(注意[1-1]=1(,然后从02的数字。

您可以使用

<xs:pattern value="1.(1[0-2]|[1-9])"/>

请参阅正则表达式演示。请记住,XSD 架构正则表达式模式必须与整个字符串匹配,以下是它匹配的内容:

  • 1- 匹配1
  • .- 匹配文字点(没有转义符号的.匹配除换行符之外的任何字符(
  • (1[0-2]|[1-9])- 捕获组(注意 XSD 架构正则表达式不支持非捕获组(匹配101112或从19范围的数字。

尝试使用括号:

<xs:pattern value="1.([1-9]|1[0-2])"/>

请注意转义的".",否则您将匹配 1$12 之类的内容。我认为[1-1]可能是允许的,但1似乎更简单。

最新更新