1. 程式人生 > >webservice 教程學習系列(一)——schema約束

webservice 教程學習系列(一)——schema約束

最近同事在做一個webservice 介面的呼叫,我比較感興趣,所以就找時間學習了一下。在此寫下我學習的全過程,算是記個筆記吧!如有不足或者錯誤之處,歡迎指摘。

因為大部分的webservice是通過傳送xml報文,來實現request的傳送給和response的接收。

那麼基本所有的xml都是由xsd或者dtd檔案來約束標籤的。

那麼我們第一節的內容就是學習一個xsd是如何通過schema來約束xml檔案的。

首先新建一個java project;

然後在src下新建一個book.xsd檔案。

<?xml version="1.0" encoding="UTF-8"?>

<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNameSpace="zhangqin.com"
	elementFormDefault="qualified">
	<element name="書架">
		<complexType>
			<sequence maxOccurs="unbounded">
				<element name="書">
					<complexType>
						<sequence>
							<element name="書名" type="string"></element>
							<element name="作者" type="string"></element>
							<element name="售價" type="string"></element>
						</sequence>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>

(1)所有的標籤和屬性都由schema檔案來定義; 
(2)所有的schema檔案都有一個id,叫它namespace; 
(3)namespace由誰來約束指定呢?xml的namespce為約束他的xsd檔案的targetNameSpace; 
(4)如何引入一個schema約束? 
    屬性:xmlns 
(5)elementFormDefault="qualified" 
    是指標籤的約束,預設約束根標籤,那麼除了根標籤的其他標籤就白寫了。
    所以讓這個屬性值為qualified,這樣就可以約束所有的標籤了。


(6)如果引入的別名不是W3C組織定義的,必須指定schema檔案的位置
(7)schema檔案的位置由什麼屬性來指定
屬性:schemaLocation
屬性值:namespace path(注意這裡的path是指相對位置就可以,且namespace 和path之間有一個空格)
(8)如果引入多個約束,那麼就分不清哪個約束對應哪個約束位置以及對應哪個約束標籤了。所以只能取別名。例如:

<?xml version="1.0" encoding="UTF-8"?>
<tt:書架 xmlns:tt="zhangqin.com" 
xmlns:dd="http://www.w3.org/2001/XMLSchema" 
tt:schemaLocation="zhangqin.com book.xsd">
    <tt:書>
        <tt:書名>java從入門到精通</tt:書名>
        <tt:作者>張琴</tt:作者>
        <tt:售價>88</tt:售價>
    </tt:書>
    <dd:element></dd:element>

</tt:書架>


引入了兩個約束檔案,那麼我給取別名為tt和dd,相應的標籤也應該對應在前面加一個別名即可