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>
我想要的结构是这样的
<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>