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" />

  实体:

    定义引用普通文本或特殊字符的快捷方式的变量。如:"&nbsp;" "&lt;" "&gt;" "&amp;" "&quot;" "&apos;"

  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支持数据类型与命名空间。


    
   

posted @ 2019-06-03 21:22  快与慢  阅读(323)  评论(0编辑  收藏  举报