五、XML 元素XML 命名規(guī)則名稱可以含字母、數(shù)字以及其他的字符 名稱不能以數(shù)字或者標(biāo)點(diǎn)符號(hào)開(kāi)始 名稱不能以字符 “xml”(或者 XML、Xml)開(kāi)始 名稱不能包含空格 可使用任何名稱,沒(méi)有保留的字詞。 最佳命名習(xí)慣名稱應(yīng)當(dāng)比較簡(jiǎn)短,比如:<book_title>,而不是:<the_title_of_the_book>。 避免 "-" 字符。如果您按照這樣的方式進(jìn)行命名:"first-name",一些軟件會(huì)認(rèn)為需要提取第一個(gè)單詞。 避免 "." 字符。如果您按照這樣的方式進(jìn)行命名:"first.name",一些軟件會(huì)認(rèn)為 "name" 是對(duì)象 "first" 的屬性。 避免 ":" 字符。冒號(hào)會(huì)被轉(zhuǎn)換為命名空間來(lái)使用(稍后介紹)。 非英語(yǔ)的字母比如 éòá 也是合法的 XML 元素名,不過(guò)需要留意當(dāng)軟件開(kāi)發(fā)商不支持這些字符時(shí)可能出現(xiàn)的問(wèn)題。 XML 文檔包含 XML 元素XML 元素的概念XML 元素指的是從(且包括)開(kāi)始標(biāo)簽直到(且包括)結(jié)束標(biāo)簽的部分。 元素可包含其他元素、文本或者兩者的混合物。 元素也可以擁有屬性。
<bookstore>
<book category="CHILDREN"> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title>Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> 上例中,<bookstore> 和 <book> 都擁有元素內(nèi)容,因?yàn)樗鼈儼似渌亍?/span> 上例中,<author> 只有文本內(nèi)容,因?yàn)樗鼉H包含文本。 上例中,只有 <book> 元素?fù)碛?b>屬性 (category="CHILDREN")。 XML 元素是可擴(kuò)展的XML 元素可擴(kuò)展,以攜帶更多的信息。 XML 的優(yōu)勢(shì)之一,就是可以經(jīng)常在不中斷應(yīng)用程序的情況進(jìn)行擴(kuò)展。 六、XML 屬性XML 屬性屬性 (Attribute) 提供關(guān)于元素的額外(附加)信息。類似 HTML。 從 HTML,會(huì)回憶起:<img src="computer.gif">。"src" 屬性提供有關(guān) <img> 元素的額外信息。 屬性通常提供不屬于數(shù)據(jù)組成部分的信息。 下例中,文件類型與數(shù)據(jù)無(wú)關(guān),但是對(duì)需要處理這個(gè)元素的軟件來(lái)說(shuō)卻很重要: <file type="gif">computer.gif</file> XML 屬性必須加引號(hào)屬性值必須被引號(hào)包圍,不過(guò)單引號(hào)和雙引號(hào)均可使用。 如果屬性值本身包含雙引號(hào),那么有必要使用單引號(hào)包圍它,就像這個(gè)例子: <gangster name='George "Shotgun" Ziegler'> 或者使用實(shí)體引用: <gangster name="George "Shotgun" Ziegler"> XML 元素 vs. 屬性在第一個(gè)例子中,sex 是一個(gè)屬性。在第二個(gè)例子中,sex 則是一個(gè)子元素。提供相同的信息。
<person
sex="female">
<firstname>Anna</firstname> <lastname>Smith</lastname> </person>
<person>
<sex>female</sex> <firstname>Anna</firstname> <lastname>Smith</lastname> </person> 經(jīng)驗(yàn):在 HTML 中,屬性用起來(lái)很便利,但是在 XML 中,應(yīng)該盡量避免使用屬性。 如果信息感覺(jué)起來(lái)很像數(shù)據(jù),那么請(qǐng)使用子元素。沒(méi)有什么規(guī)矩。 表示的方式 下面的三個(gè) XML 文檔包含完全相同的信息: 第一個(gè)例子中使用了 date 屬性:
<note
date="08/08/2008">
<to>George</to> </note> 第二個(gè)例子中使用了 date 元素:
<note>
<date>08/08/2008</date> <to>George</to> </note> 第三個(gè)例子中使用了擴(kuò)展的 date 元素(最推薦):
<note>
<date> <day>08</day> <month>08</month> <year>2008</year> </date> <to>George</to> </note> 使用屬性而引起的一些問(wèn)題:屬性無(wú)法包含多重的值(元素可以) 屬性無(wú)法描述樹(shù)結(jié)構(gòu)(元素可以) 屬性不易擴(kuò)展(為未來(lái)的變化) 屬性難以閱讀和維護(hù) 盡量使用元素來(lái)描述數(shù)據(jù)。而僅僅使用屬性來(lái)提供與數(shù)據(jù)無(wú)關(guān)的信息。 針對(duì)元數(shù)據(jù)的 XML 屬性向元素分配 ID 引用。可用于標(biāo)識(shí) XML 元素,它起作用的方式與 HTML 中 ID 屬性是一樣的。 <messages> <note id="501"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note> <note id="502"> <to>John</to> <from>George</from> <heading>Re: Reminder</heading> <body>I will not</body> </note> </messages> 上面的 ID 僅僅是一個(gè)標(biāo)識(shí)符,用于標(biāo)識(shí)不同的便簽。它并不是便簽數(shù)據(jù)的組成部分。 在此極力傳遞的理念是:元數(shù)據(jù)(有關(guān)數(shù)據(jù)的數(shù)據(jù))應(yīng)當(dāng)存儲(chǔ)為屬性,而數(shù)據(jù)本身應(yīng)當(dāng)存儲(chǔ)為元素。 七、XML 驗(yàn)證和驗(yàn)證器“形式良好”的 XML:擁有正確語(yǔ)法的 XML。 “合法”的 XML:通過(guò) DTD 驗(yàn)證的 XML。 驗(yàn)證 XML 文檔合法的 XML 文檔是“形式良好”的 XML 文檔,同樣遵守文檔類型定義 (DTD) 的語(yǔ)法規(guī)則: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE note SYSTEM "Note.dtd"> <note> </note> DOCTYPE 聲明是對(duì)外部 DTD 文件的引用。 XML DTDDTD 的作用是定義 XML 文檔的結(jié)構(gòu)。它使用一系列合法的元素來(lái)定義文檔結(jié)構(gòu): <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> XML SchemaXML Schema :W3C 支持的一種基于 XML 的 DTD 代替者。 驗(yàn)證器工具,幫助檢查 XML 文件的語(yǔ)法,以便對(duì)任何 XML 文件進(jìn)行語(yǔ)法檢查。 XML 錯(cuò)誤會(huì)終止程序XML 程序八、XML 瀏覽器支持幾乎所有的主流瀏覽器均支持 XML 和 XSLT。 Mozilla Firefox從 1.0.2 版本開(kāi)始,Firefox 就已開(kāi)始支持 XML 和 XSLT(包括 CSS)。 MozillaMozilla 含有用于 XML 解析的 Expat,并支持顯示 XML + CSS。Mozilla 同時(shí)擁有對(duì) Namespaces 的某些支持。 Mozilla 同樣可做到對(duì) XSLT 的執(zhí)行(XSLT implementation)。 Netscape自從版本 8 開(kāi)始,Netscape 開(kāi)始使用 Mozilla 的引擎,因此它對(duì) XML / XSLT 的支持與 Mozilla 是相同的。 Opera自從版本 9 開(kāi)始,Opera 已經(jīng)擁有對(duì) XML / XSLT(以及 CSS)的支持。版本 8 僅支持 XML + CSS。 Internet Explorer自從版本 6 開(kāi)始,Internet Explorer 就開(kāi)始支持 XML、Namespaces、CSS、XSLT 以及 XPath。 注釋:Internet Explorer 5 同樣擁有對(duì) XML 的支持,但是 XSL 部分與 W3C 的官方標(biāo)準(zhǔn)不兼容! 九、XML 文件查看在所有現(xiàn)代瀏覽器中,均能夠查看原始的 XML 文件。 XML 文件不會(huì)直接顯示為 HTML 頁(yè)面。 XML 文檔不會(huì)攜帶有關(guān)如何顯示數(shù)據(jù)的信息。 在沒(méi)有任何有關(guān)如何顯示數(shù)據(jù)的信息的情況下,大多數(shù)的瀏覽器都會(huì)僅僅把 XML 文檔顯示為源代碼。 十、XML 顯示使用 CSS 顯示 XML使用 CSS 來(lái)格式化 XML 文檔是有可能的。 下例第二行,<?xml-stylesheet type="text/css" href="cd_catalog.css"?>,把這個(gè) XML 文件鏈接到 CSS 文件: <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/css" href="cd_catalog.css"?> <CATALOG> </CATALOG>
使用 XSLT 顯示 XML通過(guò)使用 XSLT,可以向 XML 文檔添加顯示信息。 XSLT 是首選的 XML 樣式表語(yǔ)言。 XSLT (eXtensible Stylesheet Language Transformations) 遠(yuǎn)比 CSS 更加完善。 使用 XSLT 的方法之一是在瀏覽器顯示 XML 文件之前,先把它轉(zhuǎn)換為 HTML, 下例第二行,<?xml-stylesheet type="text/xsl" href="simple.xsl"?>,把這個(gè) XML 文件鏈接到 XSL 文件: <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="simple.xsl"?> <breakfast_menu> <food> <name>Belgian Waffles</name> <price>$5.95</price> </food> </breakfast_menu> 在服務(wù)器上通過(guò) XSLT 轉(zhuǎn)換 XML上例中,XSLT 轉(zhuǎn)換是由瀏覽器完成的,瀏覽器讀取的是 XML 文件。 在使用 XSLT 來(lái)轉(zhuǎn)換 XML 時(shí),不同的瀏覽器可能會(huì)產(chǎn)生不同結(jié)果。為了減少這種問(wèn)題,可以在服務(wù)器上進(jìn)行 XSLT 轉(zhuǎn)換。 不論轉(zhuǎn)換由服務(wù)器還是由瀏覽器進(jìn)行,輸出結(jié)果完成相同。 |
|
來(lái)自: herowuking > 《XML》