现在的位置: 首页 > 综合 > 正文

[转]Attention.xml初探

2013年02月12日 ⁄ 综合 ⁄ 共 7445字 ⁄ 字号 评论关闭
http://herock.net/archives/000108.html

Attention.xml初探

 将近一个月以前,看到文心的Attention.XML - RSS延伸技术,当时立刻产生了一个感觉:FeedChoice将会用到它!

  Owen说道:

  目前RSS阅读存在的问题:
1. 信息过量:RSS阅读中存在的一个普遍问题,我们可能收集了300条信息源,这些信息源每天都在更新而我们根本无法看完。
2. 缺乏参与性:目前的RSS阅读都是个体行为,我们可以通过一些工具知道朋友订阅了哪些RSS信息,但无法知道他们每天阅读了哪些具体条目?
3. 无法协同合作:无法实现团队或几个人之间的协同合作。
4. 缺乏准确性:订阅的RSS源每天可能有成百上千条更新,而这些信息到底哪些是对自己有价值的呢?哪些是自己感兴趣的?令我们无从下手。
5. 缺乏提示功能:很多时候一条信息可能被几个甚至10几个人写到了Blog里面,而导致我们从不同的RSS信息中重复点击同一个链接。

上面这些都是目前RSS阅读方式无法解决的,而Attention.XML的目的就是为了解决这些问题

  也就说,Attention.XML试图解决的,就是尽量减轻RSS阅读过程中的信息过载给读者造成的压力,这种过载已经渐渐成为一个普遍性的问题,未完成(对付RSS信息过载的初步想法与实践)和keso(信息过载与市场机会)和其他很多人,都在被这个问题所困扰,我坚信,“RSS信息过载”一定是一个市场的“痛点”,因为至少我自己现在就很“痛”。

  Attention.XML的思路和FeedChoice的是一致的,FeedChoice也是希望能够为特定的用户筛选其已有的大量Feed,并从其尚未订阅的Feed中挑选他可能会认为重要的Feed。

  这个过程可能比较复杂,它不该是个简单的投票系统和排行系统,因为通过这样的方式浮出水面的,是在各种杂乱无章的因素交互作用下,形成的大众的观点,虽然可能具有代表性,但绝不可能对每一个人的胃口;它也不能是完全个人化的评价系统,因为人是社会化的,需要在社会这个体系中保留确定的座标,个人好恶往往也需要以社会公认的标准为重要参考,这也是旧烟斗发现的弊病之一:使用rss阅读新闻,无法直接的感知到“一条具体的新闻标题在社会背景下的定位”。

  而Attention.XML似乎比较好的解决了这个问题,既可以通过记录你自己的阅读习惯来分析某个Feed在你个人体系中的优劣;又可以通过分享其他人的Attention.XML来判断Feed在社会体系中的优劣,两者结合,较为全面。

  接下来的问题就是,具体需要如何操作才能把这个美好的想法变成现实?研究了Attention.XML的协议,也请教了Owen,大概明白了一点,就是要有专门的支持Attention.XML的在线存储/同步服务,配合支持Attention.XML的解析/阅读服务(web端或客户端),才能真正开始进入实用阶段。

  现在能看得到的例子中,http://www.technorati.com/attention.html是一个,但是我看不懂,按照其要求导入了一个OPML文件后,没有看出任何能够体现attention.XML特性的地方,而且此服务现在被暂停了,访问的提示是“This feature will be back online soon”。

  另一个就是yahoo的My web,据说已经提供了attention.xml的输出,但注册了以后,上上下下翻遍了每一个角落,硬是没有找到!只发现了一个XML的图标,却是标准的Rss2.0的格式,百思不得其解,要不是最后灵光乍现,把上述RSS文件的地址"../rss.xml"改成"../attention.xml",而终于得见庐山真面目,可能到现在还郁闷着呢。

  不过找到了也没有什么用,my web似乎目前也只是提供了一个attention格式的文件输出,并不能真正使用到attention的特性。可能还要再等等吧。

  FeedChoice却不能再等了,之前的开发工作已经开始,但我们也许会考虑开发一套真正支持attention.XML协议的应用。

  为了让自己尽可能深入的理解Attention.XML,花了一些时间,将attention.xml文档中文化了(较长,故附在全文中),也希望能对想了解attention.XML的朋友有一点用。

  全文在此:

