DTD规范XML文档

1.DTD基本介绍,基本结构

2.DTD内部、外部形式

3.DTD对元素声明

4.DTD对属性声明

5.DTD的实体

6.练习


DTD是Document Type DeFinition (文档类型定义)的缩写。DTD指定XML文档必须遵守一系列规则。


2.DTD分为外部DTD和内部DTD两种:


1)使用内部DTD格式:


<!DOCTYPE 根元素名称 [

<!ELEMENT 子元素名称 (#PCDATA) >

]>


2)引用外部DTD格式:

<?xml version="1.0" encoding="gb2312">

<!DOCTYPE 根元素名称 SYstem “outDtd.dtd”>

<根元素名称>

...

</根元素名称>


---------------

引用外部DTD时,要在DOCTYPE中使用关键词SYstem或PUBLIC ,后者是已经被认可的文件

通常引用自己写的dtd文件使用SYstem关键词

---------------

*************************************************************************************************************************

3.DTD对元素声明


<!ELEMENT 元素名 元素内容 >

ELEMENT 关键字,表示对元素类型进行声明

元素名 为当前指定元素名称

元素内容可分为:EMPTY、子元素型、混合型、ANY和#PCDATA 5种

元素内容类型:

1)EMPTY 该元素只可能有属性而不会有元素内容

<!ELEMENT element-name EMPTY>

实例:

<br/>

2)ANY 可以包含DTD中定义的其他任何元素或已编译的字符数据,包括PCDATA、元素或元素与PCDATA的混合内容

<!ELEMENT element-name ANY >

3)#PCDATA 不包含其他子元素而只能有文本数据,文本数据可以是普通字符、CDATA段中的内容、字符引用和实体引用。

<!ELEMENT element-name (#PCDATA) >

4)子元素型 分为2种:序列:<!ELEMENT 根元素名称(a,b,c,d ..)> , 选择<!ELEMENT 根元素名称(a|b|c|d..) >

5)混合型 既可以包含子元素又可以包含文本数据<!ELEMENT 根元素名 (#PCDATA | 子元素)* >



*************************************************************************************************************************

4.DTD对属性声明

<!ATTLIST 元素名 属性属性类型 属性限定条件>

---------------------------------------------------------

属性类型(常见):

CDATA 字符数据,即没有标记的文本

枚举 备选属性值的值列表

ID 属性在文档中具有唯一性

IDREF 文档中元素的ID类型属性的值

IDREFS 由空格分隔的元素的多个ID

ENTITY 在DTD中声明的实体名称

ENTITIES 在DTD中声明的由空格分隔的多个实体的名称

NMTOKEN XML名称记号

NMTOKENS 由空格份额表格的多个XML名称记号

NOTATION 在DTD中声明的记法的名称

----------------------------------------------------------

属性限定条件(常见):

#required 元素的每个实例必须具有该属性

#IMPLIED 元素实例不必包含该属性

#FIXED+固定值 属性值被指定为固定值,且用户不能改变

认值 如果元素中不包含该属性属性值,那么认值将作为属性

-------------------------------------------------------------


*************************************************************************************************************************

5.实体声明与引用

实体分为以下几种

1.普通实体与参数实体

1)普通实体:

<!ENTITY name "text" >

name:实体引用的名称

"text":实体的内容

引用方式:&name;

<p>&name;</p>


2)参数实体:


<!ENTITY % name "text" >

text为参数实体内容,其中不能包含如:>,<,&,',",等特殊字符,这些字符的使用可以用特有的字替代


引用方式为 : %name;

2.内部实体与外部实体

内部实体如上,,


外部实体:

<!ENTITY name PUBLIC FRI "URI" >


PUBLIC格式:实体内容是被某一个领域所认可的文件

SYstem:通常自己写的用这个

FRI:Formal Public Identifier 为正式公用标识符,全球唯一


