はじめに
Apache Jena ARQ は SPARQL プロセッサですが、 Turtle や RDF/XML などのファイルだけでなく CSV を読み込む機能がついています。この機能を使って CSV を RDF に変換する方法を紹介します。
準備
- Apache Jena ARQ をインストールしておく
手順
1)以下の mapping.rq ファイルを作成、 UTF-8 で保存する
BASE <https://gist.githubusercontent.com/frogcat/a8fdbf19a55c2f717d30/raw/3cc12c692f3ee8e17a4743b97802ee17747128fc/20150728.csv>
PREFIX : <#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX schema: <http://schema.org/>
CONSTRUCT {
?subject
a schema:Place ;
schema:name ?name_ja ;
schema:geo [
schema:longitude ?lng ;
schema:latitude ?lat
]
}
FROM <>
WHERE {
?s :名称 ?name ; :X ?lng ; :Y ?lat ; :施設ID ?id
BIND (STRLANG(?name,"ja") as ?name_ja)
BIND (IRI(CONCAT("http://example.org/",STR(?id))) as ?subject)
}
2)つぎのコマンドを実行する
$ arq --query mapping.rq > result.ttl
3)result.ttl に変換結果が保存される
@prefix : <https://gist.githubusercontent.com/frogcat/a8fdbf19a55c2f717d30/raw/3cc12c692f3ee8e17a4743b97802ee17747128fc/20150728.csv#> .
@prefix schema: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<http://example.org/30204>
a schema:Place ;
schema:geo [ schema:latitude "34.6348221388889"^^xsd:double ;
schema:longitude "135.50539225"^^xsd:double
] ;
schema:name "松虫中学校"@ja .
<http://example.org/30198>
a schema:Place ;
schema:geo [ schema:latitude "34.6322356666667"^^xsd:double ;
schema:longitude "135.512972861111"^^xsd:double
] ;
schema:name "阿倍野小学校"@ja .
(以下省略)
解説
CSV から RDF へのマッピング
Apache Jena ARQ は独自の CSV-RDF マッピングルール を用意しており、入力として指定された URL が CSV っぽいときには CSV を RDF に変換して読み込んでくれます。
SPARQL CONSTRUCT
SPARQL Endpoint に SELECT を投げる使い方が一般的ですが、既存のデータを適切な RDF に整形する目的であれば SPARQL CONSTRUCT はとても便利です。IBM Developer Works 既存のデータをセマンティック Web で利用する などをご覧ください。
課題
- CSV-RDF マッピングは ARQ の独自仕様 ※
- ARQ では UTF-8 以外の CSV を読むことができない > 日本で主流の Shift_JIS CSV をどうする?
- CSV の一行目が項目ラベルとして使われる、というルールを守れるかどうか?
※ W3C : Generating RDF from Tabular Data on the Web として標準化が進められているので、将来的には各種の SPARQL プロセッサに同様の機能が実装されるかもしれません。なお ARQ の CSV-RDF マッピングルールは ARQ の独自仕様ですが、 minimal mode とだいたい同じなので、この点はあまり心配しなくてもいいかもしれません。
(その2につづくかも)