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

用 Atom 注解 Web(3)

用 Atom 注解 Web(3)

创建评论查询接口评论提交功能已经实现了,现在需要一种使用评论的方法。对于这个示例,我们希望显示每个评论的标题、作者和内容。一个方法是通过 AtomPub 接口获取完整的评论 feed,然后寻找满足适当条件的条目。但是,这种方法并不理想,因为随着 feed 中评论数量的增加,每个请求所需的带宽和处理也会增加。解决方案是创建一个简单的查询接口,帮助控制带宽并简化处理。
考虑两个基本场景。在这两个场景中,查询参数都是注解的目标资源的 URL。在第一个场景中,所有 URL 实际上是到相同的基 URL 的路径。因此,可以直接在 URL 中使用路径来创建 URL 接口。例如:
1
2
3
4
5
# the annotated URL
http://ionrock.org/about/

# the annotation feed for the above URL
http://ionrock.org/comments/feed/about/




第二个场景中的 URL 可能与普通 URL 有很大的区别。每个注解的主机名、协议、端口号等都可能不一样。在这个场景中,最好使用一个查询字符串参数:
1
http://ionrock.org/comments/find_feed/?href=http://xml3k.org/Bright_Content




在这里,通过使用查询字符串参数,能够更灵活地寻找注解,同时不影响可读性。
建立了查询接口之后,就可以开始使用评论 feed 了。清单 5 是一个用 XSLT 编写的示例:
清单 5. 用来访问特定资源的评论注解的 XSLT 片段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<xsl:template name="get-comment-feed">
  <xsl:param name="comment-feed-url" />
  <xsl:variable name="atom-feed" select="document($comment-feed-url)" />

  <xsl:if test="$atom-feed/a:feed/a:entry">
    <xsl:apply-templates match="$atom-feed/a:feed/a:entry"
                         mode="comments" />
  </xsl:if>
</xsl:template>

<xsl:template match="a:entry" mode="comments">
  <div class="comment-entry">
    <h4><xsl:value-of select="a:title" /></h4>
    <xsl:copy-of select="a:content/xh:div" />
  </div>
</xsl:template>




这种模板很容易添加到客户端 XSLT 中。当然,也可以用 JavaScript 处理 feed。
扩展注解服务很容易用 Atom 中的特性增加其他功能。可以用 atom:control 和 atom:draft 元素创建队列。还可以在同一个集合中提供 ping-back 或 track-back。还可以结合使用 atom:category 元素和自己定义的方案定义特定评论的特殊含义。例如,方案可以相对于页面中的锚:
1
2
<a id="section-3.4" name="section-3.4"/>
<h2>Section 3.4 - Handling Annotations with Atom</h2>




在 Atom 条目中,可以用下面的 atom:category 元素引用它:
1
2
<category scheme="http://ionrock.org/ns/dyntag/anchor/"
          value="section-3.4" />




通过使用这种简单的方法,可以对 Web 资源的不同部分应用注解。以 Atom 和 AtomPub 为基础,我们可以建立非常灵活的注解管理系统。
结束语本文并没有提出全新的概念。几年前,W3C 已经在 Annotea 项目中研究过这种思想。我们的方法以现有的 Atom 语法和 Atom 协议为基础。我们给出的代码仅仅是一种可能的实现方式,您可以用许多不同的语言和库开发自己的实现。要点在于,通过使用 REST 式体系结构,很容易在现有的系统上进行扩展,而且一旦习惯于以这种方式考虑问题,您的注意力就不再局限于博客评论这样狭义的解决方案上了,而是更关注 Web 注解这样的广义思想。
返回列表