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

📄 0302-0203.htm

📁 XML是一种新的技术
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!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中国论坛 - 初学进阶 - 3.2.2.3 用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=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   ><!-- 正文内容 -->
      <DIV class=pt10><B>3.2.2.3 用Schema定义元素及其内容</B></DIV>
      &nbsp;&nbsp;&nbsp;
      <DIV></DIV><BR>
      <DIV class=pt9>
      <P>在讲述Schema中和ETD定义相对应的种种定义方法之前,我们先来看看所涉及的三个Schema元素:ElementType、element、group。 

      <UL>
        <LI><STRONG>ElementType元素</STRONG> </LI></UL>
      <P>在Schema文档中使用<STRONG>ElementType</STRONG>来声明XML文件中会出现的元素,ElementType的语法表达如下:</P>
      <DIV align=center>
      <CENTER>
      <TABLE width="80%" border=1>
        <TBODY>
        <TR>
          <TD width="100%">&lt;ElementType <BR>&nbsp;&nbsp;&nbsp; name="元素名" 
            <BR>&nbsp;&nbsp;&nbsp; content="{ empty | textOnly | eltOnly | mixed 
            }" <BR>&nbsp;&nbsp;&nbsp; dt:type="元素类型" <BR>&nbsp;&nbsp;&nbsp; 
            order="{ one | seq | many }" <BR>&nbsp;&nbsp;&nbsp; model="{ open | 
            closed }" <BR>&gt;</TD></TR></TBODY></TABLE></CENTER></DIV>
      <P>在ElementType的几个属性中,<STRONG>name</STRONG>的含义不言而喻,是所声明元素的名称,它是不可缺少的。<STRONG>content</STRONG>是ElementType的一个重要属性,它指明ElementType所声明的元素是否为空、是否包含文本、是否包含子元素、还是既包含文本又包含子元素。<STRONG>dt:type</STRONG>指定该元素的数据类型,我们会在后面的小节中详细讨论。<STRONG>order</STRONG>指定该元素的子元素的排列顺序规则。最后,<STRONG>model</STRONG>指定该元素是否可以包含未在本Schema中定义的元素和属性,它主要用于其它Schema的引入,也就是其它“命名空间”的引入。“命名空间”的概念大家可能还比较生疏,这是我们下一节要讲的内容,现在你只要了解,在一个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>释&nbsp; 意</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>缺省状态下,XML Schema的model取值"open",也就是说,该元素可以包含其它未在XML 
      Schema中定义的元素和属性。但是,这并不意味着任何元素和属性都可在Schema中出现,允许出现的前提是这些"异类"元素和属性必须在单独的XML 
      Schema中加以定义,并且必须在引用的它们的元素中以命名空间形式指定其出处。下面给出一个具体的示例。</P>
      <DIV align=center>
      <CENTER>
      <TABLE width="80%" border=1>
        <TBODY>
        <TR>
          <TD 
            width="100%">&lt;联系人&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;姓名&gt;张三&lt;/姓名&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;ID&gt;001&lt;/ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;公司&gt;A公司&lt;/公司&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;EMAIL&gt;zhang@aaa.com&lt;/EMAIL&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;电话&gt;(010)62345678&lt;/电话&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;传真 
            xmlns="fax.xml"&gt;(010)62345678&lt;/传真&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;地址&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;街道&gt;五街1234号&lt;/街道&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;城市&gt;北京市&lt;/城市&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;省份&gt;北京&lt;/省份&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;ZIP&gt;100001&lt;/ZIP&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            &lt;/地址&gt;<BR>&lt;/联系人&gt;</TD></TR></TBODY></TABLE></CENTER></DIV>
      <P>本来fclmlschema.xml中并没有定义"传真"元素,但如果将"联系人"元素的的"model"属性设为"open",就可以在"联系人"中引用它,当然还必须指定"传真"元素所在的Schema文件"fax.xml"。"open"体现了XML 
      Schema的可扩展性,而这是DTD所无法比拟的。 
      <UL>
        <LI><STRONG>element元素</STRONG> </LI></UL>
      <P>ElementType只是起到声明元素的作用,至于元素的内容究竟是什么,则要靠它的子元素<STRONG>element</STRONG>来说明。element的语法表达如下:</P>
      <DIV align=center>
      <CENTER>
      <TABLE width="80%" border=1>
        <TBODY>
        <TR>
          <TD width="100%">&lt;element <BR>&nbsp;&nbsp;&nbsp; type="元素类型" 
            <BR>&nbsp;&nbsp;&nbsp; [minOccurs="{ 0 | 1 }"] 
            <BR>&nbsp;&nbsp;&nbsp; [maxOccurs="{ 1 | * }"] 
      <BR>&gt;</TD></TR></TBODY></TABLE></CENTER></DIV>
      <P>element实际上是对该Schema中ElementType声明的引用,而具体引用什么元素类型,就要靠<STRONG>type</STRONG>属性指定了。type属性不可缺少,并且为了保证type指定的是已经声明过的元素,要求它的取值必须同某个ElementType中的name属性严格一致。至于其它两个属性倒是可有可无。<STRONG>minOccurs</STRONG>指定该元素在其父元素中出现的最小次数,缺省值为1,表明该元素至少出现一次;也可以取值为0,表明该元素是可选的,可以不出现。<STRONG>maxOccurs</STRONG>则指定了该元素出现的最大次数,缺省值同样为1,表明该元素至多出现一次;也可取值为“*”,表明该元素在XML实例文档中出现次数不受限制。 

      <UL>
        <LI><STRONG>group元素</STRONG> </LI></UL>
      <P>DTD中有成组的概念,相应的,Schema中也有“<STRONG>group</STRONG>”元素。它的语法表达类似element元素:</P>
      <DIV align=center>
      <CENTER>
      <TABLE width="80%" border=1>
        <TBODY>
        <TR>
          <TD width="100%">&lt;group<BR>&nbsp;&nbsp;&nbsp; order="{one | seq | 
            many}" <BR>&nbsp;&nbsp;&nbsp; [minOccurs="{ 0 | 1 }"] 
            <BR>&nbsp;&nbsp;&nbsp; [maxOccurs="{ 1 | * }"] 
      <BR>&gt;</TD></TR></TBODY></TABLE></CENTER></DIV>
      <P>和DTD的规定相同,组里的内容可以是元素,也可以是另一个子组。属性<STRONG>order</STRONG>指定该组中的元素或子组的顺序,<STRONG>minOccurs</STRONG>和<STRONG>maxOccurs</STRONG>分别指定了该组在其父元素中出现的最小次数和最大次数。</P>
      <P>下面,我们就开始对DTD和Schema对相同内容的不同定义方式进行一次大比较!</P>
      <DIV align=center>
      <CENTER>
      <TABLE height=260 width="90%" border=1>
        <TBODY>
        <TR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -