DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。

DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

DTD简介

内部的 DOCTYPE 声明

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

<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。

!ELstrongENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"

!ELstrongENT to (第四行)定义 to 元素为 "#PCDATA" 类型

!ELstrongENT from (第五行)定义 frome 元素为 "#PCDATA" 类型

!ELstrongENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型

!ELstrongENT body (第七行)定义 body 元素为 "#PCDATA" 类型

外部文档声明

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

<!DOCTYPE root-element SYSTEM "filename">

以下是 XML 文档,这个XML文档和上面的 XML 文档相同,但是拥有一个外部的 DTD:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

这是包含 DTD 的 "note.dtd" 文件:

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

为什么使用 DTD?

通过 DTD,您的每一个 XML 文件均可携带一个有关其自身格式的描述。

通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

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

您还可以使用 DTD 来验证您自身的数据。

DTD - XML 构建模块

XML 文档构建模块

所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

Elements :元素

Attributes :属性

Entities :实体

PCDATA :

  意思是被解析的字符数据(parsed character data)。

  可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

  PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

  文本中的标签会被当作标记来处理,而实体会被展开。

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

CDATA :

  意思是字符数据(character data)。

  CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

DTD - 元素

在一个 DTD 中,元素通过元素声明来进行声明。

声明一个元素

在 DTD 中,XML 元素通过元素声明来进行声明。元素声明使用下面的语法:

<!ELEMENT element-name category>
或
<!ELEMENT element-name (element-content)>

空元素

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

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

只有 PCDATA 的元素

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

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

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

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

带有子元素(序列)的元素
带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

<!ELEMENT element-name (child1)>
或
<!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)>

声明只出现一次的元素

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

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

声明最少出现一次的元素

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

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

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

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

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

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

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

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

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

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

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

声明混合型的内容

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

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

DTD - 属性

DTD - 实体

转载于:https://www.cnblogs.com/hf8051/p/4846432.html

DTD -- XML验证相关推荐

  1. XML—— 验证XML文档

    [0]README 0.0)本文文字描述转自 core java volume 2 , 旨在理解 XML-- 验证XML文档 的基础知识 0.1)problem+solution (干货--不推荐使用 ...

  2. eclipse 关闭英文拼写检查,关闭xml验证

    eclipse 关闭英文拼写检查,关闭xml验证 1. 关闭英文拼写检查 Preferences–>General–>Editors–>Text Editors–>Spelli ...

  3. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  4. java xml 验证工具_验证xml格式

    原文链接http://zhhll.icu/2020/12/20/xml/xml%E7%9A%84%E6%A0%BC%E5%BC%8F/ 验证xml格式 DTD验证 可以使用DTD来定义XML文档的合法 ...

  5. xml验证 java代码,使用Java代码进行XML验证

    我需要一些代码示例,该示例说明如何针对架构验证xml文件.下面是我的XML文档: January 21 1983 我要针对其验证上述XML的架构是: schemaLocation="http ...

  6. 关闭英文拼写检查,关闭xml验证

    http://blog.sina.com.cn/s/blog_70b623e4010173ce.html eclipse里面的许多设置对于国内开发者日常使用不太适用,反而会成为干扰.既然是完全可配置的 ...

  7. DTD – XML 构建模块概述

    XML 和 HTML文档的主要的构建模块是元素标签. XML 文档构建模块 所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成: 元素 属性 实体 PCDATA CDATA 元素 ...

  8. struts2 xml 验证出现 Invalid field value for field 的解决方法(转)

    缺省情况下, 所有的装换错误使用通用的i18n信息 xwork.default.invalid.fieldvalue , 你可以在你的全局il8n资源包中替换他(缺省文本是"Invalid ...

  9. web 前端学习线路图

    web 前端学习线路图 一.HTML 教程 HTML教程 HTML简介 HTML编辑器 HTML基础 HTML元素 HTML属性 HTML标题 HTML段落 HTML样式 HTML格式化 HTML引用 ...

最新文章

  1. IDEA报错Web server failed to start. Port 8080 was already in use的解决方法
  2. php 正则表达式 匹配中日韩字符(GBK)
  3. 如何为JBoss Developer Studio 8设置集成和SOA工具
  4. 魔兽三国服务器维护,魔兽三国开服七天技巧
  5. 数据库学习,树形结构的数据库表Schema设计方案
  6. Qt工作笔记-QGraphics框架场景中图元的移除与析构
  7. 小玉在游泳(洛谷-P1423)
  8. MySQL 历史版本安装和下载
  9. Apache常见配置及问题
  10. 四轮驱动移动机器人(SSMR)与两轮差速驱动机器人、car-like robot的对比分析
  11. javascript手机号码、电子邮件正则表达式 一种解决方案
  12. [Java基础] 使用JMAP dump及分析dump文件
  13. 如何编写用户故事的验收标准
  14. Spring实战(第4版)第1章 Spring之旅
  15. 汇编语言程序设计思维导图
  16. 不确定性原理的前世今生(转载)
  17. 计组--CISC和RISC特点和区别
  18. 从第三方应用跳回uniapp开发的app
  19. C语言 指针的解引用详解
  20. 最小覆盖模型matlab_MATLAB求解最小球覆盖问题

热门文章

  1. 牛客网编程练习之编程马拉松:解读密码
  2. Swift:如何判断一个对象是否是某个类(或其子类)的实例
  3. sharepoint 2010 彻底删除用户
  4. 用C#抓取AJAX页面的内容
  5. 上班族不知不觉发财的十大秘诀
  6. mysql 之 一个库中所有表复制到另一个数据库中的方法和工具
  7. 窗口句柄、窗口类对象的关系
  8. python 列表比较不同_python实现比较两段文本不同之处的方法
  9. std::ostream_iterator、std::cout、std:copy实现输出
  10. Android开发之限制输入框长度 | 限制EditText输入长度 | 限制AppCompatEditText长度的方法