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

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

windy‘s j2ee1.4 tutorial (chinese) --Understanding XML(010)

2019-11-18 16:16:41
字體:
供稿:網(wǎng)友
聲明:《本文是j2ee1.4 tutorial的中文翻譯,由于本人水平有限,其中還包含有很多的錯誤,還希望各位大蝦幫助改正,翻譯正在進(jìn)行中,我會陸續(xù)發(fā)表最新的部分,望大家能給與支持!》

產(chǎn)生xml數(shù)據(jù)
這部分將帶著你一步步的走進(jìn)創(chuàng)建XML文檔的過程。沿著這個方向,你將獲得對XML組件的體驗(yàn)。

編寫一個簡單的XML文件
你將從編寫一個幻燈演示的XML文件開始。在這個練習(xí)中,你將使用你的文本編輯器來產(chǎn)生數(shù)據(jù),這樣可以使你舒適的了解XML文件的基本格式。

產(chǎn)生文件
使用一個標(biāo)準(zhǔn)的文本編輯器,產(chǎn)生一個文件sideSample.xml

編寫聲明
下一步,寫一個聲明,它能使處理程序?qū)⑦@個文件識別為XML文件。這個聲明開始與字符“<?”,這個符號是標(biāo)準(zhǔn)的XML的處理指令標(biāo)識符。
  <?xml version='1.0' encoding='utf-8'?>  
這行識別這個文檔為XML文檔,它使用了1。0版本的XML規(guī)范,文檔使用的字符編碼識8位Unicode字符編碼方案。

因?yàn)檫@個文檔沒有被指定為“獨(dú)立的”,所以分析器會假定它可能包含對其他文檔的引用。

增加一個注釋
注釋可以被分析器忽略。一個程序?qū)嶋H上是看不到它的,除非你激活分析其中指定的設(shè)定。向文件中增加一個粗體的文本。

<?xml version='1.0' encoding='utf-8'?> 

<!-- A SAMPLE set of slides -->  

定義根元素
在聲明后,每個XML文件都要確切的定義一個根元素。文件中任何其他的元素被包含在根元素中。向文件輸入下面粗體的文本。
<?xml version='1.0' encoding='utf-8'?> 

<!-- A SAMPLE set of slides --> 

<slideshow> 

</slideshow> 
 
注意:XML元素的名稱是大小寫敏感的。結(jié)束標(biāo)志必須匹配開識標(biāo)志。 
 

向一個元素中增加屬性
一個幻燈顯示含有很多相關(guān)聯(lián)的數(shù)據(jù)條目,這些數(shù)據(jù)條目不需要任何的結(jié)構(gòu)。所以可以自然的將他們定義成slideshow的屬性。增加粗體文本到文件中來建立屬性。
...
  <slideshow 
    title="Sample Slide Show"
    date="Date of publication"
    author="Yours Truly"
    >
  </slideshow> 
但你產(chǎn)生一個標(biāo)記名稱或一個屬性的時候,你能使用連號(“-”),下滑線(“_”),冒號(“:”)和句號(“.”)加上字符和數(shù)字。與Html不同的是,XML屬性值總是在雙引號中,多個屬性之間不能被都好分隔。

 
注意: 冒號需要被小心使用或完全的不使用,因?yàn)樗麄冊诙x命名空間使會使用到。 
 
增加嵌套的元素
XML允許層次結(jié)構(gòu)的數(shù)據(jù),也就是說一個元素能夠包含其他的元素。增加下面的粗體文本來定義一個幻燈元素,在幻燈元素包含一個<title>元素。
<slideshow 
  ...
  >

   <!-- TITLE SLIDE -->
  <slide type="all">
    <title>Wake up to WonderWidgets!</title>
  </slide>

</slideshow> 
在這里, slide元素里包含一個type屬性。這個屬性的意義是這個幻燈片能夠?yàn)橐粋€主要的技術(shù)或主要的執(zhí)行人打上標(biāo)記。

更重要的是,盡管這個例子舉例說明了屬性與元素之間的不同。Title元素是觀眾能夠看到的,所以它是一個元素。另一方面,不需要被觀眾看到的類型就成為屬性。可以從另一個方面來想這個區(qū)別:元素是一個容器,像一個瓶子。屬性就是這個容器的特點(diǎn)。

