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

用 Atom 注解 Web(2)

用 Atom 注解 Web(2)

创建评论界面有了基本的注解服务之后,就可以考虑如何使用这个服务实现更特殊的评论用例。允许从任何 Web 页面向我们的服务提交评论。对于本文,假设客户机是 Web 浏览器,这可能会有点儿困难,因为使用传统的 Web 表单提交 Atom 条目并不很容易。一个解决方案是使用 XForms,但是 XForms 还未得到广泛接受,用户的系统可能无法处理 XForms。另一个方法是使用 JavaScript 将表单数据组合成有效的 Atom 条目(基本上采用 Ajax 方式)。尽管 JavaScript 可能比较容易实现,但是在受限制的系统上会造成问题。例如,社交站点允许使用 HTML,但是可能不允许使用 JavaScript。因此,最好的方法是使用简单的 HTML 表单和服务器端点,把表单数据转换为 Atom 条目并提交给注解服务端点。
为了便于找到表单的处理端点,我们在评论集合 feed 中添加一个链接。清单 3 是一个 Atom feed 片段示例。
清单 3. Atom feed 片段,包含一个评论表单端点
1
2
3
4
5
6
7
8
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>tag:ionrock.org:site-comments</id>
  <title>Ionrock dot org Web Log Comments</title>
  <link rel="comment-forms" href="http://ionrock.org/comments/forms/" />
  <entry>
   ...
  </entry>
</feed>




下一步是在要评论的页面上添加基本的表单。清单 4 是 HTML 表单代码。
清单 4. 用来提交评论的 HTML 表单代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form action="http://ionrock.org/comments/forms/" method="POST"
     name="annotation-service-comments">

  <fieldset>
    <legend>Leave a Comment</legend>
    <input type="hidden" name="thr-in-reply-to"
           value="http://ionrock.org/tutorials/pyxml/amara/Atom_Fun/"
    />
    <input type="hidden" name="atom-author-name" value="Uche Ogbuji" />
    <input type="hidden" name="atom-author-url"
           value="http://copia.ogbuji.net" />
    <label for="atom-title">Title<label>
    <input type="text" name="atom-title" />
    <label for="atom-content">Content</label>
    <textarea name="atom-content" rows="10" cols="30"></textarea>
    <input type="submit" name="submit" value="submit" />
  </fieldset>
</form>




我们按照一种非常简单的约定确定表单元素的名称。atom 前缀表示值最终将转换为 Atom 元素。- 分隔符后面的第一个字符串定义 Atom 元素。对于作者,Atom 定义一个 atom:author 元素,其中包含一个 atom:name 以及可选的 atom:url 和 atom:email。为了支持这个结构,只需在 author 后面使用另一个 - 分隔符,然后添加元素名。不使用这种约定的一个地方是 thr-in-reply-to,它定义 Atom Threading Extension 元素。我们喜欢更自然的名称,而且不希望用户认为命名约定是硬性的。
还要注意,作者信息包含在隐藏的输入中,而不是文本输入中。在这个示例中,假设在显示表单之前已经对用户进行过身份验证。例如,可以使用 Simple Registration Extension 和 OpenID 收集用户的基本信息。这样就可以在进行身份验证之后提供额外信息,并把信息发送给请求它的站点。也可以把作者信息的隐藏输入表单替换为文本输入表单。
有了表单之后,需要处理表单的提交。一种策略是收集所有表单值并按照约定选出我们需要的数据。但是在这里,只收集我们需要的数据似乎更好。这可以用任何语言实现,我们假设您知道如何获取表单输入并把表单数据转换为有效的 Atom 条目。最后,如果表单输入中缺少任何必需的元素,就通过适当的 HTTP 状态码将问题和相关的链接返回给原来的提交者,使他们能够纠正问题。
返回列表