?? 0302-0204.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-0204 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學進階 - 3.2.2.4 用Schema定義元素屬性</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=46 rowSpan=2></TD>
<TD vAlign=center width=544>
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=41 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="544"><!-- 正文內容 -->
<DIV class=pt10><B>3.2.2.4 用Schema定義元素屬性</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>Schema中用來定義屬性的元素有兩個,AttributeType元素是聲明屬性的,attribute元素則是說明一個元素中究竟包含那些屬性。
<UL>
<LI><STRONG>AttributeType元素</STRONG> </LI></UL>
<P>AttributeType元素也是Schema中的重要元素之一,用于定義該Schema文檔中出現的屬性類型。AttributeType的語法表達如下:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><AttributeType <BR> name="屬性名" <BR>
dt:type="屬性類型" <BR> dt:values="枚舉值列表" <BR> default="缺省值"
<BR> required="{yes | no}"
<BR>></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>下面我們來一個一個看看對于這些屬性的規定:
<OL>
<LI><STRONG>name<BR></STRONG>name不言而喻,自然是所聲明的屬性類型的名稱。注意,該屬性是必須的。
<LI><STRONG>dt:type</STRONG><BR>dt:type指定所聲明屬性的數據類型,它除了支持DTD中包含的全部十大數據類型外,還支持一些擴展屬性,在下一小節會詳細講述。Schema中的十個基本屬性與DTD中屬性的對應關系請見下表:<BR><BR>
<DIV align=center>
<CENTER>
<TABLE width="60%" border=1>
<TBODY>
<TR>
<TH align=middle width="50%">Schema中基本類型</TH>
<TH align=middle width="50%">DTD中數據類型</TH></TR>
<TR>
<TD align=middle width="50%">string</TD>
<TD align=middle width="50%">#PCDATA</TD></TR>
<TR>
<TD align=middle width="50%">enumeration</TD>
<TD align=middle width="50%">ENUMERATED</TD></TR>
<TR>
<TD align=middle width="50%">id</TD>
<TD align=middle width="50%">ID</TD></TR>
<TR>
<TD align=middle width="50%">idref</TD>
<TD align=middle width="50%">IDREF</TD></TR>
<TR>
<TD align=middle width="50%">idrefs</TD>
<TD align=middle width="50%">IDREFS</TD></TR>
<TR>
<TD align=middle width="50%">nmtoken</TD>
<TD align=middle width="50%">NMTOKEN</TD></TR>
<TR>
<TD align=middle width="50%">nmtokens</TD>
<TD align=middle width="50%">NMTOKENS</TD></TR>
<TR>
<TD align=middle width="50%">entity</TD>
<TD align=middle width="50%">ENTITY</TD></TR>
<TR>
<TD align=middle width="50%">entities</TD>
<TD align=middle width="50%">EMTITIES</TD></TR>
<TR>
<TD align=middle width="50%">notation</TD>
<TD align=middle
width="50%">NOTATION</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>注意,當dt:type取值為"enumeration"時,后面的dt:value必須列出所有可能的取值。</P>
<LI><STRONG>dt:value</STRONG><BR>dt:value只有當dt:type取值"enumeration"時才有效,此時,dt:value需列出所有可能的取值。
<LI><STRONG>default</STRONG><BR>default指定該屬性類型的缺省取值。default取值必須是有效的,例如,當dt:type取值"enumeration"時,default的取值必須來自dt:value所列出的值。
<LI><STRONG>required</STRONG><BR>required指定該屬性對于引用它的元素是否是必須的。取值yes表明是必須的,取值no則表明并非必須。
</LI></OL>
<P>我想大家一定還記得前面講DTD時曾根據關于屬性缺省值的規定將屬性分為四類,在Schema中,是通過default屬性和required屬性來作這些規定的。看了下面這個列表就一目了然了。</P>
<DIV align=center>
<CENTER>
<TABLE height=493 width="90%" border=1>
<TBODY>
<TR>
<TH align=middle width="25%" height=32>屬性類型</TH>
<TH width="25%" height=32>DTD定義方法</TH>
<TH width="25%" height=32>Schema定義方法</TH>
<TH width="25%" height=32>合法實例</TH></TR>
<TR>
<TD align=middle width="25%" height=96><STRONG>必須賦值的屬性</STRONG></TD>
<TD width="25%" height=96><!ATTLIST 天氣 狀況 (晴 | 陰 | 雨 | 雪)
#<STRONG>REQUIRED</STRONG>></TD>
<TD width="25%" height=96><AttributeType <BR>
name="狀況"<BR> dt:type="enumeration" <BR> dt:value="晴 陰 雨
雪" <BR> required="yes" <BR>/></TD>
<TD width="25%" height=96><天氣 狀況="晴"/></TD></TR>
<TR>
<TD align=middle width="25%" height=99
rowSpan=2><STRONG>屬性值可有可無的屬性</STRONG></TD>
<TD width="25%" height=99 rowSpan=2><!ATTLIST 天氣 狀況 (晴 | 陰 | 雨 |
雪) #<STRONG>IMPLIED</STRONG>></TD>
<TD width="25%" height=99 rowSpan=2><AttributeType <BR>
name="狀況"<BR> dt:type="enumeration" <BR> dt:value="晴 陰 雨
雪" <BR> required="no" <BR>/></TD>
<TD width="25%" height=46><天氣 狀況="晴"/></TD></TR>
<TR>
<TD width="25%" height=47><天氣/></TD></TR>
<TR>
<TD align=middle width="25%" height=118
rowSpan=2><STRONG>定義缺省值的屬性</STRONG></TD>
<TD width="25%" height=118 rowSpan=2><!ATTLIST 天氣 狀況 (晴 | 陰 | 雨 |
雪) "晴"></TD>
<TD width="25%" height=118 rowSpan=2><AttributeType <BR>
name="狀況"<BR> dt:type="enumeration" <BR> dt:value="晴 陰 雨
雪" <BR> default="晴"<BR> required="yes"
<BR>/></TD>
<TD width="25%" height=56><天氣 狀況="陰"/></TD></TR>
<TR>
<TD width="25%" height=56><天氣/></TD></TR>
<TR>
<TD align=middle width="25%" height=118><STRONG>固定取值的屬性</STRONG></TD>
<TD width="25%" height=118><!ATTLIST 天氣 狀況 (晴 | 陰 | 雨 | 雪)
#<STRONG>FIXED</STRONG>></TD>
<TD width="25%" height=118><AttributeType <BR>
name="狀況"<BR> dt:type="enumeration" <BR> dt:value="晴 陰 雨
雪" <BR> default="晴"<BR> required="no"
<BR>/></TD>
<TD width="25%"
height=118><天氣/></TD></TR></TBODY></TABLE></CENTER></DIV>
<UL>
<LI><STRONG>attribute元素</STRONG> </LI></UL>
<P>AttributeType和attribute的關系與ElementType和element的關系相同,AttributeType只是起到聲明屬性的作用,而真正指明一個元素具有哪些屬性還需依靠attribute元素。attribute的語法表達如下:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><attribute <BR>
type="attribute-type" <BR> default="default-value"
<BR> [required="{yes | no}"]
<BR>></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>因為attribute實際上是對該Schema中AttributeType聲明的引用,而具體引用什么屬性類型,關鍵就要靠<STRONG>type</STRONG>屬性了。type唯一指定了要引用的屬性類型,因此其取值必須同某個AttributeType元素中name屬性的取值嚴格一致。其它兩個屬性與AttributeType中相應屬性的含義相同,<STRONG>default</STRONG>指定該屬性類型的缺省取值,<STRONG>required</STRONG>指定該屬性對于引用它的元素是否是必須的。如果和同一個屬性相對應的AttributeType和attribute中都對default和required給出了定義,則在attribute中的取值具有更高的優先級。</P>
<P>最后,我們給出關于上面“天氣”元素及其屬性的一個完整的Schema定義:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><AttributeType <BR> name="狀況"<BR>
dt:type="enumeration" <BR> dt:value="晴 陰 雨 雪" <BR>
required="yes" <BR>/>
<P><ElementType name="天氣"
content="empty"><BR> <attribute
type="狀況"/><BR></ElementType></P></TD></TR></TBODY></TABLE></CENTER></DIV></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 + -