增加HTML樣式的文本
既然XML允許你定義任意想要的標(biāo)記,那么你完全可以定義一個類似HTML的標(biāo)記集。實(shí)際上,XHTML標(biāo)準(zhǔn)就做這些工作。你將看到多關(guān)于SAX的說明。目前,下面的粗體文本定義了一個使用HTML樣式的幻燈。
  ...
  <!-- TITLE SLIDE -->
  <slide type="all">
    <title>Wake up to WonderWidgets!</title>
  </slide>

  <!-- OVERVIEW -->
  <slide type="all">
    <title>Overview</title>
      <item>Why <em>WonderWidgets</em> are great</item>
      <item>Who <em>buys</em> WonderWidgets</item>
  </slide>

</slideshow> 
注意:一個title元素和XHTML中的元素會發(fā)生沖突,因?yàn)樗麄冇型瑯拥拿帧N覀儗⒂懻摦a(chǎn)生沖突的機(jī)制。

增加一個空元素
在HTML和XML之間的一個主要的不同時所有的XML必須是格式良好的,也就是說,每一個標(biāo)記必須有結(jié)束標(biāo)記。使用一個結(jié)束標(biāo)記會讓你感覺非常的舒服。到現(xiàn)在為止,增加下面的粗體文本來增加一個空元素。
  ...
  <!-- OVERVIEW -->
  <slide type="all">
    <title>Overview</title>
    <item>Why <em>WonderWidgets</em> are great</item>
    <item/>
    <item>Who <em>buys</em> WonderWidgets</item>
  </slide>

</slideshow> 
注意:任何元素可能是空元素。
 
注意:另外一個格式良好的因素是正確的嵌套。所以<b><i>some_text</i></b> 是格式良好的。而下面的就不是<b><i>some_text</b></i>. 
 
完成的產(chǎn)品
下面是XML文件完成的版本:
<?xml version='1.0' encoding='utf-8'?>

<!--  A SAMPLE set of slides  --> 
<slideshow 
  title="Sample Slide Show"
  date="Date of publication"
  author="Yours Truly"
  >

  <!-- TITLE SLIDE -->
  <slide type="all">
    <title>Wake up to WonderWidgets!</title>
  </slide>

  <!-- OVERVIEW -->
  <slide type="all">
    <title>Overview</title>
    <item>Why <em>WonderWidgets</em> are great</item>
    <item/>
    <item>Who <em>buys</em> WonderWidgets</item>
  </slide
</slideshow> 

編寫處理指令
有時在XML數(shù)據(jù)中包含處理指令是非常有意義的。在這個練習(xí)中,你將增加一個處理指令到你的slideSample.xml文件中。

和你在處理指令這章看到的一樣,處理指令的格式是<?target data?>,其中“target”是目標(biāo)應(yīng)用程序,“data”是指令或信息。增加下面的粗體文本到文件中,這段文本為一個虛構(gòu)的幻燈演示增加了一個處理指令。這個指令的功能是詢問用戶要顯示哪一個片斷(技術(shù)、執(zhí)行級或所有)。
<slideshow 
  ...
  > 
  <!-- PROCESSING INSTRUCTION -->
  <?my.presentation.Program QUERY="exec, tech, all"?> 
  <!-- TITLE SLIDE --> 
注意:
1.    “data”部分(處理指令部分)能夠包含空格或可以為空。但是在<?和target標(biāo)記之間不能有任何的空格。
2.    “data”部分在第一個空格后開始。
3.    用完全的獨(dú)一無二的包路徑來限定“target”,這樣排除了和處理同樣數(shù)據(jù)的其他場序沖突的可能性。
4.    為了易讀性,在應(yīng)用程序名稱后包含一個“:”是一個不錯的注意,像下面那樣:
<?my.presentation.Program: QUERY="..."?> 
冒號使得target名成為一種“標(biāo)簽”。然而,當(dāng)w3c規(guī)范允許冒號出現(xiàn)在target名稱中時,一些IE5版本會認(rèn)為這是一個錯誤。在本指南中,我們會避免在target名稱中使用冒號。

