XML(二)有效的XML: DTD(文档类型定义)介绍与三种使用方式

有效的XML: DTD(文档类型定义)介绍

有效(Valid)的XML文档

  首先,XML文档是个格式正规的(Well-formed)XML文档;

 

  其次,需要满足DTD的要求,这样的XML文档称为有效的(Valid)XML文档

 

DTD

 

  DTD,即文档类型定义——Document Type Definition。

 

  DTD用来描述XML文档的结构,

 

  一个DTD文档包含:

 

    元素(ELEMENT)的定义规则;

 

    元素之间的关系规则;

 

    属性(ATTLIST)的定义规则;

 

    可使用的实体(ENTITY)或符号(NOTATION)规则。

 

DTD文档与XML文档实例的关系

  类与对象;

  数据库表结构与数据记录;

 

 

  有了DTD,每个XML文件可以携带一个自身格式的描述。

 

  有了DTD,不同组织的人可以使用一个通用DTD来交换数据。

 

  应用程序可以使用一个标准DTD校验从外部世界接收来的XML数据是否有效。

 

  可以使用DTD校验自己的XML数据。

 

如何生成DTD文档

   DTD文档有三种应用形式:

 1.内部DTD文档

  

<!DOCTYPE 根元素[定义内容]>

 

 2.外部DTD文档

 

<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

 

 3.内外部DTD文档结合

 

<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [定义内容]>

 

 

内部DTD

  一个内部DTD的例子:

  上半部分是DTD,下面是XML文档,文档要符合DTD。

  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE poem [
    <!ELEMENT poem (author, title, content)>
    <!ELEMENT author (#PCDATA)>
    <!ELEMENT title (#PCDATA)>
    <!ELEMENT content (#PCDATA)>
]>
<!--为元素poem定义了三个子元素author title content,
这三个元素必须要出现并且必须按照这个顺序
少元素不行,多元素也不行
-->
<!--指明author,title,content里面的内容是字符串类型-->
<poem>
    <author>王维</author>
    <title>鹿柴</title>
    <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
</poem>

 

上面的文档就是格式良好,并且有效的。详见其中的注释。

#PCDATA(Parsed Character Data) ,可解析的字符数据,即字符串。

上面部分是DTD,在下面编写XML文档时,如果不符合其DTD规范,用XMLSpy做检查的时候,是well-formed的,但是却不是valid的。

<Students>
</Students>

 

Validate检查的时候就会报错,根元素和DTD中的poem不符。

 

外部DTD

上面是一个内部DTD的例子,下面用一个外部的DTD:

首先,新建一个DTD文档,文件名叫dtd_1.dtd,内容如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT poem (author, title, content)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT content (#PCDATA)>

 

然后,新建一个XML文档。

如果只写XML元素内容,那么它是一个格式良好的,却不是有效的文档,因为找不到DTD。

需要加入外部DTD文件的名称(同一个路径下只给出文件名即可)。

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE poem SYSTEM "dtd_1.dtd">
<poem>
    <author>王维</author>
    <title>鹿柴</title>
    <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
</poem>

 

内外部DTD结合

 DTD的内容也可以有些放在外部,有些放在内部,如下:

文件dtd_2.dtd

 

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>

 

XML文档:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE poem SYSTEM "dtd_2.dtd"[
<!ELEMENT poem (author, title, content)>
<!ELEMENT content (#PCDATA)>
]>
<poem>
    <author>王维</author>
    <title>鹿柴</title>
    <content>空山不见人,但闻人语声。返景入深林,复照青苔上。</content>
</poem>

    

 

posted @ 2016-05-14 12:25  Mirindasky  阅读(666)  评论(0编辑  收藏  举报