オープンデータの基礎(6)-SparqlEPCUを使って、名古屋市バス停情報LODをいじくる
概要
前回の記事(第5回)でSPARQL言語がおおよそ理解できた(?)ところで、今度は中部大学のSparqlEPCUを利用してみます。
- SparqlEPCU ・・・・LOD活用の支援サイト
- SPARQL Creator ・・SPARQLエディタ
- LOD Browser ・・RDFをGoogleマップ上に簡単マッピング
の3つを組み合わせてSparqlEPCUに登録されている「名古屋市のバス停情報」を利用していろいろいじって見ます。
dbPedia(WikipediaのLOD)と連携した情報の表示までやって見ます。
SparqlEPCUとは?
- SparqlEPCUとはLinked Open Data(LOD)作成及び活用の支援サイトです。
- 中部大学の年岡教授などを中心に開発されているようです。
- LODチャレンジ2012のアプリケーション部門応募作品でもあります。⇒応募詳細リンク
内容に関して引用すると
次の人たちに役立つよう作られています
- LODアプリを体験したい
- LODデータを格納・検索したい
- LODアプリサイトをJavaScriptで簡単に作りたい
そのためにSparqlEPCUでは以下を提供します
- インターネットで共有するRDF格納サイト
- 登録したRDFデータのSparql検索を行うWebページ
- RDF登録・検索のためのJavaScriptライブラリ(RDFmgr)
- RDF登録・検索するJavaScriptサンプルコード
- LODアプリサイトのサンプル
と記載されています。
名古屋市のバス停情報LODを見つける
プロジェクト一覧ページから、さまざまな登録されているLODデータを探すことができます。 その中から「名古屋市交通局時刻データ」を探します。
- 名古屋市交通局時刻データ (Nagoyakotsukyoku)
プロジェクトページ下部の「SPARQL検索」を実行すると、バス停の情報が登録されていることが確認できます。
一覧情報を取得
- ここでSPARQL言語で以下のように指定するとバス停の位置情報一覧が取得できます。
select ?long ?lat (?p0 as ?停留所名カナ) ?label ?type where{ ?s a <http://lodcu.cs.chubu.ac.jp/lodcu#名古屋市バス停>. ?s <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long. ?s <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#停留所名カナ> ?p0. ?s <http://www.w3.org/2000/01/rdf-schema#label> ?label. ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type. } limit 100
いきなり複雑なSPARQL言語が出てきました。
実は、上記SPARQLクエリは、別のアプリケーション「SPARQL Creator」を利用して生成しました。
SPARQL編集ツール「SPARQL Creator」
- SPARQL Creatorも上記、SparqlEPCU を開発した中部大学にて公開されています。
- こちらもLODチャレンジ2014のアプリケーション部門応募作品です。
- SPARQL Creator LODチャレンジ2014
SPARQLエンドポイントのURLを入れるとクラスごとに自動的にSPARQLを生成。 検索結果の表を見ながらGUI的にSPARQLを編集できるツールです。
先ほどの「名古屋市のバス停情報」のSPARQL入力画面によく見ると 「SPARQL CreatorでSPARQLを作成する」というリンクがあります。 ここをクリックするとSPARQL Creatorが立ち上がります。
- SPARQL Creatorの画面
- GUI上でいろいろ選択すると、動的にSPARQLクエリと結果表がリアルタイムに反映されます。
- 生成されたSPARQLクエリをコピーして、テキストエディタなどで編集して、また、SparqlEPCUで実行することで、複雑なSPARQLクエリ生成の負担がかなり軽減されます。
SPARQL【例1】時刻表データに「バス停カナ」を追加する
select distinct * {?s a <http://lodcu.cs.chubu.ac.jp/lodcu#時刻表>. ?s2 a <http://lodcu.cs.chubu.ac.jp/lodcu#名古屋市バス停>. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#発時刻> ?p0. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#休平日> ?p1. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#系統名> ?p2. ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#バス停ID> ?p3. ?s2 <http://lodcu.cs.chubu.ac.jp/lodcu#バス停ID> ?p3; <http://lodcu.cs.chubu.ac.jp/lodcu#停留所名カナ> ?label. } limit 10
SPARQL【例2】バス系統ID:32201【幹神宮2】の停車駅を停車順に表示する。緯度経度もついでに取得
select (?p0 as ?並順) (?p2 as ?系統ID) ?keitoumei (?p1 as ?バス停ID) ?basuteimei (?lat as ?緯度) (?long as ?経度) where{ ?s a <http://lodcu.cs.chubu.ac.jp/lodcu#バス系統>. ?ikisai a <http://lodcu.cs.chubu.ac.jp/lodcu#バス行き先>. ?basutei a <http://lodcu.cs.chubu.ac.jp/lodcu#名古屋市バス停>. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#並順> ?p0. ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#バス停ID> ?p1. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#系統ID> "32201". ?s <http://lodcu.cs.chubu.ac.jp/lodcu#系統ID> ?p2. ?ikisai <http://lodcu.cs.chubu.ac.jp/lodcu#系統ID> ?p2; <http://lodcu.cs.chubu.ac.jp/lodcu#系統名> ?keitoumei. ?basutei <http://lodcu.cs.chubu.ac.jp/lodcu#バス停ID> ?p1; <http://www.w3.org/2000/01/rdf-schema#label> ?basuteimei; <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long; <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat. } order by ?p0 limit 100
SPARQL【例3】バス停ID:03098501 浦里二丁目の休日の時刻表を表示する
select (?p0 as ?発時刻) (?p2 as ?系統名) (?p3 as ?バス停ID) where{ ?s a <http://lodcu.cs.chubu.ac.jp/lodcu#時刻表>. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#バス停ID> "03098501". ?s <http://lodcu.cs.chubu.ac.jp/lodcu#発時刻> ?p0. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#休平日> "休". ?s <http://lodcu.cs.chubu.ac.jp/lodcu#系統名> ?p2. ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#バス停ID> ?p3. }order by ?p2 ?p1 ?p0 limit 100
SPARQL【例4】dbPediaとの連携例、終点のバス停名を元に、同名の鉄道駅の概要を表示
PREFIX dbpedia:<http://ja.dbpedia.org/resource/> PREFIX dbp-owl: <http://dbpedia.org/ontology/> PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> select (?p0 as ?経由等) (?p1 as ?終点) (?p2 as ?起点) (?p3 as ?系統名) ?resid ?comment where{ ?s a <http://lodcu.cs.chubu.ac.jp/lodcu#バス行き先>. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#経由等> ?p0. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#終点> ?p1. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#起点> ?p2. ?s <http://lodcu.cs.chubu.ac.jp/lodcu#系統名> ?p3. ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type. OPTIONAL{ SERVICE <http://ja.dbpedia.org/sparql> {?resid rdf:type dbp-owl:Station; dbp-owl:abstract ?comment. FILTER regex(?resid, ?p1) } } } LIMIT 100