保存這個文件為slideSample02.xml。

錯誤的介紹
分析其可能產(chǎn)生三種錯誤:致命錯誤、錯誤和警告。在本練習(xí)中,你將對XML文件做一些小的修改來產(chǎn)生一個致命的錯誤。

一個簡單的方法可以用來產(chǎn)生一個致命的錯誤,移除空元素“item”后面的“”,這樣就產(chǎn)生一個沒有結(jié)束標(biāo)記的標(biāo)記了。這是就會產(chǎn)生一個致命錯誤,因?yàn)闆]有結(jié)束標(biāo)記的標(biāo)記不是格式良好的。按照下面去做:

1.    拷貝slideSample02.xml到slideSampleBad1.xml
2.    編輯slideSampleBad1.xml并且像下面那樣移除字符
<!-- OVERVIEW -->
<slide type="all">
  <title>Overview</title>
  <item>Why <em>WonderWidgets</em> are great</item>
  <item/>
  <item>Who <em>buys</em> WonderWidgets</item>
</slide>
變成:
...
<item>Why <em>WonderWidgets</em> are great</item>
<item>
<item>Who <em>buys</em> WonderWidgets</item> 
... 
    現(xiàn)在你就有了一個可以產(chǎn)生錯誤的文件。XML分析器被用來產(chǎn)生這個錯誤。

取代和插入文本
在這部分,你將學(xué)到:
1.    處理特殊字符(“<”,“&”等)
2.    處理XML樣式語法的文本。
    

處理特殊字符
在XML中,一個實(shí)體是一個XML結(jié)構(gòu)(或文本),它擁有一個名稱。通過名字引用實(shí)體導(dǎo)致實(shí)體被插入文檔取代這個實(shí)體引用。為了產(chǎn)生一個實(shí)體引用,實(shí)體名稱被“&”記號標(biāo)記,如下:
&entityName; 
當(dāng)你學(xué)習(xí)怎樣編寫一個DTD的時候,你將看到你能夠定義自己的實(shí)體。這樣,你可以將你的實(shí)體擴(kuò)張到所有的文本。盡管到現(xiàn)在為止,我們只是將焦點(diǎn)放在預(yù)定義實(shí)體。
Table 2-1 Predefined Entities 
Character     Reference 
&     & 
<     < 
>     > 
"     " 
'     ' 

字符引用
一個字符應(yīng)用,像“ 包含一個井號標(biāo)記。其中的數(shù)字是一個單一字符的Unicode的整數(shù)值,例如“A”的值是65,147代表的字符是左引號,148代表右引號。

在一個XML文檔中使用一個實(shí)體引用
假設(shè)你想在你的XML文檔中插入一行:
Market Size < predicted 
直接將這行插入XML文件中的問題是:當(dāng)分析器看到左尖括號(<),它就開始查找標(biāo)識名。為了避開這個問題,你可以用< 代替<

將下面的粗體文本加入文件slideSample.xml。保存一個備份,名字叫slideSample03.xml
  <!-- OVERVIEW -->
  <slide type="all">
    <title>Overview</title>
    ...
  </slide> 
  <slide type="exec">
    <title>Financial Forecast</title>
    <item>Market Size < predicted</item>
    <item>Anticipated Penetration</item>
    <item>EXPected Revenues</item>
    <item>Profit Margin </item>
  </slide> 
</slideshow> 
當(dāng)你使用一個XML分析器得到數(shù)據(jù)是,你將期望如下的輸出:
Market Size < predicted 
你看到一個左尖括號(“<”)代替了“<”,因?yàn)閄ML分析器會自動將實(shí)體代替實(shí)體引用。

以XML樣式語法處理文本

當(dāng)你正在操作一大塊XML或HTML(其中可能包括很多的特殊字符)時,用實(shí)體引用代替每一個特殊符號是很不方便的。對于這種情況,你可以使用CDATA。

一個CDATA就好像HTML中的<pre>…</pre>一樣,在它里面的數(shù)據(jù)不會被當(dāng)作XML編譯。一個CDATA開始與<![CDATA[,結(jié)束于]]>。

