您的位置:首页 > 其它

DTD——描述xml的文档结构

2012-06-28 00:05 169 查看
一、DTD——描述xml的文档结构

1.DTD是用来校验xml文件的,DTD的全称Document Type Defintion,用来描述xml的文档结构,一个DTD文档包含:

1>.元素(ELENENT)的定义

2>.无素之间的无素关系

3>.属性(ATTLIST)的定义规则

4>.可以使用实体(ENTITY)或等符号(NOTATION)规则

2.如何生成一个DTD文档

1>.DTD和xml的关系:类似于类和对象之间的关系,一个类可以new多个对象,DTD是抽象的,而xml是具体的.

2>.DTD文档的声明及引用

1.内部DTD文档<!DOCTYPE 根元素[定义内容],例如:innerDTD.xml

<?xml version="1.0" encoding="gb2312" ?>
<!DOCTYPE poem[  <--根元素的名称
<!ELEMENT poem(author,title,content)>  <--子元素的名称及顺序
<!ELEMENT author(#PCDATA)>  <--子元素的数据类型
<!ELEMENT title(#PCDATA)>
<!ELEMENT content(#PCDATA)>
]>  <---标签结束

<poem>
<author>王维</author>
<title>鹿柴</title>
<content>
空山不见人,但闻人语声。
返景入深林,复照青苔上。
</content>
</poem>

2.外部DTD文档<!DOCTYPE 根元素 SYSTEM "DTD文件路径">例如:

outer.xml
<?xml version="1.0" encoding="gb2312" ?>
<!DOCTYPE poem SYSTEM "outer.dtd">
<poem>
<author>王维</author>
<title>鹿柴</title>
<content>
空山不见人,但闻人语声。
返景入深林,复照青苔上。
</content>
</poem>

outer.dtd
<?xml version="1.0" encoding="gb2312" ?>
<!ELEMENT poem(author,title,content)>
<!ELEMENT author(#PCDATA)>
<!ELEMENT title(#PCDATA)>
<!ELEMENT content(#PCDATA)>

3.内部DTD文档结合<!DOCTYPE 根元素 SYSTEM "DTD文件路径">例如:

mixed.xml
<?xml version="1.0" encoding="gb2312" ?>
<!DOCTYPE poem SYSTEM "mixed.xml" [
<!ELEMENT poem(author,title,content)>
<!ELEMENT author(#PCDATA)>
]>
<poem>
<author>王维</author>
<title>鹿柴</title>
<content>
空山不见人,但闻人语声。
返景入深林,复照青苔上。
</content>
</poem>

mixed.dtd
<?xml version="1.0" encoding="gb2312" ?>
<!ELEMENT title(#PCDATA)>
<!ELEMENT content(#PCDATA)>

3>.元素的定义

1.语法:<!ELEMENT NAME CONTENT>

ELEMENT:关键字

NAME:元素名称

CONTENT:元素类型

2.CONTENT:元素类型

EMPTY:该元素不能包含子元素和文本,但可以有属性-(空无素)。

ANY:该元素可以包含任何在DTD中定义的元素内容,

将根元素设为ANT类后,元素出现的次数和顺序不受限制(很少使用)。

#PCDATA:可以包含任何元素字符数据,但是不能在其中包含任务子元素(使用比较多)。

纯元素类型:只包含子元素,并且子元素中没有文本(使用比较多)。

混合类型:包含子元素和文本数据的混合体(很少使用)。

组合类型示例:<!ELEMNT 家庭 (人+,家电*)> 如:

<家庭>

<人 名字="李白" 性别="男" 年龄="25" />

<人 名字="杜甫" 性别="男" 年龄="26" 爱好="吟诵" />

<家电 名称="彩电" 数量="3" />

</家庭>

符号 用途 示例 说明

() 用来给元素分组 (李白|杜甫),(李小龙),金庸 分成三组

| 在列出的对象中选择一个 (男|女) 表示男或女必须出现,两者选一

+ 该对象至少出现一次, (成员+) 表示成员必须出现,而且可以出现多个成员

可以出现多次(1或者N次)

* 该对象允许出现零次到任意多次 (爱好*) 爱好可以出现零到多次

? 该对象可以出现, (菜鸟?) 菜鸟可以出现可以不出现,如果出现的话,最多出现一次

但只能出现0到1次

, 对象必须按指定的顺序出现 (北京,天津,重庆,上海) 表示北京,天津,重庆,上海必须出现,按照这个顺序出现

4>.属性的定义

1.语法:<!ATTLIST 元素名称 属性名称 类型 属性特点>

类型:CDATE 任何字符数据(包括数字和中文)

NMTOKEN 是一个CDATE的字集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号,属性值不能含有空格。

NMTOKENS 和NMTOKEN类似,包含多个由空格分隔的字符。

ID 表示该属性的取值必须是唯一的。

IDREF/IDREFS IDREF引用其它的ID。

NMTOKEN/NMTOKENS 事先定义好一些值,属性的值,必须在所列出的的值的范围内。

例如:<!ATTLIST person 婚姻状态(single|married|divorced|widowed) #IMPLIED>

Enumberated

ENTITY/ENTITES

NOTATION

NOTATIONS

属性特点:

#REQUIRED 必须的 元素的所有的实例都必须有该属性的值(这个属性值必须要出现)

#IMPLIED 可选的 元素的实例中可以忽略该属性(NULL)。<!ATTLIST content fax CDATE #IMPLIED> 表示fax属性可有可无。

#FIXED value 确定值 <!ATTLIST sender company CDATE #FIXED "Microsoft"> 属性值必须为Microsoft

Default value

5>.实义实体

1.内部实体 语法:<!ENTITY 实体名 "实体值">

2.外部实体 语法:<!ENTITY 实体名 SYSTEM "URI/URL"> 例如:

DTD示例:<!ENTITY struts SYSTEM "http://struts.apache.org/dtds/struts-2.3.dtd">

XML示例:<author>&struts</author>

3.实体类型:普通实体、外部实体、参数实体、外部参数实体

类型 普通实体 参数实体

使用场合 用在xml文档中 只用在DTD中元素和属性中声明



明 内部 <!ENTITY 实体名 "文本内容"> <!ENTITY %实体名 "文本内容">



式 外部 <!ENTITY 实体名 SYSTEM "外部文件URL地址"> <!ENTITY% 实体名 SYSTEM "外部文件URL地址">

引用方式 &实体名; %实体名;

4.普通实体:普通实体是指在xml中用的。参数实体:参数实体是指在xml中用的。

例如:

<!ENTITY %地址 "街道,城市,邮政,国家">

<!ELEMENT 联系人(人名,电话,%地址;)>

4>.命令空间(Namespace)

1.命令空间:避免元素名冲突

2.使用URL做为XML的Namespace

3.命名空间的语法定义:xmlns:[prefix="URL"]

4.元素和属性都可以做为应用命名空间

5.加前缀决解元素名冲突,例如:

<h:table xmlns:h="http://www.w3c.org/TR/html4">
<h:td>Apples<h:td />
<h:td>Bananas<h:td />
</h:table>

<f:table xmlns:h="http://www.w3schools.com/furniture">
<f:name>African Coffe Table<f:name />
<f:width>Bananas<f:width />
<f:length>120<f:length />
</f:table>


6.总结

1.一个有效的XML文件必须是结构正规的。结构正规的XML文档不一定是有效的。

2.DTD包含一套用来描述并限制XML文档的语法规则。

1.元素定义规则

2.元素之间的关系规则

3.属性的定义

4.可使用的实体或符号规则

3.命令空间:避免元素名冲突

4.在XML中,使用全球唯一的URL作为Namespace
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: