根据其他XML字段的值在XSD中设置minOccurs和maxOccurs?

根据其他XML字段的值在XSD中设置minOccurs和maxOccurs?,xml,xsd,xsd-validation,xml-validation,Xml,Xsd,Xsd Validation,Xml Validation,我有一个XSD来验证XML文件。结构如下: <root> <child> <size>2</size> <childElement>Element 1</childElement> <childElement>Element 2</childElement> </child> </root> 有没有一种方法可以使

我有一个XSD来验证XML文件。结构如下:

<root>
    <child>
        <size>2</size>
        <childElement>Element 1</childElement>
        <childElement>Element 2</childElement>
    </child>
</root>

有没有一种方法可以使用
xs:alternative
或其他标记来实现这一点,或者这超出了XSD的可能范围?

设计建议:如果您的XML设计仍然可以更改,请删除
size
元素,并隐式而非显式地传递该信息。通过消除信息的重复,您无需检查重复是否一致

如果您的XML设计仍然无法更改,或者您选择不更改它

XSD 1.0 不可能。必须进行带外wrt XSD检查

XSD 1.1 可能使用
xs:assert

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" 
           elementFormDefault="qualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           vc:minVersion="1.1">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="child">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="size" type="xs:integer"/>
              <xs:element name="childElement" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:assert test="count(childElement) = size"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


非常有趣的用例。但我从未见过这样的事。您需要在解析器I中进行验证think@DavidBrossard:适用于XSD 1.0;对于XSD1.1,
xs:assert
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" 
           elementFormDefault="qualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
           vc:minVersion="1.1">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="child">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="size" type="xs:integer"/>
              <xs:element name="childElement" maxOccurs="unbounded"/>
            </xs:sequence>
            <xs:assert test="count(childElement) = size"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>