新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   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
    [返回] 中文XML论坛 - 专业的XML技术讨论区W3CHINA.ORG讨论区 - Web新技术讨论『 RSS/FOAF/Dublin Core/CIM/PRISM/Gene Ontology 』 → XML 观察:使用 FOAF 支持在线社区 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 13129 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: XML 观察:使用 FOAF 支持在线社区 举报  打印  推荐  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 观察:使用 FOAF 支持在线社区

    XML 观察:使用 FOAF 支持在线社区   


      

    词汇表“朋友的朋友”如何处理可追究性和保密问题

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

    在 Edd 的前一篇专栏文章中,他介绍了“朋友的朋友”(Friend-of-a-Friend (FOAF))。FOAF 是一种 XML/RDF 词汇表,它以计算机可读的形式描述您通常可能放在主 Web 页面上的个人信息之类的信息。在本专栏文章中,他更深入地研究了有关当支持在线社区时使 FOAF 词汇表变得有用的一些问题。


    在结束最近的专栏文章时,我提出了在使用 FOAF 应用程序时出现的一系列问题。在本专栏中,我对有关可追究性和保密问题给出了一些回答建议。虽然我的建议不一定是唯一的解决方案,但我强调了通过在线社区测试 FOAF 软件代理而开发和证实的技术。

    链接
    在我较早的 FOAF 文章中,我略微谈到了当聚集 FOAF 描述时可能发生的事情,并演示了将社区知识集中在一个地方可以产生的价值。但是,我没有讨论有关如何发现这一信息的主题。

    最简单的方法是让参与者通过中央服务注册其 FOAF 文件的 URL,然后中央服务执行聚集。不幸的是,这有点儿弄巧成拙。Web 基础结构的一个主要优点是其发布分散化的能力。当您使用中央资源来将 FOAF 文件连接在一起时,您还可以放弃 Web 而只使用单个关系数据库。

    与此相反,我采用 Web 的链接模型。FOAF 中使用的特殊机制是 RDF 模式的 seeAlso 特性,它可以提示是否存在相关的机器可读取的信息。清单 1 显示了 FOAF 对我的描述,它包含至我的熟人的链接。

    清单 1. 使用 rdfs:seeAlso 来链接 FOAF 描述
    <rdf:RDF
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
            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:knows>
        <foaf:Person>
            <foaf:mbox rdf:resource="mailto:jdoe@example.org" />
            <rdfs:seeAlso rdf:resource="http://example.org/jdoe/foaf.rdf" />
        </foaf:Person>
      </foaf:knows>
    </foaf:Person>
    </rdf:RDF>

    因而,从 Web 搜索 FOAF 文件的软件代理就可以遵循一个文档到另一个文档的链接,累积有关社区的更多信息。

    seeAlso 链接也可作为将 FOAF 描述分成多个文件的有用方法。清单 2 显示了这一方法的示例。

    清单 2. 使用 rdfs:seeAlso 协助管理大型的描述
    <rdf:RDF
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
            xmlns:foaf="http://xmlns.com/foaf/0.1/">
    <foaf:Person>
      <foaf:name>Edd Dumbill</foaf:name>
      <foaf:mbox rdf:resource="mailto:edd@xml.com" />
      <!-- personal details here -->
      <rdfs:seeAlso rdf:resource="http://example.org/edd/personal.rdf" />
      <!-- photo album metadata here -->
      <rdfs:seeAlso rdf:resource="http://example.org/edd/photos.rdf" />
      <!-- descriptions of friends here -->
      <rdfs:seeAlso rdf:resource="http://example.org/edd/friends.rdf" />
    </foaf:Person>
    </rdf:RDF>

    使用基本的 seeAlso 链接,您确实存在一些风险,即软件代理可能花很长时间搜索它不感兴趣的描述;例如,旨在发现发布列表的代理对我所拥有的有关假日照片的元数据栈不感兴趣。幸运的是,您可以使用 RDF 来提供有关已链接资源的更多信息。清单 3 显示了如何表示发布列表。

    清单 3. 将更多信息添加到 rdfs:seeAlso 链接
    <rdf:RDF
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
            xmlns:foaf="http://xmlns.com/foaf/0.1/"
            xmlns:bib="http://example.org/biblio/0.1/">
    <foaf:Person>
      <foaf:name>Edd Dumbill</foaf:name>
      <foaf:mbox rdf:resource="mailto:edd@xml.com" />
      <!-- publication list -->
      <rdfs:seeAlso>
        <foaf:BiblioRefs rdf:about="http://example.org/edd/biblio.rdf" />
      </rdfs:seeAlso>
    </foaf:Person>
    </rdf:RDF>

    当您使用该机制时,软件代理可以标识他们感兴趣的数据的特定区域。

    跟踪谁说了什么
    每个现有的社区都基于某种程度的共享信任。如果这种信任消失或被滥用,那么社区会受到损害,并且甚至可能会崩溃。在线社区说明虽然人们可以随意假想虚构的人物,但还是要稳固地适当保持人与人之间关系的一般规则;例如,如果您开始发布有害的传闻,那么也会使社区受到损害。

    如果 FOAF 要支持在线社区,那么每一段信息的起源必需是可跟踪的。如果我声明我的名字是“Edd Dumbill”,由此该声明的起源被认为是我,那么它可以证明的事实比其他人所宣称的更可信。(在其它情况下,您可能不会认为我是有关我本人信息的可信源。能够跟踪谁说了什么是构建可信系统的必要条件,但只有这一条件,通常还不够。)

    因为示例中的所有 FOAF 文件都是通过 Web 检索的,所以用一个文件的源 URL 来注释在文件中所做的所有声明很有意义。一旦有了 URL,您就可以用找到的有关它的任何其它有用信息(例如,其作者)来注释 URL。

    对于较大范围,起源跟踪的实际实现取决于您用来处理 RDF 的底层工具箱。在我的实验中,我使用了 Redland 工具箱(请参阅参考资料),它本身没有起源跟踪能力(尽管它们处于开发阶段)。我遵循了 developerWorks RDF 专家 Uche Ogbuji 的建议,将起源跟踪作为一个层,放在 Redland 的 RDF 存储之上。(如果您对实现细节不感兴趣,可以跳到归结于所有权。)

    在该机制中,我改写了引入的 RDF 语句来添加其源。例如,http://example.org/edd/foaf.rdf 上的 FOAF 文件可能生成表 1 中所示的语句。

    表 1. 示例语句

    主语 谓语 宾语
    _Person1 http://xmlns.com/foaf/0.1/mbox mailto:edd@xml.com

    如果我使用已创造的特性 http://example.org/prov/pred 和 http://example.org/prov/source 分别表示原始谓语和源 URL,那么我可以改写该语句,如表 2 中所示。

    表 2. 使用起源跟踪进行改写的语句

    主语 谓语 宾语
    _Person1 _DynamicPred1 mailto:edd@xml.com
    _DynamicPred1 http://example.org/prov/pred http://xmlns.com/foaf/0.1/mbox
    _DynamicPred1 http://example.org/prov/source http://example.org/edd/foaf.rdf

    您可以使用该机制跟踪每条语句找到源。另注:这主要增加了与聚集所有数据相关的存储量和计算开销:每条语句都变成三条语句,对谓语的每次查询都必须经过间接层。由于这个原因,可以优先选用本身支持起源跟踪的工具箱。

    归结于所有权
    即使使用适当的源跟踪,我仍无法正确地回答“谁讲了什么”这一问题。因此,我需要将作者与每个文档关联。使用 RDF 和 Dublin Core 词汇表,我可以通过将清单 4 中的代码添加到我在 http://example.org/edd/foaf.rdf 上的文件来完成这一任务。注:rdf:about="" 表示此文档。

    清单 4. 使用 Dublin Core 表示文档的原创作者
    <rdf:Description rdf:about="">
      <dc:creator>
        <foaf:Person>
          <foaf:mbox rdf:resource="mailto:edd@xml.com" />
        </foaf:Person>
      </dc:creator>
    </rdf:Description>

    使用这个方法的困难之处就是它不作任何保证。因为 RDF 是分散的描述框架,所以其他人可能对应该是可信的 http://example.org/edd/foaf.rdf 做出一个互相矛盾的原创作者声明。一个解决方案可能是仅相信那些包含在正讨论的文档中的那些原创作者声明。这是有限制的,因为它需要对文档的有关声明是怎么产生的进行改动,这常常是不合需要的,而且如果文档格式不是 RDF,则不可能发生改动。

    与此相反,FOAF 工具使用数字签名来使电子邮件地址与文档关联。将 OpenPGP 与新的名称空间 http://xmlns.com/wot/0.1/ 一起使用明确地表示信任 Web(Web of trust) 这一概念。清单 5 显示了如何使数字签名与文档关联。尤其是,它在第一个描述中说明了签名与文档本身的关联,然后作为 seeAlso 链接的一部分,为该链接文档指定签名。这样,就可以在相关文档的内部或外部表示原创作者信息。

    清单 5:将数字签名与 FOAF 文档关联
    <rdf:RDF
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
        xmlns:foaf="http://xmlns.com/foaf/0.1/"
        xmlns:wot="http://xmlns.com/wot/0.1/">

    <rdf:Description rdf:about="">
        <wot:assurance rdf:resource="foaf.rdf.asc" />
    </rdf:Description>

    <foaf:Person>
      <foaf:name>Edd Dumbill</foaf:name>
      <foaf:mbox rdf:resource="mailto:edd@xml.com" />
      <!-- personal, PGP signed, details here -->
      <rdfs:seeAlso>
        <rdf:Description rdf:about="http://example.org/edd/personal.rdf">
           <wot:assurance rdf:resource="http://example.org/edd/personal.rdf.asc" />
        </rdf:Description>
      </rdfs:seeAlso>
    </rdf:Person>

    </rdf:RDF>

    数字签名的实际意义应该被理解为:“声称有某某电子邮件地址的人证明了他有这个文件,并且此后此文件未被更改过。”在我的实验中,我假设证明携带签名者的语义,以此认可所包含的 FOAF 文件中的语句。如果 foaf.rdf.asc 中的签名(如清单 5 中引用的那样)检验通过,那么处理工具可以隐式地添加清单 4 中所包含的类似描述。

    关于数字签名是否真正属于某个特定的人的问题很方便地转交给 PGP 本身用于建立信任的机制。讨论 PGP 的信任 Web 超出了本文的范围,但您可以在参考资料中查找某些参考资料。

    起源跟踪的使用
    现在,让我们看一下所讨论的机制的使用。研究 FOAF 时,我构建了软件代理 FOAFBot,它聚集并回答有关 FOAF 信息的查询。现在,可以公开获得该代码(请参阅参考资料)。

    清单 6 显示了包括起源跟踪的样本会话。

    清单 6:示例 FOAFBot 会话
    <edd> edd@xml.com's name
    <foafbot> edd@xml.com's name is 'Edd Dumbill', according to Dave Beckett,
    Edd Dumbill, Jo Walsh, Kip Hampton, Matt Biddulph, Dan Brickley; and
    anonymous sources Anon47

    <edd> edd's email
    <foafbot> edd's email is '[mailto:edd@usefulinc.com]', according to Dave
    Beckett, Edd Dumbill, Kip Hampton, Matt Biddulph; and anonymous sources
    Anon14, Anon2, Anon43, Anon47, Anon92, Anon93
    <foafbot> edd's email is '[mailto:edd@xml.com]', according to Edd Dumbill;
    and anonymous sources Anon21
    <foafbot> edd's email is '[mailto:edd@xmlhack.com]', according to Edd
    Dumbill, Jo Walsh, Dan Brickley

    在第一个查询中,您可以看到声明我的名字是“Edd Dumbill”的所有人的列表。您还可以看到有一个源没有以数字方式对其信息进行签名,所以表示为 Anon47。第二个查询显示了多条关于我的电子邮件地址以及谁产生了它们的声明。

    因此,要信任谁的问题留给用户自己判断。其它地方存在大量关于使信任等级自动化的研究:FOAFBot 没有试图解决这个问题。

    将 FOAF 限制在信任社区
    Web 是一个非常公用的地方,出于许多好的动机,您不想让每个人都可以使用信息。例如,我很高兴能让我的朋友知道我的手机号码,但不希望电话销售员知道。许多有主页的人都是通过将密码告诉其朋友来解决这一问题的。然而,在许多情况下,人们选择根本不发布信息。Google 和其它 Web Spider 程序在查找您忘记是公共可访问的信息方面令人难以置信地有效。

    对于 FOAF,也应用同样的原理。虽然我很高兴每个人的 FOAF Spider 程序都能获取我的名字和主页(很公开的信息),但我愿意将某些信息限制于特定社区。可以通过扩展 OpenPGP 和 seeAlso 链接的使用来完成。

    有了 OpenPGP,我可以通过使用公钥加密内容。只能由代理用相应的私钥解密该内容。作为示例,我为正在 OpenProjects IRC 网络 #foaf 讨论通道上运行的 FOAFBot 创建了公钥,并决定只有该通道的成员才能使用某些信息。我将该信息放在 foaf-private.rdf 文件中,签名并将它加密成相应的公钥(生成 foaf-private.rdf.asc 文件),然后我的 FOAF 文件链接到该文件,如清单 7 中所示。然后,仅发布 ASCII 编码的加密文件,至专用数据的未加密源保留在我的专用机器上。

    清单 7:显示加密 FOAF 文件链接的代码片段
      <!-- private info for authorized agents only -->
      <rdfs:seeAlso>
          <foaf:Document rdf:about="http://example.org/edd/foaf-private.rdf.asc">
            <!-- encrypted for the #foaf community -->
            <wot:encryptedTo>
              <wot:PubKey wot:hex_id="6C7F734E" />
            </wot:encryptedTo>
          </foaf:Document>
      </rdfs:seeAlso>

    清单 7 中除了使用了 seeAlso,还使用信任 Web 名称空间上的更多概念来表示使用的公钥。搜索代理得到没有为它们加密某些 FOAF 文件的通知,于是代理可以忽略那些文件。

    隐藏电子邮件地址
    当您发布任何含有您电子邮件地址的信息时,一个主要问题是多余的商业电子邮件或垃圾邮件。虽然可以使用日益有效的方法来检测和丢弃垃圾邮件,但许多人还是通过不在 Web 上发布其电子邮件地址来试图避免接收垃圾邮件。

    这似乎对 FOAF 词汇表提出了难题。如果您回想起有关该主题的上一篇文章,假定电子邮件地址是一个明确特性 — 用于合并来自不同源的描述。没有它,FOAF 聚集就不能工作。幸运的是,FOAF 的创建者提出了一个替代项 mbox_sha1sum 特性。该特性包含邮箱 URI 的 ASCII 编码的 SHA1 散列;该编码是单向映射并且不能很一般地进行逆向工程以给出原始的电子邮件地址。清单 8 显示了如何在 FOAF 文件中使用它来代替 mbox 特性。

    清单 8:使用 mbox_sha1sum 防止获得电子邮件地址
    <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_sha1sum>fd991c34194a4428e70cdcc8068deaa6f35464fe</foaf:mbox_sha1sum>
    </foaf:Person>
    </rdf:RDF>

    为了合并 FOAF 描述以继续工作,处理代理必须转而根据 mbox_sha1sum 特性合并,并当它们仅知道 mbox 特性的情况时动态地计算 FOAF 描述的总和。在您对其他人的描述中,引用他们的 mbox_sha1sum 特性而不是他们的电子邮件地址,对于您来说或许是有礼貌的。如果其中一个人想使她的电子邮件地址变得可用,她可以在她自己的 FOAF 文件中引用它,或许还可以象上面描述的那样对它进行加密。

    结束语
    FOAF 词汇表提供了一种管理社区内信息的有用方法。关于其他人的信息常常是最令人感兴趣的一类数据,而且 FOAF 实现了分散、机器可读和个人描述等需求。但在其自己的应用领域之外,FOAF 提供了用于研究有关构建语义 Web 的概念(链接、信任和起源的概念)的有用试验台。

    参考资料

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


    请阅读作者的涉及 FOAF 的上一篇专栏文章 Finding friends with XML and RDF(developerWorks,2002 年 6 月)。您可以从概要页访问 Edd Dumbill 的所有 XML Watch 专栏文章。


    研究 FOAFBot,它是一种实验性的 IRC 社区支持代理。


    在作者的 FOAF 页上查找有用的 FOAF 提示与技巧。


    查看 FOAF 主页,它是 RDFWeb 站点的一部分。


    请尝试 The GNU Privacy Guard,它是一种流行和免费的 OpenPGP 实现。


    用 Leigh Dodds 的 FOAF-a-matic 页快速创建您自己的 FOAF 文件。


    请查阅 Dan Brickley 的 Ruby 程序 Scutter,它采用 seeAlso 链接并聚集了 FOAF 和 RDF 内容。


    请仔细研究 Redland 工具箱。


    请阅读 IBM developerWorks 专栏作家 Uche Ogbuji 关于 RDF 的其它文章:
    RDF 简介(developerWorks,2000 年 12 月)
    Thinking XML: 知识管理的基本 XML 和 RDF 技术 第一部分:使用 XSLT 生成 RDF (developerWorks,2001 年 7 月)
    Thinking XML:知识管理的基本 XML 和 RDF 技术 第二部分:将文件合并到 RDF 模型和基本的 RDF 查询(developerWorks,2001 年 9 月)
    Thinking XML: Thinking XML:知识管理的基本 XML 和 RDF 技术 第三部分: 语义知识(developerWorks,2001 年 11 月)
    Thinking XML: Thinking XML:知识管理的基本 XML 和 RDF 技术 第四部分:问题跟踪程序模式(developerWorks,2002 年 2 月)
    Thinking XML: Thinking XML:知识管理的基本 XML 和 RDF 技术 P第五部分:定义 RDF 和 DAML+OIL 图示(developerWorks,2002 年 3 月)


    请在 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:18: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/5/6 7:04:10

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

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