XML知识点滴(10)
(引用文章,版权归作者,如需删除请联系我)
XML名称空间
n 一个XML文档中可以包含许多元素与属性,当我们使用其他人的XML文档,或者在文档中使用多个DTD文件时,就有可能碰到名称相同的元素,而这些名称相同的元素就可能代表了完全不同的含义。比如:title可以用于表示标题,也可以用于表示某个人的头衔;table可以表示表格,也可以表示桌子。当这些具有相同名称不同含义的元素混合到一个文档中时,就会造成理解和处理上的混乱。为了解决这个问题,就要用到W3C发布的另一个推荐标准——XML名称空间。
n 可以在http://www.w3.org/TR/REC-xml-names/上查看XML名称空间规范的详细内容。
声明名称空间
n 名称空间通过使用一系列的保留属性来声明,这种属性的名字必须是以xmlns或以xmlns:作为前缀。与其他任何XML属性一样,这些属性可以直接或以缺省的方式给出。
n XML名称中的冒号“:”在XML命名中有特殊的含义。冒号前面的部分称为元素的“前缀”(Prefix),后面的部分称为元素的“本地名”(Local name)。前缀、冒号和本地名合起来称为元素的“限定名”(Qualified name)。前缀和特定的“统一资源标识符”(URI)相联系。具有该前缀的元素或属性称为属于该前缀对应URI所表示的名称空间。
n 名称空间的声明有两种形式:
Ø 第一种形式
<元素名 xmlns:prefixname=”URI”>
元素名是指你在哪一个元素上声明名称空间,在这个元素上声明的名称空间适用于声明它的元素和属性,以及该元素内容中的所有元素及其属性。
xmlns:prefixname作为该元素的属性名,属性的值是一个URI引用,是标识该名称空间的名称空间名字。其中prefixname给出名称空间前缀的名字,该前缀用于将元素及属性的名字与URI关联在一起。要注意的是,在这样的声明中,名称空间的名称不能为空(””)。如果有两个URI,其组成字符完全相同,可以认为它们标识了同一个名称空间。
来自于XML名称空间的名字可以作为限定名(qualified names)出现,限定名包括了一个以冒号(:)分隔的名称空间前缀和一个本地部分(local part)。映射到URI引用的名称空间前缀选择了一个名称空间。
例如:
<hr xmlns:hr=”http://localhost/hr”>
<hr:employee>
名称空间前缀可以是不包含冒号的任何合法的XML名称。
在声明名称空间时,有两个前缀是不允许使用的,它们是xml和xmlns。xml前缀只能用于XML1.0规范中定义的xml:space和xml:lang属性,前缀xml被定义为与名称空间名字http://www.w3.org/XML/1998/namespace绑定。前缀xmlns仅仅用于声明名称空间的绑定,它被定义为与名称空间名字http://www.w3.org/2000/xmlns绑定。
名称空间推荐标准中指出,在名称空间声明中,使用相对URI引用已经被废弃了(不赞成使用)。
Ø 第二种形式
<元素名 xmlns=”URI”>
这种声明形式没有给出名称空间的前缀名,URI所标识的是缺省的名称空间。在这样的 缺省声明中,属性可以为空(””)。例如:
<hr xmlns=”http://localhost/hr”>
表明声明了一个缺省的名称空间,hr元素及其内容中所有的没有前缀的元素都属于http://localhost/hr所标识的名称空间,除非被hr元素内容中其他的缺省名称空间声明所覆盖。注意:在声明名称空间时,选择的URI不需要指向实际的内容,在URI所标识的位置上,可以不存在任何东西。在名称空间声明中的URI只是形式上的标识符,其唯一的目的是提供一个唯一的名字。
名称空间在元素和属性中的运用
n 在具有很多元素(这些元素都在同一个名称空间中)的文档中,给每个元素名称都添加一个前缀将是一件烦琐的事情。为此,我们可以使用没有前缀名的xmlns属性将缺省的名称空间附加给元素及其子元素,元素本身及其子元素都被认为是在缺省的名称空间中,除非它们有明确的前缀。
n 缺省名称空间中的URI可以设为空字符串,这样的话,在它的声明范围内,没有前缀的元素将被认为不存在于任何的名称空间中,这和没有声明缺省名称空间是一样的。
n 一个属性要想在某个名称空间中,必须给该属性加上名称空间的前缀,没有前缀的属性不在任何的名称空间中(包括缺省的名称空间)。即使拥有属性的元素在某个名称空间中,没有前缀的属性仍然不在该名称空间或任何其他的名称空间中。
n 在XML文档中,没有任何一个标签可以包含两个相同的属性,所谓相同有两种情况,一种是属性的名字完全相同,另一种是属性限定名中的本地部分完全相同,而不同的前缀绑定到了相同的名称空间名字。例如:
<?xml version=”1.0” encoding=”gb2312”?>
<x xmlns:n1=”http://www.w3.org” xmlns: n2=”http://www.w3.org”>
<!—错误,两个属性的名字相同-->
<bad a=”1” a=”2”/>
<!—错误,前缀n1和n2绑定的是同一个名称空间名字,而本地部分也完全相 同-->
<bad n1:a=”1” n2:a=”2”/>
</x>
<?xml version=”1.0” encoding=”gb2312”>
<x xmlns:n1=” http://www.w3.org” xmlns=” http://www.w3.org”>
<!—正确,属性名不同-->
<good a=”1” b=”2”/>
<good a=”1” n1=”2”/>
</x>
名称空间和DTD
n DTD和名称空间并不相关,当XML处理器在验证文档的有效性时,根本不管元素前缀的含义,只是按照DTD的规范对文档进行有效性验证。
n 我们声明名称空间时,使用了xmlns或xmlns:prefixname属性,而在验证时,会发现在DTD中没有声明该属性,当然验证就会失败;另外,如果在DTD中声明的是book元素,而在文档中使用的是bks:book元素,则文档也是无效的。
n 为了让使用名称空间的文档有效,我们必须在DTD中像声明其他属性一样声明xmlns或xmlns:prefixname属性,此外,还需要重写说有带有前缀的元素和属性的声明。例如:
<?xml version="1.0" encoding="gb2312"?>
<!--没有使用名称空间的文档-->
<!DOCTYPE book[
<!ELEMENT book (title,author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
]>
<book>
<title>JSP深入编程</title>
<author>张三</author>
</book>
|
<?xml version="1.0" encoding="gb2312"?>
<!--应用了名称空间后,要重写DTD-->
<!DOCTYPE book[
<!ELEMENT book (bk:title, bk:author)>
<!ATTLIST book xmlns:bk CDATA #REQUIRED>
<!ELEMENT bk:title (#PCDATA)>
<!ELEMENT bk:author (#PCDATA)>
]>
<book xmlns:bk="http://localhost/bk">
<bk:title>JSP深入编程</bk:title>
<bk:author>张三</bk:author>
</book>
|
缺省名称空间只要在DTD对xmlns属性进行声明就可以了。
分享到:
相关推荐
padding: 10px; margin: 5px; } ``` 此外,关于“颜色、大小等问题”,通常指的是如何使用CSS来调整元素的颜色、大小等属性。例如,调整字体大小可以通过`font-size`属性完成,而调整颜色则可以通过`color`或`...
"Oracle知识点滴"显然是一份汇聚了关于Oracle数据库关键概念和技术的资料,适合Oracle用户进行学习和参考。以下是根据标题、描述以及文件名所推测的一些关键知识点: 1. **Oracle数据库架构**:Oracle数据库采用...
### Eclipse SWT开发点滴 #### 一、第三方包的引用 在使用Eclipse进行SWT开发时,经常会遇到需要引入第三方库的情况。以下是引入第三方库的具体步骤: 1. **工程项目增加Libraries** - 右键点击项目 -> `Build ...
而“心梓知识”可能是指该源码包含了关于心理健康或情绪管理的知识分享,为用户提供更全面的服务。 总的来说,这份源码资源涵盖了前端网页开发的多个方面,从基础的HTML结构到复杂的JavaScript交互,再到可能涉及的...
### Spring in Action 学习点滴知识点总结 #### 第二章:装配Bean 1. **`<ref>`标签中的`bean`、`local`、`parent`三个属性的区别** - `bean`属性用于指向一个具体的bean实例。 - `local`属性用于表示本地bean...
综合以上信息,我们可以得出NoteBook是一个具有笔记、日记、知识管理功能的软件,用户可以通过它来记录生活点滴、管理信息,并且可以自定义界面。它依赖于一些库文件如mfc42.dll和iconv.dll来实现其功能,并且使用...
3. **日记**:暗示NoteBook可能有日记编写和管理的功能,适合记录个人生活或工作中的点滴。 4. **知识点管理**:说明NoteBook设计时考虑到了知识的分类、存储和检索,适合学习者或研究者使用。 5. **随笔**:可能有...
默认监听端口为8080,可通过修改`conf/server.xml`配置文件来更改。 #### 结语 Java的学习之路既漫长又充满乐趣,从理解JDK的基本构成到掌握应用服务器的配置,每一步都是对编程技能的提升。希望以上分享能够帮助...
【标题】"我的日记本—可参考"是一个安卓应用程序项目,旨在提供一个个人日记管理平台,用户可以在这里记录、编辑、删除和查找他们的日常生活点滴。这个项目作为一个安卓入门练习,涵盖了移动应用开发的基础知识,是...
QQ发表说说功能框是QQ社交平台上的一个重要组成部分,它允许用户分享心情、想法或生活点滴,与好友进行互动。实现这一功能涉及到前端界面设计、后端数据处理以及用户交互等多个方面的技术。以下是对这个功能框背后的...
在安卓(Android)平台上,开发一个便签应用是常见的任务,它可以帮助用户快速记录生活、工作中的点滴。本文将深入探讨“安卓Android源码——便签软件.zip”中包含的知识点,带你理解如何构建一个基本的便签应用。 ...
这种系统提供了一种便捷的方式,让人们能够分享思想、观点、专业知识或者生活点滴,无需深入学习编程技术。博客引擎是博客系统的核心组成部分,它负责处理用户的交互、内容管理、模板渲染和权限控制等功能。 在...
这篇文档包含了六篇程序员实习日记,记录了一位实习生在2020年期间学习和工作的点滴,主要涉及Java编程、开源框架、数据库管理和Web应用开发等主题。以下是这些日记中提炼出的重要知识点: 1. **Java编程框架**:...
【Android随手记】是一款基于Android平台的简单文本记录应用,旨在提供便捷的日常记事功能。作为移动开发课程的小作业,这个项目展示了开发者...同时,这也是一款实用的应用,能够帮助用户随时随地记录生活中的点滴。
【部分内容】中的第一篇文章讲述了主人公在生活中感到忙碌和压力,但在生日那天得到了家人的惊喜,从而意识到幸福就存在于日常生活的点滴之中。第二篇文章通过与爷爷下棋的情景,展现了亲情的温暖和陪伴带来的幸福感...
【标题】"简单的个人记事本APP"是一个基于Android Studio开发的应用程序,旨在提供一个便捷的个人记事功能,让用户可以快速记录生活中的点滴、想法或待办事项。这款应用结合了基本的文本编辑功能与照相机权限的调用...
本项目名为“Android应用源码之便签软件”,它是一个典型的Android应用程序,旨在实现一个便签管理功能,帮助用户记录日常生活中的点滴。通过分析这个源码,我们可以深入学习Android开发的多个关键知识点。 首先,...
1. **文档格式**:文件名为".docx",这是Microsoft Word的一种文档格式,属于Office Open XML(OOXML)标准,它允许包含文本、图像、表格等多种元素,是一种常见的技术文档存储格式。 2. **信息传播技术**:文中...
7. **导入导出**:兼容多种格式,如TXT、HTML、XML等,便于与其他应用之间交换数据。 myBase的使用技巧和进阶功能还包括: - **关联链接**:在不同笔记之间建立链接,形成知识网络,方便跨笔记查找相关信息。 - **...
在Android平台上,开发一款记事本应用是一项基础且常见的任务,可以帮助用户记录日常生活中的点滴信息。这个名为"DateNote"的APP就是你自己使用Android Developer Tools(ADT)编写的成果,它展示了Android应用开发...