1. 程式人生 > >基於Schema的XML文件有效性驗證

基於Schema的XML文件有效性驗證

此前是在網上搜了一份答案,然而發現這份答案竟不是完全正確的,於是修改了很多後,決定把自認為正確的答案寫在此處

題目

對於下列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”