国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java開發(fā)者XML基礎(chǔ)(一)

2019-11-18 14:47:16
字體:
供稿:網(wǎng)友

  xml介紹

  經(jīng)常會出現(xiàn)這種情況,新思想產(chǎn)生之后,人們回過頭來往往覺得其非常簡單并且理所應(yīng)當,以至于每個人都希奇竟然以前不是這樣。這種情況往往表明所謂的新思想究竟不是真正的全新的思想。java這一革新性的語言就是吸取之前的所有程序語言的思想才得以出現(xiàn)的。就象Java源于之前的程序語言一樣,現(xiàn)在出現(xiàn)了XML——可擴展標記語言(the Extensible Markup Language)。XML是一種方便人們描述數(shù)據(jù)的輕量語言。

  XML為標記結(jié)構(gòu)性信息如文本提供了一種簡單而通用的格式。XML承繼了Html這一通用文本表示格式并將之推廣,從而可處理任何類型的數(shù)據(jù)。在此過程中,XML不僅重鑄了HTML并且正影響著商業(yè)業(yè)務(wù)關(guān)于其自身信息的考慮。在世界越來越被文檔和數(shù)據(jù)交換驅(qū)策的情況下,XML時代來臨了。

  一點背景知識

  XML和HTML之所以被稱為標記語言(markup languages)是因為XML用象征結(jié)構(gòu)和意義的標簽來包裹文本部分,從而為純文本文檔添加結(jié)構(gòu)信息,這一點和人們用鋼筆來標識句子、添加注釋很相似。然而HTML定義了一系列的標簽和標簽結(jié)構(gòu),而XML沒有預(yù)先定義這些,XML的創(chuàng)建者可以定義標簽、規(guī)則以及它們的含義。

  XML和HTML都源自標準通用標記語言SGML。SGML(Standard Generalized Markup Language)是所有標記語言的始祖,在出版業(yè)(包括O'Reilly)廣泛應(yīng)用多年。但是直到Web通行,它才通過HTML流傳開來。HTML起自SGML的一個小小應(yīng)用,假如HTML無所不能的話,這說明簡單勝過一切。

  然而盡管HTML曾經(jīng)頗為風行,但最終結(jié)果表明它還大有局限。使用HTML的文檔把結(jié)構(gòu)信息(如<head>和 <body>)和描述信息(舉個尤其過分的例子:<blink>)不恰當?shù)鼗煸谝黄稹_@種把模型和用戶界面攪在一塊兒的方式對HTML作為數(shù)據(jù)交互格式帶來了限制,因為計算機難以理解這種方式。XML文檔完全由結(jié)構(gòu)組成,應(yīng)用含義取決于文檔讀者。本章我們將看到,有幾種相關(guān)語言用于解釋和轉(zhuǎn)換XML以利于其顯示和后續(xù)處理。

  文本還是二進制

  Tim Berners-Lee二十世紀八十年代后期在歐洲粒子物理研究所(CERN)開始試運行Web時,他想用超文本組織規(guī)劃信息。由于Web需要一種協(xié)議,HTTP——一種基于文本的簡單客戶端-服務(wù)器協(xié)議創(chuàng)建出來。純文本方式到底有什么過人之處呢?比如說,Tim為什么不采用微軟的Word格式做為Web文檔的基礎(chǔ)呢?基于二進制的、人類不易閱讀的格式和協(xié)議難道不是效率更高嗎?既然從Web誕生到現(xiàn)在有數(shù)以百萬億計的HTTP事務(wù),讓它們用英文單詞“GET”和“POST”,這真的個好主意嗎?

  答案是“是”,如我們現(xiàn)在看到的一樣。開發(fā)人員顯然更輕易和人類可讀的東西打交道。盡管可以在時間和空間上對其進行高度優(yōu)化,但由于它已被普遍接受并且可輕易跨越多個平臺,簡單和透明顯得更為重要。這是XML的首要基本原則。

  通用解析器

  使用文本交換數(shù)據(jù)不僅僅是一種新思想;從歷史上看,必須為每個新文檔格式寫一個新的解析器。解析器是讀取文檔并能理解格式規(guī)則的應(yīng)用程序,它常要求文檔內(nèi)容符合某些規(guī)則。例如,Java中的PRoperties類是專門處理標準屬性文件格式的解析器。在簡單電子制表程序中,我們構(gòu)造了一個能理解基本數(shù)學(xué)表達式的解析器。我們將看到,隨著復(fù)雜度的增加,解析可能變得非常棘手。

  XML狀態(tài)

  本文中我們要討論的API非常強大而且已經(jīng)很好地測試過,如今它們已被廣泛應(yīng)用于企業(yè)級系統(tǒng)。遺憾的是,現(xiàn)在和Java綁定的XML工具只能部分解除開發(fā)者的負擔。

  盡管我們已經(jīng)從低級的字符串處理跨越到公共的結(jié)構(gòu)化文檔格式,但標準工具通常仍然要求開發(fā)人員編寫低級代碼來遍歷文本內(nèi)容,手工解析字符串數(shù)據(jù)。這樣的程序難免有點不太穩(wěn)定,而且其中的大部分工作單調(diào)乏味。下一步我們將使用生成工具讀取XML文檔描述(XML DTD或XML Schema)并生成相應(yīng)的Java類,或者將已經(jīng)存在的類自動綁定到XML數(shù)據(jù)上。

  XML API

  Java1.4自帶所有和XML協(xié)同工作的基本API,包括javax.xml標準擴展包,該包處理用于XML的簡單API(Simple API for XML,SAX)和文檔對象模型(document.nbspObject Model,DOM)以及擴展的風格表單語言(eXtensible Stylesheet Language,XSL)轉(zhuǎn)換。假如您使用的是Java1.4之前的版本,您仍然可以使用所有這些工具,但您必須從http://java.sun.com/xml/.上下載各個相應(yīng)程序包。

  XML和Web瀏覽器

  微軟公司的IE網(wǎng)頁瀏覽器是第一個顯式支持XML的瀏覽器。假如您在IE5.0或以上版本中載入XML文件,文件將使用非凡的樣式菜單顯示為一棵樹的形式。通過使用動態(tài)HTML,該樣式菜單答應(yīng)查看文檔的時候收縮和展開樹節(jié)點。IE也支持在瀏覽器中直接進行基本的XSL轉(zhuǎn)換。

  Netscape 6.x 和 最新的 Mozilla也能理解XML內(nèi)容并支持通過XSL顯示文檔。然而到本章寫作的時候為止,它們?nèi)笔顩r仍不能提供友好的閱讀工具。您可以通過使用“查看源文件”選項來使XML以較好形式顯示。但一般而言,假如您通過以上這些瀏覽器或其它不顯式轉(zhuǎn)換XML的瀏覽器加載XML文檔,這些瀏覽器只是簡單地顯示剝除所有標簽(結(jié)構(gòu)信息)之后的文檔文本。這是它們作用于XML的預(yù)定方式。 XML基礎(chǔ)

  XML的基本語法相當簡單。假如您有HTML的相關(guān)經(jīng)驗,那您實際上對XML也有所了解。象HTML一樣,XML將信息表示為使用標簽添加結(jié)構(gòu)的文本。標簽以夾在小于號(<)和大于號(>)之間的名字開始。和HTML不同的是,XML的標簽必須匹配。換言之,開始標簽之后必須有相應(yīng)的結(jié)束標簽。結(jié)束標簽很象開始標簽,但它以小于號和斜杠(</)打頭。開始標簽、結(jié)束標簽以及開始標簽和結(jié)束標簽之間的所有內(nèi)容合起來被稱為XML文檔的元素(element)。元素中可以包含其它元素,但它們必須正確嵌套,所有元素內(nèi)的開始標簽必須在元素本身結(jié)束前用結(jié)束標簽結(jié)束。元素可以包含純文本和文本和元素的混合物。注釋放置于標記“<!—”和“ -->”之間。下面是幾個例子。

