1. 程式人生 > >Web學習日記_06:XML約束之DTD約束

Web學習日記_06:XML約束之DTD約束

1,為什麼需要XML約束;


比如我們定義一個人的XML檔案,裡面包括人的元素姓名、年齡、性別等,但是如果你
寫入貓這個元素的時候,執行XML可以正常顯示。但是貓不是屬於人所屬的元素,不符合
人的現實關。所以這時候就需要XML約束來約束文件人的元素。

2,XML約束技術:DTD約束和schema約束

3,DTD約束


(1):實現DTD約束
        a:建立一個字尾名為.dtd的檔案
        b:看XML文件中有幾個元素,DTD文件就寫幾個<!ELEMENT>
        c;判斷元素是簡單元素還是複雜元素,簡單元素沒有子元素,複雜元素有子元素或者孫元素。
            -簡單元素:<!ELEMENT (#PCDATA)>
            -複雜元素:<!ELEMENT 元素名稱 (子元素名稱一,子元素名稱二)>


            注:元素名稱和冒號間有空格
        d:引用dtd檔案:<!DOCTYPE 根元素名稱 SYSTEM "dtd檔案路徑">
        注;在瀏覽器開啟是是看不出來約束的,瀏覽器只是負責校驗XML但是不能校驗DTD,
                所以這是需要工具eclipse。


                
4、dtd的三種引入方式


    (1)引入外部的dtd檔案
        <!DOCTYPE 根元素名稱 SYSTEM "dtd路徑">
    (2)使用內部的dtd檔案
        - <!DOCTYPE 根元素名稱 [
            <!ELEMENT person (name,age)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
        ]>


    (3)使用外部的dtd檔案(網路上的dtd檔案)
        <!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文件的URL">
        - 後面學到框架 struts2 使用配置檔案 使用 外部的dtd檔案
        - <!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    
           "http://struts.apache.org/dtds/struts-2.0.dtd">

5、使用dtd定義元素


    * 語法: <!ELEMENT 元素名 約束>

    * 簡單元素:沒有子元素的元素
        <!ELEMENT name (#PCDATA)>
        *** (#PCDATA): 約束name是字串型別
        *** EMPTY : 元素為空(沒有內容)
            - <sex></sex>
        *** ANY:任意
    * 複雜元素:
        <!ELEMENT person (name,age,sex,school)>
            - 子元素只能出現一次
        * <!ELEMENT 元素名稱 (子元素)>

        * 表示子元素出現的次數
            + : 表示一次或者多次
            ? :表示零次或者一次
            * :表示零次或者多次
        
        * 子元素直接使用逗號進行隔開 ,
            ** 表示元素出現的順序

        * 子元素直接使用|隔開
            ** 表示元素只能出現其中的任意一個


    
6、使用dtd定義屬性


    * 語法: <!ATTLIST 元素名稱
            屬性名稱 屬性型別 屬性的約束
         >
    
    * 屬性型別
        - CDATA: 字串
            -     <!ATTLIST birthday
                ID1 CDATA #REQUIRED
            >

        - 列舉 : 表示只能在一定的範圍內出現值,但是隻能每次出現其中的一個
            ** 紅綠燈效果
            ** (aa|bb|cc)
            - <!ATTLIST age
                ID2 (AA|BB|CC)  #REQUIRED
            >

        - ID: 值只能是字母或者下劃線開頭
            - <!ATTLIST name 
                ID3 ID   #REQUIRED
            >
    
    * 屬性的約束
        - #REQUIRED:屬性必須存在

        - #IMPLIED:屬性可有可無

        - #FIXED: 表示一個固定值 #FIXED "AAA"
            - 屬性的值必須是設定的這個固定值
            - <!ATTLIST sex
                ID4 CDATA #FIXED "ABC"
            >
        - 直接值
            * 不寫屬性,使用直接值
            * 寫了屬性,使用設定那個值
            - <!ATTLIST school
                ID5 CDATA "WWW"
            >
 

7:,定義實體

<!ENTITY 實體 “內容”>

XML引用:&實體

實體的定義要定義在dtd檔案內,如果不定義在dtd檔案內

,有些瀏覽器不顯示;