增加下面的粗體文本到slideSample.xml中,并保存一個副本,名稱為:slideSample04.xml
   ...
  <slide type="tech">
    <title>How it Works</title>
    <item>First we fozzle the frobmorten</item>
    <item>Then we framboze the staten</item>
    <item>Finally, we frenzle the fuznaten</item>
    <item><![CDATA[Diagram:
      frobmorten <--------------- fuznaten
            <3>  ^
         <1>      <1> = fozzle
        V       <2> = framboze 
        Staten--------------------+      <3> = frenzle
           <2>
    ]]></item>
  </slide>
</slideshow> 
當(dāng)你回顯CDATA部分的數(shù)據(jù)時,你會發(fā)現(xiàn)顯示出來的和你寫進(jìn)取得沒有區(qū)別。因?yàn)榉治銎鞑粫⑦@里面的數(shù)據(jù)當(dāng)作XML來處理,所以,他們不會產(chǎn)生致命的錯誤。

產(chǎn)生一個類型定義文檔(Document Type Definition)

在XML聲明之后,文檔序能夠包含一個DTD,這個DTD讓你指定文檔中包含的標(biāo)識的種類。除了告訴一個合法的分析器標(biāo)識合法性和標(biāo)識的布局外,它還告訴合法的或不合法的分析器哪里是文本,使得分析器決定是否空格時重要的還是可以被忽略的。

基本DTD定義
為了開始學(xué)習(xí)DTD的定義,讓我們通過告訴分析器哪里的文本是被期望出現(xiàn)的和哪里的文本會造成錯誤。

我們通過產(chǎn)生一個文件,名稱為slideshow.dtd來開始。進(jìn)入一個聲明和一個注釋來分析這個文件。像下面所顯示的那樣:

<?xml version='1.0' encoding='utf-8'?> 
<!-- 
  DTD for a simple "slide show". 
--> 

下一步,增加下面粗體文本到文件:
<!-- DTD for a simple "slide show". --> 
<!ELEMENT slideshow (slide+)> 
像你看到的那樣,這個DTD標(biāo)識開始于<!,后面跟隨著標(biāo)是名稱(ELEMENT)。在這個標(biāo)識名稱后識被定義的元素名稱。后面的園括弧里面的內(nèi)容代表著一個或一個以上的slide元素出現(xiàn)在slideshow里都是合法的。

如果沒有和面的加號,那么這個定義代表slideshow只能包含一個slide元素。下面列出了所有的限定符號。
Table 2-2 DTD Element Qualifiers  
Qualifier     Name     Meaning 
?     Question Mark     Optional (zero or one) 
*     Asterisk     Zero or more 
+     Plus Sign     One or more 
你能夠包含更多的元素通過使用逗號和在每一個元素上使用限定符。你也能夠使用嵌套來組織多個條目。例如,在定義一個image元素后,你能夠聲明每個image元素必須與一個title元素匹配,通過指定((image, title)+)。在這里,加號是應(yīng)用于image/title對,表明一個或多個指定條目對可能出現(xiàn)。

定義文本和嵌套元素
現(xiàn)在,你可以告訴分析器在那里不要出現(xiàn)文本。讓我們看看怎樣告訴它。增加下面的粗體文本到文件。

<!ELEMENT slideshow (slide+)>
<!ELEMENT slide (title, item*)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT item (#PCDATA  item)* > 
你增加的第一行意思是一個slide由一個title組成或由一個title和多個item組成。下一行的意思是一個title完全的由分析字符數(shù)據(jù)(PCDATA)組成。在PCDATA前面增加“#”表明后面跟隨得是一個特殊單詞而不是一個元素名稱。

最好一行引入了垂直條(),它表明“或”的條件。所以最后一行代表item或是PCDATA或是item。最好的星號表明發(fā)生0次或多次。這個規(guī)范的結(jié)果被認(rèn)為是一個“混合內(nèi)容模型”,因?yàn)槿我鈹?shù)量的item元素可以出現(xiàn)在文本中。

保存這個DTD為slideSample1a.dtd。

