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