我正在根据其他人的 XSD 规范创建一个 XML 文件,但我就是不知道为什么它不验证。
这是规则:
<xs:simpleType name="NonEmptyStringType">
<xs:restriction base="xs:string">
<xs:minLength value="1" />
<xs:pattern value="[^\t\n\r]*[^\s][^\t\n\r]*" />
</xs:restriction>
</xs:simpleType>
我在其中阅读模式如下:
[^\t\n\r]*
匹配任何不是制表符、换行符或空格的内容返回 0 次或更多次[^\s]
匹配任何不是空格的东西[^\t\n\r]*
匹配任何不是制表符、换行符或空格的内容返回 0 次或更多次
以下是许多不匹配的 xml 之一的示例:
<Zipcode>3506 RT</Zipcode>
根据 xmllint,它不匹配3506 RT
(或者3506RT
就此而言,以及我希望匹配的许多其他内容),并出现以下错误:
element Zipcode: Schemas validity error : Element '{http://www.reeleezee.nl/taxonomy/1.23}Zipcode': [facet 'pattern'] The value '3506 RT' is not accepted by the pattern '[^\t\n\r]*[^\s][^\t\n\r]*'.
关于我没有正确解释的任何提示?(顺便说一句,我不明白他们 NonEmptyStringType 的严格性,我只会使用 .+)
根据要求,这是邮政编码声明:
<xs:element name="Zipcode" minOccurs="0" nillable="true" rse:CanIgnore="true">
<xs:annotation>
<xs:documentation>Postcode</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="NonEmptyStringType">
<xs:maxLength value="10" />
</xs:restriction>
</xs:simpleType>
</xs:element>
如您所见,这链接回 NonEmptyStringType 中的模式(上面发布的第一条规则)