?? 0302-0203.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0302-0203 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學(xué)進(jìn)階 - 3.2.2.3 用Schema定義元素及其內(nèi)容</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=40 rowSpan=2></TD>
<TD vAlign=center >
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=40 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD ><!-- 正文內(nèi)容 -->
<DIV class=pt10><B>3.2.2.3 用Schema定義元素及其內(nèi)容</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>在講述Schema中和ETD定義相對應(yīng)的種種定義方法之前,我們先來看看所涉及的三個Schema元素:ElementType、element、group。
<UL>
<LI><STRONG>ElementType元素</STRONG> </LI></UL>
<P>在Schema文檔中使用<STRONG>ElementType</STRONG>來聲明XML文件中會出現(xiàn)的元素,ElementType的語法表達(dá)如下:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><ElementType <BR> name="元素名"
<BR> content="{ empty | textOnly | eltOnly | mixed
}" <BR> dt:type="元素類型" <BR>
order="{ one | seq | many }" <BR> model="{ open |
closed }" <BR>></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>在ElementType的幾個屬性中,<STRONG>name</STRONG>的含義不言而喻,是所聲明元素的名稱,它是不可缺少的。<STRONG>content</STRONG>是ElementType的一個重要屬性,它指明ElementType所聲明的元素是否為空、是否包含文本、是否包含子元素、還是既包含文本又包含子元素。<STRONG>dt:type</STRONG>指定該元素的數(shù)據(jù)類型,我們會在后面的小節(jié)中詳細(xì)討論。<STRONG>order</STRONG>指定該元素的子元素的排列順序規(guī)則。最后,<STRONG>model</STRONG>指定該元素是否可以包含未在本Schema中定義的元素和屬性,它主要用于其它Schema的引入,也就是其它“命名空間”的引入。“命名空間”的概念大家可能還比較生疏,這是我們下一節(jié)要講的內(nèi)容,現(xiàn)在你只要了解,在一個XML文件中能夠同時使用幾個不同的DTD或Schema定義。下表列出了model可能的取值。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD align=middle width="20%"><STRONG>取 值</STRONG></TD>
<TD width="50%">
<P align=center><STRONG>釋 意</STRONG></P></TD></TR>
<TR>
<TD align=middle width="20%">open</TD>
<TD width="50%">表明該元素可以包含其它未在XML Schema中定義的元素和屬性</TD></TR>
<TR>
<TD align=middle width="20%">closed</TD>
<TD width="50%">表明該元素只能包含在本XML
Schema中定義過的元素和屬性</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>缺省狀態(tài)下,XML Schema的model取值"open",也就是說,該元素可以包含其它未在XML
Schema中定義的元素和屬性。但是,這并不意味著任何元素和屬性都可在Schema中出現(xiàn),允許出現(xiàn)的前提是這些"異類"元素和屬性必須在單獨(dú)的XML
Schema中加以定義,并且必須在引用的它們的元素中以命名空間形式指定其出處。下面給出一個具體的示例。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD
width="100%"><聯(lián)系人><BR>
<姓名>張三</姓名><BR>
<ID>001</ID><BR>
<公司>A公司</公司><BR>
<電話>(010)62345678</電話><BR>
<傳真
xmlns="fax.xml">(010)62345678</傳真><BR>
<地址><BR>
<街道>五街1234號</街道><BR>
<城市>北京市</城市><BR>
<省份>北京</省份><BR>
<ZIP>100001</ZIP><BR>
</地址><BR></聯(lián)系人></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>本來fclmlschema.xml中并沒有定義"傳真"元素,但如果將"聯(lián)系人"元素的的"model"屬性設(shè)為"open",就可以在"聯(lián)系人"中引用它,當(dāng)然還必須指定"傳真"元素所在的Schema文件"fax.xml"。"open"體現(xiàn)了XML
Schema的可擴(kuò)展性,而這是DTD所無法比擬的。
<UL>
<LI><STRONG>element元素</STRONG> </LI></UL>
<P>ElementType只是起到聲明元素的作用,至于元素的內(nèi)容究竟是什么,則要靠它的子元素<STRONG>element</STRONG>來說明。element的語法表達(dá)如下:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><element <BR> type="元素類型"
<BR> [minOccurs="{ 0 | 1 }"]
<BR> [maxOccurs="{ 1 | * }"]
<BR>></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>element實(shí)際上是對該Schema中ElementType聲明的引用,而具體引用什么元素類型,就要靠<STRONG>type</STRONG>屬性指定了。type屬性不可缺少,并且為了保證type指定的是已經(jīng)聲明過的元素,要求它的取值必須同某個ElementType中的name屬性嚴(yán)格一致。至于其它兩個屬性倒是可有可無。<STRONG>minOccurs</STRONG>指定該元素在其父元素中出現(xiàn)的最小次數(shù),缺省值為1,表明該元素至少出現(xiàn)一次;也可以取值為0,表明該元素是可選的,可以不出現(xiàn)。<STRONG>maxOccurs</STRONG>則指定了該元素出現(xiàn)的最大次數(shù),缺省值同樣為1,表明該元素至多出現(xiàn)一次;也可取值為“*”,表明該元素在XML實(shí)例文檔中出現(xiàn)次數(shù)不受限制。
<UL>
<LI><STRONG>group元素</STRONG> </LI></UL>
<P>DTD中有成組的概念,相應(yīng)的,Schema中也有“<STRONG>group</STRONG>”元素。它的語法表達(dá)類似element元素:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><group<BR> order="{one | seq |
many}" <BR> [minOccurs="{ 0 | 1 }"]
<BR> [maxOccurs="{ 1 | * }"]
<BR>></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>和DTD的規(guī)定相同,組里的內(nèi)容可以是元素,也可以是另一個子組。屬性<STRONG>order</STRONG>指定該組中的元素或子組的順序,<STRONG>minOccurs</STRONG>和<STRONG>maxOccurs</STRONG>分別指定了該組在其父元素中出現(xiàn)的最小次數(shù)和最大次數(shù)。</P>
<P>下面,我們就開始對DTD和Schema對相同內(nèi)容的不同定義方式進(jìn)行一次大比較!</P>
<DIV align=center>
<CENTER>
<TABLE height=260 width="90%" border=1>
<TBODY>
<TR>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -