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种
元素内容类型:
<!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中声明的记法的名称
----------------------------------------------------------
属性限定条件(常见):
#IMPLIED 元素实例不必包含该属性
默认值 如果元素中不包含该属性的属性值,那么默认值将作为属性值
-------------------------------------------------------------
*************************************************************************************************************************
5.实体声明与引用
实体分为以下几种
1.普通实体与参数实体
1)普通实体:
<!ENTITY name "text" >
name:实体引用的名称
"text":实体的内容
引用方式:&name;
<p>&name;</p>
2)参数实体:
<!ENTITY % name "text" >
text为参数实体内容,其中不能包含如:>,<,&,',",等特殊字符,这些字符的使用可以用特有的字替代
引用方式为 : %name;
2.内部实体与外部实体
内部实体如上,,
外部实体:
<!ENTITY name PUBLIC FRI "URI" >
SYSTEM:通常自己写的用这个
FRI:Formal Public Identifier 为正式公用标识符,全球唯一
6.练习
- 为一个汽车的列表创建一个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 技术。
- 创建一个至少包含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" >