1 . XML DTD —— XML 入門知識

          1.1 為什么要學習xml

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

          1.2 什么是XML

          XML EXtensible Markup Language 的縮寫。

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

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

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

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

          他們在格式上也存在巨大區(qū)別,相對講 xml 格式要求嚴格:

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

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

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

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

          c. 所有標簽都區(qū)分大小寫

          d. 所有標簽都必須合理嵌套

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

          e. 所有標簽的屬性值必須使用雙引號 (””) 或者但引號括起來

          f.  xml 只能有一個根元素

          1.4 XML 文檔組成

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

          1.xml 聲明

          xml 文檔總是以一個 xml 聲明開始,其中指明所用的 xml 版本、文檔的編碼、文檔的獨立性信息。格式為:

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

          其中需要注意的是在問號左右兩邊不能有空格。

          還有其默認編碼是 utf8

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

          2. 文檔類型聲明

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

          XML SGML Standard Generalized Markup Language,SGML 標準通用標記語言)繼承了用于定義語法規(guī)則的 DTD 機制。幾乎所有的 xml 應用都是使用 DTD 來定義的。 DTD 文件也是一個文本文件,通常用 ”.dtd” 作為其擴展名。

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

          <!DOCTYPE greeting SYSTEM “hello.dtd”>

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

          <!DOCTYPE greeting [

          <!ELEMENT greeting  (#PCDATA)>

          ]>

          3. 元素

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

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

          元素的名字不能以數(shù)字或者標點符號開頭。

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

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

          盡量不用冒號,冒號在名稱空間中用于分隔名稱空間前綴和本地部分。

           

          2 個細節(jié):

          1.  CDATA

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

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

          2.  字符引用和預定義實體引用

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

          請參考:表 1-1 特殊字符的字符引用和預定義實體引用

          字符

          字符引用 10 進制

          字符引用 16 進制

          預定義實體引用

          < 

          <

          &#x3c;

          &lt;

          > 

          >

          >

          &gt;

          "

          "

          &quot;

          '

          '

          &apos;

          &

          &

          &

          &amp;

          4. 注釋

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

          5. 處理指令

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

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

          1.5 關(guān)于DTD

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

          通過 DTD 驗證的 XML 文檔稱為有效的 XML 文檔。

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

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

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

           

          含有 DTD 的實例 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 對于你的 XML 文件是外部而言,那么它會在含有以下句法構(gòu)造的 DOCTYPE 聲明中預先包裝進去。如:

          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 (全稱是:可擴展的樣式單語言,the eXtensible Stylesheet Language)CSS樣式單功能要強大的多。XSL的一個主要的用途就是將XML文檔轉(zhuǎn)換成HTML格式的文件,然后再交付給瀏覽器,由瀏覽器顯示轉(zhuǎn)換的結(jié)果。XML的可擴展樣式單語言。

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

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

          使用非官方標準的 <xml> 標記可以將 XML 數(shù)據(jù)嵌入到 HTML 頁面中。

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

          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>

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

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

          </xml>

          注意那個 <xml> 標記是一個 HTML 元素,而不是一個 XML 元素。

           

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

           

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

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

           

          寫到這里想起原來看 js 的一個應用實例,以數(shù)據(jù)島實現(xiàn)了無刷新分頁程序。

          代碼如下:

            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;  // 設定 recordset 對象的 PageSize 屬性與顯示的頁大小相同
          108 
          109 var pageCount=rs.PageCount; // 獲得總頁數(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> 頁
          272 
          273 當前第 <span id=testnum>1</span> 頁
          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);" > 頁
          278 
          279 <br>
          280 
          281 <button onclick="first()"> 首頁 </button>
          282 
          283 <button onclick="up()"> 上一頁 </button>
          284 
          285 <button onclick="down()"> 下一頁 </button>
          286 
          287 <button onclick="last()"> 最后一頁 </button>

           

           

          從這個程序里受到了很大啟發(fā)的。感覺 xml 的應用也會更加多。

          posted on 2007-02-15 13:16 -274°C 閱讀(1073) 評論(2)  編輯  收藏 所屬分類: XML


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

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


          網(wǎng)站導航:
           

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網(wǎng)站

          關(guān)注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916114
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 海南省| 依兰县| 嘉禾县| 图们市| 保靖县| 同江市| 康乐县| 和龙市| 姜堰市| 贵阳市| 泾源县| 阿尔山市| 惠安县| 靖安县| 招远市| 丰城市| 徐汇区| 巨鹿县| 沭阳县| 和龙市| 临城县| 积石山| 通榆县| 蒙自县| 郯城县| 庆安县| 泽普县| 长垣县| 交口县| 弥渡县| 五原县| 湘阴县| 科技| 汝阳县| 玉屏| 安远县| 永州市| 曲麻莱县| 工布江达县| 宜昌市| 黄平县|