用DTD約束XML詳解及示例


文檔類型定義(DTD)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。

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.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

 使用dtd定義元素
            簡單元素:沒有子元素的元素  <!ELEMENT 元素名 約束>   如:<!ELEMENT name (#PCDATA)>
                   約束: (#PCDATA): 約束name是字符串類型
                     EMPTY : 元素為空(沒有內容)
                  ANY:任意類型
                復雜元素:有子元素的元素  <!ELEMENT 元素名稱 (子元素)>  如:<!ELEMENT person (name+,age?,sex*,school)>
             子元素后面的符號表示子元素出現的次數  + :表示一次或者多次
                                       ? :表示零次或者一次
                                       * :表示零次或者多次
                                   無 :子元素只能出現一次
                            子元素直接使用逗號進行隔開 ,表示元素出現的順序
          子元素直接使用|隔開,表示元素只能出現其中的任意一個

使用dtd定義屬性
        語法: <!ATTLIST 元素名稱 屬性名稱 屬性類型 屬性的約束>
          屬性類型:CDATA: 字符串          如:<!ATTLIST  birthday  ATT  CDATA  #REQUIRED>
            枚舉 : 表示只能在一定的范圍內出現值,但是只能每次出現其中的一個 。如<!ATTLIST  age  ATT2  (AA|BB|CC)   #REQUIRED>
            ID: 值只能是字母或者下划線開頭  <!ATTLIST name  ATT3  ID    #REQUIRED>
      屬性的約束:   #REQUIRED:屬性必須存在
             #IMPLIED:屬性可有可無
                                    #FIXED: 表示一個固定值   <!ATTLIST  sex ATT4  CDATA  #FIXED  "ABC">
             直接值:不寫屬性,使用直接值,寫了屬性,使用設置那個值   <!ATTLIST school ATT5 CDATA "WWW">

實體的定義
        語法: <!ENTITY 實體名稱 "實體的值">       如:<!ENTITY TEST "HAHAHEHE">
      使用實體: &實體名稱;  比如 &TEST;(注:定義實體需要寫在內部dtd里面,如果寫在外部的dtd里面,有某些瀏覽器下,內容得不到
實例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE person [
    <!ELEMENT person (name+,age?,sex*,school,birthday)>
    <!ELEMENT name (#PCDATA)>
    <!ATTLIST name ATT ID   #REQUIRED >
    <!ELEMENT age (#PCDATA)>
    <!ATTLIST age ATT2 (AA|BB|CC)  #REQUIRED >
    <!ELEMENT sex  (#PCDATA)>
    <!ATTLIST sex ATT4 CDATA #FIXED "ABC" >
    <!ELEMENT school  (#PCDATA)>
    <!ATTLIST school ATT5 CDATA "WWW">
    <!ELEMENT birthday (#PCDATA)>
    <!ATTLIST birthday ATT1 CDATA #IMPLIED >
    <!ENTITY TEST "HAHAHEHE">
]>
<person>
    <name ATT="A1">&TEST;</name>
    <age ATT2="CC">20</age> 
    <sex ATT4="ABC">111</sex> 
    <school>1111</school>
    <birthday>2015</birthday>
</person>

顯示結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM