XML -- DTD
1.DTD:
(Document Type Definition文档类型定义)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则,可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。既可被成行地声明于XML文档中,也可作为一个外部引用
2.内部的DOCTYPE声明:如果DTD被包含在XML源文件中,它应当通过下面的语法包装在一个DOCTYPE声明中
<!DOCTYPE 根元素 [元素声明]>
//带有DTD的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)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
3.外部文档声明:DTD位于XML源文件的外部,那么它应通过下面的语法被封装在一个DOCTYPE定义中
<!DOCTYPE 根元素 SYSTEM "文件名">
//这个XML文档和上面的XML文档相同,但拥有一个外部的DTD <?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> //这是包含DTD的 "note.dtd" 文件: <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
4.DTD的作用:
4.1通过DTD,你的每一个XML文件均可携带一个有关其自身格式的描述
4.2通过DTD,独立的团体可一致地使用某个标准的DTD来交换数据
4.3应用程序也可使用某个标准的DTD来验证从外部接收到的数据
5.DTD-XML构建模块:所有的XML文档(以及HTML文档)均由以下简单的构建模块构成:
元素:
HTML的"body"和"table",xml的"note"和"message"。空的HTML元素有"hr"、"br"和"img"
属性:
提供有关元素的额外信息,属性总是以名/值的形式成对出现。如:<img src="computer.gif" />
实体:
定义引用普通文本或特殊字符的快捷方式的变量。如:" " "<" ">" "&" """ "'"
PCDATA:
被解析的字符数据(parsed character data),这些文本将被解析器检查实体以及标记。
CDATA:
字符数据(parsed character data),不会被解析器解析的文本
6.DTD-元素
在DTD中,xml元素通过元素声明来进行声明,语法格式如下:
<!ELEMENT 元素名称 类别> //或者 <!ELEMENT 元素名称 (内容)> //空元素 <!ELEMENT 元素名称 EMPTY> //如: <!ELEMENT br EMPTY> //xml例子: <br /> //只有PCDATA的元素 <!ELEMENT 元素名称 (PCDATA)> //例子 <!ELEMENT from (PCDATA)> //带有任何内容的元素,通过类别关键词ANY声明的元素,可包含任何可解析数据的组合 <!ELEMENT 元素名称 ANY> //例子 <!ELEMENT note ANY> //带有子元素(序列)的元素 <!ELEMENT 元素名称 (子元素1,子元素2,子元素3,...)> //例子 <!ELEMENT note (to,from,heading,body)> //注意:当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。 //在一个完整的声明中,子元素也必须被声明,子元素也可以拥有子元素 //声明只出现一次的元素(出现一次而且必须出现一次) <!ELEMENT 元素名称 (子元素)> //声明最少出现一次的元素 <!ELEMENT 元素名称 (子元素+)> //声明出现零次或多次的元素 <!ELEMENT 元素名称 (子元素*)> //声明出现零次或一次的元素 <!ELEMENT 元素名称 (子元素?)> //声明"|"的内容 <!ELEMENT note (to,from,heading,(body|message))> //混合型声明:"note" 元素可包含出现零次或多次的PCDATA、"to"、"from"、"header" 或者 "message" <!ELEMENT note (#PCDATA|to|from|header|message)*>
7.DTD-属性:
<!ATTLIST 元素 属性 属性类型 默认值>
//DTD实例: <!ATTLIST payment type CDATA "check"> //xml实例: <payment typ="check" />
属性类型的选项:
8.DTD-实体:
实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (;)
//内部实体声明 <!ENTITY 实体名称 "实体值"> //DTD例子 <!ENTITY writer "Bill Gates"> <!ENTITY copyright "Copyright W3School.com.cn"> //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>
小结:什么是DTD?简单点来说,DTD就是xml的语法,通过DTD我们可以验证xml文档是否结构良好。但现在我们认为XML Schema(XSD)很快去取代DTD,与DTD不同,XML Schema支持数据类型与命名空间。