2010年8月20日 星期五

什麼是名稱空間(Name Spaces)


關於Namespaces這個名詞,對我來說實在是不好理解
查了一些資料後,總算有一些初步的認識

根據W3C的定義:
[Definition: An XML namespace is identified by a URI reference [RFC3986]; element and attribute names may be placed in an XML namespace using the mechanisms described in this specification. ]

之所以會有名稱空間的出現,是為了解決元素名稱重複的問題
其實XML的namespace就是一項識別XML元素的機制
假設A君正在寫漫畫分類的xml文件
以下是簡單的範例:
<?xml version="1.0" encoding="Big5"?>
<comic-list>
   <entry>
       <title>灌籃高手</title>
       <rating>普遍級</rating>
   </entry>
   <entry>
      <title>浪人劍客</title>
      <rating>限制級</rating>
   </entry>
</comic-list>

而B君也寫了相同的文件,但分類的方式不一樣

<?xml version="1.0" encoding="Big5"?>
<comic-list>
   <entry>
      <author>井上雄彥</author>
      <title>灌籃高手</title>
      <rating>5 stars</rating>
   </entry>
   <entry>
      <author>井上雄彥</author>
      <title>浪人劍客</title>
      <rating>5 stars</rating>
   </entry>
</comic-list>

當我們試著將這兩份文件合併時,電腦判讀就會出現問題

<?xml version="1.0" encoding="Big5"?>
<comic-list>
   <entry>
      <author>井上雄彥</author>
      <title>灌籃高手</title>
      <rating>普遍級</rating>
       <rating>5 stars</rating>
   </entry>
   <entry>
      <author>井上雄彥</author>
      <title>浪人劍客</title>
      <rating>限制級</rating>
      <rating>5 stars</rating>
    </entry>
</comic-list>

電腦不知道讀取rating這個元素時,代表的到底是內容分級、還是評價分級
所以我們可以在元素前面加入前置詞(prefix),來解決判讀的問題


<?xml version="1.0" encoding="Big5"?>
<comic-list>
   <entry>
      <author>井上雄彥</author> 
      <title>灌籃高手</title>
      <content-rating>普遍級</content-rating>
      <quality-rating>5 stars</quality-rating>
   </entry>
   <entry>
      <author>井上雄彥</author>
      <title>浪人劍客</title>
      <content-rating>限制級</content-rating>
      <quality-rating>5 stars</quality-rating>
    </entry>
</comic-list>


另一個解決的方式就是使用名稱空間:
<?xml version="1.0" encoding="Big5"?>
<comic-list xmlns:ct="content"
                    xmlns:qa="quality">
   <entry>
      <author>井上雄彥</author> 
      <title>灌籃高手</title>
      <ct:rating>普遍級</ct:rating>
      <qa:rating>5 stars</qa:rating>
   </entry>
   <entry>
      <author>井上雄彥</author>
      <title>浪人劍客</title>
      <ct:rating>限制級</ct:rating>
      <qa:rating>5 stars</qa:rating>
    </entry>
</comic-list>

上述xmlns:稱為宣告namespace的關鍵字
而雙引號" "裡面的單字則是該名稱空間的名字
至於上述的ct以及qa則是別名,也可以說是名稱空間的前置詞(prefix)
代表它們所屬名稱空間的縮寫

名稱空間的使用有助於認證一份XML文件裡面的元素是獨一無二的

相關資料參考來源:

沒有留言:

張貼留言