How to access parent element in XSD assertion XPath?

后端 未结 1 1990
栀梦
栀梦 2020-12-11 23:31

I am trying to write an assertion that will make the values of @row and @column less than or equal to the values of @rows and @c

相关标签:
1条回答
  • 2020-12-12 00:22

    An assertion XPath cannot reach outside of its context.

    So, move your assertion up to the structure element, and use an every ... satisfies assertion test:

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
               elementFormDefault="qualified"
               vc:minVersion="1.1">
        <xs:element name="structure">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="cell" maxOccurs="unbounded">
                        <xs:complexType>
                            <xs:attribute name="row" type="xs:positiveInteger"/>   
                            <xs:attribute name="column" type="xs:positiveInteger"/>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
                <xs:attribute name="rows" type="xs:positiveInteger" use="optional"/>
                <xs:attribute name="columns" type="xs:positiveInteger" use="optional"/>
                <xs:assert test="every $r in cell/@row satisfies @rows >= $r"/>
                <xs:assert test="every $c in cell/@column satisfies @columns >= $c"/>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    
    0 讨论(0)
提交回复
热议问题