<?xml version="1.0"?>
<!-- journey.xsd -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="product">
<xs:complexType>
<xs:sequence>
<xs:element name="unit_price">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="price_type">
<xs:attribute name="unit" type="weight" use="required"/>
<xs:attribute name="currency" type="currency_type" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="amount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="unit" type="weight" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="quality">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="first class"/>
<xs:enumeration value="second class"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="importer">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="id_type" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="product_id" use="required"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="price_type">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="weight">
<xs:restriction base="xs:string">
<xs:enumeration value="kg"/>
<xs:enumeration value="liter"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="currency_type">
<xs:restriction base="xs:string">
<xs:enumeration value="euro"/>
<xs:enumeration value="dollar"/>
<xs:enumeration value="RMB"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="id_type">
<xs:restriction base="xs:ID">
<xs:pattern value="[A-Z][A-Z][0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="product_id">
<xs:restriction base="xs:ID">
<xs:pattern value="[a-z][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
<!--自己定义的属性类型在外面,元素的取值类型在元素里面-->
</xs:schema>
=====================================================================
调试一下午程序,发现问题出在complexType上面,
<xs:element name="amount">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="unit" type="weight" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
对于complexType下的simpleContent
可选项 — annotation
必选项 — 有并且只有一个下列元素: restriction (simpleContent) 或 extension (simpleContent)。
所以说,需要加一个extension base="xs:integer",而不是想当然的在element里面加type="xs:integer"。
======================================================================
XML文件
<?xml version="1.0"?>
<product id="p100"
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com product.xsd">
<unit_price unit="kg" currency="euro">24.56</unit_price>
<amount unit="kg">234</amount >
<quality>first class</quality>
<importer id="FI2000">Safe Food OY</importer>
</product>
亲爱的小兔子,虽然你看不懂,还是谢谢你的观赏,哈哈~~~