鉄道駅LODのSPARQLエンドポイントを実験的に公開しました

先日公開した鉄道オープンデータサイト「[鉄道駅LOD](https://uedayou.net/jrslod/)」のデータを検索できるSPARQLエンドポイントを作成しました。

https://uedayou.net/jrslod/

[鉄道駅LOD](https://uedayou.net/jrslod/) については以下を参照してください。

https://qiita.com/uedayou/items/b5131b5ca930fe0bef69

## 使用上の注意点

今回作成したSPARQLエンドポイントは[特殊な作り方](https://qiita.com/uedayou/items/18f968e3d07b5aa2db50)をしていることもあり、実験的なものです。
やむを得ず公開を停止することもあると思いますが、その時はこちらでお知らせしたいと思います。

## SPARQLエンドポイント

### Webブラウザで検索

以下のページからWebブラウザから検索できます。

https://uedayou.net/ldapinavi/jrslod

このページは以下を利用しています。

https://qiita.com/uedayou/items/93f849e8c57733dddeeb

### Web API

Web APIとしては、以下のURLを使用してください。

```
https://api-jrslod.uedayou.net/sparql
```

データを取得するには、以下のパラメータをつけてください。

| パラメータ | 説明 |
| ---- | ---- |
| format | `xml`か`json` |
| query | URLエンコードされたSPARQLクエリ |

例えば、以下の SPARQLクエリをJSONで取得するには

```
select * where {
  ?s ?p ?o.
}
limit 10
```

上記をURLエンコードして、以下のようなURLとしてアクセスしてください。

```
https://api-jrslod.uedayou.net/sparql?format=json&query=select%20%2A%20where%20%7B%0A%20%20%3Fs%20%3Fp%20%3Fo.%0A%7D%0Alimit%2010
```

## RDFデータについて

鉄道駅LODには、鉄道会社、路線、駅の3種類のデータがあります。
データはRDFになっています。それぞれのRDFの構造を紹介します。
これらは確定したものがないので、今後変更する可能性があります。

### 接頭辞

以後、以下の表のprefixを用いて省略してURIを表記します。

| prefix | name space |
| ---- | ---- |
| rdf: | http://www.w3.org/1999/02/22-rdf-syntax-ns# |
| rdfs: | http://www.w3.org/2000/01/rdf-schema# |
| dcterms: | http://purl.org/dc/terms/ |
| schema: | http://schema.org/ |
| foaf: | http://xmlns.com/foaf/0.1/ |
| owl: | http://www.w3.org/2002/07/owl# |
| geo: | http://www.w3.org/2003/01/geo/wgs84_pos# |
| propja: | http://ja.dbpedia.org/property/ |
| dbpediaowl: | http://dbpedia.org/ontology/ |
| wdt: | http://www.wikidata.org/prop/direct/ |
| ic: | http://imi.go.jp/ns/core/rdf# |

### 駅データのプロパティ

取得できるデータの参考
<https://uedayou.net/jrslod/西日本旅客鉄道/大阪環状線/大阪>

https://uedayou.net/jrslod/西日本旅客鉄道/大阪環状線/大阪

| プロパティ | 値 | 値の型 |
| ---- | ---- | ---- |
| rdf:type | &lt;https://uedayou.net/jrslod/Class/駅&gt; | URI |
| rdfs:label | 駅名 | 文字列 |
| wdt:P833 | 乗り換えが可能な駅のURI | URI |
| wdt:P465 | 路線の色 | 文字列 |
| schema:description | 駅についての説明 | 文字列 |
| wdt:P81 | 路線のURI | URI |
| propja:所属路線 | 路線の名称 | 文字列 |
| wdt:P137 | 鉄道会社のURI | URI |
| dbpediaowl:operatedBy | 鉄道会社の名称 | 文字列 |
| geo:lat | 緯度 | 数値 |
| geo:long | 経度 | 数値 |
| owl:sameAs | 同一駅についての別サイト | URL |
| foaf:homepage | 駅の公式サイト | URL |
| dbpediaowl:address | 住所 | 文字列 |
| ic:住所 | [住所LOD](https://uedayou.net/loa/)のURI | URI |

### 路線データのプロパティ

取得できるデータの参考
<https://uedayou.net/jrslod/西日本旅客鉄道/大阪環状線>

https://uedayou.net/jrslod/西日本旅客鉄道/大阪環状線

| プロパティ | 値 | 値の型 |
| ---- | ---- | ---- |
| rdf:type | &lt;https://uedayou.net/jrslod/Class/路線&gt; | URI |
| rdfs:label | 路線名 | 文字列 |
| wdt:P527, dcterms:relation | 路線内の駅URI | URI |
| wdt:P2043 | 路線距離 | 数値 |
| wdt:P465 | 路線の色 | 文字列 |
| schema:description | 路線についての説明 | 文字列 |
| wdt:P137 | 鉄道会社のURI | URI |
| dbpediaowl:operatedBy | 鉄道会社の名称 | 文字列 |
| owl:sameAs | 同一路線についての別サイト | URL |
| foaf:homepage | 路線の公式サイト | URL |

### 鉄道会社データのプロパティ

取得できるデータの参考
<https://uedayou.net/jrslod/西日本旅客鉄道>

https://uedayou.net/jrslod/西日本旅客鉄道

| プロパティ | 値 | 値の型 |
| ---- | ---- | ---- |
| rdf:type | &lt;https://uedayou.net/jrslod/Class/鉄道会社&gt; | URI |
| rdfs:label | 会社名 | 文字列 |
| wdt:P527 | 鉄道会社が運営する路線 | URI |
| schema:description | 会社についての説明 | 文字列 |
| owl:sameAs | 同一会社についての別サイト | URL |
| foaf:homepage | 会社の公式サイト | URL |
| skos:altLabel | 会社の別名 | 文字列 |
| wdt:P2002 | 会社のTwitter ID | 文字列 |
| wdt:P2397 | 会社のYouTubeチャンネルID(ごく一部にしかありません) | 文字列 | 


### SPARQLクエリのサンプル

例えば、以下のようなクエリであれば、`東京` を含む駅のリストを取得することができます。

```
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select distinct * where{
  ?uri a <https://uedayou.net/jrslod/Class/駅>;
  rdfs:label ?label.
  filter( regex( ?label, '東京' ) )
}
```

ただ、現時点でレスポンスが20秒近くかかることがあるので、データをダウンロードしてから利用することをお勧めします。