6.练习

  1. 一个汽车的列表创建一个DTD,每一个car有子元素make、model、year、color、engine、number_of_doors、transmission_type和accessories。 元素engine有子元素number_of_cylinders和fuel_system(其值有两种carbureted和fuel-injected)。 元素accessories有属性radio、air_conditioning、power_windows、power_steering和power_brakes,以上属性均是必须的,且值为yes和no。 将现在流行汽车的名字声明为实体。 注意:上述有的条件限制用 DTD 无法实现,DTD跳过即可,需用第三题的 Schema 技术。
  2. 创建一个至少包含3个题目1中car元素实例的XML文档。用练习1中的 DTD 来处理该文档,验证有效性。


1.根据题目创建DTD

2.验证所写dtd方法一:利用myeclipse(eclipse) 添加该dtd,让其自动生成模板,查看生成的模板是否符合要求

如何添加xml dtd或者xml schema 可以参考http://jingyan.baidu.com/article/e9fb46e19da1117521f766d3.html

2.验证所写dtd方法二:http://www.w3school.com.cn/xml/xml_validator.asp 处检验

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cars SYstem "http://home//cqx//tmp/hw01.dtd" >
<cars>
  <car>
    <make>make</make>
    <model>&model1;</model>
    <year>year</year>
    <color>color</color>
    <engine fuel_system="carbureted" number_of_cylinders="">engine</engine>
    <number_of_doors>number_of_doors</number_of_doors>
    <transmission_type>transmission_type</transmission_type>
    <accessories air_conditioning="yes" power_steering="yes" power_windows="yes" radio="yes">accessories</accessories>
  </car>
  
  
	<car>
		<make>第一制造商</make>
		<model>&model01;</model>
		<year>2011</year>
		<color>红</color>
		<engine  number_of_cylinders="XX" >第一个engine</engine>
		<number_of_doors>4</number_of_doors>
		<transmission_type>第一个transmission_type</transmission_type>
		<accessories radio="yes" air_conditioning="yes" power_windows="yes" 
			power_steering="yes" power_brakes="yes" >
		</accessories>

	</car>

	<car>
		<make>第二制造商</make>
		<model>&model02;</model>
		<year>2012</year>
		<color>橙色</color>
		<engine number_of_cylinders="XX" fuel_system="carbureted">第二个engine</engine>
		<number_of_doors>4</number_of_doors>
		<transmission_type>第二个transmission_type</transmission_type>
		<accessories radio="yes" air_conditioning="yes" power_windows="yes" 
			power_steering="yes" power_brakes="yes" >

		</accessories>

	</car>
	<car>
		<make>第三制造商</make>
		<model>&model03;</model>
		<year>2013</year>
		<color>黄</color>
		<engine number_of_cylinders="XX" fuel_system="carbureted">第三个engine</engine>
		<number_of_doors>4</number_of_doors>
		<transmission_type>第三个transmission_type</transmission_type>
		<accessories radio="yes" air_conditioning="yes" power_windows="yes" 
			power_steering="yes" power_brakes="yes" >
		</accessories>

	</car>
  
</cars>





<!ELEMENT cars (car+) >

<!ELEMENT car (make,model,year,color,engine,number_of_doors,transmission_type,accessories) >

<!ELEMENT engine (#PCDATA) >



<!ELEMENT make (#PCDATA) >

<!ELEMENT model (#PCDATA) >

<!ELEMENT year (#PCDATA) >

<!ELEMENT color (#PCDATA) >

<!ELEMENT number_of_doors (#PCDATA) >

<!ELEMENT transmission_type (#PCDATA) >

<!ELEMENT accessories (#PCDATA) >



<!ATTLIST engine number_of_cylinders CDATA #required  >

<!ATTLIST engine fuel_system ( carbureted | fuel-injected) #required>



<!ATTLIST accessories radio (yes | no ) #required >

<!ATTLIST accessories air_conditioning ( yes | no ) #required >

<!ATTLIST accessories power_windows (yes | no ) #required >

<!ATTLIST accessories power_steering ( yes | no ) #required >

<!ATTLIST accessories power_brakes  ("yes" | "no" ) #required >



<!ENTITY model01 "STR1" >



<!ENTITY model02 "STR2" >

<!ENTITY model03 "STR3" >

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