微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XML 文档定义的两种形式DTD,SCHEMA

http://wlt2008-com.iteye.com/blog/1072747

http://www.w3school.com.cn/schema/schema_howto.asp

XML DTD是目前使用比较广泛的一种XML模式,而XML SCHEMA是W3C官方推荐的XML定义格式。

DTD 指定:可以在文档中存在的元素、那些元素可以具有的属性、在元素内部元素的层次结构以及元素在整个文档中出现的顺序。

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

结构良好的XML文档——如果某个文档符合XML语法规范,那么我们就说这个文档是“结构良好”的文档。使用本书讲到的XMLSpy 2006工具就可以测试某文档是否为结构良好的XML文档。

有效的XML文档——所谓有效的XML文档是指通过了DTD的验证的,具有良好结构的XML文档,在此大家要明白XML文档可分为结构良好的XML文档和有效的XML文档,以及他们之间的关系。即具有结构良好的XML文档并不一定就是有效的XML文档,反之一个有效的XML文档必定是一个结构良好的XML文档。

xml schema 与 xml dtd 区别:

XML Schema和DTD都用于文档验证,但二者还有一定区别,本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)。另外:

XML Schema是内容开放模型,可扩展,功能性强;而DTD可扩展性差;

XML Schema支持丰富的数据类型,而DTD不支持元素的数据类型,对属性的类型定义也很有限;

XML Schema支持命名空间机制,而DTD不支持

XML Schema可针对不同情况对整个XML文档或文档局部进行验证;而DTD缺乏这种灵活性;

XML Schema完全遵循XML规范,符合XML语法,可以和DOM结合使用,功能强大;而DTD语法本身有自身的语法和要求,难以学习;

1. 最简单的Schema文档
如何写一个最简单的XML Schema文档呢?

首先,我们写出一个最简单的XML文档。

hello.xml

-------------------

<?xml version="1.0"?>

<greeting>Hello World!!</greeting>

<!--一个根元素:greeting;且这个元素不含属性,无子元素,内容是字符串。-->

hello.xsd

----------

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="greeting" type="xsd:string"/>
</xsd:schema>

XML Schema文档后缀名是.xsd,完全符合XML语法,根元素是schema,命名空间xmlns:xsd="http://www.w3.org/2001/XMLSchema,用元素<element>定义实例文档中的元素,如greeting。

2. 含子元素的Schema文档
假设实例文档是如下的:

customer.xml

-----------

<customer>

<name>teiki</name>

<address>No.237,Road Waitan,Shanghai</address>

</customer>

则可以写出以下的XML Schema文档:

customer.xsd

----------------

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="customer">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="name" type="xsd:string"/>

<xsd:element name="address" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

实例文档customer.xml中,<customer>元素含有两个子元素,所以我们在Schema文档中采用ComplexType来定义该元素。sequence表示子元素依次出现的顺序。

3. 含子元素和孙元素的Schema文档
这次我们给出一个更加复杂一些的文档:

customer.xml

---------------

<customer>

<name>Teiki</name>

<address>

<!-- address追加一个地址子元素 -->

<prefecture>Zhejiang</prefecture>

<city>Hangzhou</city>

<street>Xilu Road,No.121,7F</street>

</address>

</customer>

为此,我们需要一个更加复杂一点的Schema文档:

address.xsd

-----------------

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="customer">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="name" type="xsd:string"/>

<!-- 追加子元素address-->

<xsd:element name="address">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="prefecture" type="xsd:string"/>

<xsd:element name="city" type="xsd:string" />

<xsd:element name="street" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

不过,我们还可以采用ref元素来重新编写这个Schema文档:

address2.xsd

----------------------

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="customer">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="name" type="xsd:string"/>

<xsd:element ref="address"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name="address">

<xsd:complexType>

<xsd:sequence>

<xsd:element name="prefecture" type="xsd:string"/>

<xsd:element name="city" type="xsd:string" />

<xsd:element name="street" type="xsd:string" />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

使用ref元素可以直接将其指向另一个模块,使文档更加具有可读性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类