本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

XML ウォッチ: XML と RDF による友達の検索

Friend-of-a-Friend 用語はオンライン・コミュニティーの管理を容易にします

Edd Dumbill (edd@xml.com), Editor and publisher, xmlhack.com
Edd Dumbill氏はXML.com の編集長であり、XMLデベロッパーのためのニュース・サイトXMLhack の編集者兼発行者でもあります。Programming Web Services with XML-RPC (O'Reilly) の著者の1人であり、生命科学の知的財産を交換するPharmalicensing の共同設立者兼アドバイザーです。EddはXML Europe コンファレンスのプログラム司会者でもあります。

概要: Edd Dumbill氏は、Friend-of-a-Friend (FOAF) と呼ばれるXMLおよびRDFアプリケーションを開発しています。FOAFは、個人情報および関連性を表現し、オンライン・コミュニティーをサポートする情報システムを作成するための有効なビルディング・ブロックです。コード・サンプルを使って基本機能を実演します。

このシリーズの他の記事を見る

日付:  2002年 6月 01日
レベル:  初級 この記事の原文:  英語
アクティビティー: 2893 ビュー
お気軽にご意見・ご感想をお寄せください: 


重要なのは、あなたが何を知っているかではなく、誰を知っているかということです。Webの登場以来、自己表現について多くの検討が行われてきました。多くの人がWebに最初に取り掛かる際に行ったことは、自分でホーム・ページを構築することでした。検索エンジンを使用してみると、自分と同じ興味を持つ人たちを素早く見つけることができました。確かにこのテクノロジーは人々にとって興味深いことでしたが、それにも増して興味深かったのは、世間の人々そのものでした。

今流行の個人用Webパブリッシングにおける最近のエピソードの1つに、ウェブログ (weblog) があります。これは一種の高速パブリッシングで、しばしば、非常に個人的でインフォーマルなトーンを帯びます。ウェブロガーたちは互いに引き合いに出すのを好み、複数のWebサイトにまたがるダイアログが作成されます。この高速形式のパブリッシングを支えるテクノロジーの1つがRich Site Summary (略してRSS) です(参考文献を参照)。これは、サイトのコンテンツ項目に関するメタデータが入っているXML文書です。

RSSは、コンテンツの断片を集約し、順序付けし、検索するための予測可能な方法を提供します。Syndic8やMeerkat (参考文献を参照) などのサイトは、ユーザーの関心のあるトピックまたは人物について、誰が何と言っているかを記録しています。RSSも比較的単純にできていて、しばしば、XMLチュートリアル資料の例示に使用されます。このアプリケーションの目玉は、ユーザーが自分のコンテンツをより大きなWebに接続して、他のユーザーがより簡単に自分を見つけ出せるようにしてくれることです。

しかし、この記事ではRSSについては述べません。これに関する文書は、ほかにも数多く書かれています。この記事では、ある程度の類似性を持つ新規プロジェクトFriend-of-a-Friend (FOAF) について検討します。このプロジェクトでは、Webの社会的ネットワーキング局面をさらに展開して行くつもりです。

どこもかしこもコミュニティー

多くのコミュニティーは、企業から専門家組織を経由して社会集団に至るまで、インターネットから生まれました。FOAF用語 (Dan BrickleyおよびLibby Miller両氏による編さん) は、コミュニティー・メンバーについての基本表現を提供します。つまり、ユーザーやその基本特性 (名前、Eメール・アドレスなど) を記述します。

FOAFは単なるRDF用語に過ぎません。その代表的な使用法はRSSの使用法と似ています。つまり、1つまたは複数のFOAFファイルをWebサーバー上に作成し、URLを共用して、そのファイルの情報をソフトウェアで使用できるようにします。ユーザー独自のWebページの作成と同様に、FOAFデータの作成は分散化されますので、ユーザーによる制御が可能です。これらのファイルを使用するアプリケーションの例としては、コミュニティー・ディレクトリーがありますが、そこではメンバーが自分自身のレコードを保守します。しかし、RSSの場合と同じように、FOAFの本当に興味深い部分が見られるのは、データの集約時であり、その後で、それらのデータを検討し、相互にリンクすることができます。

FOAFは、コミュニティーを管理するための重要なツールになる可能性を秘めています。簡単なディレクトリー・サービスを提供するだけでなく、FOAFの情報をさまざまな方法で活用することができます。例えば、次のとおりです。

  • 信頼できる同僚からのメールの優先度を高めて、Eメールのフィルター操作を容易にする。
  • コミュニティーへの新規登録を援助する。
  • 自分と同じ興味を持つユーザーを見つける。

ここから、FOAFの基本機能を説明し、現在の実施状況と将来の考慮点についていくつかの指針を示します。では、FOAFが狙いとする中心問題の検討に入りましょう。ここでは、ユーザーを記述するために、どのようにして彼らを識別するかについて検討します。


識別性の表現方法

実世界の事物 (例えば、ユーザー) に関するデータをコンピューター・システムに入力する際、それぞれの事物の固有名をどのように作成するかという困難に直面します。人物の場合、その人の名前だけでは、その人と他の人を一意的に識別するのに十分でないことは明白です。多くの閉じたシステムでは、人物には、アプリケーションに特有なIDを割り当てられがちです。この傾向はWebで見られます。つまり、メーリング・リストやWebサイトといったさまざまなサービスに、ユーザー名/パスワードのペアを使用することがあります。これらの別個の閉じたシステム間で相互運用を行わない限り、問題は生じません (ただし、記憶できないほど多くのIDがあることは別ですが)。

いくつかのサービスにまたがって識別性を統一したい場合は、難しい問題が生じます。識別性の割り当てを制御するための集中体系を、誰かが作成しなければなりません。最近急速な成長を遂げた体系の1つが、MicrosoftのPassportです。ただし、この集中化は、いくつかの理由でリスクがあります。その理由の1つとして、特に、ユーザーによるサービスへのアクセス、および、おそらくはユーザーのプライベート・データが、第三者によって完全制御されるという点が挙げられます。

このため、FOAFシステム (つまり、誰でも自由にデータを作成して使用でき、さらに1人当たり1つの名前のみが与えられる) を考える場合は、分散した命名ストラテジーが必要になります。Webには、URIのような非常に良くできた命名ストラテジーがあります。人物を命名する場合、みなさん、mailto: (Eメール・アドレス) が簡単なURI使用方式だと思われるかもしれません。しかし、物事は考えるほど簡単ではありません。単純なアプローチでは、開発者は、例えば以下のようなコードを作成するでしょう。

mailto:edd@xml.com lives in the UK

ちょっと考えただけで、このコードがナンセンスであることが分かります。本当のところは、次のようになります。

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

人物とそのEメール・アドレスが同じものでないことは明らかです。そこで、実際上、人物のEメール・アドレスをグローバル名として使用することはできません。さらに、人物が複数のEメール・アドレスを持っていて、それぞれのアドレスが別々の目的に使用されることもあります。

しかし、Eメール・アドレスを使って人物を識別するという方針に欠陥はありません。一般に、Eメール・メッセージをある人物のアドレスに宛てて送信する場合、そのメッセージは、その特定の人物に届くはずです。これは先程の単純なアプローチで欠けている点でもありますが、人物のグローバル名を作成することはできないとしても、「この人のEメール・アドレスはedd@xml.comです」という記述が含まれる人物に関する記述は、すべて同じ人物を指すということを当然想定できるはずです。

そこで、正しくは次のようになります。

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

FOAFはこのように機能します。特定の個々人に関する情報を組み合わせる際、「Eメール・アドレスはあいまいでない特性 である」という前提に立ちます。つまり、1人の人物のみが1つのメールボックスを所有しています。


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という名前の人がいて、Eメール・アドレスは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. 著者についての記述に、表1の特性をさらにいくつか追加したRDFの抜粋
                
<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を提供するとしたら、それらのURLへのリンクを適当なコミュニティー・ディレクトリーに組み込むことができます。


私を知り、あなたを知る

私がまだ検討していない特性が1つあります。それはfoaf:knows 特性です。この特性は2人の人物をお互いにリンクするために使用され、基本的には、ある種の個人的な知り合いといった意味合いを持っています。このプロパティーを使用する場合は、まず、ほかの人たちを識別する必要があります。私が識別性の表現方法で結論しているように、FOAFは、ほかの人たちを識別するために、それらの人たちの特性を記述します。このため、プロセッサーは識別特性を使用して、誰を参照しているのかを割り出します。リスト3は、私がSimon St.Laurentを知っているということを表す方法を示しています。


リスト3. 2人の人物が知り合いであることを示す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のホーム・ページについて何も言うことはありませんが、もしも彼がこの情報を提供した場合は、プログラムにより、共用のfoaf:mbox 特性に基づいてこれらの情報をお互いにリンクさせることができます。


FOAF記述のマージ

FOAF用語を使用した場合に本当の力が発揮されるのは、いくつかのFOAFファイルをマージしたときです。この用語の場合、自分自身についての記述だけしか作成できないという制限はまったくありません。例えば、私は、ほかの何人かの人物についてのFOAF記述を作成できました。小さな例を示しましょう。まず、私が作成したファイルを示しているリスト4を見てください。


リスト4. 著者と2人の同僚についての簡単な記述
                
<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. 2人の人物の描画を示す記述
                
<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>

人間の目には、これらの2つのファイルを一緒にインポートすることの意味は非常に明白です。すでに私が記述した情報の他に、以前は Simon St.Laurent と Edd Dumbill の 2 人の写真をhttp://example.org/photos/edd+simon.jpgで見ることができました。

コンピューターにそれを理解させるには、これらの2つのデータ・ファイルをマージする必要があります。つまり、コンピューターは、「人物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 では、2人の人物が写真に一緒に写っているものとして記述されています。このデータを使用して、有用かつ面白い結果を入手することができます。この共同描写デモ (参考文献を参照)では、6分解度スタイル練習での共同描写を通して、各人物間の写真の経路を描くことができます。
  • オンライン・チャット: 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の資料やデモンストレーションの詳細については、参考文献を参照してください。


その他の問題

Friend-of-a-Friendシステムは多くの問題を投げかけます。そのかなりの数が、社会問題または法的問題にかかわっています。ここでそれらの問題を詳細に検討する余裕はありませんが、そのうちのいくつかの問題については、読者の皆さんに考えていただきたいと思います。

  • 信頼の置けるコミュニティーから外部にデータを漏えいさせないようにするために、データをどのようにコントロールしますか?
  • エラーを訂正し、説明責任を果たせるようにするために、事実の出所をどのように追跡し、保証しますか?
  • 世間に公開する情報と、非公開にしておく情報 (例えば、「人物Xが人物Yを信用していない」など) がある場合に、データの区分化をどのように行いますか?
  • オペレーション管轄内でのデータ保護法のもとで、FOAF情報の集合に、どのような法的義務がありますか?
  • メーリング・リスト、IRC/chat、ウェブログ、RSS、wikisなど、すでに確立されたコミュニティー・ツールや新たに生まれたコミュニティー・ツールに、FOAFをどのように結合しますか?

こういった課題について、FOAF開発者たちは検討を重ねています。FOAFのディスカッションに参加するには、rdfweb-devメーリング・リストに加入してください(参考文献を参照)。


参考文献

著者について

Edd Dumbill氏はXML.com の編集長であり、XMLデベロッパーのためのニュース・サイトXMLhack の編集者兼発行者でもあります。Programming Web Services with XML-RPC (O'Reilly) の著者の1人であり、生命科学の知的財産を交換するPharmalicensing の共同設立者兼アドバイザーです。EddはXML Europe コンファレンスのプログラム司会者でもあります。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=239854
ArticleTitle=XML ウォッチ: XML と RDF による友達の検索
publish-date=06012002
author1-email=edd@xml.com
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。