【问题标题】:using xpath in xsd pattern matching?在 xsd 模式匹配中使用 xpath?
【发布时间】:2015-06-23 17:29:33
【问题描述】:

是否可以将属性值用作模式匹配的一部分?

例如 xsd:

    <xs:element name="MyElement">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="SomeElement" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="MyTestElement">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:pattern value="(Attribute name value) some other regex matching"/>
                </xs:restriction>
            </xs:simpleType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required"/>
    </xs:complexType>
</xs:element>

所以基本上 MyTestElement 中的模式匹配应该包括外部元素名称属性的值,这可能吗?

【问题讨论】:

    标签: xml xpath xsd schema xsd-validation


    【解决方案1】:

    您不能在 xs:pattern 中使用 XPath。 xs:pattern的内容应该是specs中所说的模式(正则表达式)

    但是,如果您使用 XSD 1.1,您可以在 xs:assert 和其他人中使用 XPath,如果您使用 XSD 1.0,您可以在 xs:keyxs:keyRefxs:unique 中使用一些 XPath 子集。

    例如,如果您使用的是 XSD 1.1,您可以使用这样的断言来检查每个 &lt;MyTestElement&gt; 是否匹配一个模式或是否具有与 name 属性相同的值。

    <xs:assert test="every $MyTestElement in MyTestElement satisfies (string($MyTestElement) = string(@name) or matches(string($MyTestElement), 'pattern'))"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-13
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 2018-08-17
      • 1970-01-01
      相关资源
      最近更新 更多