狠狠撸

狠狠撸Share a Scribd company logo
RDF?FOAF


 2007/03/15 ウノウ株式会社 駒形真幸 <komagata@unoh.net>
贵翱础贵とは?

    Friend Of A Friend
●




 プロフィールや知り合いなど、人に関する情報
●

 を表すためのRDFの語彙の一つ
                           知り合いA




                           知り合いB
            自分
搁顿贵とは?

    Resource Description Framework
●




 WWW上のリソースとリソースの関係を表現す
●

 るためのモデル

 WWWの提案者、ティム?バーナーズ=リーが
●

 提唱した。
搁顿贵とは?(2)

    身近なところではRSS1.0もRDF(2.0は違う)
●


<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF
 xmlns="http://purl.org/rss/1.0/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xml:lang="ja">
 <channel rdf:about="http://d.hatena.ne.jp/m-komagata/rss">
   <title>m-komagataの日記</title>
   <link>http://d.hatena.ne.jp/m-komagata/</link>
   <description>m-komagataの日記</description>
   <dc:date>2006-11-07T20:35:16+09:00</dc:date>
   <items>
(後略)
何故搁顿贵?

                どんな関係?



                         文書
    文書

          リンク



 HTMLのリンクは意味が付いてない。
●

 (どういう関係を持ってるのかわからない)
何故搁顿贵?(2)


               要約
                        文章
       文章




    RDFでは関係を表現できる
●




 WWWは元々、関係の情報付きの意味ネットワーク
●

 (セマンティック?ウェブ)として設計された
搁顿贵の基本要素

    リソース
●

    Web上で識別できるもの全て。(URI参照で表現されます)

    ステートメント(文)
●

  リソースの主語、述語、目的語の3つの組み合わせ
 (トリプル)

    グラフ
●

    ステートメントの集合

 ※RDFのグラフは様々な構文(XMLやN-Triplesなど)で表現できる
搁顿贵の基本概念
    ステートメント

                         foaf:weblog
        urn:komagata                   http://p0t.jp/mt/


           主語              述語              目的語


    リソースを主語、述語、目的語としてステートメントを作れる
●



    目的語は別のステートメントの主語になれる。
●
搁顿贵の基本概念(2)
    ステートメント
                                            リテラル
                           dc:title
       http://p0t.jp/mt/              p0t


           主語               述語        目的語


 目的語はURI参照だけでなく、文字列自身(リテラル)とする
●

 ことが可能
搁顿贵の基本概念(3)

         aaa
     A               bbb   C
                                   aaa
               B               A              bbb   C
                                         B

               eee
         B
                                             eee
                                                    D
                     D



    世界のどこで記述されたトリプルでも同じURIを持っていれ
●

    ばひとつのグラフに併合できる。

 意味を機械が理解できるRDFで情報を記述することで
●

 Web全体を分散型データベースとして扱おうという野望。
<aaa>
                          <bbb>
    aaa
A                          <ccc>
              bbb   C
                           </ccc>
          B
                          </bbb>
                         </aaa>



              ここまでがRDFのモデルの話。

    ここからは具体的なXMLでの記述方法の話です。
搁顿贵トリプルの齿惭尝表现
                        foaf:weblog
       urn:komagata                   http://p0t.jp/mt/




<rdf:Description>       --- 主語ノード
  <foaf:weblog>         --- 述語ノード
     <rdf:Description> --- 目的語ノード
     </rdf:Description>
  </foaf:weblog>
</rdf:Description>

    XML表現では、主語、述語はrdf:Descriptionで記述します
●




    述語はその名前の要素として記述します
●
搁顿贵トリプルの齿惭尝表现(2)
                            foaf:weblog
       urn:komagata                            http://p0t.jp/mt/




<rdf:Description rdf:about=”urn:komagata”>
  <foaf:weblog>
   <rdf:Description rdf:about=”http://p0t.jp/mt/”>
   </rdf:Description>
  </foaf:weblog>
</rdf:Description>

    主語、目的語の参照先はrdf:about要素で記述します
