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

2、DTD文档

2018年02月05日 ⁄ 综合 ⁄ 共 2525字 ⁄ 字号 评论关闭

什么是DTD、为什么要用DTD?

文档类型定义——Document Type Definition,DTD用来描述XML文档的结构,一个DTD文档包含:
- 元素(ELEMENT)的定义规则
- 元素之间的关系规则
- 属性(ATTLIST)的定义规则
- 可使用的实体(ENTITY)或符号(NOTATION)规则

1、DTD文档与XML文档实例的关系:相当于类与对象或者数据库表结构与数据记录的关系

    有了DTD,每个XML文件可以携带一个自身格式的描述。可以使用DTD校验自己的XML数据

2、DTD文档的声明及引用:
- 内部DTD文档:<!DOCTYPE 根元素 [定义内容]>
- 外部DTD文档:<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
- 内外部DTD文档结合:<!DOCTYPE 根元素 SYSTEM "DTD文件路径" [ 定义内容]>

<?xml version="1.0" encoding="UTF-8">
<!DOCTYPE poem [
<!ELEMENT poem (author,title,content)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT content (#PCDATA)>
]>
<poem>
    <author>王维</author>
    <title>鹿柴</title>
    <content>空山不见人,但闻人语声</content>
</poem>

以上是内部DTD文档的XML文件

poem(author,title,content)表示poem元素有三个子元素,并且必须按照指定的顺序出现;#PCDATA(Parsed Character Data),可解析的字符数据

定义一个外部的DTD文档:dtd_1.dtd

<?xml version="1.0" encoding="UTF-8">
<!ELEMENT poem (author,title,content)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT content (#PCDATA)>

xml文档对DTD进行引用:

<?xml version="1.0" encoding="UTF-8">
<!DOCTYPE poem SYSTEM "dtd_1.dtd">    
<poem>
    <author>王维</author>
    <title>鹿柴</title>
    <content>空山不见人,但闻人语声</content>
</poem>

第二行是对外部dtd的引用。

3、元素的定义:

- 语法:<!ELEMENT NAME CONTENT>
!ELEMENT是关键字,NAME是元素的名称,CONTENT是元素类型,元素类型有如下几种:EMPTY——该元素不能包含子元素和文本,但可以有属性(空元素);ANY——该元素可以包含任何在DTD中定义的元素内容;#PCDATA——可以包含任何字符数据,但不能在其中包含任何子元素;纯元素类型——只能包含子元素,并且这些子元素外没有文本;混合类型——包含子元素和文本数据的混合体。

DTD中的修饰符号:

举例:<!ELEMENT poem (author+,title*,content?)>

4、属性的定义

语法:<!ATTLIST 元素名称 属性名称 类型 属性特点>
类型有如下几种:CDATA、ID、IDREF/IDREFS、NMTOKEN/NMTOKENS、Enumerated、ENTITY/ENTITIES、NOTATION、NOTATIONS
属性特点主要有:#REQUIRED、#IMPLIED、#FIXED value、Default value

举例:<!ATTLIST author name CDATA  #REQUIRED>

CDATA——属性值可以是任何字符(包括数字和中文);NMTOKEN/NMTOKENS——是CDATA的一个子集,表示属性值必须是英文字母、数字、句号、破折号、下划线或冒号,属性值不能含有空格,NMTOKENS与NMTOKEN类似,包含多个由空格分隔的字符;ID——表示该属性的取值必须是唯一的;IDREF/IDREFS——IDREF属性的值指向文档中其他地方声明的ID类型的值,IDREFS同IDREF,但是可以具有由空格分开的多个引用;Enumerated——事先定义好一些值,属性的值必须在所列出的值的范围内。如:<!ATTLIST
person 性别 (男|女) #REQUIRED>;

属性的特点:#REQUIRED——必须有的;#IMPLIED——可以忽略该属性,可有可无;#FIXED value——该属性的值必须为指定的固定值;Default value——为属性提供一个默认值;

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

关于普通实体与参数实体
1) 普通实体是在dtd中定义,xml中使用,使用的时候格式为:&address;
2) 参数实体是在dtd中定义,dtd中使用,定义的时候使用%,使用的时候也需要使用%, %address;
3) 外部普通实体的定义方式是:<!ENTITY address SYSTEM “http://www.shengsiyuan.com/xml.xml”>
表示使用http://www.abc.com/xml.xml网址的内容来替换掉address,而不是使用http://www.abc.com/xml.xml字符串本身来替换掉address
4)外部参数实体:<!ENTITY % address SYSTEM “http://www.abc.com/xml.xml”>,使用的时候:%address;

6、命名空间(Namespace)

使用原因:XML的元素名是不固定的,当两个不同的文档使用同样的名称描述两个不同类型的元素的时候,就会发生命名冲突,

使用前缀解决命名冲突问题:<h:table></h:table>与<f:table></f:table>类似与java的pakage

使用命名空间属性:<h:table xmlns:h="http://www.abc.com/tr/html4/"></h:table>,使用全球唯一的url表示

【上篇】
【下篇】

抱歉!评论已关闭.