XML的約兩種約束——DTD、Schema

在XML技術裏,可以編寫一個文檔來約束一個XML文檔的書寫規範,這稱之爲XML約束。


常用的約束技術XML DTD ;XML Schema。

XML Schema 也是一種用於定義和描述 XML 文檔結構與內容的模式語言,其出現是爲了克服 DTD 的侷限性
XML Schema VS DTD:
XML Schema符合XML語法結構。 
DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。 
XML Schema對名稱空間支持得非常好。 
XML Schema比XML DTD支持更多的數據類型,並支持用戶自定義新的數據類型。 
XML Schema定義約束的能力非常強大,可以對XML實例文檔作出細緻的語義限制。
XML Schema不能像DTD一樣定義實體,比DTD更復雜,但Xml Schema現在已是w3c組織的標準,它正逐步取代DTD。  


DTD(Document Type Definition),全稱爲文檔類型定義。

XML文件使用 DOCTYPE 聲明語句來指明它所遵循的DTD文件,DOCTYPE聲明語句有兩種形式:

一、當引用的文件在本地時,採用如下方式:
<!DOCTYPE 文檔根結點 SYSTEM "DTD文件的URL">
例如: <!DOCTYPE 書架 SYSTEM “book.dtd”>。在xml文件中手寫一下。

二、當引用的文件是一個公共的文件時,採用如下方式:
<!DOCTYPE 文檔根結點 PUBLIC "DTD名稱" "DTD文件的URL">


DTD語法:元素定義、屬性定義、實體定義。

聲明一個XML元素——<!ELEMENT 元素名稱 元素類型> 

元素類型可以是元素內容、或類型<!ELEMENT >

在元素內容中也可以使用+、*、?等符號表示元素出現的次數:
+: 一次或多次 (書+)
  ?: 0次或一次 (書?)
 *: 0次或多次  (書*)


xml文檔中的標籤屬性需通過ATTLIST爲其設置屬性

語法格式:
<!ATTLIST 元素名 
屬性名1 屬性值類型 設置說明
屬性名2 屬性值類型 設置說明
……
>

設置說明:
#REQUIRED:必須設置該屬性
#IMPLIED:可以設置也可以不設置 
#FIXED:說明該屬性的取值固定爲一個值,在 XML 文件中不能爲該屬性設置其它值。但需要爲該屬性提供這個值 
直接使用默認值:在 XML 中可以設置該值也可以不設置該屬性值。若沒設置則使用默認值。  


常用屬性值類型

CDATA:表示屬性值爲普通文本字符串。
ENUMERATED 
ID
ENTITY(實體)


實體定義:

實體用於爲一段內容創建一個別名,以後在XML文檔中就可以使用別名引用這段內容了。
在DTD定義中,一條<!ENTITY …>語句用於定義一個實體。
實體可分爲兩種類型:引用實體和參數實體。

引用實體主要在 XML 文檔中被應用
語法格式:
<!ENTITY 實體名稱 “實體內容” >:直接轉變成實體內容
引用方式:
&實體名稱;



在XML Schema技術中有一個專業術語來描述這個過程,即把XML Schema文檔聲明的元素綁定到一個名稱空間上,以後XML文件就可以通過這個URI(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪裏,被誰約束。

XML Schema 文件自身就是一個XML文件,但它的擴展名通常爲.xsd。
一個XML Schema文檔通常稱之爲模式文檔(約束文檔),遵循這個文檔書寫的xml文件稱之爲實例文檔。
和XML文件一樣,一個XML Schema文檔也必須有一個根結點,但這個根結點的名稱爲Schema。
編寫了一個XML Schema約束文檔後,通常需要把這個文件中聲明的元素綁定到一個URI地址上,
在XML Schema技術中有一個專業術語來描述這個過程,即把XML Schema文檔聲明的元素綁定到一個名稱空間上,
以後XML文件就可以通過這個URI(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪裏,被誰約束。在XML Schema中,每個約束模式文檔都可以被賦以一個唯一的名稱空間,

名稱空間用一個唯一的URI(Uniform Resource Identifier,統一資源標識符)表示。 


在Xml文件中書寫標籤時,可以通過名稱空間聲明(xmlns),來聲明當前編寫的標籤來自哪個Schema約束文檔。
爲了在一個XML文檔中聲明它所遵循的Schema文件的具體位置,通常需要在Xml文檔中的根結點中使用schemaLocation屬性來指定,例如:
<itcast:書架 xmlns:itcast="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=“http://www.itcast.cn book.xsd">
schemaLocation此屬性有兩個值。第一個值是需要使用的命名空間。第二個值是供命名空間使用的 XML schema 的位置,兩者之間用空格分隔。

注意,在使用schemaLocation屬性時,也需要指定該屬性來自哪裏。


基本格式:
xmlns="URI" 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章