XML模式:仅当提供了另一个可选标记时才允许标记
我试图定义一个XML模式,它有一个可选的标记sort\u expression。如果提供了该可选标记,则允许使用第二个可选标记alternate_sort_表达式,但前提是第一个标记的存在 例如,我希望这些示例能够验证: 该项目的标签 一些价值 或 该项目的标签 或 该项目的标签 一些价值 一些价值 但以下内容不应通过验证: 该项目的标签 无效的 我认为下面的模式,使用两个序列中的一个可以工作。不幸的是,模式本身没有进行验证;Altova XML Spy告诉我复杂类型指示的内容模型不明确:XML模式:仅当提供了另一个可选标记时才允许标记,xml,xsd,schema-design,Xml,Xsd,Schema Design,我试图定义一个XML模式,它有一个可选的标记sort\u expression。如果提供了该可选标记,则允许使用第二个可选标记alternate_sort_表达式,但前提是第一个标记的存在 例如,我希望这些示例能够验证: 该项目的标签 一些价值 或 该项目的标签 或 该项目的标签 一些价值 一些价值 但以下内容不应通过验证: 该项目的标签 无效的 我认为下面的模式,使用两个序列中的一个可以工作。不幸的是,模式本身没有进行验证;Altova XML Spy告诉我复杂类型指示的内容模型不明确: 这可
这可以使用嵌套序列:
<xs:complexType>
<xs:sequence>
<xs:element name="label" type="xs:string" />
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element name="sort_expression" type="xs:string" />
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="alternate_sort_expression" type="xs:string" />
</xs:sequence>
</xs:sequence>
</xs:sequence>
</xs:complexType>
。。。至少它会根据需要验证您的示例。这可以使用嵌套序列:
<xs:complexType>
<xs:sequence>
<xs:element name="label" type="xs:string" />
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element name="sort_expression" type="xs:string" />
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="alternate_sort_expression" type="xs:string" />
</xs:sequence>
</xs:sequence>
</xs:sequence>
</xs:complexType>
。。。至少它会根据需要验证示例。创建一个可选序列,其中包含一个必需元素和可选元素 因为它们在同一序列中,所以仅当存在时才出现,但也可以省略,因为整个序列都可以省略
<xs:complexType name="indication">
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:sequence minOccurs="0">
<xs:element name="sort_expression" type="xs:string"/>
<xs:element name="alternate_sort_expression" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>
创建包含必需元素和可选元素的可选序列 因为它们在同一序列中,所以仅当存在时才出现,但也可以省略,因为整个序列都可以省略
<xs:complexType name="indication">
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:sequence minOccurs="0">
<xs:element name="sort_expression" type="xs:string"/>
<xs:element name="alternate_sort_expression" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
</xs:sequence>
</xs:sequence>
</xs:complexType>