DTD
<?xml version="1.0" encoding="utf-8"> | XML声明 |
<!ELEMENT ------> | 声明XML文档中可用的元素,以及该元素的使用方式 |
<!ATTLIST-------> | 指定元素拥有列表中的属性 |
简单的例子
<?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>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
外部文档声明
假如DTD位于XML源文档外部,它应该通过下面的语法被封装在一个DOCTYPE
<!DOCTYPE 根元素 SYSTEM "文件名">
文件名是.dtd格式的文件,封装了dtd声明
DTD的作用
- 给XML文件有关自身格式的描述
- 通过DTD验证自身数据
- 独立团体一致使用某个标准的DTD交换数据
XML文档构建模块
所有的XML文档及HTML文档均由以下简单的构建模块构成
- 元素
- 属性
- 实体
- PCDATA
- CDATA
XML元素
元素是XML以及HTML文档的主要构建模块
例如HTML中的“body”,XML中的“note”和“message”
属性
提供有关元素的额外信息
实体
实体是用来定义普通文本的变量,例如HTML实体引用" ",无折行空格
XML预定义实体(类似于HTML)
实体引用 | 字符 |
---|---|
< ; | < |
> ; | > |
& ; | & |
" ; | " |
&apos ; | ’ |
PCDATA
PCDATA的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为XML元素开始标签与结束标签之间的文本
PCDATA是会被解析器器解析的文本。这些文本将被解析器检查实体以及标记
被解析的不包括&、<、>
CDATA
CDATA的意思是字符数据(character data)
CDATA是不会被解析器解析的文本
DTD-元素
声明一个元素
语法
<!ELEMENT 元素名称 类别>
或
<!ELEMENT 元素名称 (元素内容)>
元素声明<!ELEMNET···>
<!ELEMENT 元素名称 EMPTY> <!--空元素声明-->
<!ELEMENT 元素名称 (#PCDATA)> <!--只有PCDATA的元素-->
<!ELEMENT 元素名称 ANY> <!--带有任何内容的元素-->
<!ELEMENT 元素名称 (子元素1,子元素2···)> <!--带有子元素的元素-->
当子元素按照由逗号分隔开的序列进行声明时,子元素必须按照相同的顺序出现在文档中
<!ELEMENT 元素名称 (子元素名称)> <!--子元素必须出现一次,且只能在“元素名称中初选一次”-->
<!ELEMENT 元素名称 (子元素名称+)> <!--子元素必须出现至少一次-->
<!ELEMENT 元素名称 (子元素名称*)> <!--出现零次或多次-->
<!ELEMENT 元素名称 (子元素名称?)> <!--出现一次或多次-->
<!ELEMENT 元素名称 (子元素名称1|子元素名称2)><!--非...即...-->
DTD属性<!ATTLIST···>
声明属性
<!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
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
合法的XML
<square width="100">
DTD-实体
实体是用于定义引用普通文本或特殊字符的快捷方式的变量
实体引用是对实体的引用
实体可在内部或外部进行声明
内部实体声明
<!ENTITY 实体名称 "实体的值">
DTD例子
<!ENTITY writer "bill gates">
<!ENTITY copyright "Copyright zhougang">
XML例子
<author>&writer;©right;</author>
注释:一个实体由 &、实体名称、; 组成
外部实体声明
<!ENTITY 实体名称 SYSTEM "URI/URL">
DTD-例子
<!ENTITY writer SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3school.com.cn/dtd/entities.dtd">
XML例子
<author>&writer;©right;</author>