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

原创 2017-01-11 14:15:02 568
摘要:文档类型定义和命名空间  有效(Valid)的XML文档:  首先,XML文档是个格式正规的(Well-formed)XML文档;(见格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节)。  其次,需要满足DTD的要求,这样的XML文档称为有效的(Valid)XML文档。  DTD  DTD,即文档类型定义——Document Type Definition。 

文档类型定义和命名空间

  有效(Valid)的XML文档:

  首先,XML文档是个格式正规的(Well-formed)XML文档;(见格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节)。

  其次,需要满足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>


发布手记

热门词条