Comments
Description
Transcript
SPARQL
SPARQL Semantic Web Stack (2007) SPARQLとは? ▪ RDFデータを検索するためのクエリ言語 (RDBMSにおけるSQLに相当) – http://www.w3.org/TR/rdf-sparql-query/ – http://www.asahi-net.or.jp/~ax2s-kmtn/ internet/rdf/rdf-sparql-query.html (日本語訳) – http://www.w3.org/TR/sparql11-overview ▪ ver.1.0は2008年1月にW3C勧告 ▪ ver.1.1は2013年3月にW3C勧告 RDFデータストア ▪ RDFデータを格納し,SPARQLによるクエリなどを可能にす るアプリケーション ▪ SPARQLエンドポイントを提供 – queryパラメータ値にURLエンコードしたSPARQLクエリを与えること で,結果を得ることができるWeb API ▪ 本講義ではVirtuosoを利用 – http://virtuoso.openlinksw.com – フリーソフトウェアのため各自ダウンロードしてインストールすることも 可能 ▪ 以下のURLから本日の講義で説明するSPARQLクエリを実 行可能 – http://gloria.comp.ae.keio.ac.jp/sparql/ Turtle ▪ RDFフォーマットの一種 ▪ RDF/XML構文よりも簡潔にRDF文書を表現 可能 – http://www.w3.org/TR/turtle/ ▪ 以下のサンプルRDF文書はTurtleで記述 SPARQL Query Syntax Select ?x ?y (値を返す変数) (From データセット) Where { 検索条件} (出力書式) Construct (テンプレート内の変数を具象化し てRDFを返す) Describe(条件部を含むRDFを返す) Ask(RDFグラフの有無 true/false) 練習問題 ▪ SPARQL – サンプルRDF文書 • – 基本的なクエリ • – ex116.rq ORDER BY(ソート) • – ex103.rq LIMIT(表示結果数の上限を指定) • – ex094.rq UNION(代替グラフパターンマッチ) • – ex057.rq, ex061.rq DISTINCT(重複を除去) • – ex021.rq, ex067.rq, ex105.rq, ex109.rq, ex112.rq OPTIONAL(オプション) • – ex003.rq, ex008.rq, ex010.rq, ex013.rq, ex070.rq FILTER(文字列値,数値などの制限) • – ex002.ttl, ex012.ttl, ex054.ttl, ex069.ttl, ex100.ttl, ex104.ttl, ex115.ttl, ex145.ttl ex146.rq, ex148.rq, ex149.rq, ex151.rq GROUP BY, MAX, AVG, SUM, COUNT(グループ化,最大,平均,合計,個数を数える) • ex153.rq, ex156.rq, ex160.rq, ex162.rq – リモートのSPARQLエンドポイントへのクエリ • ▪ ex170.rq, ex172.rq 演習問題1, 演習問題2 RDF文書: ex002.ttl # filename: ex002./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . ab:richard ab:homeTel "(229) 276-‐5135" . ab:richard ab:email "[email protected]" . ab:cindy ab:homeTel "(245) 646-‐5488" . ab:cindy ab:email "[email protected]" . ab:craig ab:homeTel "(194) 966-‐1505" . ab:craig ab:email "[email protected]" . ab:craig ab:email "[email protected]" . 講義概要 SPARQLクエリ: ex003.rq 講義概要 Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex002 # filename: ex003.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?craigEmail WHERE { ab:craig ab:email ?craigEmail . } RDF文書: ex002.ttl # filename: ex002./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . ab:richard ab:homeTel "(229) 276-‐5135" . ab:richard ab:email "[email protected]" . ab:cindy ab:homeTel "(245) 646-‐5488" . ab:cindy ab:email "[email protected]" . ab:craig ab:homeTel "(194) 966-‐1505" . ab:craig ab:email "[email protected]" . ab:craig ab:email "[email protected]" . SPARQLクエリ: ex008.rq 講義概要 Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex002 # filename: ex008.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?person WHERE { ?person ab:homeTel "(229) 276-‐5135" . } RDF文書: ex002.ttl # filename: ex002./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . ab:richard ab:homeTel "(229) 276-‐5135" . ab:richard ab:email "[email protected]" . ab:cindy ab:homeTel "(245) 646-‐5488" . ab:cindy ab:email "[email protected]" . ab:craig ab:homeTel "(194) 966-‐1505" . ab:craig ab:email "[email protected]" . ab:craig ab:email "[email protected]" . SPARQLクエリ: ex010.rq 講義概要 Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex002 # filename: ex010.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?propertyName ?propertyValue WHERE { ab:cindy ?propertyName ?propertyValue . } RDF文書: ex002.ttl # filename: ex002./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . ab:richard ab:homeTel "(229) 276-‐5135" . ab:richard ab:email "[email protected]" . ab:cindy ab:homeTel "(245) 646-‐5488" . ab:cindy ab:email "[email protected]" . ab:craig ab:homeTel "(194) 966-‐1505" . ab:craig ab:email "[email protected]" . ab:craig ab:email "[email protected]" . RDF文書: ex012.ttl # filename: ex012./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" . d:i0432 ab:lastName "Mu/" . d:i0432 ab:homeTel "(229) 276-‐5135" . d:i0432 ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-‐5488" . d:i9771 ab:email "[email protected]" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:email "[email protected]" . d:i8301 ab:email "[email protected]" . 講義概要 SPARQLクエリ: ex013.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex012 # filename: ex013.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?craigEmail WHERE { ?person ab:firstName "Craig" . ?person ab:email ?craigEmail . } 講義概要 RDF文書: ex012.ttl # filename: ex012./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" . d:i0432 ab:lastName "Mu/" . d:i0432 ab:homeTel "(229) 276-‐5135" . d:i0432 ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-‐5488" . d:i9771 ab:email "[email protected]" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:email "[email protected]" . d:i8301 ab:email "[email protected]" . SPARQLクエリ: ex021.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex012 # filename: ex021.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT * WHERE { iオプションをつけると ?s ?p ?o . 大文字・小文字を FILTER (regex(?o, "yahoo","i")) 区別しなくなる } 講義概要 RDF文書: ex012.ttl # filename: ex012./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" . d:i0432 ab:lastName "Mu/" . d:i0432 ab:homeTel "(229) 276-‐5135" . d:i0432 ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-‐5488" . d:i9771 ab:email "[email protected]" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:email "[email protected]" . d:i8301 ab:email "[email protected]" . 演習問題1 1. ex012.ttl文書において,登録されている人物の名 前(firstName)と苗字(lastName)を表示する SPARQLクエリを作成せよ 2. ex012.ttl文書において,自宅の電話番号が 「(245) 646-5488」である人物の名前と苗字を表 示するSPARQLクエリを作成せよ 3. ex012.ttl文書において,「gmail」を含むメールア ドレスを持つ人物の名前と苗字を表示する SPARQLクエリを作成せよ 上記1〜3で作成したクエリをSPARQLエンドポイント上 で実行し,結果を確認せよ RDF文書: ex054.ttl # filename: ex054./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" . d:i0432 ab:lastName "Mu/" . d:i0432 ab:homeTel "(229) 276-‐5135" . d:i0432 ab:nick "Dick" . d:i0432 ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-‐5488" . d:i9771 ab:email "[email protected]" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-‐5486" . d:i8301 ab:email "[email protected]" . d:i8301 ab:email "[email protected]" . 講義概要 SPARQLクエリ: ex057.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex054 # filename: ex057.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?first ?last ?workTel WHERE { ?s ab:firstName ?first ; ?s ab:firstName ?first ; ab:lastName ?last . ab:lastName ?last ; OPTIONAL ab:workTel ?workTel . { ?s ab:workTel ?workTel . } } 講義概要 RDF文書: ex054.ttl # filename: ex054./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" . d:i0432 ab:lastName "Mu/" . d:i0432 ab:homeTel "(229) 276-‐5135" . d:i0432 ab:nick "Dick" . d:i0432 ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-‐5488" . d:i9771 ab:email "[email protected]" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-‐5486" . d:i8301 ab:email "[email protected]" . d:i8301 ab:email "[email protected]" . SPARQLクエリ: ex061.rq 講義概要 Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex054 # filename: ex061.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?first ?last ?workTel ?nick WHERE { ?s ab:firstName ?first ; ab:lastName ?last . OPTIONAL { ?s ab:workTel ?workTel; OPTIONAL { ?s ab:workTel ?workTel . } ab:nick ?nick . } OPTIONAL { ?s ab:nick ?nick . } } RDF文書: ex054.ttl # filename: ex054./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" . d:i0432 ab:lastName "Mu/" . d:i0432 ab:homeTel "(229) 276-‐5135" . d:i0432 ab:nick "Dick" . d:i0432 ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-‐5488" . d:i9771 ab:email "[email protected]" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-‐5486" . d:i8301 ab:email "[email protected]" . d:i8301 ab:email "[email protected]" . SPARQLクエリ: ex067.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex054 # filename: ex067.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?first ?last WHERE { ?s ab:firstName ?first ; ab:lastName ?last . FILTER NOT EXISTS { ?s ab:workTel ?workNum } } 講義概要 RDF文書: ex054.ttl # filename: ex054./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" . d:i0432 ab:lastName "Mu/" . d:i0432 ab:homeTel "(229) 276-‐5135" . d:i0432 ab:nick "Dick" . d:i0432 ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-‐5488" . d:i9771 ab:email "[email protected]" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-‐5486" . d:i8301 ab:email "[email protected]" . d:i8301 ab:email "[email protected]" . RDF文書: ex069.ttl # filename: ex069./l @prefix ab: <h/p://learningsparql.com/ns/ addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . # People d:i0432 ab:firstName "Richard" ; ab:lastName "Mu/" ; ab:email "[email protected]" . d:i9771 ab:firstName "Cindy" ; ab:lastName "Marshall" ; ab:email "[email protected]" . d:i8301 ab:firstName "Craig" ; ab:lastName "Ellis" ; ab:email "[email protected]" . 講義概要 # Courses d:course34 ab:courseTitle "Modeling Data with OWL" . d:course71 ab:courseTitle "Enhancing Websites with RDFa" . d:course59 ab:courseTitle "Using SPARQL with non-‐RDF Data" . d:course85 ab:courseTitle "Updalng Data with SPARQL" . # Who's taking which courses d:i8301 ab:takingCourse d:course59 . d:i9771 ab:takingCourse d:course34 . d:i0432 ab:takingCourse d:course85 . d:i0432 ab:takingCourse d:course59 . d:i9771 ab:takingCourse d:course59 . SPARQLクエリ: ex070.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex069 # filename: ex070.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?last ?first ?courseName WHERE { ?s ab:firstName ?first ; ab:lastName ?last ; ab:takingCourse ?course . ?course ab:courseTitle ?courseName . } 講義概要 SPARQLクエリ: ex094.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex069 # filename: ex094.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?first ?last SELECT DISTINCT ?first ?last WHERE WHERE { { ?s ab:takingCourse ?class ; ?s ab:takingCourse ?class ; ab:firstName ?first ; ab:firstName ?first ; ab:lastName ?last . ab:lastName ?last . } } 講義概要 RDF文書: ex100.ttl # filename: ex100./l @prefix ab: <h/p://learningsparql.com/ns/addressbook#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:i0432 ab:firstName "Richard" ; ab:lastName "Mu/" ; ab:instrument "sax" ; ab:instrument "clarinet" . d:i9771 ab:firstName "Cindy" ; ab:lastName "Marshall" ; ab:instrument "drums" . d:i8301 ab:firstName "Craig" ; ab:lastName "Ellis" ; ab:instrument "trumpet" . 講義概要 SPARQLクエリ: ex103.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex100 # filename: ex103.rq PREFIX ab: <h/p://learningsparql.com/ns/addressbook#> SELECT ?first ?last ?instrument WHERE { ?person ab:firstName ?first ; ab:lastName ?last ; ab:instrument ?instrument . { ?person ab:instrument "sax" . } UNION { ?person ab:instrument "trumpet" . } } 講義概要 RDF文書: ex104.ttl # filename: ex104./l @prefix dm: <h/p://learningsparql.com/ns/demo#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:item432 dm:cost 8 ; dm:localon <h/p://dbpedia.org/resource/Boston> . d:item857 dm:cost 12 ; dm:localon <h/p://dbpedia.org/resource/Montreal> . d:item693 dm:cost 10 ; dm:localon "Heidelberg" . d:item126 dm:cost 5 ; dm:localon <h/p://dbpedia.org/resource/Lisbon> . 講義概要 SPARQLクエリ: ex105.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex104 # filename: ex105.rq PREFIX dm: <h/p://learningsparql.com/ns/demo#> SELECT ?s ?cost WHERE { ?s dm:cost ?cost . FILTER (?cost < 10) } 講義概要 RDF文書: ex104.ttl # filename: ex104./l @prefix dm: <h/p://learningsparql.com/ns/demo#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:item432 dm:cost 8 ; dm:localon <h/p://dbpedia.org/resource/Boston> . d:item857 dm:cost 12 ; dm:localon <h/p://dbpedia.org/resource/Montreal> . d:item693 dm:cost 10 ; dm:localon "Heidelberg" . d:item126 dm:cost 5 ; dm:localon <h/p://dbpedia.org/resource/Lisbon> . SPARQLクエリ: ex109.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex104 # filename: ex109.rq PREFIX dm: <h/p://learningsparql.com/ns/demo#> PREFIX db: <h/p://dbpedia.org/resource/> SELECT ?s ?cost ?localon WHERE { ?s dm:localon ?localon ; dm:cost ?cost . FILTER (?localon IN (db:Montreal, db:Lisbon)) . } 講義概要 RDF文書: ex104.ttl # filename: ex104./l @prefix dm: <h/p://learningsparql.com/ns/demo#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:item432 dm:cost 8 ; dm:localon <h/p://dbpedia.org/resource/Boston> . d:item857 dm:cost 12 ; dm:localon <h/p://dbpedia.org/resource/Montreal> . d:item693 dm:cost 10 ; dm:localon "Heidelberg" . d:item126 dm:cost 5 ; dm:localon <h/p://dbpedia.org/resource/Lisbon> . SPARQLクエリ: ex112.rq 講義概要 Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex104 # filename: ex112.rq PREFIX dm: <h/p://learningsparql.com/ns/demo#> PREFIX db: <h/p://dbpedia.org/resource/> SELECT ?s ?cost ?localon WHERE { ?s dm:localon ?localon ; dm:cost ?cost . FILTER (?localon NOT IN (db:Montreal, db:Lisbon)) . } RDF文書: ex104.ttl # filename: ex104./l @prefix dm: <h/p://learningsparql.com/ns/demo#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:item432 dm:cost 8 ; dm:localon <h/p://dbpedia.org/resource/Boston> . d:item857 dm:cost 12 ; dm:localon <h/p://dbpedia.org/resource/Montreal> . d:item693 dm:cost 10 ; dm:localon "Heidelberg" . d:item126 dm:cost 5 ; dm:localon <h/p://dbpedia.org/resource/Lisbon> . RDF文書: ex115.ttl # filename: ex115./l @prefix d: <h/p://learningsparql.com/ns/data#> . @prefix rdfs: <h/p://www.w3.org/2000/01/rdf-‐schema#> . d:one rdfs:label "one" . d:two rdfs:label "two" . d:three rdfs:label "three" . d:four rdfs:label "four" . d:five rdfs:label "five" . d:six rdfs:label "six" . 講義概要 SPARQLクエリ: ex116.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex115 # filename: ex116.rq PREFIX rdfs: <h/p://www.w3.org/2000/01/rdf-‐schema#> SELECT ?label WHERE { ?s rdfs:label ?label . } LIMIT 2 講義概要 RDF文書: ex145.ttl # filename: ex145./l @prefix e: <h/p://learningsparql.com/ns/expenses#> . @prefix d: <h/p://learningsparql.com/ns/data#> . d:m40392 e:descriplon "breakfast" ; e:date "2011-‐10-‐14" ; e:amount 6.53 . d:m40393 e:descriplon "lunch" ; e:date "2011-‐10-‐14" ; e:amount 11.13 . d:m40394 e:descriplon "dinner" ; e:date "2011-‐10-‐14" ; e:amount 28.30 . 講義概要 d:m40395 e:descriplon "breakfast" ; e:date "2011-‐10-‐15" ; e:amount 4.32 . d:m40396 e:descriplon "lunch" ; e:date "2011-‐10-‐15" ; e:amount 9.45 . d:m40397 e:descriplon "dinner" ; e:date "2011-‐10-‐15" ; e:amount 31.45 . d:m40398 e:descriplon "breakfast" ; e:date "2011-‐10-‐16" ; e:amount 6.65 . d:m40399 e:descriplon "lunch" ; e:date "2011-‐10-‐16" ; e:amount 10.00 . d:m40400 e:descriplon "dinner" ; e:date "2011-‐10-‐16" ; e:amount 25.05 . SPARQLクエリ: ex146.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex146.rq PREFIX e: <h/p://learningsparql.com/ns/expenses#> SELECT ?descriplon ?date ?amount WHERE { ?meal e:descriplon ?descriplon ; e:date ?date ; e:amount ?amount . } ORDER BY ?amount 講義概要 SPARQLクエリ: ex148.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex148.rq PREFIX e: <h/p://learningsparql.com/ns/expenses#> SELECT ?descriplon ?date ?amount WHERE { ?meal e:descriplon ?descriplon ; e:date ?date ; e:amount ?amount . } ORDER BY DESC(?amount) 講義概要 SPARQLクエリ: ex149.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex149.rq PREFIX e: <h/p://learningsparql.com/ns/expenses#> SELECT ?descriplon ?date ?amount WHERE { ?meal e:descriplon ?descriplon ; e:date ?date ; e:amount ?amount . } ORDER BY ?descriplon DESC(?amount) 講義概要 SPARQLクエリ: ex151.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex151.rq PREFIX e: <h/p://learningsparql.com/ns/expenses#> SELECT ?descriplon ?date ?amount WHERE { ?meal e:descriplon ?descriplon ; e:date ?date ; e:amount ?amount . } ORDER BY DESC(?amount) LIMIT 1 講義概要 SPARQLクエリ: ex153.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex153.rq PREFIX e: <h/p://learningsparql.com/ns/expenses#> SELECT (MAX(?amount) as ?maxAmount) WHERE { ?meal e:amount ?amount . } 講義概要 SPARQLクエリ: ex156.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex156.rq PREFIX e: <h/p://learningsparql.com/ns/expenses#> SELECT (AVG(?amount) as ?avgAmount) WHERE { ?meal e:amount ?amount . } 講義概要 SPARQLクエリ: ex160.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex160.rq PREFIX e: <h/p://learningsparql.com/ns/expenses#> SELECT ?descriplon (SUM(?amount) AS ?mealTotal) WHERE { ?meal e:descriplon ?descriplon ; e:amount ?amount . } GROUP BY ?descriplon 講義概要 SPARQLクエリ: ex162.rq Graph IRI: h/p://gloria.comp.ae.keio.ac.jp/ex145 # filename: ex162.rq SELECT ?p (COUNT(?p) AS ?pTotal) WHERE { ?s ?p ?o . } GROUP BY ?p 講義概要 SPARQLクエリ: ex170.rq Graph IRI: 空にする # filename: ex170.rq PREFIX rdf: <h/p://www.w3.org/1999/02/22-‐rdf-‐syntax-‐ns#> PREFIX rdfs: <h/p://www.w3.org/2000/01/rdf-‐schema#> PREFIX gp: <h/p://wifo5-‐04.informalk.uni-‐mannheim.de/gutendata/resource/people/> SELECT ?p ?o WHERE { SERVICE <h/p://wifo5-‐04.informalk.uni-‐mannheim.de/gutendata/sparql> { gp:Hocking_Joseph ?p ?o . } } 講義概要 SPARQLクエリ: ex172.rq Graph IRI: 空にする # filename: ex172.rq PREFIX cat: <h/p://dbpedia.org/resource/Category:> PREFIX foaf: <h/p://xmlns.com/foaf/0.1/> PREFIX gp: <h/p://wifo5-‐04.informalk.uni-‐mannheim.de/gutendata/resource/people/> PREFIX owl: <h/p://www.w3.org/2002/07/owl#> PREFIX rdf: <h/p://www.w3.org/1999/02/22-‐rdf-‐syntax-‐ns#> PREFIX rdfs: <h/p://www.w3.org/2000/01/rdf-‐schema#> PREFIX skos: <h/p://www.w3.org/2004/02/skos/core#> SELECT ?dbpProperty ?dbpValue ?gutenProperty ?gutenValue WHERE { SERVICE <h/p://DBpedia.org/sparql> { <h/p://dbpedia.org/resource/Joseph_Hocking> ?dbpProperty ?dbpValue . } SERVICE <h/p://wifo5-‐04.informalk.uni-‐mannheim.de/gutendata/sparql> { gp:Hocking_Joseph ?gutenProperty ?gutenValue . } } 講義概要 演習問題2 ▪ 日本語Wikipediaオントロジー(JWO)のSPARQLエンドポイントを利用して,以 下のクエリを作成せよ – 検索:http://www.wikipediaontology.org/search.html – SPARQLエンドポイント:http://www.wikipediaontology.org/query/ 1. 日本映画クラスのインスタンスについて,rdfs:labelプロパティ値を昇順でソー トして,10件表示するクエリを作成せよ LIMITはフォーム上から入力すること JWOのクラス,プロパティ,インスタンスの名前空間は以下を利用 – – • • • 2. 3. PREFIX jwo-class:<http://www.wikipediaontology.org/class/> PREFIX jwo-prop:<http://www.wikipediaontology.org/property/> PREFIX jwo-instance:<http://www.wikipediaontology.org/instance/> 夏目漱石インスタンスの代表作を昇順でソートして表示するクエリを作成せよ 自動車を会社名に含むインスタンスについて,会社名,代表者名,従業員数を, 会社名を昇順にソートして表示するクエリを作成せよ – – – 代表者と従業員数はオプションとする 会社のインスタンスは,「?company jwo:hyper ?jwo-class:会社 .」により取得 PREFIX jwo:<http://www.wikipediaontology.org/vocabulary#> 参考文献 ▪ Bob DuCharme: "Learning SPARQL", O'REILLY, ISBN: 1449306594 ▪ SPARQL Cheat Sheet: http://www.iro.umontreal.ca/ ~lapalme/ift6281/sparql-1_1-cheatsheet.pdf