我有这个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',并使内容模型变得模棱两可。必须形成内容模型,以便在验证元素信息项序列期间,可以唯一地确定直接,间接或隐式包含在其中的粒子,以此依次尝试验证序列中的每个项,而不必检查粒子的内容或属性。该项目,并且在序列的其余部分中没有有关该项目的任何信息。
允许任何内容的正确方法是什么?