XML作為一門標記語言,它就需要一種文檔(即文檔類型定義DTD)來定義,DTD可以看作是一類XML文檔的模板。它定義了文檔的邏輯結(jié)構(gòu),規(guī)定了XML文檔中所使用的元素,實體,元素的屬性,元素與實體之間的關系。它使得數(shù)據(jù)交流與共享得以正常進行,驗證了數(shù)據(jù)的有效性。DTD可以是一個完全獨立的文件,也可以在XML文件中直接設定。所以,DTD分為外部DTD(在XML文件中調(diào)用另外已經(jīng)編輯好的DTD)和內(nèi)部DTD(在XML文件中直接設定DTD)兩種。在一些有相互業(yè)務往來的公司,如果他們使用的電子文檔是XML文檔,那么我們就可以定用一個獨立的DTD文檔。每次交換和定義時都引用它來驗證結(jié)構(gòu)完整性和語法的合法性。比如以下一個XML文檔:
它的一個DTD文檔如下:
1
<?xml version="1.0" encoding="GB2312" standalone="yes"?>
2
<!DOCTYPE學生名單[
3
<!ELMENT 學號 (#PCDATA)>
4
<!ELMENT 姓名 (#PCDATA)>
5
<!ELMENT 班級 (#PCDATA)>
6
<!ELMENT 學生 (學號,姓名,班級)>
7
<!ELMENT 學生名單 (學生,學生)>
8

]>
9

10

11

2為DTD定義開始標記,學生名單為其根元素,3到7都是元素定義 ,8是結(jié)束標記。下面將介紹一下元素聲明的語法及注意事項。
元素聲明
格式:<!ELMENT 元素名稱 元素的內(nèi)容格式的定義>
(1)基本元素聲明:<!ELMENT 學號 (#PCDATA)> 元素名稱后直接跟的是數(shù)據(jù)類型則為基本元素。
(2)復合元素聲明:<!ELMENT 學生 (學號,姓名,班級)> 學生元素是復合元素,它包含學號,姓名,班級三個基本元素。其實根元素是復合元素的一個特例,所有的元素都直接或間接地包含在根元素中。
元素出現(xiàn)次數(shù)的控制
加"?"表示些元素可出現(xiàn)0次或1次;加"*"表示可出現(xiàn)任意次;加"+"表示至少要出現(xiàn)一次。如:
<!ELMENT 學生 (學號?,姓名,班級,愛好*)>則表示一個學生只有唯一的學號,或者還未分配學號,即學號元素出現(xiàn)0次或1次,而愛好可以沒有,也可以有好幾方面的,所以用*(任意次)限定。
選擇性元素 用"|"限定,如 <!ELMENT 學生(姓名,性別,(優(yōu)秀|良好|中等))>
屬性聲明
格式:<!ATTLIST Eltment_name Attribute_name Type [Key
word] [Default_value]>
!ATTLIST 為定義屬性的指令,后面是元素的名稱,屬性名稱,屬性值類型及默認值的關鍵字及默認值。
如一個學生有性別及班級兩個屬性,可這樣定義:<!ATTLIST 學生 性別 CDATA "女" 班級 CDATA "計算機03.2班">
必需賦值的屬性:加REQUIRED關鍵字,如:<!ATTLIST 學生 性別 CDATA #REQUIRED "女" 班級 CDATA "計算機03.2班"> 表示必需給出學生的性別值。可有可無的屬性則用IMPLIED關鍵字,固定取值的屬性用FIXED關鍵字。
屬性的類型:在XML中共有10種屬性類型,如下表:
類型 |
含義 |
CDATA |
字符數(shù)據(jù) |
Enumerated |
可能的取值的列表 |
ID |
唯一的數(shù)字 |
IDREF |
ID類型屬性的值 |
IDREFS |
由空格分開的若干個ID |
ENTITY |
實體 |
ENTITYS |
若干個實體 |
NMTOKEN |
XML名稱 |
NOTATION |
DTD中聲明的注釋名 |
NMTOKENS |
多個XML名稱 |