麻辣堂|资源主站|开发论坛|在线手册
首页 Apache Linux Java MySQL 注册帮助 
PHP项目开发组是PHP开发资源网于2007组年建成立的项目开发团队,目前核心开发成员有27人, 项目协作成员8名.下设7个开发组,主要承接大/中型网站项目开发任务。

    由于开发任务较多,人员比较紧张,现面向社会招聘全职或者兼职开发人员,不管你是在校大学生,还是全职开发人员,以及SOHO都可以联系本站,我们可以长期合作,并为您带来丰厚的报酬。
  您现在的位置:PHP开发资源网 > 麻辣堂 > 详细资料
待解决
Dreamweaver与XML综合应用 第八章 名 域
悬赏分:20 - 2007年08月09日

第8章 名 域
名域(Namespace,也称为名称空间)在XML中是一个非常重要的概念,如果没有名域这个概念,XML的应用范围将受到很大的限制。如果您熟悉Perl或Java,那么您可能在不知不觉中使用了名域。名域的规定并没有收录在XML 1.0的标准中,而是通过后来的一份单独的标准来增补的,这份标准是“Namespaces in XML”。
在本章中,将详细叙述名域的必要性、名域的声明及应用、名域的范畴以及预设的名域等内容。
8.1 名域的概述
XML能够使开发者为工程创建自己的标记语言。这些语言可以和工作于世界各地的类似工程的工作者们共享。使用这种方式工作的典型实例之一就是XSL。XSL本身就是用于XML样式文档的一个XML应用程序。XSL变换语言必须输出任意的、结构整洁的XML,或许还包括XSL本身。因此,需要有明确的手段来区分何为XSL转换指令的XML元素、何为输出的XML元素,即便它们有相同的名称也得要区分开!
在本节中,将首先通过一个具体的实例来阐述为什么在XML中需要使用名域,然后介绍名域的结构、声明和范畴等内容。
8.1.1 为什么要使用名域
这里假设某一出版社原先设计了一个XML通讯录,其中包含了其近几年来出版的书的信息,发布到网上,以供书商联系。其XML文档的框架代码如下所示。
<图书信息>
<书 出版日期="2001">
<书名>...
<作者>
<姓名>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...

<定价>...
<摘要>...


<书 出版日期="2001">
<书名>...
<作者>
<姓名>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...

<定价>...
<摘要>...

...

为了书商的联系方便,想在“图书信息中”添加一项负责此书的“责任编辑”的联系方式。而责任编辑的信息,例如联系电话、E-mail地址等,都记录在出版社的另一份有关职员信息的XML文档中。文档基本框架的代码如下所示。
<职员名单>
<职员>
<姓名>...
<部门>...
<职位>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...


<职员>
<姓名>...
<部门>...
<职位>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...

...

因此需要把“职员名单”中的部分数据和“图书信息”结合起来,修改后的“图书信息”文档基本框架如下所示。
<图书信息>
<书 出版日期="2001">
<书名>...
<作者>
<姓名>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...

<定价>...
<摘要>...
<责任编辑>
<姓名>...
<部门>...
<职位>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...



<书 出版日期="2001">
<书名>...
<作者>
<姓名>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...

<定价>...
<摘要>...
<责任编辑>
<姓名>...
<部门>...
<职位>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...


...

