我一直在阅读各种资源并尝试各种方法,但我仍然无法做到这一点。
说XML是:
<?xml version="1.0"?>
<zoo xmlns="http://www.example.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com zoo.xsd">
<animal id="l123444">
<name>Mighty</name>
<type>lion</type>
<kg>135</kg>
</animal>
<animal id="b343234">
<name>Lucky</name>
<type>bear</type>
<kg>205</kg>
</animal>
</zoo>
我应该如何编写XSD?
这是我得到的:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com"
xmlns="http://www.example.com"
elementFormDefault="qualified">
<xs:element name="zoo"><xs:complexType><xs:sequence>
<xs:element name="animal" maxOccurs="unbounded">
<xs:complexType>
<xs:extension base="xs:string">
<xs:attribute name="id"/>
</xs:extension>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="type"><xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="lion"/>
<xs:enumeration value="bear"/>
<xs:enumeration value="tiger"/>
</xs:restriction>
</xs:simpleType></xs:element>
<xs:element name="kg"><xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="10"/>
<xs:maxInclusive value="5000"/>
</xs:restriction>
</xs:simpleType></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence></xs:complexType></xs:element>
</xs:schema>
我最初可以验证文档。当我尝试添加并声明id属性时,验证失败。任何线索?
答案 0 :(得分:2)
您不需要extension
类型下的animal
,只需
<xs:element name="animal" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<!-- child elements -->
</xs:sequence>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
</xs:element>
没有明确超类型(即没有simpleContent
或complexContent
)的复杂类型的属性声明直接位于complexType
下,并且必须 之后 sequence
(或choice
或其他)。