1 . XML DTD —— XML 入門(mén)知識(shí)

          1.1 為什么要學(xué)習(xí)xml

          XML 發(fā)展的非常迅速,這實(shí)在令人感到驚奇,有很多的軟件開(kāi)發(fā)商都采用了 XML 標(biāo)準(zhǔn)。我們相信,在未來(lái)的 Web 開(kāi)發(fā)中, XML 將和 HTML 一樣受到重視,他們都是 Web 技術(shù)的基礎(chǔ)。就連無(wú)線標(biāo)記語(yǔ)言 (WML The Wireless Markup Language ), [ 用于標(biāo)識(shí)運(yùn)行于手持設(shè)備上(比如:手機(jī))的 Internet 程序 ] WML 都采用了 XML 的標(biāo)準(zhǔn)。 XML 將成為最普遍的數(shù)據(jù)操縱和數(shù)據(jù)傳輸?shù)墓ぞ摺?/span>

          1.2 什么是XML

          XML EXtensible Markup Language 的縮寫(xiě)。

          XML 使用文檔類(lèi)型定義( DTD )或者模式( Schema )來(lái)描述數(shù)據(jù)

          XML 使用 DTD 或者 Schema 后就是自描述的語(yǔ)言

          1.3 XML HTML的主要區(qū)別

          XML 是被設(shè)計(jì)用來(lái)描述數(shù)據(jù)的,重點(diǎn)是:什么是數(shù)據(jù),如何存放數(shù)據(jù)。
          HTML
          是被設(shè)計(jì)用來(lái)顯示數(shù)據(jù)的,重點(diǎn)是:顯示數(shù)據(jù)以及如何顯示數(shù)據(jù)更好上面。

          他們?cè)诟袷缴弦泊嬖诰薮髤^(qū)別,相對(duì)講 xml 格式要求嚴(yán)格:

          a. 所有的 XML 文檔必須有一個(gè)結(jié)束標(biāo)記

          開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽必須配套,也就是必須寫(xiě)成 <p></p> 或者 <high></ high >

          b. 空元素必須關(guān)閉

          不允許出現(xiàn)單標(biāo)簽,但標(biāo)簽必須關(guān)閉,關(guān)閉使用 <p/> 或者 <high/>

          c. 所有標(biāo)簽都區(qū)分大小寫(xiě)

          d. 所有標(biāo)簽都必須合理嵌套

          層次合理比如 <p><high></high></p> 這樣就合理。

          e. 所有標(biāo)簽的屬性值必須使用雙引號(hào) (””) 或者但引號(hào)括起來(lái)

          f.  xml 只能有一個(gè)根元素

          1.4 XML 文檔組成

          xml 文檔在邏輯上主要有以下 5 個(gè)部分組成:

          1.xml 聲明

          xml 文檔總是以一個(gè) xml 聲明開(kāi)始,其中指明所用的 xml 版本、文檔的編碼、文檔的獨(dú)立性信息。格式為:

          <?xml version=”1.0” encoding=”gb2312” standalone=”yes”?>

          其中需要注意的是在問(wèn)號(hào)左右兩邊不能有空格。

          還有其默認(rèn)編碼是 utf8

          yes 表示文檔是獨(dú)立文檔,即不依賴于外部文檔。

          2. 文檔類(lèi)型聲明

          我們可以用 DTD Document Type Definition 文檔類(lèi)型定義)來(lái)規(guī)范 xml 文檔中元素和屬性的規(guī)則及相互關(guān)系。

          XML SGML Standard Generalized Markup Language,SGML 標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)繼承了用于定義語(yǔ)法規(guī)則的 DTD 機(jī)制。幾乎所有的 xml 應(yīng)用都是使用 DTD 來(lái)定義的。 DTD 文件也是一個(gè)文本文件,通常用 ”.dtd” 作為其擴(kuò)展名。

          通過(guò)文檔類(lèi)型聲明,指出 xml 文檔所用的 DTD 。文檔類(lèi)型聲明有兩種形式,一種是聲明 DTD 在一個(gè)外部文件中,例如:

          <!DOCTYPE greeting SYSTEM “hello.dtd”>

          1 種是直接在 xml 給出 dtd ,例如:

          <!DOCTYPE greeting [

          <!ELEMENT greeting  (#PCDATA)>

          ]>

          3. 元素

          XML 元素命名必須遵守下面的規(guī)則:

          元素的名字可以包含子母,數(shù)字和其他字符。

          元素的名字不能以數(shù)字或者標(biāo)點(diǎn)符號(hào)開(kāi)頭。

          元素的名字不能以 XML( 或者 xml Xml,xMl...) 開(kāi)頭。

          元素的名字不能包含空格。

          盡量不用冒號(hào),冒號(hào)在名稱(chēng)空間中用于分隔名稱(chēng)空間前綴和本地部分。

           

          2 個(gè)細(xì)節(jié):

          1.  CDATA

          CDATA 段中包含的都是純字符數(shù)據(jù),在字符數(shù)據(jù)可以出現(xiàn)的任何地方都可以使用 CDATA 段。 CDATA 段主要用于需要將整個(gè)文本解釋為字符數(shù)據(jù)而不是標(biāo)記的情況下。

          CDATA 段以字符串 ”<![CDATA[  開(kāi)始, ”]]>” 結(jié)束。

          2.  字符引用和預(yù)定義實(shí)體引用

          xml 5 個(gè)特殊字符,小于 < 、大于 > 、雙引號(hào) 、單引號(hào) 、和號(hào) & 。在數(shù)據(jù)中需要使用這幾個(gè)字符時(shí)候可以用通用字符引用和預(yù)定義引用:

          請(qǐng)參考:表 1-1 特殊字符的字符引用和預(yù)定義實(shí)體引用

          字符

          字符引用 10 進(jìn)制

          字符引用 16 進(jìn)制

          預(yù)定義實(shí)體引用

          < 

          <

          &#x3c;

          &lt;

          > 

          >

          >

          &gt;

          "

          "

          &quot;

          '

          '

          &apos;

          &

          &

          &

          &amp;

          4. 注釋

          XML 中注釋的語(yǔ)法基本上和 HTML 中的一樣。 <!-- 這是一個(gè)注釋 --> 。注釋不要出現(xiàn)在標(biāo)記中。

          5. 處理指令

          處理指令允許文檔中包含由應(yīng)用程序來(lái)處理的指令。處理指令的語(yǔ)法和 xml 聲明類(lèi)似,以 < ?開(kāi)始,以 ?> 結(jié)束。一個(gè)常見(jiàn)的樣式表單的處理指令如下所示:

          <?xml–stylesheet href=”hello.css” type=”text/css”?>

          1.5 關(guān)于DTD

          符合語(yǔ)法的 XML 文檔稱(chēng)為結(jié)構(gòu)良好的 XML 文檔。

          通過(guò) DTD 驗(yàn)證的 XML 文檔稱(chēng)為有效的 XML 文檔。

          XML Schema(XML 模式 ) 是基于 XML DTD 的替代品。

          通過(guò) DTD ,你的每一個(gè) XML 文件都自身攜帶有關(guān)它自身格式的說(shuō)明。

          通過(guò) DTD ,不同群體的人們可以對(duì)使用普通的 DTD 來(lái)交換數(shù)據(jù)的方法達(dá)成一致。

           

          含有 DTD 的實(shí)例 XML 文件:

          #PCDATA 指明必須是字符數(shù)據(jù)。

           1 <?xml version="1.0"?>
           2 <!DOCTYPE note [
           3   <!ELEMENT note (to,from,heading,body)>
           4   <!ELEMENT to      (#PCDATA)>
           5   <!ELEMENT from    (#PCDATA)>
           6   <!ELEMENT heading (#PCDATA)>
           7   <!ELEMENT body    (#PCDATA)>
           8 ]>
           9 <note>
          10   <to>Tove</to>
          11   <from>Jani</from>
          12   <heading>Reminder</heading>
          13   <body>Don't forget me this weekend</body>
          14 </note>
          15 

          如果 DTD 對(duì)于你的 XML 文件是外部而言,那么它會(huì)在含有以下句法構(gòu)造的 DOCTYPE 聲明中預(yù)先包裝進(jìn)去。如:

          1 <?xml version="1.0"?>
          2 <!DOCTYPE note SYSTEM "note.dtd">
          3 <note>
          4 <to>Tove</to>
          5 <from>Jani</from>
          6 <heading>Reminder</heading>
          7 <body>Don't forget me this weekend!</body>
          8 </note>

          下面是一份包含了 DTD "note.dtd" 文件副本:

          1 <! ELEMENT note (to,from,heading,body) >
          2 <! ELEMENT to (#PCDATA) >
          3 <! ELEMENT from (#PCDATA) >
          4 <! ELEMENT heading (#PCDATA) >
          5 <! ELEMENT body (#PCDATA) >  

          1.6 XSL

          XSL (全稱(chēng)是:可擴(kuò)展的樣式單語(yǔ)言,the eXtensible Stylesheet Language)CSS樣式單功能要強(qiáng)大的多。XSL的一個(gè)主要的用途就是將XML文檔轉(zhuǎn)換成HTML格式的文件,然后再交付給瀏覽器,由瀏覽器顯示轉(zhuǎn)換的結(jié)果。XML的可擴(kuò)展樣式單語(yǔ)言。

          1.7 XML 數(shù)據(jù)島

          HTML 頁(yè)面中嵌入 XML 數(shù)據(jù)

          使用非官方標(biāo)準(zhǔn)的 <xml> 標(biāo)記可以將 XML 數(shù)據(jù)嵌入到 HTML 頁(yè)面中。

          XML 數(shù)據(jù)可以象下面的例子那樣嵌入 HTML 頁(yè)面 :

          1 <xml id="note">
          2 <note>
          3 <to>Tove</to>
          4 <from>Jani</from>
          5 <heading>Reminder</heading>
          6 <body>Don't forget me this weekend!</body>
          7 </note>
          8 </xml>

          或者象下面這樣嵌入外部單獨(dú)的 XML 文件 :

          <xml id="note" src="note.xml">

          </xml>

          注意那個(gè) <xml> 標(biāo)記是一個(gè) HTML 元素,而不是一個(gè) XML 元素。

           

          數(shù)據(jù)綁定

           

          XML 數(shù)據(jù)島可以綁定到 HTML 元素上(比如表格)。

          在下面的例子中,一個(gè) XML 數(shù)據(jù)島( ID=cdcat )被從外部 XML 文檔載入。一個(gè) HTML 的表格綁定到此數(shù)據(jù)島上。 HTML 表格內(nèi)部的 span 元素使用 datafld 屬性和 XML 文檔相應(yīng)的 XML 元素相互綁定。

           1 <html>
           2 <body>
           3 <xml id="cdcat" src="cd_catalog.xml"></xml>
           4 <table border="1" datasrc="#cdcat">
           5 <tr>
           6 <td><span datafld="ARTIST"></span></td>
           7 <td><span datafld="TITLE"></span></td>
           8 </tr>
           9 </table>
          10 </body>
          11 </html>
          12 

           

          寫(xiě)到這里想起原來(lái)看 js 的一個(gè)應(yīng)用實(shí)例,以數(shù)據(jù)島實(shí)現(xiàn)了無(wú)刷新分頁(yè)程序。

          代碼如下:

            1 
            2 
            3  <xml id="users">
            4 
            5 <userGroup>
            6 
            7   <user>
            8 
            9     <userid>user hcm</userid>
           10 
           11     <name>name hechangmin</name>
           12 
           13   </user>
           14 
           15   <user>
           16 
           17     <userid>user 2</userid>
           18 
           19     <name>name 2</name>
           20 
           21   </user>
           22 
           23   <user>
           24 
           25     <userid>user 3</userid>
           26 
           27     <name>name 3</name>
           28 
           29   </user>
           30 
           31   <user>
           32 
           33     <userid>user 4</userid>
           34 
           35     <name>name 4</name>
           36 
           37   </user>
           38 
           39   <user>
           40 
           41     <userid>user 5</userid>
           42 
           43     <name>name 5</name>
           44 
           45   </user>
           46 
           47   <user>
           48 
           49     <userid>user 6</userid>
           50 
           51     <name>name 6</name>
           52 
           53   </user>
           54 
           55   <user>
           56 
           57     <userid>user 7</userid>
           58 
           59     <name>name 7</name>
           60 
           61   </user>
           62 
           63   <user>
           64 
           65     <userid>user 8</userid>
           66 
           67     <name>name 8</name>
           68 
           69   </user>
           70 
           71   <user>
           72 
           73     <userid>user 9</userid>
           74 
           75     <name>name 9</name>
           76 
           77   </user>
           78 
           79 </userGroup>
           80 
           81 </xml>
           82 
           83 <table id="datatable" datasrc="#users" temp_src="#users" DATAPAGESIZE="3" width="400" border="1">
           84 
           85 <tr>
           86 
           87     <td><span datafld="userid"></span></td>
           88 
           89     <td><span datafld="name"></span></td>
           90 
           91 </tr>
           92 
           93 </table>
           94 
           95 <script>
           96 
           97 var rs=document.all.users.recordset;
           98 
           99 // 記錄條數(shù)
          100 
          101 var itemcount = rs.RecordCount;
          102 
          103 alert (itemcount );
          104 
          105 //
          106 
          107 rs.PageSize=3;  // 設(shè)定 recordset 對(duì)象的 PageSize 屬性與顯示的頁(yè)大小相同
          108 
          109 var pageCount=rs.PageCount; // 獲得總頁(yè)數(shù)
          110 
          111 var nowpage=1;
          112 
          113 function first()
          114 
          115 {
          116 
          117        document.all.datatable.firstPage();
          118 
          119        nowpage=1;
          120 
          121        document.all.page.value = "";
          122 
          123        testnum.innerText=nowpage;
          124 
          125 }
          126 
          127 function up()
          128 
          129 {    
          130 
          131        if(nowpage==1)
          132 
          133        {
          134 
          135               document.all.page.value ="";
          136 
          137               testnum.innerText=nowpage;
          138 
          139        }
          140 
          141        else
          142 
          143        {     document.all.datatable.previousPage();
          144 
          145               nowpage=nowpage-1;
          146 
          147               document.all.page.value ="";
          148 
          149               testnum.innerText=nowpage;
          150 
          151        }    
          152 
          153 }
          154 
          155 function down()
          156 
          157 {
          158 
          159       
          160 
          161        if(nowpage==pageCount)
          162 
          163        {
          164 
          165               document.all.page.value ="";
          166 
          167               testnum.innerText=nowpage;
          168 
          169        }
          170 
          171        else
          172 
          173        {
          174 
          175               document.all.datatable.nextPage();
          176 
          177               nowpage=nowpage+1;      
          178 
          179               document.all.page.value = "";           
          180 
          181               testnum.innerText=nowpage;
          182 
          183        }
          184 
          185 }
          186 
          187 function last()
          188 
          189 {
          190 
          191        document.all.datatable.lastPage();
          192 
          193        nowpage=pageCount;
          194 
          195        document.all.page.value = "";
          196 
          197        testnum.innerText=nowpage;
          198 
          199 }
          200 
          201 function chang(num)
          202 
          203 {
          204 
          205  
          206 
          207        if(num<=pageCount&&num>=1)
          208 
          209        {
          210 
          211               first();
          212 
          213               if(num==1)
          214 
          215               {
          216 
          217                      nowpage=num;
          218 
          219                      document.all.page.value = "";                  
          220 
          221                      testnum.innerText=num;
          222 
          223                      return ;
          224 
          225               }
          226 
          227               for(var i=1;i<num;i++)
          228 
          229               {
          230 
          231                      down();
          232 
          233               }
          234 
          235               nowpage=num;
          236 
          237               document.all.page.value = "";           
          238 
          239               testnum.innerText=nowpage;
          240 
          241        }
          242 
          243 }
          244 
          245 function count()
          246 
          247 {
          248 
          249        document.write(pageCount);
          250 
          251  
          252 
          253 }
          254 
          255 function check(str)
          256 
          257 {
          258 
          259        if(str<=pageCount&&str>=1)
          260 
          261        {
          262 
          263               document.all.changbutton.disabled=false;
          264 
          265        }
          266 
          267 }
          268 
          269 </script>
          270 
          271 共 <script>count();</script> 頁(yè)
          272 
          273 當(dāng)前第 <span id=testnum>1</span> 頁(yè)
          274 
          275 <input type="button" onClick="chang(document.getElementById('page').value)" id="changbutton" name="changbutton"  value=" 轉(zhuǎn)到 " disabled="true">
          276 
          277 第 <input name="page" type="text" id="page" value="" size="4" onpropertychange="check(document.getElementById('page').value);" > 頁(yè)
          278 
          279 <br>
          280 
          281 <button onclick="first()"> 首頁(yè) </button>
          282 
          283 <button onclick="up()"> 上一頁(yè) </button>
          284 
          285 <button onclick="down()"> 下一頁(yè) </button>
          286 
          287 <button onclick="last()"> 最后一頁(yè) </button>

           

           

          從這個(gè)程序里受到了很大啟發(fā)的。感覺(jué) xml 的應(yīng)用也會(huì)更加多。

          posted on 2007-02-15 13:16 -274°C 閱讀(1075) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): XML


          FeedBack:
          # re: xml學(xué)習(xí)總結(jié)之一
          2007-02-15 13:42 | BeanSoft
          WAP 2.0 使用 XHTML, 不再是基于 XML 的 WML 了. 現(xiàn)在手機(jī)上的瀏覽器看普通網(wǎng)頁(yè)除了腳本不行, 大部分內(nèi)容都無(wú)問(wèn)題. 我的多普達(dá)手機(jī)基本上就是 IE 手機(jī)版.  回復(fù)  更多評(píng)論
            
          # re: xml學(xué)習(xí)總結(jié)之一
          2007-02-15 13:48 | αβγ
          謝謝,糾正。  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          常用鏈接

          留言簿(21)

          隨筆分類(lèi)(265)

          隨筆檔案(242)

          相冊(cè)

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 917240
          • 排名 - 40

          最新評(píng)論

          主站蜘蛛池模板: 重庆市| 霍城县| 宁安市| 神农架林区| 龙门县| 临沧市| 巴里| 永安市| 聂荣县| 芦溪县| 正定县| 阳城县| 长兴县| 宜黄县| 定南县| 绥棱县| 兴城市| 阿克陶县| 堆龙德庆县| 德庆县| 诏安县| 望都县| 裕民县| 海丰县| 大田县| 甘德县| 阳谷县| 克拉玛依市| 大洼县| 区。| 洮南市| 新兴县| 宜川县| 南通市| 兴宁市| 那曲县| 芒康县| 锦屏县| 清苑县| 铜鼓县| 内乡县|