首页 > 其他分享 >DTD 学习

DTD 学习

时间:2023-02-03 11:57:45浏览次数:66  
标签:XML 实体 PCDATA 元素 DTD 学习 属性

DTD 教程

目录

目录

参考自 W3School-DTD 教程

DTD简介

DTD 是什么?

了解一个新事物之前,需要先向自己提问。

DTD 全写为 Document Type Definition,意为”文档定义类型“。

DTD 是一套关于标记的语法规则,它说明了在 XML 中哪些标记可以使用、哪些标记具有属性以及使用标记出现的顺序是什么

DTD肩负着两重任务:

  1. 帮助编写出合法的代码;
  2. 让浏览器正确地显示代码。

DTD 与 XML 的关系?

XML 解释器根据 DTD 来认识我们自定义的标记。在 DTD 中,说明了我们定义的标记的含义。

DTD 与 XML 的关系类似于类与对象、数据库表结构与记录。

为什么使用 DTD?

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

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

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

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


DTD 分为内部 DTD、外部 DTD和内外部结合的 DTD。

内部 DTD

内部 DTD 位于 XML 文档中的一个 DOCTYPE 声明中:

<!DOCTYPE 根元素 [元素声明]>

XML 实例:

<?xml version="1.0"?>
<!DOCTYPE note [  定义此文档是 note 类型的文档
  <!ELEMENT note (to,from,heading,body)>  定义 note 元素有四个元素:"to、from、heading,、body"
  <!ELEMENT to      (#PCDATA)>  定义 to 元素为 "#PCDATA" 类型
  <!ELEMENT from    (#PCDATA)>	定义 from 元素为 "#PCDATA" 类型
  <!ELEMENT heading (#PCDATA)>	定义 heading 元素为 "#PCDATA" 类型
  <!ELEMENT body    (#PCDATA)>	定义 body 元素为 "#PCDATA" 类型
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

外部 DTD

外部 DTD 位于 XML 文档外部:

<!DOCTYPE 根元素 SYSTEM "文件名">

XML 实例:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note> 

note.dtd 文件:

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

XML 构建模块

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

  • 元素
  • 属性
  • 实体
  • PCDATA
  • CDATA

下面是每个构建模块的简要描述。

元素

元素是 XML 以及 HTML 的主要构建模块,例如body(HTML元素)或者note(XML元素)

属性

属性位于某元素的开始标签中,以名/值对的形式出现。

实体

实体是用来定义普通文本的变量。实体引用是对实体的引用。

下面的实体在 XML 中被预定义:

实体引用 字符
< <
> >
& &
" "
' '

PCDATA

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

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

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

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

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

CDATA

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

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

DTD 元素

声明一个元素
<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>

空元素
<!ELEMENT 元素名称 EMPTY>

只有 PCDATA 的元素
<!ELEMENT 元素名称 (#PCDATA)>

带有任何内容的元素
<!ELEMENT 元素名称 ANY>

带有子元素(序列)的元素
<!ELEMENT 元素名称 (子元素名称 1)>
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

声明只出现一次的元素
<!ELEMENT 元素名称 (子元素名称)>

声明最少出现一次的元素
 <!ELEMENT 元素名称 (子元素名称+)>

声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称*)>

声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称?)>

声明“非.../既...”类型的内容
<!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 属性声明
<!ATTLIST 元素名称 属性名称 属性类型 默认值>

以下是属性类型的选项:

类型 描述
CDATA 值为字符数据 (character data)
(en1|en2|..) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值

默认值参数可使用下列值:

解释
属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的

DTD 实体

内部实体声明
<!ENTITY 实体名称 "实体的值">

外部实体声明
<!ENTITY 实体名称 SYSTEM "URI/URL">

DTD 例子:

<!ENTITY writer "Bill Gates">
<!ENTITY copyright "Copyright W3School.com.cn">

XML 例子:

<author>&writer;&copyright;</author>

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

标签:XML,实体,PCDATA,元素,DTD,学习,属性
From: https://www.cnblogs.com/LiJunLin1231/p/17088659.html

相关文章

  • 快速傅里叶变换学习简记
    多项式部分是OI中一个比较math和naive的部分,各种多项式题声(chou)名(ming)远(zhao)扬(zhu)。因为作者数学较弱,因此这篇文章会比较注重数学部分的理解。同时感谢所......
  • 机器学习基本概念
    机器学习就是把无用的数据转换成有用的信息目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是标称型(枚举或者离散的)的,而在回归算法中通常是连续型的。......
  • 机器学习——k-近邻算法(KNN)、
    k-近邻算法(kNN),它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新......
  • 机器学习——决策树
    决策树原理决策树的一个重要任务是获取数据中所蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据集创建规则时,就是机器学习的......
  • 机器学习——逻辑回归
    回归的含义——用观察使得认知接近真值的过程,回归本源。​在我们认知(测量)这个世界的时候,我们并不能得到这个世界的全部信息(真值),只能得到这个世界展现出的可被我们观测的部......
  • consul学习笔记
    consul默认的服务端口是8500consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Va......
  • Excel函数学习
    1.单条件求和=SUMIF(条件区域,求和条件,实际求和区域)2.多条件求和=SUMIFS(需要求和区域,条件区域1,求和条件1,条件区域2,求和条件2,......)3.单元格所在行位置=ROW(单......
  • nnUNet学习笔记(二):网络架构代码-1
    逐段解读文件:nnUNet/nnunet/network_architecture/neural_network.pyimportnumpyasnpfrombatchgenerators.augmentations.utilsimportpad_nd_imagefromnnunet.ut......
  • git命令的学习和基本使用
    初始化gitinit(your_project)配置--local只对当前仓库有效--global对当前用户所有仓库有效--system对系统登录的所有用户有效gitconfig--globaluser.name......
  • c++学习2 基础关键词
    三volatile强制访问内存在一个变量的频繁使用中,系统为了提高效率,会自动将内存里面的数据放入CPU里的寄存器里。但在某些特殊场景下,放入寄存器这个操作反倒会导致CPU无法......