●
搁顿贵トリプルの齿惭尝表现(3)
                           foaf:weblog
       urn:komagata                            http://p0t.jp/mt/




<rdf:Description rdf:about=”urn:komagata”>
  <foaf:weblog rdf:resource=”http://p0t.jp/mt/” />
</rdf:Description>




    子ノードを持たない要素はrdf:resource属性を使って省略表
●

    記できます
搁顿贵トリプルの齿惭尝表现(4)
                           dc:title
       http://p0t.jp/mt/                     p0t




<rdf:Description rdf:about=”urn:komagata”>
  <dc:title>p0t</dc:title>
</rdf:Description>




    目的語がリテラルの場合はrdf:Description要素を省略して
●

    述語ノードのプロパティとして記述できます
搁顿贵トリプルの齿惭尝表现(5)
                                                     dc:title
                   foaf:weblog
                                 http://p0t.jp/mt/              p0t
    urn:komagata


<rdf:RDF>
  <rdf:Description rdf:about=”urn:komagata”>
     <foaf:weblog>
       <rdf:Description rdf:about=”http://p0t.jp/mt/”>
         <dc:title>p0t</dc:title>
       </rdf:Description>
     </foaf:weblog>
  </rdf:Description>
</rdf:RDF>

  複数のトリプルもこれまでの組み合わせで表現できます。
●

● RDF文章としてはrdf:RDFノードをrootノードにします
FOAFの語彙
  FOAFの名前空間は “http://xmlns.com/foaf/0.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 rdf:nodeID="me">
     <foaf:nick>komagata</foaf:nick>
     <foaf:bio:olb>働いたら負けだと思っている</foaf:bio:olb>
     <foaf:weblog rdf:resource="http://komagata.vox.com/"/>
     <foaf:knows>
       <foaf:Person>
         <foaf:nick>kawadu</foaf:nick>
(後略)
FOAFの語彙(2)
主な述語(主語はfoaf:Personなど)
贵翱础贵の语汇(3)
    foaf:knowsで知人を表現できるのが面白いところ
●




<foaf:knows>
  <foaf:Person>
    <foaf:nick>kawadu</foaf:nick>
    <foaf:weblog rdf:resource="http://kawadu.vox.com/" />
  </foaf:Person>
</foaf:knows>
<foaf:knows>
  <foaf:Person>
    <foaf:nick>yoshida</foaf:nick>
    <foaf:weblog rdf:resource="http://yoshida.vox.com/" />
  </foaf:Person>
</foaf:knows>
RDFパーサーいろいろ
Redland
●

CのRDFパーサー。Java, Perl, PHP, Python, Rubyなど
色んな言語向けのBindingがある。

 RAP – RDF API for PHP
●

 Pure PHPのRDFパーサー。画像でRDFグラフを出力したり
 機能がやたらある。

 Hercules
●

 JavascriptのObject/RDFマッパー。E4Xっぽい手軽さで
 SPARQL(後述)クエリを生成してObjectにマッピングしてく
 れる。
RAPでVOXのFOAFを検索
define('RDFAPI_INCLUDE_DIR', 'lib/rdfapi-php/api/');
include_once RDFAPI_INCLUDE_DIR.'RdfAPI.php';
include_once RDFAPI_INCLUDE_DIR.'syntax/RdfParser.php';
include_once RDFAPI_INCLUDE_DIR.'vocabulary/FOAF_C.php';

$uri = 'http://komagata.vox.com/profile/foaf.rdf';

$model = ModelFactory::getDefaultModel();
$model->load($uri);
$bio = new Resource('http://purl.org/vocab/bio/0.1/olb');
$result = $model->find(null, $bio, null); // Subject, Predicate, Object
print_r($result->triples);


 Model#findメソッドに主語、述語、目的語のResourceを
●

 与えて検索する(返り値はStatement)
搁顿贵のパース
    FOAFをパースしようと思っていきなり手を出すと、何故
