`
f543711700
  • 浏览: 322665 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转载]用Schema规范XML文档

阅读更多
[转载]用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组合器来实现子元素的嵌套。
分享到:
评论

相关推荐

    DTD和Schema规范XML文档

    [实验目的]: 1、掌握使用XMLSpy软件创建DTD和Schema文档 2、掌握在XML文档如何引入DTD和Schema,并验证有效 3、掌握DTD中声明元素、属性的方法 4、掌握Schema中声明元素,属性,类型的方法

    XML与XMLSchema

    XML发展历史概述 XML文档组成元素 XML Schema组成元素 XML相关API

    XML Schema教程

    XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强 大,...

    运用XML Spy新建XML Schema的教程

    压缩包里详细介绍了如何利用XML Spy这个软件新建一个XML Schema文档,内容非常充实,在网上找了很久自己整理好的,只要按照文档的步骤就可以很快学会如何使用XML Spy了,非常适合初次接触XML知识和XML Spy这个软件的...

    solrconfig.xml和schema.xml说明

    solrconfig.xml和schema.

    根据xml schema生成xml

    博文链接:https://sydxide2006.iteye.com/blog/127804

    XML - 实验(2) -- Schema

    1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单...

    理解XML Schema XML Schema进阶

    理解XML Schema XML Schema进阶

    XML Schema简明教程-W3C.rar

    在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。 什么是 XML Schema? XML Schema 的作用是定义 XML 文档的合法构建...

    西工大服务计算实验2-1_XML Schema

    编写程序,输出一个与XML Schema 相符合的 XML文档。

    Schema教程 xml

    XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 可描述 XML 文档的结构。 XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。

    XML Schema xsd XML Schema xsd

    XML Schema xsdXML Schema xsdXML Schema xsdXML Schema xsd

    《XML》实验(2) -- Schema

    1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单...

    xmlschema-core-2.1.0-API文档-中文版.zip

    赠送原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...

    apache xmlschema api文档

    apache 的xmlschema jar包的api文档,用于解析xml schema

    一个简单的XML Schema的例子

    Schema相对于DTD的明显好处是XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法。这就方便了用户和开发者,因为可以使用相同的工具来处理XML Schema和其他XML信息,而不必专门为Schema使用特殊工具...

    JSON-Schema定义规范

    熟悉XML的开发人员都知道,对XML文档的定义有一个XML Schema。同样,对于JSON文件的定义,也应该有一个JSON Schema以规范JSON文件内容。IETF负责起草相关规范最新版本是2018年3月19日发布的Draft 7。JSON Schema用以...

    XSD根据xml生成schema文件

    XSD根据xml生成schema文件

    XML Schema 教程(word版本)

    在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。 (注,以上文档完全是我整理的难点要点的笔记!)

    xml(schema定义)

    总结了使用schema定义xml文档的大部分内容。

Global site tag (gtag.js) - Google Analytics