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 "richard49@hotmail.com" . ab:cindy ab:homeTel "(245) 646-­‐5488" . ab:cindy ab:email "cindym@gmail.com" . ab:craig ab:homeTel "(194) 966-­‐1505" . ab:craig ab:email "craigellis@yahoo.com" . ab:craig ab:email "c.ellis@usairwaysgroup.com" . 講義概要
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 "richard49@hotmail.com" . ab:cindy ab:homeTel "(245) 646-­‐5488" . ab:cindy ab:email "cindym@gmail.com" . ab:craig ab:homeTel "(194) 966-­‐1505" . ab:craig ab:email "craigellis@yahoo.com" . ab:craig ab:email "c.ellis@usairwaysgroup.com" . 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 "richard49@hotmail.com" . ab:cindy ab:homeTel "(245) 646-­‐5488" . ab:cindy ab:email "cindym@gmail.com" . ab:craig ab:homeTel "(194) 966-­‐1505" . ab:craig ab:email "craigellis@yahoo.com" . ab:craig ab:email "c.ellis@usairwaysgroup.com" . 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 "richard49@hotmail.com" . ab:cindy ab:homeTel "(245) 646-­‐5488" . ab:cindy ab:email "cindym@gmail.com" . ab:craig ab:homeTel "(194) 966-­‐1505" . ab:craig ab:email "craigellis@yahoo.com" . ab:craig ab:email "c.ellis@usairwaysgroup.com" . 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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-­‐5488" . d:i9771 ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:email "craigellis@yahoo.com" . d:i8301 ab:email "c.ellis@usairwaysgroup.com" . 講義概要
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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-­‐5488" . d:i9771 ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:email "craigellis@yahoo.com" . d:i8301 ab:email "c.ellis@usairwaysgroup.com" . 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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-­‐5488" . d:i9771 ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:email "craigellis@yahoo.com" . d:i8301 ab:email "c.ellis@usairwaysgroup.com" . 演習問題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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-­‐5488" . d:i9771 ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-­‐5486" . d:i8301 ab:email "craigellis@yahoo.com" . d:i8301 ab:email "c.ellis@usairwaysgroup.com" . 講義概要
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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-­‐5488" . d:i9771 ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-­‐5486" . d:i8301 ab:email "craigellis@yahoo.com" . d:i8301 ab:email "c.ellis@usairwaysgroup.com" . 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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-­‐5488" . d:i9771 ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-­‐5486" . d:i8301 ab:email "craigellis@yahoo.com" . d:i8301 ab:email "c.ellis@usairwaysgroup.com" . 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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" . d:i9771 ab:lastName "Marshall" . d:i9771 ab:homeTel "(245) 646-­‐5488" . d:i9771 ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" . d:i8301 ab:lastName "Ellis" . d:i8301 ab:workTel "(245) 315-­‐5486" . d:i8301 ab:email "craigellis@yahoo.com" . d:i8301 ab:email "c.ellis@usairwaysgroup.com" . 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 "richard49@hotmail.com" . d:i9771 ab:firstName "Cindy" ; ab:lastName "Marshall" ; ab:email "cindym@gmail.com" . d:i8301 ab:firstName "Craig" ; ab:lastName "Ellis" ; ab:email "c.ellis@usairwaysgroup.com" . 講義概要
# 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