XML名称空间

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 考虑下下面两段代码:
• 这两段代码是相同的还是不同的?
• XSLT把他们当作不同情况来处理。如果要确保应用程序 把一个属性看成是名称空间的一部分而不是关联到一个
元素,那么就必须这样设计自己的应用程序:该属性包
含一个前缀。这也意味着必须为自己的名称空间声明一 个前缀,即使用户默认名称空间表示元素也是如此。另
• 就像这样
• 采用这种方法难看,但是有效。它不会在让
XML解析器迷惑,相反采用这种方法能准确解
析是哪个title。
• 缺点是不能正常使用XHTML元素了。因为浏览 器不能理解<xhtml:p>。所以如果有一个程序要 读取这个XML文档,并显示XHTML这一部分, 必须的重命名所有元素,删除xhtml前缀。
• xmlns:pers这个属性(xmlns代表XML Namespace)
• 一个正确使用XML名称空间的XML: namespeace.xml。 • 由于现在我们已经有了一种方法,可以定义每 个元素所属的名称空间,因此我们不必给它们 取特别的,独一无二的名字。我们有两个词汇, 每个都有一个<title>元素,用户可以在同一个 文档里同时使用这个两个<title>元素。
含一些名字相同但含义和语义却不相同的元素。本 章给同学们引入了XML名称空间的概念,在我们把 来自不同XML文档类型的不同元素和不同属性组合 为其他文档时,利用XML名称空间可以区别这些来
自不同文档类型的元素和属性。
• 看看下面这个例子。
使用前缀
• 解决上面那个问题的最好办法可能就是在元素
前面使用前缀来区分。
• 这就解决了唯一性问题。由于只有河南理工拥有这
个域名,不可能还有其他人也在他们的XML文档中
使用http://www.hpu.edu.cn/pers前缀。如果我们希
望创建另外的文档类型,可以继续使用这个域名就 像这样http://www.hpu.edu.cn/other-namespace。
• 如果访问http://www.hpu.edu.cn/pers这个地址,就会发
• 本例定义了两个命名空间:foo1 和 foo2。 这两个命名空间均包含两个名称:bar 和 baz(在本例中,它们是类标识符)。
• foo1::bar b1; // refers to bar class in foo1
foo2::bar b2; // refers to bar class in foo2
• 要引用特定命名空间的 bar 类,必须用给定
的命名空间标识符来限定 bar 标识符。
•为方便起见,还可以做如下声明:在给定的源文件中 使用特定的命名空间。这会从本质上使指定的命名空间 成为源文件的默认命名空间。于是,就没有必要完全限 定特定的命名空间成员,当然,在绝对有必要避免多义 性时也可以完全限定: using namespace foo1; bar b1; // refers to bar class in foo1
XML 名称空间
编程语言中的命名空间
• 要在某种编程语言中使用命名空间,你必
须熟悉用来定义命名空间并引用其中的某
些内容的语法。当今的许多语言(包括 C++、
Java 和 C#)为命名空间提供支持。在 C++
中,命名空间是通过命名空间块来定义的,
如下所示。
• namespace foo1 { class bar { ???????????? }; class baz { ???????????? }; } namespace foo2 { class bar { ???????????? }; class baz { ???????????? }; }
• namespace4.xml
• 我们得到一个结论,名称空间与词汇表有关,而与文档类型无关。
即名称空间仅表示哪些名字在哪个名称空间里,并不表示它们的 含义,也不表示它们的组合形式。
• 一个名称空间纯粹是一个抽象的实体,它不过是一组在概念上彼
此互存的名字。
为什么XML不直接使用这些前缀
• 因为问题没有那么简单,前缀也可能重名。 • 管理前缀必须采用与英特网上域名管理的类似 方法。一个公司或者个人必须向“前缀管理员” 申请使用某个前缀。如果没人使用那你就可以 使用。 • 为解决这个问题,我们就利用了已存在且没有 二义性的英特网域名。并且规定URI必须用作 前缀。 • URI(统一资源标识符)是用来表示资源的字 符串。它有下面两种版本:URL(统一资源定 位符)和URN(统一资源名)
•正如你所看到的,C++ 中定义和使用命名空间的语法 简单明了。C# 的工作方式与 C++ 非常相似,只是有几 个小区别。Java 中的命名空间语法稍有不同,但概念 是相同的。
•在许多编程语言中,命名空间可用来帮助避免名称冲 突。
XMຫໍສະໝຸດ Baidu 中的命名空间
• 由于XML自身的特点,两个不同的文档类型经常包
• 还是不够理想:XML文档结构不好。我们的前缀名
包含许多这样一些字符,它们在URL里是允许的,
但在XML里是不允许的,如/字符。在这个例子里,
我们专门用{}符号把URL地址从名称空间分离开
来,但是这些字符都不可以出现在XML元素名字或 者属性名字里。 • 第一部分是该元素的名称;第二部分是该名称的Url, 作为该元素的名称空间;第三部分是一个任意前缀
性被明确声明在一个名称空间中,我们称这些
属性为全局属性。一个常见的有关属性的例子
就是XHTML的class属性。这个class属性可以作
用于任何XML元素上,不管它是否是XHTML元
素。
• 为了说明属性与名称的关系,我们给<name> 元素增加一个id属性,并给简历的HTML增加一 个style属性。
表示一个URI,表示该元素所在的名称空间。
XML名称空间的运行机制
• 要声明一个地址http://www.hpu.edu.cn/pers的名称空间和它的 一个元素<person>,可以使用下面的语句: • <pers:person xmlns:pers="http://www.hpu.edu.cn/pers"/>
默认的名称空间
• 一个默认的名称空间很像一个普通的名称空间,
只是我们不需要在这个名称空间所有元素的前
面插入前缀。
• 可以为一个元素声明多个名称空间,但是其中 只有一个是默认的名称空间
• namespace2.xml
在子元素里声明空间
namespace3.xml
取消默认名称空间
名称空间和属性
一方面,大多数的应用程序视它们为相同情况。
• 考虑这样的情况:用户想对上面这个名称空间里的每一 个属性执行一些处理。如果程序认为这个例子是相同的, 则这两个id属性都会得到处理,如果认为不同,那么只 有第二个id。
• 来自某个特定名称空间名称里的属性同样可以
关联到来自不同名称空间里的元素上。如果属
现并没有任何文档,相反还会显示一个报错信息。那么
是不是就意味着我们的名称空间不起作用呢? • 事实上对于名称空间来讲,我们这里使用的URL通常只 表明名称空间的一个符号;XML解析器不会从这个位置 读取任何资源,除了表示文档里名称空间外,它没有其
他任何作用。
• 尽管名称空间看上去像是一个URL,但是一个名称空间 的名字只是作为一个名字来使用,并不表示一个资源定 位地址。
• 这个id属性,并不是这个名称空间的一部分;它只是关联到 <name>这个元素,而<name>自己是默认名称空间的一部分。
• 这等于说,id属性是关联在<name>元素上,而<name>元素是
在http://www.hpu.edu.cn/pers名称空间里。
• 如果我们使用前缀,则可以为id指定一个名称 空间:
相关文档
最新文档