XSD 1.1断言中基于XSD属性值的正则表达式验证

时间:2017-08-28 10:06:05

标签: java xml xsd xsd-validation xsd-1.1

我有和这样的XML代码段。我需要进行XSD验证,例如:如果字段属性名称'是端口,然后它必须匹配正则表达式是否是一个数字(如' \ p {Nd} +')

<Data>
    <Attributes>
        <Field name="nodeType">abcd</Field>
        <Field name="port">5462</Field>
    </Attributes>
</Data>

在我的XSD中,我使用了如下所示的断言

<xs:element name="Field" maxOccurs="unbounded" minOccurs="0">
                                <xs:complexType>
                                  <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                      <xs:attribute type="xs:string" name="name" use="optional"/>
                                      <xs:assert test="if(@name='port') then matches($value,'\p{Nd}+') else false())"/>
                                    </xs:extension>
                                  </xs:simpleContent>
                                </xs:complexType>
                              </xs:element>

但是,当我跑步时,我得到以下抛出的异常

xml is NOT valid reason:org.xml.sax.SAXParseException;cvc-xpath.3.13.4.2a: XPST0003 - Assertion XPath expression ('if(@name='port') then matches($value,'\p{Nd}+') else false())') on the schema type '#AnonType_FieldAttributesDataContainerRtms' couldn't compile successfully

1 个答案:

答案 0 :(得分:0)

你有一个迷路的结束括号:

false())
       ^

用于比较的Saxon错误消息:

Error at xs:assert on line 7 column 102 of test.xsd:
  Unexpected token ")" beyond end of expression