xml 總結(一)數據島,命名空間

 

一.數據島技術

XML數據可以以數據島的形式嵌入HTML頁面。

XML數據可以象下面的例子那樣嵌入HTML頁面:

<xml id="note">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
</xml>

或者象下面這樣嵌入外部單獨的XML文件:

<xml id="note" src="note.xml">
</xml>

注意那個<xml>標記是一個HTML元素,而不是一個XML元素。

 


 

數據綁定

XML數據島可以綁定到HTML元素上(比如表格)。

在下面的例子中,一個XML數據島(ID=cdcat)被從外部XML文檔載入。一個HTML的表格綁定到此數據島上。HTML表格內部的span元素使用datafld屬性和XML文檔相應的XML元素相互綁定。

<html>
<body>
<xml id="cdcat" src="cd_catalog.xml"></xml>
<table border="1" datasrc="#cdcat">
<tr>
<td><span datafld="ARTIST"></span></td>
<td><span datafld="TITLE"></span></td>
</tr>
</table>
</body>
</html> 

 

把數據島綁定到<span> 或者<div> 元素上

<span>或<div>元素都可以用來顯示XML數據。

沒有必要使用table元素來顯示XML數據,數據可以通過數據島綁定到任何一個HTML元素上。

所要做的就是在你得頁面中添加一些<span> 或者<div>元素,使用數據資源屬性把每一個元素和XML文檔元素綁定起來,就象下面這樣:

<br />Title:
<span datasrc="#xmldso" datafld="TITLE"></span>
<br />Artist:
<span datasrc="#xmldso" datafld="ARTIST"></span>
<br />Year:
<span datasrc="#xmldso" datafld="YEAR"></span>

或者象這樣的形式:

<br />Title:
<div datasrc="#xmldso" datafld="TITLE"></div>
<br />Artist:
<div datasrc="#xmldso" datafld="ARTIST"></div>
<br />Year:
<div datasrc="#xmldso" datafld="YEAR"></div>

注意如果你使用<div>元素,數據將會顯示在新的一行裏。

上面的例子,可以看到XML數據都顯示在一行裏。如果要控制數據換行,就必須在你的代碼裏添加一些腳本程序。 

注:cd_catalog.xml文件見附錄1,

   當導入命名空間後,不能使用數據島技術了。

二.XML CDATA

下面是五個在XML文檔中預定義好的實體:

&lt; < 小於號
&gt; > 大於號
&amp; &
&apos; ' 單引號
&quot; " 雙引號

實體必須以符號"&"開頭,以符號";"結尾

CDATA部件

在CDATA內部的所有內容都會被解析器忽略。

如果文本包含了很多的"<"字符和"&"字符——就象程序代碼一樣,那麼最好把他們都放到CDATA部件中。

一個 CDATA 部件以"<![CDATA[" 標記開始,以"]]>"標記結束:

<script>

function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1
}
else
{
return 0
}
}

</script>

在前面的例子中,所有在CDATA部件之間的文本都會被解析器忽略。

CDATA注意事項:

CDATA部件之間不能再包含CDATA部件(不能嵌套)。如果CDATA部件包含了字符"]]>" 或者"<![CDATA[" ,將很有可能出錯哦。

同樣要注意在字符串"]]>"之間沒有空格或者換行符。

 三.XML NameSpace

XML命名空間的定義由命名空間的聲明、“合法名稱”的定義及應用、命名空間的作用域三部分組成。

1.XML命名空間的聲明

<學生:學生 xmlns:學生 = http://www.xml.net.cn/學生
xmlns:班主任 = http://www.xml.net.cn/班主任>
就是命名空間聲明。
命名空間聲明有兩種方式,即直接定義方式和缺省定義方式:
直接定義方式:
xmlns: [命名空間前綴] = [命名空間名]
缺省定義方式:
xmlns = [命名空間名]

命名空間聲明中,等號右邊的屬性值部分是一個URI(Uniform Resource Identifier統一資源標識符)引用,其功能是區分不同的命名空間。因此,這個URI引用被稱爲命名空間名,它應該具有唯一性和持久性。雖然該屬性值使用了URI,但其目的並不是要直接得到一個Schema或DTD,主要的目的在於標識特定的命名空間。

