XSD XSD 1.1 断言中基于属性值的正则表达式验证
XSD attribute-value based regex-validation in XSD 1.1 assert
我有 XML 这样的片段。我需要做一个 XSD 验证,例如:如果字段属性 'name' 是端口,那么它必须匹配一个正则表达式来判断它是否是一个数字(比如 '\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
你有一个杂散的右括号:
false())
^
用于比较的 Saxon 错误消息:
Error at xs:assert on line 7 column 102 of test.xsd:
Unexpected token ")" beyond end of expression
我有 XML 这样的片段。我需要做一个 XSD 验证,例如:如果字段属性 'name' 是端口,那么它必须匹配一个正则表达式来判断它是否是一个数字(比如 '\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
你有一个杂散的右括号:
false())
^
用于比较的 Saxon 错误消息:
Error at xs:assert on line 7 column 102 of test.xsd:
Unexpected token ")" beyond end of expression