⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0302-0204.htm

📁 xml帮助文档
💻 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>
      &nbsp;&nbsp;&nbsp;
      <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%">&lt;AttributeType <BR>&nbsp; name="属性名" <BR>&nbsp; 
            dt:type="属性类型" <BR>&nbsp; dt:values="枚举值列表" <BR>&nbsp; default="缺省值" 
            <BR>&nbsp; required="{yes | no}" 
      <BR>&gt;</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>&lt;!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) 
            #<STRONG>REQUIRED</STRONG>&gt;</TD>
          <TD width="25%" height=96>&lt;AttributeType <BR>&nbsp; 
            name="状况"<BR>&nbsp; dt:type="enumeration" <BR>&nbsp; dt:value="晴 阴 雨 
            雪" <BR>&nbsp; required="yes" <BR>/&gt;</TD>
          <TD width="25%" height=96>&lt;天气 状况="晴"/&gt;</TD></TR>
        <TR>
          <TD align=middle width="25%" height=99 
            rowSpan=2><STRONG>属性值可有可无的属性</STRONG></TD>
          <TD width="25%" height=99 rowSpan=2>&lt;!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 
            雪) #<STRONG>IMPLIED</STRONG>&gt;</TD>
          <TD width="25%" height=99 rowSpan=2>&lt;AttributeType <BR>&nbsp; 
            name="状况"<BR>&nbsp; dt:type="enumeration" <BR>&nbsp; dt:value="晴 阴 雨 
            雪" <BR>&nbsp; required="no" <BR>/&gt;</TD>
          <TD width="25%" height=46>&lt;天气 状况="晴"/&gt;</TD></TR>
        <TR>
          <TD width="25%" height=47>&lt;天气/&gt;</TD></TR>
        <TR>
          <TD align=middle width="25%" height=118 
            rowSpan=2><STRONG>定义缺省值的属性</STRONG></TD>
          <TD width="25%" height=118 rowSpan=2>&lt;!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 
            雪) "晴"&gt;</TD>
          <TD width="25%" height=118 rowSpan=2>&lt;AttributeType <BR>&nbsp; 
            name="状况"<BR>&nbsp; dt:type="enumeration" <BR>&nbsp; dt:value="晴 阴 雨 
            雪" <BR>&nbsp;&nbsp;&nbsp; default="晴"<BR>&nbsp; required="yes" 
          <BR>/&gt;</TD>
          <TD width="25%" height=56>&lt;天气 状况="阴"/&gt;</TD></TR>
        <TR>
          <TD width="25%" height=56>&lt;天气/&gt;</TD></TR>
        <TR>
          <TD align=middle width="25%" height=118><STRONG>固定取值的属性</STRONG></TD>
          <TD width="25%" height=118>&lt;!ATTLIST 天气 状况 (晴 | 阴 | 雨 | 雪) 
            #<STRONG>FIXED</STRONG>&gt;</TD>
          <TD width="25%" height=118>&lt;AttributeType <BR>&nbsp; 
            name="状况"<BR>&nbsp; dt:type="enumeration" <BR>&nbsp; dt:value="晴 阴 雨 
            雪" <BR>&nbsp;&nbsp;&nbsp; default="晴"<BR>&nbsp; required="no" 
          <BR>/&gt;</TD>
          <TD width="25%" 
      height=118>&lt;天气/&gt;</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%">&lt;attribute <BR>&nbsp;&nbsp;&nbsp; 
            type="attribute-type" <BR>&nbsp;&nbsp;&nbsp; default="default-value" 
            <BR>&nbsp;&nbsp;&nbsp; [required="{yes | no}"] 
      <BR>&gt;</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%">&lt;AttributeType <BR>&nbsp; name="状况"<BR>&nbsp; 
            dt:type="enumeration" <BR>&nbsp; dt:value="晴 阴 雨 雪" <BR>&nbsp; 
            required="yes" <BR>/&gt;
            <P>&lt;ElementType name="天气" 
            content="empty"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;attribute 
            type="状况"/&gt;<BR>&lt;/ElementType&gt;</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 + -