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

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

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

    隨筆-128  評論-55  文章-5  trackbacks-0
    XML DTD是目前使用最廣泛的一種XML 模式,XML Schema則已經(jīng)成為W3C的正式推薦標準,并有替代XML DTD的趨勢。那么,從技術角度看,XML Schema與XML DTD有那些區(qū)別,XML Schema又有那些優(yōu)勢呢?
    引言 
    XML DTD(XML的文檔類型定義)是近幾年來XML技術領域所使用的最廣泛的一種模式。但是,由于XML DTD并不能完全滿足XML自動化處理的要求,例如不能很好實現(xiàn)應用程序不同模塊間的相互協(xié)調(diào),缺乏對文檔結構、屬性、數(shù)據(jù)類型等約束的足夠描述等等,所以W3C于2001年5月正式推薦XML Schema為XML 的標準模式。顯然,W3C希望以XML Schema來作為XML模式描述語言的主流,并逐漸代替XML DTD。那么XML Schema與XML DTD相比到底有哪些優(yōu)勢呢,XML DTD是否真的會在XML的模式描述領域中逐漸消失呢?

     

    XML模式與XML格式 
    XML模式是指用來描述XML結構、約束等因素的語言,例如XML Schema、XML DTD、XDR,SOX等等。XML格式則是XML文檔本身所具有的格式。本文以XML Schema來代表W3C所推薦的XML Schema模式標準,而以"XML模式"來代表所有的XML模式描述語言。

    從模式的描述語言來說,XML Schema和XML DTD都屬于語法模式。與概念模式不同,語法模式在對同一事物描述時,可以采用不同的語法,例如在對關系模式描述時,無論是使用XML Schema還是XML DTD,都既可以用元素也可以用屬性來描述關系模式的列。

    模式必須以某種格式來表示,XML Schema的格式與XML DTD的格式有著非常明顯的區(qū)別,XML Schema事實上也是XML的一種應用,也就是說XML Schema的格式與XML的格式是完全相同的,而作為SGML DTD的一個子集,XML DTD具有著與XML格式完全不同的格式。這種區(qū)別會給XML Schema的使用帶來許多好處: 

    XML用戶在使用XML Schema的時候,不需要為了理解XML Schema而重新學習,節(jié)省了時間; 
    由于XML Schema本身也是一種XML,所以許多的XML編輯工具、API 開發(fā)包、XML語法分析器可以直接的應用到XML Schema,而不需要修改。 
    作為XML的一個應用,XML Schema理所當然的繼承了XML的自描述性和可擴展性,這使得XML Schema 更具有可讀性和靈活性。 
    由于格式完全與XML一樣,XML Schema除了可以像XML一樣處理外,也可以同它所描述的XML文檔以同樣的方式存儲在一起,方便管理。 
    XML Schema與XML格式的一致性,使得以XML為數(shù)據(jù)交換的應用系統(tǒng)之間,也可以方便的進行模式交換。 
    XML有非常高的合法性要求,XML DTD對XML的描述,往往也被用作驗證XML合法性的一個基礎,但是XML DTD本身的合法性卻缺少較好的驗證機制,必需獨立處理。XML Schema則不同,它與XML有著同樣的合法性驗證機制。 

    數(shù)據(jù)類型

    或許,對于許多開發(fā)人員來講,XML Schema與XML DTD相比的一個最顯著的特征,就是其對數(shù)據(jù)類型的支持了。這完全是因為XML DTD提供的數(shù)據(jù)類型只有CDATA 、Enumerated、NMTOKEN 、NMTOKENS等十種內(nèi)置(built-in)數(shù)據(jù)類型。這樣少的數(shù)據(jù)類型通常無法滿足文檔的可理解性和數(shù)據(jù)交換的需要。XML Schema則不同,它內(nèi)置了三十七種數(shù)據(jù)類型,如long,int,short,double等常用的數(shù)據(jù)類型,并通過將數(shù)據(jù)類型表示為由value space、lexical space和facet三部分組成的三元組而獲得更大的靈活性。但是, XML Schema數(shù)據(jù)類型的真正靈活性來自于其對用戶自定義類型的支持。XML Schema提供兩種方式來實現(xiàn)數(shù)據(jù)類型的定義。

    1)簡單類型定義(simpleType),即在XML Schema內(nèi)置的數(shù)據(jù)類型基礎上或其它由XML Schema內(nèi)置的數(shù)據(jù)類型繼承或定義所得到的簡單的數(shù)據(jù)類型(simpleType)基礎上,通過restriction,list 或者 union方式定義新的數(shù)據(jù)類型。

    例如:
    源碼1 restriction方式的定義
    <simpleType name='Sku'>
    <restriction base='string'>
    <pattern value='\d{3}-[A-Z]{2}'/>
    </restriction>
    </simpleType>
     


    源碼2 list方式的定義
    <simpleType name='listOfDouble'>
    <list itemType='double'/>
    </simpleType>
     


    源碼3 union方式的定義
    <xsd:attribute name="size">
      <xsd:simpleType>
       <xsd:union>
        <xsd:simpleType>
         <xsd:restriction base="xsd:positiveInteger">
          <xsd:minInclusive value="1"/>
          <xsd:maxInclusive value="12"/>
         </xsd:restriction>
        </xsd:simpleType>
        <xsd:simpleType>
         <xsd:restriction base="xsd:string">
          <xsd:enumeration value="month"/>
         </xsd:restriction>
        </xsd:simpleType>
       </xsd:union>
      </xsd:simpleType>
     </xsd:attribute>
     


    2) 復合類型定義(complexType),該方法提供了一種功能強大的復雜數(shù)據(jù)類型定義機制,可以實現(xiàn)包括結構描述在內(nèi)的復雜的數(shù)據(jù)類型。下面是一個以complexType定義實現(xiàn)關系模式中表結構的例子,設有表T_C_Type(Psign,Count),其中Psign為CHAR數(shù)據(jù)類型,Count為NUMBER數(shù)據(jù)類型。則有:

    源碼4 complexType定義 
    <!--表結構類型定義-->
     <complexType name="T_C_Type">
      <sequence minOccurs="0" maxOccurs="unbounded">
       <element name="Psign">
        <complexType>
         <simpleContent>
          <restriction base="string">
           <attribute name="value" type="string"/>
          </restriction>
         </simpleContent>
        </complexType>
       </element>
       <element name="Count" minOccurs="0">
        <complexType>
         <complexContent>
          <restriction base="anyType">
           <attribute name="value" type="int" use="optional"/>
          </restriction>
         </complexContent>
        </complexType>
       </element>
      </sequence>
     </complexType>
     


    不僅如此,XML Schema還允許元素的內(nèi)容取空值,這一點可以擴大XML Schema對數(shù)據(jù)情況的描述范圍,而XML DTD則無能為力。例如:

    源碼5 XML Schema 元素取空值的定義 <element name='test' nullable='true'/>
     


    元素順序的支持 
    XML DTD與XML Schema 都支持對子元素節(jié)點順序的描述,但XML DTD沒有提供對于無序情況的描述,也就是如果以XML DTD來描述元素的無順序出現(xiàn)情況,它必須采用窮舉元素各種可能出現(xiàn)的排列順序的方式來實現(xiàn),這種方法不僅繁瑣,有時甚至是不現(xiàn)實的。例如對于table的a,b子元素,如果希望它們以任意的順序出現(xiàn),用XML DTD來描述:

    源碼6 a,b子元素任意順序出現(xiàn)的XML DTD定義 
    <?xml version="1.0" encoding="UTF-8"?>
    <!ELEMENT ENTER_NAME_OF_ROOT_ELEMENT_HERE EMPTY>
    <!ELEMENT table ((a,b)|(b,a))>
    <!ELEMENT a  (#PCDATA)>
    <!ELEMENT b (#PCDATA)>

     


    XML Schema提供了<all>標記來描述這種情況:

    源碼7 a,b子元素任意順序出現(xiàn)的XML Schema定義 
    <xsd:element name="a" type="xsd:string"/>
     <xsd:element name="b" type="xsd:string"/>
     <xsd:element name="table">
      <xsd:complexType>
       <xsd:all>
        <xsd:element ref="a"/>
        <xsd:element ref="b"/>
       </xsd:all>
      </xsd:complexType>
     </xsd:element>
     


    可見,用XML Schema來實現(xiàn)子元素的無序描述要簡單的多。

    命名空間 
    在XML中引入命名空間的目的是為了能夠在一個XML文檔中使用其它XML文檔中的一些具有通用性的定義(通常是一些元素或數(shù)據(jù)類型等的定義),并保證不產(chǎn)生語義上的沖突。XML DTD并不能支持這一特性,這進一步限制了XML DTD的適用范圍。而XML Schema則很好的滿足了這一點。

    并且, XML Schema還提供了include 和 import兩種引用命名空間的方法。下面的例子中XML Schema文檔引用了其它兩個XML Schema的定義,通過使用import實現(xiàn)了混合使用不同命名空間的目的。例子中還定義了不同命名空間中元素之間的keyref約束。

    源碼8 XML Schema對命名空間的使用 
    schema targetNamespace="http://202.117.84.144"
    xmlns:xs="http://202.117.84.144"
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:a="http://202.117.84.228/middlewareSqlServer2000sqlservertest20211784228"
    xmlns:b="http://202.117.84.228/middlewareOracle805ioracletest20211784144" 
    elementFormDefault="qualified">
    <import namespace="http://202.117.84.228/middlewareSqlServer2000sqlservertest20211784228" 
     schemaLocation="F:\xml schema\middlewareSqlServer2000sqlservertest20211784228.xsd"/>
    <import namespace="http://202.117.84.228/middlewareOracle805ioracletest20211784144"
     schemaLocation="F:\xml schema\middlewareOrcal805ioracletest20211784144.xsd"/>
     <annotation>
      <documentation xml:lang="cn">
       schema for Middleware
       Copyright 2001 Zhou Jingtao. All rights reserved.
      </documentation>
     </annotation>
     <element name="CombineDatabase">
      <complexType>
       <sequence>
        <element name="CombinGlobeSchema">
         <complexType>
          <sequence>
           <element ref="a:H-Database"/>
           <element ref="b:H-Database"/>
          </sequence>
         </complexType>
         <keyref name="SqlServerTest_T_C_Psign" refer="b:gz_jgxx_ID_pk">
          <selector xpath="a:H-Database/a:SqlServerTest/a:T_C/a:Count"/>
          <field xpath="@value"/>
         </keyref>
        </element>
       </sequence>
      </complexType>
     </element>
    </schema>
     


    對于API的支持 
    在掌握和使用XML技術時,DOM和SAX可能是技術人員最常使用到的XML API。DOM和SAX只對XML實例文檔有效,雖然可以通過它們實現(xiàn)以XML DTD來驗證XML文檔,但是DOM和SAX卻沒有提供解析XML DTD文檔內(nèi)容的功能,也就是說我們無法通過DOM或SAX來得到DTD中元素、屬性的聲明和約束的描述。但是在基于XML+DTD的數(shù)據(jù)交換過程中,一些應用程序需要得到DTD本身的描述內(nèi)容和結構,以方便對XML文檔中數(shù)據(jù)的處理,例如在使用關系數(shù)據(jù)庫存儲XML 文檔的過程中就涉及到如何將XML DTD映射為關系模式描述的問題。為了實現(xiàn)對XML DTD的解讀,研究人員必須為XML DTD開發(fā)新的接口或者專用工具,帶來了很大的不便。

    由于XML Schema本身就是一個XML 文檔,所以我們可以通過使用DOM、SAX或JDOM等XML API很容易的解析XML Schema,這就實現(xiàn)了XML文檔與其描述模式處理方式的一致性,利于數(shù)據(jù)的傳輸和交換。

    更加清晰的屬性出現(xiàn)情況的限制、以及缺省值和枚舉 
    XML DTD以關鍵字#IMPlIED、#FIXED和#REQUIRED來指定屬性是否出現(xiàn),并支持屬性缺省值的定義。XML Schema則提供了更明確的標記來實現(xiàn)清晰易懂的表示。XML Schema廢棄了XML DTD的#IMPlIED,不再支持屬性的隱含狀態(tài),而要求必須給出明確的狀態(tài),并以prohibited來表示屬性的禁用。對于缺省值的表達則更為直觀,用default來直接給出。

    源碼9 XML DTD 、XML Schema對屬性出現(xiàn)情況的限制 
    <!ATTLIST TestDTD testAr1 CDATA  #IMPLIED>
    <!ATTLIST TestDTD testAr2 CDATA  #REQUIRED>
    <!ATTLIST TestDTD testAr3 CDATA  #FIXED "3">
    <!ATTLIST TestDTD testAr4 CDATA  "3">

    <xsd:attribute name="TestAr1" type="xsd:string" use="optional" default="3"/>
    <xsd:attribute name="TestAr2" type="xsd:string" use="prohibited"/>
    <xsd:attribute name="TestAr3" type="xsd:string" use="required" fixed="3"/>
     


    對于XML Schema在枚舉方面的改進,請參見參考資料中"XML 問題 #7 W3C XML Schema 與文檔類型定義 (DTD) 比較"一文(文獻9)。

    注釋 
    XML DTD和XML Schema都支持<!-注釋內(nèi)容-->這樣的注釋方法,但是XML Schema提供了更靈活和有用的注釋方式:documentation和appinfo。它們提供了面向讀者和應用的注釋。

    源碼10 XML Schema的注釋
    <xsd:annotation>
    <xsd:documentation>面向用戶和應用的注釋</xsd:documentation>
    <xsd:appinfo>
    //這是一段C語言代碼。
    #include stdio.h
    void main()
    {
    int i,j;
    i =1;
    j=i+1;
    }
    </xsd:appinfo>
     


    對數(shù)據(jù)庫的支持 
    目前如何將關系數(shù)據(jù)表示為XML數(shù)據(jù)和如何實現(xiàn)基于關系數(shù)據(jù)庫的XML數(shù)據(jù)存儲、查詢和更新已經(jīng)成為了研究的熱點。Deutsh,F(xiàn)lorescu[5],Kossman[5],Shanmugasundaram[6,7]和D W Lee[8]等人都在XML與關系數(shù)據(jù)的相互轉(zhuǎn)化問題方面作了較深入的研究。然而由于XML Schema成為正式推薦標準的時間較晚,加之XML DTD語法相對簡單,所以現(xiàn)在大部分的研究和應用都是基于XML DTD展開的。但是,XML DTD在對關系數(shù)據(jù)的描述方面明顯存在著不足,例如XML DTD有限的數(shù)據(jù)類型根本無法完成對關系數(shù)據(jù)數(shù)據(jù)類型的一一映射,也無法實現(xiàn)大部分的數(shù)據(jù)規(guī)則的描述。XML Schema提供了更多的內(nèi)建數(shù)據(jù)類型,并支持用戶對數(shù)據(jù)類型的擴展,基本上滿足了關系模式在數(shù)據(jù)描述上的需要,這一點可以作為XML Schema比XML DTD更適合描述關系數(shù)據(jù)的一個主要的原因。 

    一個結論 
    通過比較,可以看出,XML Schema比XML DTD具有更強的表現(xiàn)力,能夠更好的滿足不同領域應用的需求。那么,是不是可以說XML DTD會很快被XML Schema替代并最終消失呢。從作者的觀點來看,XML Schema雖然在大多數(shù)的應用領域都有替代XML DTD的趨勢,但是XML DTD仍然有它的適用范圍,并不可能被XML Schema完全替代: 

    XML DTD是作為XML 標準的一部分發(fā)布的,W3C似乎并沒有準備將其從XML標準中廢除掉,對于XML DTD的支持還將持續(xù)。 
    目前大多數(shù)的面向XML應用,都對XML DTD做了很好的支持,XML DTD的工具也相對較為成熟,一般情況下,這些應用和工具并不會選擇以XML Schema替換XML DTD的方式對其升級,更多的選擇應該是二者都支持。當然,對于那些對數(shù)據(jù)交換或者描述能力要求較高、XML DTD已不能滿足功能需求的應用來說,以XML Schema來代替XML DTD已經(jīng)成為一種必然趨勢。 
    當前大多數(shù)與XML 模式相關的算法研究都是基于XML DTD展開的,作為一種研究的延續(xù),并不會放棄XML DTD的研究成果,但是,針對XML Schema的研究將會成為一個新的熱點。 
    在一些相對要求簡單的處理環(huán)境中,XML DTD仍然會占有它的一席之地。 
    同其他技術的發(fā)展一樣,由于新標準的出現(xiàn),XML DTD的作用會逐漸減弱,但正如層次數(shù)據(jù)庫在今天仍然在使用一樣, 對XML Schema是否會完全替代XML DTD做一個結論似乎為時過早。 

    所以,作為一種強有力的標準,XML Schema作為XML模式的主流已經(jīng)成為一種趨勢;但作為一種最簡單的XML模式,XML DTD也還將會在一段時間內(nèi)發(fā)揮它應有的作用。



    Author: orangelizq
    email: orangelizq@163.com

    歡迎大家訪問我的個人網(wǎng)站 萌萌的IT人
    posted on 2007-07-14 14:44 桔子汁 閱讀(294) 評論(0)  編輯  收藏 所屬分類: Web Service
    主站蜘蛛池模板: 亚洲AV人无码综合在线观看| 亚洲欧美黑人猛交群| 国产成人免费爽爽爽视频 | 亚洲天堂2017无码中文| 大陆一级毛片免费视频观看| 一区二区三区在线观看免费 | 免费观看四虎精品成人| 亚洲精品无码MV在线观看| 曰曰鲁夜夜免费播放视频| 国产AV日韩A∨亚洲AV电影| 久久精品视频亚洲| 亚洲五月六月丁香激情| 久久久久久久久免费看无码| 一级毛片免费不卡| 亚洲一级毛片中文字幕| 国产亚洲精久久久久久无码AV| 91免费播放人人爽人人快乐| 免费无码AV一区二区| 亚洲女人18毛片水真多| 亚洲国产一区二区三区| 性做久久久久久久免费看| 在线观看片免费人成视频播放| 97se亚洲国产综合自在线| 亚洲韩国精品无码一区二区三区| 精品熟女少妇AV免费观看| 在线看片免费人成视频福利| 亚洲精品无码一区二区| 久久久久亚洲av无码专区导航| 亚洲AV无码一区二区三区在线观看| 4399影视免费观看高清直播| 一级午夜免费视频| 亚洲精品无码专区在线播放| 亚洲人成电影在线天堂| 国产L精品国产亚洲区久久| 光棍天堂免费手机观看在线观看 | 一区二区三区观看免费中文视频在线播放 | 国产成人免费a在线资源| 亚洲视频免费一区| 国产在线一区二区综合免费视频| 偷自拍亚洲视频在线观看| 亚洲 日韩 色 图网站|