`

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

    博客分类:
  • J2EE
阅读更多

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元素可以直接将其指向另一个模块,使文档更加具有可读性。

 

分享到:
评论

相关推荐

    XMLSPY 2010 企业版

    支持Unicode、多字符集,支持Well-formed和Validated两种类型的XML文档,支持NewsML等多种标准XML文档的所见即所得的编辑,同时提供了强有力的样式表设计。  Altova希望其最新发布的XMLSpy会让XML代码的处理更容易...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    调用DTD文件的方法有两种: 1.直接包含在XML文档内的DTD 你只要在DOCTYPE声明中插入一些特别的说明就可以了,象这样: 我们有一个XML文档: &lt;?xml version="1.0" encoding="GB2312"?&gt; &lt;title&gt;XML轻松学习...

    疯狂xml讲义

    第一部分介绍了XML、DTD、XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的基础。第二部分介绍了CSS、XSLT和XPath等知识...

    疯狂XML讲义

    第一部分介绍了XML、DTD、XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的基础。第二部分介绍了CSS、XSLT和XPath等知识...

    tinyxml+tinyxpath组合编程套件,很好的编程工具,都是源码

    其次,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。 因此,解析器也分为两种,一种是验证的,即会跟据XML...

    疯狂XML讲义 源码

    第一部分介绍了XML、DTD、XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的基础。第二部分介绍了CSS、XSLT和XPath等知识...

    疯狂XML讲义.part3.rar

    第一部分介绍了XML、DTD、XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的基础。第二部分介绍了CSS、XSLT和XPath等知识...

    疯狂XML讲义(Web Service).pdf

    第一部分介绍了XML、DTD、XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的基础。第二部分介绍了CSS、XSLT和XPath等知识...

    疯狂XML讲义.part1

    第一部分介绍了XML、DTD、XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的基础。第二部分介绍了CSS、XSLT和XPath等知识...

    疯狂XML讲义.part2.rar

    第一部分介绍了XML、DTD、XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的基础。第二部分介绍了CSS、XSLT和XPath等知识...

    expat-win32bin-2.0.1

    但除此之外,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。因此,解析器也分为验证和非验证两种。是验证的会跟...

    电子书-《XML实用教程》高清晰PDF Part1(共2Parts)

    本书是学习和应用XML 语言的实用教材,书中阐述了XML 的基本概念、语法规则、文档类型定义(DTD)、Schema 结构、层叠样式单(CSS)、数据源对象(DSO)、文件转换(XSLT)、文档对象模型(DOM),还介绍了在Java、ASP 和.NET ...

    day023-xml解析笔记和代码.rar

    D Document 文档(XML文档) : 磁盘上面的xml文件 O Object 对象(Java对象) : 把xml文件封装成Java对象 M Model 模型 解析过程中用到的类: Document Node(节点) Element (元素) ...

    Java学习题答案

    (20分) 本题三个答题点: a: 两种形式 dtd,schema b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的 根本目的) c: 两种主要方式:dom,sax.答出两种得全分,如能答出saxt,...

    超级有影响力霸气的Java面试题大全文档

     Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常...

    Java语言基础下载

    定义XML文档 368 命名冲突 371 使用前缀解决命名冲突问题 371 使用命名空间 371 命名空间属性 372 统一资源标识符 372 默认的命名空间 372 使用命名空间 373 XML 文档规则 374 XML Schema 379 Schema和DTD的区别: ...

    springmybatis

    3. 在User.xml 文件里面 主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型等. 开始测试 在test_src 源码目录下建立com.yihaomen.test这个package,并建立测试类Test: 程序代码 程序代码 package ...

Global site tag (gtag.js) - Google Analytics