DTD的限制
如果你能指定一個item或者可以包含文本或者可以包含文本和更多的item,那將會更好。但是,DTD規(guī)范讓這種轉(zhuǎn)變很困難。例如,你可以試著定義一個item,如下:
<!ELEMENT item (#PCDATA  (#PCDATA, item+)) > 
這樣做當(dāng)然是符合上面的條件的,但是一旦分析器看到#PCDATA和垂直杠,它就需要后面的定義來符合這個混合內(nèi)容模型。這個規(guī)范不允許這樣定義,所以你會得到一個錯誤:Illegal mixed content model for ‘item’. Found (…, 上面的十六進(jìn)制28是定義的郵件括號。

兩次定義這個item元素也不行。一個像下面一樣的規(guī)范:
<!ELEMENT item (#PCDATA) >
<!ELEMENT item (#PCDATA, item+) > 
會產(chǎn)生一個“duplicate definition”警告,事實(shí)上,第二個定義會被忽略掉。所以我們能做到最好就是定義一個混合文檔模型(允許item可以在文本中散布)了。

除了上面提到的混合文檔模型的限制,我們也沒有辦法來限定文檔的種類。它應(yīng)該僅僅包含數(shù)字嘛?是一個日期型或是一個貨幣型嘛?在DTD中,我們沒法實(shí)現(xiàn)這種限定。

最后,注意,DTD是層次不敏感的。title元素應(yīng)用的定義等價于一個silde title和一個item title。當(dāng)我們擴(kuò)展DTD,是DTD除了允許文本外,我們還允許HTML風(fēng)格的標(biāo)簽時,那么一個item title的size和一個slide title的size的必須區(qū)分開來。例如,你幾乎只有一種方法區(qū)分他們,那就是賦予他們不同的名字,如“item_title”。所有的這些限制是概要規(guī)范標(biāo)準(zhǔn)的開發(fā)背景。

在DTD中指定元素值
比指定一個加括弧的元素列表更好的方式是:元素的定義可以使用一些指定的值:ANY或EMPTY。ANY規(guī)范的意思是元素可以包含任何定義的元素或PCDATA。這樣一個規(guī)范通常針對一個通用目的的XML文檔的根元素的使用,例如你可以使用一個字符處理器產(chǎn)生它。

EMPTY規(guī)范的意思是元素不包含內(nèi)容。所以一個E-MAIL的DTD中的<flag/>可以這樣使用:
<!ELEMENT flag EMPTY> 
引用DTD
在這個例子中,DTD定義是一個單獨(dú)的文件。也就是說你不得不在XML文檔中引用它。一回你將會看到,在文檔的范圍內(nèi),你也可以包含DTD的一部分。這些定義構(gòu)成了DTD的本地子集。

為了引用DTD文件,你只需要增加下面組體的文本到你的slideSample.xml文件中,并且以slideSample05.xml文件名保存它。
<!--  A SAMPLE set of slides  --> 
<!DOCTYPE slideshow SYSTEM "slideshow.dtd"> 
<slideshow 
DTD標(biāo)記開始于“<!”。在這個例子中,這個標(biāo)記名“DOCTYPE”的意思是這個文檔是“slideshow”,“slideshow”得意思是這個文檔由slideshow元素和所有包含在slideshow內(nèi)的內(nèi)容組成。

<slideshow>
...
</slideshow> 
這個標(biāo)識定義slideshow元素為文檔的根元素。一個XML文檔有且僅有一個根元素。在這個地方,根元素被指定。換句話說,這個標(biāo)識將文檔內(nèi)容識別為一個slideshow。

這個DOCTYPE標(biāo)識在XML定義者后,跟元素之前出現(xiàn)。SYSTEM識別符指定DTD文件的位置。因?yàn)樗鼪]有以一個前綴(如:http:/或file:/)開始,這個路徑是相對于XML文檔的。還記得setDocumentLocator這個方法嗎?分析器就使用它的信息來找到DTD文件。正像
你的應(yīng)用程序?qū)⒄业揭粋€和你的XML文檔相關(guān)聯(lián)的文件。一個PUBLIC識別符通過使用一個唯一的名稱也能夠被用來指定一個DTD文件。但是分析器將不得不解決它。