由于“职员名单”和“图书信息”这两套XML语汇中同时包含了如“电话”、“E-Mail”元素,造成了混乱。虽然对于人来说,通过分析上下文,可以很容易地将来自两个XML文档的相同元素区别开,但是对于计算机程序来说,就是一件很不轻松的事情。因此,在这种情况下,就必须设计一种简单明了的方法,使计算机很容易处理这来自两个XML文档中的相同元素。即使没有任何名称上的冲突,仍然有必要设计一个简单明了的方法,使计算机知道哪些元素来自哪个语汇,以便使用该语汇的DTD来确认文件结构的正确性。
一个可行的方法是在“书”元素下,把一些过于笼统的子元素名(例如“姓名”、“电话”等元素)前面加上“作者”两字,也就是把它们分别改为“作者姓名”、“作者电话”等,此外对“职员名单”也作相同的处理,在“职员”的子元素前加上“职员”两字,例如“姓名”、“电话”变为“职员姓名”、“职员电话”等。这诚然是一个可行的办法,但是这么做必须要改动DTD里面的定义,但是由于不是所有的DTD都是自己设计的,有些是无法改变的,即使改了,仍然无法保证以后不会再遇到类似的同名元素。因此对于XML来说,这不是一个可行的方法。
名域概念正是在这种背景下提出来的。它的概念非常直接,如果每套XML语汇,都有各自一个独一无二的标志来代表,并且在使用的时候,它这个标志和语汇中的元素、属性名连在一起,那么就不会和其他语汇中的元素造成混乱了。因为每个语汇中的元素、属性,都已经事先被该语汇的独特标识码给限定了。其实这个解决办法和前面提出的方法有共同之处,那就是在含糊的元素或属性前加一个限定,使这个语汇中的元素或属性名独一无二,避免和其他语汇相冲突。只不过名域的做法使让编写XML文件的人替文件中所用到的语汇,自行指定标识码。
一个独特的标识码,代表一套语汇,各语汇中的名称,因而能各得其所,有它们自己的活动领域,这就是名域这个名称的由来。
8.1.2 名域的声明
XML采用了一个非常聪明、简单的方法来指定名域,那就是利用网络域名地址来标识名域。这是由于域名地址是独特的,而且由于各机关对于放在自己网域下的域名有完全的控制权。
在一般情况下,我们所说的“网址”是指URL,但是在名域中规定必须使用URI。URI是Uniform Resouce Identifier(同一资源标示码)的缩写,它是一个Internet标准,记载于RFC 2396。URI与URL,URN的区别主要是:URI泛指所有以字符串进行标示的网络资源,范围涵盖了URL和URN;而URL是指标有通信协议(如:HTTP、FTP)的字符串;URN(Uniform Resouce Name)主要是指用来标示持久、而且有专责机构负责的资源。
下面来看XML到底是如何声明名域的。现看下面的例子,这个例子是用于解决本节开始提出的名称冲突的问题。代码如下所示:
<?xml version="1.0" encoding="??????" ?>
xmlns:职员="http://www.bar.com/employe.dtd">

...

...

...
...
...

...
...

...
...

<职员:姓名>...
<职员:部门>...
<职员:职位>...
<职员:电话>
<职员:公司电话>...
<职员:住宅电话>...
<职员:手机>...

<职员:EMail>...
<职员:Fax>...




...

...

...
...
...

...
...

...
...

<职员:姓名>...
<职员:部门>...
<职员:职位>...
<职员:电话>
<职员:公司电话>...
<职员:住宅电话>...
<职员:手机>...

<职员:EMail>...
<职员:Fax>...