<!-- Simple -->
<Sentence>This is text.</Sentence>
<!-- Element -->
<Paragraph><Sentence>This is text.</Sentence></Paragraph>

<!-- Mixed -->
<Paragraph>
<Sentence>This <verb>is</verb> text.</Sentence>
</Paragraph>
<!-- Empty -->

<PageBreak></PageBreak>
  空白標簽可以用一個以斜杠和大于號結(jié)束的單個標簽更緊湊的表示(/>),如下所示:

<PageBreak/>

  屬性

  XML元素可以包含屬性,也就是開始標簽中提供的名-值對。如:

<document.nbsptype="LEGAL" ID="42">...</document>

<Image name="truffle.jpg"/>
  屬性值必須包含在引號中,使用雙引號(”)或單引號(’)都可以。單引號在值本身含有雙引號時尤其有用。
  
  屬性用于和元素數(shù)據(jù)相關(guān)的簡單、非結(jié)構(gòu)性的性質(zhì)或標識。總是可以把屬性組織為子元素,所以沒有必須使用屬性的真正要求。但使用屬性通常使XML文檔更賦邏輯,更易閱讀。在上面的小例子片斷中,document.素的屬性type和 ID代表文檔的元數(shù)據(jù)。我們可能期望代表document.Java類擁有文檔類型(如LEGAL)的靜態(tài)標識。對Image元素而言,屬性是只包含文件名的更為簡潔的形式。通常屬性沒有重要的內(nèi)部結(jié)構(gòu),是不可再分的;而子元素卻可以任意復(fù)雜。

  XML文檔

  XML文檔以下列文檔頭開頭并且有一個根元素。

