?? 0301-0101.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0301-0101 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學(xué)進階 - 3.1.1.1 將DTD引入“有效的”XML文件中</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt9 {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt10 {
FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋體"
}
.TempOutline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.TempOutline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage0 {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage111 {
FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
</STYLE>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0
onload=""><!-- 以下為主體內(nèi)容 -->
<div align="center">
<center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD rowSpan=2 width="52"></TD>
<TD vAlign=center width="647"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=49 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="647" ><!-- 正文內(nèi)容 -->
<DIV class=pt10><B>3.1.1.1 將DTD引入“有效的”XML文件中</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>在上一章中,我們詳細介紹了一個“形式良好的”XML文件應(yīng)該滿足哪些要求。“形式良好”是對XML文件的基本要求,它使得XML文件結(jié)構(gòu)清晰、完整,便于處理程序?qū)ζ溥M行解析,進一步可以簡化處理程序的編寫工作,并加快瀏覽的速度、減少瀏覽所需占用的內(nèi)存空間。正所謂“沒有規(guī)矩,不成方圓”。</P>
<P>然而,即便你已經(jīng)可以保證寫的XML文件是一個“形式良好的”XML文件了,它仍然未必能夠體現(xiàn)XML的精髓。XML的精髓是什么呢?對,就是我們前面講到的基于信息描述的、能夠體現(xiàn)數(shù)據(jù)信息之間邏輯關(guān)系的、可以確保文件的易讀性和易搜索性的自定義標(biāo)記!從這一章中你將看到,使得你的XML文件遵循所謂“形式良好”要求的種種語法規(guī)則,這只是“萬里長征走了第一步”。一個完全意義上的XML文件不僅應(yīng)該是“形式良好的”,而且還應(yīng)該是使用了這些自定義標(biāo)記的“有效”的XML文件。</P>
<P>一個“有效的”文件首先應(yīng)該是“形式良好”的。但這還遠遠不夠,它還要往前更進一步。一個XML文件必須遵守文件類型描述DTD(Document
Type
Definition)中定義的種種規(guī)定。DTD實際上是“元標(biāo)記”這個概念的產(chǎn)物,它描述了一個置標(biāo)語言的語法和詞匯表,也就是定義了文件的整體結(jié)構(gòu)以及文件的語法。簡而言之,DTD規(guī)定了一個語法分析器為了解釋一個“有效的”XML文件所需要知道的所有規(guī)則的細節(jié)。</P>
<P>這個“規(guī)則”可以非常簡單,僅僅列出所有有效的元素,例如元素、標(biāo)記、屬性、實體;也可以非常復(fù)雜,不但列出這些元素,還指出這些元素之間的內(nèi)在聯(lián)系,例如說明元素X元素中必須還包含元素Y或元素Z,但不能同時包含兩個元素。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" bgColor=#ffffc0 border=0>
<TBODY>
<TR>
<TD width="100%">“我們前面強調(diào)了XML是大小寫敏感的,這對于HTML的老手可能有點麻煩。例如,XML的處理指示
<P align=center><?xml version="1.0" ... ?></P>
<P
align=left>中所有單詞必須都是小寫的;可是所有DTD中的關(guān)鍵字都必須是大寫的,例如ELEMENT、ATTLIST、#REQUIRED、#IMPLIED、NMTOKEN、ID等等。幸運的是,你自己的元素和屬性的大小寫可以由你任意指定,但一旦指定了,你必須從一而終,在整個文件中使用相同的大小寫。例如,如果你給一個元素起名叫“BOOKS”,那么這個元素和“Books”并不相同。</P>
<P align=right>——Ken Sall”</P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>一般習(xí)慣里,除非使用中文標(biāo)記,否則我們或者全部都使用大寫字母,或者象在VC中常用的那樣,元素名字的第一個字母是大寫,后面每個單詞的第一個字母為大寫,如BookList;屬性字母的第一個字母為小寫,但后面每個單詞的第一個字母仍都采用大寫,如listAuthor。請看下面例子:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD align=middle width="100%">
<P align=left><!ELEMENT BookList (Book)+ ><BR><!ATTLIST
BookList<BR> genre NMTOKEN
#IMPLIED<BR> listAuthor
NMTOKEN #REQUIRED<BR>
lastUpdated NMTOKEN #REQUIRED
></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><BR>講到這里,不知各位讀者是否已經(jīng)能夠區(qū)分“形式良好的”XML文件和“有效的”XML文件。如果大家對采用“有效的”XML文件的必要性還有所懷疑的話,讓我們一起考慮一下下面這段中文:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD align=middle width="100%">
<P align=left>棕色 撲向<BR>那只 一只 狐貍 <BR>動作敏捷的 狗 。<BR>懶惰的
</P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>正如你所見,所有的單詞和標(biāo)點都符合中文的詞法,甚至說都是有明確語意的詞匯,它們代表了“形式良好的”元素。但是,你明白我要表達的意思嗎?在這種混亂的順序之下,可能那些明確的單詞和標(biāo)點對你也失去了應(yīng)有的意義。連人都難于理解一段“形式良好的”話,更不要說什么計算機了。</P>
<P>為了使這句話成為能讀得懂的話,上面那些詞匯的組織必須遵守中文句子的語法規(guī)定,譬如符合主、謂、賓的順序,修飾語放在中心詞之前等等。修改一下,上面的句子應(yīng)該成為下面的形式:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD align=middle width="100%">
<P
align=left>一只動作敏捷的棕色狐貍撲向一只懶惰的狗。</P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>好了,現(xiàn)在知道這句話想表達什么意思了吧?</P>
<P>在XML所描述的置標(biāo)語言中,DTD便提供了語法規(guī)定,以便給各個語言要素賦予一定的順序。為了說明特定的語法規(guī)則,DTD采用了一系列正則式,語法分析器將這些正則式與XML文件內(nèi)部的數(shù)據(jù)模式相匹配,從而判別一個文件是否是有效的。匹配被嚴格執(zhí)行,因此,如果XML文件中有任何信息不符合DTD的規(guī)定,都不會通過。</P>
<P>還記得我們曾說過XML脫胎于SGML文件嗎?其實,一個“有效的”XML文件就是一個“形式良好的”SGML文件,也就是說,符合DTD中定義的語法是SGML文件的基本要求。從這個意義上說,XML把合法文件的范圍擴大了,既包括“有效的”XML,也可包括“形式良好的”XML。</P>
<P>好了,相信大家現(xiàn)在已經(jīng)明白什么叫DTD了。下面我們就開始詳細學(xué)習(xí)XML中這個不可或缺、大顯身手的部分。</P></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -