一.數據島技術
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文檔中預定義好的實體:
< | < | 小於號 |
> | > | 大於號 |
& | & | 和 |
' | ' | 單引號 |
" | " | 雙引號 |
實體必須以符號"&"開頭,以符號";"結尾。
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>