非严格XSD,一个值的限制范围,但不验证其他任何内容

时间:2018-10-31 11:04:12

标签: xsd

我有这个XSD,它将嵌套元素的值限制为指定的值范围。

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Configuration">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Value">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="NestedValue">
                <xs:simpleType>
                  <xs:restriction base="xs:integer">
                    <xs:minInclusive value="0"/>
                    <xs:maxInclusive value="1338"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

首先,我希望提供嵌套值是可选的,可以通过将minOccurs="0" maxOccurs="1"添加到“ Value”和“ NestedValue”元素中来轻松解决。

然后,我想允许任何xml,但包含超出范围的嵌套值的xml除外。

示例:

<Configuration>
  <Value>
    <NestedValue>1337<NestedValue>
    <OtherValue>10000<OtherValue>
  </Value>
</Configuration>

我尝试通过使用xs:any-tags来做到这一点,就像这样:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Configuration">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip">
        </xs:any>
        <xs:element name="Value" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="NestedValue" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                  <xs:restriction base="xs:integer">
                    <xs:minInclusive value="0"/>
                    <xs:maxInclusive value="1338"/>
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

但这给了我一个例外:

  

通配符'## any'允许元素'Value',并使内容模型变得模棱两可。必须形成内容模型,以便在验证元素信息项序列期间,可以唯一地确定直接,间接或隐式包含在其中的粒子,以此依次尝试验证序列中的每个项,而不必检查粒子的内容或属性。该项目,并且在序列的其余部分中没有有关该项目的任何信息。

允许任何内容的正确方法是什么?

0 个答案:

没有答案