[转载]用Schema规范XML文档
XML Schema 是基于 XML 的 DTD 替代者。XML Schema也称为XML框架或XML模式。通过Schema可以描述和规范XML文档的数据模式和组织结构,规定XML文档中可以包含哪些元素、这些元素拥有哪些子元素及其出现的顺序和次数,还规定每个元素和属性的数据类型。与DTD相比,通过XML Schema可以更好地规范和验证有效的XML文档。
一、Schema文档结构
XML Schema总是以独立文档形式存在,其文件扩展名为.xsd。XML Schema文档本身就是一个符合XML规范的、格式良好的XML文档,该文档通过一套预先定义的XML元素及其属性创建的,正是这些特定的元素和属性规定了XML文档的结构和内容模式。
1、Schema基本结构
Schema文档从一个XML文档声明开始,其后的内容是对根元素schema的声明。根据需要,还可以从一个Schema文档中包含或导入其他Schema文档。
Schema文档的基本框架可以描述如下:
<?xml version="1.0" encoding="gb2312"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="URI">
<xsd:include schemaLocation="URI" />
<xsd:import namespace="URI" schemaLocation="URI" />
<!--元素和属性声明-->
</xs:schema>
其中,xsd:schema表示Schema文档根元素;xmlns:xsd属性把XML Schema名称空间映射到前缀xsd,W3C在该名称空间中定义了很多元素,用于定义其他XML文档的语义约束;targetNamespace属性指定一个目标名称空间,在Schema文档中声明的全局元素、属性、类型或组等都属于该名称空间。
在一个Schema文档中可以包含或导入其他Schema文档来形成模式。若其他Schema文档与当前Schema文档具有相同的目标名称空间,则可以通过xsd.include元素包含其他Schema文档,用schemaLocation属性指定要包含的模式文档;若其他Schema文档与当前Schema文档分别拥有不同的目标名称空间,则通过xsd:import元素包含其他Schema文档,用namespace属性指定该模式的命名空间,用schemaLocation属性指定要导入的模式文档。
在Schema文档中,schema元素的子元素是全局元素,全局元素的属性为全部属性,而其他元素或属性则为局部元素或局部属性。
2、在XML文档中引入Schema
根据Schema根元素是否包含目标名称空间,可以通过两种方式来引入Schema文档:
a、若在Schema文档中对根元素指定了targetNamespace属性,则在XML文档中通过其根元素的xsi:schemaLocation属性来引用Schema文档:
<?xml version="1.0"?>
<rootelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="URI"
elementFormDefault="qualified"|"unqulified"
attributeFormDefault="qualified"|"unqulified">
...
</rootelement>
其中,rootelement表示XML文档的根元素,xsi:schemaLocation属性指定要引用的Schema文档的URInate,此URI由两部分构成:一部分是Schema根元素的targetNamespace属性值,另一部分是Schema文档的完整路径,这两部分之间用空格分隔。
elementFormDefault属性指定如何限定XML文档中的元素。若把elementFormDefault属性设置为qualified,则表示在XML文档中必须使用前缀或通过设置默认名称空间来显式限定所有元素,而且默认名称空间应当与Schema根元素的目标名称空间保持一致。若把该属性设置为unqualified,则意味着只有全局元素才必须被显式限定,局部声明的元素不得被限定。在这种情形下,限定一个局部声明时错误的。
同样的,attributeFormDefault属性参数的含义相同。
b、若在Schema文档中未对根元素指定targetNamespace属性,则在XML文档中通过其根元素的xsi:noNamespaceSchemaLocation属性来引用Schema文档:
<?xml version="1.0"?>
<rootelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="URI"
elementFormDefault="qualified"|"unqulified"
attributeFormDefault="qualified"|"unqulified">
...
</rootelement>
二、Schema元素声明
在Schema中,可以通过元素声明来规定XML文档使用的元素名称、元素内容及元素的数据类型等属性。每个Schema的根元素都是xsd:schema,其他元素声明必须包含在这个根元素内部。
1、声明简单元素
在Schema中,简单元素是只能包含字符串的元素。声明为:
<xsd:element name="元素名" type="数据类型" minOccurs="最少出现次数" maxOccurs="最多出现次数" default="默认值" fixed="固定值" />
2、声明复合元素
在Schema中,复合元素是指包含子元素或属性的元素。复合元素可使用<xsd:element>和</xsd:element>标记来声明,此外,还需要把其子元素或属性包含在<xsd:complexType>与</xsd:complexType>之间。
子元素之间的逻辑关系分为有序、无序和互斥三种类型:
引用
<xsd:sequence>...</xsd:sequece>:用于组合有序子元素
<xsd:all>...</xsd:all>:用于组合无序子元素
<xsd:choice>...</xsd:choice>:用于组合互斥子元素
3、引用元素
在Schema中,每个元素都可以声明为一个独立的元素。声明一个复合元素时,对其子元素的声明可以通过元素引用方式来实现。语法格式为:
<xsd:element ref="elementname" ... />
其中,elementname表示另一个元素的名称。通常,是先通过<xsd:element>定义元素,然后使用该引用方式导入对应的元素中。
三、Schema属性声明
在Schema中,属性的值只能是简单类型,只能包含文本数据。属性是没有顺序的,而元素是有顺序的。虽然元素的功能比属性强大,但在某些场合,属性时很有用的。一般而言,对于元数据,使用属性;对于数据,则使用元素。属性声明用于命名属性,并使之与某个特定的简单数据类型相关联。
在Schema中,属性通过xsd:attribute元素来声明,语法格式如下:
<xsd:attribute name="属性名" type="数据类型" ... />
xsd:attribute元素具有以下属性:
引用
name:指定属性的名称;
id:指定属性的数据类型;
type:指定属性的数据类型;
ref:用于引用属性名称;
default:指定属性的默认值;
fixed:指定属性的固定值;
use:指定如何使用属性,有三个取值:optional表示属性时可选的(默认值),prohibited表示该属性时固定的(此时必须指定fixed属性),required指定该属性是必需的。
四、Schema数据类型
在Schema中,数据类型分为简单类型和复杂类型,前者只能包含字符数据,后者既可以包含字符数据,也可以包含子元素和属性。
1、简单类型
常用的简单数据类型有:
引用
boolean:布尔型数据;
date:日期型数据,其格式为YYYY-MM-DD;
dateTime:日期时间型数据,包含日期和时间,其格式为YYYY-MM-DDThh:mm:ss;
decimal:表示任何精度的十进制数字;
integer:整形数据;
nonNegativeInteger:表示大于或等于0的整数;
nonPositiveInteger:表示小于或等于0的整数;
在Schema中,除了直接使用上述简单类型声明元素或属性的数据类型外,还可以把一种简单类型作为基础,通过添加额外的限制创建自定义简单数据类型。
自定义简单数据类型时,首先通过xsd:simpleType元素定义一种简单数据类型,然后对简单数据类型通过xsd:restriction添加限制来实现,语法是:
<xsd:simpleType name="类型名称">
<xsd:restriction id="约束标识" base="基类型">
<!-- 对简单类型添加的约束 -->
</xed:restriction>
</xsd:simpleType>
base规定该约束所使用的基类型,也就是上述提到的简单数据类型之一。在xsd:restriction元素内部,可以通过按任意顺序对该类型进行以下限制:
引用
enumeration:指定元素或属性的值为枚举类型,只能从可能值列表中选取一个;
fractionDigit:指定小数点后面的最大位数,仅用于限制任意精度的十进制数字;
length:指定元素或属性包含的字符个数;
minExclusive:指定元素或属性的下限值,元素或属性必须大于该值;
maxExclusive:上限值,必须小于该值;
minLength:指定字符串的最小长度;
maxLength:指定字符串的最大长度;
minInclusive:指定元素或属性值的下限值,元素或属性值必须大于或等于该值;
maxInclusive:上限值,必须小于或等于该值;
pattern:指定数据值必须匹配的正规表达式模式;
totalDigits:指定有效数字的位数;
whiteSpace:指定对字符串中空白的处理方式。有三个取值:preserve表示保留空白;replace指定用空格代替所有制表符、换行符和回车符;collapse执行replace操作并删除相邻的、开头处和结尾处的空格。
2、复杂类型
复杂类型就是可以包含其他元素或属性,在Schema中,复杂类型用xsd:complexType元素定义。在xsd:complexType元素中,可以用xsd:attribute元素定义属性,也可以通过sequence、all、choice组合器来实现子元素的嵌套。
分享到:
相关推荐
[实验目的]: 1、掌握使用XMLSpy软件创建DTD和Schema文档 2、掌握在XML文档如何引入DTD和Schema,并验证有效 3、掌握DTD中声明元素、属性的方法 4、掌握Schema中声明元素,属性,类型的方法
这篇博客文章“根据XML Schema生成XML”探讨了如何使用XML Schema来创建符合规范的XML文档。 首先,理解XML Schema的基本元素是关键。XML Schema定义了一系列的元素(element)、属性(attribute)和数据类型(data...
XML Schema是XML文档的验证工具,它定义了一种形式化的语言来描述XML文档的结构和数据类型。XML Schema组成元素包括: - **数据类型**:如字符串、整数、日期等,用于限制元素或属性的值。 - **元素声明**:定义元素...
XML Schema,全称为XML Schema Definition,是用于定义XML文档结构和数据类型的规范,它是W3C(World Wide Web Consortium)制定的一种标准。在本实验"西工大服务计算实验2-1_XML Schema"中,你的任务是编写一个程序...
XML Schema教程 XML Schema是一种基于XML的文档类型定义(DTD)替代方案,它提供了更为强大且灵活的方式来描述...通过学习和使用XML Schema,开发者可以创建更规范、更易于维护的XML文档,提高数据的准确性和一致性。
1. **XML Schema(XSD)**:XML Schema是W3C制定的标准,用以定义XML文档的结构和数据类型。XSD文件使用XML语法来创建,可以指定元素、属性、数据类型、顺序和重复性等约束。 2. **XML文档验证**:在处理XML数据时...
压缩包里详细介绍了如何利用XML Spy这个软件新建一个XML Schema文档,内容非常充实,在网上找了很久自己整理好的,只要按照文档的步骤就可以很快学会如何使用XML Spy了,非常适合初次接触XML知识和XML Spy这个软件的...
- **XML Schema 定义**:XML Schema 是一种基于 XML 的语言,用于描述 XML 文档的结构。它定义了 XML 文档中可以出现的元素、属性及其结构,并且指定了元素和属性的数据类型。XML Schema 的完整名称为 XML Schema ...
它是XML 1.0规范的一部分,提供了一个强大的工具来描述和验证XML文档。 XML Schema的优点是: * 强大的描述能力:XML Schema可以定义复杂的数据类型和结构,能够描述XML文档的各个方面。 * 扩展能力强:XML Schema...
XML Schema是目前国际标准的XML建模工具,本文将对XML Schema进行详细的介绍,帮助读者初步掌握XML Schema的使用方法和XML Schema文档实例的具体语义。 1. 命名空间的使用 XML Schema中命名空间的使用是非常重要的...
这些文档能够帮助开发者了解如何在Java程序中导入和使用XML Schema API,从而实现XML文档的解析和验证。 以下是XML Schema API中的几个关键组件和概念: 1. **XMLSchemaFactory**:这是创建XML Schema对象的工厂类...
XSD(XML Schema Definition)则是用来定义XML文档结构和数据类型的规范,它为XML提供了严格的语法规则,确保了数据的一致性和有效性。本篇文章将深入探讨如何根据XML文件生成对应的XSD schema文件,以便更好地管理...
"XML Schema知识点" XML Schema是XML语言为基础的,它用于可替代DTD。它用于描述XML文档的结构。XML Schema语言也被...XML Schema是XML文档的结构描述语言,它具有强大的功能和可扩展性,是XML文档的标准描述语言。
XML DTD(文档类型定义)是较早出现的规范,而XML Schema则在2001年成为W3C的正式推荐标准,旨在提供更强大和灵活的XML文档验证功能。 首先,XML Schema在格式上与XML保持一致,这意味着XML Schema本身就是XML文档...
同时,本实验也可以帮助学生更好地理解XML文档的结构和约束,并掌握如何使用XML Schema来描述和验证XML文档。 知识点: 1. XML Schema的定义和应用 XML Schema是一种基于XML的模式语言,用于定义XML文档的结构和...
【XML Schema初窥】 XML Schema 是一种XML文档结构定义语言,由W3C于1998年开始制定,2001年5月2日发布1.0版...通过学习和熟练掌握XML Schema,开发者能够更好地控制和管理XML文档的规范性,确保数据的准确性和一致性。
XML Schema 是一种基于 XML 的规范,用于定义 XML 文档的结构和数据类型。它是 Document Type Definition (DTD) 的现代替代品,提供了更多功能和灵活性。XML Schema 的主要目标是为 XML 文档提供一种严格的形式化...
1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单...
XML Schema是XML的一种规范,定义了如何验证XML文档的结构和数据类型,确保数据的准确性和一致性。 XML Schema(XSD)标准是用来定义XML文档的结构和数据类型的,它比早期的DTD(Document Type Definition)提供了...
在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。 什么是 XML Schema? XML Schema 的作用是定义 XML 文档的合法构建...