从上面的例子,可以看出名域是通过“独特标识码+名称”的方式,让每个XML语汇中的元素、属性名都能有它们自己的领域,而不会和其他语汇中的名称发生冲突。也就是说在名称前面加上独特的标识码,这个名称就变成独一无而的了。
虽然XML选用URI来做独特的标识码,但是一般的URI都很长,如果直接拿来放在元素和属性名称前,不但书写不便,而且阅读也不方便。因此通常使用一个简短的代号来替代URI。这个简短的代号,在名域的标准中称为“前置字串”(Namespace prefix)。它是由编辑XML文档的人自由决定的,例如上例中的book、职员。前置字串只能包含XML标准中允许作元素和属性名的字,这包括了英文字母和所有收录在Unicode中的汉字。但是在XML标准中,把所有以“xml”这三各字母开头的前置字串保留作特殊的用途,所以使用者不能使用这三个字母来起头,不管是“xml”、“XML”、“XMl”等什么样的大小写组合都不允许。
那么应该通过什么样的方式才能将前置字串和它所代表的名域关联起来呢?由上面的例子,可以看出形式是:“xmlns:前置字串=URI”。
使用名域的目的是在一个XML文件中使用多种语汇,要实现这个目的必须先将各个语汇的名域和前置字串定义好,然后根据具体的需要在各个元素或属性名前加上适当的前置字串,并将两者以冒号分隔开。在前面的例子中,“http://www.bar.com/book.dtd”是给“图书信息”这个XML语汇指定的名域标识码,“http://www.bar.com/employe.dtd”是“职员名单”的标识码。为了书写方便和阅读的方便,用“book”这个前置字串代替“图书信息”的标识网址(xmlns:book="http://www.bar.com/book.dtd"),用“职员”来代替“职员名单的标识网址(xmlns:职员="http://www.bar.com/employe.dtd")。一个元素里面可以放置多个xmlns的属性声明,一旦声明完成以后,只要将各个元素名都加上这个前置字串,就不会产生冲突了。
8.1.3 名域的范畴
范畴(Scope)是一个非常重要的概念,对于程序设计来说特别重要,如果将前面一个实例的代码该成如下:
<?xml version="1.0" encoding="??????" ?>


...

...

...
...
...

...
...

...
...
xmlns:职员="http://www.bar.com/employe.dtd">
<职员:姓名>...
<职员:部门>...
<职员:职位>...
<职员:电话>
<职员:公司电话>...
<职员:住宅电话>...
<职员:手机>...

<职员:EMail>...
<职员:Fax>...



也就是把名域放在“责任编辑”的地方才声明。虽然这样修改后也能够达到类似的效果,把两套来源不同的元素区分开来,但名域所覆盖的范畴已经发生了改变。所有“责任编辑”前面的“book”都必须去掉,否则发生错误。在浏览器中显示如图8.1所示的错误结果。
由图8.1所示的信息可以知道“book”覆盖的范畴已经缩小了,因此“责任编辑”前面的“book”前置字串没有声明。
因为名域有范畴的特性,因此在元素中声明名域时,必须先将覆盖的层级问题考虑进去,最简单的方法,当然时在最外围的根元素标签里,先把所有的名域和要指定的前置字串都定义好。如果要在文档中途声明某名域,则最好确定所有来自这个名域的元素,都能被声明所在的元素所覆盖,否则发生错误。

图8.1 显示错误信息
8.2 预设名域
在本节中,将介绍预设名域的概念和其声明方式,以及怎样将预设名域和范畴联合起来,一起运用达到意想不到的结果。
8.2.1 预设名域的概念和声明
XML中预设(Default)名域是指没有指定前置字串的名域,所有没有加上前置字串和冒号的元素、属性名都是在预设的名域范畴中。如同一般的名域,可以通过声明将预设的名域标识出来。预设名域的声明和前面介绍声明一般名域的方法(xmlns:前置字串=“URI”)非常类似,只是少了冒号和前置字串部分,变成了xmlns=“URI”。可以把预设名域的前置字串想成是空字符串。例如对于前面的示例,如果改用预设名域的做法来写,代码如下所示。
<?xml version="1.0" encoding="??????" ?>
<图书信息 xmlns="http://www.bar.com/book.dtd"
xmlns:职员="http://www.bar.com/employe.dtd">
<书 出版日期="2001">
<书名>...
<作者>
<姓名>...
<电话>
<公司电话>...
<住宅电话>...
<手机>...

...
...

<定价>...
<摘要>...
<责任编辑 >
<职员:姓名>...
<职员:部门>...
<职员:职位>...
<职员:电话>
<职员:公司电话>...
<职员:住宅电话>...
<职员:手机>...

<职员:EMail>...
<职员:Fax>...


