webservice 教程學習系列(一)——schema約束
阿新 • • 發佈:2018-11-20
最近同事在做一個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,相應的標籤也應該對應在前面加一個別名即可