?? 0301-0201.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-0201 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學進階 - 3.1.2.1 元素類型聲明</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=""><!-- 以下為主體內容 -->
<div align="center">
<center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD width=45 rowSpan=2></TD>
<TD vAlign=center width=502><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=39 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="502" ><!-- 正文內容 -->
<DIV class=pt10><B>3.1.2.1 元素類型聲明</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>前面我們講了很多關于DTD的分類,以及如何使用不同類型DTD的方法。但是,如何最大限度地發揮DTD的作用,主要取決于如何合理地定義DTD。從這一節開始,我們就來詳細地講述這個問題。</P>
<P>一個DTD不僅要告訴語法分析器它所關聯的XML文件的根元素是什么,而且還要告訴語法分析器文件的內容和結構,說清文件結構中的每一個細節。為了定義這些細節,我們必須展開DTD中元素說明部分,使用元素類型聲明(ETD)來聲明所有有效的文件元素。</P>
<P>ETD不但說明了每個文件中可能存在的元素,給出了元素的名字,而且給出了元素的具體類型。一個XML元素可以為空,也可以是一段純文本,還可以有若干個子元素,而這些子元素同時又可以有它們的子元素。DTD正是通過元素之間的父子關系,描述了整個文件的結構關系。</P>
<P>ETD應該采用如下的結構:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><!ELEMENT 元素名
元素內容描述></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>因此,在前面的例子里,可以在文件序言中通過如下方式定義“聯系人列表”這個元素:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "yes"?><BR><!DOCTYPE 聯系人列表[<BR>
<!ELEMENT 聯系人列表 <STRONG><FONT
color=#ff0000>ANY</FONT></STRONG>><BR>
]><BR><BR><聯系人列表><BR>...<BR></聯系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>這個DTD定義了一個XML文件,它只有一個根元素,名為“聯系人列表”,這個元素可以有任何類型的子元素,也可以是純文本,還可以為空。</P>
<P>但是需要注意,盡管元素“聯系人列表”被定義為“可以”包含其它元素,但實際上這個DTD除了“聯系人列表”元素本身外沒有定義任何其它元素,所以也就沒有其它元素可以用作“聯系人列表”的子元素。“有效的”XML文件規定文件中所使用的任何元素都必須在DTD中給出定義。因此,下面的XML文件,盡管是“形式良好的”,但并不是“有效的”,仍不能被語法解析器所接受。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "yes"?><BR><!DOCTYPE 聯系人列表[<BR>
<!ELEMENT 聯系人列表 <STRONG><FONT
color=#ff0000>ANY</FONT></STRONG>><BR>
]><BR><BR><聯系人列表><BR>
<聯系人><BR>
<姓名>張三</姓名><BR>
</聯系人><BR></聯系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><BR>不過需要區分的是,在“<STRONG><FONT
color=#ff0000>ANY</FONT></STRONG>”定義下使用任何純文本都是無須另加說明的,這一點與元素不同。故而,在相同的DTD定義下,下面一段XML文件則是合法的:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "yes"?><BR><!DOCTYPE 聯系人列表[<BR>
<!ELEMENT 聯系人列表 <STRONG><FONT
color=#ff0000>ANY</FONT></STRONG>><BR>
]><BR><BR><聯系人列表><BR>純文本信息說明聯系人信息<BR></聯系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><BR>為了使元素“聯系人列表”中還可以包含其它元素,從而使前面的那個文件是“有效的”,我們還需要定義元素“聯系人”和“姓名”。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version = "1.0" encoding="GB2312"
standalone = "yes"?><BR><!DOCTYPE 聯系人列表[<BR>
<!ELEMENT 聯系人列表 <STRONG><FONT
color=#ff0000>ANY</FONT></STRONG>><BR>
<!ELEMENT 聯系人(姓名)><BR> <!ELEMENT
姓名(#PCDATA)> <BR>
]><BR><BR><聯系人列表><BR>
<聯系人><BR>
<姓名>張三</姓名><BR>
</聯系人><BR></聯系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>好了,現在我們已經定義了一個XML文件,它的根元素名為“聯系人列表”。“聯系人列表”中可以包含任何純文本數據,也可以含有子元素(這即是ANY的含義)。根據后面的定義,我們知道,“聯系人列表”中可以包含子元素“聯系人”,也可以直接包含子元素“姓名”;“聯系人”元素又可以包含自己的子元素,名為“姓名”;而“姓名”則只能包含純文本數據(即(#PCDATA))。</P>
<P><STRONG>注意:</STRONG>
<OL>
<LI>除了根元素外,在定義其它元素時使用關鍵字ANY都是不好的習慣。一般來說,在寫一個XML文件時需要嚴格遵循DTD的規則,這時,一個定義明確的DTD,雖然表面上似乎充滿了條條框框,但實際上會使你在書寫XML文件時有規可循,反而方便了你的工作和語法分析器的工作。相反,一個在元素定義中充滿了ANY的DTD,反而可能會搞得你不知所措,一頭霧水。
<LI>在定義元素時,ETD的順序是無關緊要的。因此<BR> <!ELEMENT
姓名(#PCDATA)> <BR> <!ELEMENT
聯系人列表 ANY><BR> <!ELEMENT
聯系人(姓名)><BR>和<BR> <!ELEMENT 聯系人列表
ANY><BR> <!ELEMENT
聯系人(姓名)><BR> <!ELEMENT
姓名(#PCDATA)> <BR>所定義的文件結構是完全相同的。
<LI>還有一點要注意,不能對不同的元素使用相同的元素名,即便這些元素的內容、包含的子元素不同也不行,因為它只會引起文件各個元素的混淆,使文件的可讀性大打折扣。例如:<BR>
<!ELEMENT 聯系人列表 ANY><BR> <!ELEMENT
聯系人(姓名)><BR> <!ELEMENT
聯系人(EMAIL)><BR> <!ELEMENT
姓名(#PCDATA)><BR> <!ELEMENT
EMAIL(#PCDATA)><BR>在這個例子中,對“聯系人”的重復定義,會引起錯誤。
<LI>最后再次強調一下元素的命名。元素名的第一個字母必須是字母、或下劃線(_)、或冒號(:),后跟字母、數字、句號(.)、冒號、下劃線、連結號(-)的組合,并且不能包含空白符,不能以“xml”開頭。另外,盡管元素的第一個字母使用冒號是合法的,但最好避免這樣做,因為它會引起混淆。再有需要注意的是,盡管XML1.0標準允許使用任何長度的文件名,但是實際的XML處理器常常會限制標記名的長度。
</LI></OL>
<P>在這一節里,我們用到了兩個關鍵字,ANY和#PCDATA,它們的含義都很直接。同樣,把“姓名”定義為“聯系人”的子元素也很好理解。但實際上,正如我們前面講到的,DTD允許你靈活地定義非常復雜的元素,所以ETD的定義還是有很多花樣的。下面我們就來學習一些復雜的元素定義方式。<BR><BR>
<BR><BR></P></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -