`
Kyll
  • 浏览: 104118 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论
阅读更多
DTD (文档类型定义)的目的是用来建立合法的 XML 文档。
它定义了一个带有合法的元素和属性的列表的文档结构。

一个 DTD 可以被声明在 XML 文档内部(内联), 或者作为一个外部引用。

内部声明
如果 DTD 声明在 XML 文件内部, 必须被包装进 DOCTYPE 定义, 用以下的语法:
xml 代码
 
  1. <!DOCTYPE root-element [element-declarations]>  

例如:
xml 代码
 
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE note [  
  3.   <!ELEMENT note (to,from,heading,body)>  
  4.   <!ELEMENT to      (#PCDATA)>  
  5.   <!ELEMENT from    (#PCDATA)>  
  6.   <!ELEMENT heading (#PCDATA)>  
  7.   <!ELEMENT body    (#PCDATA)>  
  8. ]>  
  9. <note>  
  10.   <to>Tove</to>  
  11.   <from>Jani</from>  
  12.   <heading>Reminder</heading>  
  13.   <body>Don't forget me this weekend</body>  
  14. </note>  

说明:
!DOCTYPE note 定义文档的根元素是 note
!ELEMENT note 定义了 note 元素包含 4 元素 to, from, heading, body
!ELEMENT to 定义 to 元素的类型是 #PCDATA
!ELEMENT from 定义 from 元素的类型是 #PCDATA
!ELEMENT heading 定义 heading 元素的类型是 #PCDATA
!ELEMENT body 定义 body 元素的类型是 #PCDATA

外部声明
如果 DTD 被声明为一个外部文件, 必须用以下的语法包装进 DOCTYPE 定义:
xml 代码
 
  1. <!DOCTYPE root-element SYSTEM "filename">  
  2. <?xml version="1.0"?>  
  3. <!DOCTYPE note SYSTEM "note.dtd">  
  4. <note>  
  5. <to>Tove</to>  
  6. <from>Jani</from>  
  7. <heading>Reminder</heading>  
  8. <body>Don't forget me this weekend!</body>  
  9. </note>  
note.dtd
xml 代码
 
  1. <!ELEMENT note (to,from,heading,body)>  
  2. <!ELEMENT to (#PCDATA)>  
  3. <!ELEMENT from (#PCDATA)>  
  4. <!ELEMENT heading (#PCDATA)>  
  5. <!ELEMENT body (#PCDATA)>  


为什么使用 DTD ?
使用 DTD, 每个 XML 可以带有自己格式的描述。
使用 DTD, 依赖于组的人们可以同意使用一个标准 DTD 说明数据。
你的应用程序使用 DTD 验证你从外部世界收到的数据是有效的。
你可以使用 DTD 验证自己的数据。

XML 文档的主要组成
Elements 元素
Attributes 属性
Entities 实体
PCDATA 解析字符数据
CDATA 字符数据

Element(元素)
XML 文档的主要部分。 元素可以包含文本, 其他元素, 或者是空的。

Attribute(属性)
提供元素的额外信息。 属性在开始标签的内部, 是“名=值”对的形式。

Entity(实体)
一些字符在 XML 文档中有特殊的含义, 比如小于号(<)定义标签的开始。
XML 中预定义的实体:
Entity References Character
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '


PCDATA 意为解析字符数据。
把字符数据看作 XML 元素开始标记和结束标记之间可以找到的文本。
PCDATA 是将要被一个解析器解析的文本。 这个文本要被解析器检查为实体和标记。
标签中的文本将要作为标记和实体被处理。
但是被解析的数据不能包含任何 &, <, > 字符, 这些需要被表现为 &amp; &lt; 和 &gt; 实体。

CDATA 意为字符数据
CDATA 是不被解析器解析的文本。 标签中的文本将不被作为标记和实体处理。

声明 Element(元素)
在 DTD 中, XML 元素的声明语法:
xml 代码
 
  1. <!ELEMENT element-name category>  
或者
xml 代码
 
  1. <!ELEMENT element-name (element-content)>  

空元素
xml 代码
 
  1. <!ELEMENT element-name EMPTY>  
例如:
xml 代码
 
  1. <!ELEMENT br EMPTY>  
XML example:
xml 代码
 
  1. <br />  


PCDATA
xml 代码
 
  1. <!ELEMENT element-name (#PCDATA)>  
例如:
xml 代码
 
  1. <!ELEMENT from (#PCDATA)>  

任何内容
xml 代码
 
  1. <!ELEMENT element-name ANY>  
例如:
xml 代码
 
  1. <!ELEMENT note ANY>  


子元素(子元素声明顺序要一致)
java 代码
  1. <!ELEMENT element-name (child1)>  
或者
xml 代码
 
  1. <!ELEMENT element-name (child1,child2,...)>  
例如:
xml 代码
 
  1. <!ELEMENT note (to,from,heading,body)>  

只能出现一次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message)>  

至少出现一次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name+)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message+)>  

出现 0 或者多次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name*)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message*)>  

出现 0 或者 1 次的元素
xml 代码
 
  1. <!ELEMENT element-name (child-name?)>  
例如:
xml 代码
 
  1. <!ELEMENT note (message?)>  

声明任选一的元素
xml 代码
 
  1. <!ELEMENT note (to,from,header,(message|body))>  

声明混合元素
xml 代码
 
  1. <!ELEMENT note (#PCDATA|to|from|header|message)*>  

DTD 属性
xml 代码
 
  1. <!ATTLIST element-name attribute-name attribute-type default-value>  
例如:
xml 代码
 
  1. <!ATTLIST payment type CDATA "check">  
  2. <payment type="check" />  


属性类型
Type Description

CDATA

The value is character data

(en1|en2|..)

The value must be one from an enumerated list

ID

The value is a unique id

IDREF

The value is the id of another element

IDREFS

The value is a list of other ids

NMTOKEN

The value is a valid XML name

NMTOKENS

The value is a list of valid XML names

ENTITY

The value is an entity

ENTITIES

The value is a list of entities

NOTATION

The value is a name of a notation

xml:

The value is a predefined xml value


默认值
Value Explanation

value

The default value of the attribute

#REQUIRED

The attribute is required

#IMPLIED

The attribute is not required

#FIXED value

The attribute value is fixed

例如:
DTD:
xml 代码
 
  1. <!ELEMENT square EMPTY>  
  2. <!ATTLIST square width CDATA "0">  
Valid XML:
xml 代码
 
  1. <square width="100" />  

#REQUIRED(必须) 属性值是必须的
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute_name attribute-type #REQUIRED>  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST person number CDATA #REQUIRED>  
合法 XML:
xml 代码
 
  1. <person number="5677" />  
非法 XML:
xml 代码
 
  1. <person />  

#IMPLIED(隐含) 属性值可有可无, 没有默认操作
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute-name attribute-type #IMPLIED>  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST contact fax CDATA #IMPLIED>  
合法 XML:
xml 代码
 
  1. <contact fax="555-667788" />  
合法 XML:
xml 代码
 
  1. <contact />  

#FIXED(固定) 属性值是固定的, 不允许改变
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute-name attribute-type #FIXED "value">  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST sender company CDATA #FIXED "Microsoft">  
合法 XML:
xml 代码
 
  1. <sender company="Microsoft" />  
非法 XML:
xml 代码
 
  1. <sender company="W3Schools" />  

枚举属性值
语法:
xml 代码
 
  1. <!ATTLIST element-name attribute-name (en1|en2|..) default-value>  
例如:
DTD:
xml 代码
 
  1. <!ATTLIST payment type (check|cash) "cash">  
XML example:
xml 代码
 
  1. <payment type="check" />  
或者
xml 代码
 
  1. <payment type="cash" />  

在 XML 中, 什么时候用属性, 什么时候用子元素, 没有一个固定的规则。 (尽量用子元素表现数据)
数据可以被存贮为属性或者子元素。
例如:
java 代码
 
  1. <person sex="female">  
  2.   <firstname>Anna</firstname>  
  3.   <lastname>Smith</lastname>  
  4. </person>  
  5. <person>  
  6.   <sex>female</sex>  
  7.   <firstname>Anna</firstname>  
  8.   <lastname>Smith</lastname>  
  9. </person>  

声明实体(注意: 实体包含 3 部分 &符号, 实体名称, 分号)
内部定义语法:
xml 代码
 
  1. <!ENTITY entity-name "entity-value">  
例如:
DTD Example:
xml 代码
 
  1. <!ENTITY writer "Donald Duck.">  
  2. <!ENTITY copyright "Copyright W3Schools.">  
XML example:
xml 代码
 
  1. <author>&writer;&copyright;</author>  

外部定义语法:
xml 代码
 
  1. <!ENTITY entity-name SYSTEM "URI/URL">  
DTD Example:
xml 代码
 
  1. <!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">  
  2. <!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">  
XML example:
xml 代码
 
  1. <author>&writer;&copyright;</author>  

 
分享到:
评论

相关推荐

    DTD约束 —— Xml文档 约束技术 学习笔记

    在XML中,DTD(Document Type Definition)是一种重要的工具,它定义了XML文档的结构和规则,确保XML文档的正确性。DTD约束是XML文档规范的一种方式,它允许我们定义元素、属性以及它们之间的关系,以实现对XML文档...

    使用XmlDocumentXmlDataDocument类加载XML文件时如何忽略DTD验证

    在处理XML文件时,有时我们可能会遇到由于XML文档包含了对外部DTD(Document Type Definition)的引用,导致在使用`XmlDocument`或`XmlDataDocument`类加载文件时出现验证异常。DTD是XML的一个组成部分,用于定义XML...

    DTD433M系列无线数据终端使用说明

    此外,DTD433M的应用笔记部分详细分析了选择无线监控的优势,以及无线数传模块、数据终端、无线测控终端和无线数传电台之间的区别。还对比了常用串口调试工具,并对RS485总线通讯方式进行了分析。最后,该部分还讨论...

    mybatis源码级课件DTD文件jar包xml文件最全最新

    `mybatis最全最新课件.txt`可能是文字版的课程大纲或笔记,包含了学习路径和关键知识点的概述,对于复习和查找特定主题非常有用。 `Jar包.zip`是一个包含MyBatis库的压缩文件,其中可能有mybatis.jar和其他依赖的库...

    webService笔记

    webservice学习笔记1DTD是为了校验XML 2语法 3 schema

    MyBatis笔记

    MyBatis的配置文件遵循DTD格式规范,因此需要在项目中导入相应的DTD文件。这些文件包含了配置文件结构的定义,使得IDE能够提供更好的代码提示和错误检查。 - **导入步骤**: - 在IDE中找到DTD导入功能,通常是通过...

    Hibernate映射笔记

    ### Hibernate映射笔记详解 #### Hibernate映射文件与配置关系 Hibernate映射是ORM(对象关系映射)框架中的一项关键技术,它允许开发者在数据库表和Java对象之间建立映射关系,从而简化了数据访问层的开发工作。...

    SSH框架整合笔记

    本篇笔记主要介绍如何搭建基于Struts2的Web应用程序,并进行简单的配置。 ##### 1. 创建项目与生成`web.xml`文件 - **步骤**:在开发工具中新建Web项目后,会在项目的`WEB-INF`目录下自动生成`web.xml`文件。该文件...

    达内corejava+Oracle+JDBC+XML笔记

    至于XML笔记,可能会讲解XML文档的结构、DTD和Schema验证、XPath表达式以及Java如何使用DOM、SAX或StAX解析XML文件。 通过深入学习这些笔记,你可以全面理解Java开发的基础,并掌握与数据库交互的关键技术,以及...

    xml的学习笔记

    ### XML学习笔记:深入理解DTD(Document Type Definition) 在探讨XML文档时,了解DTD(Document Type Definition)至关重要,它作为XML文档结构定义的一种标准方法,为文档提供了语法和结构的约束,确保了文档的...

    笔记本电脑上壳冲压模设计借鉴.pdf

    "笔记本电脑上壳冲压模设计借鉴" 笔记本电脑由于携带方便而广受欢迎,轻量化是笔记本电脑的发展趋势,因此外壳制造使用镁合金材料,上壳的制造采用冲压模具。本文将围绕笔记本电脑上壳冲压模设计进行详细的分析和...

    java视频教程.XML.课堂笔记

    本Java视频教程中的XML课堂笔记深入浅出地讲解了XML的基本概念、语法规范以及在实际开发中的应用。以下是根据笔记内容整理的详细知识点: 1. **XML基础** - XML的起源:XML是从HTML演化而来,旨在提供一种结构化、...

    自己总结css笔记

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;`:XHTML 1.0 Transitional,允许使用一些HTML4的宽松特性。 选择正确的DOCTYPE有助于...

    html和css笔记

    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;`。 - **元数据与编码**:`;charset=UTF-8"&gt;`用于声明文档的字符编码,确保浏览器正确...

    北京圣思园xml学习笔记

    ### 北京圣思园XML学习笔记核心知识点详解 #### XML概述 - **XML全称**:eXtensible Markup Language(可扩展标记语言) - **学习XML的原因**: - 数据交换的需求日益增长,XML成为了电子商务的重要基础之一。 - ...

    传智播客javascript韩顺平笔记

    ### 传智播客javascript韩顺平笔记解析 #### JavaScript基本概念 JavaScript是一种广泛应用于Web开发领域的脚本语言。作为一种脚本语言,JavaScript的特点在于它并非像Java等编译型语言那样需要预先编译成机器可...

    struts2学习笔记(1)

    ### Struts2学习笔记知识点详解 #### 一、Struts2框架的基本引入步骤 ##### 1. 导入Struts2相关Jar包 在引入Struts2框架时,首先需要将Struts2的相关Jar包导入到项目的类路径中。这些Jar包通常包括核心库以及其他...

    IE6兼容笔记

    ### IE6兼容性笔记知识点详解 #### 一、文档类型声明(DOCTYPE)对IE6的影响 在进行前端开发时,确保网页在不同浏览器中的表现一致性是一项挑战,尤其是在处理老旧浏览器如Internet Explorer 6 (IE6)时。文档类型...

    HTML5程序设计学习笔记

    ### HTML5程序设计学习笔记 #### 一、`&lt;!DOCTYPE&gt;`标签的作用与使用方法 `&lt;!DOCTYPE&gt;`标签作为HTML文档的首个元素,在整个文档解析过程中起着至关重要的作用。它告诉浏览器当前文档遵循的是哪种HTML标准,从而确保...

Global site tag (gtag.js) - Google Analytics