现在的位置: 首页 > 综合 > 正文

DTD详解

2013年01月16日 ⁄ 综合 ⁄ 共 3939字 ⁄ 字号 评论关闭

 

DTD详解
目前有两种xml文档定义的语义约束
1、 Dtd document type definition
2、 xml schema
 
xml语义约束
web.xml
<serlvet>
<servlet-name></servlet-name>
<servlet-class></servlet-class>
</servlet>
<servlet-mapping>
<servlet-name></servlet-name>
<url-pattern></url-pattern>
</servlet-mapping>
Dtd约束包括那几个方面
1、 定义xml的根元素、内容和结构
2、 定义xml文档中可以接受那些元素
3、 定义xml文档里每个元素接受的合法内容,包括是否为空,是可以是文本,可以接受那些子元素,子元素出现的顺序和子元素出现次数等。
4、 定义xml文档中每个元素能接受那些属性
5、 定义xml文档中每个属性的类型,能接受那些值,以及元素对属性的约束等。
6、 定义属性的固定值和默认值
7、 定义xml文档或dtd中可以使用的实体。
Dtd有作用
1、 Dtd采用了非xml的语法描述语义约束,可以提供如下功能
2、 通过使用dtd可以让每个xml文件带有一个有关其自身的格式描述
3、 不同的公司、组织可一致地使用某个标准的dtd来交换数据
4、 应用程序也可以使用某个标准的dtd验证所介绍的xml文档是否符合语义约束
5、 开发者也可以使用dtd来验证所创建的xml文档。
引入dtd的方式
1、 内部dtd
2、 外部dtd
3、 公用dtd
1、 内部dtd
语义约束与xml文档的内容放在同一个xml文档中。内部dtd紧跟在xml声明和处理指令之后,以<!DOCTYPE 开始,以]>结束。其语法格式如下
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名[
元素描述
]>
xml文档主体部分
 
2、 外部dtd
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名 SYSTEM "外部的DTD的URL地址">
 
3、 公用dtd
 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE 根元素名 PUBLIC "DTD的标识名" "公用的DTD的URL地址">
 
定义一个元素
<!ELEMENT 元素名(子元素,)>
<!ELEMENT 元素名(#PCDATA)>
 
 
DTD的文档结构如下:
第一行是DTD声明部分 该声明与xml文档的生命语法格式相同
0到多个注释部分,DTD注释与xml文档的注释完全相同
0到多个<!ELEMENT…..>定义 每个它就是一个xml元素
0到多个<!ATTLIST…..>定义每个它就是一个xml元素的属性
0到多个<!ENTITY…..>定义每个它就是一个实体
0到多个<!NOTATION…..>定义 每个它定义一个符号
彼此之间完全独立,无须相互嵌套。
 
1、 定义元素
元素类型的定义的全称是:Element Type Defintion,简称ETD,它不但会定义每个文件中可能存在的元素,给元素的名称,而且会定义元素的具体类型。
元素类型描述主要有5种:
1、 任意类型
可以是以下四种的内容
语法格式:
<!ELEMENT 元素名 ANY>
2、 字符串值
 
3、 空元素 <br/>
4、 包含子元素
5、 混合类型
 
<!--任意类型-->
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book ANY>
]>
 
无效的xml文档但是格式良好的xml文档
 
 
 
<!--空元素-->
<!ELEMENT 元素名 EMPTY>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book EMPTY>
]>
有效的xml文档
 
 
<!--定义字符串内容的元素-->、
<!ELEMENT 元素名 (#PCDATA)>
 
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
 
 
<!--定义混合内容-->
<!ELEMENT 父元素名(#PCDATA|子元素1|子元素2|子元素3|........)*> 并不是互斥
|无序的重复出现 出现的次数不受限制
注意:1、#PCDATA必须放在最前面
2、#PCDATA只能用|与各个子元素分隔
3、不要试图在各个子元素之后添加?、*、+等表示频率的修饰符
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (#PCDATA|book_name|price|author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
 
<computer>
 
<book_name>JavaWeb开发</book_name>
<price>30.0</price>
<author>redarmy_chen</author>
</computer>
 
 
<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>
</book>
 
定义子元素
1、 有序的子元素(,)
(,)用于分隔有序的子元素
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name,price,author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
 
<computer>
 
<book_name>JavaWeb开发</book_name>
<price>30.0</price>
<author>redarmychen</author>
</computer>
 
 
<computer>
<book_name>CSS应用程序的开发</book_name>
<price>1000</price>
<author>redarmy_Chen</author>
</computer>
 
</book>
2、 互斥的子元素
互斥的子元素表明一系列的子元素中只能出现其中之一。
(|)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book[
<!ELEMENT book (computer)*>
<!ELEMENT computer (book_name|price|author)>
<!ELEMENT book_name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
 
<computer>
<book_name>JavaWeb开发</book_name>
</computer>
 
 
<computer>
<price>30</price>
</computer>
 
 
<computer>
<author>redarmy_Chen</author>
</computer>
 
</book>
 
3、 子元素出现的频率
 
 
+: 一次或多次 (书+)
?: 0次或一次 (书?)
*: 0次或多次 (书*)
注意:混合类型的频率只能安如下方式加:
<!ELEMENT computer (#PCDATA|book_name|price|author)*>
//#PCDATA以它开头的是混合类型频率只能在最后加
 
 
 
4、 组合子元素
<!ELEMENT computer (book_name|price|author)>
 
5、 无序的子元素
 
 
2、 定义属性
<!ATTLIST属性所属元素  属性名  属性类型[元素对属性的约束][默认值]>
元素对属性的约束|默认值是可选的对于它们的使用有如下的情况:
1、 在没有指定”元素对属性的约束”时,必须为该属性增加默认值。
2、 在元素对属性的约束是:#REQUIRED时,不能为该属性指定默认值。
3、 在元素对属性的约束是:#IMPLIED时,不能为该属性指定默认值
4、 在元素对属性的约束是:#FIXED时,必须为该属性指定默认值
#REQUIRED:必须的属性
#IMPLIED:可有可无
#FIXED:固定值
<水果 品名=”苹果” 颜色=”绿色”>关于水果的元素</水果>
属性类型

类型
说明
CDATA
字符串数据 character data
(e1|e2|e3)
该属性是一系列枚举值之一
ID
Id必须是唯一的
IDREF
引用自己已经定义的id
IDREFS
空格区分多个id
ENTITY
是一个外部的实体
ENTITIES
多个外部实体,多个外部实体之间用空格分隔
Xml:
预定义的xml值

抱歉!评论已关闭.