跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

技巧: 使用 Atom 结构避免在 feed 聚合过程中出现数据重复

正确安排 atom:id 元素的格式并确保其惟一性

Tyler Anderson (tyleranderson5@yahoo.com), 自由撰稿人, Freelance
Tyler Anderson 2004 年从 Brigham Young 大学获得了计算机科学学位,目前在攻读计算机工程硕士学位,还有最后一个学期。他曾经作过 DPMG.COM 的数据库程序员,现在是总部位于俄勒冈州的 Beaverton 的 Stexar Corp. 公司的工程师。

简介: 

作为一种新兴的联合格式,Atom 不断发展,已经超越了主流的 RSS 联合格式,倍受众人推崇。对于任何类似 Atom 的索引系统来说,我们绝对不会有意地创建重复的 feed ,因为这样有可能会导致原始的 id 元素被覆盖。而且重复的条目(如果没有被覆盖)会浪费磁盘空间。更重要的一点是,重复的内容会造成搜索引擎的混乱,从而影响搜索引擎的排序功能。本文的技巧展示了如何充分利用 id 标签作为主标识符的优势,以及与 feed 条目有关的其他信息(例如 feed 的 link id 和源 URL),来避免 Atom feed 的重复。

参阅 “翻页 Atom:创建一个多段的 Atom 集合或 feed 页面”,了解如何创建一个可供用户使用 “上一页” 和 “下一页” 链接或按钮翻阅发布内容的 Atom feed。

查看本系列更多内容

发布日期: 2007 年 8 月 16 日
级别: 初级
访问情况 : 2532 次浏览
评论: 


关于 feed

Feed 用于联合新闻归档或类似于 blog 的 Web 应用程序中的数据。本例中的 feed(如清单 1 所示)具有潜在的问题,其条目的 id 有可能在别处产生重复。如果此重复项未覆盖当前的条目,那么将在联合中创建重复的内容。


清单 1. 原始 feed
                
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom'
      xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'>
<id>http://www.example.com/myblog/index.html</id>
<updated>2007-01-10T17:23:36.222-08:00</updated>
<title type='text'>MyBlog updates</title>
<link rel='alternate' type='text/html'
    href='http://www.example.com/myblog/index.html'></link>
<link rel='next' type='application/atom+xml'
    
href='http://www.example.com/myblog/feeds/posts/default?start-index=26&max-results=2
5'></link>
<link rel='self' type='application/atom+xml' 
    href='http://www.example.com/myblog/feeds/posts/default'></link>
<author><name>tsa</name></author>
<generator version='1.01' uri='http://www.example.com'>Example 
Blogerator</generator>
<openSearch:totalResults>2</openSearch:totalResults>
<openSearch:startIndex>1</openSearch:startIndex>
<entry>
<id>http://www.example.com/myblog/posts/55</id>
<published>2007-01-10T17:21:00.000-08:00</published>
<updated>2007-01-10T17:23:35.767-08:00</updated>
<title type='text'>My first post ever</title>
<content type='html'>Content goes here!</content>
<link rel='alternate' type='text/html'
    href='http://www.example.com/myblog/posts/55'></link>
<link rel='self' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/default/55'></link>
<link rel='edit' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/edit/55'></link>
<author><name>tsa</name></author></entry>
<entry>
<id>http://www.example.com/myblog/posts/56</id>
<published>2007-01-11T17:21:00.000-08:00</published>
<updated>2007-01-10T17:23:35.767-08:00</updated>
<title type='text'>My second post ever</title>
<content type='html'>Content for second post goes here!</content>
<link rel='alternate' type='text/html'
    href='http://www.example.com/myblog/posts/56'></link>
<link rel='self' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/default/56'></link>
<link rel='edit' type='application/atom+xml'
    href='http://www.example.com/myblog/feeds/posts/edit/56'></link>
<author><name>tsa</name></author></entry>
</feed>

清单 1 中的 feed 只包含了两个条目。在本技巧中,您只需关注 idlink 标签,以及 Atom feed 的源 URL(包含在link 中)。这是一个有效的 Atom 1.0 feed,但在 id 标签的构造中存在着潜在的隐患。


问题

问题的症结就在于使用 URL,或者说是 link 标签的内容,被作为 id 使用。我们必须按照 Atom syndication format 规范以确保惟一性的方式创建 atom:id 元素。(请参阅 参考资料 部分的链接)。

尽管 blog、新闻 Web 站点或者任何联合内容的结构都有助于防止 id 条目的重复,但是使用 URL 作为 atom:id 元素的内容仍然有产生数据重复的隐患,因此不建议采用这种方式。

比方说,您有可能会编辑 blog 中的一篇帖子或者文章。您保存了新内容后,该内容的 URL 将会与原内容的 URL 一样。然而,这还将创建一条新的数据库条目,也就是说 Atom 条目必须要有一个区别于被更新条目的惟一的 id。


解决之道

解决的途径是正确地安排 atom:id 元素的格式。格式化 id 元素的最常用方法就是使用 “标签” URL 方案(请参阅 参考资料 获得完整的规范)。

从本质上来说,该方案采用的格式可以保证创建 atom:id 元素的过程中不产生数据重复,而且 atom:id 元素仍然可以转化为 URL。

上例中的 3 个 id 元素可以转化为标签方案,如清单 2 所示。


清单 2. 将 id 元素转化为标签方案
                
<id>tag:example.com,2007:myblog</id>
<id>tag:example.com,2007:myblog.post-55</id>
<id>tag:example.com,2007:myblog.post-56</id>

现在如果您在编辑一个帖子,URL 或者 link 元素将不会发生变化,可是 id 元素可能会变成如下形式: <id>tag:example.com,2007:myblog.post-55.edit-0</id>。URL 仍然可以从 id 元素处获取,这样在编辑完成后也就毫无顾虑了。

这样就完成了! 我希望您不会再因为 atom:id 元素格式安排不当而遇到 feed 条目重复和覆盖的问题。


结束语

现在您应该进一步了解了 Atom feed,认识到了保持 atom:id 元素惟一的重要性。更重要的是,在您开发代码创建 feed 时,应牢记本文讨论的思想,确保在 feed 条目中不会出现 atom:id 元素重复的现象。



下载

描述名字大小下载方法
Atom 数据重复示例x-tipatom1-dup-source.zip2KBHTTP

关于下载方法的信息


参考资料

学习

获得产品和技术

讨论

关于作者

Tyler Anderson 2004 年从 Brigham Young 大学获得了计算机科学学位,目前在攻读计算机工程硕士学位,还有最后一个学期。他曾经作过 DPMG.COM 的数据库程序员,现在是总部位于俄勒冈州的 Beaverton 的 Stexar Corp. 公司的工程师。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=XML
ArticleID=248975
ArticleTitle=技巧: 使用 Atom 结构避免在 feed 聚合过程中出现数据重复
publish-date=08162007
author1-email=tyleranderson5@yahoo.com
author1-email-cc=dwxed@us.ibm.com

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。