为何引入名称空间?
XML的用途不是单一的。虽然读者可能看到编写只使用一个标记符号集的文档是相当有用的。
但是,问题是,当混杂和匹配不同的XML应用程序的标记时,可能会发现同一个标记已用于两个不同对象。TITLE是指页标题还是书的标题?ADDRESS是指公司的邮件地址还是Web站点管理人员的电子邮件地址?名称空间(namespace)可以解决这些诸如此类的问题,它是将URI与各标记集相关联,并在每个元素前加上一个前缀,以表示它属于哪个标记集。于是,就可以有BOOK:TITLE和HTML:TITLE两个元素或 POSTAL:ADDRESS和HTML:ADDRESS元素,而不只一类TITLE或ADDRESS。
名称空间允许文档中的每个元素和特性放在不同的命名域中。
回页首
URI和URL
XML文档可用于Web,正如HTML和其他文档一样。使用时,也如HTML文档一样,被统一资源定位符(Uniform Resource Locator,简写为URL)所引用。虽然URL已被人们广泛理解并被广泛支持,但XML规范使用的是更为通用的统一资源标识符(Uniform Resource Identifier,简写为URI)。URI对于定位 Internet上的资源是更为通用的架构,更为注重资源而不太注重位置。理论上说,URI可找出镜像文档的最为近似的副本或是找出已经从一个站点移动到另一站点的文档。实际上,URI仍然处于进一步的研究之中,被当前的软件所唯一支持的一种URI正是URL。
回页首
用xmlns声明名称空间
这个一个声明名称空间的例子
xmlns:xsl="http://www.w3.org/TR/WD-xsl"
|
"http://www.w3.org/TR/WD-xsl"是一个URI引用。
URI为统一资源标识符(Uniform Resource Identifier,简写为URI)。 URI对于定位Internet上的资源是更为通用的架构,更为注重资源而不太注重位置。不过当前的软件所唯一支持的一种URI正是URL。要注意的是这里用URI 只是为了声明一个唯一的名称空间,并不是真的上www.w3.org的网站去寻找这个链接。
xsl表明以后如果用到以xsl为前缀的名字,那么它所表示的规则是在名称空间里预先定义好的,如“xsl:value-of”在"http://www.w3.org/TR/WD-xsl"这个名称空间预置的,它的意义是求值。
回页首
合法名称
合法名称的形式应该是:前缀部分:本地部分
其中,“前缀部分”和“本地部分”都要求是一个合法的XML名称。前缀部分必须是一个已经经过声明的名称空间前缀,语法分析器将把它与名称空间声明中的 URI引用相联系;本地部分则是在DTD或Schema中定义的元素和属性名。下面给出一个合法名称的例子:
此外,由于名称空间的声明方式有直接方式和缺省方式两种,合法名称也稍有变化。缺省的声明方式为 xmlns=URI。
由于缺省方式声明的名称空间就是作用域内的缺省名称空间,因此,在这个作用域内使用该名称空间的元素、属性的合法名称无须再写前缀部分。这样一来,元素的合法名称看上去和我们前面常用的元素名是一致的。由此可见,我们一直在使用“合法名称”,只不过没有意识到罢了。
回页首
名称空间作用于元素
合法名称可以用于起始元素标记、结束元素标记和空元素标记。合法名称中的前缀部分必须是一个已经声明过的名称空间前缀,声明的位置,既可以在使用该前缀的起始元素的标记处,也可以是引用处的父辈元素标记处。名称空间声明是作用到说明它的元素和该元素的所有子元素的,除非被其它名称空间声明所覆盖
例如:
<联系人:联系人列表 xmlns:联系人 ="联系人列表.dtd">
<联系人:联系人>
<联系人:姓名>张三</联系人:姓名>
<联系人:ID>001</联系人:ID>
<联系人:公司>A公司</联系人:公司>
<联系人:EMAIL>zhang@aaa.com</联系人:EMAIL>
<联系人:电话>(010)62345678</联系人:电话>
<联系人:地址>
<联系人:街道>五街1234号</联系人:街道>
<联系人:城市>北京市</联系人:城市>
<联系人:省份>北京</联系人:省份>
</联系人:地址>
<联系人:直接上级 xmlns:企业经理 ="企业经理.dtd">
<企业经理:姓名>王五</企业经理:姓名>
<企业经理:电话>
<企业经理:秘书电话>(010)62345678</企业经理:秘书电话>
<企业经理:手机>13601234567</企业经理:手机>
</企业经理:电话>
</联系人:直接上级>
</联系人:联系人>
</联系人:联系人列表>
|
名称空间"联系人列表.dtd"的作用域,在除"直接上级"元素范围以外的任何地方;而名称空间"企业经理.dtd"的作用域在"直接上级"的各个子元素中。同样,缺省的名称空间是作用到声明它的元素和该元素的子元素的。当然,这里所说的元素都是那些没有名称空间前缀的元素,有了前缀的元素仍然遵照前缀所指示的名称空间。
回页首
名称空间作用于属性
同样,合法名称也可用于属性。除了XML预留的属性(如我们反复用到的声明命名空间的属性)外,其它属性都应该使用"合法名称"。
一个具体的例子如下:
<联系人 xmlns:企业经理 = "http://www.xml.net.cn/联系人列表.dtd">
<姓名 企业经理:文种 = "中文">李华</姓名>
<电话 企业经理:城市 = "北京">62348765</电话>
</联系人>
|
XML命名空间优秀文章:
http://www.oracle.com/technology/global/cn/pub/articles/srivastava_namespaces.html
分享到:
相关推荐
XML还支持命名空间(Namespaces),这是一个重要的特性,它允许在同一文档中使用来自不同来源的标签而不产生冲突。例如,`xmlns`属性可以定义一个命名空间,`xmlns:prefix="URI"`,其中`prefix`是别名,`URI`是该...
3. **命名空间(Namespaces)**:在XML中,命名空间用于解决元素名冲突的问题,通过使用前缀如`xmlns:news`,可以确保元素`<news:title>`与其它可能存在的`<title>`元素区分开来。 4. **XSL(eXtensible Stylesheet...
#### 2.5 XML命名空间 - **命名空间**:用于避免元素名称冲突的问题,每个命名空间都有一个唯一的URI标识符,可以通过`xmlns`属性来声明。 #### 2.6 字符数据与CDATA - **字符数据**:位于元素标签之间的文本,如...
5. **Namespace处理**:XML命名空间用于解决同名元素和属性的冲突,Xerces-J能正确处理XML文档中的命名空间声明和引用。 6. **国际化支持**:Xerces-J遵循Unicode标准,支持多种字符集,适应全球化应用的需求。 7....
第二章可能深入到命名空间和DTD(Document Type Definition)的使用;第三章和第四章可能会介绍XPath和XSLT,用于查询和转换XML文档;第五章至第八章可能涵盖JSP与XML的结合,包括DOM和SAX解析器的使用,以及如何在...
6. **命名空间(Namespace)**:在XML中,命名空间用于避免元素和属性名的冲突。通过使用URI(统一资源标识符)来区分相同的元素名。 7. **处理指令(Processing Instruction, PI)**:PI是用来给处理器提供信息的...
XML架构的主要组成部分包括数据类型、命名空间和类型定义。数据类型定义了XML元素和属性可能的值。XSD内置了一系列预定义的数据类型,如整数、浮点数、字符串等,这些类型都有其特定的值空间,即允许的值的集合。...
5. **命名空间**:XML命名空间用于解决元素名称的冲突问题,通过引入命名空间URI(Uniform Resource Identifier)可以确保不同来源的元素不互相混淆。 6. **文档类型定义(DTD)与XML Schema**:DTD和XML Schema是...
在C#中,我们可以使用System.Xml命名空间中的类来读取、写入和操作XML文件。`XmlDocument`类用于加载和操作XML文档,`XmlNode`和其派生类用于遍历和访问XML树,`XmlElement`用于创建和修改元素,`XmlNodeReader`和`...
4. **C#中的XML操作**:在.NET框架中,有多种类库支持XML处理,如System.Xml命名空间下的XmlDocument、XPathDocument、XmlNodeReader等。这些类允许我们读取、写入、查询和操作XML文档。 5. **LINQ to XML**:C# ...
6. 命名空间:解决元素和属性名称冲突的问题,通过引入命名空间URI来区分。 XML解析与处理: 1. 解析器:XML解析器读取XML文档并生成解析树,分为DOM(文档对象模型)和SAX(简单API for XML)两种方式。DOM一次性...
这本书讲解了50种有效使用XML的方法,可为...1、如何撰写于命名空间无关的DTD 2、在解析器的报告中哪些是可靠的 3、主题语言是否真的合适你的工作 4、选择哪个API可以得到最高的效率和最小规模的代码 ~~~~~~~~~~~~~~~~
尽管TinyXML简单易用,但它并不支持XML的全部特性和标准,例如命名空间、DTD(文档类型定义)和XPath查询。如果你的项目需要处理更复杂的XML特性,可能需要考虑使用如pugixml、Xerces-C++或Qt的QXmlStreamReader等更...
- **XML**是结构化数据的交换格式,理解XML的基本概念,如元素、属性、命名空间等。 - **XML语法**,包括文档声明、实体引用、命名规则等。 - **XML解析**涉及到DOM、SAX解析器,理解XML文档生命周期,以及DTD...
6. **命名空间**:XML命名空间用于解决元素和属性名称的冲突问题,通过`xmlns`属性来定义和引用命名空间。 7. **DTD(Document Type Definition)或XML Schema**:它们用来定义XML文档的结构和数据类型,确保文档...
5. **命名空间(Namespace)**:为了避免元素名冲突,XML引入了命名空间的概念,通过URI(统一资源标识符)来区分不同来源的元素。 6. **DTD(Document Type Definition)与XSD(XML Schema)**:这两个是XML的验证...
此外,XML还强调文档的自我描述性,通过命名规则和命名空间来确保数据的清晰性和一致性。 XML教程通常涵盖以下几个关键主题: 1. **XML语法**:包括元素、属性、文本内容、注释、处理指令和实体引用等基本概念。 2...
3. **命名空间处理**:如果XML包含命名空间,需要在XStream实例化时进行配置。 4. **处理空值和缺失元素**:某些XML元素可能不存在,或值为空,需要在Java类中进行适当的处理。 通过这个教程,你应该掌握了使用Java...
3. **命名空间支持**:XML Schema支持命名空间,这使得在大型项目中可以避免元素和属性名称的冲突,便于代码组织和重用。 4. **约束和验证**:通过XML Schema,我们可以为XML文档设置各种约束,如必须存在的元素、...
3. **命名规则**:XML的元素、属性、命名空间等都遵循特定的命名规则,例如名字不能以数字开头,不能包含特殊字符等。 4. **DTD(Document Type Definition)与XSD(XML Schema)**:DTD是XML的早期验证机制,用于...