XSD 中的模式验证是否不同?
Does pattern validation differs in XSD?
我正在尝试使用以下模式通过 XSD 模式验证来验证 XML 元素,但它不起作用。要求的行为是允许除模式表达式中提到的字符之外的所有字符。
<xsd:pattern value="^[^><{}|^`\[\]\\]*$"/>
Valid data : TESTING
Invalid data : TE{ST]`I<NG
但上面的模式也在 XSD 中给出了有效数据(测试)的验证错误,但如果我在 java 正则表达式匹配包中使用此模式,同样可以正常工作。请帮忙
与此问题的多个评论和答案中所述不同,>
和 <
等实体可以在 XML 架构正则表达式中毫无问题地使用。
但是,不支持插入符号 (^
) 和美元符号 ($
) 等锚点。
给定以下架构,并从模式中删除锚点:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="test" type="test"/>
<xsd:simpleType name="test">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[^><{}|^`\[\]\\]*"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
这将正确验证:
<test>testing</test>
虽然这些不会:
<test>{testing</test>
<test>>testing</test>
我正在尝试使用以下模式通过 XSD 模式验证来验证 XML 元素,但它不起作用。要求的行为是允许除模式表达式中提到的字符之外的所有字符。
<xsd:pattern value="^[^><{}|^`\[\]\\]*$"/>
Valid data : TESTING
Invalid data : TE{ST]`I<NG
但上面的模式也在 XSD 中给出了有效数据(测试)的验证错误,但如果我在 java 正则表达式匹配包中使用此模式,同样可以正常工作。请帮忙
与此问题的多个评论和答案中所述不同,>
和 <
等实体可以在 XML 架构正则表达式中毫无问题地使用。
但是,不支持插入符号 (^
) 和美元符号 ($
) 等锚点。
给定以下架构,并从模式中删除锚点:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="test" type="test"/>
<xsd:simpleType name="test">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[^><{}|^`\[\]\\]*"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
这将正确验证:
<test>testing</test>
虽然这些不会:
<test>{testing</test>
<test>>testing</test>