-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:29:58
-- XML學習筆記(學習XML語言必讀)
Chapter 1. XML簡介XML(eXtensible Markup Language,可擴展標記語言)是SGML的一個子集,但比SGML簡單,用以創建可相互轉換的結構化文本文檔和數據文檔。下面說明一下與XML相關的一些概念。
XML文檔是什麼?它有時是一個文件,有時是關係數據庫中的一條記錄,有時是由Object Request Broker(對象請求代理程序)傳送的一個對象,有時是到達網絡接口的一個字節流。XML文檔可使不同系統、不同平臺的數據實現統一接口,這就是XML 真正的威力所在。下面列舉幾個使用XML的領域:
XML不是什麼?
|
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:30:14
--
Chapter 2. XML語法Table of Contents 創建一個簡單的index.xml文檔: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="basic.xsl"?> <basic>Hello World</basic> 下面創建一個名爲basic.xsl的XML樣式表(XSL),以便在瀏覽器中顯示XML文檔內容: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>a basic stylesheet</title> </head> <body> <xsl:value-of select="/" /> </body> </html> </xsl:template> </xsl:stylesheet> 接着在瀏覽器中打開index.xml文檔,則可顯示“Hello World”。上面兩個文檔都是合法的XML文件,具體的語法規則下面會詳細介紹,上例可先給大家一個感性的認識。 合法的XML文檔可有種意思,一個是良構文檔(well-format),即符合XML規則書寫的文檔;另一種是有效文檔,是已驗證符合一個DTD的文檔。 2.1. 基本語法規則
|
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:30:28
--
2.2. 良構XML文檔和有效XML文檔符合XML語法規則的XML文檔稱爲良構文檔,這些規則如下:
通過某個DTD或Schema驗證的文檔稱爲有效XML文檔。 2.3. XML文檔的組成
|
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:30:49
--
2.4. XML文檔樹XML文檔是一種結構化的文檔,可用樹的形式表示出來。樹是一種由節點和分支組成的簡單結構,兩個節點間由分支連接。上端的節點稱爲父節點,下端的 節點稱爲子節點。一個節點如果沒有父節點,則稱爲樹的根節點(根),每個樹必須有且只能有一個根節點。一個節點如果沒有子節點,則稱爲樹的葉節點。只有一 個節點的樹也是允許的。 由於XML可自定義標籤,所以每個人定義的標籤集都會不同,如果沒有一套標準來規定標籤的定義原則,則應用程序就不能對XML文檔進行處理。解決該 問題的方案採用DTD,DTD(Document Type Definition,文檔類型定義),用於定義XML文檔的編寫規則。如哪些元素可出現在文檔中,及元素的內容和屬性的要求等。應用程序會利用這個 DTD對文檔進行檢驗,符合DTD約束規則的XML文檔稱之爲有效文檔,可以進行下一步處理,否則會報錯,應用程序可捕獲該錯誤進行相應的異常處理。檢驗 過程是可選,這要視具體應用而定。 3.1. 文檔類型聲明要使用DTD進行有效性檢驗,就要使用文檔類型定義聲明指定DTD。如: <?xml version="1.0" standalone="no"?> <!DOCTYPE portal SYSTEM "http://www.w3c.com/dtd/portal.dtd"> <portal> <name>Jims</name> <email>[email protected]</email> <email>[email protected]</email> </portal> 文檔類型聲明位於XML聲明之後,根元素之前。如果dtd文檔位於本機,可用路徑名直接指出dtd文檔的位置。portal.dtd的內容如下: <!ELEMENT portal (name,email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> 上面的內容也可直接寫到XML文檔內,這種dtd聲明方式叫內部dtd子集,如: <?xml version="1.0" standalone="no"?> <!DOCTYPE portal [ <!ELEMENT portal (name,email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> <portal> <name>Jims</name> <email>[email protected]</email> <email>[email protected]</email> </portal> 如果dtd位於XML文檔外,則叫外部dtd子集。我們可以結合內外dtd,共同組成一個dtd來爲XML文檔作驗證。如: <!DOCTYPE portal SYSTEM "external.dtd" [ <!ELEMENT portal (name,email*)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> ]> 注意,使用內外dtd時,這兩個dtd要互相兼容,不能有衝突。 3.2. 元素聲明上節文檔類型聲明中的每一項都是元素聲明,定義了每個元素的約束。元素聲明的格式爲: <!ELEMENT element_name (content_model)> 有效文檔中使用的每個元素都必須在文檔的DTD中用元素聲明進行聲明。element_name可是任何合法的XML名稱,content_model(內容模型)指定元素可以或必須包含的子元素以及子元素的順序。下面具體介紹內容模型的內容。
3.3. 屬性聲明一個有效的XML文檔,必須對元素的屬性進行聲明。使用ATTLIST聲明來完成,一個ATTLIST可以爲一個元素類型聲明多個屬性。 <!ATTLIST image src CDATA #REQUIRED> 上例聲明image元素必須有一個src屬性,該屬性的值是字符數據。可用ATTLIST聲明爲一個元素聲明多個屬性,如: <!ATTLIST image src CDATA #REQUIRED width CDATA #REQUIRED height CDATA #REQUIRED alt CDATA #IMPLIED > 上述聲明指出src、width、height屬性是必須的,alt屬性是可選的。 |
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:31:30
--
3.3.1. 屬性類型
3.3.2. 屬性缺省值每個ATTLIST聲明除了要提供一種數據類型外,還要聲明屬性的缺省行爲。
3.4. 實體
|
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:31:49
--
Chapter 4. XML名稱空間
Chapter 5. XHTMLXHTML是W3C推薦的一種標準,它定義了一種與XML兼容的HTML版本。XHTML文檔是一個有效的XML文檔,所以編寫格式比HTML嚴格。如果需從HTML文檔轉換成XHTML文檔,需作以下更改:
下面是一個標準的XHTML文檔的示例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns:"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <title>xhtml example</title> </head> <body> ... </body> </html> 由HTML轉到XHTML是一種枯燥而乏味的工作,現在有一種叫tidy的開源工具可幫我們完成大部份的工作,它是一個C程序,使用方法如下: % tidy --output-xhtml yes test.html test.xml XHTML 1.1把XHTML的三種DTD分成獨立模塊。我們可根據實際情況包含或省去某些模塊。這些模塊是:
|
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:32:22
--
樣式表可幫我們解釋XML文檔中各元素的具體意思,所以通過樣式表可直接在瀏覽器上顯示XML文檔。目前主要的樣式表語言有:
在XML文檔在序言部分通過xml-stylesheet處理指令可指定關聯的樣式表。xml-stylesheet指令必須有一個href屬性和 type屬性。href指向樣式表的URL,type指定樣式表的MIME類型:對CSS爲text/css,對於XSLT爲text/xml或 application/xml。下面是一個簡單的使用樣式表的XML文檔: <?xml version="1.0"?> <?xml-stylesheet href="test.css" type="text/css"?> ... 除以上兩個必須的屬性外,還有4種可選屬性:
樣式表現在已成爲Web應用中的一個關鍵技術,它的作用主要體現在以下三個方面:
6.1. CSS2CSS2是層疊樣式表,它是一種排版技術,能讓元素按特定的樣式顯示,如字體大小,顏色、佈局等。在網頁中有三種使用方法:
按作用域來分,有三類的樣式表,分別是網頁解釋器樣式表、作者樣式表和瀏覽者樣式表。網頁解釋器樣式表也叫默認的樣式表,當沒有另外的樣式表加載時使用。作者樣式表就是網頁設計師設計的樣式表。瀏覽者樣式表是瀏覽網頁的用戶在瀏覽器上另外設置的樣式表。 CSS的基本數據類型
inherit參數值 <style> body {width: 600px;} .div1 {width: 120%;} .div2 {width: inherit;} 說明: div1的寬度是600px*120% div2的寬度繼承父元素body的參數,是600px 選擇符的作用是指定哪些元素使用哪些樣式。選擇符可以分爲簡單選擇符和複合選擇符兩類,簡單選擇符是類型選擇符、通用選擇符加上零個或多個屬性選擇 符、ID選擇符、僞類等組成。複合選擇符是用">"和"+"號結合多個簡單選擇符組成。">"和"+"號兩邊要加上空格。下面介紹各種選擇 符:
樣式表的主要功能是指定同一個文件在不同媒體上按不同的樣式顯示。通過在種方式可指定不同媒體
!important規則會改變應用樣式的優先級,有!important參數樣式的優先級最高,會優先顯示。 <style> h1 {color:red;} h1 {color:green !important;} </style> <h1>字體爲綠色</h1> |
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:32:33
--
6.2. XSLTXSLT是XSL的一部份,它是XML的一種應用,指定將一篇XML文檔轉換成另一種XML文檔的規則。XSLT文檔即是一篇XML文檔,也是一個 樣式表,裏面包含一系列的模板。XSLT處理器對輸入XML文檔中的元素和樣式表中的模板進行比較,如果匹配,則將該模板的內容寫入一個輸出樹中。完成處 理後,將輸出樹串行化成一篇XML文檔或其它格式的文檔,如HTML或者rtf。 XSLT幾個關鍵術語
XSLT定義了35個元素,分爲三類: 兩個根元素
13個頂級元素,可直接作爲根元素的子元素,包括:
20個指令元素
XSLT函數 6.3. XPathXPath是一種用來從文檔樹中選擇節點和節點集的語言。從XPath的角度來看,共有七種節點:
CDATA部份,實體引用和文檔類型聲明不包括在內,XPath在所有這些項都併入文檔之後才起作用。根節點和根元素是不同的兩個概念,根節點包含整篇文檔,包括根元素。 |
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:32:53
--
6.3.4. XPath表達式位置路徑是XPath的一個最常用的表達式,用以標識XML文檔的節點集。除此之上,XPath表達式還可返回數字、布爾和字符串。非節點集的 XPath表達式不能用於xsl:template元素的match屬性中。它們用於xsl:value-of元素的select屬性值或用於位置路徑的 謂詞中。 每個XPath位置路徑可分爲一步名多步,每步以“/”號分隔,如: room[//@name=$root]/date[year=$year and month=$month]/meeting 上下文節點即當前正在處理的節點,也就是位置路徑定位的當前節點。上下文在XPath表達式計算前被創建,由XSLT處理器創建。處理每一步後,上下文都會改變。 位置路徑中的步可分爲三部份:軸(axis)、節點測試(note test)和謂詞(predicate),它的寫法如下: axis::note-test[predicate] 軸和節點測試之間用“::”分開,每個謂詞由括號[]括起來。 要設計好一個位置路徑,需確保在每一步選擇最少的節點,使用最嚴格的軸,用最嚴格的節點測試。避免使用謂詞,因爲由軸和節點測試選擇的節點集的每個節點都會用作謂詞的上下文節點。對於位置路徑的三步,最節省的是節點測試。 XPath中的所有數字都是8個字節的IEEE754浮點雙精度類型,與java的double類型相同。可表示正無窮大、負無窮大和NaN(零除零)值。支持五種運算符,分別是加(+)、減(-)、乘(*)、除(div)、取餘(mod)。 XPath中的字符串是Unicode字符,用單引號或雙引號定界。可以使用=和!=對字符進行比較,也可用<,>,<=,>關係運算符,但比較的兩個字符必須是數字,否則比較結果沒有意義。 XPath中的布爾值常用於位置路徑的謂詞中,如/person[name="debian"]。布爾值還常用於xsl:if和xsl:when元素的test屬性中。如: <xsl:template match="home"> <xsl:if test = ".=/'debian/' or .=/'redhat/'"> <xsl:value-of select = "." /> </xsl:if> </xsl:template> 6.3.5. XPath函數XPath還提供很多函數,用於表達式和謂詞。XPath函數的返回值有四種類型,分別是:
6.4. XLinkXLink是一種基於屬性的語法,用來在XML文檔中添加鏈接。XLink鏈接可以是單向的,如HTML中的A元素,它也可以是雙向的,在兩個方向 上鍊接兩篇文檔,因此能夠從A到B或從B到A。每個XLink元素必須具有一個xlink:type屬性,指出連接類型。屬性xlink:href指向所 鏈接的資源URI。下面是一個簡單鏈接的示例: <test xmlns:xlink = "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "http://www.ringkee.com/xml.html"> <author>Jims</author> <date>2005/02/18</date> </test> xlink:type屬性類型共有六種,分別是:simple,extended,locator,arc,title,resource。 xlink:show屬性可告訴瀏覽器或應用程序在激活鏈接時應該做什麼,它有五種可能的動作,分別是:
xlink:actuate屬性可告訴瀏覽器何時顯示鏈接,它有四種可能值:
一個和HTML中的A元素作用一樣的示例: <test xmlns:xlink = "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "http://www.ringkee.com/xml.html" xlink:actuate = "onRequest" xlink:show = "replace" > <author>Jims</author> <date>2005/02/18</date> </test> 一個在頁面嵌入圖像的示例: <image xlink:type = "simple" xlink:actuate = "onLoad" xlink:show = "embed" xlink:href="http://www.ringkee.com/flower.png" width = "320" height = "240" /> xlink:actuate和xlink:show是可選的。 xlink:title和xlink:role屬性可指定資源之間的描述,xlink:title包含少量描述遠程資源的文本,xlink:role包含URI,指向資源的較長描述。 |
||||
-- 作者:lmxalqb
-- 發佈時間:2006-3-31 22:33:07
--
分析XML文檔可通過程序來做,分析器有兩大類,一種是事件驅動的,一種是基於樹模型的。
7.1. 分析器工具現有的分析器種類有上百種,但常用的是兩個標準的工具庫,一個是XML簡單API(SAX,Simple API for XML)和文檔對象模型(DOC,Document Object Model)。SAX是事件驅動分析器的標準,而DOM是基於樹的分析器標準。另外,Expat雖然不是標準,但它是腳本語言中處理XML時最常用的分析 器。Expat由James Clark編寫,是事件驅動分析器。 7.2. Unicode計算機並不能正真理解文本內容,它無法識別諸如a,b,c這類的字母,更不用說中文了。計算機所能理解的只有數字,如60,80等。字符集 (character set)規定了字母到數字的映射關係,如65代表大寫字母A。65稱爲碼點(code point),字符編碼(character encoding)決定碼點如何用字節表示。是用多了節還是單字節,高字節位表示什麼,低字節位表示什麼。 不同國家使用不同的語言,不同程序使用不同的編碼規範,在進行世界範圍內的數據交換就要統一表示數據的字符編碼規範。傳統的ASCII字符集只定義 了127個字符,其中前31個是控制符。127位之後的字符隨平臺不同而不同。大多數平臺只能表示前127位,單字節(8位),使得字符集中最多隻能提供 256個字符。這些標準字符稱爲羅馬或拉丁字符集,用ASCII來表示中文、日文是遠遠不夠的。 爲了解決字符集問題,出現了Unicode字符集。它可用多字節格式編碼字符,目前標準允許2字節字符,支持65536個不同字符。標準的Unicode字符集爲Latin-1(或ISO-8859-1)。有關Unicode的介紹可訪問Unicode的官方網站:http://www.unicode.org Unicode字符集爲字符分配碼點,即編號。這些編號可以用多種模式編碼,如UCS-2、UCS-4、UTF-8、UTF-16。
在Unicode流行以前,出現了一系列處理特定語言的單字節字符集,ISO將14種這樣的字符集標準化成ISO 8859標準,分別是ISO-8859-1~14。ISO-8859-15是ISO-8859-1的修訂版本。這些字符集統稱ISO字符集。 Cp1252是依賴於Windows平臺的一種編碼,是Windows的缺省字符集。該種編碼不支持跨平臺特性,儘量不要使用。 MacRoman是Mac OS使用的一種非標準、單字節編碼。在非Mac平臺下使用也會有問題,儘量不要使用。 在XML文檔中,如果需輸入編輯器不支持的字符,我們可用字符引用的方式,以十進制或十六進制給出它所代表的Unicode字符編號, 如њ(十進制)或者њ(十六進制)。字符引用可用於元素內容、屬性和註釋,不能用於元素名和屬性名、處理指令或 XML關鍵字。如果有一些字符需經常使用,則我們可爲這些字符定義實體,這樣,在文檔中就可方便地引用該實體了。專門定義字符實體的DTD我們可獨立出 來,形成以.ent爲後綴的外部DTD。在需要時使用外部參數實體引用將這些定義引入文檔的DTD中。 XHTML 1.0 DTD包含有三個有用的字符引用實體可在文檔中使用。
在XML文檔中可以使用xml:lang屬性規定元素內容採用的語言。這樣就可在一篇文檔中同時使用多種語言,這是XML跨平臺和跨語言的重要特性 之一。如:xml:lang="CN-CHN"。語言代碼是一個兩個字母的語言代碼,語言代碼後還可跟一個子代碼,語言代碼可在這裏找到http://ftp.ics.uci.edu/pub/ietf/http/related/iso3166.txt。下面是xml:lang屬性聲明的示例: |
XML學習筆記(學習XML語言必讀)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.