● 格式良好的(Well-formed)XMLjava
● XML的約束模式web
● XML約束模式語言數據庫
● 有效的(Valid)XML瀏覽器
一、格式良好的(Well-formed)XML
● 計算機程序在處理XML文檔以前,首先必須可以解析出XML文檔內容中的各個元素的相關信息。app
● 用於解析XML文檔的解析器程序對應的英文術語叫Parser。google
● 要讓計算機程序解析出XML文檔內容所表達的信息,spa
XML文檔更應該嚴格遵循必定的語法。.net
● 遵照XML基本語法規則和規範的XML文檔就能夠稱之爲「Well-formed XML」,中文意思就是「格式良好的XML」。設計
二、XML的約束模式
● 爲何要有約束模式?orm
舉例:
<書架>
<書>
<書名>Java程序設計</書名>
<做者 姓名=「 」></做者>
<售價 單位=「元」>38</售價>
<售價單位=「元」>28</售價>
</書>
</書架>
● 約束模式定義了XML文檔中容許出現的元素名(也就是標記名)、元素中的屬性、元素中的內容類型以及元素之間的嵌套關係和出現順序。
● XML約束模式不只定義了XML文檔的詞彙表,它還定義了一個XML文檔必須遵循什麼樣的結構。
● 若是把一個XML文件看做是數據庫中的一個表,那麼XML約束模式就至關於數據庫表結構的定義。
● 若是沒有爲一個XML文檔指定約束模式,那麼該文檔中能夠包含任何類型的標記:若是爲一個XML文檔指定了約束模式,那麼它必須需知足約束模式所規定的結構、數據類型和數據關聯等內容。
三、XML的約束模式語言
● 用做XML約束模式的內容也須要遵循必定的語法規則,這些語法規則就造成了XMl約束模式語言。
● XML約束模式語言是用來創造XML標記語言的語言,這種用於定義另外一種語言的語言被稱爲元語言。
● 約束模式一般都是在一個單獨的文件中進行定義,這個文件被稱做模式文檔。
● 與模式文檔的概念相對應,一招模式文檔編寫的XML文檔被稱爲實力文檔。
● 前後出現的XML約束模式語言有XML DTD、XDR、SOX、XML Schema等等,其中應用最普遍和具備表明意義的是XML DTD和XML Schema。
四、有效的(Valid)XML
● 一個遵照XML的基本語法規則、且符合爲它所指定的某個
XML約束模式的XML文檔就能夠稱之爲「Valid XML」
文檔,中文意思就是「有效的XML」文檔。
● 一個XML文檔並不必定須要是有效的,但必須是格式良好的。
● 將一個XML文檔和它所引用的XML約束模式進行比較分析,看其中的內容是否符合XML約束模式的過程叫校驗(validation),校驗過程也是經過解析器程序軟件(Parser)來處理的。
● 根據可否對XML文檔進行約束模式校驗,能夠將XML解析器分爲兩類:非校驗類解析器(IE瀏覽器)和校驗類解析器。
● 對DTD的初步認識
● 在XML文檔中引入外部DTD文件
● 在XML文檔中直接嵌入DTD定義語句
● 元素定義
● 屬性定義
● 實體定義
一、對DTD的初步認識
二、在XML文檔中引入外部DTD文件
● XML文檔經過使用DOCTYPE聲明語句(文檔類型定義語句)來指明它所遵循的DTD文件,DOCTYPE聲明語句緊跟在XML文檔聲明語句後面,有來年各類格式:
1)<!DOCTYPE 文檔類型名稱 SYSTEM 「DTD文件的URL」>
2)<!DOCTYPE 文檔類型名稱 PUBLIC 「DTD名稱」「 DTD文件的URL」>
例如:
1)<!DOCTYPE 書架 SYSTEM 「book.dtd」>
2)<!DOCTYPE web-app PUBLIC 「-//Sun Microsystems, Inc. //DTD Web Application 2.3//EN」「 http://java.sun.com/dtd/web-app_2.3.dtd」>
● DTD標識名稱應符合一些標準的規定,對於ISO標準的DTD一ISO三個字母開頭;被改進的非ISo標準的DTD以加號「+」開頭;未被改進的非ISO標準的DTD以減號「-」開頭。
● 對於一些已經制定成爲了行業標準的DTD文件,一些相應的解析器程序可能已經將它們內嵌進去,因此在解析時並不必定要到從指定的URL上進行下載。
範例:
三、在XML文檔中直接嵌入DTD定義語句
在XML文檔中直接嵌入DTD定義語句:
引入外部DTD文件的同時加入DTD定義語句:
例子:
● XML聲明(declaration)
● DOCTYPE聲明語句
● 處理指令(processinginstruction)
● 元素(elements)
● 註釋(comment)
● CDATA區
四、元素定義
● 語法格式:
<!ELEMENT 元素名稱 使用規則>
● 舉例:
<!ELEMENT 書架(書名,做者,售價)>
<!ELEMENT 書名(#PCDATA)>
● 使用規則:
- (#PCDATA)是parsed character data的簡寫
- (書名,做者,售價)
- (書名,#PCDATA)
- EMPTY 例如,<!ELEMENT HR EMPTY>定義的元素形式爲<HR />
- ANY
細節
● DTD使用與XML文檔一樣的註釋方式:<!--註釋內容—>
● 每條元素定義語句的順序是可有可無的
● 具備不一樣用途的元素不能使用相同的元素名
● 一個元素的各個組成成份之間能夠有各類關係:
<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)>
<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)>
<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>
● 在元素的使用規則中能夠定義子元素出現的次數:
(書+)--一次或以上、(書?)--零次或一次、(書*)--零次或以上、(書)—必須僅且只能一次
● 一對圓括號()可用於將括在其中的呢絨組合成一個可統一操做的分組,分組中能夠嵌套更小的分組。
<!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>
五、屬性定義
● 語法格式:
<!ATTLIST 元素名
屬性名1 屬性類型 設置說明
屬性名2 屬性類型 設置說明
……
>
● 舉例:
<!ATTLIST 商品
類別 CDATA #REQUIRED
顏色 CDATA #IMPLIED
>
● 應用:
<商品 類別=「服裝」 顏色=「黃色」>…</商品>
<商品 類別=「服裝」>…</商品>
設置說明:
- #REQUIRED(必須設置)
- #IMPLIED(無關緊要)
- #FIXED(取值固定爲某一個值)
- 直接使用默認值
類型:
- CDATA
- ENUMBERATED
- ID
- IDREF和IDREFS
- NMTOKEN和NMTOKENS
- NOTATION
- ENTITY和ENTITYS
六、實體定義
● 實體的根本做用是爲了一段文本內容建立一個別名,之後在XML文檔中就能夠屢次引用這個別名,XML解析器程序將把XML文檔中出現的別名引用轉換變成起所對應的文本內容。
● 在DTD定義中,一條<!ENTITY …>語句用於定義一個實體。
● 實體可分爲來年各類類型:引用實體和參數實體。
引用實體:
● 語法格式:
- <!ENTITY 實體名稱 「實體內容」>
- <!ENTITY 實體名稱 SYSTEM 「外部XML文檔的URL」>
● 引用方式:
&實體名稱;
● 舉例:
<!DOCTYPE copyright [
<!ENTITY copyright SYSTEM 「http://www.baidu.com/copyright.xml」>
]>
……
©right;
參數實體:
● 語法格式:
<!ENTITY % 實體名稱 「實體內容」>
● 引用方式:
%實體名稱;
● 舉例1:
<!ENTITY % TAG_NAMES 「姓名|EMAIL|電話|地址」>
<!ENTITY 我的信息 (%TAG_NAMES;|生日)>
<!ENTITY 客戶信息 (%TAG_NAMES;|公司名)>
● 舉例2:
<!ENTITY % common.attributes
‘id ID #IMPLIED
account CDATA #REQUIRED’
>
…
<!ATTLIST purchaseOrder %common.attributes;>
<!ATTLIST item %common.attributes;>
● XML Schema 與DTD的比較
● 經過一個例子初步認識XML Schema
● 名稱空間的概念
●默認名稱空間
● 屬性的名稱空間問題
● 引入XML Schema文檔
一、XML Schema 與DTD的比較
● XMLSchema符合XML語法結構
● DOM、SAX等XML API很容易解析出XML Schema文檔中的內容。
● XML Schema則採用與XML文檔一樣的合法性驗證機制。
● XML Schema對名稱空間支持很是好。
● XML Schema比XML DTD 支持更多的數據類型,並支持用戶自定義心得數據類型。
● XML Schema定義約束的能力很是強大,能夠對XML實力文檔做出細緻的語義限制。
● XML Schema 基本上知足了關係模式在數據描述上的須要。
● XML Schema不能像DTD同樣定義實體,比DTD更復雜。
二、名稱空間的概念
● 遇到的問題
在不一樣的約束模式文檔中,出現表示不一樣含義的相同標記名稱是徹底有可能的。
● 解決
- 每一個約束模式文檔被賦予一個惟一的名稱空間,每一個名稱空間都用一個惟一的URI(統一資源標識符)表示。
- 在XMl實力文檔中來自不一樣模式文檔的元素增長不一樣的前綴部分,元素名稱前增長的各個前綴部分分別表明各個模式文檔的名稱空間。
● 舉例:
<xs:schema xmlna:xs=http://www.w3.org/2001/XML Schema」>
<xs:element name=」書架」>
…
名稱空間的聲明
● 基本格式:
xmlns:前綴名稱=「URI」
● 舉例:
● 在任何元素中聲明的名稱空間,只對該元素及其中嵌套的全部子孫元素有效,聲明名稱空間的元素自身上也可使用表明該名稱空間的前綴。
● QName(Qualified Name,限定名)是指用冒號(:)把前綴與本地部分進行分隔的名稱,即被限定在了某個名稱空間中的名稱。
三、默認名稱空間
● 基本格式:
xmlns=「URI」
● 舉例:
四、屬性的名稱空間問題
● XML實例文檔中一般只須要將元素限定於該模式文檔的名稱空間中,而不須要將該元素的屬性限定在名稱空間中。
例子:
<xi:include xmlns:xi=」http://www.w3org/2001/XInclude」 href=」http://example.com/std/defs parse=」xml」 />
● 若是屬性名稱中有一個前綴部分,該屬性將被限定在該前綴所指定的名稱空間中。若是屬性名稱中沒有前綴部分,那麼該屬性就不屬於任何名稱空間。屬性不收默認名稱空間的影響。
例子:
<x xmlns=」http://www.w3.org 「 xmlns:n1=」http://www/w3/org」>
<good a=」1」 n1:a=」2」 />
</x>
xml:space和xml:lang屬性
● 前綴名「xml」已經被隱式的綁定到了一個名稱空間上,內置屬性名稱以xml:做爲前綴。自定義的屬性名不能以xml:做爲前綴。
● xml:space屬性用於設置下游應用程序應該如何處理解析器傳遞的空格等字符,設置值只能是「default」或「preserve」。
<網址 xml:space=」preserve」> www.google.com </網址>
● xml:lang屬性用於設置元素的本地化語言信息,ISO-639規範中規定了表明各個國家和地區的本地化語言的名稱,例如」en「表示英文、」la「表示拉丁文、」zh「表示中文、「zh-CN」表示中文(中國)、「zh-TW」表示中文(臺灣地區)。
例子:
<product xml:lang=」zh-CN」 release-date=」2002-08-18」 />
<product xml:lang=」en-US」 release-date=」0-18-2002」 />
● 在某個元素中設置了xml:space和xml:lang屬性,嵌套在該元素總的子孫元都將沿襲起設置的結果。
五、引入XML Schema文檔
使用名稱空間 引入XML Schema文檔
● schemaLocation 屬性的設置值包含有兩個部分,第一部分就是名稱空間的URI,第二部分就是該名稱空間所標識的XML Schema文件的位置或URL地址,這兩個部分之間用空格分隔。
使用名稱空間引入多個XML Schema文檔
不使用名稱空間引用XML Schema文檔