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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

2,054
views

Published on

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

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

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,054
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×