●

    こんなAPIになってるのかさっぱり理解できない。

    RDFのモデルを知ってると非常にわかりやすい。
●




 XMLのパースじゃなくて、RDFグラフに対する検索なので
●

 柔軟な検索が可能。

 もっと本格的な問い合わせはSPARQLというRDF問い合わ
●

せ言語を使う。
 (RDBに対するSQLやODBに対するOQLみたいなもの)
FOAFのこれまで
 (2004年頃)RSSみたいに流行るかと期待されたが流行ら
●

 なかった

 ブログシステムがRSSを吐いてくれたようにFOAFを
●

 吐いてくれるシステムがあまりなかった。

 FOAFはSNSに最適かと思われたが、SNSが閉鎖的な
●

 システムに終始し、まったく対応しなかった。(がっかり???)

 (上記理由で)FOAFファイル自体が少ないためにクライアン
●

 トを作ってもあまり役に立たなかった。
FOAFの現在~
 VOXなど、権限管理機能を高めつつ、公開するところは
●

 公開してくようなSNSが増え始めた。

    API公開が流行
●




 スクレイピング技術普及で第三者がメタデータを勝手に作っ
●

 て配布したりしやすくなった

    あとは便利 or 面白いクライアントがあれば???
●
FOAF Client
    Widget(ブログパーツ)はどうだろうか。
●




 丁度Offline/Online問わないWidgetの標準仕様策定が
●

 進んでいる。(Netbives Universal Widget API)

    小粒度のコンテンツ形態として普及するかもしれない
●




 FOAF Browser Widgetを作ってみました。
●

 VOX、はてなダイアリ、TypeKey、MixiのFOAFを
 それぞれ表示しています。(Mixi FOAFは自前)

 一端JSONPに変換しているのでどこにでも張れます。
FOAF Widget
FOAF Widget on ジオシティーズ
参考資料
 セマンティック?ウェブのためのRDF/OWL 入門
●

 http://www.amazon.co.jp/exec/obidos/ASIN/4627829310/p0t-
22/ref=nosim

    Redland
●

    http://librdf.org/

    RAP – RDF API fo PHP
●

    http://sites.wiwiss.fu-berlin.de/suhl/bizer/rdfapi/

    Hercules
●

    http://www.arielworks.net/works/codeyard/hercules

    Netvibes UWA
●

    http://dev.netvibes.com/

More Related Content