“图书信息”这套语汇现在已经被指定为预设的名域,任何没有前置字串和冒号的元素名,都会被认为是属于这个名域。
预设的名域,可以在文件中变来变去,就像一个前置字串在同一文件中,可以先后和不同的URI串相连一样,并非声明过一次之后,就再也不能使用,只不过后面的声明会覆盖前面的同名的声明。
8.2.2 预设名域与范畴联合运用
虽然XML有自己的连接方式,合称为XLink/XPointer,在功能和花样上要比HTML的简单连接模式强大很多,但是由于目前这两套链接语法都还停留在草案的阶段,并没有成为正式的标准,而浏览器的支持也是非常的有限,因此有时常常要借用HTML的标签来作链接。
把HTML标签适时地拉进XML中来使用是一个很好的办法,不只是能作简单的超级链接,还可以作表单(Form)。因为XML并没有内建表单的功能,目前也没有一个通行的标准,因此要在XML文件中附加添表功能,并且能在浏览器中正确地显示、发送,最方便的方法就是通过名域,把HTML的

等元素内嵌到XML文档中。IE 5和目前仍在发展的Mozilla(Netscape 5)都支持这样的做法,一切就如同在HTML中一样。也可以配合脚本语言,例如JavaScript,VBScript来执行,作各种事件处理,例如onClick,onMouseOver等。
下面通过一个实例进行说明,其具体的操作步骤如下:
(1)启动Dreamweaver 4,新建一个文档。
(2)在工具栏的title文本框中输入“新概念Dreamweaver UltraDev 4教程”。
(3)然后在文档窗口中输入如下内容:
Dreamweaver 4 动感网页设计教程 作者:高萍 序:世纪之初,Internet的迅猛发展,信息社会的生活方式正逐步席卷全球。如何透过互联网的世界,制作出脍炙人口的网页及网站,是每一位网页设计师的努力目标。一个成功的网站,可以很清楚地将网站的主题与特色传达给每一位浏览者,因此如何设计出与众不同、独树一帜的网页,是一门重要的课题,但是还有一项不可忽视的重要因素,那就是网页设计的辅助工具。如何在设计网页是轻松地加入网页的相关物件、如何将设计出的网页同大型数据库相连接及如何让网页和用户交互,这些都是网页设计师最关心的问题。本书采用图文对照、典型实例与系统讲解相结合的方式,全面细致地介绍了Dreamweaver4的功能。全书分为两大部分。前半部分结合典型实例讲解Dreamweaver4的基本功能,从网页的布局排版、软件的基本操作到站点管理,涵盖了网页设计人员所必需的基本知识和基本技能。后半部分是综合实例,利用Dreamweaver4功能进行综合练习的同时,针对Dreamweaver4在Javascript、扩展功能方面的一些不足,从源代码编辑方面略做补充。欢迎来邮件联系 欢迎访问科学出版社
(4)通过拖拉鼠标,选择“欢迎来邮件联系”文本,在对应的属性设置面板中的Link文本框中输入“mailto:liuxiaodonglxd@263.net”。
(5)同样选择“欢迎访问科学出版社”文本,在对应的属性设置面板中的Link文本框中输入“http://www.sciencep.com/”。
(6)选择Insert|Form命令,在文档窗口中插入一个表单。然后将光标放置在表单红色的虚线框中,再选择Insert|Form Object|Button命令,在表单中插入一个按钮,在对应的属性设置面板的Label文本框中输入“Please Click Me”。
(7)选择Window|CSS Styles命令,则会出现CSS Styles面板。
(8)单击该面板顶部右边的三角按钮 ,从打开的下拉菜单中选择New Style命令,则出现New Style面板。
(9)在New Style面板中选择Redefine HTML Tag选项,此时面板顶部的Name变成Tag,然后在其后面的文本框中输入“book”,然后单击OK按钮。则会出现一个样式表文件保存对话框,将该样式保存到namescopebook.css文件中。然后单击“保存”按钮。
(10)此时,会出现样式定义面板,在该面板中定义各个属性(其具体的样式属性参看调整后的源代码)。
(11)通过同样的方法再定义title,author,preface,resume,connect标识符的样式(其具体的样式属性参看调整后的源代码)。
(12)再在New Style面板中选择Make Custom Style(class),然后在Name文本框中输入“.over”,同样保存到namescopebook.css文件中。在该面板中定义各个属性(其具体的样式属性参看调整后的源代码)。
(13)最后再定义.out的样式(其具体的样式属性参看调整后的源代码)。
(14)单击工具栏中的 按钮,切换到代码视图窗口,在该窗口中进行调整源代码并加入简单的脚本语言(可以通过第5章介绍的方法,使用Dreamweaver 4生成现成的脚本语言,然后通过复制、粘贴的方法加入到该文件中)。调整后的源代码如下:
<?xml version="1.0" encoding="??????" ?>
<?xml-stylesheet type="text/css" ?>