Attention.XML

  Attention.XML是一种基于开放源代码(参见范例:XOXOSampleCode)的开放性的标准。

  采用这种标准有助于你了解你都读了些什么,你的时间花在什么地方,还有,你可能会关注些什么。

问题声明(综述)

有多少信息源是你必须跟踪的?
从N多不同的Blog中点击同样的链接,已经让你疲惫不堪?
RSS阅读器会自动更新,但是面对这么多未读的信息,到底该从哪一条开始看起呢?
  Attention.XML就是为解决这些问题而设计的,从而使构造一个全新的Blog和Feed相关的服务成为可能。

格式

  格式概要

  Attention.XML是一种XML文件,该文件的格式中包含着Feed和Blog的大纲(outline),而每个Feed又是一个大纲,Feed下的每一篇Post也是一个大纲。这个层级分明的大纲中被加入如下信息的注释:Feed/post最后一次被载入的时间,在这个Feed/post上花费的时间,该Feed/post最近存取的次数,用户设置的“赞同”或者“不赞同”之类。

格式协议

  Attention.XML大纲包括如下的种类的条目,在未作另行规定之前,这些条目的属性值都是字符串。

Group:组没有URL标签,但每一个组都有如下标签:
title.实际上,这个标题是用户给一个blog的group或者Feed的group设定的。
children:groups或Blogs
Blog/Feed/站点.每一个Blog/Feed/站点有如下标签:
title.名字或标题
url.每一个条目都有一个首要的URL地址,就是这个地址。
alturls.资源的次要URL/标题列表,比如,对于Blog 或其它Feed类型,类型的信息可以通过HTTP request取回并在必要的时候进行缓存。
etag.HTTP 1.1, sec. 14.19
lastupdated.由attention.xml存储/分析服务器写入
dateadded.Feed被加入Blogroll的日期时间,加入的时候由应用程序来添加,如果不是初次添加而是再次取回,应用程序可能会将其忽略掉。须遵循ISO8601 datetime的格式。
dateremoved.从Blogroll里删除的时间,通过应用程序添加,这个过程是由存储/分析服务器发送命令来完成的。须遵循ISO8601 datetime的格式。
lastread.指出用户确定读了一个Feed的时间(也许是通过“选择”的方式)。须遵循ISO8601 datetime的格式。
readtimes.FIFO(先进先出)序列(长度等于操作所需要的时间,建议不少于16秒)加上阅读的时间。须遵循ISO8601 datetime
userfeedtitle.用户给一个Feed设定的标题,通过应用程序写入。
rel/xfn.作者在这个Blog/Feed中表现出来的社会关系,详细情况请见XFN。
rev/votelink.“投赞成票”、“投反对票”、“投弃权票”。详细情况见:VoteLinks
tags.一种用户给内容自定义标签/注解的机制,在这里查看Tags的例子:Technorati Tags
children.文章/条目。
Post/Item/Page.每篇文章/条目/页面包含以下标签:
title.名字或标题。
permalink/guid.担当唯一标志符,并使其看起来是规范的,就像这里描述的一样:http://www.xml.com/lpt/a/2004/08/18/pilgrim.html
type.定义文章permalink的MIME类型,默认是“text/html”类型。
etag.HTTP 1.1, sec. 14.19
lastupdated.定义文章最后一次被更新的时间,须遵循ISO8601 datetime。
lastread.指出用户确定读了一个Feed的时间(也许是通过“选择”的方式)。须遵循ISO8601 datetime的格式。
duration.用户阅读这篇文章/条目所花的秒数(一个非负整数)。
followedlinks.用户在这篇文章中点击或进入的URL列表。
rev/votelink.“投赞成票”、“投反对票”、“投弃权票”。详细情况见:VoteLinks
tags.一种用户给内容自定义标签/注解的机制,在这里查看Tags的例子:Technorati Tags
children:无
范例

  每一个Feed

  下列是OPML的片断,在head信息后,传递每一个Feed的信息,如果这个Feed是存在的。

  在典型的Attention.XML XOXO中看起来应该是这样:

atitle
description
descstr
alturls
atomurl
xmlurl
  Attention.XML加入了前述计划中提到的如下属性:

alturls, etag, lastupdated, dateadded, dateremoved, lastread, readtimes, userfeedtitle, rel, tags

每一篇文章

  在OPML中,每一个Feed有一套子元素,是通过大纲来表现的。

  在典型的Attention.XML文档XOXO中是这样的:

title
lastread
ISO-8601 date
duration
seconds value
followedlinks
link1
link2
permalink和guid的值是必须的-这将作为每一篇文章或条目的标识符。
对lastread这个值的要求同上,须遵循ISO-8601的时间格式,用来表示该条目最后载入的时间。
duration也是一样-表示花费在该条目上的秒数。
其它,在前述的计划中都有详细的说明。
  这是格式的要求, AttentionSample可供参考。

概念验证

  在此处查看,Technorati将会使用Attention.XML文件或OPML格式的订阅列表输出(类似NetNewsWire那样):
http://www.technorati.com/attention.html
顺便说一下,当我们测试期间完毕后,这个网络服务的网址可能会从这里转换到其它的地方,但这里仍将作为镜像被保留并得到更新。

  这里是Technorati的Attention.XML服务的API文件:AttentionQuery。

概括

  有很多不同类型和层次的Attention.XML应用。定义一套大致的轮廓有助于在多种多样的工具中确立较高的互用性。

最简单的Feed同步服务概述

  最简单的Feed同步应用或服务必须支持下列Attention.XML计划中的子集:

Group.Group没有URL的属性,但是,每个Group都有一个“title”。Groups只在必须导出全部Feed列表的时候才被进行解析。

title.应用程序必须寻找title是否存在,但可能忽略其内容。

子类:Groups或Blogs。

Blog/Feed.每一个Blog/Feed包含如下标签:

URL.每个条目都有一个主要的URL,我们稍后会对此作出更改。

lastread.用来指示读者确定的最后一次阅读一篇文章/条目的时间(ISO8601),也许采用选择的方式,应用程序必须对此进行适当的设置,如果读者从未度过此Feed,则留出空白或者不要进行显示。

children: posts/items。

post/item.每一个post或item是一个含有如下标签的Feed。

permalink/guid.

lastread.用来指示读者确定的最后一次阅读一篇文章/条目的时间(ISO8601),也许采用选择的方式,应用程序必须对此进行适当的设置,如果读者从未度过此文章/条目,则留出空白或者不要进行显示。

  启动之后,应用程序需要从存储服务(也许是本地文件或是在线同步服务)中载入用户的Attention.XML文件到内存中。

  当用户点击或以其它方式选中一个Feed,应用程序必须更新内存中的“lastread”属性。

  当用户点击或以其它方式从一个Feed中选中了一个item,应用程序必须更新内容中的“lastread”属性。

  从存储服务中得到的Attention.XML中所包含的其它未被承认和支持的属性,在重新保存时必须保持原样不被破坏。

  退出的时候,应用程序必须将内存中的Attention.XML写回存储服务(如本地文件或是在线同步服务),包括如下动作:

重新读取Attention.XML文件,以防万一在上次读取后又有其它的客户端对其进行了更改。

加入本地所作的改变,写出最终的Attention.XML文件。

应用程序应该在合适的时间(也许是经常性的或是在用户发呆了特定时间后)同步Attention.XML文件,以便能够及时与其它用户同步本地的更改,并反映出其它用户对“lastread”的最新更改状态。