命名空間聲明中,等號左邊的屬性名部分,如果有用冒號“:”分隔開的“命名空間前綴”,就是直接定義方式,其中“命名空間前綴”是一個合法的XML名稱。沒有“命名空間前綴”的命名空間聲明,就是缺省的命名空間聲明。 命名空間聲明將“命名空間名”與“命名空間前綴”綁定在一起。

2. “合法名稱”的定義和應用

在定義了命名空間的聲明以後,對如何引用<命名空間前綴>構成新的元素名和屬性名,需要再做進一步的統一規範,這就是所謂“合法名稱”定義的由來。

“合法名稱”由用西文冒號“:”分開的前綴部分和本地部分組成,其中前綴部分和本地部分都是一個合法的XML名稱。如:“班主任:姓名”。

“合法名稱”的前綴部分,規定必須是一個“命名空間前綴”,且這個命名空間前綴必須已經經過命名空間聲明聲明過,語法分析器會自動將其與聲明中的URI引用相聯繫。冒號後的部分是該命名空間中定義的元素或屬性名,提供了“合法名稱”的本地部分。在用缺省方式聲明命名空間時,由於“命名空間前綴”爲空,因此,這時的“合法名稱”只剩下本地部分。

“合法名稱”的應用主要有三種情況:
用於起始元素標記、結束元素標記和空元素標記。
用於屬性的定義。例如:

<?xml version ="1.0" encoding = "GB2312"?>
<學生:學生 xmlns:學生 = http://www.xml.net.cn/學生>
<學生:姓名>李明</學生:姓名>
<學生:班級 學生:數字類型 = "中文">三年級二班</學生:班級>
<學生:住址 學生:數字類型 = "阿拉伯">135樓210室</學生:住址>
</學生:學生>

用於DTD中的元素名和屬性類型。例如:

