?? 0303-0100.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0303-0100 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學(xué)進(jìn)階 - 3.3.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=""><!-- 以下為主體內(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 width=50 rowSpan=2></TD>
<TD vAlign=center width=489>
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=47 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="489" ><!-- 正文內(nèi)容 -->
<DIV class=pt10><B>3.3.1 融眾多元素命名于一體</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>學(xué)了DTD又學(xué)Schema,忙得大家不亦樂乎。但回過頭來看看本章的標(biāo)題,或許讀者要奇怪了,“海納百川”,可“?!敝傅氖鞘裁??“川”又是什么?它們和DTD與Schema有關(guān)系嗎?現(xiàn)在我們就來詳詳細(xì)細(xì)地討論我們的“海”與“川”,“?!本褪荴ML文件,“川”就是由DTD或者Schema進(jìn)行的元素類型聲明,而“海納百川”便是說我們在同一個XML文件中可以使用多個DTD或Schema聲明的元素類型。</P>
<P>前面我們講到,XML較之HTML最根本的差別在于XML是定義置標(biāo)語言的元語言,而HTML僅僅是由SGML元置標(biāo)語言定義的一個實例語言。利用XML元置標(biāo)語言,定義各種各樣的XML實例的活動是相當(dāng)開放的。針對不同的應(yīng)用方向,每設(shè)計一個XML的DTD,一種新的置標(biāo)語言便隨之誕生。在各種各樣XML實例置標(biāo)語言如雨后春筍般不斷涌現(xiàn)的過程中,將會產(chǎn)生這樣一種應(yīng)用需求,即在一個XML文檔中,包含由多個DTD描述的元素。這個想法顯然是達(dá)到“物盡其用”的一個好辦法,它幫助我們最大程度地利用了現(xiàn)有的資源,正所謂“海納百川,有容乃大”。</P>
<P>但是,這條錦囊妙計也會帶來一定的問題。仍拿我們前面使用過的"聯(lián)系人列表"的例子來說,現(xiàn)在我們需要知道每個聯(lián)系人的直接上級,以便業(yè)務(wù)的順利開展。于是,DTD中要為“聯(lián)系人”元素增加一個子元素“直接上級”。修改后的DTD文件命名為“聯(lián)系人列表.dtd”,源碼如下:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version="1.0"
encoding="GB2312"?><BR><BR><!ELEMENT 聯(lián)系人列表
(聯(lián)系人)*><BR><!ELEMENT 聯(lián)系人
(姓名,ID,公司,EMAIL,電話,地址,直接上級)><BR><!ELEMENT 地址
(街道,城市,省份)><BR><!ELEMENT 姓名 (#PCDATA)><BR><!ELEMENT ID
(#PCDATA)><BR><!ELEMENT 公司 (#PCDATA)><BR><!ELEMENT EMAIL
(#PCDATA)><BR><!ELEMENT 電話 (#PCDATA)><BR><!ELEMENT 直接上級
ANY><BR><!ELEMENT 街道 (#PCDATA)><BR><!ELEMENT 城市
(#PCDATA)><BR><!ELEMENT 省份
(#PCDATA)></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>至于"直接上級"的內(nèi)容,也就是這個元素的子元素,來自于另一個DTD聲明,即"企業(yè)經(jīng)理"的DTD聲明。這個聲明“企業(yè)經(jīng)理.dtd”的文件為:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><?xml version="1.0"
encoding="GB2312"?><BR><BR><!ELEMENT 企業(yè)經(jīng)理
(姓名,電話)><BR><!ELEMENT 姓名 (#PCDATA)><BR><!ELEMENT 電話
(秘書電話,手機(jī))><BR><!ELEMENT 秘書電話 (#PCDATA)><BR><!ELEMENT 手機(jī)
(#PCDATA)></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>這樣一來,我們的"聯(lián)系人列表"的例子可能會寫成下面的樣子:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><聯(lián)系人列表><BR>
<聯(lián)系人><BR> <姓名>張三</姓名><BR>
<ID>001</ID><BR>
<公司>A公司</公司><BR>
<EMAIL>zhang@aaa.com</EMAIL><BR>
<電話>(010)62345678</電話><BR>
<地址><BR>
<街道>五街1234號</街道><BR>
<城市>北京市</城市><BR>
<省份>北京</省份><BR>
</地址><BR> <直接上級><BR>
<姓名>王五</姓名><BR>
<電話><BR>
<秘書電話>(010)62345678</秘書電話><BR>
<手機(jī)>13601234567</手機(jī)><BR>
</電話><BR> </直接上級><BR>
</聯(lián)系人><BR></聯(lián)系人列表></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>在這個例子中,“聯(lián)系人”中有“姓名”和“電話”元素,而“直接上級”中也有“姓名”和“電話”元素。可是此“姓名”非彼“姓名”,此“電話”也非彼“電話”。尤其是“電話”元素,它們在語法語義上都是完全不同的。“聯(lián)系人”元素中的“電話”子元素就是一個表示他電話號碼的字符串,以方便與其聯(lián)系;可是他的上級官職顯要,電話的信息也比較多,包括秘書的電話和他的手機(jī)。對于XML文件的編寫者和讀者來說,憑借上下文的提示,對于這個差別尚能理解;但計算機(jī)可沒有人那么聰明,面對兩個“姓名”元素,它不知道哪個是“聯(lián)系人列表”的DTD中定義的“姓名”,哪個又是“企業(yè)經(jīng)理”的DTD中定義的“姓名”;它更會奇怪:“電話”怎么會搖身一變,成了“秘書電話”和“手機(jī)”的父元素?在這種情況下,我們稱兩個不同的元素在名稱上發(fā)生了沖突。</P>
<P>如果不解決這種元素名稱上的沖突問題,一個XML文檔包含多個DTD中定義的元素這一天才構(gòu)想就不能實現(xiàn)。為了解決這個問題,W3C的XML小組制定了被稱為命名空間(NameSpace)的標(biāo)準(zhǔn)。W3C組織于1998年2月提出命名空間標(biāo)準(zhǔn)的第一個草案,到1999年1月14日正式發(fā)布為推薦標(biāo)準(zhǔn)。本章中介紹的命名空間,依照的就是這個推薦標(biāo)準(zhǔn)。</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 + -