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檔案內
,有些瀏覽器不顯示;