




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
模塊三
DTD技術《XML程序設計》目錄3.1
DTD的一般結構3.2
DTD在XML文檔中的引用3.3
驗證DTD文檔3.4
DTD中的元素聲明3.5
DTD中的屬性聲明什么是DTDDTD
(Document
Type
Definition,文檔類型定義)DTD用來指定XML
文檔怎樣組織數據(即數據結構)。例如,規定XML文檔中可以有哪些元素,一個元素有哪些屬性,元素之間如何嵌套等。一個格式良好的XML
文檔,如果遵守DTD規則,被稱為有效的XML文件。DTD示例<?xml
version="1.0"
encoding="UTF-8"
?><!DOCTYPE
students[<!ELEMENT
students
(student)*><!ELEMENT
student
(name,sex,age)><!ELEMENT
name
(#PCDATA)><!ELEMENT
sex
(#PCDATA)><!ELEMENT
age
(#PCDATA)>]><students><student><name>李剛</name><sex>男</sex><age>19</age></student><student><name>王麗</name><sex>女</sex><age>18</age></student></students>DTD
聲明ch3_1.xml文件<!DOCTYPE
根標記[<!ELEMENT
元素名元素類型><!ATTLIST
元素名
屬性名
[對屬性的約束規則]
默認值>]>聲明一個元素在XML
中,元素是文檔的一個邏輯組件,屬性表示一個元素的特征DTD
的一般結構:聲明一個屬性DTD的一般結構使用DTD生成XML
文檔驗證接收到的數據是否有效用于驗證自己的數據定義XML
文檔的合法構建塊DTD以簡單文本文件的形式出現,可以存儲在獨立的文件中,也可以嵌入XML
文件引用DTD
的XML
文檔將包含<!DOCTYPE>聲明使用一系列合法元素來定義文檔結構PUBLICDTD分為兩大類內部DTD外部DTDSYSTEMDTD分類1、內部DTD引用一個只使用內部DTD進行有效性檢驗的XML文檔的基本結構如下:DTD在XML文檔中的引用<?xml
version="1.0"
encoding="UTF-8"
?><!DOCTYPE
根元素名[DTD的內容]>2、外部DTD引用一個DTD文件的基本結構:<?xml
version="1.0"
encoding="UTF-8"
standalone="no"?>……元素、屬性或實體的DTD聲明部分……DTD在XML文檔中的引用外部DTD引用根據兩種不同的外部DTD文件,有兩種引用方式。引用私有DTD文件引用私有DTD文件的語法為:<!DOCTYPE根元素名SYSTEM
“DTD_URL”>引用公共DTD文件引用公共DTD文件的語法為:<!DOCTYPE根元素名PUBLIC
“DTD_Name”“DTD_URL”>外部DTD示例<?xml
version="1.0"
encoding="UTF-8"
?><!ELEMENT
students
(student)*><!ELEMENTstudent
(name,sex,age)><!ELEMENTname
(#PCDATA)><!ELEMENT
sex
(#PCDATA)>exp1.dtd文件<!ELEMENT
age
(#PCDATA)><?xml
version="1.0"
encoding="UTF-8"
?><!DOCTYPE
students
SYSTEM
"exp1.dtd"><students><student><name>李剛</name><sex>男</sex><age>19</age></student><student><name>王麗</name><sex>女</sex><age>18</age></student></students>ch3_2.xml文件檢查XML文件的有效性解析器類型非驗證解析器驗證解析器檢查文檔格式是否良好使用DTD
檢查文檔的有效性XML文檔的有效性檢驗就是根據DTD聲明中定義的約束條件來驗證文檔中標記的使用是否合法。本章使用DOM解析器TestValidate.java來檢驗XML文件的有效性。檢查XML文件的有效性DTD中的元素(ELEMENT)是用來約束標記的,用元素聲明來定義一個標記,元素聲明以“<!ELEMENT”開始,用“>”結束,格式為:<!ELEMENT
標記名稱標記的約束>例如:<!ELEMENT
name
(#PCDATA)>這段代碼定義了一個標記,名稱為name,它標記的內容只能含有文本數據。DTD中的元素聲明如果想要定義一個標記含有哪些子標記以及子標記應該以怎樣的順序出現或出現的次數,這些內容都要在
“標記的約束”中定義。標記的約束有以下5種情況:EMPTYANY字符數據#PCDATA包含子標記(子標記列表)混合內容(既有字符數據,又有子標記)DTD中的元素聲明(1)EMPTY關鍵字EMPTY用于定義空標記,空標記不含有任何標記內容。例如,對于下面的一個空標記:<abc
/>在DTD中聲明該標記的語法是:<!ELEMENT
abc
EMPTY>DTD中的元素聲明(2)ANY使用關鍵字ANY就意味著該標記可以包含該DTD中定義的其他任何標記,多用于定義根標記。例如:<!ELEMENT
persons
ANY>這段代碼定義了一個名稱為persons的標記,它的子標記可以是在該DTD文件中定義的其他任何標記。說明:在DTD中應慎用ANY,因為,過多地使用
ANY會破壞文檔結構清晰這一原則。DTD中的元素聲明(3)#PCDATA如果約束條件是#PCDATA,說明該標記所標記的內容可以是除標記以外的任何字符。例如:<!ELEMENT
name
(#PCDATA)
>這段代碼定義了名稱為name的標記,同時規定了標記<name>所標記的內容只能是文本數據,不能含有子標記。DTD中的元素聲明(4)定義子標記標記的內容可以包含子標記,定義一個標記的子標記的語法格式為:<!ELEMENT
標記名稱(子標記列表)>例如:<!ELEMENT
student
(name,sex,age)>這段代碼定義了一個名稱為student的標記,該標記含有3個子標記<name>、<sex>和<age>。定義子標記時子標記的出現順序決定了XML文件中子標記出現的順序,這個次序不能違背。DTD中的元素聲明給通訊錄案例添加內部DTD(P20)給通訊錄案例添加外部DTD(P22)練習控制方法元素出現次數子元素列表確定的次數加“?”0次或1次加“*”0次或多次,即任意次加“+”1次或多次加“|”用于可選的子標記,代表“或”控制元素的出現次數DTD中引入了幾個特殊符號來說明子標記的出現情況,分別是“?”、“*”、“+”和“|”。DTD中的元素聲明<!DOCTYPE
學生基本情況[<!ELEMENT
學生基本情況(學生)+><!ELEMENT
學生(學號?,姓名,性別,班級,愛好*)><!ELEMENT
學號(#PCDATA)><!ELEMENT
姓名(#PCDATA)><!ELEMENT
性別(#PCDATA)><!ELEMENT
班級(#PCDATA)><!ELEMENT
愛好(#PCDATA)>]>h3_3.xml<?xml
version="1.0"
encoding="GB2312"standalone="yes"?>“+”表示至少出現1次“*”表示0次或多次“?”表示0次或1次DTD中的元素聲明DTD中的元素聲明<學生基本情況><學生><學號>200120101</學號><姓名>季慧奇</姓名><性別>女</性別><班級>01信管1</班級><愛好>繪畫</愛好></學生><學生><學號>200120113</學號><姓名>徐樂歡</姓名><性別>男</性別><班級>01信管1</班級></學生><學生><姓名>錢燦剛</姓名><性別>男</性別><班級>01信管1</班級><愛好>籃球</愛好><愛好>羽毛球</愛好><愛好>足球</愛好></學生></學生基本情況><!ELEMENT
聯系人(#PCDATA
|姓名|電話|EMAIL)*><聯系人><姓名>張三</張三><電話></電話><EMAIL>Mac
&rights;</EMAIL>這是關于張三的信息</聯系人>(5)定義混合內容標記混合內容是指標記內容可以有文本數據和子標記。標記約束條件是關鍵字“#PCDATA”和若干個子標記的
“或運算”,而且該“或運算”必須用小括號括起并尾加一個
“*”號,格式如下:<!ELEMENT
標記名稱
(#PCDATA|子標記1|子標記2…|子標記m)*>DTD中的元素聲明DTD的完整性一個完整的DTD,應滿足下面兩個條件:不能出現標記的嵌套標記的嵌套是指一個標記的子標記中又含有該標記的父標記,這種情況在DTD中是不允許出現的。例如:<!ELEMENT elem_a
(elem_b,elem_c)><!ELEMENT elem_b
(elem_a,elem_c)>這個DTD中的定義是錯誤的。必須確定每一個標記的約束條件對于XML文件中出現的每一個標記,在DTD中都應該有它所標記內容的約束。練習P39習題2:為XML文件編寫DTD文件DTD中的屬性聲明與標記的定義類似,屬性的定義也必須在DTD中聲明。DTD中屬性列表(ATTLIST)是用來約束標記的屬性的屬性的聲明以“<!ATTLIST”開始,用“>”結束,中間是標記名稱及其可以含有的屬性列表,其語法格式為:<!ATTLIST
標記名稱屬性名稱屬性類型屬性默認值情況屬性名稱屬性類型屬性默認值情況……>例如:<!ATTLIST
cartype
CDATA
“A6”color
CDATA
“red”max-speed
CDATA
“120”>也可以多次為一個標記定義屬性。例如:<!ATTLIST
car
type
CDATA
“A6”><!ATTLIST
car
color
CDATA
“red”><!ATTLIST
car
max-speed
CDATA
“120”>注意:XML文件中為每個標記添加的屬性,都應該在
DTD中聲明。即使是同名的屬性也要各自聲明。DTD中的屬性聲明屬性默認值情況屬性的默認值情況可以是:字符串、“#IMPLIED”、“#REQUIRED”或“#FIXED”和一個字符串,具體用法見下表:DTD中的屬性聲明屬性類型含義描述字符串XML標記必須含有該屬性,可以不明顯的添加,有默認值#IMPLIEDXML標記可以不含有該屬性,沒有默認值#REQUIREDXML標記必須含有該屬性,沒有默認值,必須顯式地添加#FIXED和一個字符串XML標記可以不含有該屬性,若添加了該屬性,其值是“#FIXED”后面的字符串,且不可改變。屬性類型含義描述CDATA文本數據枚舉類型把屬性的可能取值一一列舉,如:(male|female)ID屬性類型用于標識文檔中的標記,ID屬性的值必須是一個合法的XML名稱且在文檔中是唯一的IDREF/IDREFS類型IDREF類型用于引用同一文檔中另一個標記的ID值,IDREF屬性值必須是文檔中某個標記的ID屬性值。IDREFS是IDREF的復數形式,其值是若干個ID屬性值,之間用空格分開NMTOKEN/NMTOKENS類型NMTOKEN類型屬性值必須是有效的XML名稱,不能含有空格。
NMTOKENS是NMTOKEN的復數形式,可包含若干個有效XML名稱,可包含空格ENTITY/ENTITYS類型用于引用文檔中的不可解析的外部實體,其值必須是有效的XML名稱NOTATION類型用于將屬性的值和DTD中的<!NOTATION>聲明關聯屬性的類型屬性的類型有7種情況,各類型說明如下表:DTD中的屬性聲明<?xml
version="1.0"
encoding="UTF-8"?><!DOCTYPE
booklist[<!ELEMENT
booklist(book)*><!ELEMENT
book
(title,author,publisher,price)><!ELEMENT
title
(#PCDATA)><!ELEMENT
author
(name,address)><!ELEMENT
name
(#PCDATA)><!ELEMENT
address
(#PCDATA)><!ELEMENT
publisher
(#PCDATA)><!ELEMENT
price
(#PCDATA)><!ATTLIST
book
category
CDATA"計算機"><!ATTLIST
author
sex(男|女)"男"><!ATTLIST
book
id
ID
#REQUIRED>]>DTD中的屬性聲明<!DOCTYPE
borrowBook[<!ELEMENT
borrowBook
(book*,student)><!ELEMENT
book
(title,author,publisher,price)><!ELEMENT
title
(#PCDATA)><!ELEMENT
author
(name,address)><!ELEMENT
name
(#PCDATA)><!ELEMENT
address
(#PCDATA)><!ELEMENT
publisher
(#PCDATA)><!ELEMENT
price(#PCDATA)><!ATTLIST
book
id
ID
#REQUIRED><!ELEMENT
student
(SID,SName,Class,BorrowNumber)*><!ELEMENT
SID(#PCDATA)><!ELEMENT
SName
(#PCDATA)><!ELEMENT
Class
(#PCDATA)><!ELEMENT
BorrowNumber
(#PCDATA)><!ATTLIST
BorrowNumber
BID
IDREF#REQUIRED>]>DTD中的屬性聲明練習寫出以下products.xml文檔對應的DTD文件<?xml
version="1.0"
encoding="gb2312"
?><!DOCTYPE
products
SYSTEM
"products.dtd”><products><product
ID="P101"><name>XML解析器</name><unitPrice
type=“$”>100</
unitPrice
></product><product
ID="P102"><name>XML編輯器</name><unitPrice
>50</
unitPrice
></product></products>DTD中的實體DTD中的實體分為一般實體和參數實體一般實體簡稱為實體,指可以被XML文件在標記內容中通過實體引用使用的實體。參數實體專門用在DTD中。按實體內容的位置,分為內部實體和外部實體按是否可解析,分為可解析實體和不可解析實體解析器在解析XML文件數據時,會將實體應用部分替換為預定義實體的內容。內部實體與外部實體內部實體是實體內容包含在該DTD文件中的實體。定義內部實體的格式如下:<!ENTITY
實體名字“實體內容”>例如:<!ENTITY
PI
“3.14159”>外部實體是實體內容是該DTD文件以外的其他文件的實體。定義內部實體的格式如下:<!ENTITY
實體名字
SYSTEM “實體的URI”><!ENTITY
實體名字
PUBLIC “實體的URI”>例如:<!ENTITY
Note
SYSTEM
“a.txt”>DTD中的實體內部實體與外部實體實體引用:在XML文件中實體引用的格式為:&實體名稱;例如:圓周率的值是:&PI;解析器在解析時,就會將“&PI;”替換為
“3.14159”。注意:實體引用時,“&”、“實體名稱”和“;”之間都不能有空格。DTD中的實體文件03.txt的內容:這是外部實體,來自03.txt文件的內容<?xml
version="1.0"
encoding="UTF-8"
?><!DOCTYPE
實體引用[<!ENTITY
inen"我是內部實體"><!ENTITYouten
SYSTEM
"03.txt"><!ELEMENT
ent
(in,out)><!ELEMENT
in
(#PCDATA)><!ELEMENT
out
(#PCDATA)>]><ent><in>&inen;</in><out>&outen;</out></ent>文件test3.xml的內容:DTD中的實體可解析實體與不可解析實體可解析的實體是指實體的內容是能被解析器解析的數據。例如:“3.14159”
、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 液壓與液力技術在健身器材中的應用考核試卷
- 社交心理學在決策制定中的應用考核試卷
- 電池充放電特性與循環壽命考核試卷
- 紡織原料與絹紡質量控制考核試卷
- 漁業機械人機工程學應用考核試卷
- 纖維素纖維在鞋類產品抗滑性與耐磨性改進考核試卷
- 礦山機械故障案例分析與預防考核試卷
- 天津藝術職業學院《細胞與組織工程》2023-2024學年第二學期期末試卷
- 山東省泰安市第一中學2025年高中畢業班第二次統測物理試題含解析
- 山東省棗莊樹人中學2024-2025學年初三化學試題5月模擬試題含解析
- 吉林銀行總行社會招聘筆試真題2023
- 2024年現場綜合化維護工程師三級認證考試試題及答案
- 西藏拉薩市2025屆高三理綜下學期一模試題
- 助貸機構及人員從業禁止
- DL-T+748.8-2021火力發電廠鍋爐機組檢修導則 第8部分:空氣預熱器檢修
- 《無人機測繪技能訓練模塊》課件-無人機航測影像獲取外業
- CJJT135-2009 透水水泥混凝土路面技術規程
- 營造和諧人際交往含內容模板
- SH/T 3224-2024 石油化工雨水監控及事故排水儲存設施設計規范(正式版)
- 小學六年級期中考試家長會
- 質譜法在食品樣本農藥殘留分析中的應用進展
評論
0/150
提交評論