1 . XML DTD —— XML 入門知識

          1.1 為什么要學習xml

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

          1.2 什么是XML

          XML EXtensible Markup Language 的縮寫。

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

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

          1.3 XML HTML的主要區別

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

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

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

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

          b. 空元素必須關閉

          不允許出現單標簽,但標簽必須關閉,關閉使用 <p/> 或者 <high/>

          c. 所有標簽都區分大小寫

          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 文檔類型定義)來規范 xml 文檔中元素和屬性的規則及相互關系。

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

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

          <!DOCTYPE greeting SYSTEM “hello.dtd”>

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

          <!DOCTYPE greeting [

          <!ELEMENT greeting  (#PCDATA)>

          ]>

          3. 元素

          XML 元素命名必須遵守下面的規則:

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

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

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

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

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

           

          2 個細節:

          1.  CDATA

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

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

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

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

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

          字符

          字符引用 10 進制

          字符引用 16 進制

          預定義實體引用

          < 

          <

          &#x3c;

          &lt;

          > 

          >

          >

          &gt;

          "

          "

          &quot;

          '

          '

          &apos;

          &

          &

          &

          &amp;

          4. 注釋

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

          5. 處理指令

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

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

          1.5 關于DTD

          符合語法的 XML 文檔稱為結構良好的 XML 文檔。

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

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

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

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

           

          含有 DTD 的實例 XML 文件:

          #PCDATA 指明必須是字符數據。

           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 文件是外部而言,那么它會在含有以下句法構造的 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文檔轉換成HTML格式的文件,然后再交付給瀏覽器,由瀏覽器顯示轉換的結果。XML的可擴展樣式單語言。

          1.7 XML 數據島

          HTML 頁面中嵌入 XML 數據

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

          XML 數據可以象下面的例子那樣嵌入 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 元素。

           

          數據綁定

           

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

          在下面的例子中,一個 XML 數據島( ID=cdcat )被從外部 XML 文檔載入。一個 HTML 的表格綁定到此數據島上。 HTML 表格內部的 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 的一個應用實例,以數據島實現了無刷新分頁程序。

          代碼如下:

            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 // 記錄條數
          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; // 獲得總頁數
          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=" 轉到 " 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>

           

           

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

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


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

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


          網站導航:
           

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914107
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 稻城县| 琼中| 莲花县| 洪湖市| 辽阳市| 沈阳市| 凤冈县| 景宁| 临海市| 波密县| 林口县| 许昌市| 大竹县| 会泽县| 丹江口市| 曲靖市| 遵义市| 民勤县| 岫岩| 平谷区| 枞阳县| 承德县| 凤翔县| 平南县| 崇明县| 怀安县| 兴文县| 金寨县| 新疆| 察雅县| 睢宁县| 施甸县| 滦南县| 兰考县| 嵊泗县| 封开县| 龙陵县| 花莲市| 桃源县| 延边| 深水埗区|