XSD: 如何让元素标签依赖于前面的元素?

XSD: How do you make an element tag depend on the preceding element?

我想要的结构是这样的

<root>
   ... 
   <animaltype>BIRD</animaltype>
   <birdname>eagle<birdname>
   ...
</root>

<root>
    ...
    <animaltype>LIZARD</animaltype>
    <reptilename>iguana</reptilename>
    ...
</root>

我在互联网上找到的大部分内容只能让我创建自己的鸟或蜥蜴元素,这将是另一个级别,例如:

<lizard>
     <name>iguana</name>
</lizard>

我认为这是不可能的。

我尝试了以下方法:-

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:sequence>
                        <xs:element name="animaltype" type="xs:string" fixed="BIRD"/>
                        <xs:element name="birdname" type="xs:string">
                    </xs:element>
                    </xs:sequence>
                    <xs:sequence>
                        <xs:element name="animaltype" type="xs:string" fixed="LIZARD"/>
                        <xs:element name="reptilename" type="xs:string">
                     </xs:element>
                    </xs:sequence>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

这似乎不起作用。似乎是在验证 https://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#cos-nonambig 名称不能有歧义。

在我看来,最好的解决方案是如您所提到的,对动物和鸟类元素使用不同的名称,或者使用更宽松的架构。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="root" >
    <xs:complexType>
        <xs:sequence>
         <xs:element name="animaltype" type="xs:string" />
         <xs:choice>
             <xs:element name="birdname" type="xs:string"></xs:element>
             <xs:element name="reptilename" type="xs:string"></xs:element>
         </xs:choice>
         </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>