轉錄自http://www.ascc.sinica.edu.tw/nl/90/1715/02.txt
《標誌語言》
XML的名稱領域(Namespaces)
張錦堂
概述
XML的名稱領域 (Namespaces in XML) 是W3C在1999年1月提出,
大約是XML 1.0版規格定案一年之後才完成。這個規格定義在一個
XML文件中併用好幾個XML應用規格或DTD的機制。這個機制具有兩
項優點:
1.可合併使用多個標準的標示語彙:可以在一個XML文件中直接使
用其他XML應用規格所定義的標示語彙,而不用自行發明新的標
示語彙。在發展XML應用系統時,許多元素已經在其他行之多年
的應用規格中定義了。引用這些規格,可以節省研發的時程,
也可與標準同步。
2.使系統設計模組化:在XML應用系統中呼叫已設計好的各個XML應
用規格的軟體模組,而不需自行撰寫該功能。
一份XML應用規格或DTD中所定義的所有的標籤及屬性的集合,稱
之為「標示語彙」(Markup Vocabulary)。當混用多個標示語彙時,
會產生下列兩項問題:
1.名稱重複:來自不同的標示語彙,可能發生標籤或屬性名稱相同
而無法區別的困境。
2.軟體不易處理:軟體系統不易區別各個標籤及屬性來自哪個標示
語彙。
名稱領域這份規格的解決方案就是,簡單地以參引(reference)
到URI的前置字串(prefix)加在各個標籤及屬性名稱之前的方式,
明確地指定(qualify)其所屬的XML應用規格。
何謂URI?
URI(Uniform Resource Identifier)資源識別字串,是用於在
網路環境中識別文件、可供下載的檔案、各式服務及電子郵箱等等
的各式資源。URI是URL及URN的超集合(superset),也就是除了
URL及URN的資源定址方法之外,還提供容納新定址方式的可能性。
URL(Uniform Resource Locator)為網址,是個已定義好的格式,
用於讀取目前網路上的各式資源,例如:http:、ftp:、gopher:
、news:及mailto:等通訊協定的資源。URN(Uniform Resource
Name)是任何一個機構所承諾,永久有效的資源名稱,它使用urn:
的機制標明某一項資源。例如某本書籍的URN為:
urn:ISBN:0-201-433357
這個資源並不一定實際在網路上存在,而是一本實體的書籍。是
實體的資源,也並不一定存在,例如:已經失落或是尚未出版的書
籍。但是這個URN值確切地標明是某本書。目前URN在網路上並沒有
一個普遍使用的機制可以轉換為URL值,以便讀取該資源。URI、URL
及URN三者的關係可以圖一表示:
W3C在多年前已在各個規格中以URI取代URL來表示資源地址了。
在每個XML應用規格中,都會定義其Namespace的URI值。每個規格
都有個獨一無二Namespace的URI值,即使是同個規格的不同版本也
會有不同的URI值,例如:
‧XSL Working Draft 的 Namespace 為:
http://www.w3.org/TR/WD-xsl
‧XSLT 1.0 的 Namespace 為:
http://www.w3.org/1999/XSL/Transform
每個規格的URI值必須是唯一的,也就是不可與其他規格的URI值
相同,因此,必須有個規則供制訂規格者遵循。這個規則就是利用
每個機構對自己網域中的URL都有掌控權,因此使用URL格式的URI,
就可以達到Namespace的URI值是唯一的。因為這個URI值只是用於區
別名稱領域的識別字串,所以雖然其形式為URL格式,但並不表示可
以使用瀏覽器讀到有固定格式的資訊。應用系統會嚴格比對URI字串,
以確定該XML文件是否與系統所採用的規格一致,以確保系統運作正
常。
Namespaces實例
本文以一個簡化的問答集為例,說明Namespaces的宣告、前置字
串、內定Namespace及有效範圍等功能的使用要點及概念。一個問答
集的XML文件片段如下:
什麼是 XML ?
XML是用於標示具有結構性資訊的語言。
請參考W3C網站
其中各個元素的意義是:是 Q&A、是question、是
answer,其中的是HTML的超鏈結。例子中的answer
及超鏈結標籤名稱相同,都是,造成無法分辦的窘境。解決方法
就是直接標明其來源。James Clark在其「XML Namespaces」一文中,
以{URI}的形式來解說這個概念,這並不是Namespace實際的語法。
元素標明來源後,可以表示如下:
<{http://ascc.net/xml/qaml}a>XML是...。
請參考
<{http://www.w3.org/1999/xhtml}a>W3C
其中使用的URI,例如:http://ascc.net/xml/qaml
代表QAML(Question and Answer Markup Language)的XML應用規格;
http://www.w3.org/1999/xhtml代表XHTML的應用。這樣就可以明確
區隔各標籤的來源了。但是卻有兩項缺點:
1. URI字串過長;
2.可能含有XML規格中不允許的特殊字元,故不便直接使用。
Namespaces的解決方案如下:
什麼是 XML ?
XML是...。
請參考W3C 網站
xmlns是屬性名稱的保留字,用於Namespace的宣告。先將URI宣告
為一個短字串,類似於暱稱,例如:qaml相當於http://ascc.net/xml/qaml。
再使用這個短字串做為前置字串(prefix)加在每個標籤之前,就
可以達到目的了。這個前置字串只使用符合規定的字元,以及常見
的縮寫,這樣這個XML文件就很容易閱讀了。
這個方法的缺點就是實際運用時,XML文件通常檔案很大,假如
加上prefix,整個文件就會看起來很複雜,而且在編寫文件時,也
更加瑣碎不便。此時使用內定名稱領域(Defaulting namespace)
機制,就可以改善了,例如:
什麼是 XML ?
XML是...。請參考W3C 網站
這個例子中使用xmlns=“...”宣告了內定的Namespace,這樣不
加prefix的標籤都會是屬於這個Namespace。這個XML文件也就簡潔
多了。
Namespaces並不一定要在根元素(root element)上宣告,假如
只在文件中的某個元素使用時,只要在文件內這個元素上加入宣告
即可。在這個宣告Namespace元素的範圍之外,這個Namespace就沒
有作用了,這就是Namespace的有效範圍(Namespace scoping)。
例如:
什麼是 XML ?
XML是...。
請參考
W3C 網站
這個情況也可以使用內定Namespace。例如:
什麼是 XML ?
XML是...。
請參考W3C網站
元素中內定的Namespace是QAML。在元素
時,內定的Namespace改變為XHTML,當離開其相對的結束標籤
時,Namespace又回到QAML中。
Namespaces 與使用DTD驗證的問題
在XML文件中使用了Namespaces,將會產生無法使用原DTDs進行驗
證(validate)的狀況。其原因有二:
1. DTD(Document Type Definition)是承襲自SGML的產物。在SGML
系統中並無Namespaces的機制,故DTD並無辦識Namespaces宣告、
內定值及有效範圍的能力。在這個狀況下,加了prefix及冒號的
標籤名稱組合起來,系統將視為一個標籤名稱,例如
形成一個新的標籤。而在QAML的DTD中並沒有定義這個元素,因
此系統將會出現錯誤訊息。
2.原各個DTD所定義的內容模型(Content Model),也不適用在具
有Namespaces的XML文件。因為無從知曉各個元素中到底可以包含
來自其他DTD的那些元素。因此無法解決在一個XML文件中引用多
個DTD時,所產生的內容模型(Content Model)的問題。例如:
在QAML中的元素確切可以包含那些XHTML的元素呢?
假如文件結構並不複雜且規則簡單,權宜之計就是定義一個新的
DTD,將prefix、:及標籤名整個字串,當做是個標籤名稱在DTD中
宣告。例如:
]>
abcd
這樣才可以使用DTD進行驗證(validate)的動作。但是在實作
上,大多數的應用因為各個標示語彙中定義的元素數量龐大,而且
元素中可能包含的其他標示語彙的可能性過多,所以並無法使用這
個方法了。
結語
Namespaces的概念並不是一個新的技術,這個方法早已在許多程
式語言中出現,例如:perl的module及Java的package。這個機制
可以提供模組化的建構環境,也使我們可以取用其他已開發好的模
組,快速的建立一個新的應用系統。
XHTML是符合XML基本格式的HTML語法。SVG(Scalable Vector
Graphic)是一個提供向量式圖形功能的XML應用規格。在XHTML的
網頁中,使用SVG就可以在網頁中加入向量式圖形,使用者只要在
瀏覽器中安裝SVG Viewer的Plug-in就可以瀏覽了。以這個技術,
也可以在網頁中使用MathML顯示數學公式。因此使用了Namespaces
的網頁就可模組化的擴充各項功能,而且整個網頁是一個XML文件,
也提供Search Engine可進行內容分析的優點。
XML的Namespaces是個基本的技術,提供建構XML應用系統無限的
擴充性。是XML應用中不可或缺的好幫手,在實作中處處可見其芳蹤。
參考資料
1. Namespaces in XML. World Wide Web Consortium. 14 January 1999.
Available at
http://www.w3.org/TR/1999/REC-xml-names-19990114/
2. XML與電子商務標準,梁中平、徐子淵、謝鎮澤,資策會。
3.無廢話XML. 勞虎.Available at
http://2ti.com/xml_book/
4. Berners-Lee, T., “Universal Resource Identifiers in WWW”,
RFC 1630, June 1994.
Available at
http://www.ietf.org/rfc/rfc1630.txt
5. XML Namespaces FAQ. Ronald Bourret.
Available at
http://www.informatik.hu-berlin.de/~xing/Lib/NamespacesFAQ.htm
6. XML Namespaces. James Clark.
Available at
http://www.jclark.com/xml/xmlns.htm
2008年12月12日 星期五
XML-Namespace
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言