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

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

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2833 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Schema初学者进阶(2) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     anchen0617 帅哥哟,离线,有人找我吗?双子座1983-6-17
      
      
      威望:5
      等级:大二(研究C++)
      文章:281
      积分:3413
      门派:XML.ORG.CN
      注册:2004/10/17

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给anchen0617发送一个短消息 把anchen0617加入好友 查看anchen0617的个人资料 搜索anchen0617在『 DTD/XML Schema 』的所有贴子 访问anchen0617的主页 引用回复这个贴子 回复这个贴子 查看anchen0617的博客楼主
    发贴心情 Schema初学者进阶(2)

    Schema初学者进阶(2)

    简化Schema的设计

    在我们上次的练习中,设计Schema所使用的方法是极其简单的。由于使用层层嵌套的的定义方法,当文档非常复杂时,由于嵌套层次过深,文档将不易阅读并且难以维护。同时这种方法和过去DTD的设计结构有非常大的差异,这使得人或者机器想把DTD转换成XML Schema时会有困难。

    因此,这里我们介绍另外一种非层次的设计方法,以上一章文档为例,我们首先定义文档中最基本的元素,然后在复杂元素中引用我们已经定义的基本元素的,这样使得我们的设计非常的简洁易懂。

    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
    <!-- definition of simple type elements -->
    <xsd:element name="title" type="xsd:string"/>
    <xsd:element name="author" type="xsd:string"/>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="friend-of" type="xsd:string"/>
    <xsd:element name="since" type="xsd:date"/>
    <xsd:element name="qualification" type="xsd:string"/>
    <!-- definition of attributes -->
    <xsd:attribute name="isbn" type="xsd:string"/>
    <!-- definition of complex type elements -->
    <xsd:element name="character">
    <xsd:complexType>
    <xsd:sequence>
    <!-- the simple type elements are referenced using the "ref" attribute -->
    <xsd:element ref="name"/>
    <!-- the definition of the cardinality is done when the elements are referenced -->
    <xsd:element ref="friend-of" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element ref="since"/>
    <xsd:element ref="qualification"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    <xsd:element name="book">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element ref="title"/>
    <xsd:element ref="author"/>
    <xsd:element ref="character" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute ref="isbn"/>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>

    Schema初学者进阶(3)

    自定义数据类型

    我们已经看过我们用层层嵌套式和非层次式两种方法定义元素和元素属性的方法。W3C XML Schema还有第三种设计方法--自定义数据类型,自定义数据类型可以定义我们自己需要的数据类型,它既可以是象PCDATA一样的简单类型,也可以是含有多个元素的复杂类型。

    在simpleType和complexType元素中给出自定义数据类型的名字,然后定义子元素或者属性。下面我们将展现如何定义一个长度受限的字符串类型。

    例如:假如我们要定义一个名为"nameType",最大长度为32个字符的数据类型。我们可以这样写:

    <xsd:simpleType name="nameType">
    <xsd:restriction base="xsd:string">
    <xsd:maxLength value="32"/>
    </xsd:restriction>
    </xsd:simpleType>

    在simpleType元素中定义新的元素的名字,而restriction元素表示这个元素是来源于W3C XMLSchema名域中的"string"类型,并且对这个字符串应用了约束,例如:可以限制该元素能使用的数值。maxLength元素,称之为"facet",它说明这个自定义数据类型的约束条件是字符串最大长度不超过32。

    另外一非常有用的facet是"pattern"元素,它定义一个必须要被匹配的规则表达式。例如:如果不介意"-"标记,我们可以象下面一样定义一个10个数字ISBN类型:

    <xsd:simpleType name="isbnType">
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="[0-9]{10}"/>
    </xsd:restriction>
    </xsd:simpleType>

    Facets有两种方法取得一个数据类型(列表和结合体), 我们将在下面的章节讨论更深层的内容。

    Complex自定义数据类型同我们已经看过simpleType的一样,首先给了元素名字。

    定义使用数据类型和定义类并使用类建立对象是非常相似的。自定义数据类型用于定义元素或者属性的抽象概念。它所扮演的角色同类在对象扮演的角色相同。

    下面是完整的实例:

    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
    <!-- definition of simple types -->
    <xsd:simpleType name="nameType">
    <xsd:restriction base="xsd:string">
    <xsd:maxLength value="32"/>
    </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="sinceType">
    <xsd:restriction base="xsd:date"/>
    </xsd:simpleType>
    <xsd:simpleType name="descType">
    <xsd:restriction base="xsd:string"/>
    </xsd:simpleType>
    <xsd:simpleType name="isbnType">
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="[0-9]{10}"/>
    </xsd:restriction>
    </xsd:simpleType>
    <!-- definition of complex types -->
    <xsd:complexType name="characterType">
    <xsd:sequence>
    <xsd:element name="name" type="nameType"/>
    <xsd:element name="friend-of" type="nameType" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element name="since" type="sinceType"/>
    <xsd:element name="qualification" type="descType"/>
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="bookType">
    <xsd:sequence>
    <xsd:element name="title" type="nameType"/>
    <xsd:element name="author" type="nameType"/>
    <!-- the definition of the "character" element is using the "characterType" complex type -->
    <xsd:element name="character" type="characterType" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="isbn" type="isbnType" use="required"/>
    </xsd:complexType>
    <!-- Reference to "bookType" to define the "book" element -->
    <xsd:element name="book" type="bookType"/>
    </xsd:schema>


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    xml这门语言太好了,我们共同努力吧!!!!!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/26 10:47:00
     
     GoogleAdSense双子座1983-6-17
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/19 21:48:23

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

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