?? 0302-0205.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-0205 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學進階 - 3.2.2.5 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=39 rowSpan=2></TD>
<TD vAlign=center >
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=39 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD ><!-- 正文內容 -->
<DIV class=pt10><B>3.2.2.5 Schema的特色——擴展數據類型</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>Schema中共有23種擴展數據類型,包括bin.base64、bin.hex、boolean、char、date、dateTime、dateTime.tz、fixed.14.4、float、int、number、time、time.tz、i1、i2、i4、r4、r8、ui1、ui2、ui4、uri、uuid,已經可以覆蓋相當廣泛的應用。限于篇幅,這里只列表介紹幾種最常用的類型。</P>
<DIV align=center>
<CENTER>
<TABLE cellSpacing=1 width="90%" border=1>
<TBODY>
<TR>
<TH vAlign=top align=middle width="15%" bgColor=#ffffff>
<P align=center>類 型</P></TH>
<TH vAlign=top align=middle width="60%" bgColor=#ffffff>
<P align=center>解 釋</P></TH>
<TH vAlign=top align=middle width="25%" bgColor=#ffffff>
<P align=center>舉 例</P></TH></TR>
<TR>
<TD vAlign=top width="15%">boolean</TD>
<TD vAlign=top width="60%">布爾型:0 或 1, 其中0代表false,1代表true</TD>
<TD vAlign=top width="25%">0,1</TD></TR>
<TR>
<TD vAlign=top width="15%">char</TD>
<TD vAlign=top width="60%">單字符</TD>
<TD vAlign=top width="25%">“a”、“b”</TD></TR>
<TR>
<TD vAlign=top width="15%">time</TD>
<TD vAlign=top width="60%">時間類型,符合 ISO 8601格式, 無日期和時區部分。</TD>
<TD vAlign=top width="25%">08:16:18</TD></TR>
<TR>
<TD vAlign=top width="15%">date</TD>
<TD vAlign=top width="60%">日期類型,符合ISO 8601格式且無時間部分.</TD>
<TD vAlign=top width="25%">2000-06-01</TD></TR>
<TR>
<TD vAlign=top width="15%">dateTime</TD>
<TD vAlign=top width="60%">日期類型,符合ISO
8601格式,帶可選時間部分但無時區部分,秒可精確到納秒級。</TD>
<TD vAlign=top width="25%">2000-06-01T20:08:18</TD></TR>
<TR>
<TD vAlign=top width="15%">fixed.14.4</TD>
<TD vAlign=top
width="60%">數值類型,同“number”類似,但精度上小數點前不超過14位,小數點后不超過4位</TD>
<TD vAlign=top width="25%">14.1234</TD></TR>
<TR>
<TD vAlign=top width="15%">float</TD>
<TD vAlign=top width="60%">實數類型,位數不受限制,可以包含符號位和小數位以及指數。取值范圍從
1.7976931348623157E+308 至 2.2250738585072014E-308</TD>
<TD vAlign=top width="25%">.314159265358979E+1</TD></TR>
<TR>
<TD vAlign=top width="15%">int</TD>
<TD vAlign=top width="60%">數值類型, 可以包含符號位,但不含小數位和指數位</TD>
<TD vAlign=top width="25%">1, -10, 2566</TD></TR>
<TR>
<TD vAlign=top width="15%">number</TD>
<TD vAlign=top width="60%">數值類型,位數不限,可以包含符號位和小數位以及指數。取值范圍從
1.7976931348623157E+308 至 2.2250738585072014E-308</TD>
<TD vAlign=top width="25%">12, 3.1415, -1.24E-10</TD></TR>
<TR>
<TD vAlign=top width="15%">uri</TD>
<TD vAlign=top width="60%">統一資源標識(URI)類型。</TD>
<TD vAlign=top width="25%"><A
href="http://www.ics.uci.edu/">http://www.ics.<BR>uci.edu</A><BR>/pub/ietf/uri/</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>元素和屬性的數據類型可以使用元素<STRONG>datatype</STRONG>來定義,這個元素是Schema中一個重要元素,也是Schema的一大特色。datatype的語法表達如下:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><datatype
dt:type="datatype"></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>除此以外,還有另一種更直接的方法,是在元素ElementType和AttributeType之中利用dt:type屬性。下面分別給出具體的示例:</P>
<DIV align=center>
<CENTER>
<TABLE width="90%" border=1>
<TBODY>
<TR>
<TH align=middle width="20%"> </TH>
<TH width="40%">datatype</TH>
<TH width="40%">dt:type</TH></TR>
<TR>
<TD align=middle width="20%">ElementType</TD>
<TD width="40%"><ElementType name="a"><BR> <datatype
dt:type=" float"><BR></ElementType></TD>
<TD width="40%"><ElementType name="a" dt:type="float"/></TD></TR>
<TR>
<TD align=middle width="20%">AttributeType</TD>
<TD width="40%"><AttributeType name ="b"/> <BR>
<datatype
dt:type="float"/></AttributeType><BR><ElementType
name="a"> <BR> <attribute
type="b"/><BR></ElementType> </TD>
<TD width="40%"><AttributeType name="b"
dt:type="float"/><BR><ElementType name="a"> <BR>
<attribute
type="b"/><BR></ElementType></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>好了,現在我們結束這些枯燥的語法論述,來看個實際的例子:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><AttributeType
name="更新時間"><BR> <datatype
dt:type="dateTime"/><BR></AttributeType>
<P><ElementType name="description"/><BR><ElementType
name="品牌" dt:type="string"/><BR><ElementType name="價格"
dt:type="int"/><BR><ElementType name="是否全內置"
dt:type="boolean"/><BR><ElementType name="庫存數量"
dt:type="number"/></P>
<P><ElementType name="筆記本電腦"
content="eltOnly"><BR> <attribute
type="更新時間" /><BR> <element type="品牌"
/><BR> <element type="價格"
/><BR> <element type="是否全內置"
/><BR> <element type="庫存數量"
/><BR></ElementType></P></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><BR>上面給出的是一個關于筆記本電腦的Schema定義,在這里,我們為筆記本電腦定義了一個屬性--資料更新時間,數據類型定為dateTime;筆記本電腦涉及的元素有:品牌,因為它實際上是一個名稱,所以定為string類型;價格,因為考慮到經銷商不會小氣到連幾毛錢都不放過,所以數據類型定為int型;是否全內置,不言而喻自然是鐵板釘釘的布爾型了;庫存數量,因為考慮到經銷上可能會大量囤積以謀取高利,故而選取范圍較大的number類型。下面我們再給出一個XML示例文檔,以便大家對數據類型有一個更加直觀的認識。</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><筆記本電腦
更新時間="2000-06-10T14:00:00"><BR> <品牌>ACER
518TE</品牌><BR>
<價格>22800</價格><BR>
<是否全內置>1</是否全內置><BR>
<庫存數量>258000</庫存數量><BR></筆記本電腦></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>可是,假設我們偏偏遇上了一個愛專牛角尖且極為小氣的電腦經銷商,他擅自將上面的實例文檔加以改動掛在自己門口,于是就有下面的文檔:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><筆記本電腦
更新時間="2000-06-10T14:00:00"><BR> <品牌>ACER
518TE</品牌><BR>
<價格>22800.21</價格><BR>
<是否全內置>1</是否全內置><BR>
<庫存數量>258000</庫存數量><BR></筆記本電腦></TD></TR></TBODY></TABLE></CENTER></DIV>
<P>就在他自鳴得意于自己的精明時,我們的語法分析器卻報警了:“價格”取值與定義不符!當然了,明明是int類型,又豈能再加上一個小數點?除非我們將上面的Schema中的“價格”定義作下列修改:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%"><ElementType name="價格"
dt:type="fixed.14.4"/></TD></TR></TBODY></TABLE></CENTER></DIV>
<P><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 + -