派生复杂类型

派生复杂类型

一.扩展,限制派生复杂类型:

复杂类型都是通过限制或扩展其他的类型来派生,通过限制派生的新类型的值范围是基类型值范围的自己,新类型的所有实例对于基类型也是有效的,而扩展则可以为现有类型添加新的元素和属性,基类型的实例对于扩展类型不一定有效。

从简单类型或另一个具有简单内容的复杂类型派生复杂类型时,使用xs:simpleContent元素。如果是扩展派生(泰安家属性),则再xs:simpleContent元素内部使用xs:extension元素。如果是限制派生,则在xs:simpleContent元素内部使用xs:restricton元素。

如果复杂类型具有简单内容,那么所直接或间接派生于它的类型也必须具有简单内容。

复杂内容包括3中内容类型:纯元素类型,混合类型空元素类型。

当从具有复杂内容的另一个复杂类型来派生复杂类型时,使用xs:complexContent元素。如果是扩展派生(添加元素或属性),则再xs:complexContent元素内部使用xs:extension元素;如果是限制派生(限制基类型的内容模型或属性),则再xs:complexContent元素内部使用xs:restriction元素。

                         

  

需要注意的是:

1.                 不能对一个包含all组的基类型进行扩展来添加新的元素(只添加属性是可以的),这是因为all组不能和其他的模型组一起使用,而且它必须出现在内容模型的顶部。

2.                 若想扩充混合内容,则需要在xs:compelxType元素的mixed设为true.

3.                 限制简单内容的基类型必须是具有简单内容的复杂类型,而不能是简单类型。

4.                 限制空内容只能对基类型进行限制,派生类型也必须有空内容。例如:基类型中使用的是xs:integer,派生类型可变成xs:positiveInteger

 

 

二.在实例文档中使用派生类型:

我们可以使用xsi:type属性可以直接为元素制定及类型,xsi:type属性是Schema实例名称空间http://www.w3.org/2001/XMLSchema-instance的一部分。因此在使用type属性前,声明schema实例名称空间。

三.替换组:

使用替换组,允许在内容模型中声明的某个元素被其他元素所替换。替换组由头元素和替换成员组成,头元素和他的替换元素都必须作为全局元素声明,替换成员必须和头元素有相同的类型,或者他们的类型是头元素派生类型。头元素是普通的全局元素,但他的替换元素则需使用一个特殊的属性substitutionGroup,该属性用于指定要替换的头元素的名字。

四.抽象元素和类型:

可以使用xs:elementxs:complexType元素的abstract属性设置为true,来将元素或者类型声明成抽象的。抽象的元素和类型不能在实例文档中使用。将一个元素声明成抽象的,就需要使用替换组,在实例文档中用替换组成员来代替抽象元素。将一个元素对应的类型定义声明为抽象的,那么该元素所有实例必须使用xsitype属性类指定一个非抽象的派生类型。

五.控制派生类型的创建和使用:

可以使用xs:complexType元素的final属性来控制类型的派生,使用xs:block属性来控制再试文档中使用派生元素。

除了在xs:complexType元素使用block属性,还可以在xs:element元素上使用,他的取值除了包含xs:complexType元素的block属性外,还可以包含值substitution,表示阻止替换组中的成员来替换该元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值