DOCTYPE規(guī)范也能夠包含DTD定義。這樣的定義將包含在方括號中,如下:
<!DOCTYPE slideshow SYSTEM "slideshow1.dtd" [
  ...local subset definitions here...
]> 
在稍后定義文檔中使用的實(shí)體時,你將利用這個便利。

文檔和數(shù)據(jù)
以前,你學(xué)習(xí)XML是因?yàn)槟懵犝f過XML,一方面是XML數(shù)據(jù),另一方面是XML操作是舒適的、結(jié)構(gòu)中部依賴于文本的。

在這個例子文件中,slideshow元素是一個數(shù)據(jù)元素的例子?它沒涉及文本而僅僅包含了子元素。另一方面,Item元素可以被稱為文檔元素,因?yàn)樗亩x包含了文本和子元素。

當(dāng)你瀏覽完本指南時,你將發(fā)現(xiàn)怎樣擴(kuò)展title元素的定義,是它能包含HTML風(fēng)格的元素。

在DTD中定義屬性和實(shí)體
到目前為止,你已經(jīng)定義的DTD可以非常好的使用。他告訴你那里需要文本,那里不需要,這些是分析器特別關(guān)注的。但是為了在一個合法分析器中使用,DTD需要為不同的元素指定合法的屬性。你將在這部分完成這項(xiàng)工作。在這部分以后,你將定義一個內(nèi)部的實(shí)體和一個外部的實(shí)體(通過將它引用進(jìn)XML文件)。

在DTD中定義屬性
讓我們通過為幻燈片中的元素定義屬性開始這部分。

增加下面粗體的文本到文件中。
<!ELEMENT slideshow (slide+)>
<!ATTLIST slideshow 
    title    CDATA    #REQUIRED
    date     CDATA    #IMPLIED
    author   CDATA    "unknown"
>
<!ELEMENT slide (title, item*)>

DTD標(biāo)記ATTLIST是定義屬性的開始標(biāo)記。緊跟ATTLIST后面的名稱指定屬性定義的對象。在這個例子中,定義對象是slideshow元素(注意,DTD是缺乏層次的)

每一個屬性是由三個空格分開的一系列值構(gòu)成的。逗號和其他的分隔符是不允許出現(xiàn)的,所以像上面那樣格式化定義是有幫助的和易讀的。每一行的第一個元素是屬性名稱:title,date或author。第二個元素表明數(shù)據(jù)類型:CDATA是字符數(shù)據(jù)類型。Table 2-3介紹了所有的合法使用的屬性類型。
Table 2-3 Attribute Types 
Attribute Type     Specifies... 
(value1  value2  ...)     A list of values separated by vertical bars. (Example below) 
CDATA     "Unparsed character data". (For normal people, a text string.) 
ID     A name that no other ID attribute shares. 
IDREF     A reference to an ID defined elsewhere in the document. 
IDREFS     A space-separated list containing one or more ID references. 
ENTITY     The name of an entity defined in the DTD. 
ENTITIES     A space-separated list of entities. 
NMTOKEN     A valid XML name composed of letters, numbers, hyphens, underscores, and colons. 
NMTOKENS     A space-separated list of names. 
NOTATION     The name of a DTD-specified notation, which describes a non-XML data format, such as those used for image files.* 

這是一個很快就會過時的規(guī)范,在這章里,它將會被討論。

當(dāng)屬性類型有加括弧的可選列表構(gòu)成時,這個屬性必須使用指定之中的一個。例如,增加粗體文本到文件中:
<!ELEMENT slide (title, item*)>
<!ATTLIST slide 
    type   (tech  exec  all) #IMPLIED