<?xml version="1.0" encoding="UTF-8"?>

<Mydocument>

</Mydocument>
  文件頭指明了XML的版本和文件的編碼特征。可以把元素層次理解為一棵樹的形式,根元素也就是元素層次的頂層元素。假如您漏掉這樣的文件頭或者XML文本中沒有單個根元素,那樣的東西只能稱為XML片斷。

  編碼

  XML文檔的默認編碼方式是UTF-8,一種ASCII使用者易于使用的8位Unicode編碼方式。但XML文檔可以通過指定XML文件頭的encoding屬性來指定文檔編碼。

  XML文檔中有些字符是需要保留使用的,比如表示元素標簽的字符“<”和“>”。假如您需要在XML文檔內(nèi)容中包含這些字符,則必須對它們進行轉(zhuǎn)碼。XML提供了稱為“實體(entities)”的轉(zhuǎn)義機制以對非凡結(jié)構(gòu)進行轉(zhuǎn)碼。XML中有五種預(yù)定義的實體。如表23-1所示。

  表23-1 XML實體

Entity
Encodes

&
& (ampersand)


< (less than)


> (greater than)

"
" (quotation mark)

'
' (apostrophe)
  也可以使用被稱作字符數(shù)據(jù)(CDATA)的非凡的不解析文本段來進行編碼。一個CDATA塊以<![CDATA[開始,以]]>結(jié)束,如下所示:

