背景:学习XML视频,自然就接触了DTD,不总结吧,感觉说不过去,毕竟算是一个新的名词。下面就来总结一下吧,算是对自己一个交代,也方便后期查阅。
一、What?
文档类型定义(Document Type Definition)
Document英汉翻译:
n. 文件,公文;[计] 文档;证件
vt. 用文件证明
Definition英汉翻译:
n. 定义;[物] 清晰度;解说
定义XML文件的结构
为XML文件提供语法与规则
使用XML进行数据交换的行业或者组织可定义自己的DTD
对于XML是可选内容
二、Why?
为了正确交换数据,XML文件需要正确的结构
三、How?
1、元素
【声明】
常规:<!ELEMENT 元素名称 类别 > 或者 <!ELEMENT 元素名称(元素内容)>
空元素:
DTD中:<!ELEMENT 元素名称 EMPTY>
XML中:<br/>
表示带有任何内容:
DTD中:<!ELEMENT 元素名称 ANY>
XML中:<student>何丽杰</student> <student><name>何丽杰</name></student>
最少出现一次:<!ELEMENT 元素名称(子元素名称+)>
出现0次或多次:<!ELEMENT 元素名称(子元素名称*)>
出现0次或一次:<!ELEMENT 元素名称(子元素名称?)>
或:<!ELEMENT 元素名称(子元素名称|子元素名称)>
混合型内容:<!ELEMENT 元素名称(#PCDATA|子元素名称)>
【子元素要求顺序】
DTD中:<!ELEMENT 计算机书籍(书名,价格)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 价格(#PCDATA)>
XML中:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><书籍列表> <计算机书籍> <书名>XML书籍</书名> <价格>100</价格> </计算机书籍> </书籍列表></strong></span>
【重复元素】
DTD中:
<!ELEMENT 计算机书籍(书名,作者+)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
XML中:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><书籍列表> <计算机书籍> <书名>XML书籍</书名> <作者>张三</作者> <作者>李四</作者> </计算机书籍> </书籍列表></strong></span>
<!ELEMENT 计算机书籍(书名,价格)+>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 价格(#PCDATA)>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><书籍列表> <计算机书籍> <书名>XML书籍</书名> <价格>100</价格> <书名>J2EE教程</书名> <价格>100</价格> </计算机书籍> </书籍列表></strong></span>
2、属性
【声明】
XML中:<payment type = "cash" />
【属性的默认值】
XML中:<payment type = "cash" />
<payment/>
3、实体
用于定义引用普通文本或者特殊字符的快捷方式的变量
实体引用是对实体的引用
实体可在内部或外部进行声明
【PCDATA】
被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 & 、< 以及 > 实体来分别替换它们。
【CDATA】
字符数据(character data)。
不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
4、命名空间
在一个XML文档中,包含由多个DTD描述的元素,会出现冲突问题。为解决此问题,W3C的XML小组制定了被称为命名空间(NameSpace)的标准。
5、前缀标识符
即在元素名和属性名前面增加一个标识符,以唯一区分当前元素或属性来自哪一个DTD。
四、优缺点
【优势】
每一个XML文档都可携带一个DTD,用来对该文档格式进行描述,测试该文档是否为有效的XML文档。
加强了文档标记内参数的一致性,使XML语法分析器能够确认文档。
在DTD中对根元素的声明是必不可少的。
【缺陷】
有自己的特殊语法,其本身不是XML文档;
只提供了有限的数据类型,用户无法自定义类型;
不支持域名机制。
五、心得体会
学习了短短的一集视频,再加网上的内容,这块儿内容的学习也就到达了这种程度,总是感觉对这部分不是很了解,希望后期的学习实践中还能遇上,加油!
原文链接:https://www.f2er.com/xml/296206.html