Download presentation
Presentation is loading. Please wait.
1
何謂名稱空間 何謂URI 名稱空間的作用方式 使用名稱空間的注意事項
第六章 XML名稱空間 何謂名稱空間 何謂URI 名稱空間的作用方式 使用名稱空間的注意事項
2
XML名稱空間 XML名稱空間(Namespaces)在1999年1月14日成為W3C的推薦標準,它的主要功用在解決XML元素或屬性名稱的衝突問題。 名稱衝突主要是導因於在一個XML文件中,同時引用了屬於不同語彙(vocabularies)的元素或屬性名稱所致。
3
為什麼需要名稱空間 在不使用Namespace的XML文件中,元素和屬性中的名稱,其單一性僅及於文件自身,我們稱它們為區域名稱(loca names)。區 域名稱並不適合在網路環境使用,因為我們很難確保其名稱的單一性。
4
為什麼需要名稱空間(續) <?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v3.5 NT ( by Redice (ccumis) --> <library> <book> <cover>href='112333'</cover> <title>XML與電子商務</title> <author> <last_name/> <first_name/> <descriptions> <head> <title>html上的title部分</title> </head> <body/> </descriptions> </author> </book> </library>
5
為什麼需要名稱空間(續) 依上圖為例說明 Description元素的內容是以XHTML格式來設計的。這時候程式處理這個文件,當處理到title元素時,判斷該title元素,究竟是指書名,還是指HTML文件的標題。 不同Application間的相同語彙,就造成了XML processor在處理文件上的混淆。
6
名稱空間如何解決問題 XML使用URI(Uniform Resource Identifier)的引來作為Namespace,只要將URI的參引加到元素或屬性名稱的前面,就能使名稱具有單一性。 我們稱包含Namespace的名稱為全域名稱(universal name)。 全域名稱能使應用程式很容易的區別來自不同XML Application的語彙。
7
名稱空間如何解決問題(續) <description> <{ <{ </ { </{ </description> 屬於HTML 語法的title元素名稱轉換成全域名稱{
8
名稱空間如何解決問題(續) XML使用URI的參引來作為名稱空間,只要將URI的參引加到元素或屬性名稱的前面 <library>
<book> <cover>href='112333'</cover> <title>XML與電子商務</title> <author> <descriptions> < { head> title>html上的 title部分</ title> </ <body/> </descriptions> </author> </book> </library>
9
名稱空間如何解決問題(續) 以上所作的,只是概念上的說明。W3C的建議書並不採用這種作法,因為XML 1.0的parser,並不接受這種格式。 我們將使用這種語法來說明XML Namespaces建議書中原本所使用的語法。
10
名稱空間如何解決問題(續) XML Namespace建議書定義了一種將XML 1.0文件的樹狀結構。
由本屬於后域名稱的元素名稱及屬性名稱,對應到元素名稱及屬性名稱可視為全域名稱的另一種樹狀結構。 其對應所用的概念是採用前置字串。 元素名稱或屬性名稱中包含冒號(:),那對應機制會視冒號之前的字串為前置字串,而視冒號後的字串為區域名稱。
11
名稱空間如何解決問題(續) <html:hr xmlns:html=" 可視為對應到: <{ 而屬性名稱也與元素名稱使用同樣的規則 <div html:class="aaa" xmlns:html=" World!</div> 對應到: <div { World!</div>
12
何謂URI URI的全名為Uniform Resource Identifiers,是一組由特定語法定義的字串,可用來識別某項資源。
在XML Namespaces之中所用的,卻是URI。而URI可說是URL的超集(superset)。 在URI的規範中,涵蓋了URL(Uniform Resource Locators)及URN(Uniform Resource Names)
13
為什麼名稱空間中以URI為參引 URI的設計原則具有延伸性
這一點正好跟URI(URN)的設計原則不謀而合。由於XML可以應用在許多領域中,而這些領域的資源定位方式,並不見得能使用現有的URL。 若使用URI,應用程式甚至可以自訂URN的語法來指明特有的資源,在應用上當然是相對的有彈性多了。
14
為什麼名稱空間中以URI為參引(續) URI概念層次與概念的層次
實務的層次是指URI一定要透過某些方式,指向一個存在的資源;就像Windows的登錄系統一樣,class id在登錄系統內,最後一定會透過系統內,最後一定會透過某些表示路徑的方式,來指到資源實體。 概念的層次是只管命名URI,而不用去管該URI究竟有沒有指向某項資源。
15
為什麼名稱空間中以URI為參引(續) 在Namespace中的URI不用指向真正的資源實體,URI只需讓應用程式可識別即可。
如果瀏覽器或XML processor並不認得Namespace所參引的URI,那麼應用程式有兩種選擇: 其一是不加以處理 其二是使用Namespace所指向的URI,來取得該其DTD或Schema的定義,再根據這些定義處理XML文件。
16
宣告及引用名稱空間
17
宣告及引用名稱空間(續) Xmlns:html=http://www.w3.org/TR/xhmtl1是屬於Namespace的宣告部分
而“html”並非Namespace name,它稱為前置字串(prefix),僅用於Namespace的引用部分,如下: Html:hr 引用Namespace也就是在原來的元素名稱之前,加上Namespace名稱及冒號(:);包含Namespace的元素名稱即為我們先前所的全域名稱,在XML Namespace規格書中稱為修飾名稱(qualified names)。
18
名稱空間的有效範圍 Namespace的參引僅能用於宣告該Namespace的元素及其子(孫)元素。
<library> <bk:book xmlns:bk=“ <bk:title>…..</bk:title> </bk:book> <bk:description>…</bk:description> -錯誤用法 </library> 原因是description並非是title的子(孫)元素
19
名稱空間的有效範圍(續) 除非將前置字串以另一個Namespace的宣告重新定義,否則其所參引到的URI(即Namespace name)不會改變 雖然可以這樣做,但卻很容易造成文件處理上的困擾,應避免使用。 <foo:library xmlns:foo=" <foo:book> <foo:description xmlns:foo=" </foo:book> </foo:library>
20
名稱空間的有效範圍(續) 在一個元素中可以同時宣告多個Namespace
在XML文件不太大的情況下,我們通常將Namespace宣告全部擺在根元素。 <bk:library xmlns:bk="urn:loc:gov:books" xmlns:isbn="urn:ISBN: " xmlns:html=" <bk:book isbn:number=" "> .... </bk:book> </bk:library>
21
預設的名稱空間 使用預設的名稱空間,可以不必以前置字串來指定名稱空間 定義預設的名稱空間 以空字串解除預設的名稱空間
<library xmlns=” </library> 以空字串解除預設的名稱空間 <A xmlns=“ <C xmlns=“ ”> </A>
22
預設的名稱空間(續) 使用預設的名稱空間,可以不必以前置字串來指定名稱空間 由預設名稱空間與屬性名稱所形成的全域名稱
<A xmlns=“ <B B1=“abcd”> --- <{ </A>
23
使用名稱空間的注意事項 同一元素的屬性名稱必須保持唯一
不管前名稱空間與區域名稱如何指定,最後一定不能造成同一元素中,任意兩屬性有相同的全域名稱。以下文件中的bad元素均不合法: <!-- is bound to n1 and n2 --> <X xmlns:n1=“ xmlns:n2=“ <bad a=“1” a=“2” /> <bad n1:a=“1” n2:a=“2” /> </X>
24
使用名稱空間的注意事項(續) 注意XML識別字 注意冒號的使用 在宣告Namespace時,前置字串不可以xml為字首來命名
任何元素或屬性的名稱,只能有一個冒號,或不包含冒號
Similar presentations