新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     >>W3CHINA.ORG讨论区<<     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> RSS(RDF Site Summary), DC(Dublin Core), FOAF, PRISM, GO(Gene Ontology), P3P,XPackage,CIM/XML,CC/PP
    [返回] W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWLW3CHINA.ORG讨论区 - Web新技术讨论『 RSS/FOAF/Dublin Core/CIM/PRISM/Gene Ontology 』 → XML 观察:使用 XML 和 RDF 找到朋友 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 13222 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: XML 观察:使用 XML 和 RDF 找到朋友 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 RSS/FOAF/Dublin Core/CIM/PRISM/Gene Ontology 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 XML 观察:使用 XML 和 RDF 找到朋友

    XML 观察:使用 XML 和 RDF 找到朋友   

      

    词汇表“朋友的朋友”可以使得管理在线社区更容易

    Edd Dumbill(edd@xml.com)
    编辑兼发行人,xmlhack.com
    2002 年 6 月

    Edd Dumbill 研究称为朋友的朋友(Friend-of-a-Friend (FOAF))的 XML 和 RDF 应用程序。FOAF 允许表示个人信息和各种关系,它是一种创建支持在线社区的信息系统的有用构件。代码样本演示了其基础知识。
    不是您知道什么,而是您知道谁。自从 Web 出现以来,Web 上对自我的表述就同其它内容一样多。许多人初涉 Web 世界就是从给自己构建主页开始的。搜索引擎意味着您可以非常快地找到具有相同兴趣的人。的确,这项技术非常有趣,但是人本身却总是更有趣。

    个人 Web 发布趋势中最新插曲之一是 Web 日志(weblog),它是一种快速发布的格式,具有个人的、非正式的特性。Web 日志用户喜欢相互引用,从而喜欢创建多个网站之间的对话。支持这种快速发布形式的技术之一是 Rich Site Summary 或 RSS(参阅参考资料),它是一种包含有关站点上内容项的元数据的 XML 文档。

    RSS 创建了一种可预见的方法用于对内容片段进行聚集、排序和搜索。类似 Syndic8 和 Meerkat 的站点(参阅参考资料)使您能够跟踪您感兴趣的主题 — 或人 — 而发表观点的人。RSS 还非常简单,您经常可以发现 XML 教程材料的示例中使用了它。其部分吸引力在于那种让您能够将您的内容连接至更大的 Web 的方法,这使得其他人能够更容易地找到您。

    然而,本文并不是关于 RSS 的 — 它在别处已有详细的记载。我将研究一个有些类似的称为朋友的朋友(FOAF)的新项目。该项目进一步深化 Web 的社会网络方面。

    无处不在的社区
    在因特网上,社区的数量正在不断激增,包括各种社区,从专业机构到社会团体。Dan Brickley 和 Libby Miller 发明的 FOAF 词汇表为社区成员提供了一种基本表达:描述人及其基本特性,如姓名、电子邮件地址等等。

    FOAF 只是一个 RDF 词汇表。它的常规用法类似于 RSS:在 Web 服务器上创建一个或多个 FOAF 文件并共享 URL,这样,使得软件可以使用该文件内的信息。和创建您自己的 Web 页面一样,分散创建 FOAF 数据并使其创建在您的控制之下。使用这些文件的示例应用程序可能是一个社区目录,成员在该目录内维护他们自己的记录。然而,如同 RSS 一样,当聚集数据然后探究和交叉链接这些数据时,FOAF 才显露出其真正有趣的部分。

    FOAF 有望成为一种管理社区的重要工具。除提供简单的目录服务之外,您还可以以许多方式使用 FOAF 上的信息。例如:

    通过对来自可信的同事的邮件区分优先级来增加对电子邮件的过滤
    为社区新成员提供帮助
    查找兴趣相投的人

    本文余下部分描述了 FOAF 的基本特性,并为当前实现和未来考虑事项提供了一些启示。让我们从 FOAF 解决的核心问题开始:为了描述人要如何标识人。

    表达身份
    开始将有关现实世界事物(如人)的数据输入计算机系统时,您会碰到为每样事物创建一个唯一的名称这一难题。以人为例,很显然,某人的姓名不足以向计算机唯一地标识他。在大多数封闭的系统中,往往为人们分配特定于应用程序的标识符。可以在 Web 上看到这一点:您可能将用户名/密码对用于如邮件列表和网站之类的多种不同的服务。只要您根本不希望这些分隔开的、封闭的系统相互操作,您就不会有问题(也许,除了需要记忆大量的标识符之外)。

    如果希望在多项服务上统一您的身份,那么情况就变得比较复杂。有人不得不提出一个集中式的方案来控制身份分配。最近我们看到发展很快的一种这样的方案是 Microsoft 的 Passport。然而,由于种种原因这种集中非常危险,不仅是因为会使第三方完全控制您对服务的访问,并且可能控制您的私人数据。

    因此,如果您考虑 FOAF 系统 — 在该系统中,任何人都可以自由创建及使用数据,而希望每人只有一个名称 — 那么就需要一个分散命名策略。Web 有一种构建良好的命名策略,它与此类似:URI。对于人的命名,您可能认为 mailto:(电子邮件地址)将是一种可供使用的方便的 URI 方案。然而,事实不象看起来的那样简单。天真的方法可能让开发人员写下一些荒唐的话,例如:

    mailto:edd@xml.com lives in the UK

    稍做思考会发现这句话实际上毫无意义,因为您可以真实地写下:

    mailto:edd@xml.com is an e-mail address

    很显然,某人和他的电子邮件地址不是一回事,因此,您实际上不能将某人的电子邮件地址作为全局名。而且,某人可能有多个电子邮件地址,每个地址用于一个不同的目的。

    然而,使用电子邮件地址来标识某人的原理并没有缺陷:通常,如果您向一个地址发送一条电子邮件消息,那么您希望它能到达某个确定的人。那种天真的方法没有考虑到的是:虽然您永远也不能为某人创建全局名,但您可以合理地假设包含“这个人的电子邮件地址是 edd@xml.com”的所有个人描述非常可能指同一个人。

    因此,您可以正确地写下:

    The person with e-mail address mailto:edd@xml.com lives in the UK.


    这就是 FOAF 的工作方式。为了组合关于特定个人的信息,我们假定电子邮件地址是一种确定的属性 — 即只有一人拥有某个特定的邮箱。

    FOAF 的基本特性
    撇开理论,让我们看一看 FOAF 信息采用何种格式。因为代码常常比文字更能说明问题,清单 1 显示了一小段对我自己的 FOAF 描述。

    清单 1. 有关作者的样本 FOAF 描述

    <rdf:RDF

          xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

          xmlns:foaf="http://xmlns.com/foaf/0.1/">

    <foaf:Person>

          <foaf:name>Edd Dumbill</foaf:name>

          <foaf:mbox rdf:resource="mailto:edd@xml.com" />

    </foaf:Person>

    </rdf:RDF>

    简单地说,清单 1 中的描述表明“有一个名叫 Edd Dumbill 的人,他的电子邮件地址为 edd@xml.com。”

    FOAF 使用 RDF 来对其描述进行编码。在本文中,我将坚持使用 RDF 十分基本的用法,即通过列出带类型的对象(在清单 1 的例子中,类型是 foaf:Person)及其特性(在清单 1 中,是 foaf:name 和 foaf:mbox)来模仿面向对象的数据结构。关于 RDF 的更多信息,请参阅参考资料。

    表 1 显示了其它一些更简单特性,这些特性使我能够表示关于我自己的更多信息。

    表 1. 对单个人进行特征描述的一些更简单特性

    特性 值
    nick 一个字符串文字,它给出一个名称,用于在聊天或其它计算机系统上标识用户;例如 AIM 屏幕名称或 UNIX 登录
    homepage 某人主页的 URL
    workplacehomepage 某人工作地主页的 URL
    depiction 描述某人的图片的 URL
    phone 某人的电话号码

    在清单 2 中,我用这些特性中的几个来增加对我的描述。(我省去了外层 RDF 封套以节省版面。)

    清单 2. RDF 摘录,其中将来自表 1 的更多特性添加到对作者的描述中

    <foaf:Person>

          <foaf:name>Edd Dumbill</foaf:name>

          <foaf:mbox rdf:resource="mailto:edd@xml.com" />

          <foaf:nick>edd</foaf:nick>

          <foaf:workplacehomepage rdf:resource="http://xml.com/" />

          <foaf:depiction

               rdf:resource="http://heddley.com/edd/images/edd-shoulders.jpg" />

    </foaf:Person>


    至此,示例向我们提供了一种创建计算机可读的主页的有用方法。如果在线社区上的每个人都提交指向一个 FOAF 文件的 URL,那么您就可以将他们编织成一个合理的社区目录。

    知己知彼
    我还没有研究的一个特性是 foaf:knows 特性。可以用它来将两个人链接在一起,它具有某种相熟的人的基本语义。使用该特性时,首先碰到的就是必须标识别人。如同我在表示身份中所总结的,FOAF 通过描述其他人的特性来标识他们:从这里开始,处理器就可以使用标识特性来推断提到的是哪个人。清单 3 显示了我怎样表示我认识 Simon St.Laurent。

    清单 3. foaf:knows 特性示例,它建立两个熟人之间的联系

    <foaf:Person>

          <foaf:name>Edd Dumbill</foaf:name>

          <foaf:mbox rdf:resource="mailto:edd@xml.com" />

            ...

          <foaf:knows>

               <foaf:Person>

                    <foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />

                    <foaf:name>Simon St.Laurent</foaf:name>

               </foaf:Person>

          </foaf:knows>

    </foaf:Person>


    在清单 3 对我的描述中,我添加了“此人认识拥有邮箱 simon@xmlhack.com 并且姓名为 Simon St.Laurent 的人。”我用粗体突出显示了邮箱行,因为 FOAF 将使用邮箱来实际生成到 Simon 的链接,而不是使用任何其它属性。

    如同我将在下一节中演示的那样,如果程序读取我的 FOAF 文件,同时也读取 Simon 的文件,那么我可能理所当然地想要请求它“显示我认识的人的姓名和主页。”即使我没有透露关于 Simon 主页的任何信息,但如果 Simon 提供了该信息,那么程序可以通过共享的 foaf:mbox 属性这个优点将事实链接在一起。

    合并 FOAF 描述
    当 FOAF 文件合并在一起时,使用 FOAF 词汇表的真正强大功能才体现出来。注:词汇表完全没有限制您创建对您自己的唯一描述。例如,我可以为其他几个人创建 FOAF 描述。让我们来尝试一个小示例。首先,清单 4 显示了我创建的一个文件。

    清单 4. 对作者和两个同事的简单描述

    <rdf:RDF

          xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

          xmlns:foaf="http://xmlns.com/foaf/0.1/">

    <foaf:Person>

          <foaf:name>Edd Dumbill</foaf:name>

          <foaf:mbox rdf:resource="mailto:edd@xml.com" />

         </foaf:Person>

    <foaf:Person>

          <foaf:name>Simon St.Laurent</foaf:name>

          <foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />

    </foaf:Person>

    <foaf:Person>

          <foaf:name>Eric van der Vlist</foaf:name>

          <foaf:mbox rdf:resource="mailto:eric@xmlhack.com" />

    </foaf:Person>

    </rdf:RDF>


    假定 Eric 有一本在线相簿。他可以用它来创建清单 5 中所显示的 FOAF 文件。

    清单 5. 对两人的描绘的说明

    <rdf:RDF

          xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

          xmlns:foaf="http://xmlns.com/foaf/0.1/">

    <foaf:Person>

          <foaf:mbox rdf:resource="mailto:edd@xml.com" />

          <foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />

    </foaf:Person>

    <foaf:Person>

          <foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />

          <foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />

    </foaf:Person>

    </rdf:RDF>


    一眼就可以清晰地看出,放在一起的这两个文件的整个导入就是:除我已表述的信息之外,从 http://example.org/photos/edd+simon.jpg 获得的特殊照片上描述了 Simon St.Laurent 和 Edd Dumbill。

    为了让计算机理解这一点,必须让计算机执行这两个数据文件的合并 — 即,计算机必须处理文件中的数据以强制执行规则“如果某人 A 与某人 B 具有相同的 foaf:mbox 属性,那么 A 和 B 是相同的实体。”进行了这个处理之后,系统所知道的可以如清单 6 中的那样进行表示。

    清单 6. 从合并清单 4 和清单 5 中的属性所得的描述

    <rdf:RDF

          xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

          xmlns:foaf="http://xmlns.com/foaf/0.1/">

    <foaf:Person>

          <foaf:name>Edd Dumbill</foaf:name>

          <foaf:mbox rdf:resource="mailto:edd@xml.com" />

          <foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />

    </foaf:Person>

    <foaf:Person>

          <foaf:name>Simon St.Laurent</foaf:name>

          <foaf:mbox rdf:resource="mailto:simon@xmlhack.com" />

          <foaf:depiction rdf:resource="http://example.org/photos/edd+simon.jpg" />

    </foaf:Person>

    <foaf:Person>

          <foaf:name>Eric van der Vlist</foaf:name>

          <foaf:mbox rdf:resource="mailto:eric@xmlhack.com" />

    </foaf:Person>

    </rdf:RDF>


    至此,我希望您可以看到合并所提供的能力。通过聚集和合并 FOAF 文件,您可以获得同操作集中式目录服务相同的效果,而没有单点故障或单点控制的任何问题。对于许多需要分散或转移控制的社区来说,这是一项极富吸引力的特性(要么因为政治结构的缘故要么纯粹是因为大小的缘故)。

    有趣的演示
    由于篇幅的原因,我在这里不能解释有关 FOAF 词汇更多内容。进一步探讨它的方法是看一看一些演示。

    共同描绘:清单 5 说的是,在一张照片中描绘了两个人。您可以从清单 5 的数据中获取有用和有趣的效果。在共同描绘演示(参阅参考资料)中,您可以得到一组二人相映托的照片,这组照片是通过二人相距六种不同的距离得到的。
    在线聊天:作为我对 FOAF 研究的一部分,我创建了一个软件代理程序(bot),它位于聊天论坛内,并且由于它已经编织了他们的 FOAF 文件网络,因此可以提供关于社区成员的信息。其代码还没有发布,但下面有一个样本会话:

    <edd> oracle, edd's name

    <oracle> edd's name is 'Edd Dumbill'

    <edd> oracle, Edd Dumbill's nick

    <oracle> Edd Dumbill's nick is 'edd-lap'

    <oracle> Edd Dumbill's nick is 'edd'

    <edd> oracle, picture of Dave Beckett and Uche Ogbuji

    <oracle> Picture at http://photos.example.com/pic_029.jpg

    <oracle> Caption: Greg Fitzpatrick, Dave Beckett, Libby Miller,

    Uche Ogbuji

    同样,请务必查阅参考资料以获取更多 FOAF 文档和演示。

    更深入的问题
    朋友的朋友系统提出了许多问题,其中许多问题本质上是社会和法律问题。在这里限于篇幅无法深入讨论它们,但您可能会思考其中的一些问题。

    怎样才能控制数据使之位于可信的社区内?
    为了纠正错误并提供可说明性,怎样才能跟踪和保证事实的出处?
    怎样才能分割数据以便对某些信息保密(例如,“某人 X 不信任某人 Y”)而将其它信息公之于众?
    FOAF 信息聚合者在其操作权限以内必须承担数据保护法律下的什么法律义务呢?
    如何将 FOAF 加入到诸如邮件列表、IRC/chat、web 日志、RSS 和 wikis 之类的其它已建立的及新兴的社区工具呢?
    FOAF 开发人员目前都在考虑这些问题以及其它问题。可以通过订阅 rdfweb-dev 邮件列表来参与 FOAF 讨论(参阅参考资料)。

    参考资料

    通过单击文章顶部或底部的讨论来参加本文的论坛。


    阅读同事 IBM developerWorks 专栏作家 Uche Ogbuji 关于 RDF 的其它文章:
    RDF 简介(developerWorks,2000 年 12 月)


    Thinking XML: Basic XML and RDF techniques for knowledge management, Part 1: Generate RDF using XSLT(developerWorks,2001 年 7 月)


    Thinking XML: Basic XML and RDF techniques for knowledge management, Part 2: Combining files into an RDF model, and basic RDF querying(developerWorks,2001 年 9 月)


    Thinking XML: Basic XML and RDF techniques for knowledge management, Part 3: Knowledge from semantics(developerWorks,2001 年 11 月)


    Thinking XML: Basic XML and RDF techniques for knowledge management, Part 4: Issue tracker schema(developerWorks,2002 年 2 月)


    Thinking XML: Basic XML and RDF techniques for knowledge management, Part 5: Defining RDF and DAML+OIL schemata(developerWorks,2002 年 3 月)


    探究 RDFWeb 项目,它提供到 FOAF 和其它语义 web 雾件(vaporware)活动的链接。


    加入 rdfweb-dev 邮件列表以同 FOAF 开发人员一起谈论 FOAF。


    请查看 FOAF 0.1 模式,它描述了当前记载的 FOAF 属性。(请查看其源码并寻找嵌入的 RDF 模式)。


    请在 FOAF Wiki 上发表您对 FOAF 未来发展的看法。


    查阅通过照片显示社区关系的共同描绘演示。


    研究 RSS 方面的开放目录项目(Open Directory Project)页面以获取许多有用的参考资料。


    请尝试用 RSS 来编译信息的两个聚合站点:Syndic8 和 Meerkat。


    在 developerWorks XML 技术专区上找到更多 XML 参考资料。


    获取 IBM WebSphere Studio Application Developer,它是一种容易使用的集成开发环境,用于构建、测试和部署 J2EE 应用程序,包括从 DTD 和模式生成 XML 文档。


    搞清楚怎样才能成为 XML 及相关技术方面 IBM 认证的开发人员。

    关于作者
    Edd Dumbill 是 XML.com 管理编辑兼 XML 开发人员新闻站点 XMLhack 的编辑和发行人。他是 O'Reilly 的 Programming Web Services with XML-RPC 的合作作者,他还是 Pharmalicensing 生命科学知识产权交易所的共同创始人和顾问。Edd 还是 XML 欧洲大会的主持人。可以通过 edd@xml.com 和 Edd 联系。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/4/6 23:17:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 RSS/FOAF/Dublin Core/CIM/PRISM/Gene Ontology 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/20 1:30:28

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms