新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → Schema 的简单实例 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 18829 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Schema 的简单实例 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客楼主
    发贴心情 Schema 的简单实例

    首先我们来看一个简单的例子。还记得我们的“联系人列表”文件吗?现在我们就把它作一个小小的改动,为“联系人列表”这个元素加一个“公司”属性,指明该列表所属的公司,修改后的XML文件如下:

    <?xml version = "1.0" encoding="GB2312" standalone = "no"?>
    <!DOCTYPE 联系人列表 SYSTEM "fclml.dtd">
    <联系人列表 公司=“大地公司”>
    <联系人>
    <姓名>张三</姓名>
    <ID>001</ID>
    <公司>A公司</公司>
    <EMAIL>zhang@aaa.com</EMAIL>
    <电话>(010)62345678</电话>
    <地址>
    <街道>五街1234号</街道>
    <城市>北京市</城市>
    <省份>北京</省份>
    <ZIP>100001</ZIP>
    </地址>
    </联系人>

    <联系人>
    <姓名>李四</姓名>
    <ID>002</ID>
    <公司>B公司</公司>
    <EMAIL>li@bbb.org</EMAIL>
    <电话>(021)87654321</电话>
    <地址>
    <街道>南京路9876号</街道>
    <城市>上海</城市>
    <省份>上海</省份>
    <ZIP>200002</ZIP>
    </地址>
    </联系人>
    </联系人列表>

    相应的,它的DTD文件fclml.dtd也要作一点改动:

    <?xml version="1.0" encoding="GB2312"?>
    <!ELEMENT 联系人列表 (联系人)*>
    <!ELEMENT 联系人 (姓名,ID,公司,EMAIL,电话,地址)>
    <!ELEMENT 地址 (街道,城市,省份)>
    <!ELEMENT 姓名 (#PCDATA)>
    <!ELEMENT ID (#PCDATA)>
    <!ELEMENT 公司 (#PCDATA)>
    <!ELEMENT EMAIL (#PCDATA)>
    <!ELEMENT 电话 (#PCDATA)>
    <!ELEMENT 街道 (#PCDATA)>
    <!ELEMENT 城市 (#PCDATA)>
    <!ELEMENT 省份 (#PCDATA)>
    <!ATTLIST 联系人列表
    公司 CDATA #REQUIRED
    >

    同样的文档结构要用Schema来描述的话,可写做下面的样子。我们给这个文件取名fclmlschema.xml。也许你要问:"为什么以.xml作为扩展名,而不象DTD那样有个特殊的名字?"答案很明确,因为Schema本身就是XML文档实例,以.xml作为扩展名正是为了强调这一点。不过,这并不是说,就只能以.xml作为扩展名。如果你愿意,你完全可以给它取一个全新的名字,比如:.aaa、.schema、...,只要你的文件系统支持就行。

    [1]<?xml version="1.0" encoding="GB2312" ?>
    [2]<Schema xmlns="urn:schemas-microsoft-com:xml-data"
    xmlns:dt="urn:schemas-microsoft-com:datatypes">
    [3] <AttributeType name="公司"/>
    [4] <ElementType name= "姓名"/>
    [5] <ElementType name= "ID"/>
    [6] <ElementType name= "公司"/>
    [7] <ElementType name= "EMAIL"/>
    [8] <ElementType name= "电话" dt:type="fixed.14.4"/>
    [9] <ElementType name= "街道"/>
    [10] <ElementType name= "城市"/>
    [11] <ElementType name= "省份"/>
    [12] <ElementType name= "地址" content="eltOnly">
    [13] <element type= "街道" />
    [14] <element type= "省份" />
    [15] <element type= "城市" />
    [16] </ElementType>
    [17] <ElementType name= "联系人" content="eltOnly">
    [18] <element type= "姓名" />
    [19] <element type= "ID" />
    [20] <element type= "公司" />
    [21] <element type= "EMAIL" />
    [22] <element type= "电话" />
    [23] <element type= "地址" />
    [24] </ElementType>
    [25] <ElementType name= "联系人列?quot; content="eltOnly">
    [26] <element type= "联系人" />
    [27] <attribute type="公司"/>
    [28] </ElementType>
    [29]</Schema>
    此外,为了告诉语法分析器现在是在用fclmlschema.xml给XML文件client.xml规定的文件结构,需要把client.xml文件中的第二行改成: <学生花名册 xmlns="x-schema:rosterschema.xml">
    下面我们就来逐字逐句地分析一下这个fclmlschema.xml:
    [1]是XML类型声明语句,指明该文档是一个XML文档,并且符合版本1.0规范。另外,该文档采用GB2312编码。
    [2]是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;另一个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可允褂玫氖堇嘈汀9赜诿占浣谙乱唤谥邢晗嘎凼觥?/dd>
    [3]是属性定义语句,它定义了属性“公司”。
    [4]-[11]是元素定义语句,这里共定义了8个元素:姓名、ID、公司、EMAIL、电话、街道、城市、省份。其中为"电话"元素定义了数据类型:fixed.14.4。
    [12]-[16]定义了本Schema的二级元素:地址,指明该元素包含三个子元素:街道、城市、省份。
    [17]-[24]定义了本Schema的三级元素:联系人,它指明该元素包含六个子元素:姓名、ID、公司、EMAIL、电话、地址。
    [25]-[28]定义了本Schema的顶级元素:联系人列表,指明该元素包含一个子元素:联系人,以及一个属性:公司。
    [29]是结束标记语句,它指明该Schema的描述到此为止。
    怎么样?简单吧。大概已经对XML有些造诣的广大读者不用看解释也能读懂这个Schema文件。下面,我们就来从整体上看一下XML Schema语法,下面给出的是XML Schema的DTD描述,相信已经熟悉DTD的你会有一种驾轻就熟的感觉。


    <!ENTITY % datatypes "(entity | entities | enumeration | id | idref | idrefs | nmtoken | nmtokens | notation | string | 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)"
    >
    <!-- *** 数据类型 **** -->
    <!ELEMENT datatype (description)*>
    <!ATTLIST datatype
    dt:type %datatypes; #IMPLIED
    xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
    >
     
    <!-- ***** 描述 ***** -->
    <!ELEMENT description (#PCDATA) >
     
    <!-- **** 元素引用 ***** -->
    <!--附加限制: maxOccurs 必须是 1 or "*" -->
    <!ELEMENT element (description)* >
    <!ATTLIST element
    type IDREF #REQUIRED
    minOccurs CDATA #IMPLIED
    maxOccurs CDATA #IMPLIED
    >
     
    <!-- **** 属性引用 ***** -->
    <!ELEMENT attribute (description)* >
    <!ATTLIST attribute
    type IDREF #REQUIRED
    default CDATA #IMPLIED
    required (yes | no) "no"
    >
     
    <!-- **** 属性定义 ***** -->
    <!ELEMENT AttributeType (datatype | description)* >
    <!ATTLIST AttributeType
    name ID #REQUIRED
    default CDATA #IMPLIED
    dt:type %datatypes; #IMPLIED
    dt:values CDATA #IMPLIED
    required (yes | no) #IMPLIED
    xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
    >
     
    <!-- **** 元素定义 ***** -->
    <!ELEMENT ElementType (datatype | description | AttributeType | attribute | element | group)* >
    <!ATTLIST ElementType
    name ID #REQUIRED
    model (open | closed) #IMPLIED
    content (empty | textOnly | eltOnly | mixed) #IMPLIED
    order (one | seq | many) #IMPLIED
    dt:type %datatypes; #IMPLIED
    dt:values CDATA #IMPLIED
    required (yes | no) #IMPLIED
    xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
    >
     
    <!-- **** 分组 ***** -->
    <!ELEMENT group (group | element | description)*>
    <!ATTLIST group
    minOccurs CDATA #IMPLIED
    maxOccurs CDATA #IMPLIED
    order (one | seq | many) #IMPLIED
    >
     
    <!-- **** Schema ***** -->
    <!ELEMENT Schema (AttributeType | ElementType | description )* >
    <!ATTLIST Schema
    name CDATA #IMPLIED
    xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
    >

    注意,和前面讲到的有规可循的XML语法的条条框框和DTD的定义方法不同,Schema还没有一个正式推荐标准。在这里,我们所讲的Schema的实现语法都是按照微软Internet Explorer 5.0所提供的支持。这个语法主要综合了W3C的两个Note:规范XML-Data (http://www.w3.org/TR/1998/NOTE-XML-data-0105/ )和文档内容描述DCD (http://www.w3.org/TR/NOTE-dcd ),并加入一些扩展。鉴于微软在业界的地位以及Internet Explorer 5.0的普及程度,该语法实现具有较强的适用性。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/21 21:48:00
     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客2
    发贴心情 
    Schema 文件的结构
    在说到元素的定义方法之前,我们先来讲一下Schema文件的结构。其实,Schema文件和其它XML文件的样子非常相似,它是由一组元素构成的,其根元素是“Schema”。“Schema”元素是XML Schema中第一个出现的元素,用于表明该XML文档是一个Schema文档,相应的,“Schema”的结束标记一般在文档的末尾。这样,一个Schema的结构如下:

    <Schema name="schema-name" xmlns="namespace" >
    ...
    </Schema>
    Schema具有两个属性:name指定该Schema的名称,而xmlns则指定该Schema包含的命名空间。注意,一个XML Schema文档中可以包含多个命名空间,比如下面的语句指定了三个命名空间:

    <Schema name="mySchema"
    xmlns="urn:schemas-microsoft-com:xml-data"
    xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:myNS=http://www.xml_step_by_step.edu\ns.xml
    >
    第一个是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;
    第二个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可以使用的数据类型;
    第三个是xmlns:myNS="http://www.xml_step_by_step.edu\ns.xml",它表明下面可能会用到在myNS中定义的元素或属性。
    至于文件结构中的省略号,可以是关于元素的声明语句、也可以是关于属性的声明语句,一切听从你的实际需要。关于它们的使用方法,我们会在下面两个小节中详细讲述。

    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/21 21:49:00
     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客3
    发贴心情 
    用Schema定义元素及其内容
    在讲述Schema中和ETD定义相对应的种种定义方法之前,我们先来看看所涉及的三个Schema元素:ElementType、element、group。
    ElementType元素
    在Schema文档中使用ElementType来声明XML文件中会出现的元素,ElementType的语法表达如下:


    <ElementType
    name="元素名"
    content="{ empty | textOnly | eltOnly | mixed }"
    dt:type="元素类型"
    order="{ one | seq | many }"
    model="{ open | closed }"
    >
    在ElementType的几个属性中,name的含义不言而喻,是所声明元素的名称,它是不可缺少的。content是ElementType的一个重要属性,它指明ElementType所声明的元素是否为空、是否包含文本、是否包含子元素、还是既包含文本又包含子元素。dt:type指定该元素的数据类型,我们会在后面的小节中详细讨论。order指定该元素的子元素的排列顺序规则。最后,model指定该元素是否可以包含未在本Schema中定义的元素和属性,它主要用于其它Schema的引入,也就是其它“命名空间”的引入。“命名空间”的概念大家可能还比较生疏,这是我们下一节要讲的内容,现在你只要了解,在一个XML文件中能够同时使用几个不同的DTD或Schema定义。下表列出了model可能的取值。

    取 值  释 意
    open 表明该元素可以包含其它未在XML Schema中定义的元素和属性
    closed 表明该元素只能包含在本XML Schema中定义过的元素和属性
    缺省状态下,XML Schema的model取值"open",也就是说,该元素可以包含其它未在XML Schema中定义的元素和属性。但是,这并不意味着任何元素和属性都可在Schema中出现,允许出现的前提是这些"异类"元素和属性必须在单独的XML Schema中加以定义,并且必须在引用的它们的元素中以命名空间形式指定其出处。下面给出一个具体的示例。 <联系人>
    <姓名>张三</姓名>
    <ID>001</ID>
    <公司>A公司</公司>
    <EMAIL>zhang@aaa.com</EMAIL>
    <电话>(010)62345678</电话>
    <传真 xmlns="fax.xml">(010)62345678</传真>
    <地址>
    <街道>五街1234号</街道>
    <城市>北京市</城市>
    <省份>北京</省份>
    <ZIP>100001</ZIP>
    </地址>
    </联系人>
    本来fclmlschema.xml中并没有定义"传真"元素,但如果将"联系人"元素的的"model"属性设为"open",就可以在"联系人"中引用它,当然还必须指定"传真"元素所在的Schema文件"fax.xml"。"open"体现了XML Schema的可扩展性,而这是DTD所无法比拟的。
    element元素
    ElementType只是起到声明元素的作用,至于元素的内容究竟是什么,则要靠它的子元素element来说明。element的语法表达如下:


    <element
    type="元素类型"
    [minOccurs="{ 0 | 1 }"]
    [maxOccurs="{ 1 | * }"]
    >
    element实际上是对该Schema中ElementType声明的引用,而具体引用什么元素类型,就要靠type属性指定了。type属性不可缺少,并且为了保证type指定的是已经声明过的元素,要求它的取值必须同某个ElementType中的name属性严格一致。至于其它两个属性倒是可有可无。minOccurs指定该元素在其父元素中出现的最小次数,缺省值为1,表明该元素至少出现一次;也可以取值为0,表明该元素是可选的,可以不出现。maxOccurs则指定了该元素出现的最大次数,缺省值同样为1,表明该元素至多出现一次;也可取值为“*”,表明该元素在XML实例文档中出现次数不受限制。
    group元素
    DTD中有成组的概念,相应的,Schema中也有“group”元素。它的语法表达类似element元素:


    <group
    order="{one | seq | many}"
    [minOccurs="{ 0 | 1 }"]
    [maxOccurs="{ 1 | * }"]
    >
    和DTD的规定相同,组里的内容可以是元素,也可以是另一个子组。属性order指定该组中的元素或子组的顺序,minOccurs和maxOccurs分别指定了该组在其父元素中出现的最小次数和最大次数。
    下面,我们就开始对DTD和Schema对相同内容的不同定义方式进行一次大比较!


    表现内容 DTD Schema 合法实例
    空元素 <!ELEMENT a EMPTY> <ElementType name="a" content="empty"/> <a/> <a></a>
    字符串 <!ELEMENT a (#PCDATA)> <ElementType name="a" content="textOnly"/> <a>
    abcdefg
    </a>


    一个子元素 <!ELEMENT a (b)> <ElementType name="a" content="eltOnly">
      <element type="b"/></ElementType> <a>
      <b/>
    </a>
    有顺序的
    子元素 <!ELEMENT a (b, c)> <ElementType name="a" order="seq">
      <element type="b"/>
      <element type="c"/></ElementType> <a>
      <b/>
      <c/>
    </a>
    OR或 <!ELEMENT a (b | c)> <ElementType name="a" order="one">
      <element type="b"/>
      <element type="c"/></ElementType> <a>
      <b/>
    </a> <a>
      <c/>
    </a>
    任意顺序(或不出现)的子元素 <!ELEMENT a (b | c)*> <ElementType name="a" order="many">
      <element type="b"/>
      <element type="c"/></ElementType> <a/>
    <a>
      <b/>
    </a> <a>
      <c/>
    </a>
    <a>
      <b/>
      <c/>
    </a> <a>
      <c/>
      <b/>
    </a>
    可选子元素 <!ELEMENT a (b?)> <ElementType name="a" content="eltOnly">
      <element type="b" minOccurs="0" maxOccurs="1"/></ElementType> <a/> <a>
      <b/>
    </a>
    "+"型重复元素 <!ELEMENT a (b+)> <ElementType name="a" content="eltOnly">
      <element type="b" minOccurs="1" maxOccurs="*"/></ElementType> <a>
      <b/>
    </a> <a>
      <b/>
      <b/>
    </a>
    "*"型重复元素 <!ELEMENT a (b*)> <ElementType name="a" content="eltOnly">
      <element type="b" minOccurs="0" maxOccurs="*"/></ElementType> <a/> <a>
      <b/>
    </a> <a>
      <b/>
      <b/>
    </a>
    成组元素 <!ELEMENT a (b,c)+> <ElementType name="a" content="eltOnly">
      <group order="seq" minOccurs="1" maxOccurs="*"/>
          <element type="b"/>
            <element type="c"/>
        </group>
    </ElementType> <a>
      <b/>
      <c/>
    </a> <a>
      <b/>
      <c/>

      <b/>
      <c/>
    </a>
    混合元素 <!ELEMENT a (#PCDATA | b | c)*> <ElementType name="a" content="mixed"/>  
      <element type="b"/>
      <element type="c"/></ElementType> <a>
    abcdefg
    </a> <a>
      abcdefg
      <b/>
    </a>
    <a>
      <b/>
      abcdefg
      <c/>
    </a> <a>
      abcd
      <c/>
      efg
    </a>

    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/21 21:51:00
     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客4
    发贴心情 
    Schema的特色——扩展数据类型
    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,已经可以覆盖相当广泛的应用。限于篇幅,这里只列表介绍几种最常用的类型。

    类   型
    解   释
    举   例

    boolean 布尔型:0 或 1, 其中0代表false,1代表true 0,1
    char 单字符 “a”、“b”
    time 时间类型,符合 ISO 8601格式, 无日期和时区部分。 08:16:18
    date 日期类型,符合ISO 8601格式且无时间部分. 2000-06-01
    dateTime 日期类型,符合ISO 8601格式,带可选时间部分但无时区部分,秒可精确到纳秒级。 2000-06-01T20:08:18
    fixed.14.4 数值类型,同“number”类似,但精度上小数点前不超过14位,小数点后不超过4位 14.1234
    float 实数类型,位数不受限制,可以包含符号位和小数位以及指数。取值范围从 1.7976931348623157E+308 至 2.2250738585072014E-308 .314159265358979E+1
    int 数值类型, 可以包含符号位,但不含小数位和指数位 1, -10, 2566
    number 数值类型,位数不限,可以包含符号位和小数位以及指数。取值范围从 1.7976931348623157E+308 至 2.2250738585072014E-308 12, 3.1415, -1.24E-10
    uri 统一资源标识(URI)类型。 http://www.ics.
    uci.edu
    /pub/ietf/uri/

    元素和属性的数据类型可以使用元素datatype来定义,这个元素是Schema中一个重要元素,也是Schema的一大特色。datatype的语法表达如下:

    <datatype dt:type="datatype">

    除此以外,还有另一种更直接的方法,是在元素ElementType和AttributeType之中利用dt:type属性。下面分别给出具体的示例:

      datatype dt:type
    ElementType <ElementType name="a">
      <datatype dt:type=" float">
    </ElementType> <ElementType name="a" dt:type="float"/>
    AttributeType <AttributeType name ="b"/>
      <datatype dt:type="float"/></AttributeType>
    <ElementType name="a">
      <attribute type="b"/>
    </ElementType>  <AttributeType name="b" dt:type="float"/>
    <ElementType name="a">
      <attribute type="b"/>
    </ElementType>

    好了,现在我们结束这些枯燥的语法论述,来看个实际的例子:

    <AttributeType name="更新时间">
        <datatype dt:type="dateTime"/>
    </AttributeType>
    <ElementType name="description"/>
    <ElementType name="品牌" dt:type="string"/>
    <ElementType name="价格" dt:type="int"/>
    <ElementType name="是否全内置" dt:type="boolean"/>
    <ElementType name="库存数量" dt:type="number"/>

    <ElementType name="笔记本电脑" content="eltOnly">
        <attribute type="更新时间" />
        <element type="品牌" />
        <element type="价格" />
        <element type="是否全内置" />
        <element type="库存数量" />
    </ElementType>


    上面给出的是一个关于笔记本电脑的Schema定义,在这里,我们为笔记本电脑定义了一个属性--资料更新时间,数据类型定为dateTime;笔记本电脑涉及的元素有:品牌,因为它实际上是一个名称,所以定为string类型;价格,因为考虑到经销商不会小气到连几毛钱都不放过,所以数据类型定为int型;是否全内置,不言而喻自然是铁板钉钉的布尔型了;库存数量,因为考虑到经销上可能会大量囤积以谋取高利,故而选取范围较大的number类型。下面我们再给出一个XML示例文档,以便大家对数据类型有一个更加直观的认识。

    <笔记本电脑 更新时间="2000-06-10T14:00:00">
        <品牌>ACER 518TE</品牌>
        <价格>22800</价格>
        <是否全内置>1</是否全内置>
        <库存数量>258000</库存数量>
    </笔记本电脑>

    可是,假设我们偏偏遇上了一个爱专牛角尖且极为小气的电脑经销商,他擅自将上面的实例文档加以改动挂在自己门口,于是就有下面的文档:

    <笔记本电脑 更新时间="2000-06-10T14:00:00">
        <品牌>ACER 518TE</品牌>
        <价格>22800.21</价格>
        <是否全内置>1</是否全内置>
        <库存数量>258000</库存数量>
    </笔记本电脑>

    就在他自鸣得意于自己的精明时,我们的语法分析器却报警了:“价格”取值与定义不符!当然了,明明是int类型,又岂能再加上一个小数点?除非我们将上面的Schema中的“价格”定义作下列修改:

    <ElementType name="价格" dt:type="fixed.14.4"/>

    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/21 21:53:00
     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客5
    发贴心情 
    Schema中的注释
    现在,Schema中的元素只剩下description没有介绍。description只能算是Schema中的一个配角,它可以嵌套在任何其它的Schema元素之中,为这些元素提供备注信息,类似于DTD中的注释。description中的信息不会被XML语法分析器所解析,但是可以为我们提供注释信息,并可以被XML工具或应用程序所解读。
    举个简单的例子,假如你是某大学社区网站的技术人员,想在网上开辟一个"售车"栏目供毕业生出售自行车,而正好你刚刚学习过XML Schema,于是就用XML Schema写了一个Schema文档,并把它发布到了网上(可能这种应用在目前有点超前,不过,相信我吧,用不了多久这种应用就会风靡全球的)。可是,问题又来了,单凭这个文档别人怎么知道你是在求购自行车还是想出售自行车呢?不要着急,description前来帮忙。下面就是这个包含description的XML Schema片段:


    <ElementType name="自行车" content="eltOnly">
    <description>出售自行车</description>
    <element type="车型"/>
    <element type="颜色"/>
    <element type="新旧程度"/>
    <element type="售价"/>
    <element type="联系电话"/>
    </ElementType>

    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/21 21:54:00
     
     npuhetao 帅哥哟,离线,有人找我吗?
      
      
      威望:5
      头衔:骨灰级菜鸟
      等级:大二(研究C++)
      文章:230
      积分:2708
      门派:XML.ORG.CN
      注册:2004/3/18

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给npuhetao发送一个短消息 把npuhetao加入好友 查看npuhetao的个人资料 搜索npuhetao在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看npuhetao的博客6
    发贴心情 
    Schema的应用
    由于XML Schema的种种优点,现在Schema取代DTD已成大势所趋。在这种情况下,国际上一些知名企业和组织审时度势,纷纷在战略上向XML Schema倾斜,提供对XML Schema的支持。其中最为典型的当然要数微软的BizTalk和xml.org组织的注册/资源库。更加值得一提的是,微软在其浏览器软件Internet Explorer 5.0中率先提供对Schema的支持,当然,因为最终的XML Schema标准尚未正式推出,因此微软支持的Schema也只是过渡性"标准",今后还会不断修改。
    微软的BizTalk
    BizTalk是微软发起的电子商务schema库,配合的产品有微软的BizTalk服务器。它的结构是,各个商家定义自己的schema,定义好后将schema提交到bizTalk.org进行注册。BizTalk事先制定了一些标记供商家使用,每个Schema必须遵守义写规则,而且要有一些规定好的必要元素和属性,只有这样才能生成一个标准的BizTalk消息。用户可以注册和查找schema,当遇到某个BizTalk消息而不确定它的结构时可以在bizTalk.org找到它的schema。BizTalk 的框架结构还包括routing scheme,由message server来进行消息的异步发送,它的作用就是一个MOM (message oriented middleware),这样达到系统间的松耦合。

    微软在今年4月份发布了BizTalk Server技术预览版,以及相应的开发工具包。它具有以下优点:

    稳定的文档交换:支持多种文档类型的发送和交换,包括XML、EDI(EDIFACT和X12)、纯文本文件等等。
    多网络传输协议支持:包括HTTP, HTTPS, FTP, SMTP, SMB (file transfer), Microsoft Message Queue Server (MSMQ) and Microsoft Exchange.
    可靠的安全性:提供加密、数字签名、公开密钥等技术,使得Internet上高保密性资料的传输具有很强的安全性。
    图形化的开发工具:内置BizTalk Editor和Mapper,前者可以方便快捷地创建和编辑XML文档,并可以将其他类型文档转换成XML,后者可以以图形化的方式完成XML转换,包括自动XSLT的生成。
    应用的集成:可以提供同企业现有的业务系统的集成,包括SAP R/3和EDI。
    跟踪和分析工具:提供分析报告。
    管理工具:通过图形化的BizDesk工具配置交易伙伴间的协议以及基于规则的内容驱动的数据交换。
    可编程性:允许开发者定制转换器、分析器以及安全组件。
    关于BizTalk的相关网址是: http://www.biztalk.org/

    xml.org的Schema注册/资源库
    xml.org是另一个可注册的Schema库,它是由著名的国际组织OASIS管理并由OASIS组织成员——一些致力于产品独立数据交换系统的企业和机构提供赞助。通过xml.org,OASIS进行了XML应用信息的搜集、管理和发布,包括数据字典、Schema、命名空间和DTD。另一方面,企业机构和组织也可将自己制定的XML数据交换规范提交到xml.org,然后,企业用户或开发者在xml.org查找自己相关领域的规范,进而开发出在一定范围内能进行数据交换的应用系统。xml.org同BizTalk的一个重要区别在于它不要求具有BizTalk必须的元素。由于OASIS在业界所享有的声誉,xml.org自然而然地成为XML信息管理和发布的一个权威站点,一个于关于XML的业界门户站点。它的相关网址是:http://www.xml.org/

    ----------------------------------------------
    你硬要把单纯的事情看得很严重,那样子你会很痛苦。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/21 21:55:00
     
     centipede 帅哥哟,离线,有人找我吗?
      
      
      头衔:蜈蚣
      等级:大二期末(数据结构考了98分!)
      文章:60
      积分:298
      门派:XML.ORG.CN
      注册:2004/5/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给centipede发送一个短消息 把centipede加入好友 查看centipede的个人资料 搜索centipede在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看centipede的博客7
    发贴心情 
    这么详尽的描述,严重感谢楼主!

    ----------------------------------------------
    Practice makes pefect !

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/6/30 20:37:00
     
     zhangjinti 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:54
      门派:XML.ORG.CN
      注册:2004/7/2

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给zhangjinti发送一个短消息 把zhangjinti加入好友 查看zhangjinti的个人资料 搜索zhangjinti在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看zhangjinti的博客8
    发贴心情 
    楼主的描述够详细,不过我还是要请教一下楼主,xml schema的用途到底是什么,特别是怎么结合xml文档使用?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/2 17:42:00
     
     tnfs2008bj 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:146
      门派:XML.ORG.CN
      注册:2004/6/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给tnfs2008bj发送一个短消息 把tnfs2008bj加入好友 查看tnfs2008bj的个人资料 搜索tnfs2008bj在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看tnfs2008bj的博客9
    发贴心情 
    够详细 但我想知道这里讲的是不是和.xsd有些不同啊
    这里只讲到了EelementType AttributeType element 几个元素
    而.xsd中还有好多啊
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/24 19:38:00
     
     tnfs2008bj 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:146
      门派:XML.ORG.CN
      注册:2004/6/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给tnfs2008bj发送一个短消息 把tnfs2008bj加入好友 查看tnfs2008bj的个人资料 搜索tnfs2008bj在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看tnfs2008bj的博客10
    发贴心情 
    够详细 但我想知道这里讲的是不是和.xsd有些不同啊
    这里只讲到了EelementType AttributeType element 几个元素
    而.xsd中还有好多啊
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/24 19:39:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/3/12 1:42:54

    本主题贴数10,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    156.250ms