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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    XML Schema 小結 轉

    Posted on 2008-10-22 17:11 semovy 閱讀(382) 評論(0)  編輯  收藏 所屬分類: XML相關
    為何需要XML Schema 
    在當今的IT行業中,XML被賦予了越來越多的職責和功能,例如,作為文本數據庫存儲數據,作為某一行業中數據交換的標準表示,等等。這些都需要相應的XML文件中對數據的描述,如數據類型、長度進行嚴格的定義,這樣才能真正做到數據的安全性和行業統一標準并有通用的規則對其進行解析。

    然而,XML在其產生的時候就被定義為高開放性,用文本方式瀏覽,用標簽來定義的標記語言,鑒于XML的這些特點,就像HTML文件一樣,XML文件本身無法對文件中的數據進行嚴格的定義。

    為了解決以上的矛盾,XML Schema應運而生了,它是用來定義XML文件的文本結構,數據類型等XML文件描述規則的。

    何為XML Schema 
    其實,XML Schema本身也是一個xml文件,所不同的是,Schema文件所描述的是對引用它的xml文件的element和attribute的具體類型的。作為一個Schema文件,其特殊的文件頭格式為:


    <?xml version="1.0"?>ß ------------------------------------------xml文件頭

    <Schema name="schema_sample_1" ß ------------------------ 名稱(可省略)

    xmlns="urn:schemas-microsoft-com:xml-data" ß --------- 引用微軟Schema類型定義(可省略)

    xmlns:dt="urn:schemas-microsoft-com:datatypes">ß -----引用微軟Schema數據類型定義(可省略)

    <!--…………..- 〉 ß ---------------------------------------------- 具體文件內容

    </Schema>


    必須注意的是,在一個定義Schema的xml文件中,文件的root一定為<Schema>…</Schema>,

    在文件的具體內容中,你可以添加你對某個xml結構、數據類型的定義,請看下例:


    <?xml version="1.0"?>

    <catalog>

    <book>

    <title>Presenting XML</title>

    <author>Richard Light</author>

    <pages>334</pages>

    </book>

    <book>

    <title>XML</title>

    <author>Jane Lee</author>

    <pages>450</pages>

    </book>

    </catalog>


    這是一個表示書目錄的xml文件,對每一本書的介紹,我們都要有一些數據上的規定,如,“書名”、“作者名”和“頁數”都應該是唯一的,“作者名”應該為字符串類型,而“頁數”應該為整數類型的,對每本“book”來說,只能有所指定的三個元素。


    為了能實現上述要求,我們定義了如下schema:


    <?xml version="1.0"?>

    <Schema>

    <ElementType name="title" content="textOnly" model="closed" />

    <ElementType name="author" content="textOnly" dt:type=”string” model="closed" />

    <ElementType name="pages" content="textOnly" dt:type=”int” model="closed" />

    <ElementType name="book" content="eltOnly" model="closed" order=”seq”>

    <element type="title" />

    <element type="author" />

    <element type="pages" /> 

    </ElementType>

    </Schema>


    在以下的文章中,將詳細的描述內容中的具體意義。

    ElementType 
    ElementType是schema中最基本的,它用來定義xml文件中元素的格式,數據類型等。

    定義一個ElementType的基本格式為:


    <ElementType

    content="{empty | textOnly | eltOnly | mixed}" 

    dt:type="datatype" 

    model="{open | closed}" 

    name="idref" 

    order="{one | seq | many}" >

    </ElementType>


    content 
    Content用于描述元素中的內容類型。 
    empty 
    元素內容為空 

    textOnly 
    元素只包含文本類型的內容 

    eltOnly 
    元素只包含元素類型的內容

    mixed 
    元素內容包含上述任何情況



    <ElementType name="x" content="empty"/>

    <ElementType name="x" content="textOnly"/>

    <ElementType name="x" content="eltOnly">

    <element type="y">

    </ElementType>

    <ElementType name="x" content="mixed">

    <element type='q'>

    <element type='r'>

    </ElementType>


     

    model 
    Model定義元素的內容是否要嚴格的遵守schema中的定義。 
    open 
    元素內容可添加未特殊定義過的元素,特征,文本等 

    closed 
    元素內容只能添加特殊定義過的元素,特征,文本等 



    <ElementType name="x" model="open"/>

    <ElementType name="y" model="close"/>


     

    name 
    定義該元素的名稱 
        


    <ElementType name="x"></ElementType> 

    order 
    定義該元素子元素的排列順序 
    one 
    只允許元素內容按一種方式排列 

    seq 
    允許元素內容按指定的方式排列 

    many 
    按任意方式排列 



    <ElementType name='z' order="one">

    <element type="x">

    <element type="y">

    </ElementType>

    <ElementType name="x" order="one">

    <group order="seq">

    <element type="x1">

    <element type="y1">

    </group>

    <group order="seq">

    <element type="x2">

    <element type="y2">

    </group>

    </ElementType>

    <ElementType name="x" content="eltOnly" order="many">

    <element type='q'>

    <element type='r'>

    </ElementType>

    特別注明,seq只元素內容可以按特殊列出的排列順序中任選一種。


    Dt:type 
    用于指定元素文本的數據類型 
    boolean 
    布爾型 

    char 
    字符型 

    date 
    日期型 

    Date time 
    日期時間型 

    Float 
    實型 

    Int 
    整型 

    Number 
    數字型 

    Time 
    時間型 

    Uri 
    Universal Resource Identifier,如"urn:schemas-microsoft-com:Office9" 

    Uuid 
    例如"333C7BC4-460F-11D0-BC04-0080C7055A83". 

    entity
    xml補充類型 

    entities 
    xml補充類型 

    enumeration 
    xml補充類型 

    id 
    xml補充類型 

    idref 
    xml補充類型 

    idrefs 
    xml補充類型 

    nmtoken 
    xml補充類型 

    nmtokens 
    xml補充類型 

    notation 
    xml補充類型 

    string 
    字符串類型 



    <ElementType dt:type=”int”></Element>

    上表中只列舉了一部分常見數據類型,如果您想得到關于dt:type更詳細的信息,請瀏覽MSDN。


    除此之外,元素類型可以有另外一種方式,即引用一個已有的ElementType,請看下例:


    <ElementType name="pages" content="textOnly" dt:type=”int” model="closed" />

    <ElementType name="book" content="eltOnly" model="closed" order=”seq”>

    <element type="pages" /> 

    </ElementType>


    在元素book的定義中,為其定義了一個子元素,子元素的類型引用元素pages的定義。

     

    AttrributeType 
    Attribute也是xml的元素之一,用它可以表示Element中的某些特征,自然,我們也希望對attribute的數據結構和數據類型作定義。

    定義AttributeType的基本格式為


    <AttributeType

    default="default-value" 

    dt:type="primitive-type" 

    dt:values="enumerated-values" 

    name="idref" 

    required="{yes | no}" >


    default 
    設定attribute的默認值,必須注意的是,default的值也必須符合AttributeType中其他對數據結構的定義 



    Dt:type 
    用于指定Attribute的數據類型 
    boolean 
    布爾型 

    char 
    字符型 

    date 
    日期型 

    Date time 
    日期時間型 

    Float 
    實型 

    Int 
    整型 

    Number 
    數字型 

    Time 
    時間型 

    Uri 
    Universal Resource Identifier,如"urn:schemas-microsoft-com:Office9" 

    Uuid 
    例如"333C7BC4-460F-11D0-BC04-0080C7055A83". 

    entity 
    xml補充類型 

    entities 
    xml補充類型 

    enumeration 
    xml補充類型 

    id 
    xml補充類型 

    idref 
    xml補充類型 

    idrefs 
    xml補充類型 

    nmtoken 
    xml補充類型 

    nmtokens 
    xml補充類型 

    notation 
    xml補充類型 

    string
    字符串類型 



    <AttributeType dt:type=”int”>

    AttributeType的datatype類型與ElementType的datatype類型是相同的,上表中只列舉了一部分常見數據類型,如果您想得到關于dt:type更詳細的信息,請瀏覽MSDN。


    Dt:values 
    當dt:type為enumeration型時,定義attribute的可能值列表,attribute的值將在這些值中選取 



    <AttributeType name="colors" dt:type="enumeration"

    dt:values="red green blue">


     

    name 
    定義attribute的名稱 



    required 
    定義該attribute是否一定要包含在element中 
    yes 
    一定要包含 

    no 
    不一定要包含 



    AttributeType與ElementType一樣,也可以引用已有的AttributeType定義:

     

    description 
    description是一種注釋,用于說明Schema的定義內容。


    <ElementType name="Book">

    <description>

    This is how we describe the books we sell. Be sure to specify

    the ageGroup!

    </description>

    <element type="ageGroup">

    <default>ADULT</default>

    </element>

    </ElementType>

     

    group Element 
    group用來按一定序列,將element組織成group 

    group的表達形式為

    <group

    maxOccurs="{1 | *}" 

    minOccurs="{0 | 1}" 

    order="{one | seq | many}" >


    maxOccurs 
    定義該group出現的最多次數 

    只能調用一次 


    可以調用任意次 



    minOccurs 
    定義該group出現的最少次數 

    無要求 


    至少調用一次 



    order 
    定義該group中element的排列順序 
    one 
    只允許元素內容按一種方式排列 

    seq 
    允許元素內容按指定的方式排列 

    many 
    按任意方式排列 



     

    <ElementType name="x" order="one">

    <group order="seq">

    <element type="x1">

    <element type="y1">

    </group>

    <group order="seq">

    <element type="x2">

    <element type="y2">

    </group>

    </ElementType>

     

    Extensibility 
    Xml Schema時刻擴展的,他們建立在一個開放的內容模式上,在Schema文檔上可以任意的添加elemtnt和attribute,如下例,你可以利用其extensibility機制,對element “page”加以限制條件,由namespace “myEXT”擴展的tag,限制了書本的頁數必須在50至100頁之間。


    <ElementType name="pages" xmlns:myExt="urn:myschema-extensions">

    <datatype dt:type="int" />

    <myExt:min>50</myExt:min>

    <myExt:max>100</myExt:max>

    </ElementType>

     

    如何在XML文件中引用XML Schema 
    要在一個XML文件中引用一個Schema,只需在相應的element處注明,一般格式為:


    <”elementname” xmlns=” x-schema:[the url of the schema file]” >


    例如:


    <book xmlns="x-schema:http://www.microsoft.com/xml/schema/book.xml">

    <title>Presenting XML</title>

    <author>Richard Light</author>

    <pages>334</pages>

    </book>

     

    Schema 與 DTDs 
    在Schema之前,另有一種定義XML結構的方式,即DTDs,兩者的區別在于:


    1 XML Schemas是XML文檔,而DTDs有自己的特殊語法,這樣,你只需懂得XML的語法規則即可編寫Schema,無需學習其他語法規則;xml文件與xml schema文件可以用相同的語法分析器來解析,而無須寫兩套分析器;xml schema有強大、易用的擴展功能。


    2 XML Schema利用名域將文檔中特殊的節點與schema說明相聯系,一個xml文件可以有多個對應的schema,而用DTDs的話,一個xml文件只能由一個相對應的DTDs。


    3 XML schemas內容模型是開放的,可以隨意擴充,而DTDs將無法解析擴充的內容。


    4 DTDs只能把內容類型定義為一個字符串。而XML schemas允許你把內容類型定義為整型、浮點型、數據型、布爾型或者許多其他的簡單數據類型,而無須重定義。

     

    實例分析 
    現在我們來分析一下第二節中所舉的schema例子定義了什么:


    <?xml version="1.0"?>

    <Schema>

    <ElementType name="title" content="textOnly" model="closed" />

    <ElementType name="author" content="textOnly" dt:type=”string” model="closed" />

    <ElementType name="pages" content="textOnly" dt:type=”int” model="closed" />

    <ElementType name="book" content="eltOnly" model="closed" order=”seq”>

    <element type="title" />

    <element type="author" />

    <element type="pages" /> 

    </ElementType>

    </Schema>


    該schema文件定義了四種element type:

    title:只能有文本內容

    author:只能有文本內容,數據類型為字符串型

    pages:只能有文本內容,數據類型為整型

    book:只能包含子元素,并且子元素的排列順序必須按照schema所規定的順序

    book元素包含分別用,title,author,pages所定義的三個子元素。

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


    網站導航:
     
    主站蜘蛛池模板: 久久亚洲国产欧洲精品一| 免费人成年激情视频在线观看| 亚洲精品国产精品乱码在线观看| 国产精品亚洲色婷婷99久久精品| 一个人看的www在线观看免费| 亚洲日产2021三区在线| 亚洲精品在线免费观看| 亚洲精品日韩中文字幕久久久| 中文字幕亚洲免费无线观看日本 | www国产亚洲精品久久久| 亚洲综合一区无码精品| 成年女人喷潮毛片免费播放| 亚洲欧美国产国产一区二区三区| 精品久久免费视频| 成年免费大片黄在线观看com| 亚洲日韩精品一区二区三区| 免费在线看黄网站| 亚洲伊人久久精品| 四虎影视大全免费入口| 国产97视频人人做人人爱免费| 亚洲日本乱码在线观看| 在线日本高清免费不卡| 亚洲久热无码av中文字幕 | 日本高清免费不卡视频| 美美女高清毛片视频黄的一免费 | 国产精品亚洲w码日韩中文| 黄页免费在线观看 | 亚洲伊人久久成综合人影院| 国产免费拔擦拔擦8X高清在线人| 久久精品亚洲中文字幕无码麻豆| 成人午夜免费福利| 成全视频在线观看免费| 亚洲国产区男人本色在线观看| 国产男女猛烈无遮挡免费网站| 97在线视频免费公开视频| 亚洲av永久无码嘿嘿嘿| 亚洲国产成人精品91久久久| 久久精品无码专区免费东京热| 亚洲av片在线观看| 亚洲精品高清国产一久久| 午夜免费不卡毛片完整版|