Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2105596
  • 博文数量: 194
  • 博客积分: 6450
  • 博客等级: 准将
  • 技术积分: 2085
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-06 13:39
文章分类

全部博文(194)

文章存档

2013年(38)

2012年(11)

2011年(1)

2010年(1)

2009年(4)

2008年(13)

2007年(18)

2006年(63)

2005年(45)

我的朋友

分类: 系统运维

2005-11-18 18:59:36

不要让名称空间悬在空中

级别: 中级

Uche Ogbuji
首席顾问, Fourthought, Inc.
2004 年 5 月

长长的名称空间会带来一些问题,比方说,在 WSDL 文件中会造成很大的混乱。资源目录描述语言(RDDL)打包名称空间的信息。如果要对名称空间使用 URL,通过本文所述的 RDDL 可以为 XML 文档或 Web 服务的用户提供有效的指南。

名 称空间在 XML 的应用中颇受欢迎,事实上在 Web 服务应用中已经基本普及。名称空间通常采用 URL 的形式,尽管可以采用任何形式的统一资源标识符(Uniform Resource Identifier,URI)。使用 URL 本身并没有坏处,但是如果 URL 什么地方也不指向,就可能造成混乱。用户可能尝试在浏览器中打开对应名称空间的 URL 以获取更多的信息;如果要访问名称空间 URL,最好是保证用户能够看到有用的信息,而不是一个 404 “Not Found”错误。



于 是问题归结为在名称空间 URL 的位置放上什么样的文档。过去的一些讨论认为应该使用某种模式。因为名称空间 URL 主要被查找信息的人们访问,XML 社区中的很多人认为可读的文档会更加友好。理想情况下,文档应该附加上机器可读的元数据,以便自动化系统仍然能够使用名称空间 URL 定位技术资料,满足处理该名称空间中 XML 文本的需要,其中也包括模式。

该社区讨论的结果是 资源目录描述语言(Resource Directory Description Language,RDDL),一个打包名称空间信息的标准。RDDL 文档是一种 XHTML文档,包含名称空间的散文体描述。使用 XHTML 使它能够最大限度地与当前的浏览器兼容,并且利用了一种广受欢迎的、知名的丰富文档格式。指向名称空间技术资源的指针用内嵌的 XLink表示。我喜欢把 RDDL 文档称为 资源集注,在定义 RDDL 的社区讨论中我就建议使用这个名称。

本 文将说明如何使用 RDDL 在 XML 和 Web 服务格式中支持名称空间。例子采用了 SOAP 中的一般惯例,尽管这些经验也适用于其他 XML 格式。我将坚持使用 RDDL 1.0。一些社区已经开始研究 RDDL 2.0,但是早期的建议存在很大争议,因此我建议在后续版本稳定下来之前应优先考虑 RDDL 1.0。



清单 1 是“SOAP Version 1.2 Part 0: Primer”(请参阅 参考资料)中例 1 的拷贝。

清单 1. 旅行预约 Web 服务的实例 SOAP 文档



env:role="/role/next"
env:mustUnderstand="true">
uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d
2001-11-29T13:20:00.000-05:00

env:role="/role/next"
env:mustUnderstand="true">
?ke Jgvan ?yvind



xmlns:p="/travel">

New York
Los Angeles
2001-12-14
late afternoon
aisle


Los Angeles
New York
2001-12-20
mid-morning



xmlns:q="/hotels">
none




这个示例 SOAP 文档使用了四个名称空间:

  • 是标准的 SOAP 名称空间。W3C 实际上和本文的建议不一致,它在这个 URL 上直接放上了 SOAP 的 XML 模式。但是,我认为它有助于说明这种方法的不友好性,因为访问这个 URL 需要能够以可表示的方式处理 W3C XML Schema 的浏览器,而且即便如此,所显示的文档也可能让多数读者摸不着头脑。
  • 是用于一个 SOAP 头的名称空间,标记用于全部预约元数据的信息。为了举例说明,这是一个伪造的 URL。事实上,“example.org”和“example.com”都是标准保留给例子使用的域名,从不用于实际的网络域。
  • 是用于另一个 SOAP 头的名称空间,标记和客户公司的乘客标识信息有关的信息。
  • /travel 是用于 SOAP 体请求参数的名称空间。



