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 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" > (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |