XSD详解一

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSD详解一相关的知识,希望对你有一定的参考价值。

本分类下的文章主要是对W3School的文档进行整理:http://www.w3school.com.cn/x.asp

 

XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML 文档的结构。

XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。

 

一、XML Schema 简介

什么是 XML Schema?

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

XML Schema:

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

 

XML Schema 是 DTD 的继任者

我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。

理由如下:

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

 

XML Schema 是 W3C 标准

XML Schema 在 2001 年 5 月 2 日成为 W3C 标准。

 

二、为什么要使用 XML Schema?

XML Schema 比 DTD 更强大

XML Schema 支持数据类型

XML Schema 最重要的能力之一就是对数据类型的支持。

通过对数据类型的支持:

  • 可更容易地描述允许的文档内容
  • 可更容易地验证数据的正确性
  • 可更容易地与来自数据库的数据一并工作
  • 可更容易地定义数据约束(data facets)
  • 可更容易地定义数据模型(或称数据格式)
  • 可更容易地在不同的数据类型间转换数据

编者注:数据约束,或称 facets,是 XML Schema 原型中的一个术语,中文可译为“面”,用来约束数据类型的容许值。

 

XML Schema 使用 XML 语法

另一个关于 XML Schema 的重要特性是,它们由 XML 编写。

由 XML 编写 XML Schema 有很多好处:

  • 不必学习新的语言
  • 可使用 XML 编辑器来编辑 Schema 文件
  • 可使用 XML 解析器来解析 Schema 文件
  • 可通过 XML DOM 来处理 Schema
  • 可通过 XSLT 来转换 Schema

 

XML Schema 可保护数据通信

当数据从发送方被发送到接受方时,其要点是双方应有关于内容的相同的“期望值”。

通过 XML Schema,发送方可以用一种接受方能够明白的方式来描述数据。

一种数据,比如 "03-11-2004",在某些国家被解释为11月3日,而在另一些国家为当作3月11日。

但是一个带有数据类型的 XML 元素,比如:<date type="date">2004-03-11</date>,可确保对内容一致的理解,这是因为 XML 的数据类型 "date" 要求的格式是 "YYYY-MM-DD"。

 

XML Schema 可扩展

XML Schema 是可扩展的,因为它们由 XML 编写。

通过可扩展的 Schema 定义,您可以:

  • 在其他 Schema 中重复使用您的 Schema
  • 创建由标准类型衍生而来的您自己的数据类型
  • 在相同的文档中引用多重的 Schema

 

三、如何使用 XSD?

一个简单的 XML 文档:

请看这个名为 "note.xml" 的 XML 文档:

<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don‘t forget the meeting!</body>
</note>

 

XML Schema

下面这个例子是一个名为 "note.xsd" 的 XML Schema 文件,它定义了上面那个 XML 文档的元素:

<?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:element name="note">
    <xs:complexType>
      <xs:sequence>
    <xs:element name="to" type="xs:string"/>
    <xs:element name="from" type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>

</xs:schema>

 note 元素是一个复合类型,因为它包含其他的子元素。其他元素 (to, from, heading, body) 是简易类型,因为它们没有包含其他元素。您将在下面的章节学习更多有关复合类型和简易类型的知识。

 

对 XML Schema 的引用

此文件包含对 XML Schema 的引用:

<?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>

 

四、XSD - <schema> 元素

<schema> 元素是每一个 XML Schema 的根元素。

<schema> 元素

<schema> 元素是每一个 XML Schema 的根元素:

<?xml version="1.0"?>

<xs:schema>

...
...

</xs:schema>

 <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:指当前xsd所要遵循的标签规范,一般是http://www.w3.org/2001/XMLSchema
  • targetNamespace:当前xsd的命名空间,由作者自定义,供XML调用
  • elementFormDefault(qualified/unqualified):使用qualified即可,配置更清晰简单
  • attributeFormDefault(qualified/unqualified)

 

五、XSD 简易元素

XML Schema 可定义 XML 文件的元素。

简易元素指那些只包含文本的元素。它不会包含任何其他的元素或属性。

什么是简易元素?

简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。

不过,“仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。

 

定义简易元素

定义简易元素的语法:

<xs:element name="xxx" type="yyy"/>

 此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。

最常用的类型是:

  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

例子:

这是一些 XML 元素:

<lastname>Smith</lastname>
<age>28</age>
<dateborn>1980-03-27</dateborn>

 这是相应的简易元素定义:

<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/> 

 

简易元素的默认值和固定值

简易元素可拥有指定的默认值或固定值。

当没有其他的值被规定时,默认值就会自动分配给元素。

在下面的例子中,缺省值是 "red":

<xs:element name="color" type="xs:string" default="red"/>

 固定值同样会自动分配给元素,并且您无法规定另外一个值。

在下面的例子中,固定值是 "red":

<xs:element name="color" type="xs:string" fixed="red"/>

 

六、XSD 属性

 所有的属性均作为简易类型来声明。 

什么是属性?

简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。

 

如何声明属性?

定义属性的语法是:

<xs:attribute name="xxx" type="yyy"/>

 在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。

 实例

这是带有属性的 XML 元素:

<lastname lang="EN">Smith</lastname>

这是对应的属性定义:

<xs:attribute name="lang" type="xs:string"/>

 

属性的默认值和固定值

属性可拥有指定的默认值或固定值。

当没有其他的值被规定时,默认值就会自动分配给元素。

在下面的例子中,缺省值是 "EN":

<xs:attribute name="lang" type="xs:string" default="EN"/>

固定值同样会自动分配给元素,并且您无法规定另外的值。

在下面的例子中,固定值是 "EN":

<xs:attribute name="lang" type="xs:string" fixed="EN"/>

 

可选的和必需的属性

在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:

<xs:attribute name="lang" type="xs:string" use="required"/>

 

 转载请注明出处:http://www.cnblogs.com/cjh-notes/p/7986948.html

以上是关于XSD详解一的主要内容,如果未能解决你的问题,请参考以下文章

如果它对 xsd 无效,你能阻止节点插入到 XmlDocument 中吗?

XSD详解二 - 限定

针对包含 xsd:import without location 的 XSD 验证 XML

如何在 XSD 中定义互斥属性?

动态SQL基础概念复习(Javaweb作业5)

loback.xml 在idea中代码自动完成