4

我写了一个简单的 XSD,我按照 XSD 模式编写了

<xsd:element name="xx">
<xsd:simpleType  >
    <xsd:restriction base="xsd:string">
        <xsd:pattern
            value="^[a-z]+">
        </xsd:pattern>
    </xsd:restriction>
</xsd:simpleType>
</xsd:element>

当我使用 jaxb 执行 XML-XSD 验证时,总是会遇到 XX 标记的错误。前任:

<xx>abcd</xx>

我不确定为什么会出现这种奇怪的行为?我希望我的正则表达式是正确的,上面的例子应该通过验证。我错过了什么吗?

4

1 回答 1

6

您需要从表达式中删除锚 ^。XSD 验证器不识别 ^ 或 $ 锚点,但将它们解释为文字字符。您可以通过将您的 XML 更改为<xx>^abcd</xx>并针对您当前的 XSD 进行验证来验证这一点。

这样做的原因是您的模式自动绑定到字符串的开头和结尾。与您尝试匹配值的正则表达式不同,此正则表达式用于验证元素的全部内容,因此您必须创建一个模式以完全匹配字段中出现的所有内容。

于 2013-05-07T21:36:00.527 回答