dtd入門、定義元素、實體

xml的約束

爲什麼需要約束?比如現在定義一個person的xml文件,只想要這個文件裏面保存人的信息,比如name,age等,但是如果在xml文件中寫了一個標籤<貓>,發現可以正常顯示,因爲符合語法規範,但是貓肯定不是人的信息,xml的標籤是自定義的,需要技術來規定xml中只能出現的元素,這個時候需要約束。
Xml的約束的技術:dtd的約束 和 schema約束

dtd的快速入門

  • 創建一個文件,後綴名爲 .dtd

步驟:
1) 看xml中有多少個元素,有幾個元素,在dtd文件中寫幾個<!ELEMENT>,判斷元素是簡單元素還是複雜元素。
複雜元素:有子元素的元素

<!ELEMENT 元素名稱(子元素)>

簡單元素,沒有子元素
<!ELEMENT 元素名稱(#PCDATA)>

2) 需要在xml文件中引入dtd文件
<!DOCTYPE 根元素名稱 SYSTEM “dtd文件的路徑”>
3) 打開xml文件使用瀏覽器打開的,瀏覽器只負責校驗xml的語法,不負責檢查約束。
如果想要校驗xml的約束,需要使用工具(myeclipse工具)

 打開myeclipse工具,創建一個項目day5,在day5的src目錄下面創建一個xml文件和一個dtd文件,當xml中引入dtd文件之後,比如只能出現name age,多寫了一個a,會提示報錯。

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文件。

使用dtd定義元素

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

  • 簡單元素:沒有子元素的元素

1) <!ELEMENT age (#PCDATA)>
2) #PCDATA:約束name是字符串類型
3) EMPTY:元素爲空(沒有內容)

4) ANY:任意

  • 複雜元素:
    1) <!ELEMENT person (name,age)>子元素只能出現一次
    2) 表示子元素出現的次數:
    +:表示一次或者多次
    ?:表示零次或者一次
    *:表示零次或者多次
    3) 子元素直接使用逗號進行隔開,表示元素出現的順序。
    4) 子元素直接使用|隔開 表示元素只能出現其中的任意一個。

使用dtd定義屬性

<!ATTLIST 元素名稱 屬性類型 屬性的約束>

屬性類型:

  • -CDATA:字符串

<!ATTLIST birthday ID1 CDATA #REQUIRED>

  • 枚舉:

表示只能在一定的範圍內出現值,但是隻能每次出現其中的一個
紅綠燈效果(aa|bb|cc)

<!AATLIST age ID2 (AA|BB|CC) #REQUIRED>

  • ID:
    ID值只能是字母或者下劃線開頭
    <!AALIST name ID3 ID #REQUIRED>

屬性的約束:

  • REQUIRED :屬性必須存在
  • IMPLTED:屬性可有可無
  • FIXED:表示一個固定值
  • 直接值:不寫屬性,直接使用直接值,寫了屬性,直接使用設置的值

定義屬性實例:

<!ATTLIST 頁面作者
    姓名 CDATA #IMPLIED
    年齡 CDATA #IMPLIED
    聯繫信息 CDATA #REQUIED
    網站職務 CDATA #FIXED “頁面作者”
    個人愛好 CDATA “上網”
>

實體的定義:

<!ENTITY TEST "HAHAHAHAH">
引用方式:&TEST;

代碼實例:

<?xml version="1.0" encoding="UTF-8"?>

<!--直接引入dtd方式-->
<!DOCTYPE person [
 <!ELEMENT person (name+,age?,sex*,school,birth)>
 <!ELEMENT name (#PCDATA)>
 <!ATTLIST name
    ID1 CDATA #REQUIRED  
 >
 <!ELEMENT age (#PCDATA)>
 <!ATTLIST age
    ID2 (18|19|20) #IMPLIED
 >
 <!ELEMENT sex EMPTY>
  <!ATTLIST sex
    ID3 ID #FIXED "nan"
 >
 <!ELEMENT school ANY>
  <!ATTLIST school
    ID3 ID  "mmm"
 >
 <!ELEMENT birth (#PCDATA)>

 <!ENTITY TEST "HAHAHAHAH">
 ]>

<person>
 <name ID1="aaa">&TEST;</name>
 <age ID2="18">18</age>
 <sex ID3="nan"></sex>
 <school>ddd</school>
 <birth>2000</birth>
</person>

“`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章