[code]<![CDATA[ Learning Java, O'Reilly & Associates ]]>[/code]
  CDATA塊看起來有點象注釋,但CDATA塊中的數(shù)據(jù)確實是XML文檔的一部分,只不過對解析器來說是不透明的。 命名空間

  您可能看到了HTML具有用來構(gòu)造網(wǎng)頁的<body>標簽,試想一下我們要為殯儀館編寫XML,而殯儀館因為某些令人恐怖的原因也使用<body>標簽。假如要將HTML和尸體信息混在一塊兒可能會帶來些問題。

  在這種情況下,假如您把HTML標簽和殯儀館標簽當做一種語言,文檔使用的元素(標簽名稱)就是這些語言的詞匯。XML命名空間指明對于給定元素您使用的是哪種字典,從而讓我們可以把它們隨意混合在一起。(稍后我們將討論XML Schema,它要求語言必須遵守語法和詞法檢查)。

  命名空間使用xmlns屬性指定,xmlns的值是定義該命名空間標簽集合(常包括標簽含義)的統(tǒng)一資源標識符(Universal Resource Identifier,URI):

<element xmlns="namespaceURI">
  URI不必是URL,URI的范圍比URL更為寬泛。URI實際上常被簡單視作獨特的字符串。對描述命名空間的文檔來說,URI實際上通常也是URL,但這只是就一般情況而言。

  xmlns命名空間屬性可以應(yīng)用到元素和其所有子元素上,這稱作該元素的默認命名空間。

<body xmlns="http://funeral-procedures.org/";>
  但通常在一個一個的標簽上指定命名空間更讓人滿足。要做到這點,我們可以使用xmlns屬性為命名空間定義一個非凡的標識符,并且將這個標識符做為要使用的標簽前綴。比如:

<funeral xmlns:fun="http://funeral-procedures.org/";>
<html><head></head><body>
<fun:body>Corpse #42</fun:body>
</funeral>
  在以上的XML代碼片中,我們用在<funeral>標簽中定義的前綴“fun:”限制body標簽。在這種情況下,我們還可以反過來用它限制根標簽。如:

<fun:funeral xmlns:fun="http://funeral-procedures.org/";>
  在XML的歷史上,對命名空間的支持相對而言時間不長,并非所有解析器都支持命名空間。要想支持命名空間,我們隨后討論的XML解析器工廠有一個轉(zhuǎn)換開關(guān)以指明您是否需要能理解命名空間的解析器。

factory.setNamespaceAware(true);

  我們將在以后的SAX和DOM部分進一步討論XML解析。

  驗證

  符合XML基本規(guī)則,具有正確的編碼以及匹配的標簽的文檔稱為形式良好的XML文檔。但文檔只是在句法上符合規(guī)范并不意味它就是有意義的文檔。文檔類型定義(document.nbspType Definitions,DTD)和XML Schema這兩個相關(guān)規(guī)范為XML元素提供了語法規(guī)范的方式,它們答應(yīng)您自己創(chuàng)建語法規(guī)則,比如在Address元素中City元素只能出現(xiàn)一次。XML Schema是進一步提供了描述標簽數(shù)據(jù)內(nèi)容驗證的靈活語言,包括簡單的數(shù)據(jù)類型和由數(shù)字及字符串組成的復(fù)雜類型。盡管XML Schema包含數(shù)據(jù)驗證和定義元素規(guī)則以外的東西,是最終的解決方案,但到目前為止XML Schema還是理論多于實際——至少就其和Java的集成而言是如此,我們希望這種情況能迅速改變。

  通過DTD或XML Schema描述檢查并符合規(guī)則的文檔稱為有效的文檔。文檔可能是形式良好的但并不是有效的,反之卻不可能。

  從HTML到XHTML

  不嚴格的說來,現(xiàn)在應(yīng)用最多的XML的形式是HTML。之所以說不嚴格,是因為HTML還算不上是形式良好的XML。HTML標簽違反了XML不答應(yīng)空元素的規(guī)則,一個典型的例子是HTML常用的沒有結(jié)束標簽的<p>

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 应城市| 仙游县| 加查县| 沂水县| 吴堡县| 天峨县| 汝城县| 屯门区| 北碚区| 松桃| 新源县| 嘉黎县| 鄂托克旗| 康乐县| 大连市| 綦江县| 黎城县| 盐津县| 砚山县| 双柏县| 龙海市| 开封县| 沈阳市| 彰化县| 江阴市| 离岛区| 黔西| 运城市| 鄂尔多斯市| 古交市| 合水县| 常山县| 嫩江县| 汶上县| 延庆县| 安泽县| 泸水县| 麟游县| 山东省| 临澧县| 封丘县|