組み込み関数 : 文字列系
• strlen
• substr
• ucase
• lcase
• strstarts
• strends
• contains
• strbefore
• strafter
• encode_for_URI
• concat
• langmatches
• regex
• replace
組み込み関数 : 集約系
• COUNT
• SUM
• MIN
• MAX
• AVG
• SAMPLE
• GROUP_CONCAT
GROUP_CONCAT
変数に複数の値が関連付けら れているとき、それらを指定 のデリミタ(省略時には空 白)を用いて列挙した文字列 を返す。
例えば、?xに1,5,3,9が関連付 けられているときは、
GROUP_CONCAT(?x)で、
"1 5 3 9"が得られる。
組み込み関数 : 数値演算 / 日付系
数値演算
• abs
• round
• ceil
• floor
• rand
日付
• now
• year
• month
• day
• hours
• minutes
• seconds
• timezone / tz
組み込み関数 : ハッシュ / キャスト系
ハッシュ
• md5
• sha1
• sha256
• sha384
• sha512
キャスト
• xsd:boolean
• xsd:double
• xsd:float
• xsd:decimal
• xsd:integer
• xsd:datetime
• xsd:string
文字列型の互換性
下記の文字列関連関数は2引数が必要で、それらの型は 互換でなくてはならない
STRSTARTS, STRENDS, CONTAINS, STRBEFORE, STRAFTER
互換とは
?1. 両者ともに単純リテラルかxsd:string型
2. 両者ともにプレインリテラルで同じ言語タグ
3. 第一引数が言語タグ付きのプレインリテラルで第二 引数が単純リテラルもしくはxsd:string型
キャスト可能な型について
From To str flt dbl dec int dT bool
str Y M M M M M M
flt Y Y Y M M N Y
dbl Y Y Y M M N Y
dec Y Y Y Y Y N Y
int Y Y Y Y Y N Y
dT Y N N N N Y N
bool Y Y Y Y Y N Y
IRI Y N N N N N N
ltrl Y M M M M M M
bool = xsd:boolean dbl = xsd:double flt = xsd:float
str = xsd:string IRI = IRI
ltrl = simple literal dec = xsd:decimal
int = xsd:integer dT = xsd:dateTime
演算子の適用対象の型
=, !=, <, >, <=, >=
数値、単純リテラル、xsd:string、 xsd:boolean、xsd:dateTime
上記の2項演算子については下記の型へ適用できる
さらに、=と!=についてはRDFターム全般に適用できる xsd:booleanの大小については
True > False と定められている
関連ツール
• YASGUI
クエリ構築を支援
http://legacy.yasgui.org/
• Sparklis
クエリを明示的に書かずにデータを閲覧
http://www.irisa.fr/LIS/ferre/sparklis/osparklis.html
• Fuseki
すでに紹介済みですが、手元からSERVICEを用いて好きなエンド ポイントにクエリを発行できる
• SPARQLES
様々なエンドポイントを複数の見地から定期的に調査 http://sparqles.ai.wu.ac.at/
プログラムからアクセス
• Python: SPARQLWrapper
https://rdflib.github.io/sparqlwrapper/
• R: SPARQL Package
https://cran.r-project.org/web/packages/SPARQL/index.html
• Ruby: SPARQL Client for RDF.rb
https://github.com/ruby-rdf/sparql-client
• Java: Apache Jena
http://jena.apache.org/
• Java: Eclipse RDF4J
http://rdf4j.org/
• JavaScript: SPARQL.js etc.
https://github.com/RubenVerborgh/SPARQL.js
curl でアクセス
$ curl -gLH 'Accept: text/tab-separated-values' 'http://ja.dbpedia.org/sparql?
query=select+distinct+*+where+{+%3Chttp%3A%2F%2Fja.dbpedia.org%
2Fresource%2F%E6%9D%B1%E4%BA%AC%E9%83%BD%3E+%3Fp+%3Fo+.++}+LIMI T+100'
SPARQLの仕様はHTTPを用いたAPIも含む
HTTP GETでのアクセス例
仕様ではクエリ無しでHTTP GETするとエンドポイ ントのメタデータが得られることになっているが…
curl でアクセス
$ echo ¥
'select distinct * where { <http://ja.dbpedia.org/resource/東 京都> ?p ?o . } LIMIT 100' ¥
| curl -gLH 'Accept: text/tab-separated-values' ¥
--data-urlencode query@- 'http://ja.dbpedia.org/sparql'
HTTP POSTでのアクセス例
課題
• 人口の多い順に列挙
• 各国の首相を列挙
• 国ごとの最高峰とその高さや場所を列挙
• DBpedia Japaneseの山に関する情報でWikidata にも情報があるものを列挙する
• さらにWikidataからの情報も収集する
エンドポイントは http://query.wikidata.org/sparql
国内のエンドポイントを探す
• http://wp.lodosaka.jp/tool/searchdata/
• http://succi.jp/blog/?p=1437
• https://data.city.osaka.lg.jp/api/
• http://data.allie.dbcls.jp/
• http://lsd.dbcls.jp/
• http://integbio.jp/rdf/
生命科学分野の話題
• 比較的早いうちからRDF化が行われている
• 参考: http://id.nii.ac.jp/1001/00163747/
(情報処理学会員以外は2018年6月まで有料)
• 例のLODクラウドでもそれなりのボリューム
• 国内でも最近活発に研究・開発
• 筆者所属のDBCLSはハッカソンを定期的に開催
• 参加自由ですので、ぜひ!
• http://wiki.lifesciencedb.jp/mw/SPARQLthon