Dataを構築するための手順について説明していきます。Dataは分散されたデータをWebによってつなげることによって実現されるもの、またはその活動のことを指します。Webが普及してから、様々な機関や企業がデータを蓄積し、システムに活かしてきました。各ドメインにあるデータは、外部のデータと連携することでより良いものを生み出す可能性があります。各団体が保有しているデータを公開する手段はいくつかあります。Issueshttp://www.w3.org/DesignIssues/LinkedData.html機械可読であり、W3C標準の技術を利用してデータを公開することを進めています。自分の公開したデータを外部で作成されたデータと関連付けることでより役に立たせることができます。Web上でデータを提供する方法としてはWebAPIによる公開が一般的なのではないか、と考えられる方も多いでしょう。Dataではデータそのものを参照できるようにするため、WebAPI用のエンドポイントを実装する必要がなくなります。WebAPIのための認証機構や設計をするコストを割くことができない場合もあるでしょう。Dataでは構造化されたデータを参照可能にすることで、グローバルなWebの空間で利用されることを期待しているため、W3Cで標準化されている方法でデータの公開ができてしまえばあとは余分な設計をする必要はありません。Dataが期待されている点であると言えるでしょう。Dataであるためにはどのようなことを守れば良いのでしょうか。Dataであるための4原則は以下のとおりです。Issueshttp://www.w3.org/DesignIssues/LinkedData.html全ての物事にURIによる名前をつけ、URIは人間が読んでも理解可能であるようにし、URIを参照した際に有用な情報が提供されるようにし、より多くの情報が見つかるように他のURIへのリンクを含むことであると述べられています。この原則を守ることにより、データ同士の連携が深まっていくことになります。Dataに関する一般的な情報は以下のサイトが参考になります。Dataを作成して行きましょう。今回は軽量なRDFデータストアであるTDBを利用することにします。実習環境について今回の実習では全ての操作をコマンドラインから行います。Windowsユーザの方はCygwinを利用するか、VMでBashの使えるOSを用意してください。Linuxユーザの方はデフォルトのコンソールを利用すれば大丈夫です。Cygwinのインストールhttp://cygwin.com/install.htmlTDBのインストールWindowsの場合まずはTDBをダウンロードしましょう。Incubatingプロジェクトの一部として提供されています。/content/repositories/releases/org/apache/jena/jena-tdb/0.9.0-incubating/https://repository.apache.org/content/repositories/releases/org/apache/jena/jena-tdb/0.9.0-incubating/jena-tdb-0.9.0-incubating-distribution.zipをダウンロードして解凍しましょう。jenaプロジェクトのシンボリックリンクを作成してもよいでしょう。Utilitieshttp://incubator.apache.org/jena/documentation/tdb/commands.html簡単のため、Pathを通しておきましょう。PATH=$TDBROOT/bin:$PATHではさっそく利用してみます。tdbコマンドを実行しましょう。...]クラスを指定するように言われます。Pathは正常に通っているようです。実際にデータベースを作成してみましょう。作業用のディレクトリに移動し、tdbtestディレクトリを作成します。lstdbtestサンプルのRDFを用意しました。test.rdfという名前で保存し、読み込んでみます。second]これにより、tdbtestディレクトリにRDFが読み込まれました。RDFが読み込まれだわけではなく、RDFストアが作成されています。prefixes.datでは先程読み込んだtest.rdfに関する情報を取り出してみましょう。|===========-----------タイトルがhogeのWebサイトを取得しようとしましたが取得できませんでした。Universityと設定していました。一度クエリを投げてみましょう。|---------------------------------------------予想通りクエリが実行され、Webサイトのインスタンスを取得することが出来ました。http://www.yamaguti.comp.ae.keio.ac.jp/というのはWebサイトのURIです。挿入した全てのデータを表示するにはtdbdumpを利用します。.これでひと通りのtdbの挙動をつかむことができたと思います。このチュートリアルでまだやっていないことSPARQLファイルを個別に書いてqueryを実行するTDBにいれたデータをSPARQLエンドポイントとして公開するデータの更新。~1つ目のチュートリアルではTDBの導入と、簡単なデータの挿入を試しました。実践に近い形でTDBを利用していきましょう。新しく別のデータベースを作成することにします。今回はProtegeを利用して素となるRDFを作成してみます。今回のチュートリアル用に作成したオントロジーの仕様は以下のとおりです。作成それらのインスタンスを適宜作成プロパティとして、通う、キャンパスを持っている、を作成まず、クラス階層を作成します。Classesタブから以下のように作成しました。次にプロパティを作成します。Propertiesから作成していきます。次にインスタンスについて作成していきましょう。インスタンスについてはIndivisualsタブから作成できます。ここではPlaceに日吉や矢上などの実際の場所のインスタンスを作成しておきました。実際の生徒に関するインスタンスや大学についてなどもここで作成しておきましょう。作成したクラスとプロパティはEntitiesタブから一覧できます。作成したオントロジーをRDFとして出力しましょう。AsからRDF/XMLを選択し、保存します。これでRDFを出力することができました。作成されたRDFはtutorial2からダウンロードできます。これをtdbを利用して読み込み、新しいデータベースに挿入してみましょう。second]無事挿入することが出来ました。試しにクエリを投げてみましょう。今回はSPARQLを別ファイルに保存して実行することにしましょう。実行しているSPARQLは以下のとおりです。tutorial2:Student.}以下のようにしてSPARQLを実行することができます。|------------------------このクエリでは生徒の一覧を取得しました。想定通りの結果が得られました。このデータベースに生徒のデータを追加してみます。これもSPARQLを利用して行うことができます。SPARQLを利用したデータ更新及び挿入についてはW3CのSPARQL-Updateに仕様が詳しく記載されています。各自で好きなドメインのデータをデザインし、TDBに格納してください。結果の生成は以下のようにしましょう。yourname.wi.tdbstats(yournameにはあなたの名前を入れてください。)生成された2つのファイルを添付し、提出してください。どのようなデータを作成したか提出方法については授業内で説明します。Dataを構築するためのツールが開発されています。ここではそれらのツール類について紹介します。Librarieshttp://librdf.org/Cで書かれた汎用RDFライブラリ。非常に高速なパーサとシリアライザーが実装されています。(experimental),Perl,PHP,Python,Rubyへのバインディングも実装されています。Frameworkhttp://jena.sourceforge.net/Javaで書かれたRDFライブラリ。フレームワークというだけあって、データベースとの連携やSPARQLなどもサポートされています。rdflibhttp://www.rdflib.net/Python用のRDFライブラリ。基本的なグラフ操作,SPARQL等もサポートされています。Rubyhttp://rdf.rubyforge.org/Ruby製のRDFライブラリ。rubygemsから利用できるので便利です。swishhttp://hackage.haskell.org/package/swishSwishはHaskellで書かれたRDFデータを利用するためのライブラリです。Hostinghttp://code.google.com/p/rdfquery/JavaScriptのためのRDFプロセッサです。RDFの生成及び読み込みが可能です。RDFバリデータRDFが正しい形式かどうかを検証するW3Cが提供しているツールがあります。各自でRDFを生成した場合には、ここで一度検証すると良いです。Servicehttp://www.w3.org/RDF/Validator/RDFの体裁を検証するツールです。W3Cから提供されています。Caseshttp://www.w3.org/TR/rdf-testcases/検証機ではありませんが、RDFのテストケースというものも用意されています。これは、新しいRDFライブラリを開発する場合などに利用されるRDFのテストです。これらのRDFを正常に解釈できれば、動作の正確性を検証できます。RDFストアRDFを格納するためのストレージです。RDFストアも関係データベースなどと同じように、それぞれ特徴が異なります。特徴とあわせて以下にRDFストアを紹介します。storagehttp://4store.org4storeはスケーラブルで安定したRDFデータベースです。15Gトリプル、数千人のユーザがいるアプリケーションで利用された実績があります。Ontotexthttp://www.ontotext.com/owlimOntotext社が出しているストレージです。高速な推論エンジンを有しており、スケーラビリティにも優れています。Databasehttp://www.franz.com/agraph/allegrograph/Franz社が開発しているRDFストレージ。高速に動作するようです。無償版およびアーキテクチャについては以下に説明があります。Downloadshttp://www.franz.com/agraph/downloads/基本的にはOWLIMと同様にSesameのようなHTTP(REST)ラッパーが用意されており、ラッパー経由でストレージを利用する形になっています。Jenahttp://openjena.org/SDB/TDBとSDBはJenaの利用を前提としたRDFストレージです。TDBは軽量のストレージで、20Mトリプル程度までならある程度非常に高速に動作します。SDBはロードバランシング、セキュリティ、クラスタリング、バックアップそして管理のための機能があります。手軽にストレージを利用したい場合にはTDBという選択になるでしょう。RDFの挿入や更新があるアプリケーションの場合にはSDBを利用したほうが良いです。Hostinghttp://code.google.com/p/cumulusrdf/Cumulusはクラウドベースのアーキテクチャに置かれることを想定されたRDFストアです。)を行うことができます。Cassandoraを利用しています。Cassandoraの利用によってスケーラビリティと高可用性をパフォーマンスを失うことなく実現することができます。並列処理によって線形にスケールさせることができますし、RDFストレージは今後このような方向に進んでいくと考えられます。