Web 上总有一些站点提供系列的文章、事件和其他记录事项,用于分享和交叉引用。随着 Web 很大一部分成为会话式的社区,社区中的很多人走到一起为这类交换和交叉引用开发一种基于 XML 的标准。Atom 就是这些努力的结晶,它是一种交换 Web 元数据的格式和 API。Uche Ogbuji 在本文中介绍了 Atom。请在本文的 讨论论坛上与作者和其他读者分享您对本文的想法。
RSS之争在 XML 社区中人所共知。Netscape 把这种轻量级的格式拼凑在一起用于连锁,即把网站中传输的信息聚集到门户中。由于从这个低调的起点开始,甚至连这个缩写词的含义也受到了争议。Weblogs 和下一代门户已经使 Web 资源描述的交换成为一种普遍而重要的现象。各种流派的 RSS 统治着元数据交换的世界,无休无止的 RSS 纷争增加了风险。
长期卷入这场冲突的一位知名技术专家是 IBM Emerging Technology Group 的 Sam Ruby。2003 年中期,Ruby 提议 RRS 及相关连锁格式的各方面的专家和用户共同合作开发下一代格式。部分目的是建立一个顾及各种派别的标准,从而平息 RSS 纷争。另一个目标是建立技术上更加完善的设计来代替不同的 RSS 风格,根据很多 RSS 用户的实践经验对这种实用的设计进行折衷,使新的格式与 Web 的体系结构和文化协调一致。大批开发人员和作者争相加入该项目,显然是因为对 RSS 中无休无止的硝烟和阴谋感到失望,期望对所讨论的技术问题出现一种新的解决方法。
该项目最初称为 Echo,但由于商标问题而更名为 Atom。如 Atom Wiki 所宣称的那样,该项目要建立连锁、存档和编辑情节式站点的规范。我认为,Atom 处理领域的定义特征不仅仅是自然分解成情节的 Web 站点,还包括那些与其他站点交互中具有会话性质的 Web 站点。情节往往带有对其他站点上类似实体的交叉索引,Atom 就是为了把这类交换粘结在一起。
Atom 令人瞩目有很多原因,最突出的一点是尽管作为一种社区规范,作为有史以来组织最为庞大的委员会磋商的结果,它仍保持了简单性。Atom 包括 Syndication Format Specification(连锁格式规范)(目前为 0.3 版,草案 2),它是表示 Web 资源信息的 XML 格式;和 API Specification(API 规范)(目前为 0.9 版),基于 HTTP 检索和修改 Web 资源信息的一些约定。虽然目前只有 API 规范正式提交给了Internet 工程任务组(IETF),这两种规范都采用 Internet Draft 的格式编写,以期最终成为 RFC 标准。除了 XML 语法之外,Atom 还使用 Web Ontology Language (OWL)开发了 RDF 形式。本文中对 Atom 的介绍主要放在 XML 格式规范上,但在适当的地方也会涉及到 API。所有的 Atom 规范仍在积极地开发之中,在标准化之前还可能发生变化,虽然基本的 Atom 风格很可能不变。
创建 Web 资源
假设您要创办一份格律诗的 Web 杂志,称为 Stanza Web。您可以使用 Atom 更新站点、列出新的诗篇、文章和其他专辑、从相关的其他站点收集信息。要做的第一步是上传欢迎读者的文章。为此,Atom API 规定要把内容包装在由 Atom entry 元素组成的 XML 文档中,并把该文档作为 HTTP POST 消息发给特定 URI PostURI上的 Web 服务器。清单 1 就是一个这样的 XML 文档。
清单 1. 发送到 PostURI 创建入口的 Atom 条目
?xml version="1.0" encoding="utf-8"?entry xmlns="http://purl.org/atom/ns#" titleWelcome to Stanza Web/title author nameUche Ogbuji/name !-- May also contain a URL and e-mail address -- /author link rel="alternate" type="text/html" href="http://stanzaweb.art/2004-06-01/welcome"/ !-- Time in UTC -- modified2004-06-01T10:11:12Z/modified content type="application/xhtml+xml" xml:lang="en" div class="article" xmlns="http://www.w3.org/1999/xhtml" pWelcome to a href="http://stanzaweb.art/"Stanza Web/a. Come back often to keep track of the best in modern poetry. /p pThis site is powered by a href="http://atomenabled.org"Atom/a /p /div /content/entry
Atom 格式中的所有元素必须在名称空间 http://purl.org/atom/ns# 中,或者是在根据扩展规则尚未设定的外部名称空间中。 entry 元素必须包含以下子元素:
title 带有 alternate 关系的 link modifiedentry 还可以包含其他元素,如 id 、 contributor 和 content ,后者通常在定位 PostURI 时出现,就像本例这样。
所有这些条目信息在服务器向客户发送关于已有资源的信息时意义非常明显,但是在定位 PostURI 时每个元素的作用在规范中没有清楚地说明。 title 和 author 元素大概用于设置创建资源时的相关元数据。 modified 元素向服务器提供了如何给出条目时间戳的线索,尽管如果资源的时间戳是按照服务器策略而非提交者的指令设定的,服务器应该如何对这种情况作出反应没有明确的规定。 link 大概是告诉服务器如何为创建的资源构造 URI,以及为那个资源的表示(至少要有一种)指定什么样的 Intenet 媒体类型,虽然这样会引起更加苛刻的策略问题。
content 元素可能用于建立所创建资源的主体。内容甚至可以是二进制的形式,可以使用 MIME 的所有能力。在这个例子中,内容被设为 XHTML div 。如果上传的资源最终将和更大的 Web 页面结合起来显示Weblog 中很常见的情况这是一种很好的办法。其他情况下,可能合理的做法是在内容中发送完整的 XHTML 文档(根元素为 html )。当然发送其他的内容格式也是完全有效的,如 HTML、普通文本、甚至图像或者音频文件。如果要这样做,必须保证正确地设置各种不同的媒体类型属性。
Atom 发现
现在新建的网站上已经有了一个欢迎页面,您希望具有相同爱好的人能够找到它。其中一些人可能想把您的 Atom 连锁信息放到他们自己的网站上。一些人则希望评论您的消息。为了使 Atom 实现这类功能,可以更新 Web 站点并在 HTML 头中增加一些特殊的 Atom 专用链接。清单 2 中的 HTML 片段说明了这些链接的用法。
清单 2. HTML 头中用于发现 Atom 相关 URI 的链接
htmlhead titleStanza Web/title link rel="service.post" type="application/x.atom+xml" href="http://stanzaweb.art/atom-post" title="Stanza Web"/ link rel="service.feed" type="application/x.atom+xml" href="http://stanzaweb.art/atom-feed" title="Stanza Web"//headbody ... /body/html(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
在 清单 2 中,第一个 link 元素(红色)有一个联系值 service.post 提供了整个站点的 PostURI,通常用于创建新的文章。不同文章的网页很可能有不同的 PostURI 链接以便建立那篇文章的评论。它可能还有一个链接 rel="service.edit" ,提供一个 EditURI。向这个 URI 发送一个 HTTP GET 消息就可以得到适合编辑的表示形式,然后使用 HTTP POST 发送更新的内容。第二个 link 元素(蓝色)有一个联系值 service.feed ,提供了 FeedURI。Atom 客户可以发送 HTTP GET 请求来检索完整的 Atom 提要。
Atom API 规范中没有直接处理安全问题,但预计会出现用于各种 Atom API 操作的支持基于 HTTP 验证的实现。
Atom 提要
理想情况下,读者会来到 Stanza Web,阅读文章并决定是否会再回来看看。然后,他们可以让 Atom 工具指向该站点阅读其 Atom FeedURI。任何时候,您都可以访问 FeedURI 检索站点提要,通常表示最新的或者变更的元数据。清单 3 给出了一份 Atom 格式的提要。
清单 3. 从 FeedURI 检索的完整 Atom 提要
?xml version="1.0" encoding="utf-8"?feed version="0.3" xmlns="http://purl.org/atom/ns#" titleSchema Web/title link rel="alternate" type="text/html" href="http://stanzaweb.art/"/ modified2004-06-01T10:11:12Z/modified author nameUche Ogbuji/name /author entry xmlns="http://purl.org/atom/ns#" titleWelcome to Stanza Web/title author nameUche Ogbuji/name /author link rel="alternate" type="text/html" href="http://stanzaweb.art/2004-06-01/welcome"/ modified2004-06-01T10:11:12Z/modified content type="application/xhtml+xml" xml:lang="en" div class="article" xmlns="http://www.w3.org/1999/xhtml" pWelcome to a href="http://stanzaweb.art/"Stanza Web/a. Come back often to keep track of the best in modern poetry. /p pThis site is powered by a href="http://atomenabled.org"Atom/a /p /div /content /entry/feed
最顶层的元素是 feed ,它包括新增文章的 entry 元素。 feed 的其他子元素传达了关于整个站点的元数据。带有 rel="alternate" type="text/html" 的 link 作为替代表示给出了站点的可阅读表示。Atom 工具也可使用 modified 元素确定站点的新内容是什么时候增加的。
结束语
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)Atom 规范还需要大量的工作,仍有一些不足,比如关于个人的 URL 用元素的内容而非属性表示。在 Atom 最终成为标准之前还有充分的时间修正这些问题。已经有几种试验性的 Atom 实现,倘若能够贡献您的才智,Atom 社区是非常开放的。不要忘记,如果本文引起了您的注意,请在 Thinking XML讨论论坛 上提交您的想法。