`

DTD笔录

阅读更多

主要内容:

①如何描述 XML 文档的结构;

②如何使用 DTD 来定义一个 XML 文档的合法元素,以及如何在您的 XML 内部或者作为一个外部引用来声明 DTD;

③如何为 XML 文档声明合法的元素、属性、实体以及 CDATA 部分;

④如何根据某个 DTD 来验证一个 XML 文档

 

(1)简介

DTD(document type defined文档类型定义)的作用是定义 XML 文档的合法构建模块。可被成行地声明于 XML 文档中(内部文档声明),也可作为一个外部引用(外部文档声明)

①内部的 DOCTYPE 声明:

假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 DOCTYPE 声明中:

<!DOCTYPE root-element(根元素)[element-declarations(元素声明)]>

②外部文档声明:

假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

<!DOCTYPE root-element(根元素) SYSTEM(系统)"filename">

③作用:

通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述;并且独立的团体可一致地使用某个标准的 DTD 来交换数据。

应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据,还可以使用 DTD 来验证您自身的数据。

 

(2)XML构建模块

XML 和 HTML文档的主要的构建模块是元素标签

①XML 文档构建模块

所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:元素,属性,实体,PCDATA,CDATA

下面依次解析各个构成:

1 . 元素是 XML 以及 HTML 文档的主要构建模块,元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 "hr"、"br" 以及 "img";

2 . 属性可提供有关元素的额外信息,且总是被置于某元素的开始标签中;

3 . 实体(实体引用/字符)是用来定义普通文本的变量。实体引用是对实体的引用,当文档被 XML 解析器解析时,实体就会被展开;

4 . PCDATA(parsed character data解析字符数据)是会被解析器解析的文本。

这些文本将被解析器检查实体以及标记,文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们;

5. CDATA(character data字符数据)是不会被解析器解析的文本,在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

【拓展】

CDATA:属性声明中的类型,就是字符串,&、<、“”和‘’ 等都具有特殊含义被解析,例如:&quot;解析为双引号,一般指不由 XML 解析器进行解析的文本数据;

PCDATA:元素声明中的类型,指的是混合类型,即可以包子元素也可包含字符串, &和<也是具有特殊含义被解析。它是XML解析器解析的文本数据使用的一个术语。XML 文档中的文本通常解析为字符数据,或者(按照文档类型定义术语)称为 PCDATA

 

(3)DTD元素

DTD元素通过元素声明来声明元素

【声明一个元素】

元素声明使用下面的语法:

<!ELEMENT element-name category类别>
或
<!ELEMENT element-name (element-content元素内容)>

 1. 空元素:通过类别关键词EMPTY进行声明:

<!ELEMENT element-name EMPTY>
以下为实例:
<!ELEMENT br EMPTY>
XML example:
<br />

 2.只有 PCDATA 的元素:通过圆括号中的 #PCDATA 进行声明:

<!ELEMENT element-name (#PCDATA)>
以下为实例:
<!ELEMENT from (#PCDATA)>

 3.带有任何内容的元素:通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

<!ELEMENT element-name ANY>
以下为实例:
<!ELEMENT note ANY>

 4.带有子元素(序列)的元素:通过圆括号中的子元素名进行声明

<!ELEMENT element-name (child1,child2,...)>
以下为实例:
<!ELEMENT note (to,from,heading,body)>

    当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。"note" 元素的完整声明是:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

 5 . 声明只出现一次的元素

<!ELEMENT element-name (child-name)>
以下为实例:
<!ELEMENT note (message)>

   上面的例子声明了:message 子元素必须出现一次,并且必须只在 "note" 元素中出现一次

 6 . 声明最少出现一次的元素

<!ELEMENT element-name (child-name+)>
以下为实例:
<!ELEMENT note (message+)>

   上面的例子中的加号(+)声明了:message 子元素必须在 "note" 元素内出现至少一次

 7 . 声明出现零次或多次的元素

<!ELEMENT element-name (child-name*)>
以下为实例:
<!ELEMENT note (message*)>

   上面的例子中的星号(*)声明了:子元素 message 可在 "note" 元素内出现零次或多次

 8 . 声明出现零次或一次的元素

<!ELEMENT element-name (child-name?)>
以下为实例:
<!ELEMENT note (message?)>

   上面的例子中的问号(?)声明了:子元素 message 可在 "note" 元素内出现零次或一次

 9 . 声明"非.../既..."类型的内容

<!ELEMENT note (to,from,header,(message|body))>

   上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素

 10 . 声明混合型的内容

<!ELEMENT note (#PCDATA|to|from|header|message)*>

   上面的例子声明了:"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"

 

(4)DTD属性

在 DTD 中,属性通过 ATTLIST 声明来进行声明

属性声明语法:

<!ATTLIST element-name元素名 attribute-name属性名 attribute-type属性类型 attribute-value>

DTD 实例:

<!ATTLIST payment type CDATA "check">

XML 实例:

<payment type="check" />

 

(5)XML元素vs属性

在HTML重多使用属性,但在XML中,使用子元素,会感觉更像数据信息

同时要尽量避免使用属性:

一些属性具有以下问题:

属性不能包含多个值(子元素可以);不容易扩展(为以后需求的变化);无法描述结构(子元素可以);更难以操纵程序代码;不容易测试,针对DTD

上面有具体解析

 

(6)DTD实体

实体是用于定义引用普通文本或特殊字符的快捷方式的变量

实体引用是对实体的引用,可在内部或外部进行声明

内部实体声明:

<!ENTITY entity-name实体名称 "entity-value">
以下为实例
DTD 实例:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright runoob.com">
XML 实例:
<author>&writer;&copyright;</author>

   注意: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)

外部实体声明

<!ENTITY entity-name SYSTEM "URI/URL">
以下为实例
DTD 实例:
<!ENTITY writer SYSTEM "http://www.runoob.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.runoob.com/entities.dtd">
XML 例子:
<author>&writer;&copyright;</author>

 

(7)DTD验证

使用IE可根据某个 DTD 来验证您的 XML

【通过 XML 解析器进行验证】

当试图打开某个 XML 文档时,XML 解析器有可能会产生错误。通过访问 parseError 对象,就可以取回引起错误的确切代码、文本甚至所在的行

注意: load() 方法用于文件,而 loadXML() 方法用于字符串

【关闭验证:通过把 XML 解析器的 validateOnParse 设置为 "false",就可以关闭验证】

 

 

 

 

 

 

.

分享到:
评论

相关推荐

    DTD 总结 DTD 总结 DTD 总结

    **DTD(Document Type Definition)**是XML文档类型定义的缩写,它是一种规范,用于定义XML文档的结构和限制。DTD允许我们为XML文档创建一套预定义的规则,确保文档内容遵循特定的格式,便于数据交换和处理。下面将...

    DTD 教程 DTD 实例

    **DTD(Document Type Definition)教程** DTD 是 XML(Extensible Markup Language)文档的结构定义工具,它用于描述 XML 文档的元素、属性、实体等结构,确保 XML 文档的合法性。DTD 的作用在于提供一种机制,使...

    使用DTD验证XML文档

    使用DTD验证XML文档 一、 DTD的定义: a) DTD是Document Type Defintion的缩写,即文档类型定义。DTD用来描述XML文档的结构。 二、 DTD可能包含的内容: a) 元素的定义规则。 b) 元素之间的关系规则。 c) 属性的定义...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...

    DTD的CHM帮助文档

    **DTD(Document Type Definition)** 是XML(Extensible Markup Language)文档类型定义的缩写,它是XML规范的一部分,用于定义XML文档的结构和元素。在XML文档中,DTD的作用是确保文档内容遵循预设的规则,即所有...

    DTD验证XML详解

    DTD(Document Type Definition)是XML的一个重要组成部分,它定义了XML文档的结构和规则,确保XML文档的一致性和合法性。本文将深入探讨DTD验证XML的概念、原理以及如何进行实践操作。 XML文档通过DTD来规定其元素...

    sql-map-2.dtd和sql-map-config-2.dtd

    本文将深入探讨与“sql-map-2.dtd”和“sql-map-config-2.dtd”相关的知识点,以及它们在Ibatis中的作用。 Ibatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者将SQL语句直接写在配置文件中,通过XML映射...

    xml与DTD,xml与DTD

    ### XML与DTD详解 #### 一、XML简介 XML(Extensible Markup Language)是一种非常重要的数据交换标准,它被广泛应用于互联网数据交换场景之中。XML的设计初衷是为了传输和存储数据,其灵活性允许用户自定义标签,...

    ant_DTD.dtd

    ant_DTD.dtd 已生成好

    XML中的外部dtd和内部dtd实例

    在XML中,DTD(Document Type Definition)是用来定义XML文档结构的规范,它规定了元素、属性以及它们之间的关系。理解XML的外部DTD和内部DTD对于编写符合规范的XML文档至关重要。 一、XML DTD概述 DTD是一种元语言...

    不同版本的 struts2.dtd

    在Struts2中,DTD(Document Type Definition)文件扮演着重要的角色,它定义了配置文件的结构和规则。下面我们将详细探讨不同版本的Struts2 DTD及其相关知识点。 1. **Struts2 DTD 的作用** - Struts2 DTD 是XML...

    mybatis-3-config/mapper.dtd 解决mybatis头文件报错

    然后打开eclipse -&gt;Window-&gt;prefenrence-&gt;XML-&gt;XML Catalog-&gt;User Specifiled Entreis-&gt;Add-&gt;Location(此处是你放dtd文件的位置例如:‪D:\mybatis\mybatis-3-config.dtd)-&gt;Key(如果更改config,此处应该是:-//...

    mybatis的两个Dtd文件,config.dtd mapper.dtd

    DTD(Document Type Definition)是XML文档类型定义,它是XML的一种规范,用于定义XML文档的结构和元素。在MyBatis中,DTD文件用于验证配置文件的正确性,确保XML文件符合特定的格式。 1. **config.dtd文件** `...

    将DTD与XML文档相关联之外部DTD

    在XML(可扩展标记语言)文档中,DTD(文档类型定义)是一种重要的元数据,用于定义文档结构和元素规则。DTD允许我们规范XML文件的结构,确保数据的准确性和一致性。本文将深入探讨如何通过外部DTD将DTD文件与XML...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    DTD的定义、规则和编写

    ### DTD的定义、规则和编写 #### 一、DTD概述 **文档类型定义**(Document Type Definition, DTD)是一套关于标记语言的语法规则,主要用于定义XML文档的结构和内容。DTD作为XML 1.0规范的一部分,是XML文件验证的...

Global site tag (gtag.js) - Google Analytics