我有一个类似下面的XML文件,并希望使用类型替换方法创建XML模式,以便它可以验证以下XML文件。但是我创建的模式是完全错误的。请告诉我如何编码模式以验证下面的文件XML。
详细说明:
对于type:fish,需要存储额外的size元素
<animals>
<animal animalID="b-1" xsi:type="bird">
<name>Humming Bird</name>
<origin>Asia</origin>
<color>Blue</color>
</animal>
<animal animalID="b-2" xsi:type="bird">
<name>Horn Bill</name>
<origin>Asia</origin>
</animal>
<animal animalID="f-2" xsi:type="fish">
<name>Whale</name>
<origin>Europe</origin>
<size>Large</size>
</animal>
<animal animalID="b-5" xsi:type="bird">
<name>Parrot</name>
<origin>Europe</origin>
</animal>
我已经推出了以下架构,我认为这是完全错误的。
<xsd:element name="bird" substitutionGroup="animals"
type="birdType"/>
<xsd:element name="fish" substitutionGroup="animals"
type="fishType"/>
<xsd:element name="animals">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="animal" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="animal">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="bird" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
答案 0 :(得分:0)
我不是生物学家,但如果我是的话,我会和你的分类学争吵......
如果您使用xsi:type来区分这两种类型,那么架构需要包含名为“bird”和“fish”的全局复杂类型定义。您可以通过某种基类型的扩展来推导出这两者,比如“生物”(因为我们在这里没有做真正的生物学......)。类型生物包含两个公共元素名称和原点,两个扩展分别包含可选元素颜色和大小。动物元素被定义为“生物”类型。
答案 1 :(得分:0)
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified">
<xsd:complexType name="animalType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<xsd:element name="origin" type="xsd:string" minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="birdType">
<xsd:complexContent>
<xsd:extension base="animalType">
<xsd:sequence>
<xsd:element name="color" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="fishType">
<xsd:complexContent>
<xsd:extension base="animalType">
<xsd:sequence>
<xsd:element name="size" type="xsd:string" minOccurs="1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="animals">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="animal" type="animalType" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>