<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所定義的三個子元素。

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


    網站導航:
     
    主站蜘蛛池模板: 暖暖免费中文在线日本| 久久精品国产亚洲AV电影网| 两个人www免费高清视频| 免费一级毛片正在播放| 美女扒开尿口给男人爽免费视频| 免费激情视频网站| 含羞草国产亚洲精品岁国产精品| 国产精品国产免费无码专区不卡 | 亚洲AV无码乱码国产麻豆穿越| 精品国产免费一区二区三区| 亚洲真人无码永久在线| 岛国岛国免费V片在线观看| 亚洲中文字幕日产乱码高清app| 最近免费mv在线观看动漫| 久久亚洲成a人片| 亚洲一区二区免费视频| 亚洲精品无码久久久久久| 免费**毛片在线播放直播| 一个人免费观看视频在线中文| 亚洲熟妇无码AV在线播放| 久久ww精品w免费人成| 亚洲区视频在线观看| 日本一道在线日本一道高清不卡免费| 国产成人+综合亚洲+天堂| 相泽亚洲一区中文字幕| aⅴ免费在线观看| 精品国产_亚洲人成在线| 亚洲级αV无码毛片久久精品| 99在线免费观看视频| 亚洲性无码AV中文字幕| 亚洲?V无码乱码国产精品| 免费91麻豆精品国产自产在线观看 | 免费特级黄毛片在线成人观看| 成人免费视频一区二区| 亚洲Av永久无码精品三区在线| www.黄色免费网站| 黄色免费网址大全| 日韩精品一区二区亚洲AV观看 | 日韩精品免费电影| a级毛片高清免费视频| 亚洲国产超清无码专区|