サーバサイドコース Sinatra + SPARQL 編
Upcoming SlideShare
Loading in...5
×
 

サーバサイドコース Sinatra + SPARQL 編

on

  • 1,938 views

2013-11-24 に行われた第6回LODチャレンジデー パートナーリソース活用ハッカソン サーバサイドコースでの資料.

2013-11-24 に行われた第6回LODチャレンジデー パートナーリソース活用ハッカソン サーバサイドコースでの資料.

Statistics

Views

Total Views
1,938
Views on SlideShare
1,111
Embed Views
827

Actions

Likes
3
Downloads
7
Comments
0

4 Embeds 827

http://lod.sfc.keio.ac.jp 794
https://twitter.com 30
http://133.27.111.136 2
https://www.google.co.jp 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

サーバサイドコース Sinatra + SPARQL 編 サーバサイドコース Sinatra + SPARQL 編 Presentation Transcript

  • サーバサイドコース Sinatra + SPARQL 編 ROIS&LODI 加藤文彦 第6回LODチャレンジデー 2013-11-24 1
  • サンプルコード • https://github.com/fumi/lod2013examples • 言語: Ruby + JavaScript • フレームワーク: Sinatra • deployまではやらずにテスト環境だけ • 上のサイトを開いて続きはそこで説明 2
  • ディレクトリ構成 src/Gemfile ... 必要なパッケージ指定 Gemfile.lock ... Gemfileから生成されるファ イル (依存関係・バージョン固定用) app.rb ... アプリ本体 public ... 静的ファイル (JS, CSS,画像) vendor ... インストールしたパッケージ views ... HTML表示部分 3
  • Sinatra • 軽量Webフレームワーク • 1分でWebアプリ • 他言語でも類似品あり • • http://www.sinatrarb.com/ サンプル起動でshotgunを使っている のは変更したものを即時反映するため 4
  • 5
  • 6
  • クエリ言語 • データの検索や操作を行うための言語 • データモデルやDBシステムに合わせて設計 • 例: SQL – データモデル: 関係モデル – DBシステム: RDBMS • LOD: RDFモデル(グラフデータモデル) 7
  • グラフのクエリ • グラフの最小単位: 3つ組 (トリプル) dbp:東京都 dbpedia-­‐owl:country dbp:日本 • グラフパターン 1. 完全一致 • 2. 変数によるパターンマッチ • 3. dbp:東京都 dbp-owl:country dbp:日本 . dbp:東京都 dbp-owl:country ?country . 1と2の組み合わせ 8
  • 好き嫌いグラフ :like :Amy :like :Bob :dislike :like :dislike :Dan :dislike :Flo :Ed :dislike :dislike :Gil :like :like :Jim :Ian :like :Hal :dislike :Cathy :Kate :dislike :like :Lee :May :dislike 9
  • Amyが好きな人 グラフパターン :Amy  :like  ?person  . :like :Amy :like :Bob :dislike :like :dislike :Dan :dislike :Flo :Ed :dislike :dislike :Gil :like :like :Jim :Ian :like :Hal :dislike :Cathy :Kate :dislike :like :Lee :May :dislike 10
  • Amyが好きな人 が好きな人 グラフパターン :Amy  :like  ?person1  . ?person1  :like  ?person2  . :like :Amy :like :Bob :dislike :like :dislike :Dan :dislike :Flo :Ed :dislike :dislike :Gil :like :like :Jim :Ian :like :Hal :dislike :Cathy :Kate :dislike :like :Lee :May :dislike 11
  • SPARQL • LOD用クエリ言語 • SQLのような文法 SQL SPARQL Query RDB RDF Store DB Relational Model RDF Model Model • データモデル: RDF • プロトコル: HTTP • W3C仕様 • 2013-03-21に 1.1勧告 12
  • SPARQLエンドポイント • SPARQLクエリを受け付け る場所 • SPARQLエンドポイントURI • プログラムからSPARQLを使 うときに指定 • 入力フォームがある場合 もあり • 例: http://ja.dbpedia.org/sparql 13
  • DBpedia Japaneseのグラフ例 dbp-­‐owl:Comics サイボーグ009 rdfs:label dbp-­‐owl:AdministraHveRegion dbp:サイボーグ009 rdf:type rdfs:label dbp:宮城県 rdf:type dbp-­‐owl: ComicsCreator dbp-­‐owl:notableWork rdf:type dbp-­‐owl:birthPlace dbp:石ノ森章太郎 宮城県 foaf:Person rdf:type dbp-­‐owl:leaderName dbp-­‐prop:生年 dbp:村井嘉浩 1938 rdfs:label dbp-­‐owl:award 石ノ森章太郎 dbp:手塚治虫 文化賞 14
  • クエリ:  石ノ森章太郎の出身地 PREFIX  dbp:  <hVp://ja.dbpedia.org/resource/> PREFIX  dbp-­‐owl:  <hVp://dbpedia.org/ontology/> SELECT  ?birthPlace WHERE  {    dbp:石ノ森章太郎  dbp-­‐owl:birthPlace  ?birthPlace  . } dbp-­‐owl:Comics サイボーグ009 rdfs:label dbp-­‐owl:AdministraHveRegion dbp:サイボーグ009 rdf:type rdfs:label rdf:type dbp-­‐owl: ComicsCreator dbp-­‐owl:notableWork dbp:宮城県 rdf:type dbp-­‐owl:birthPlace dbp:石ノ森章太郎 宮城県 foaf:Person rdf:type dbp-­‐owl:leaderName dbp-­‐prop:生年 dbp:村井嘉浩 1938 rdfs:label dbp-­‐owl:award 石ノ森章太郎 dbp:手塚治虫 文化賞 15
  • 16
  • PREFIX  dbp:  <hVp://ja.dbpedia.org/resource/> PREFIX  dbp-­‐owl:  <hVp://dbpedia.org/ontology/> SELECT  ?birthPlace WHERE  {    dbp:石ノ森章太郎  dbp-­‐owl:birthPlace  ?birthPlace  . } • SELECT:  取得したい変数を指定 • SELECT  *  は全ての変数指定と同等 • 結果形式:  XML,  JSON,  CSV,  TSV,  ... • WHERE:    {}内にグラフパターンの組み合わせを記述 • LIMIT:    件数の制限 • 100だと1-­‐100まで取得 • LIMITがない場合は全件取得 • 量が多い場合はサーバに負荷をかけるので注意 • PREFIX:    URIを短縮して記述するための仕組み • dbp:東京都  =  <hVp://ja.dbpedia.org/resource/東京都> 17
  • クエリ:  手塚治虫文化賞を受賞した漫画家 PREFIX  dbp:  <hVp://ja.dbpedia.org/resource/> PREFIX  dbp-­‐owl:  <hVp://dbpedia.org/ontology/> SELECT  ?creator WHERE  {    ?creator  rdf:type  dbp-­‐owl:ComicsCreator  ;        dbp-­‐owl:award  dbp:手塚治虫文化賞  . } dbp-­‐owl:Comics サイボーグ009 rdfs:label dbp-­‐owl:AdministraHveRegion dbp:サイボーグ009 rdf:type rdfs:label rdf:type dbp-­‐owl: ComicsCreator dbp-­‐owl:notableWork dbp:宮城県 rdf:type dbp-­‐owl:birthPlace dbp:石ノ森章太郎 宮城県 foaf:Person rdf:type dbp-­‐owl:leaderName dbp-­‐prop:生年 dbp:村井嘉浩 1938 rdfs:label dbp-­‐owl:award 石ノ森章太郎 dbp:手塚治虫 文化賞 18
  • 19
  • クエリ:  手塚治虫文化賞を受賞した漫画家の代表的な漫画 PREFIX  dbp:  <hVp://ja.dbpedia.org/resource/> PREFIX  dbp-­‐owl:  <hVp://dbpedia.org/ontology/> SELECT  ?creatorName  ?comicName WHERE  {    ?creator  a  dbp-­‐owl:ComicsCreator  ;  dbp-­‐owl:award  dbp:手塚治虫文化賞  ;          dbp-­‐owl:notableWork  ?comic  ;  rdfs:label  ?creatorName  .    ?comic  a  dbp-­‐owl:Comics  ;  rdfs:label  ?comicName  . } dbp-­‐owl:Comics サイボーグ009 rdfs:label dbp-­‐owl:AdministraHveRegion dbp:サイボーグ009 rdf:type rdfs:label rdf:type dbp-­‐owl: ComicsCreator dbp-­‐owl:notableWork dbp:宮城県 rdf:type dbp-­‐owl:birthPlace dbp:石ノ森章太郎 宮城県 foaf:Person rdf:type dbp-­‐owl:leaderName dbp-­‐prop:生年 dbp:村井嘉浩 1938 rdfs:label dbp-­‐owl:award 石ノ森章太郎 dbp:手塚治虫 文化賞 20
  • 21
  • SPARQL 1.0 • データ取得 • SELECT • ASK • DESCRIBE • CONSTRUCT • ほぼどこでも使える 22
  • SPARQL 1.1 • データ管理 • 作成・更新・削除用句 • • • • • サービス記述 Graph Store HTTP Protocol 結果形式の追加: JSON, CSV, TSV 様々な追加機能 • • INSERT, UPDATE, DELETE, LOAD, DROP プロパティパス,集約,条件,数値関数,文字列関数,サブクエリ,Federatedクエリなど 実装の差 • • 最新の実装だと大分カバーされている 実働中のエンドポイントは差あり • 特にFederatedクエリやBINDあたりは使えないところも多い 23
  • 集約 • COUNT: 個数 • SUM: 合計 • AVG: 平均 • MIN: 最小値 • MAX: 最大値 • GROUP BY: 24
  • COUNT 例)  森薫リソースのオブジェクトの数 SELECT  (COUNT(?o)  AS  ?count) WHERE  {    <hVp://dbpedia.org/resource/Kaoru_Mori>  ?p  ?o  . } 25
  • GROUP BY 例)  クラス毎のインスタンスの数上位100件を降順 SELECT  ?class  (COUNT(?instance)  AS  ?noOfInstances) WHERE  {      ?instance  a  ?class  . } GROUP  BY  ?class ORDER  BY  DESC(?noOfInstances) LIMIT  100 26
  • SPARQLクライアント ライブラリ • • • • • • • • • Ruby: sparql-client Python: SPARQLWrapper Java: ARQ C: Rasqal R: SPARQL Haskell: hsparql 等々 http://linkeddata.jp/wiki/ツール http://www.w3.org/wiki/SparqlImplementations 27
  • Leaflet • サービス非依存のJS地図 ライブラリ • OpenStreetMapも地理 院地図もこれで利用可能 • http://leafletjs.com 28
  • Sgvizler • JavaScriptのSPARQL可視化ライブラリ • • • https://code.google.com/p/ sgvizler/ 主にGoogle Visualization API 使い方 • • • div要素に埋め込む 直接Javascriptを書く クエリフォームから入力する 29