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

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

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 22776 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Schema 教程1 举报  打印  推荐  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 教程1

    摘要:XML Schema 是用来描述和约束XML文档的一种XML语言,从功能上看,它和早期的DTD是非常类似的,但是它比DTD的更加强大。目前Schema标准在W3C开发进程中是一个候选建议。

    我们的第一个Schema

    让我们从这个关于书的简单XML文档开始,如果您对XML的语法不是很清楚的话,我建议您先学习XML文档的写法,因为这样会使您比较容易理解下面关于Schema的叙述。

    <?xml version="1.0" encoding="utf-8"?>
    <book isbn="0836217462">
    <title>Being a Dog Is a Full-Time Job</title>
    <author>Charles M. Schulz</author>
    <character>
    <name>Snoopy</name>
    <friend-of>Peppermint Patty</friend-of>
    <since>1950-10-04</since>
    <qualification> extroverted beagle </qualification>
    </character>
    <character>
    <name>Peppermint Patty</name>
    <since>1966-08-22</since>
    <qualification>bold, brash and tomboyish</qualification>
    </character>
    </book>

    如何写这个XML文档的Schema呢?我们可以简单的依照它的结构来定义它的每个元素。首先我们加入一个xsd:schema元素.

    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
    从"schema"元素开始我们Schema文档,在每个Schema文档中,它只能有一个,它控制着Schema所使用的名域和另外几个选项,我们知道现在的Schema标准有好几种,因此它是非常重要的!关于它的细节我们都将在下面的章节里学到。

    对应着XML文档的"book"标记,我们同样也定义一个名为"book"的元素(element).因为这个元素有属性(attributes)和非文本的子元素(non-text children),因此我们认为它是一个复杂类型(complexType)(因为简单类型,只能有值,而不能有子元素或者属性)。同时我们还注意到"book"元素下的子元素,都是按照一定的顺序排列,因此我们使用顺序元素(sequence element)来描述它们。

    <xsd:element name="book">
    <xsd:complexType>
    <xsd:sequence>
    顺序元素(sequence element)是一个定义子元素排列顺序的元素,在下面的章节,我们还将看到两个其它的类似的元素,选择(choice)和全选(all)。

    接着我们定义"title"和"author",它们都是xsd:string类型的简单元素,因为他们没有属性(attributes)或者子元素,xsd:string是一个已经在名域中预定义了的XML Schema类型中的一个。

    <xsd:element name="title" type="xsd:string"/>
    <xsd:element name="author" type="xsd:string"/>
    接着,我们来处理"character"元素,它也是一个复杂类型。注意它的基数的定义!

    <xsd:element name="character" minOccurs="0" maxOccurs="unbounded">
    <xsd:complexType>
    <xsd:sequence>
    同其它Schema定义语言不一样,W3C XML Schema允许我们定义一个元素的使用基数,我们能指定元素的minOccurs(最小数)和maxOccurs(最大数。这里我们设置maxOccurs为"unbounded",这意味能有任意多的"character"元素。这两个属性的默认值都是一。下面,我们用同样的方法定义其它的子元素。

    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="friend-of" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element name="since" type="xsd:date"/>
    <xsd:element name="qualification" type="xsd:string"/>

    下面我们封闭complexType和element等元素:

    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    这样"character"元素就完成了。然后我们封闭"book"的sequence元素。

    </xsd:sequence>

    现在,声明"book"元素的属性,我们通常是在最后这么做。这样做没有什么特别的原因,只不过W3C XML Schema工作组认为在元素后定义属性感觉更加自然。

    <xsd:attribute name="isbn" type="xsd:string"/>

    最后,关闭所有剩下的元素。

    </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    好了,我们的第一个Schema已经完成了。在这其中,最关键的在于根据文档的上下关系来定义每一个元素和属性,并且允许有多个同名元素带有不同的内容。这了这个目的,W3C XML Schema 是被设计成一种有作用域的语言,它的每一个定义只能被它定义的子元素所看见。

    下面是完整的第一个例子:library1.xsd

    <?xml version="1.0" encoding="utf-8"?>

    <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">

    <xsd:element name="book">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="title" type="xsd:string"/>
    <xsd:element name="author" type="xsd:string"/>
    <xsd:element name="character" minOccurs="0" maxOccurs="unbounded">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="friend-of"
    type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element name="since" type="xsd:date"/>
    <xsd:element name="qualification" type="xsd:string"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="isbn" type="xsd:string"/>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>


       收藏   分享  
    顶(1)
      




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

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/10/26 10:46: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/4/28 13:39:33

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

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