<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    1 . XML DTD —— XML 入門知識

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

    XML 發(fā)展的非常迅速,這實在令人感到驚奇,有很多的軟件開發(fā)商都采用了 XML 標(biāo)準(zhǔn)。我們相信,在未來的 Web 開發(fā)中, XML 將和 HTML 一樣受到重視,他們都是 Web 技術(shù)的基礎(chǔ)。就連無線標(biāo)記語言 (WML The Wireless Markup Language ), [ 用于標(biāo)識運行于手持設(shè)備上(比如:手機)的 Internet 程序 ] WML 都采用了 XML 的標(biāo)準(zhǔn)。 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è)計用來描述數(shù)據(jù)的,重點是:什么是數(shù)據(jù),如何存放數(shù)據(jù)。
    HTML
    是被設(shè)計用來顯示數(shù)據(jù)的,重點是:顯示數(shù)據(jù)以及如何顯示數(shù)據(jù)更好上面。

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

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

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

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

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

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

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

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

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

    f.  xml 只能有一個根元素

    1.4 XML 文檔組成

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

    1.xml 聲明

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

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

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

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

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

    2. 文檔類型聲明

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

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

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

    <!DOCTYPE greeting SYSTEM “hello.dtd”>

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

    <!DOCTYPE greeting [

    <!ELEMENT greeting  (#PCDATA)>

    ]>

    3. 元素

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

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

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

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

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

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

     

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

    1.  CDATA

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

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

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

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

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

    字符

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

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

    預(yù)定義實體引用

    < 

    <

    &#x3c;

    &lt;

    > 

    >

    >

    &gt;

    "

    "

    &quot;

    '

    '

    &apos;

    &

    &

    &

    &amp;

    4. 注釋

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

    5. 處理指令

    處理指令允許文檔中包含由應(yīng)用程序來處理的指令。處理指令的語法和 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ù)的方法達(dá)成一致。

     

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

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

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

    使用非官方標(biāo)準(zhǔn)的 <xml> 標(biāo)記可以將 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> 標(biāo)記是一個 HTML 元素,而不是一個 XML 元素。

     

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

     

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

    在下面的例子中,一個 XML 數(shù)據(jù)島( ID=cdcat )被從外部 XML 文檔載入。一個 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 

     

    寫到這里想起原來看 js 的一個應(yīng)用實例,以數(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;  // 設(shè)定 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 當(dāng)前第 <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 的應(yīng)用也會更加多。

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


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

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


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

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網(wǎng)站

    關(guān)注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914507
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: 亚洲综合一区二区国产精品| 亚洲人成影院在线观看| heyzo亚洲精品日韩| 久久久久亚洲Av片无码v| 亚洲韩国—中文字幕| 亚洲中文无码永久免费| 中文字幕免费在线看线人动作大片 | 中文字幕亚洲码在线| 亚洲AV永久无码精品一福利| 你是我的城池营垒免费看| 久久久久国色AV免费观看性色| 亚洲乱码国产一区网址| 亚洲国产成人精品无码区在线秒播 | 国产精品久久免费视频| 国产亚洲一区区二区在线| 亚洲不卡视频在线观看| 亚洲精品无码专区| 免费看男人j放进女人j免费看| 蜜臀91精品国产免费观看| 亚洲天堂男人天堂| 日日狠狠久久偷偷色综合免费| 亚洲三级高清免费| 国产免费久久精品久久久| 亚洲男人电影天堂| 亚洲va中文字幕| 91精品免费不卡在线观看| 亚洲精品第一国产综合境外资源| 国产精品亚洲аv无码播放| 亚洲精品无码av中文字幕| 免费A级毛片无码A∨中文字幕下载 | 99爱在线观看免费完整版| 一个人免费观看在线视频www| 亚洲男人天堂2020| 亚洲乱码国产乱码精华| www成人免费观看网站| 大陆一级毛片免费视频观看i| 精品日韩亚洲AV无码| 久青草视频在线观看免费| 国产乱人免费视频| 亚洲影院天堂中文av色| 最近免费中文字幕大全免费版视频|