有效的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>

    

转载于:https://www.cnblogs.com/nanjingwangbo/p/5492296.html

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

  1. XML——文档类型定义(DTD-Document Type Definition)

    [0]README 0.1)本文文字描述转自 core java volume 2 , 旨在理解 XML--文档类型定义(DTD-Document Type Definition) 的基础知识: 0. ...

  2. XML之文档类型定义和合法性(转)

    来至:liang--liang博客:http://www.cnblogs.com/liang--liang/archive/2008/01/15/1039277.html 好牛 XML被作为一种元标记 ...

  3. DTD(文档类型定义)概述

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

  4. XML--- XML文档类型定义(DTD)

    **定义:**DTD定义了文档的逻辑结构,规定了文档中所使用的元素.实体.元素的属性.元素与实体之间的关系.其作用主要表现在以下几个方面. (1) 使用DTD可以提供一种统一的格式.XML的可扩展性为 ...

  5. 文档声明Doctype和Doctype html区别 文档类型定义(DTD)

    文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 文档声明的作用: 文档声明是为了告诉浏 ...

  6. DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义

    DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义 今天看到一篇CSS应用的一个友好搜索,我按网页上的代码复制.粘贴后预览时总达不到效果,而直接拷贝他的实例却能达到效果, ...

  7. 文档类型定义和合法性(2)

    8.5.3 子元素列表 由于SEASON元素被声明为可以接受任何元素作为子元素,因而可以接受各种各样的元素.当遇到那些多多少少有些非结构化的文本,如杂志文章时,这种情况就很有用.这时段落.副栏.项目列 ...

  8. 前端:HTML5/36/HTML5简介,文档类型定义,网页字符集,页面结构标记,文章相关的标记,其它标记,音频标记,视频标记,表单中新增的属性,表单input元素type属性的值

    HTML5简介 HTML5是新一代的HTML: HTML5目前主要应用在手机端,在PC端最新浏览器已经开始支持了,但还不全面: HTML5是由W3C和WHATWG合作的结果: W3C是万维网联盟,主要 ...

  9. XML文档类型定义DTD

    DTD概述 DTD用来定义XML文档的结构,它包含一系列规则说明,以确保XML文档的一致性和有效性 DTD定义了XML文档可用的词汇(元素和属性的名称)和结构: 元素名称,包括根元素 元素的属性及属性 ...

  10. J2EE之dtd(文档类型定义)

    一:良好xml的格式 1:xml的作用 1.1 数据交互(两种方式) 第一种:{name:xxx,sex:'男',age:18},{name:xxx,sex:'男',age:18},{name:xxx ...

最新文章

  1. 认识flask框架-2
  2. Linux串口读取与解析
  3. 3ds max 把模型放置到坐标系中心(原点)
  4. Luogu P1073 最优贸易【最短路/建反图】 By cellur925
  5. Laravel提交POST请求报错
  6. 用数组实现从文件搜索帐户和验证密码
  7. layer绑定回车事件(转)
  8. 身份证明检索失败,如何解决?
  9. SQLi LABS Less-5 报错注入+布尔盲注
  10. 程序员如何一键“Get”高清壁纸?
  11. 探秘小程序(3):登录
  12. 光伏蓄电池单相并网模型。光伏+MPPT+boost升压电路+桥式逆变 带参考文件,模型说明文件
  13. Error Based Injection和sql注入函数
  14. import clip时Cannot re-initialize CUDA in forked subprocess
  15. 数字化转型对企业的意义
  16. Python爬虫-字体反爬-猫眼国内票房榜
  17. Keysight的扫描电子元件软件EP-Scan 2023版本下载与安装配置教程
  18. python+selenium自动化脚本例子
  19. JAVASE知识点整理(超万字)
  20. 如何解决App inventor和AI伴侣无法连接的问题

热门文章

  1. spring web.xml配置服务启动后执行文件
  2. NGINX(二)内存池
  3. Python脚本控制的WebDriver 常用操作 十八 获取测试对象的css属性
  4. 在linux命令行利用SecureCRT上传下载文件
  5. [转载]返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API
  6. VGA接口(四)字符
  7. 通达OA办公系统的短信服务器(CDMA)
  8. access怎么查询工龄_电子商务专业怎么样?学什么?前景好吗?
  9. python函数名的作用_Python:函数名称空间与作用域:
  10. UGUI教程基本介绍