而命名空間的設計,可以避免標籤之間的命名相同造成的衝突讓文件無法正確解析出來。
舉例來說:以下是一份關於描述HTML格式的XML文件:
<table> <tr> <td>Name</td> <td>Sex</td> <td>Age</td> </tr> </table>簡單來說就是在螢幕上顯示三個有Name、Sex以及Age欄位的表格,為何會顯示出表格而不是只有輸出類似程式碼的文字,也是由於我們使用的XML文件解析器(也就是網頁瀏覽器)的設計會根據文件的命名空間判定此文件為HTML格式,將其輸出為表格的樣式。
假設我們自己定義了一個XML文件:
<table> <name>Ryan</name> <sex>Male</sex> <age>30</age> </table>以上的文件是在描述說我有一張表格,而裡面有一些個人的基本資料。
但是如果我將自行定義的這些程式片段加入以上的文件中,便會有所謂的命名衝突的問題,因為兩個程式片段中都包含了<table>這個元素,所以XML解析器會不清楚要如何分辨以及處理該文件。
因此我們就需要手動去做宣告的動作,將上面的程式片段宣告為HTML,而下面的文件宣告為自定義的文件。
宣告命名空間的語法是:
xmlns:prefix="URI"一般來說URI看起來都是網址,但是XML解析器並不是到這個網址擷取關於命名空間的資訊,它只是一組獨一無二的識別字,只是有些人會順便把命名空間相關的資訊放到此網址上面,好讓使用者可以輕易了解文件資訊。
例如:http://www.w3.org/TR/html4/
<h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Name</h:td> <h:td>Sex</h:td> <h:td>Age</h:td> </h:tr> </h:table> <p:table xmlns:p="http://www.mydomain.com/profile"> <p:name>Ryan</p:name> <p:sex>Male</p:sex> <p:age>30</p:age> </p:table>xmlns後面接的「h:」以及「p:」的就是在宣告該標籤的命名空間(自行定義),每一個開頭標籤和結尾標籤都要加上此「字首(Prefix)」。
我們也可以透過 root 標籤統一來定義文件,這樣一來整份文件都會在有效範圍內:
<root xmlns:h="http://www.w3.org/TR/html4/" xmlns:p="http://www.mydomain.com/profile" > <h:table> <h:tr> <h:td>Name</h:td> <h:td>Sex</h:td> <h:td>Age</h:td> </h:tr> </h:table> <p:table> <p:name>Ryan</p:name> <p:sex>Male</p:sex> < <p:age>30</p:age> </p:table>此外當您宣告xmlns後,該標籤底下的的子標籤,都會使用相同的命名空間,所以其實我們可以將xmlns後面的省略「字首」宣告,而子標籤內「字首」也全部拿掉:
<table xmlns="http://www.w3.org/TR/html4/"> <tr> <td>Name</td> <td>Sex</td> <td>Age</td> </tr> </table> <table xmlns="http://www.mydomain.com/profile"> <name>Ryan</name> <sex>Male</sex> <age>30</age> </table>這樣是不是簡單明瞭多了呢。
參考網站:
http://www.w3schools.com/xml/xml_namespaces.asp
讲得好明白
回覆刪除好棒
回覆刪除