我们主要讨论第一个名称空间。清单 2 是该 Web 服务的示例 RDDL 文档:

清单 2. 用于旅行预约 Web 服务名称空间的示例 RDDL 文档

"-//XML-DEV//DTD XHTML RDDL 1.0//EN"
""
>
xmlns:xlink=""
xmlns:rddl="">

<br>Namespace description and resource gloss for travelcompany's<br>reservation SOAP header<br>
type="text/css" rel="stylesheet"/>




Namespace description and resource gloss for travelcompany's
reservation SOAP header





Overview



This resource gloss covers the XML namespace
.
This is the namespace for reservation SOAP headers in
travelcompany's Web service. It covers transaction
identifiers and time stamps.



This document is a RDDL
Resource Gloss. RDDL is an XHTML document with special
links (XLinks) that locate various resources related to
this SOAP Web service. Technical problems with the RDDL
glosses hosted at
should be sent to
the
administrator
.





Resources relevant to reservation SOAP headers





xlink:title="Reservation SOAP header schema"
xlink:role=""
xlink:arcrole="purposes.htm#normative-reference"
xlink:href=".xsd"
>

Reservation SOAP header schema



W3C XML schemas for

travelcompany reservation SOAP headers




xlink:title="travelcompany Web service root namespace"
xlink:role="#role"
xlink:arcrole="purposes.htm#root-namespace"
xlink:href=""
>

travelcompany Web service root namespace URI



Root namespace URI
is the base for all namespaces relative to travelcompany
Web services.











RDDL 文档类型定义为有效的 XHTML 1.1 模块。可以看出人们很容易阅读这样的文档。其中的文体提供了摘要、编纂、版本和维护的详细信息。 rddl:resource 元素是到该名称空间支持文档的链接,主体部分放在 XHTML 中,即便用户代理不支持 XLink 也仍然能够自然地显示。 xlink:role 给出了链接的 性质,通常表示链接的资源类型(比如模式或样式表)。 xlink:arcrole 属性表示从 RDDL 到该资源的链接的 目的(比如链接的资源是用于验证还是作为标准参考)。XLink 所要求的 xlink:type="simple" 属性在文档中没有表示出来,因为它在 RDDL DTD 中被定义成 #FIXED 属性。

对于放在通用基名称空间上下文中的专用名称空间 URL,指向根名称空间的链接可能非常有用,因为基名称空间可能也有自己的资源集注。

注意, mailto 邮件地址 URL 中的“at”字符( @ )被编码为 %40 。实际上,对于该字符和 RFC 1738 中的多数不常用字符都建议这样做。

整个过程的关键在于为用户提供清晰的、可表示的文档,同时又有机器可读的、到相关资源的链接。注意 清单 2中指定 CSS 的方式:



type="text/css" rel="stylesheet"/>

这是常见的用于呈现 RDDL 的样式表,尽管并不要求必须使用它。这个样式表非常简单,使资源集注差不多在任何浏览器中都能够阅读。



将 RDDL 用于名称空间非常简单而且成本低廉,实际上一些用户已经把 RDDL 作为表达通用资源存储库的一种格式。如果您曾经致力于在名称空间的端点上放置,比方说,一个模式,那么您只需要以资源集注的形式增加一个中间层。您可以使用 清单 2中 的例子作为起点,将其粘贴到编辑器中,并根据您的名称空间信息作相应的修改。XML 词汇表很少明确规定或建议放在名称空间 URL 上的文档(RDF/XML 是少数的例外之一),但是如果使用这样的词汇表,一定要按照建议去做,即使这样意味着某些情况下不能使用 RDDL。

虽然目前我建议使用 RDDL 1.0,W3C 技术体系结构组(TAG)正努力把 RDDL 发展成更正式的 Web 标准。这是混合行动的一部分,并造成了关于 RDDL 2.0 的开发的混乱。目前提出的建议包括用 RDF 表示 RDDL,以及禁止使用花哨的 XLink(更多依靠标准 XHTML 中的多用途属性)。就像 Tim Bray 在 TAG 邮件列表的一次相关讨论中所说的那样,最终的文档格式“应该用于表示恰好是名称空间的资源。”

阅读(2131) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~