此前是在网上搜了一份答案,然而发现这份答案竟不是完全正确的,于是修改了很多后,决定把自认为正确的答案写在此处
题目
对于下列XML文档,创建一个模式文档,要求如下:
- Order元素在XML文档中可以出现多次,但是至少要出现一次。
- OrderID的值的格式必须是AXXX,其中X为0~9的数字。
- number的值的格式要在1~99之间。
- zip元素的内容的格式必须是XXXXXX,其中X为0~9的数字。
<?xml version="1.0" encoding="GB2312"?>
<Orders >
<Order orderID="A001" orderDate="2009-01-20">
<name>玩具</name>
<number>10</number>
<city>北京</city>
<zip>000000</zip>
</Order>
<Order orderID="A002" orderDate="2009-03-20">
<name>文具</name>
<number>5</number>
<city>青岛</city>
<zip>266000</zip>
</Order>
</Orders>
答案
XML文件
注意添加命名空间,和修改本地XSD文件的地址:
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“D:\study\1stTermOfJunior\schema.xsd”
<?xml version="1.0" encoding="GB2312"?>
<Orders xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:\study\1stTermOfJunior\schema.xsd">
<Order orderID="A001" orderDate="2009-01-20">
<name>玩具</name>
<number>10</number>
<city>北京</city>
<zip>000000</zip>
</Order>
<Order orderID="A002" orderDate="2009-03-20">
<name>文具</name>
<number>5</number>
<city>青岛</city>
<zip>266000</zip>
</Order>
</Orders>
XSD文件
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Orders" type="ord"/>
<xs:complexType name="ord">
<xs:sequence>
<xs:element name="Order" type="order" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="order">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="number" type="num"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="zip" type="zips"/>
</xs:sequence>
<xs:attribute name="orderID" type="idgs" use="required"/>
<xs:attribute name="orderDate" type="xs:date" use="optional"/>
</xs:complexType>
<xs:simpleType name="zips">
<xs:restriction base="xs:string">
<xs:length value="6"/>
<xs:pattern value="\d{6}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="idgs">
<xs:restriction base="xs:string">
<xs:length value="4"/>
<xs:pattern value="[A]{1}\d{3}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="num">
<xs:restriction base="xs:positiveInteger">
<xs:maxInclusive value="99"/>
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
结果
要点
1. 如何引用自定义的XSD文件
<Orders xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=“D:\study\1stTermOfJunior\schema.xsd”>
2. 直接使用浏览器查看并不能验证模式
下载安装并破解XML Spy 2013,使用XML Spy 2013中的Validate XML进行模式的有效性验证。
3. 使用中文出现乱码
<?xml version=“1.0” encoding=“GB2312” ?>
4. 对string格式的定义
使用restriction和正则表达式,限定string格式。
pattern value="\d{6}"
pattern value="[A]{1}\d{3}
maxInclusive value=“99”
minInclusive value=“1”
5. 对元素出现次数进行限制
minOccurs=“1”
maxOccurs=“unbounded”