如何在xml模式中定义发生指示器(发生在所有元素中或根本不发生)
我有以下xml模式 我可以限制出现的最大和最小限制,但如何定义f1应该出现在字段的所有元素中或根本不应该出现的限制 任何帮助都将不胜感激如何在xml模式中定义发生指示器(发生在所有元素中或根本不发生),xml,xslt,schema,xsd,Xml,Xslt,Schema,Xsd,我有以下xml模式 我可以限制出现的最大和最小限制,但如何定义f1应该出现在字段的所有元素中或根本不应该出现的限制 任何帮助都将不胜感激 <xs:element name="fields"> <xs:complexType> <xs:sequence> <xs:element name="field" maxOccurs="unbounded"> <xs:comp
<xs:element name="fields">
<xs:complexType>
<xs:sequence>
<xs:element name="field" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="f1" type="xs:integer" minOccurs="0" />
<xs:element name="f2" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
经过一番思考,我想我现在明白你的意思了。您不希望f1像我想的那样出现在
的所有子元素中,也不希望f1出现在任何子元素中,但您希望f1出现在更高的级别:您希望一个
父元素中的所有
元素都有一个子元素,或者没有子元素。这在XMLSchema1.0和XMLSchema1.1中仍然是不可能的,只有xpath断言。使用xml模式规范使用的类型概念进行建模也不是一种自然的方式
但是,如果在
父级中创建不同类型的字段,则很容易建立类似于所需的模型。假设您为元素“”分配了一个复杂类型,该元素具有必需的“”子元素,而为元素
分配了另一个复杂类型,该元素根本不能具有这样的子元素。然后,您可以使用
轻松地说
的所有子级都应该是
或``
模式:
<xs:element name="fields">
<xs:complexType>
<xs:choice>
<xs:element name="field" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="f2" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="f1field" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="f1" type="xs:integer" />
<xs:element name="f2" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<fields>
<f1field>
<name>x</name>
<f1>3</f1>
<f2>2</f2>
</f1field>
<f1field>
<name>x</name>
<f1>3</f1>
<f2>2</f2>
</f1field>
<!-- Next field will be rejected by validator because there are
already f1field elements -->
<field>
<name>df</name>
<f2>5</f2>
</field>
</fields>
XML:
<xs:element name="fields">
<xs:complexType>
<xs:choice>
<xs:element name="field" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="f2" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="f1field" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="f1" type="xs:integer" />
<xs:element name="f2" type="xs:integer" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<fields>
<f1field>
<name>x</name>
<f1>3</f1>
<f2>2</f2>
</f1field>
<f1field>
<name>x</name>
<f1>3</f1>
<f2>2</f2>
</f1field>
<!-- Next field will be rejected by validator because there are
already f1field elements -->
<field>
<name>df</name>
<f2>5</f2>
</field>
</fields>
x
3.
2.
x
3.
2.
df
5.
我的回答对你有帮助吗?@Erwin是的。非常感谢。