`

DTD基础

    博客分类:
  • XML
XML 
阅读更多

DTD

Document Type Definition.

 

一.在XML文档中引入DTD

内部DTD

声明格式: <!DOCTYPE 根元素名称[...这里是DTD具体的内容...]>

 

内部DTD的优点

直观,修改方便,不需要担心XML处理器找不到DTD.

内部DTD的缺点

使XML文件变长.无法共享DTD.

 

外部DTD

DTD文档的文件名

只能包含ASCII字母和数字字符,空格,回车符,换行符和一些标点符号 -'()+,./:=?;!*#@$_%  注意:Windows文件的命名规则没有这么严厉.

 

声明私有DTD文件的格式:<!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI.dtd">

SYSTEM:表示使用私有DTD.

外部DTD文件的URI:可以是绝对,也可以是相对.这部分也称为 系统标识符 .

 

 

声明公共DTD文件的格式:<!DOCTYPE 根元素名称 PUBLIC  "DTD文件" "外部DTD文件的URI.dtd">

PUBLIC:表示使用公共的DTD.

"外部DTD文件的URI.dtd":称为 公共标识符.

"DTD文件":

如果是IOS的标准组织批准的DTD,它的名称以 + 开始.

如果不是IOS的DTD,它的名称以 - 开始.

开始字符串后跟双斜杠  // ,再接DTD所有者的名字,再接双斜杠  //  ,再接ISO639语言标识符(英语为EN,中文为ZH).

如:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

说明:W3C不是官方所批的标准组织.但由于它的权威性使它成为事实上的标准.

 

 

二.DTD的结构

DTD由元素类型,属性表声明,实体声明,记号声明等构成.

DTD通过元素之间的父子关系,描述整个文档的结构关系.

 

DTD的文档结构如下:

第一行是DTD声明部分 该声明与xml文档的生命语法格式相同

0到多个注释部分,DTD注释与xml文档的注释完全相同

0到多个<!ELEMENT…>定义   每个它就是一个xml元素

0到多个<!ATTLIST…>定义    每个它就是一个xml元素的属性

0到多个<!ENTITY…>定义      每个它就是一个实体

0到多个<!NOTATION…>定义 每个它定义一个符号

彼此之间完全独立,无须相互嵌套。

 

 

1.元素类型声明

说明DTD中可以存在的元素,给出元素的名称,给出元素的具体类型.

语法格式:<!ELEMENT 元素名称 (元素内容形式)>

 

元素内容形式:

(1)#PCDATA

关键字,说明元素包含字符数据.

 

(2)元素型内容

说明元素包含子元素.当一个元素只包含一个子元素,没有字符数据时,则称此元素类型具有元素型内容.

内容模型是决定子元素类型和子元素出现顺序的一种简单语法.

例:XML文档中

<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hr[
<!ELEMENT hr(employee)>
<!ELEMENT employee(#PCDATA)>
]>

<hr>
    <employee>雇员</employee>
</hr>  
 

如果xml元素内有多个子元素.可以在圆括号 ( ) 中包含子元素名称,子元素之间用逗号 ,  分隔.

用逗号隔开的一系列子元素成为一个序列,表示这些元素在文档中要严格按照序列的顺序出现在文档中.

例:

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE hr[
<!ELEMENT hr(employee)>
<!ELEMENT employee(name,age,sex)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age(#PCDATA)>
<!ELEMENT sex(#PCDATA)>
]>

<hr>
    <employee><?xml version="1.0" encoding="GB2312"?>
        <name>剑圣</name>
        <age>128</age>
        <sex>男</sex>
    </employee>
</hr> 

 

如果xml元素的子元素是多个元素中的一个,有且只有一个.可以在圆括号 ( ) 中包含子元素名称,子元素之间用竖线 | 分隔.

<!DOCTYPE hr[
<!ELEMENT hr(employee)>
<!ELEMENT employee(name,age,sex)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age(#PCDATA)>
<!ELEMENT sex(#PCDATA)>
<!ELEMENT salary(cash|credit_cash)>
......
]> 

 

如果xml元素中的某个子属性可以存在任意多个,即可以没有,也可以有多个.可以在该属性后添加星号 *  .

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE hr[
<!ELEMENT hr(employee)>
<!ELEMENT employee((name,age,sex),interest*)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age(#PCDATA)>
<!ELEMENT sex(#PCDATA)>
<!ELEMENT interest(#PCDATA)>
]>

<hr>
    <employee><?xml version="1.0" encoding="GB2312"?>
        <name>剑圣</name>
        <age>128</age>
        <sex>男</sex>
        <interest>杀农民</interest>
        <interest>砍山丘</interest>
    </employee>
</hr> 
 

如果xml元素中的某个子属性至少需要一个.可以在该属性后添加加号 +  .

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE hr[
<!ELEMENT hr(employee)>
<!ELEMENT employee((name,age,sex),interest+)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age(#PCDATA)>
<!ELEMENT sex(#PCDATA)>
<!ELEMENT interest(#PCDATA)>
]>
....... 

 

如果xml元素中的某个子属性最多只有一个,即0个或1个.可以在该属性后添加问号 ?  .

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE hr[
<!ELEMENT hr(employee)>
<!ELEMENT employee((name,age,sex),interest+,spouse?)>
<!ELEMENT name(#PCDATA)>
<!ELEMENT age(#PCDATA)>
<!ELEMENT sex(#PCDATA)>
<!ELEMENT interest(#PCDATA)>
]>
....... 

 

复合形式

例:

<!ELEMENT 简历(名字,性别,年龄,(电话|手机),家庭住址?,兴趣爱好*,教育经历+,工作经验*)>

 

 

(3)混合内容

表明元素既可以包含字符数据,也可以包含子元素.混合内容必须被定义零个或多个。

要注意的是:在使用混合内容模型时,#PCDATA关键字必须是模型中的第一个选项,不能再模型中使用逗号,问号,或加号.只用竖线分割是合法的,其他分割都是非法的.

例:

<?xml version="1.0" encoding="GB2312"?>

<!DOCTYPE employee[
<!ELEMENT employee(#PCDATA|name)*)>
<!ELEMENT name(#PCDATA)>
]>

<hr>
    <employee>
        宇宙第三
        <name>剑圣</name>
    </employee>
</hr>

 

(4)EMPTY

关键字,说明元素是一个空元素.

例:在html中声明br标签, <!ELEMENT br EMPTY> .

 

(5)ANY

关键字,说明该元素可以包含任何字符数据和子元素.只要不违反XML格式良好的约束即可.在实际使用中,应该尽量避免使用ANY。

例:<!ELEMENT employee ANY> .

 

 

2.实体声明

DTD中的特殊符号使用引用实体声明:   &符号编码;

 

在多个文档中调用相同的内容,为了避免重复输入这些内容.则可以声明一个实体来表示这些内容,在文档中只需要引用这个实体,经过XML处理器对文档进行分析处理后,引用实体的位置会被实体的内容所替换.

实体用ENTITY关键字声明

 

 

(1)一般实体和参数实体

一般实体

一般实体声明格式:<!ENTITY 实体名 “实体内容”>

实体的使用格式:   &实体名;     (与特殊符号的引用实体一致)

 

<?xml version=”1.0” encoding=”GB2312”?>
<!DOCTYPE website[
<!ELEMENT website(name,copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright(#PCDATA)>
<!ENTITY name “程序员之家”>
<!ENTITY copyright “&#169;2004,程序员之家,All Rights Reserved”>
]>
<webstie>
<name>&name;</name>
<copyright>&copyright;</copyright>
<website>

 

 

参数实体

参数实体只能在DTD内使用使用.

声明格式:<!ENTITY % 实体名 “实体内容”>

注意ENTITY,%, 实体名,之间各有一个空格.

引用参数实体的方式:  %实体名;

 

例:

 

以下是一个dtd文件  website.dtd. 
<?xml version=”1.0” encoding=”GB2312”?>
<!DOCTYPE website[
<!ELEMENT website(name,copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright(#PCDATA)>
<!ENTITY % name “程序员之家”>
<!ENTITY copyright “&#169;2004,%name; ,All Rights Reserved”>
]>

以下是xml文件    web.xml
<?xml version=”1.0” encoding=”GB2312”?>
<!DOCTYPE website SYSTEM “website.xml”>
<webstie>
<name>程序员之家</name>
<copyright>&copyright;</copyright>
<website>
  

当参数实体引用出现在标记声明内部的时候,DTD应该放在外部子集中.在内部DTD子集中,参数实体引用不能再标记声明的内部出现,但可以在标记声明允许出现的地方出现.

 

在内部DTD中,参数实体引用只能标记在声明之外使用.

例:

<?xml version=”1.0” encoding=”GB2312”?>
<!DOCTYPE website[
<!ELEMENT website(name,copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT  % cprt “<!ELEMENT copyright (#PCDATA)>”>
%cprt;
<!ENTITY copyright “&#169;1991,落日酒馆; ,All Rights Reserved”>
]>
<webstie>
<name>程序员之家</name>
<copyright>&copyright;</copyright>
<website>

 

在DTD中,所有参数实体必须在引用之前进行声明.这意味着内部DTD子集不能引用在外部DTD中声明的参数实体,这是因为XML处理器将首先读取内部子集,也就是说,内部子集中的实体和属性表声明的优先级要比在外部子集中得高.

 

 

(2)内部实体和外部实体

内部实体在XML文档内部定义,实体的内容在声明中给出.内部实体都是已解析的实体,它们没有单独的物理存储对象.

 

外部实体在单独的(外部)文件中定义,外部实体可以是已解析实体,也可以是未解析实体.

外部一般实体的声明形式如下:<!ENTITY copyright SYSTEM “http://www.........”>

SYSTEM表明这是一个私有的外部一般实体,后面的URI称为该实体的系统标识符.



3.属性声明

属性表声明

属性用于将名字-值对与元素进行关联.属性说明只能在开始标签和空元素标签中出现.

属性表声明详细说明了与给定元素类型相关联的每一个属性的名字,数据类型和默认值.

格式:<!ATTLIST 元素名 属性名 属性类型 默认声明>

(1)属性类型

CDATA 字符串数据 character data

(e1|e2|e3) 该属性是一系列枚举值之一

ID 当前属性表示唯一的id.

IDREF 引用已经定义的id

IDREFS 空格区分多个id

ENTITY 一个外部的实体

ENTITIES 多个外部实体,多个外部实体之间用空格分隔

NMTOKEN

NMTOKENS

NOTATION

 

(2)默认声明

#REQUIRED 说明该属性必须存在.

#IMPLIED 说明该属性可有可无.

#FIXED 默认值 说明一个固定的属性默认值,文档的编写者不能修改该属性的值.

只有默认值 若元素中没有当前属性,则该属性的值为设置的默认值.


(4)记号声明

很多数据无法用XML来表示,如声音,图像,影像等.通过DTD记号声明为非XML数据描述一种可能的格式,或者指定一个外部处理程序.

记号声明有两种形式,一种是使用MIME类型.

<!NOTATION gif SYSTEM “image/gif”>

 

另一种是使用URI路径,指出外部处理程序的位置.

<!NOTATION gif SYSTEM “iexplore.exe”>

 

记号的声明也可以使用PUBLIC代替SYSTEM,并添加公共的名称和URI.

分享到:
评论

相关推荐

    DTD的CHM帮助文档

    1. **XML基础**:讲解XML的基本概念,包括XML的起源、XML文档的结构、XML声明、命名规则等。 2. **DTD语法**:详细阐述DTD的语法元素,如元素声明、属性声明、实体声明、注释以及选择性声明等。这包括元素的类型...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    每个子元素都有其特定的作用,它们共同构成了MyBatis框架的基础配置。 接下来是`mybatis-3-mapper.dtd`。这个DTD定义了映射文件的结构,即`mapper.xml`文件。`mapper.xml`文件是SQL语句和Java方法之间的桥梁,它...

    sql-map-2.dtd和sql-map-config-2.dtd

    在IT行业中,数据库操作是核心任务之一,而Ibatis作为一款优秀的Java持久层框架,极大地简化了数据库操作...在开发过程中,合理地利用它们可以提升开发效率,减少出错的可能性,是每个Ibatis使用者应当掌握的基础知识。

    mybatis配置dtd文件

    `mybatis-3-config.dtd`是MyBatis配置文件的DTD,它是`mybatis-config.xml`的基础。这个文件定义了所有可以用于MyBatis全局配置的元素、属性以及它们的顺序和限制。例如: 1. `&lt;configuration&gt;`:根元素,包含...

    mybatis两个重要的dtd文件 batis-3-config.dtd mybatis-3-mapper.dtd

    在`batis-3-config.dtd`中,定义了如`configuration`、`properties`、`environments`、`transactionManager`、`dataSource`、`mappers`等元素,这些元素构成了MyBatis配置的基础。例如,`environments`元素用来定义...

    几个常用的DTD

    DTD,全称Document Type Definition,是XML文档类型定义的缩写。...不过,随着XML Schema等现代验证工具的发展,DTD的重要性在某些场景中可能被替代,但其基本概念和作用仍然是XML基础的重要组成部分。

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    总的来说,理解和熟练运用`hibernate-configuration-3.0.dtd`和`hibernate-mapping-3.0.dtd`对于开发者来说至关重要,因为它们构成了Hibernate配置和对象映射的基础。通过这些文件,我们可以精确地配置Hibernate以...

    XML的DTD教程

    ### XML的DTD教程 ...以上是对XML的DTD教程进行了较为详细的介绍,涵盖了DTD的基础概念、作用、声明方式以及元素定义等内容。通过学习这些内容,可以帮助读者更好地理解和使用DTD来定义和验证XML文档。

    Spring基础包的dtd(aop,jdbc,jee,jms,lang,mvc,oxm)等

    本篇文章将深入探讨Spring基础包中的各个DTD文件,包括aop、jdbc、jee、jms、lang、mvc、oxm以及task和tx等模块。 首先,`aop.dtd`是Spring的面向切面编程(AOP)模块的DTD文件。它定义了如何在XML配置中声明切面、...

    DTD文件和XSD文件

    在实际开发中,理解和掌握这些DTD和XSD文件至关重要,因为它们是构建和维护Java Web应用程序的基础。理解每个文件的作用和结构可以帮助开发者编写有效的配置文件,确保应用程序按照预期运行。同时,这些文件也是框架...

    log4j中的dtd文件

    1. **控制台输出**:这是最基础的日志目的地,通过`ConsoleAppender`元素实现。开发者可以设置日志信息在控制台上显示的格式和级别。 2. **文件输出**:使用`FileAppender`或`RollingFileAppender`,可以将日志信息...

    XML基础教程包括DTD和Schema

    总结来说,XML基础教程包括对XML的基本概念、语法规则、树形结构的理解,以及使用DTD和Schema进行数据验证的方法。掌握这些知识对于任何涉及数据处理和交换的IT专业人员都是至关重要的。通过学习XML,开发者能够创建...

    JS操作XML中DTD介绍及使用方法分析

    这允许在外部DTD基础上添加额外的定制规则。 在DTD中,元素可以被定义为: - 元素类型:例如`&lt;!ELEMENT elementName (elementContent)&gt;`,其中`elementContent`可以是其他元素的组合或者表示元素内容的数据类型,...

    配置dtd文件步骤

    ### 配置DTD文件步骤详解 #### 一、前言 在进行MyBatis框架的开发过程中,正确地配置DTD(Document Type Definition)文件是非常重要的一步。DTD文件可以帮助开发者更好地理解XML文件结构,并确保XML文件格式正确...

    DTD和Schema

    **DTD(Document Type Definition)与XML ...总的来说,虽然DTD在XML文档验证方面起着基础作用,但XML Schema因其增强的功能和灵活性已成为更广泛接受的标准。开发者应根据项目需求选择合适的方式来定义XML文档的结构。

    hibernate需要的2个DTD文档

    这两个文件是Hibernate能够正常工作的基础,它们为开发者提供了一种标准化的方式来描述和配置持久化层。 通过理解这两个DTD文档,开发者可以更好地掌握Hibernate的工作原理,编写出更加规范、易于维护的配置和映射...

Global site tag (gtag.js) - Google Analytics