DTD 学习笔记
前言
DTD (Document Type Definition)的作用是定义 XML 文档的合法构建模块。
DOCTYPE 声明方式
一、内部的 DOCTYPE 声明
格式:
<!DOCTYPE 根元素 [元素声明]>
例如:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE book [ <!ELEMENT book (bookName, publishedDate, author)> <!ELEMENT bookName (#PCDATA)> <!ELEMENT publishedDate (#PCDATA)> <!ELEMENT author (authorName, birthday)> <!ELEMENT authorName (#PCDATA)> <!ELEMENT birthday (#PCDATA)> ]> <book> <bookName>Thinking in Java</bookName> <publishedDate>2017-04</publishedDate> <author> <authorName>Bruce Eckel</authorName> <birthday>1957-07-08</birthday> </author> </book>
二、外部的 DOCTYPE 声明
格式:
<!DOCTYPE 根元素 SYSTEM "文件名">
例如:
DTD 文件(bookOuter.dtd)
<!ELEMENT book (bookName, publishedDate, author)> <!ELEMENT bookName (#PCDATA)> <!ELEMENT publishedDate (#PCDATA)> <!ELEMENT author (authorName, birthday)> <!ELEMENT authorName (#PCDATA)> <!ELEMENT birthday (#PCDATA)>
XML 文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE book SYSTEM "bookOuter.dtd"> <book> <bookName>Thinking in Java</bookName> <publishedDate>2017-04</publishedDate> <author> <authorName>Bruce Eckel</authorName> <birthday>1957-07-08</birthday> </author> </book>
构建模块
元素
声明一个元素
<!--元素第一种形式--> <!ELEMENT 元素名称 类别> <!--元素第二种形式--> <!ELEMENT 元素名称 (元素内容)> <!--空元素--> <!ELEMENT 元素名称 EMPTY> eg: <!ELEMENT br EMPTY> <!--只有 PCDATA 的元素--> <!ELEMENT 元素名称 (#PCDATA)> eg: <!ELEMENT bookName (#PCDATA)> <!--可以带任何内容的元素--> <!ELEMENT 元素名称 ANY> eg: <!ELEMENT book ANY> <!--带子元素的元素--> <!ELEMENT 元素名称 (子元素列表)> eg: <!ELEMENT book (bookName, publishedDate, author)>
声明元素出现次数
<!--子元素列表中每个元素,只能出现一次--> <!ELEMENT 元素名称 (子元素列表)> <!--子元素列表中的元素至少出现一次--> <!ELEMENT 元素名称 (子元素列表)+> <!--子元素列表中的元素,出现零次或者多次--> <!ELEMENT 元素名称 (子元素列表)*> <!--子元素列表中的元素,出现零次或者一次--> <!ELEMENT 元素名称 (子元素列表)?> <!--子元素列表中声明非某元素既某元素,元素C、元素D只能出现一个元素--> <!ELEMENT 元素名称 (子元素A,子元素B,(子元素C|子元素D))>
属性
元素声明之后,可以声明元素中对应的属性
<!ELEMENT 元素名称 (子元素列表)> <!ATTLIST 元素名称 属性名称 属性类型 默认值 属性值的默认性>
属性类型
属性值的默认性
*实体
<!ENTITY 实体名称 "实体值">
实体由三部分组成: & + 实体名称 + ;
需要将 ; 前面的 \ 去掉
PCDATA
PCDATA 是会被解析器解析的文本。文本中标签和实体会被解析处理。
CDATA
CDATA 是不会被解析器解析的文本。文本中标签和实体当做文本处理。