>
<!ELEMENT title (#PCDATA)>
<!ELEMENT item (#PCDATA  item)* > 

這個規(guī)范的意思是slide元素的type屬性必須被賦予“tech”,“exec”或“all”三個屬性值。其他的值都不被接受。

屬性中最后的一個實(shí)體規(guī)范決定屬性的默認(rèn)值。. Table 2-4中顯示了可能的選擇值。
Table 2-4 Attribute-Specification Parameters 
Specification     Specifies... 
#REQUIRED     The attribute value must be specified in the document. 
#IMPLIED     The value need not be specified in the document. If it isn't, the application will have a default value it uses. 
"defaultValue"     The default value to use, if a value is not specified in the document. 
#FIXED "fixedValue"     The value to use. If the document specifies any value at all, it must be the same. 

最后,保存一個DTD的副本到slideshowlb.dtd文件。

在DTD中定義實(shí)體
到目前為止,你已經(jīng)接觸到了預(yù)定義的實(shí)體,像&。你已經(jīng)接觸到了一個屬性能夠引用一個實(shí)體。現(xiàn)在到讓你學(xué)習(xí)定義自己的實(shí)體的時候了。

增加下面粗體的文本到你的XML文件中:
<!DOCTYPE slideshow SYSTEM "slideshow.dtd" [
  <!ENTITY product  "WonderWidget">
  <!ENTITY products "WonderWidgets">
]> 
ENTITY標(biāo)記名稱意思是說你正在定義一個實(shí)體。后面跟著實(shí)體的名稱和它的定義。在這個例子中,你正在定義一個實(shí)體,名稱是“product”,它的實(shí)體值將取代文本中的實(shí)體名。

最后的部分是取代字符串,無論在文檔中的什么位置引用實(shí)體名,它將取代實(shí)體名稱。這個取代字符串使用引號定義。

現(xiàn)在,你已經(jīng)定義了實(shí)體,下一步是引用他們。在粗體的文本上作一些改變:
<slideshow 
  title="WonderWidget&product; Slide Show" 
  ... 
  <!-- TITLE SLIDE -->
  <slide type="all">
    <title>Wake up to WonderWidgets&products;!</title>
  </slide> 
   <!-- OVERVIEW -->
  <slide type="all">
    <title>Overview</title>
    <item>Why <em>WonderWidgets&products;</em> are 
great</item>
    <item/>
    <item>Who <em>buys</em> WonderWidgets&products;</item>
  </slide> 

值得注意的是,在這里,你的實(shí)體的引用使用的是和預(yù)定義使用的語法相同(&entityName;),這個實(shí)體可以在屬性中和元素內(nèi)容中被引用。

當(dāng)你從分析器中得到這個文件的回饋,你會看到:
Wake up to WonderWidgets! 
注意,這個product名稱已經(jīng)被實(shí)體的引用值代替。

保存這個文件的一個拷貝到slideSample06.xml

額外的有用的實(shí)體
這里有幾個實(shí)體定義的例子,當(dāng)你編寫XML文檔時,你會發(fā)現(xiàn)她很有用。
<!ENTITY ldquo  "“"> <!-- Left Double Quote --> 
<!ENTITY rdquo  "”"> <!-- Right Double Quote -->
<!ENTITY trade  "™"> <!-- Trademark Symbol (TM) -->
<!ENTITY rtrade "®"> <!-- Registered Trademark (R) -->
<!ENTITY copyr  "©"> <!-- Copyright Symbol -->  

外部實(shí)體的引用
你能夠使用SYSTEM或PUBLIC識別符指定一個外部實(shí)體。

為了引用一個外部實(shí)體,增加下面粗提到文件中:
<!DOCTYPE slideshow SYSTEM "slideshow.dtd" [
  <!ENTITY product  "WonderWidget">
  <!ENTITY products "WonderWidgets">
  <!ENTITY copyright SYSTEM "copyright.xml">
]> 
這個定義引用一個版權(quán)信息,它包含在“copyright.xml”文件中。產(chǎn)生一個文件,輸入一些感興趣的內(nèi)容,可能像下面那樣:
<!--  A SAMPLE copyright  --> 
This is the standard copyright message that our lawyers
make us put everywhere so we don't have to shell out a
million bucks every time someone spills hot coffee in their
lap... 
最后,增加下面粗體的文本到你的slideSample.xml文件中來引用這個外部的實(shí)體。保存這個文件到slideSample07.xml
<!-- TITLE SLIDE -->
  ...
</slide> 
<!-- COPYRIGHT SLIDE -->
<slide type="all">
  <item>©right;</item>
</slide> 
你也能夠使用一個外部的實(shí)體聲明來訪問一個servlet。這個servlet產(chǎn)生目前的日期:
<!ENTITY currentDate SYSTEM
  "http://www.example.com/servlet/CurrentDate?fmt=dd-MMM-
yyyy">  

你將像引用其他的實(shí)體一樣引用它。

Today's date is ¤tDate;. 
你將看到如下的回饋:
...
<slide type="all">
  <item>
This is the standard copyright message that our lawyers
make us put everywhere so we don't have to shell out a
million bucks every time someone spills hot coffee in their
lap...
  </item>
</slide>
... 

你將注意到注釋后面的新行所謂一個字符被回饋,但是這個注釋本事被忽略。

總結(jié)
在文檔中引用的一個實(shí)體,無論它是內(nèi)部的還是外部的,都被稱作普通實(shí)體。一個包含在DTD規(guī)范中的實(shí)體被稱為參數(shù)實(shí)體。

一個包含XML(文本或標(biāo)記)的實(shí)體,它會被分析器分析,所以稱作被分析的實(shí)體。一個包含二進(jìn)制數(shù)據(jù)(像圖像)的實(shí)體被稱為非分析實(shí)體。在本指南的下一部分我們將討論非分析的實(shí)體的引用。

引用二進(jìn)制實(shí)體
這部分討論引用二進(jìn)制數(shù)據(jù)文件的選擇。

使用一個MIME數(shù)據(jù)類型
有兩種方法可以引用一個非分析實(shí)體,如二進(jìn)制圖像文件。一個是使用DTD的NOTATION規(guī)范機(jī)制。然而,這個機(jī)制復(fù)雜的、不夠初步的,它主要為了和SGML文檔的兼用性而存在。當(dāng)我們看DTDHandler API時,我們將有機(jī)會深層次的討論它。

要建立使用圖像文件的slideshow,增加下面粗體文本到你的slideshowlb.dtd文件:
<!ELEMENT slide (image?, title, item*)>
<!ATTLIST slide 
    type   (tech  exec  all) #IMPLIED
>
<!ELEMENT title (#PCDATA)>
<!ELEMENT item (#PCDATA  item)* >
<!ELEMENT image EMPTY>
<!ATTLIST image 
    alt    CDATA    #IMPLIED
    src    CDATA    #REQUIRED
    type   CDATA    "image/gif"

這些修改聲明image為一個可選的元素。這個image標(biāo)識模仿HTML4。0標(biāo)識。它有一個“隱含的”值,它意味著它是可選的,程序處理這段數(shù)據(jù)可以獲得充分的替代,像“image no found”。另一方面,src屬性是必需的。

在文檔里,到一個名稱是“intro-pic”的image的引用可能像下面這樣:
<image src="http://www.QQread.com/j2ee/image/intro-pic.gif", alt="Intro Pic", 
type="image/gif" /> 

選擇:使用實(shí)體引用
使用一個MIME數(shù)據(jù)類型作為一個元素的屬性是一個機(jī)制,它是靈活的和可擴(kuò)展的。要產(chǎn)生一個外部的ENTITY引用使用符號機(jī)制,你需要針對jpeg和gif數(shù)據(jù)的DTD NOTATION元素。



《由于水平所限,后面關(guān)于XML的部分暫時省略》

(出處:http://m.survivalescaperooms.com)



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昭苏县| 兴安县| 曲松县| 仁怀市| 石屏县| 泸溪县| 兰州市| 富民县| 边坝县| 金华市| 东乌珠穆沁旗| 宜宾县| 铁岭市| 乳山市| 中宁县| 鲁甸县| 武安市| 砀山县| 望城县| 华阴市| 开阳县| 富宁县| 当涂县| 伊春市| 平罗县| 洞口县| 社旗县| 唐海县| 巍山| 旺苍县| 庆安县| 吴堡县| 滕州市| 留坝县| 竹北市| 芮城县| 原平市| 葵青区| 罗城| 九龙城区| 宾川县|