一、概述
- XML是一種通用的數(shù)據(jù)交換格式
- 許多系統(tǒng)配置文件(記錄應(yīng)用程序的配置信息)
- JSP文檔逐步向XML語法格式過渡
- 與HTML
- ** 與數(shù)據(jù)庫**
-
XML文檔的組成單元
XML聲明(declaration)
DOCTYPE聲明語句
處理指令(processing instruction)
元素(element)
注釋(comment)
CDATA區(qū)
二、基本語法
2.1 文檔聲明
必須的,第一行
前后'?xml'與'<'間不能有空格,目前只有版本1.0,但必須寫
<?xml version="1.0" ?>
encoding屬性說明文檔的字符編碼,如果沒有則默認(rèn)UTF-8(UTF-16),GB2312是國標(biāo)的,實(shí)際保存和此處要統(tǒng)一,不然會(huì)報(bào)錯(cuò)
<?xml version="1.0" encoding="GB2312" ?>
standalone屬性說明文檔是否獨(dú)立
<?xml version="1.0" encoding="GB2312" standalone="yes" ?>
2.2 元素定義
使用'<>'和'</>'定義,一個(gè)元素可以嵌套多個(gè)元素,第一個(gè)元素為根元素,只能有一個(gè),
空元素如<img />,標(biāo)簽之間不允許交叉
規(guī)范,區(qū)分大小寫,不能以數(shù)字下劃線開頭,不能含有xml組合字符,不能包含‘:’
建議,不要用點(diǎn)、下劃線,盡量簡短,大小寫統(tǒng)一,使用中文需謹(jǐn)慎
2.3 屬性定義
屬性值必須用雙引號或單引號,可以改寫成子元素描述,遵循元素相同的命名規(guī)范
2.4 注釋
和HTML完全一樣
xml聲明之前不能有注釋
注釋符號不能相互包含
注釋同樣要注意編碼
2.5 空格和換行處理
標(biāo)簽以外的所有空格和換行,都要交給下游程序處理
2.6 CDATA區(qū)
“<![CDATA[” 開始,“ ]]>”結(jié)束
<script type="text/javascript">
<![CDATA[ for(var x=0;x<3;x++)
{
alert(x);
}
]]>
</script>
2.7 特殊字符
| 特殊字符 | 替代符號 |
|---|---|
| & | & |
| < | < |
| > | > |
| " | " |
| ' | ' |
2.8 處理指令
簡稱PI,用來為處理XML文檔的應(yīng)用程序提供指示信息
處理指令以“<?”開頭,以"?>"結(jié)尾,XMl聲明語句就是常見的處理指令
XML分析器會(huì)把處理指令原封不動(dòng)的傳給應(yīng)用程序,由應(yīng)用程序來解釋這個(gè)指令
例如:book.xml
<?xml version="1.0" encoding="GB2312" ?>
<?xml-stylesheet type="text/css" href="book.css" ?>
<bookstore>
<book>
<bookname>Java教程</bookname>
<author>李華</author>
<price>99元</price>
</book>
</bookstore>
book.css
bookname{display:block; color:red}
author{display:block; font-style:italic}
price{display:block; color:olive}
三、XML約束模式
3.1 格式良好的XML
解析器Parser
3.2 XML的約束模式
雖然解析不會(huì)出錯(cuò),但不符合真實(shí)的邏輯,所以要有約束模式
定義文檔中允許出現(xiàn)的元素名、屬性、內(nèi)容以及嵌套關(guān)系和出現(xiàn)順序
定義Xml文檔的詞匯表,尊徐的結(jié)構(gòu)
xml文檔看做數(shù)據(jù)庫中的表,則約束模式相當(dāng)于表結(jié)構(gòu)的定義
3.3 XML的約束語言
定義另一種語言的語言為元語言,單獨(dú)的文件,模式文檔,xml文檔實(shí)例文檔
約束模式語言,XML DTD、XML Schema、XDR、SOX等,前兩種最廣泛
3.4 有效的XML
遵守XML基本的語法規(guī)則,而且符合指定的約束模式,稱為Valid XML
解析器程序檢查是否符合約束模式稱為校驗(yàn),因此非校驗(yàn)類解析器和校驗(yàn)類解析器,IE是非校驗(yàn)類解析器
3.5 DTD
Document Type Definition,早期的約束模式語言
- DTD初步認(rèn)識
包含元素,元素之間關(guān)系,屬性、實(shí)體以及符號的定義
book.dtd,可以使用正則表達(dá)式,使用UTF-8,unicod編碼
<!ELEMENT 書架 (書+)>
<!ELEMENT 書 (書名,作者,售價(jià))>
<!ELEMENT 書名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售價(jià) (#PCDATA)>
PCDATA代表普通的字符串,(書名,作者,售價(jià))按這個(gè)順序, (書+)出現(xiàn)多次
-
在xml文檔中引入外部的DTD
DOCTYPE文檔類型定義語句,緊跟xml文檔聲明語句后面,兩種格式
自定義:SYSTEM組織內(nèi)部,或自定義
<!DOCTYPE 文檔類型名稱 SYSTEM "DTD文件的的URL">
公共的:PUBLIC權(quán)威機(jī)構(gòu)公開的文件
<!DOCTYPE 文檔類型名稱 PUBLIC “DTD名稱” "DTD文件的的URL">
例如:
<!DOCTYPE 書架 SYSTEM "book.dtd">
<!DOCTYPE web-app PUBLIC “-//Sun Miorosystems, Inc.//DTD Web Application 2.3//EN” "http://java.sun.com/dtd/web-app_2.3.dtd">
“-”表示未被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD,“+”表示被改進(jìn)的非ISO標(biāo)準(zhǔn)的DTD
例如book.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 書架 SYSTEM "book.dtd">
<書架>
.....
</書架>
standalone即使為no,只要DOCTYPE聲明,也會(huì)去校驗(yàn)
- xml文檔中直接嵌入DTD
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE 根元素名 [
DTD定義語句
...
]>
四、相關(guān)定義
4.1 元素定義
-
語法格式:
<!ELEMENT 元素名稱 使用規(guī)則> -
舉例:
<!ELEMENT 書架 (書名,作者,售價(jià))>
<!ELEMENT 書名 (#PCDATA)> -
使用規(guī)則:
(#PCDATA) 是parsed character data簡寫,表示可以是普通字符串
(書名,作者,售價(jià))
(書名,#PCDATA)
EMPTY 內(nèi)容為空,如<HR />
ANY 元素內(nèi)容任何形式
PS:
a、DTD注釋和XML文檔一樣
b、每條元素定義語句順序隨意
c、具有不同用途的元素不能使用相同的元素名
d、一個(gè)元素的各個(gè)組成成分之間可以有各種關(guān)系
<!ELEMENT MYFILE (TITLE AUTHOR EMAIL)> 三個(gè)子元素順序任意
<!ELEMENT MYFILE (TITLE, AUTHOR ,EMAIL)> 三個(gè)有序的子元素
<!ELEMENT MYFILE (TITLE |AUTHOR| EMAIL)> 三個(gè)中的任意一個(gè)
e、在元素的使用規(guī)則中可以定義子元素出現(xiàn)的次數(shù)
(書+)一次或者多次,(書?)一次或者不出現(xiàn),(書)不出現(xiàn)或者一次多次,(書)只能一次
f、一對圓括號可用于將括在其中的內(nèi)容組合成一個(gè)可統(tǒng)一操作的分組,分組中可以嵌套更小的分組
<!ELEMENT MYFILE ((TITLE, AUTHOR?,EMAIL)*|COMMENT)>
4.2 屬性定義
-
語法格式
<!ATTLIST 元素名
屬性名1 屬性類型 設(shè)置說明
屬性名2 屬性類型 設(shè)置說明
...
-
舉例
<!ATTLIST 商品
類別 CDATA #REQUIRED
顏色 CDATA #IMPLIED
-
設(shè)置說明
REQUIRED 必須設(shè)置
IMPLIED 可有可無
FIXED 設(shè)為固定值,如:CDATA #FIXED “頁面作者”
直接使用默認(rèn)值 如:CDATA “上網(wǎng)” -
屬性類型
CDATA 普通文本字符串,特殊字符用轉(zhuǎn)義字符串
ENUMERATED 枚舉類型
ID用于標(biāo)示唯一的,相當(dāng)于KEY
IDREF、IDERFS、NMTOKEN、NMTOKENS、NOTATION、ENTITY、ENTITYS
4.3 實(shí)體定義
- 作用 為一段文本內(nèi)容創(chuàng)建一個(gè)別名,,在XML中多次引用這個(gè)別名,解析器會(huì)自動(dòng)把別名轉(zhuǎn)為對應(yīng)的文本
- 定義 DTD中用<!ENTITY...>定義,兩種類型:引用實(shí)體和參數(shù)實(shí)體
引用實(shí)體:DTD中定義,xml中引用
<!ENTITY 實(shí)體名稱 “實(shí)體內(nèi)容”>
<!ENTITY 實(shí)體名稱 SYSTEM "外部XML文檔的URL">
引用方式:&實(shí)體名稱;
參數(shù)實(shí)體:DTD中定義,DTD中引用
<!ENTITY % 實(shí)體名稱 “實(shí)體內(nèi)容”>
引用方式:&實(shí)體名稱;
五、XML Schema
5.1 XML Schema與DTD的比較
和DTD一樣,定義xml文檔結(jié)構(gòu),比DTD更有發(fā)展前途。
- 自身符合xml語法結(jié)構(gòu)
- DOM 、SAX等XML API更容易解析
- 采用和xml文檔同樣的合法性驗(yàn)證機(jī)制
- 對名稱空間更好的支持
5.比DTD支持更多的數(shù)據(jù)類型,并支持用戶自定義數(shù)據(jù)類型 - 定義約束的能力更強(qiáng)大
- 基本上滿足了關(guān)系模式在數(shù)據(jù)描述上的需要
缺點(diǎn):不能像DTD定義實(shí)體,很多細(xì)節(jié)比DTD更復(fù)雜