`
ronry
  • 浏览: 39892 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

XML Schema (1)

    博客分类:
  • xml
阅读更多

 

XML Schema

0 概述

         XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。它的作用如下:

  • 定义可出现在文档中的元素
  • 定义可出现在文档中的属性
  • 定义哪个元素是子元素
  • 定义子元素的次序
  • 定义子元素的数目
  • 定义元素是否为空,或者是否可包含文本
  • 定义元素和属性的数据类型
  • 定义元素和属性的默认值以及固定值

XML SchemaDTD的替代方案,对比难以理解且又不灵活的DTDXML Schema有一下优点:

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

1 XMLXML Schema申明

         在一般xml文档的根元素中经常会有一堆URI,那么他们有什么作用呢?例如下面的xml文档:

<?xml version="1.0"?>
<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

其根元素每一部分的作用如下:

xmlns="http://www.w3school.com.cn" 

这一段规定了默认命名空间的声明。此声明会告知 schema 验证器,在此 XML 文档中使用的所有元素都被声明于 "http://www.w3school.com.cn" 这个命名空间;

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

这一段告知XML解析器根据某个 schema 来验证此文档;

xsi:schemaLocation="http://www.w3school.com.cn note.xsd"

这一段则进一步标识了要使用的 XML schema 的位置。

同样,因为schema也是用xml编写的,因此schema的根元素中也会有一堆类似的申明,例如对于如下schema

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
...
</xs:schema>

下面的片断:

xmlns:xs="http://www.w3.org/2001/XMLSchema"

显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs

这个片断:

targetNamespace="http://www.w3school.com.cn" 

显示被此 schema 定义的元素 (note, to, from, heading, body) 的命名空间为: "http://www.w3school.com.cn"

这个片断:

xmlns="http://www.w3school.com.cn" 

指出默认的命名空间是 "http://www.w3school.com.cn"(在指定了xmlns:xs属性后,默认命名空间是不是就没什么意义了呢?)

elementFormDefault="qualified" 

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。

2 XSD(XML Schema Definition)数据类型

       Schema中第一的元素或者属性,其值都是有类型的。这个类型可以是Schema的内置类型,也可以是自定义的复杂类型。本节介绍Schema的内置类型。

2.1 字符串数据类型

2.1.1 字符串数据类型

字符串数据类型用于可包含字符串的值,包括:字符、换行、回车以及制表符。

下面是一个关于某个 scheme 中字符串声明的例子:

<xs:element name="customer" type="xs:string"/>

文档中的元素看上去应该类似这样:

<customer>John Smith</customer>
或者类似这样:
<customer>       John Smith       </customer>

注释:如果您使用字符串数据类型,XML 处理器就不会更改其中的值。

2.1.2 规格化字符串类型

规格化字符串数据类型源自于字符串数据类型。同样可包含字符,但是 XML 处理器会移除换行,回车以及制表符。

下面是一个关于在某个 schema 中规格化字符串数据类型的例子:

<xs:element name="customer" type="xs:normalizedString"/>

文档中的元素看上去应该类似这样:

<customer>John Smith</customer>
或者类似这样:
<customer>       John Smith       </customer>

注释:在上面的例子中,XML 处理器会使用空格替换所有的制表符。

2.1.3 Token数据类型

Token 数据类型同样源自于字符串数据类型,同样可包含字符,但是 XML 处理器会移除换行符、回车、制表符、开头和结尾的空格以及(连续的)空格。

下面是在 schema 中一个有关 token 声明的例子:

<xs:element name="customer" type="xs:token"/>

文档中的元素看上去应该类似这样:

<customer>John Smith</customer>
或者类似这样:
<customer>       John Smith       </customer>

注释:在上面这个例子中,XML 解析器会移除制表符。

2.1.4 字符串数据类型汇总
       除了上述提及的3种字符串类型,还有其他的继生于字符串数字类型的类型,如下:

 

名称

描述

ENTITIES

 

ENTITY

 

ID

XML 中提交 ID 属性的字符串 (仅与 schema 属性一同使用)

IDREF

XML 中提交 IDREF 属性的字符串(仅与 schema 属性一同使用)

IDREFS language

包含合法的语言 id 的字符串

Name

包含合法 XML 名称的字符串

NCName

 

NMTOKEN

XML 中提交 NMTOKEN 属性的字符串 (仅与 schema 属性一同使用)

NMTOKENS

 

而可与字符串数据类型一同使用的限定有(关于限定的内容后面再详细说明)

  • enumeration
  • length
  • maxLength
  • minLength
  • pattern (NMTOKENSIDREFS 以及 ENTITIES 无法使用此约束)
  • whiteSpace

2.2 日期和实践数据类型

2.2.1 日期数据类型

日期数据类型用于定义日期,日期使用此格式进行定义:"YYYY-MM-DD",其中:YYYY 表示年份;MM 表示月份;

DD 表示天数。所有的成分都是必需的!

下面是一个有关 schema 中日期声明的例子:

<xs:element name="start" type="xs:date"/>

文档中的元素看上去应该类似这样:

<start>2002-09-24</start>

如需对日期规定一个时区,您也可以通过在日期后加一个 "Z" 的方式,使用世界调整时间(UTC time)来输入一个日期 - 比如这样:

<start>2002-09-24Z</start>

或者也可以通过在日期后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

<start>2002-09-24-06:00</start>

或者:

<start>2002-09-24+06:00</start>
2.2.2 时间数据类型

时间数据类型用于定义时间,时间使用下面的格式来定义:"hh:mm:ss",其中hh 表示小时;mm 表示分钟;

ss 表示秒。所有的成分都是必需的!

下面是一个有关 schema 中时间声明的例子:

<xs:element name="start" type="xs:time"/>

文档中的元素看上去应该类似这样:

<start>09:00:00</start>

或者类似这样:

<start>09:30:10.5</start>

如需规定一个时区,您也可以通过在时间后加一个 "Z" 的方式,使用世界调整时间(UTC time)来输入一个时间 - 比如这样:

<start>09:30:10Z</start>

或者也可以通过在时间后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

<start>09:30:10-06:00</start>

或者:

<start>09:30:10+06:00</start>
<!--[if !supportLists]-->2.2.3    <!--[endif]-->日期时间数据类型

日期时间数据类型用于定义日期和时间,日期时间使用下面的格式进行定义:"YYYY-MM-DDThh:mm:ss",每一部分的含义同日期数据类型和时间数据类型(而T 表示时间部分的开始)。同样,所有的成分都是必需的!

下面是一个有关 schema 中日期时间声明的例子:

<xs:element name="startdate" type="xs:dateTime"/>

文档中的元素看上去应该类似这样:

<startdate>2002-05-30T09:00:00</startdate>

或者类似这样:

<startdate>2002-05-30T09:30:10.5</startdate>

如需规定一个时区,您也可以通过在日期时间后加一个 "Z" 的方式,使用世界调整时间(UTC time)来输入一个日期时间 - 比如这样:

<startdate>2002-05-30T09:30:10Z</startdate>

或者也可以通过在时间后添加一个正的或负时间的方法,来规定以世界调整时间为准的偏移量 - 比如这样:

<startdate>2002-05-30T09:30:10-06:00</startdate>

或者:

<startdate>2002-05-30T09:30:10+06:00</startdate>
<!--[if !supportLists]-->2.2.4    <!--[endif]-->持续时间数据类型

持续时间数据类型用于规定时间间隔,时间间隔使用下面的格式来规定:"PnYnMnDTnHnMnS",其中:

  • P 表示周期(必需)
  • nY 表示年数
  • nM 表示月数
  • nD 表示天数
  • T 表示时间部分的起始 (如果您打算规定小时、分钟和秒,则此选项为必需)
  • nH 表示小时数
  • nM 表示分钟数
  • nS 表示秒数

下面是一个有关 schema 中持续时间声明的例子:

<xs:element name="period" type="xs:duration"/>

文档中的元素看上去应该类似这样:

<period>P5Y</period>

上面的例子表示一个 5 年的周期。

或者类似这样:

<period>P5Y2M10D</period>

上面的例子表示一个 5 年、2 个月及 10 天的周期。

或者类似这样:

<period>P5Y2M10DT15H</period>

上面的例子表示一个 5 年、2 个月、10 天及 15 小时的周期。

或者类似这样:

<period>PT15H</period>

上面的例子表示一个 15 小时的周期。

如需规定一个负的持续时间,请在 P 之前输入减号:

<period>-P10D</period>

上面的例子表示一个负 10 天的周期???

<!--[if !supportLists]-->2.2.5    <!--[endif]-->日期时间数据类型综合

除上述的日期和时间数据类型之外,还有其他形式的日期和时间数据类型,如下:

名称

描述

gDay

定义日期的一个部分 - (DD)

gMonth

定义日期的一个部分 - (MM)

gMonthDay

定义日期的一个部分 - 月和天 (MM-DD)

gYear

定义日期的一个部分 - (YYYY)

gYearMonth

定义日期的一个部分 - 年和月 (YYYY-MM)

time

定义一个时间值

可与日期数据类型一同使用的限定则有:

  • enumeration
  • maxExclusive
  • maxInclusive
  • minExclusive
  • minInclusive
  • pattern
  • whitespace

<!--[if !supportLists]-->2.3       <!--[endif]-->数值数据类型

2.3.1 十进制数据类型

十进制数据类型用于规定一个数值,可规定的十进制数字的最大位数是 18 位(其实就是浮点数)。下面是一个关于某个 scheme 中十进制数声明的例子。

<xs:element name="prize" type="xs:decimal"/>

文档中的元素看上去应该类似以下情况:

<prize>999.50</prize>
<prize>+999.5450</prize>
<prize>-999.5230</prize>
<prize>0</prize>
<prize>14</prize>
2.3.2 数字数据类型综合

       可用的数字数据类型共有:

名字

秒数

byte

有正负的 8 位整数

decimal

十进制数

int

有正负的 32 位整数

integer

整数值

long

有正负的 64 位整数

negativeInteger

仅包含负值的整数 ( .., -2, -1.)

nonNegativeInteger

仅包含非负值的整数 (0, 1, 2, ..)

nonPositiveInteger

仅包含非正值的整数 (.., -2, -1, 0)

positiveInteger

仅包含正值的整数 (1, 2, ..)

short

有正负的 16 位整数

unsignedLong

无正负的 64 位整数

unsignedInt

无正负的 32 位整数

unsignedShort

无正负的 16 位整数

unsignedByte

无正负的 8 位整数

而可与数值数据类型一同使用的限定有:

EnumerationfractionDigitsmaxExclusivemaxInclusiveminExclusiveminInclusivepatterntotalDigitswhiteSpace

 

分享到:
评论

相关推荐

    根据xml schema生成xml

    &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt; &lt;/xs:schema&gt; ``` 这个例子定义了一个`person`元素,包含`firstName`和`lastName`两个子元素,都是字符串类型。 2. **验证XML文档**:...

    XmlSchema-1.4.6.jar

    `XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    XML与XMLSchema

    【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计...

    理解XML Schema XML Schema进阶

    XML Schema是目前国际标准的XML建模工具,本文将对XML Schema进行详细的介绍,帮助读者初步掌握XML Schema的使用方法和XML Schema文档实例的具体语义。 1. 命名空间的使用 XML Schema中命名空间的使用是非常重要的...

    XML文件XML Schema.docXML Schema.doc

    "XML Schema知识点" XML Schema是XML语言为基础的,它用于可替代DTD。它用于描述XML文档的结构。XML Schema语言也被称为XML Schema Definition(XSD)。XML Schema的作用是定义一份XML文档的合法组件群,就像DTD的...

    xmlschema-core-2.0.3的jar

    `xmlschema-core-2.0.3.jar` 是一个Java库,专门用于解析和操作XML Schema文档,它支持XML Schema 1.1标准。 在Spring Web服务中,XML Schema Core库扮演着关键角色。Spring Web Service框架是基于合同优先...

    XML Schema教程

    ### XML Schema 教程知识点详解 #### 一、XML Schema 概述 - **XML Schema 定义**:XML Schema 是一种基于 XML 的语言,用于描述 XML 文档的结构。它定义了 XML 文档中可以出现的元素、属性及其结构,并且指定了...

    XmlSchema-1.4.7.jar

    XmlSchema-1.4.7.jar 是一个Java库,它实现了W3C的XML Schema标准,用于处理XML Schema文档。这个版本(1.4.7)可能是该库的一个稳定版本,提供给用户免费使用。XML Schema是XML的一种规范,定义了如何验证XML文档的...

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

    在本实验"西工大服务计算实验2-1_XML Schema"中,你的任务是编写一个程序,生成符合特定XML Schema定义的XML文档。这涉及到对XML Schema的理解、XML文档的创建以及编程技术的应用。 首先,我们需要理解XML Schema的...

    XmlSchema-1.1.jar

    XmlSchema-1.1.jar XmlSchema-1.1.jar

    XMLSchema.chm

    这个“XMLSchema.chm”文件很可能是一个帮助文档,旨在为学习XML Schema的用户提供详细的指导和参考资料。下面我们将深入探讨XML Schema的相关知识点。 1. **XML Schema的作用**:XML Schema的主要功能是规范XML...

    XmlSchema-1.4.7 jar包

    好不容易找到的XmlSchema-1.4.7 jar包,需要的同学速度下载吧。不黑心,只要1分~~~

    XMLSchema经典例题

    在“XMLSchema经典例题”中,我们可以深入探讨以下几个核心知识点: 1. **基本元素和类型定义**:XML Schema允许定义基本数据类型,如字符串、整数、浮点数等,并且可以自定义复杂的数据类型。例如,你可以创建一个...

    xmlschema实验及答案.doc

    1. 可扩展性:XML Schema提供了一种灵活的方式来定义XML文档的结构,可以根据需要添加或删除元素和属性。 2. 可读性:XML Schema文件使用XML语法,易于阅读和理解。 3. 可重用性:XML Schema文件可以在多个XML文档中...

    apache xmlschema api文档

    在描述中提到的"apache的xmlschema jar包的api文档"是开发者理解和使用这个API的关键资源。它通常包含详细的方法、类和接口的说明,以及如何使用它们的例子。这些文档能够帮助开发者了解如何在Java程序中导入和使用...

    xmlschema-core-2.0.3.jar

    xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar

    XML Schema简明教程-W3C.rar

    XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用程序中读取和创建 XML ...

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

    赠送jar包:xmlschema-core-2.1.0.jar; 赠送原API文档:xmlschema-core-2.1.0-javadoc.jar; 赠送源代码:xmlschema-core-2.1.0-sources.jar; 赠送Maven依赖信息文件:xmlschema-core-2.1.0.pom; 包含翻译后的API...

Global site tag (gtag.js) - Google Analytics