首页 > 解决方案 > XSD 中的模式验证是否不同?

问题描述

我正在尝试使用以下模式通过 XSD 模式验证来验证 XML 元素,但它不起作用。所需的行为是允许除模式表达式中提到的字符之外的所有字符。

<xsd:pattern value="^[^&gt;&lt;{}|^`\[\]\\\\]*$"/>

Valid data : TESTING
Invalid data : TE{ST]`I<NG

但是上面的模式也在 XSD 中给出了有效数据(TESTING)的验证错误,但如果我在 java regualr 表达式匹配包中使用这个模式,同样可以正常工作。请帮忙。

标签: javaregexxmlxsdxsd-validation

解决方案


与该问题的多个评论和答案中所述不同,实体喜欢&gt;并且&lt;可以在 XML Schema 正则表达式中毫无问题地使用。

但是,不支持插入符号 ( ^) 和美元 ( )等锚点。$

给定以下模式,并从模式中删除锚点:

<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="[^&gt;&lt;{}|^`\[\]\\\\]*"/> 
    </xsd:restriction> 
  </xsd:simpleType> 
</xsd:schema>

这将正确验证:

<test>testing</test>

虽然这些不会:

<test>{testing</test>

<test>&gt;testing</test>

推荐阅读