(五)DTD验证XML文档
一、什么是DTD
文檔類型定義(DTD:Document Type Definition)可定義合法的XML文檔構建模塊。它使用一系列合法的元素來定義文檔的結構。
DTD 可被成行地聲明于 XML 文檔中,也可作為一個外部引用。
二、DTD的作用
1、有了DTD,每個XML可以攜帶一個自身格式的描述。
2、有了DTD,不同組織可以使用一個通用的DTD來交換數據。
3、應用程序中使用DTD校檢從外部接受的XML數據是否有效。
三、DTD中包含的內容
1、元素的定義規則:在DTD中需要驗證XML中能包含哪些元素。
2、元素之間的關系規則:指元素的父元素是誰,元素和元素之間到底是上下層關系還是平行關系。
3、屬性的定義:可以規定在XML中屬性名是什么,屬性值是什么類型。
?
四、DTD的分類:
1、內部DTD文檔:DTD文檔和XML文檔在同一個文件中。
<!DOCTYPE 根元素 [定義內容]>
2、外部DTD文檔:DTD文檔和XML文檔保存在不同文件中。
<!DOCTYPE 根元素 SYSTEM "DTD文件路徑">
3、內外結合的DTD文檔:兩種相結合的寫法。
<!DOCTYPE 根元素 SYSTEM "DTD文件路徑" [定義內容]>
?
五、DTD元素定義
語法:
<!ELEMENT NAME CONTENT>
ELEMENT:關鍵字,表示聲明一個DTD文檔。
NAME:元素名稱,XML中元素的名稱。
CONTENT:元素類型,
元素類型包括:EMPTY、#PCDATA、純元素類型、ANY。
1、Empty:
該元素不能包含子元素和文本,但可以有屬性(空元素)。
語法:
<!ELEMENT 元素名稱 EMPTY>
例:聲明一個空的student元素
<!ELEMENT student empty>
XML示例:
<student />
2、#PCDATA:
可以包含任何字符數據,但不能包含其他子元素。只有 PCDATA 的元素通過圓括號中的 #PCDATA 進行聲明:
語法:
<!ELEMENT 元素名稱 (#PCDATA)>
例:聲明一個name的元素
<!ELEMENT name (#PCDATA)>
XML示例:
<name>張三</name>
?
3、純元素類型:
只能包含子元素,不能包含文本。元素出現的順序必須和定義一致。
語法:
<!ELEMENT 元素名稱 (子元素名稱 1,子元素名稱 2,.....)>
例:聲明學生標記
<!ELEMENT student(name,age)>
XML示例:
<student>
<name>張三</name>
<age>18</age>
</student>
符號的用途:
| 符號 | 用途 | 示例 | 說明 |
| () | 用來給元素分組 | (古龍|金庸|梁羽生),(王朔|余杰),毛毛 | 分為三組 |
| | | 在列出的對象中必須選擇一個 | (男人|女人) | 表示男人或者女人必須出現,兩者至少出現其一。 |
| , | 對象必須按照指定的順序出現 | (西瓜,蘋果,香蕉) | 表示西瓜、蘋果、香蕉必須出現,并且是按照指定順序出現。 |
| * | 該對象可以出現0次或者多次 | (愛好*) | 愛好可以出現0次到多次 |
| ? | 該對象只能出現0到1次 | (菜鳥?) | 表示菜鳥可以出現0次到1次 |
| + | 改對象可以出現1到多次。 | (成員+) | 表示成員必須出現1次到多次。 |
4、ANY:
可以包含任何元素類型。
語法:
<!ELEMENT 元素名稱 ANY>
例子:
<!ELEMENT student ANY>
?
例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE studentlist [<!--聲明根元素下可以包含多個student元素--><!ELEMENT studentlist (student*)><!--聲明student下可以包含name,age,sex元素,name必須出現0-1次, age出現0-多次,sex必須出現1次 --><!ELEMENT student (name?, age*, sex)><!--聲明name中只能包含文本,不能包含其他標記--><!ELEMENT name (#PCDATA)><!ELEMENT age (#PCDATA)><!--聲明sex為空元素--><!ELEMENT sex EMPTY> ]> <studentlist><student><name>張三</name><age>20</age><sex/></student><student><name>李四</name><sex/></student> </studentlist>?
?
六、DTD中屬性的定義
語法:
<!ATTLIST 元素名稱 屬性名稱 屬性類型 默認值>
說明:
ATTLIST:屬性列表關鍵字。
元素名稱:要修飾的元素名稱。
屬性名稱:元素誰能夠的名稱。
屬性類型:CDATA、ID、IDREF/IDREFS、Enumerated。
屬性特點:#REQUIRED、#IMPLIED、#FIXED value、Default value。
1)#REQUIRED:表示元素屬性都必須有該屬性的值,不能為空。
2)#IMPLIED:表示元素屬性可以忽略的值,可以為空。
3)#FIXED value:表示元素屬性必須為指定的固定值,固定值在value中指定。
4)Default value:表示給指定元素默認值,不需要使用Default,直接指定默認值即可。
?
屬性類型:
1、CDATA屬性
表示屬性值可以是任何字符,包括數字和中文。
示例:聲明student屬性name值為任何文本,必須有值
DTD示例:
<!ATTLIST student name CDATA #REQUIRED>?
XML示例:
<student name="zhangsan" />
?
2、ID屬性
表示屬性取值必須是唯一的
示例1:對studentid屬性設置為唯一值。并且必須有值。
DTD示例:
<!ATTLIST student id ID #REQUIRED>?
XML示例:
<student id="10086" />
?
示例2:同時對多個屬性設置屬性,對student的id
DTD示例:
<!ELEMENT student (id,name)>
<!ATTLIST student
id ID #REQUIRED
name CDATA #REQUIRED>
XML示例:
<student id="10086" name="zhangsan"></student>
?
3、IDREF/IDREFS
IDREF:表示該屬性的值指向其他地方聲明的ID類型的值。
IDREFS:同IDREF,但是可以由空格分開多個引用。
示例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE categories [<!ELEMENT categories (category*)><!ELEMENT category (category*)><!ATTLIST category id ID #REQUIRED name CDATA #REQUIRED parentid IDREF #IMPLIED> <!--子類中的parentid引用外層的id--> ]> <categories><category id="c_1" name="電器"><category id="c_10" parentid="c_1" name="電視"/><category id="c_11" parentid="c_1" name="冰箱"/><category id="c_12" parentid="c_1" name="冰箱"/></category><category id="c_2" name="手機"><category id="c_20" parentid="c_2" name="智能手機"/><category id="c_21" parentid="c_2" name="非智能手機"/></category> </categories>?
4、Enumerated
枚舉,預定義一些值,屬性的值必須在所列出的值得范圍類。
DTD示例:學生性別只能是男或者女
<!ATTLIST student?sex (男|女) #REQUIRED>
XML示例:
<student sex="男">
?
七、實體
在DTD中定義的常量,在XML中使用。用于定義在XML中多次出現的值。
實體可以分為內部實體和外部實體:
1、內部實體
語法:
<!ENTITY 實體名 "實體值">
示例:定義
DTD示例:
<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">
XML示例:
<author>&writer;©right;</author>
注意:一個實體由三部分構成: 一個和號 (&), 一個實體名稱, 以及一個分號 (;)。
?
2、外部實體
語法:
<!ENTITY 實體名稱 SYSTEM "URI/URL">
DTD 例子:
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
XML 例子:
<author>&writer;©right;</author>
轉載于:https://www.cnblogs.com/yuexiaoyun/p/9439073.html
總結
以上是生活随笔為你收集整理的(五)DTD验证XML文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [caffe(一)]使用caffe训练m
- 下一篇: 人工智能究竟可以创造什么新的就业机会?