分类: 系统运维
2005-11-18 18:59:36
级别: 中级 |
首席顾问, 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 的拷贝。
|
这个示例 SOAP 文档使用了四个名称空间:
是标准的 SOAP 名称空间。W3C 实际上和本文的建议不一致,它在这个 URL 上直接放上了 SOAP 的 XML
模式。但是,我认为它有助于说明这种方法的不友好性,因为访问这个 URL 需要能够以可表示的方式处理 W3C XML Schema
的浏览器,而且即便如此,所显示的文档也可能让多数读者摸不着头脑。
是用于一个 SOAP 头的名称空间,标记用于全部预约元数据的信息。为了举例说明,这是一个伪造的 URL。事实上,“example.org”和“example.com”都是标准保留给例子使用的域名,从不用于实际的网络域。
是用于另一个 SOAP 头的名称空间,标记和客户公司的乘客标识信息有关的信息。
/travel
是用于 SOAP 体请求参数的名称空间。
我们主要讨论第一个名称空间。清单 2 是该 Web 服务的示例 RDDL 文档:
|
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 的方式:
|
这是常见的用于呈现 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 邮件列表的一次相关讨论中所说的那样,最终的文档格式“应该用于表示恰好是名称空间的资源。”