XML學習筆記(四)Schema介紹篇_Xml教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:XML學習筆記(五)Schema語法之簡單類型Preface:本文是W3CSchools上《Schema指南》的學習筆記。其中大部分內容是對指南的翻譯總結。由于原文的例子更詳盡生動,如果各位想閱讀原文可以到這個網址http://www.w3schools.com/schema/default.asp。 同時,W3CSchools提供了測試,大家可以測試一下自己
一、概述
XML Schema用于描述XML文檔結構的文件。另一種用于該用途的文件(技術)是DTD。XML Schema有時又稱為XML Schema Definition,所以也會稱為XSD。因此Schema文件是以xsd為后綴的。
下面詳細的說明一下所謂的“定義XML文檔結構結構”的意義。- 定義可以出現在文檔中的Element。
- 定義可以出現在文檔中的Attribute。
- 定義哪些Element是子元素。
- 定義Element的順序。
- 定義子元素的數目。
- 定義一個元素是否能為空,是否能包含文本。
- 為每個Element和Attribute定義數據類型。
- 為Element和Attribute定義默認值和固定值。
Schema和DTD的比較:
可以說Schema是DTD的替代品,雖然作用一樣,但Schema是比DTD更新,更好的一種技術,因為:
- Schema是可擴展的,可以隨著將來的需要進行擴展。 (可以在其他的Schema中重用現有的Schema;從標準類型中派生創建你自己的數據類型;在同一文檔中引用多個Schema。)
- Schema是用XML編寫的。 (因此你無需重新學習一種語言;你可以使用XML的編輯器對Schema進行編輯;可以使用XML Parser去分析Schema;可以使用XML DOM去操作Schema;可以使用XSLT對Schema進行轉換。)
- Schema支持數據類型。 (從而能更好的描述文檔支持的內容;更好的驗證文檔的有效性;更好的與數據庫進行數據交互;更好的定義數據約束;更好的定義數據格式;更好的支持各類型數據間的轉換。)
- Schema支持命名空間。
二、在XML文檔中引用Schema
<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
以上的XML文件引用了note.xsd的Schema文件進行結構定義,這樣Parser會根據該Schema文件對XML進行有效性檢驗。顯然關鍵的地方是文檔根元素“note”中屬性的定義。下面解析相關屬性的意義。
xmlns="http://www.w3schools.com"
說明文檔的默認命名空間是“http://www.w3schools.com”。關于命名空間的作用,在XML學習筆記(三)中有介紹。xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
這里定義一個Schema的實例命名空間。只有作了這個定義才能使用schemaLocation屬性。xsi是XML Schema Instance的意思。xsi:schemaLocation="http://www.w3schools.com note.xsd"
如上所述,因為我們已經定義了xsi命名空間所以可以使用schemaLocation屬性了。schemaLocation屬性由成對的值組成可以有多對。(因為一個XML文檔可以有多個命名空間,所以schemaLocation值可以有多對)第一個值“http://www.w3schools.com”是要使用schema進行有效驗證的命名空間的元素。第二個值“note.xsd”是要使用的schema文檔的路徑。以下是中國XML論壇的兩篇貼子可以作為參考和補充:
http://bbs.xml.org.cn/dispbbs.asp?boardID=23&ID=37706
http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=9270
三、Schema文檔的基本結構
首先給出一個完整的Schema文檔<?xml version="1.0"?>
<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="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<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="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
首先必須強調的是<schema>元素是Schema文檔的根元素。注意大小寫,Schema也是XML,XML是大小寫敏感的。<schema>Element的所有子元素都是用于定義XML文檔結構的。具體的語法在下篇介紹。在這里我們集中關注<schema>的屬性。
xmlns:xs="http://www.w3.org/2001/XMLSchema"
這里指明了一個命名空間“http://www.w3.org/2001/XMLSchema”。同時定義了一個前綴“xs”。<schema>自己和所有子元素都使用“xs”前綴,說明屬于該命名空間。targetNamespace="http://www.w3schools.com"
targetNamespace是目標命名空間。這語句說明,這個Schema定義的元素(note, to, from, heading, body)是來自“http://www.w3schools.com”這個命名空間的。從另一個角度可以理解為,引用這個Schema進行有效性驗證的XML的元素應該是使用該命名空間的。xmlns="http://www.w3schools.com"
因為Schema也是XML。這語句說明這個XML的默認命名空間是“http://www.w3schools.com”。elementFormDefault="qualified"
這句表示在本Schema中定義的Element,如果在XML實例文檔出現的話,都要進行命名空間匹配。同樣給出一篇中國XML論壇的帖子作為參考和補充:
http://bbs.xml.org.cn/dispbbs.asp?boardID=23&ID=35354
分享:淺析XMLHTTPRequest的屬性和方法由于現在在公司負責制作標準的靜態頁面,為了增強客戶體驗,所以經常要做些AJAX效果,也學你也和我一樣在,學習AJAX。而設計AJAX時使用的一個重要的技術(工具)就是XMLHTTPRequest對象了。這里海嘯把我學習XMLHTTPRequest對象的一點資料拿出來跟大家一起分
相關Xml教程:
- 相關鏈接:
- 教程說明:
Xml教程-XML學習筆記(四)Schema介紹篇。