控制对派生类型的创建和使用
迄今为止,已经能够不受任何限制地派生类型,同时在实例文档中自由地使用新的派生类型。然后在实际应用中,模式的作者有时候会需要控制从某些特定类型的派生,并且需要控制在实例文档中使用这些派生类型。
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
实例文档中使用派生类型中我们描述了如何将派生类型
USAddress
和
UKAddress
应用在实例文档中的
shipTo
和
billTo
元素。这些派生类型能够代替
Address
类型提供的内容模型,因为它们都是从
Address
类型派生出来的。然而,被派生类型替换是能够被控制的,具体的说,能够被类型定义中的
block
属性所控制。
举例来说,如果我们想组织任何通过约束而导出的派生类型在
Address
类型出现的地方被使用而替换
Address
类型
(
也许为了同样的理由我们定义
Address
的
final="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
类型。然而,它不会阻止
UKAddress
和
USAddress
来替换
Address
,因为它们是通过扩展而派生的。为了阻止所有的派生类型或者通过扩展而获得的派生类型去替代基类型,可以分别使用值
"#all"
和
"extension"
。和
final
属性一样,在模式文档的根元素
schema
元素里有一个可选的属性
blockDefault
,它的值为
block
属性所允许的值中的一个。
指定
blockDefault
属性的作用等价于在模式文档中为每个类型定义和元素声明指定
block
属性。
小结
本文主要围绕如何使用多个文档来组成目标的模式而展开讨论。
XML Schema
中为实现这一目标提供了多种机制:包括通过扩展和约束从基类型中派生新的类型;提供重定义机制从而依靠基类型的更新而使派生类型进行更新;利用置换组和抽象定义以及相应的机制来控制元素和类型在实例中的表现。总之,
XML Schema
提供了丰富的机制以支持大型的模式的撰写。
分享到:
相关推荐
【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计...
通过调用其`newSchema()`方法,可以加载XML Schema文档并创建相应的`XMLSchema`对象。 2. **XMLSchema**:这个类代表一个XML Schema定义。它可以用于验证XML文档,获取Schema中的元素、属性和其他组件的信息。 3. ...
XML Schema,全称为XML Schema Definition,是用于定义XML文档结构和数据类型的规范,它是W3C...在实践中,你需要解析XML Schema,生成符合Schema的XML文档,这将涉及到编程、XML处理和数据结构设计等多个方面的技能。
XML Schema是目前国际标准的XML建模工具,本文将对XML Schema进行详细的介绍,帮助读者初步掌握XML Schema的使用方法和XML Schema文档实例的具体语义。 1. 命名空间的使用 XML Schema中命名空间的使用是非常重要的...
- **XML Schema 定义**:XML Schema 是一种基于 XML 的语言,用于描述 XML 文档的结构。它定义了 XML 文档中可以出现的元素、属性及其结构,并且指定了元素和属性的数据类型。XML Schema 的完整名称为 XML Schema ...
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> </xs:schema> ``` 这个例子定义了一个`person`元素,包含`firstName`和`lastName`两个子元素,都是字符串类型。 2. **验证XML文档**:...
在Java中,XML Schema的验证可以使用javax.xml.validation包,提供了独立于模式语言的验证服务接口。该包提供了三个类来验证文档:SchemaFactory、Schema和Validator。 在实际应用中,XML Schema可以用于: 1. ...
XmlSchema-1.4.7.jar 是一个Java库,它实现了W3C的XML Schema标准,用于处理XML Schema文档。这个版本(1.4.7)可能是该库的一个稳定版本,提供给用户免费使用。XML Schema是XML的一种规范,定义了如何验证XML文档的...
赠送原API文档:xmlschema-core-2.1.0-javadoc.jar; 赠送源代码:xmlschema-core-2.1.0-sources.jar; 赠送Maven依赖信息文件:xmlschema-core-2.1.0.pom; 包含翻译后的API文档:xmlschema-core-2.1.0-javadoc-API...
`XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...
`xmlschema-core-2.0.3.jar` 是一个Java库,专门用于解析和操作XML Schema文档,它支持XML Schema 1.1标准。 在Spring Web服务中,XML Schema Core库扮演着关键角色。Spring Web Service框架是基于合同优先...
8. **XML Schema文档结构**:一个XML Schema文档通常以`<xs:schema>`元素作为根元素,然后定义元素、属性和其他组件。每个定义都有自己的唯一标识,用于引用和使用。 9. **使用XML Schema**:在实际应用中,XML文档...
XML Schema 是一种基于 XML 的 DTD 替代者,它可以描述 XML 文档的结构。XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。为了学习 XML Schema,需要具备的基础知识包括 HTML、XHTML、XML 以及 XML ...
如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 [提交内容] 提交book.xsd、book....
在“XMLSchema例子”文件中,你将看到这些概念如何实际应用于具体的XML Schema定义和XML文档实例。通过学习和理解这些例子,你将能够更好地掌握XML Schema的使用,从而更有效地设计和验证XML文档的结构。
XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大...
3. 可重用性:XML Schema文件可以在多个XML文档中重用,减少了开发和维护的成本。 4. 验证性:XML Schema提供了一个强大的工具来验证XML文档的结构和内容,确保了数据的正确性和一致性。 XML Schema的应用 1. 数据...
如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 某软件学院XML课程答案
压缩包里详细介绍了如何利用XML Spy这个软件新建一个XML Schema文档,内容非常充实,在网上找了很久自己整理好的,只要按照文档的步骤就可以很快学会如何使用XML Spy了,非常适合初次接触XML知识和XML Spy这个软件的...
模式文档通常以`.xsd`为扩展名,根元素是`<xs:schema>`,并需要声明`http://www.w3.org/2001/XMLSchema`名称空间。名称空间的使用使得XML Schema可以识别和处理具有相同名称但来自不同源的元素。 **引用模式文档** ...