频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

XML认证教程,第 2 部分: Dtd

来源: 作者: 出处:巧巧读书 2006-12-30 进入讨论组
下一页 1 2 3 4 5 6 
访问地址 http://www.qqread.com/xml-soap/k291093.html

    一个“有效的”文件首先应该是“形式良好”的。但这还远远不够,它还要往前更进一步。一个XML文件必须遵守文件类型描述Dtd(Document Type Definition)中定义的种种规定。所有的文件都是由序言和文件体构成的。序言中包含了XML声明,在序言中还可以包含Dtd定义。

    内部Dtd

    一个“有效的”文件首先应该是“形式良好”的。但这还远远不够,它还要往前更进一步。一个XML文件必须遵守文件类型描述Dtd(Document Type Definition)中定义的种种规定。所有的文件都是由序言和文件体构成的。序言中包含了XML声明,在序言中还可以包含Dtd定义。

    最简单的使用Dtd的方法是在XML文件的序言部分加入一个Dtd描述,加入的位置是紧接在XML处理指示之后。一个包含Dtd的XML文件的结构为:

    <?xml version = "1.0" encoding="Gb2312" standalone = "yes"?>

    <?DOCTYPE 根元素名[元素描述]>

    文件体……

    这样,我们就定义了一个文件,它以DOCTYPE中规定的根元素名作为其根元素的名字。

    如果为每一个XML文件加入一段Dtd定义,是相当繁琐的。而且,更多的情况下,我们会为一批XML文件定义一个相同的Dtd.例如,对于报社中的每篇稿件,它们都有相同的格式,可以采用一个统一的Dtd,为每一篇单独定义既麻烦,又不利于统一格式。好在XML规范为我们提供了解决这个问题的方法,它就是外部Dtd.

     外部Dtd的好处是:它可以方便高效地被多个XML文件所共享。你只要写一个Dtd 文件,就可以被多个XML文件所引用。事实上,当许多组织需要统一它们的数据交换格式时,它们就是通过外部Dtd来完成的。这样做不仅简化了输入工作,还保证当你需要对Dtd做出改动时,不用一一去改每个引用了它的XML文件,只要改一个公用的Dtd文件就足够了。

为了引用一个外部Dtd,必须修改XML声明和DOCTYPE声明。

XML声明中必须说明这个文件不是自成一体的,即standalone属性的属性值不再是yes了:

<?xml version = "1.0"  encoding="Gb2312"  standalone = "no"?>
 
 
在DOCTYPE声明中,应该加入SYSTEM属性:<!DOCTYPE 根元素名 SYSTEM "外部Dtd文件的URL">

例如:

<!DOCTYPE 联系人列表 SYSTEM "http://www.mydomain.com/dtds/fclml.dtd">
 

    上面的URL是一个绝对路径,除此以外,它还可以是一个相对路径,如: <!DOCTYPE 联系人列表 SYSTEM "fclml.dtd"> 它说明这个Dtd文件和引用它的XML文件在同一个目录下。

    使用这种方法,你可以方便地把Dtd文件从你的XML文件中分离出来,粘贴到另一个文件fclml.dtd中。这样,你就得到一个Dtd文件和一个有效的XML文件。

公用Dtd

    使用外部Dtd时,要在DOCTYPE中使用关键字SYSTEM。实际上,SYSTEM不是引用外部Dtd的唯一方法,这个关键字主要用于引用一个作者或组织所编写的众多 XML文件中通用的Dtd。还存在一种外部Dtd,它是一个由权威机构制订的,提供给特定行业或公众使用的Dtd。因此,另一个引用外部Dtd的办法是使用关键字 PUbLIC,引用这一类公开给公众使用的Dtd。

    当使用关键字PUbLIC进行引用时,这个外部Dtd还需要得到一个标识名。引用公共Dtd的形式为: <!DOCTYPE 根元素 PUbLIC "Dtd名称" "外部Dtd的URL"> 

请见下面例子:


<!DOCTYPE 联系人列表 PUbLIC "联系人Dtd" "http://www.mydomain.com/dtds/fclml.dtd">
 

    这个Dtd标识的命名规则和XML文件的命名规则稍有不同。具体地说,Dtd名称只能包含字母、数字、空格和下面的符号:_%$#@()+:=/!*;?。同时,Dtd名称还必须符合一些标准的规定。例如,ISO标准的Dtd以“ISO”三个字母开头;被改进的非ISO 标准的Dtd以加号“+”开头;未被改进的非ISO标准的Dtd以减号“-”开头。

    无论是哪一种情况,开始部分后面都跟着两个斜杠“//”及Dtd所有者的名称。在这个名称之后又是两个斜杠“//”,再然后是Dtd所描述的文件的类型。最后,在又一对斜杠之后是语言的种类(参见ISO 639)。例如下面这个公用Dtd的引用:

<!DOCTYPE 联系人列表 PUbLIC "-//Luna Dong//Contact Data//CN" "http://www.mydomain.com/dtds/fclml.dtd">
 

    看上去的确比较复杂,不过没关系,对于Dtd的命名通常不是它的引用者的任务,XML 文件的编写者只要在自己的文件中把事先定义好的Dtd名称放在相应的位置中就可以了。

元素类型声明1

    一个Dtd不仅要告诉语法分析器它所关联的XML文件的根元素是什么,而且还要告诉语法分析器文件的内容和结构,说清文件结构中的每一个细节。为了定义这些细节,我们必须展开Dtd中元素说明部分,使用元素类型声明(Etd)来声明所有有效的文件元素。

    Etd不但说明了每个文件中可能存在的元素,给出了元素的名字,而且给出了元素的具体类型。一个XML元素可以为空,也可以是一段纯文本,还可以有若干个子元素,而这些子元素同时又可以有它们的子元素。Dtd正是通过元素之间的父子关系,描述了整个文件的结构关系。

Etd应该采用如下的结构: <!ELEMENT 元素名 元素内容描述> 

因此,在前面的例子里,可以在文件序言中通过如下方式定义“联系人列表”这个元素:

<?xml version = "1.0" encoding="Gb2312" standalone = "yes"?>
<!DOCTYPE 联系人列表[
<!ELEMENT 联系人列表 ANY>
]>

<联系人列表>
...
</联系人列表>
 

    这个Dtd定义了一个XML文件,它只有一个根元素,名为“联系人列表”,这个元素可以有任何类型的子元素,也可以是纯文本,还可以为空。

    但是需要注意,尽管元素“联系人列表”被定义为“可以”包含其它元素,但实际上这个 Dtd除了“联系人列表”元素本身外没有定义任何其它元素,所以也就没有其它元素可以用作“联系人列表”的子元素。“有效的”XML文件规定文件中所使用的任何元素都必须在Dtd中给出定义。 

    在“ANY”定义下使用任何纯文本都是无须另加说明的,这一点与元素不同。故而,在相同的Dtd定义下,下面一段XML文件则是合法的:

<?xml version = "1.0" encoding="Gb2312" standalone = "yes"?>
<!DOCTYPE 联系人列表[
<!ELEMENT 联系人列表 ANY>
]>

<联系人列表>
纯文本信息说明联系人信息
</联系人列表>
 

更多文章 更多内容请看Cisco认证体系专题XML详解ASP.NET教程专题,或进入讨论组讨论。
下一页 1 2 3 4 5 6 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章