Feed阅读器概述

  除了如上所述的最基本的同步功能,一个典型的blog/feed阅读工具应该要支持以下完全的Attention.XML协议:

用户将一个Feed加入其列表的时候,据此设置“dateadded”属性。

当用户从列表中删除一个Feed的时候,不要真正的删除它,而是将其在用户界面中隐藏并设置“dateremoved”属性。

在更新Blog/Feed的“lastread”属性的时候,首先把当前“lastread”中的可用的阅读时长写入“readtimes”属性。

用户在读一篇post/item的时候,如果可以侦测到阅读的时长,将这个时间值立刻写入该post/item的"durationread"中。

如果用户点击了post/item中的一个链接,将其加入post/item中的“followedlinks”中。

如果用户自定义了列表中的post/item的标题,将这个标题存入“userfeedtitle”属性。

提供给用户一个界面,使其可以通过一个Feed/Blog的列表来表现他的社会关系(如果有的话),并且结合XFN的值来更新其“rel”属性。

提供给用户一个界面,让他可以对每一个Blog/Post以及Feed/item作出如下评价:“满意”、“不满意”、“不予置评”,一旦用户作出了选择,则结合Technorati Tags是一些"tags(标签)"的范例。

Attention存储/同步服务概述

  一个Attention存储/同步服务必须支持如下动作:

GET.客户端必须可以从服务端得到Attention.XML文件。可选的扩展特性包括可以用特定的用户名/密码来请求该用户的Attention.XML文件,而且可以和其他用户分享(也许包含在其社交网络中)他们的Attention.XML文件。另外,一些blog/feed/post/item的如下属性可能会经常更新:"lastupdated", "etag", "alturls", "title"。在服务端重新接收并解析这些blogs/feeds的时候,应该要把在重新接收到的blogs/feeds中自动发现的所有URL都加入到“alturls”属性中。

POST.服务端必须能从任何客户端接收Attention.XML文件,并将其合并到下列文件任何早期版本中:

对于所有的blogs/feeds/posts/items,分别明确其最后的“lastread”值。

如果一个blog/feed有“dateremoved”的属性,而且这个时间比任何“dateadded”都更晚,那么就从列表中移除该Blog/Feed,并且移除“dateremoved”的属性。

按照每一个Blogs/Feeds的新旧结合“readtimes”的属性进行排列,并只保留至少被推荐了16次以上的。

把一篇post/item中的“followedlinks”合并成一个集合。

接受任何Feed/item中的比当前值更高的“durationread”属性。

接受任何"POST"传来的新的Feed的"userfeedtitle", "rel", "rev", "tags" 属性。

接受任何"POST"传来的新的Feed中的条目的"rel", "rev", "tags" 属性。

示范代码

  范例代码见XOXOSampleCode。

参考资料

  参考标准

XHTMLMOD
XOXO
XMDP
XFN
VoteLinks
RelTag
  参考信息

Identifying Atom by Mark Pilgrim
OPML 1.0
  执行工具

Technorati的TechnoratiApi中的AttentionQuery API(Attention查询API)
Niall Kennedy的NetNewsWire export
版本重大改进

  2005-06-09

使用VoteLinks中的"rev"替代了以前的"rel"。
  2004-12-28

从"blog/feed/site"中去除了“groups”的属性,因为并没有知名的阅读/解析服务支持用户把一个Feed加入多个Groups中。原来的属性是这样定义的:“groups”:用户定义用来放置Feeds的group的列表。它的意义在于可以把一个Feed放入多个Group中。备注:应用程序可以限制每个Feed只能被置入一个group中,如果有此设置,则应用列表中的第一个。
给blog/feed/site和post/item/page加入“tags”的属性。
  2004-10-01

基于XOXO进行的第一版设计。
讨论

加入Technorati Developer program和开发者列表,参与Attention.XML的讨论。
AttentionXMLFAQ
AttentionXML讨论区
  这里是我Furl下来的一些相关链接,供参考。

Technorati Tags: attentionxml, attention, web2.0

抱歉!评论已关闭.