XML Schema之多文档模式文档继

 

控制对派生类型的创建和使用

 

迄今为止,已经能够不受任何限制地派生类型,同时在实例文档中自由地使用新的派生类型。然后在实际应用中,模式的作者有时候会需要控制从某些特定类型的派生,并且需要控制在实例文档中使用这些派生类型。

 

XML Schema 提供了一组机制来控制类型的派生引出。其中一种机制允许模式的作者来指定特殊的复合类型,新的类型将不可以从这些被指定的复合类型派生,可能是不能通过限制派生、或是不能通过扩展来派生,又或者是所有的方式都不行。 为了显示这点,假设我们想要限制 Address 类型通过约束 (Restriction) 的方式实施派生,因为我们可能打算只将 Address 类型用为扩展类型的基类型,比如 USAddress 和 UKAddress 的基类型都是 Address 类型。为了防止任何类似的非扩展的派生,我们需要稍许修改 Address 类型的原始定义:

<complexType name="Address" final="restriction">
	<sequence>
		<element name="name" type="string" />
		<element name="street" type="string" />
		<element name="city" type="string" />
	</sequence>
</complexType>
 

通过对 final 属性赋以 "restriction" 这个值,能够阻止一切通过约束的派生。 而如果想阻止一切派生或是要阻止通过扩展实施派生,则分别可以通过 final 属性值 "#all""extension" 来实现。此外,在模式文件的根元素 schema 元素中有一个可选的 finaldefault 属性,它的值能够取为 final 属性所允许的几个值之一。指定 finalDefault 属性的值的效果等于在模式文档中每个类型定义和元素声明中指定 final 属性,同时其值为 finalDefault 属性的值。

 

而另一种类型派生的控制机制则是应用于简单类型方面的类型派生。当定义一个简单类型时,我们可以使用 fixed 属性对它的所有定义参数进行修饰,以阻止这些参数在类型派生中被修改。 举个例子,我们重新定义 postcode 这个简单类型:

<simpleType name="Postcode">
	<restriction base="string">
		<length value="7" fixed="true" />
	</restriction>
</simpleType>
 

当这个简单类型被定义后,能够派生一个新的邮编类型,在其中使用了一个没有在基类型定义中固定的参数:

<simpleType name="UKPostcode">
	<restriction base="ipo:Postcode">
		<pattern value="[A-Z]{2}\d\s\d[A-Z]{2}" />
	</restriction>
</simpleType>
 

然而,不能够派生一个这样的新的邮编类型:在其中重新定义了任何在基类型中已经被固定 (fixed) 的参数 :

<simpleType name="UKPostcode">
	<restriction base="ipo:Postcode">
		<pattern value="[A-Z]{2}\d\d[A-Z]{2}" />
		<!-- illegal attempt to modify facet fixed in base type -->
		<length value="6" fixed="true" />
	</restriction>
</simpleType>
 

除了控制类型派生的机制以外, XML Schema 还提供了一个控制派生类型以及置换组在实例文档中使用的机制,在 P0 实例文档中使用派生类型中我们描述了如何将派生类型 USAddressUKAddress 应用在实例文档中的 shipTobillTo 元素。这些派生类型能够代替 Address 类型提供的内容模型,因为它们都是从 Address 类型派生出来的。然而,被派生类型替换是能够被控制的,具体的说,能够被类型定义中的 block 属性所控制。 举例来说,如果我们想组织任何通过约束而导出的派生类型在 Address 类型出现的地方被使用而替换 Address 类型 ( 也许为了同样的理由我们定义 Addressfinal="restriction" ) ,我们可以修改 Address 的初始定义,并修改为:

<complexType name="Address" block="restriction">
	<sequence>
		<element name="name" type="string" />
		<element name="street" type="string" />
		<element name="city" type="string" />
	</sequence>
</complexType>
 

取值为 "restriction"block 属性将阻止在实例文档中使用通过约束的派生类型来替换 Address 类型。然而,它不会阻止 UKAddressUSAddress 来替换 Address ,因为它们是通过扩展而派生的。为了阻止所有的派生类型或者通过扩展而获得的派生类型去替代基类型,可以分别使用值 "#all""extension" 。和 final 属性一样,在模式文档的根元素 schema 元素里有一个可选的属性 blockDefault ,它的值为 block 属性所允许的值中的一个。 指定 blockDefault 属性的作用等价于在模式文档中为每个类型定义和元素声明指定 block 属性。

 

小结

 

本文主要围绕如何使用多个文档来组成目标的模式而展开讨论。 XML Schema 中为实现这一目标提供了多种机制:包括通过扩展和约束从基类型中派生新的类型;提供重定义机制从而依靠基类型的更新而使派生类型进行更新;利用置换组和抽象定义以及相应的机制来控制元素和类型在实例中的表现。总之, XML Schema 提供了丰富的机制以支持大型的模式的撰写。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。该系统主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者,包含项目源码、数据库脚本、项目说明等,有论文参考,可以直接作为毕设使用。 后台框架采用SpringBoot,数据库使用MySQL,开发环境为JDK、IDEA、Tomcat。项目经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。 该系统的功能主要包括商品管理、订单管理、用户管理等模块。在商品管理模块中,可以添加、修改、删除商品信息;在订单管理模块中,可以查看订单详情、处理订单状态;在用户管理模块中,可以注册、登录、修改个人信息等。此外,系统还提供了数据统计功能,可以对销售数据进行统计和分析。 技术实现方面,前端采用Vue框架进行开发,后端使用SpringBoot框架搭建服务端应用。数据库采用MySQL进行数据存储和管理。整个系统通过前后端分离的方式实现,提高了系统的可维护性和可扩展性。同时,系统还采用了一些流行的技术和工具,如MyBatis、JPA等进行数据访问和操作,以及Maven进行项目管理和构建。 总之,本系统是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。系统经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值