book {
position:absolute;
top:0px;
width:700px;
height:200px;
border-color: #3300FF #00FF00 #FF0000 #CC00CC; border-style: double; border-top-width: 5px;
border-right-width: 3px;
border-bottom-width: 5px;
border-left-width: 3px;
padding: 1em;
background-color: white;
color: blue;
font-family: Times, serif;
font-style: italic;
}

title{
position:relative;
top:0px;
width:500px;
height:20px;
font-size:24px;
font-weight: 900;
font-family:Arial,Helvetica,sans-serif;
font-style: italic;
text-align: center;
color:red
}

author {
position:relative;
top:10px;
width:500px;
height:30px;
font-weight: 900;
font-family:Arial,Helvetica,sans-serif;
font-style: italic;
text-align: center;
color:green
}

preface{
display: block;
font-style: normal;
text-indent:2em;
color:blue
}

resume{
background:red;
margin:10 10 10 10
padding:5 5 5 5
font-weight: bold;
font-style: normal;
text-indent:2em;
color:black;
}

connect {
display:block;
color:white;
}

.over {
color:red;
font-Weight:900;
background:blue;
}
.out {
color:yellow;
background:#660033;
}


Dreamweaver 4 动感网页设计教程
作者:高萍
序:世纪之初,Internet的迅猛发展……这些都是网页设计师最关心的问题。


onmouseover="this.className='over'"
onmouseout="this.className='out'">
简介:本书采用图文对照……从源代码编辑方面略做补充。




欢迎来邮件联系


欢迎访问科学出版社


onmouseover="this.style.fontSize='24';
this.style.background='green'"
onmouseout="this.style.fontSize='12'
this.style.background='#CCCCCC' "
value="Please Click Me" />



(15)选择File|Save命令,将该文件保存为namescapebook.xml。
在浏览器中打开namescapebook.xml,显示效果如图8.2所示。当用户将鼠标光标移动到深红色背景上的文本时,该段文本的背景颜色变为蓝色,同时文字的颜色变为红色、加粗;当把鼠标光标移开后,有恢复原来的状态。这是由一下脚本实现的:
onmouseover="this.className='over'"
onmouseout="this.className='out'">

同样,当用户将鼠标光标移动到按钮上时,按钮上的文本背景颜色变为绿色;当把鼠标光标移开后,又恢复原来的状态。这是由以下脚本实现的:
onmouseover="this.style.fontSize='24';
this.style.background='green'"
onmouseout="this.style.fontSize='12'
this.style.background='#CCCCCC' "
value="Please Click Me" />


图8.2 显示效果

提问者:开心果   08-09 16:04
答复
我也来回答:
不管你有没有帮助我们,瓦岗寨8万村民将感谢你。。。。。

为防止灌水,您需要计算一道数学题: 答案:
48 + 24 = ? 请将计算结果填在上面

 
[]
©2007 PhpRes.COM