RDF and FOAF

  • 1. RDF?FOAF 2007/03/15 ウノウ株式会社 駒形真幸 <komagata@unoh.net>
  • 2. 贵翱础贵とは? Friend Of A Friend ● プロフィールや知り合いなど、人に関する情報 ●  を表すためのRDFの語彙の一つ 知り合いA 知り合いB 自分
  • 3. 搁顿贵とは? Resource Description Framework ● WWW上のリソースとリソースの関係を表現す ●  るためのモデル WWWの提案者、ティム?バーナーズ=リーが ●  提唱した。
  • 4. 搁顿贵とは?(2) 身近なところではRSS1.0もRDF(2.0は違う) ● <?xml version="1.0" encoding="utf-8" ?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja"> <channel rdf:about="http://d.hatena.ne.jp/m-komagata/rss"> <title>m-komagataの日記</title> <link>http://d.hatena.ne.jp/m-komagata/</link> <description>m-komagataの日記</description> <dc:date>2006-11-07T20:35:16+09:00</dc:date> <items> (後略)
  • 5. 何故搁顿贵? どんな関係? 文書 文書 リンク HTMLのリンクは意味が付いてない。 ●  (どういう関係を持ってるのかわからない)
  • 6. 何故搁顿贵?(2) 要約 文章 文章 RDFでは関係を表現できる ● WWWは元々、関係の情報付きの意味ネットワーク ●  (セマンティック?ウェブ)として設計された
  • 7. 搁顿贵の基本要素 リソース ● Web上で識別できるもの全て。(URI参照で表現されます) ステートメント(文) ● リソースの主語、述語、目的語の3つの組み合わせ  (トリプル) グラフ ● ステートメントの集合  ※RDFのグラフは様々な構文(XMLやN-Triplesなど)で表現できる
  • 8. 搁顿贵の基本概念 ステートメント foaf:weblog urn:komagata http://p0t.jp/mt/ 主語 述語 目的語 リソースを主語、述語、目的語としてステートメントを作れる ● 目的語は別のステートメントの主語になれる。 ●
  • 9. 搁顿贵の基本概念(2) ステートメント リテラル dc:title http://p0t.jp/mt/ p0t 主語 述語 目的語 目的語はURI参照だけでなく、文字列自身(リテラル)とする ●  ことが可能
  • 10. 搁顿贵の基本概念(3) aaa A bbb C aaa B A bbb C B eee B eee D D 世界のどこで記述されたトリプルでも同じURIを持っていれ ● ばひとつのグラフに併合できる。 意味を機械が理解できるRDFで情報を記述することで ●  Web全体を分散型データベースとして扱おうという野望。
  • 11. <aaa> <bbb> aaa A <ccc> bbb C </ccc> B </bbb> </aaa> ここまでがRDFのモデルの話。 ここからは具体的なXMLでの記述方法の話です。
  • 12. 搁顿贵トリプルの齿惭尝表现 foaf:weblog urn:komagata http://p0t.jp/mt/ <rdf:Description> --- 主語ノード <foaf:weblog> --- 述語ノード <rdf:Description> --- 目的語ノード </rdf:Description> </foaf:weblog> </rdf:Description> XML表現では、主語、述語はrdf:Descriptionで記述します ● 述語はその名前の要素として記述します ●
  • 13. 搁顿贵トリプルの齿惭尝表现(2) foaf:weblog urn:komagata http://p0t.jp/mt/ <rdf:Description rdf:about=”urn:komagata”> <foaf:weblog> <rdf:Description rdf:about=”http://p0t.jp/mt/”> </rdf:Description> </foaf:weblog> </rdf:Description> 主語、目的語の参照先はrdf:about要素で記述します ●
  • 14. 搁顿贵トリプルの齿惭尝表现(3) foaf:weblog urn:komagata http://p0t.jp/mt/ <rdf:Description rdf:about=”urn:komagata”> <foaf:weblog rdf:resource=”http://p0t.jp/mt/” /> </rdf:Description> 子ノードを持たない要素はrdf:resource属性を使って省略表 ● 記できます
  • 15. 搁顿贵トリプルの齿惭尝表现(4) dc:title http://p0t.jp/mt/ p0t <rdf:Description rdf:about=”urn:komagata”> <dc:title>p0t</dc:title> </rdf:Description> 目的語がリテラルの場合はrdf:Description要素を省略して ● 述語ノードのプロパティとして記述できます
  • 16. 搁顿贵トリプルの齿惭尝表现(5) dc:title foaf:weblog http://p0t.jp/mt/ p0t urn:komagata <rdf:RDF> <rdf:Description rdf:about=”urn:komagata”> <foaf:weblog> <rdf:Description rdf:about=”http://p0t.jp/mt/”> <dc:title>p0t</dc:title> </rdf:Description> </foaf:weblog> </rdf:Description> </rdf:RDF> 複数のトリプルもこれまでの組み合わせで表現できます。 ● ● RDF文章としてはrdf:RDFノードをrootノードにします
  • 17. FOAFの語彙 FOAFの名前空間は “http://xmlns.com/foaf/0.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 rdf:nodeID="me"> <foaf:nick>komagata</foaf:nick> <foaf:bio:olb>働いたら負けだと思っている</foaf:bio:olb> <foaf:weblog rdf:resource="http://komagata.vox.com/"/> <foaf:knows> <foaf:Person> <foaf:nick>kawadu</foaf:nick> (後略)
  • 19. 贵翱础贵の语汇(3) foaf:knowsで知人を表現できるのが面白いところ ● <foaf:knows> <foaf:Person> <foaf:nick>kawadu</foaf:nick> <foaf:weblog rdf:resource="http://kawadu.vox.com/" /> </foaf:Person> </foaf:knows> <foaf:knows> <foaf:Person> <foaf:nick>yoshida</foaf:nick> <foaf:weblog rdf:resource="http://yoshida.vox.com/" /> </foaf:Person> </foaf:knows>
  • 20. RDFパーサーいろいろ Redland ● CのRDFパーサー。Java, Perl, PHP, Python, Rubyなど 色んな言語向けのBindingがある。 RAP – RDF API for PHP ● Pure PHPのRDFパーサー。画像でRDFグラフを出力したり  機能がやたらある。 Hercules ●  JavascriptのObject/RDFマッパー。E4Xっぽい手軽さで  SPARQL(後述)クエリを生成してObjectにマッピングしてく  れる。
  • 21. RAPでVOXのFOAFを検索 define('RDFAPI_INCLUDE_DIR', 'lib/rdfapi-php/api/'); include_once RDFAPI_INCLUDE_DIR.'RdfAPI.php'; include_once RDFAPI_INCLUDE_DIR.'syntax/RdfParser.php'; include_once RDFAPI_INCLUDE_DIR.'vocabulary/FOAF_C.php'; $uri = 'http://komagata.vox.com/profile/foaf.rdf'; $model = ModelFactory::getDefaultModel(); $model->load($uri); $bio = new Resource('http://purl.org/vocab/bio/0.1/olb'); $result = $model->find(null, $bio, null); // Subject, Predicate, Object print_r($result->triples); Model#findメソッドに主語、述語、目的語のResourceを ●  与えて検索する(返り値はStatement)
  • 22. 搁顿贵のパース FOAFをパースしようと思っていきなり手を出すと、何故 ● こんなAPIになってるのかさっぱり理解できない。 RDFのモデルを知ってると非常にわかりやすい。 ● XMLのパースじゃなくて、RDFグラフに対する検索なので ●  柔軟な検索が可能。 もっと本格的な問い合わせはSPARQLというRDF問い合わ ● せ言語を使う。  (RDBに対するSQLやODBに対するOQLみたいなもの)
  • 23. FOAFのこれまで (2004年頃)RSSみたいに流行るかと期待されたが流行ら ●  なかった ブログシステムがRSSを吐いてくれたようにFOAFを ●  吐いてくれるシステムがあまりなかった。 FOAFはSNSに最適かと思われたが、SNSが閉鎖的な ●  システムに終始し、まったく対応しなかった。(がっかり???) (上記理由で)FOAFファイル自体が少ないためにクライアン ●  トを作ってもあまり役に立たなかった。
  • 24. FOAFの現在~ VOXなど、権限管理機能を高めつつ、公開するところは ●  公開してくようなSNSが増え始めた。 API公開が流行 ● スクレイピング技術普及で第三者がメタデータを勝手に作っ ●  て配布したりしやすくなった あとは便利 or 面白いクライアントがあれば??? ●
  • 25. FOAF Client Widget(ブログパーツ)はどうだろうか。 ● 丁度Offline/Online問わないWidgetの標準仕様策定が ●  進んでいる。(Netbives Universal Widget API) 小粒度のコンテンツ形態として普及するかもしれない ● FOAF Browser Widgetを作ってみました。 ●  VOX、はてなダイアリ、TypeKey、MixiのFOAFを  それぞれ表示しています。(Mixi FOAFは自前)  一端JSONPに変換しているのでどこにでも張れます。
  • 27. FOAF Widget on ジオシティーズ
  • 28. 参考資料 セマンティック?ウェブのためのRDF/OWL 入門 ● http://www.amazon.co.jp/exec/obidos/ASIN/4627829310/p0t- 22/ref=nosim Redland ● http://librdf.org/ RAP – RDF API fo PHP ● http://sites.wiwiss.fu-berlin.de/suhl/bizer/rdfapi/ Hercules ● http://www.arielworks.net/works/codeyard/hercules Netvibes UWA ● http://dev.netvibes.com/