XML模式:仅当提供了另一个可选标记时才允许标记

XML模式:仅当提供了另一个可选标记时才允许标记,xml,xsd,schema-design,Xml,Xsd,Schema Design,我试图定义一个XML模式,它有一个可选的标记sort\u expression。如果提供了该可选标记,则允许使用第二个可选标记alternate_sort_表达式,但前提是第一个标记的存在 例如,我希望这些示例能够验证: 该项目的标签 一些价值 或 该项目的标签 或 该项目的标签 一些价值 一些价值 但以下内容不应通过验证: 该项目的标签 无效的 我认为下面的模式,使用两个序列中的一个可以工作。不幸的是,模式本身没有进行验证;Altova XML Spy告诉我复杂类型指示的内容模型不明确: 这可

我试图定义一个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>