2011年軟考系統架構設計師學習筆記第八章
8.1 XML 概述
可擴展標記語言(xml)是標準通用標記語言(SGML)的一個子集;可以用XML來開發一種標記語言,它的元素和屬性多是為專門行業和產業而定義的。
支持統一字符編碼 UCS,使得 XML 成為了國際標準,XML 和 HTML 都支持 樣式表(style sheet)。
8.1.1 標簽語法
XML 元素的結構與 HTML基本相同,使用尖括號來界定標簽,但二者相同點也就僅此而已。
與 HTML 不同,幾乎所有的 XML 標簽 都是大小寫敏感的,主要是滿足 XML 國際化的設計目標和簡化處理過程的需要。
非英語字母可能沒有對應的大小寫,合并會存在許多缺陷。
1、字符
XML 指定的字符 均在16位的 Unicode 2.1 字符集。
2、命名
XML 命名必須以字母、下劃線或冒號 開頭,后面跟著的是 有效命名字符(數字、減號、點)。
實際應用中不應該使用冒號,除非是用作命名空間修飾的分隔符。
字母并非局限于 ASCII 碼,這一點是非常重要的。
8.1.2 文檔部分
格式正規的 XML:
1、一個可選的序言(prolog)
2、文檔的主體(body)
3、可選的“繁雜”的尾聲(epilog),包括:注釋、處理指令(Processing Instruction,PI) 和/或 緊跟在元素后面的空白。
8.1.3 元素
元素是 XML 標簽的基本組成部分。
元素使用標簽(tag)進行分隔:尖括號圍住元素類型名。每一個元素 都必須 由一個起始標簽 和 一個結束標簽分隔開。
空元素
只是指定一個點,而不是提供一個包容器,空元素可以用縮略形式表示,起始和結束 標簽的混合體。
文檔元素,每個文檔 有且只有一個 根節點,稱為 文檔實體(document entity) 或 文檔根(document root),它們的根被稱為文檔元素(document element)。
XML 對元素 必須正確地嵌套。
如果字符串中包含單引號,分隔符必須使用雙引號,反之亦然。
8.1.4 字符數據
字符數據就是任何不是標記的文本,小于號、大于號、&號 是標記分隔符,因此他們絕不能以字符串的形式出現在字符數據中(CDATA部分除外),必須使用轉義字符 “&It;”等。
8.1.5 屬性
元素是 XML 中的名詞,屬性是它的形容詞。
attribute name = “attribute alue”
attribute name = “attribute alue”
起始標記或空標記中屬性只允許有一個實例存在。
非法的:
XML 數據中,只有 4個字符 可以作為 空白使用,09 水平指標(HT),0D 回車(CR),0A 換行(CF),20空格。
8.1.6 注釋
8.1.7 CDATA 部分
是一種用來包含文本的方法,對希望在自己的文檔中 包含 XML 標記的使用舉例 的作者來說是最有用的。
使用這些部分時 XML 幾乎所有的優勢都喪失殆盡。
,“…”可以是任何字符串,只要不包含字符串“]]>”。
8.1.8 格式正規的文檔
元素和元素之間***的直接關系就是 父子關系;
兄弟關系是通過數據結構推斷出來的,既不直接也不可靠,因為元素可能被插入到 某個元素和它的一個或多個子元素之間。
數據對象 如果滿足下列條件 就是各市正規的文檔。
1、語法合乎 XML 規范。
2、元素構成一個層次樹,只有一個根節點。
3、沒有對外部實體的引用,除非提供了 DTD。
任何 XML 解析器 發現 不是個是正規的結構,就報告一個“致命”錯誤,致命錯誤不一定導致解析器終止操作,但它不再會以正常的方式向應用程序傳遞字符數據 和/或 XML結構。
8.2 XML 命名空間
8.2.1 命名空間
XML 命名空間 是 解決多個 義性和名字沖突問題的方案。
命名空間是一組具有結構的名稱的集合。
8.2.2 定義和聲明命名空間
命名空間 推薦標準為我們提供了 xmlns屬性,屬性值就是 URI。
命名空間前綴經常被提及為前綴,而名稱本身是基本名。
默認的命名空間(沒有聲明別名的,形式為 xmlns=“…”),在聲明作用域里 所有沒有經命名空間前綴修飾的 名稱 被假定屬于默認的命名空間。
8.3 DTD
一個 XML 文檔是有效的,則它必須滿足:文檔 和 文檔類型 相關聯。
8.3.1 什么是 DTD
DTD 文檔類型定義。
主要 用來查看 XML 文檔的格式,出現在 XML 文檔的序言中,DTD 聲明不是必須出現的。
DTD 中 主要定義以下幾個方面的內容:
1、元素聲明。
2、實體聲明。
3、屬性的種類。
8.3.2 為什么引入 DTD
提供一種驗證的手段,對 XML 來說是一大貢獻,確保 XML 文件確實地遵守了 指定的格式,而這個格式可能是 一個 標準,或者是數據交換雙方 所共同定制 的 協議。
實現了 文件格式 的統一化,提高了文件的重用性。
使用 DTD 進行驗證,增加了操作時間。
8.3.3 實體的聲明
實體(entity)是一些預先定義好的數據。
存儲部位,內部實體,外部實體;
組成內容,可分解實體,不可分解實體。
引用方式,一般型實體,參數型實體。
不同類型的實體聲明和使用方法略有不同。
8.3.4 屬性的聲明
良構 XML 文檔中,屬性只要滿足命名規則就可以了,但是在一個有效的 XML 文檔中,屬性要經過 DTD 的屬性聲明。
DTD 聲明中,屬性的聲明語法可以歸納為如下形式:
元素名稱指的是 屬性所屬的元素名稱。
8.4 XML Schema
DTD 盡管進行了很大的簡化,但還是一門 風格 和XML完全不同的語言,而 schema 文檔是一種特殊的 XML 文檔,容易學習和使用。
DTD 的另一個缺點是 數據類型相當有限。DTD 中根本不提供 數值數據 類型。
一個 XML 文檔只能使用一個 DTD 文檔,schema 則采用了 名域空間的機制,使得一個 XML 文檔可以調用多種 schema 文檔。
8.5 可擴展樣式表語言
(eXtensible Stylesheet Language,XSL)是描述 XML 文檔樣式信息的一種語言,W3C 制訂。
XML 的一個優點就是 形式與內容相分離,XSL 就是它的兩種樣式表單之一,
另一種是 層疊樣式表(CSS),是一種靜態的樣式描述格式,其本身不遵從 XML 的語法規范。
而 XSL 是一個 XML 文檔。
是 XML 的一種具體應用。
它有兩大部分組成:
***部分描述了 如何將 XML 文檔進行 轉換、轉換為可瀏覽或可輸出的格式;
第二部分定義了 格式對象(Fomatted Object,FO)源樹轉換為可以顯示的結果樹,稱為樹轉換,按照FO分析結果樹,產生一個輸出結果,這個過程稱為 格式化。
轉換樹 日趨成熟,已從 XSL 中分離出來,另取名為 XSLT(XSL Transformations),現在一般所聽說的 XSL 大多是指 XSLT。
一同退出的還有 配套標準 Xpath(XML Path Language,XML 路徑語言)
在 XML 中 聲明 XSL 樣式單:
XSL 在網絡中的應用大體分為兩種模式:
1、服務器端轉換模式
XML 文件下載到 瀏覽器前先轉換成 HTML。
1.動態方式,接到轉換請求時再進行實時轉換。
2.批量方式。
2、客戶端轉換模式
XML 和 XSL 文件都傳送到客戶端,瀏覽器必須支持 XML+XSL 的工作方式。
8.6 其他相關規范
8.6.1 XPath
采用簡潔的、非 XML 語法,基于 XML 文檔的 邏輯結構,在該結構中進行導航。
XPath 表達式 通常出現在 URL 和 XML 屬性值里。
XPath 將 XML 文檔描繪為 樹或節點 的模型,節點的類型有 根節點、元素節點、屬性節點、文本節點、注釋節點、名稱空間節點、處理指令節點 7種。
XPath 規范定義了兩個主要部分:一部分是表達式語法,另一部分是一組名為 XPath核心庫 的基本函數。
指向某個 XML 文檔中一個特定節點的路徑 由三部分信息構成:一個軸類型、一個節點測試 和 謂詞。
軸類型 有多種,指定所選節點和環境之間的關系。節點測試 查找什么類型的節點,測試包括通配符“*”、text()、node()、comment()、processing-instruction()等。
謂詞以“[”開始,以“]”結束,謂詞通過使用內部函數來 過濾不需要的節點。
<軸>::<節點測試>[<謂詞表達式>]
8.6.2 XLink 和 XPointer
XLink 指定一個文檔如何連接到另一個文檔,XPointer 指定文檔內部的位置,都是基于 XPath 推薦標準。
【編輯推薦】