<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 學生:學生 (學生:姓名, 學生:班級,學生:住址)>
<!ATTLIST 學生:學生 xmlns:學生
CDATA #FIXED "http://www.xml.net.cn/學生">
<!ELEMENT 學生:姓名 (#PCDATA)>
<!ELEMENT 學生:班級 (#PCDATA)>
<!ELEMENT 學生:住址 (#PCDATA)>

3.命名空間的作用域

所謂命名空間的作用域範圍是指,一個命名空間聲明可以作用到哪些元素和屬性。一般可以認爲命名空間聲明,能夠作用到說明它的元素和該元素的所有內容元素,除非被其他命名空間聲明所覆蓋。

與XML命名空間相關的主要概念,討論到這裏基本上可以結束了。由於篇幅的關係,與XML命名空間相關的一些曾經引起爭論的問題,如“命名空間與DTD”,就不在這裏討論了。XML命名空間已經在XSLT、Xlink等標準中得到應用,它已經成爲XML標準家族不可或缺的一員。

 

 

附錄:

1.cd_catalog.xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited with XML Spy v4.2 -->
<CATALOG>
 <CD>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD>
  <TITLE>Hide your heart</TITLE>
  <ARTIST>Bonnie Tyler</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS Records</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
 </CD>
 <CD>
  <TITLE>Greatest Hits</TITLE>
  <ARTIST>Dolly Parton</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>RCA</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1982</YEAR>
 </CD>
 <CD>
  <TITLE>Still got the blues</TITLE>
  <ARTIST>Gary Moore</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Virgin records</COMPANY>
  <PRICE>10.20</PRICE>
  <YEAR>1990</YEAR>
 </CD>
 <CD>
  <TITLE>Eros</TITLE>
  <ARTIST>Eros Ramazzotti</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>BMG</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1997</YEAR>
 </CD>
 <CD>
  <TITLE>One night only</TITLE>
  <ARTIST>Bee Gees</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Polydor</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1998</YEAR>
 </CD>
 <CD>
  <TITLE>Sylvias Mother</TITLE>
  <ARTIST>Dr.Hook</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS</COMPANY>
  <PRICE>8.10</PRICE>
  <YEAR>1973</YEAR>
 </CD>
 <CD>
  <TITLE>Maggie May</TITLE>
  <ARTIST>Rod Stewart</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Pickwick</COMPANY>
  <PRICE>8.50</PRICE>
  <YEAR>1990</YEAR>
 </CD>
 <CD>
  <TITLE>Romanza</TITLE>
  <ARTIST>Andrea Bocelli</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Polydor</COMPANY>
  <PRICE>10.80</PRICE>
  <YEAR>1996</YEAR>
 </CD>
 <CD>
  <TITLE>When a man loves a woman</TITLE>
  <ARTIST>Percy Sledge</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Atlantic</COMPANY>
  <PRICE>8.70</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Black angel</TITLE>
  <ARTIST>Savage Rose</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Mega</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1995</YEAR>
 </CD>
 <CD>
  <TITLE>1999 Grammy Nominees</TITLE>
  <ARTIST>Many</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Grammy</COMPANY>
  <PRICE>10.20</PRICE>
  <YEAR>1999</YEAR>
 </CD>
 <CD>
  <TITLE>For the good times</TITLE>
  <ARTIST>Kenny Rogers</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Mucik Master</COMPANY>
  <PRICE>8.70</PRICE>
  <YEAR>1995</YEAR>
 </CD>
 <CD>
  <TITLE>Big Willie style</TITLE>
  <ARTIST>Will Smith</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1997</YEAR>
 </CD>
 <CD>
  <TITLE>Tupelo Honey</TITLE>
  <ARTIST>Van Morrison</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Polydor</COMPANY>
  <PRICE>8.20</PRICE>
  <YEAR>1971</YEAR>
 </CD>
 <CD>
  <TITLE>Soulsville</TITLE>
  <ARTIST>Jorn Hoel</ARTIST>
  <COUNTRY>Norway</COUNTRY>
  <COMPANY>WEA</COMPANY>
  <PRICE>7.90</PRICE>
  <YEAR>1996</YEAR>
 </CD>
 <CD>
  <TITLE>The very best of</TITLE>
  <ARTIST>Cat Stevens</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Island</COMPANY>
  <PRICE>8.90</PRICE>
  <YEAR>1990</YEAR>
 </CD>
 <CD>
  <TITLE>Stop</TITLE>
  <ARTIST>Sam Brown</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>A and M</COMPANY>
  <PRICE>8.90</PRICE>
  <YEAR>1988</YEAR>
 </CD>
 <CD>
  <TITLE>Bridge of Spies</TITLE>
  <ARTIST>T'Pau</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Siren</COMPANY>
  <PRICE>7.90</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Private Dancer</TITLE>
  <ARTIST>Tina Turner</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Capitol</COMPANY>
  <PRICE>8.90</PRICE>
  <YEAR>1983</YEAR>
 </CD>
 <CD>
  <TITLE>Midt om natten</TITLE>
  <ARTIST>Kim Larsen</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Medley</COMPANY>
  <PRICE>7.80</PRICE>
  <YEAR>1983</YEAR>
 </CD>
 <CD>
  <TITLE>Pavarotti Gala Concert</TITLE>
  <ARTIST>Luciano Pavarotti</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>DECCA</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1991</YEAR>
 </CD>
 <CD>
  <TITLE>The dock of the bay</TITLE>
  <ARTIST>Otis Redding</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Atlantic</COMPANY>
  <PRICE>7.90</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Picture book</TITLE>
  <ARTIST>Simply Red</ARTIST>
  <COUNTRY>EU</COUNTRY>
  <COMPANY>Elektra</COMPANY>
  <PRICE>7.20</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD>
  <TITLE>Red</TITLE>
  <ARTIST>The Communards</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>London</COMPANY>
  <PRICE>7.80</PRICE>
  <YEAR>1987</YEAR>
 </CD>
 <CD>
  <TITLE>Unchain my heart</TITLE>
  <ARTIST>Joe Cocker</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>EMI</COMPANY>
  <PRICE>8.20</PRICE>
  <YEAR>1987</YEAR>
 </CD>
</CATALOG>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章