XML Schema的继承

XML Schema支持继承机制,如在一个xml文档里,既有student元素也有teacher元素,如下:

xml 代码
  1. <student>  
  2.   <name>Chris</name>  
  3.   <NO>0312893</NO>  
  4.   <major>Software Engineering</major>  
  5. </student>  
  6. <teacher>  
  7.   <name>Daneil</name>  
  8.   <teach-course>Object-oriented Programming</teach-course>  
  9. </teacher>  

但是他们有一个共同的子元素name,我们如何将其抽象出来放到一个共同的父类中呢?这时我们就可以利用XML Schema的继承机制来实现。我们先定义一个类型Person:

xml 代码
  1. <complexType name="Person" abstract="true">  
  2.   <sequence>  
  3.     <element name="name" type="string"/>  
  4.   </sequence>  
  5. </complexType>  

abstract=”true”表示这是一个抽象类型,通过如下定义即可实现继承Person

xml 代码
  1. <complexType name="Student">  
  2.   <extension base="Person">  
  3.     <sequence>  
  4.       <element name="NO" type="string"/>  
  5.       <element name="major" type="string"/>  
  6.     </sequence>  
  7.   </extension>  
  8. </complexType>  
  9. <complexType name="Teacher">  
  10.   <extension base="Teacher">  
  11.     <sequence>  
  12.       <element name="teach-course" type="string'/>  
  13.     </sequence>  
  14.   </extension>  
  15. </complexType>  

这样Student和Teacher就自动具有了name元素。下面我们只需

xml 代码
  1. <element name="student" type="Student"/>  
  2. <element name="teacher" type="Teacher"/>   

将元素和他们对应的类型绑定即可,类似于面向对象语言中的实例化。注意:由于Person类型是一个抽象类型,是不可以实例化的,这点和面向对象语言也十分相似。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema如何定义元素和属性,如何使用限制、列表和合并派生自己的简单数据类型,如何定义复杂数据类型,全局/局部元素和数据类型之间的区别;如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式使用多态性支持,如何在文档定义空值等等。 [实验内容和步骤] 1、使用XMLSPY集成开发环境,新建XML Schema文档,在各种不同的编辑视图尝试采用不同的方式完成XML Schema文档的编辑和查看;并使用XMLSPY提供的便利,建立XMLSchema两者之间的关联,进行XML文档的良构以及有效性验证。 2、严格按照下图给出的文档模型,在XML Schema编辑环境的Schema视图完成book.xsd的编写(不要使用Text视图进行编写): 在上图,没有指定简单类型元素和属性的数据类型,请根据合理的情况,完成数据类型的创建(至少使用到限制方式的三种以上的限制方面),请在IDE的Details视图->type和Facets完成上述任务。 在上图,有三个title元素分别表示book、section和figure的标题,请定义下述类型: titleType:1-100个字符的文本; bookTitleType:titleType类型限制派生的子类型,要求取枚举值“Data On the Web”、“TCP/IP Illustrated”等; sectionTitleType:titleType类型限制派生的子类型,要求必须形如“1.xxxx”、“1-1.xxxx”等等(表示第一节、第一节下面的第一节等等,注意section是递归的形式); figureTitleType:titleType类型限制派生的子类型,要求必须形如“1-1.xxxx” 、“1-1-1.xxxx”(表示第一节的第一个图、第一节下面的第一节的第一个图等等); 然后编写book.xml,并使用多态性(即所有title的类型均为titleType,而数据实例指明具体类型),请确保通过文档有效性验证。 3、在上次的DTD实验,我们编写了SpyBase1.xml、SpyBase2.xml、以及SpyBase1.dtd和SpyBase2.dtd,这次需要完成SpyBase1.xsd和SpyBase2.xsd,建立模式与数据之间的关联,并进行文档有效性验证。在编写的XSD文档SpyBase1.xsd,要求使用key/keyref描述数据的实体完整性以及数据之间的参照完整性(SpyBase2.xml不需要,因为已经使用嵌套消除了参照关系)。 [实验思考] 与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml的alias、mission、spy来自不同的命名空间,如何在Schema对其进行限定,请在XMLSPY完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后提交时间 2013年?月?日 提交内容 提交book.xsd、book.xml(使用多态)。 提交SpyBase1. xsd、SpyBase2. xsd。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值