首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 Atom 注解 Web(1)

用 Atom 注解 Web(1)

Web 2.0 起源于几种推动力,其目的是使 Web 更有价值。推动力之一是实现 “读-写 Web”。在使用 Web 时,用户大多数时候仅仅是信息的读者。Web 上有少量发布者(写者)和大量读者。越来越多的人通过工具在 Web 上发布内容,但是他们通常只在他们能够控制的一些小区域中发布信息。许多人希望 Web 更加 “平衡”:贡献内容的人更多,用户能够在更广泛的范围发布信息。最重要的 Web 2.0 创新(例如网络博客、博客评论、wiki 和论坛)和资源或媒体共享站点(例如 del.icio.us、Flickr、YouTube 和 Digg)都促使 Web 向读-写 Web 发展。但是,还有进一步发展的空间。在本文中,我们要介绍一种精细但有效的方法,帮助扩展一般用户在 Web 上发布信息的空间。要想从本文获得最大的收益,您应该熟悉 Atom 语法和 Atom Publishing Protocol 的基本知识(参见 )。
简化 Web 页面评论大家都熟悉网络博客和类似站点上的评论功能,我们以此为起点讨论 Web 注解。这些功能把文本片段与一个 URL 相关联,这个 URL 可以是博客文章、新闻稿、媒体资源等等。对于这种评论的输入有一定的限制(按照性质或来源分组)。一些文本片段仅仅是指向其他基本 URL 的指针,比如博客的 track-back 和 ping-back。图 1 给出一个取自 Sam Ruby 的 “Intertwingly” 博客的页面示例,其中有一篇文章、一条已经发表的评论和用来发表评论的表单。
图 1. 包含评论系统的博客它们仅仅是 URL 和关系大多数这样的评论系统都在数据库中存储记录,并用专用代码在页面显示过程中获取记录。越来越多的系统为每个评论提供惟一的 URL(称为 “perma-links”),这是一个重要的步骤。如果考虑一下这些评论的抽象概念,它们基本上是一个 Web 资源、评论的目标页面和评论本身之间的关系。与 Web 资源一样,它们也有一个 URL。这是一个非常简单但强大的管理方式,可以通过一个简单的调整实现更强大的功能。我们不需要用数据库和代码存储和管理这些 Web 资源之间的关系,而是用一种标准的开放方式来表达关系。这样就可以跨系统查询和聚合评论;而且我们已经通过 Web 2.0 mash-up 体会到,如果 Web 发布者使用可共享的开放格式,就会大大扩展创造空间。
如果从更一般化的角度考虑这个问题,就会发现无限的可能性。与目标相关联的 Web 资源不一定非是简短的文本片段(比如评论)。它们可以是图像、声音、其他媒体以及其他博客文章(这个思想仅仅是 track-back 和 ping-back 的泛化),甚至是服务。为了以更传统的方式理解这个思想,考虑以下场景:当您把一个目标 URL 提交给 Digg 或 del.icio.us 这样的服务时,实际上相当于在评论中建立相同类型的 URL 关联。有时候,用户把一篇博客文章提交给 Digg,然后在博客上留下文本评论 “这篇文章真酷。我把它提交给 Digg 了”;从更一般化的角度考虑,这么做是多余的。博客文章与 Digg 服务之间的关联应该是透明的,就像评论与博客文章之间的关联一样。
“评论” 这个词太狭窄,不适合表达 “把任意 Web 资源与目标相关联” 这个广义思想。我们在这里讨论的实际上是 Web 注解,它更容易被发现和处理。实现这个目标的关键是采用确定的标准。Atom 标准组实际上已经提供了所需的许多功能。
通过 Atom 标准实现 Web 注解通过为 Atom 条目提供上下文,Atom Threading Extension 扩展了核心 Atom 语法。简单地说,Atom Threading Extension 允许把一个条目或 feed 声明为对某一资源的响应或回复。因此可以为评论和线索式会话创建 feed。清单 1 是一个使用 Atom 和 Threading Extension 实现的博客文章评论。
清单 1. 用 Atom 和 Threading Extension 实现的博客文章评论
1
2
3
4
5
6
7
8
9
10
11
12
<entry xmlns="http://www.w3.org/2005/Atom"
  xmlns:thr="http://purl.org/syndication/thread/1.0">
  <id>tag:eric@ionrock.org,2008-02-29:1-Annotations_and_Communcations</id>
  <title>Communication Reactions</title>
  <content type="text">
    One good use of annotations is tracking edits of some document!
  </content>
  <thr:in-reply-to
    rel="http://ionrock.org/blog/2008/01/10/Annotations_and_Communcations.atom"
    href="http://ionrock.org/blog/2008/01/10/Annotations_and_Communcations/"
    type="text/html" />
</entry>




注解只是评论的泛化。它可以是带一个 Web URL 和内容表示的任何东西,而不仅仅是文本片段。(实际上,没有任何 Web 表示的东西也可以作为注解,但这是另一篇文章的主题)。评论一般只在特定的上下文用法内有意义,但幸运的是,Atom Threading Extension 已经通过提供设置指针的方法支持更一般化的用法,同时保持上下文完全开放。
注解服务Atom 语法提供一种用来表达 Web 注解的格式。Atom Publishing Protocol(AtomPub)提供一个用来构建注解服务的框架。在本文中,我们将开发一个注解服务器,它仅仅是一种有点儿特殊化的 AtomPub 服务器。惟一的额外要求是,Atom 条目要包含一个线索元素。为这个元素编制索引,供以后的查询使用。这个服务器的用途是提供一个用来存储注解的服务,可以根据编制了索引的引用查询这些注解。换句话说,可以请求服务器 “把与资源 X 相关的所有注解给我”,服务器会使用索引提供快速响应。以此为基础,可以进一步扩展服务,提供更方便的操作,支持更复杂的注解,但是本文只关注最简单的功能。
因为注解服务提供一个 AtomPub 接口,可以用一个 AtomPub 服务定义它的使用方法,见清单 2。
清单 2. 注解服务的 AtomPub 服务文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<service xmlns="http://www.w3.org/2007/app"
         xmlns:a="http://www.w3.org/2005/Atom"
         xml:base="http://ionrock.org/annotations/">
  <workspace>
    <a:title>Annotations Collections</a:title>
      <collection href="comments/">
        <a:title>Comments for Ionrock.org</a:title>
        <accept>application/atom+xml;type=entry</accept>
      </collection>
   </workspace>

  <workspace>
    <a:title>Annotations Management</a:title>
    <collection href="manage/">
      <a:title>Manage Annotation Collections</a:title>
      <accept>application/atom+xml;type=entry</accept>
    </collection>
  </workspace>
</service>




在上面定义的服务中,有两个主要的工作空间。第一个工作空间是注解的集合。这个列表目前只包含 “comments” 集合,但是可以根据需要添加其他东西。为了便于实现这个目的,第二个工作空间 “Annotations Management” 有一个主集合,它定义哪些集合是可用的。如果请求 “manage” URL 上的 feed,只会找到一个描述 “comments” 集合的条目。
有了服务文档之后,就可以通过 AtomPub 接口使用注解服务了。还可以在这个 AtomPub 服务的基础上为注解服务构建一个管理应用程序。
返回列表