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文档中预定义好的实体:
< | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
实体必须以符号"&"开头,以符号";"结尾。
CDATA部件
在CDATA内部的所有内容都会被解析器忽略。
如果文本包含了很多的"<"字符和"&"字符——就象程序代码一样,那么最好把他们都放到CDATA部件中。
一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束:
<script> <![CDATA[ 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>