SPARQLエンドポイント検索サイト「Linked Data API Navi」

この投稿は、[**LODチャレンジ2022**](https://2022.lodc.jp/)への作品エントリーにために作成しました。

https://2022.lodc.jp/

以前作成した以下の「[**Linked Data API Navi**](https://uedayou.net/ldapinavi/)」の使い方についての投稿と内容が重複する部分がありますが、こちらは作成経緯、サイト構成等や今後についての話が主になります。

記事を読んでいただいて利用してみたいと思う方がいましたら、以下の記事も参照いただければ嬉しいです。

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

# Linked Data API Navi について

<https://uedayou.net/ldapinavi/>

![Linked Data API Navi](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/51e8a0aa-f857-402c-8ee4-da2adceae37b.jpeg)


[**Linked Data API Navi**](https://uedayou.net/ldapinavi/)は、日本語コンテンツが公開されているSPARQLエンドポイントを集約、検索できるWeb API検索サイトです。

https://uedayou.net/ldapinavi/

## 特徴

Linked Data API Navi には以下の特徴があります。

1. オープンライセンスでかつ日本語コンテンツを持つ無料のSPARQLエンドポイントを検索可能
2. RDFデータとして公開されるオープンデータをサイト独自のSPARQLエンドポイントとして公開
3. 独自SPARQLエンドポイントについては全データを検索可能なSPARQLクエリを自動生成
4. LODチャレンジ受賞データセットの集約
5. メンテナンスフリーでサスティナブルなサイト構成

### 1. オープンライセンスでかつ日本語コンテンツを持つ無料のSPARQLエンドポイントを検索可能

現在、多くのSPARQLエンドポイントが公開されています。
百科事典の [DBpedia](https://dbpedia.org/)、知識ベースの [Wikidata](https://www.wikidata.org/) など網羅的のデータを提供するもの、日本政府では、[統計LOD](https://data.e-stat.go.jp/lodw/)、[gBizInfo(旧法人インフォ)](https://info.gbiz.go.jp/index.html)、地方自治体でも、[埼玉県](https://opendata.pref.saitama.lg.jp/)、[横浜市](https://data.city.yokohama.lg.jp/)、[大阪市](https://data.city.osaka.lg.jp/)、文化芸術分野では、[ジャパンサーチ](https://jpsearch.go.jp/)、[メディア芸術データベース](https://mediag.bunka.go.jp/madb_lab/)、など様々なデータが検索、取得可能です。

ただし、日本国内においてはこれらを一元的に調べるサイトはないように思いました。

Linked Data API Navi ではこれらのサイトを検索、ブラウジングが可能にしました。
それぞれのデータセットには、データ種別を示すタグを追加しています。
タグをクリックするとタグ検索が可能です。

また、CORS(Cross-Origin Resource Sharing)に対応するSPARQLエンドポイントについては、このサイト上からSPARQLクエリを発行してデータを直接検索することもできます。

[![DBpedia](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/88f3fe18-eea2-4a28-dfcd-d035b5661151.jpeg)](https://uedayou.net/ldapinavi/dbpedia)

### 2. RDFデータとして公開されるオープンデータをサイト独自のSPARQLエンドポイントとして公開

SPARQLエンドポイントはRDF用のWeb APIですが、SPARQLエンドポイントとしては公開されていないオープンライセンスなRDFデータが数多く公開されています。

Linked Data API Navi では、サイト独自SPARQLエンドポイントとしてこれらを公開して上述のエンドポイントと同じくサイト内で検索できるようにしました。

#### LinkData との連携

オープンデータをRDFデータとして公開する日本最大のWebサイトに[**LinkData**](http://linkdata.org/)があります。

http://linkdata.org/

LinkData は 表形式のデータをRDFデータに半自動で変換するCMS機能があり、CSVやExcelなど様々なファイル形式でデータをホスティングもしてくれるサイトです。

10年以上も安定的にオープンデータを提供するサイトであり、個人だけでなく数多くの地方自治体がこの基盤の上でオープンデータを公開しています。

このサイトのオープンライセンス(パブリックドメイン、CC-BYなど)のRDFデータを収集して、SPARQLエンドポイントを個別に構築して提供しています。

LinkData の更新に応じて定期的に新規SPARQLエンドポイント、SPARQLエンドポイントの更新を行っていますので、LinkData 内でオープンライセンスに設定してRDFデータを公開すると、Linked Data API Navi にも自動的にSPARQLエンドポイントが構築されます。

サイト登録時に、データセットの提供元(自治体関係か)や特徴に応じて(データセット内に DBpedia や Wikidata への参照、緯度経度を持つかどうかなど)自動的にタグを割り振るようにしています。これにより検索されやすいように工夫を行っています。

![タグ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/47ce0a26-c19f-a2ca-9373-2eebebdf81c0.jpeg)

#### RDF変換したオープンデータ

LinkData 以外に、RDFとしては公開されてはいないオープンデータをいくつか自身でRDF化して上記のLinkDataの自動構築方法を利用してSPARQLエンドポイントを公開しています。

2022年10月現在公開されるデータは以下になります。

- [オープンデータのデータベースサイト一覧](https://uedayou.net/ldapinavi/data.go.jp/dbsites)
- [郵便番号データ](https://uedayou.net/ldapinavi/postalcode)
- [英和辞書データ](https://uedayou.net/ldapinavi/ejdict/dic)
- [ミュージアムへ行こう！美術館・博物館データ](https://uedayou.net/ldapinavi/go2museum/museum)

これらは、CSV等で公開されたものをRDF化しています。

RDF化したデータは GitHub で公開するとともに、GitHub Actions を利用して リポジトリへの push をトリガーにSPARQLエンドポイントを自動構築、更新して、Linked Data API Navi 上に反映されるようになっています。

https://github.com/uedayou/ldapinavi-datasets

### 3. 独自SPARQLエンドポイントについては全データを検索可能なSPARQLクエリを自動生成

上述の独自SPARQLエンドポイントは、SPARQLエンドポイントのみ公開すると内部で使われているネームスペース や プロパティ構造が不明で利用者にとってどうすれば目的のデータを抽出できるクエリを作成できるかわからない状態になります。

また、それらを個別に手動でリスト作成するのは LinkData 自体のデータセット数が約1万あり物理的に不可能です。

そこで、変換に用いたRDFファイルを解析して、自動的に使用されているネームスペース、プロパティリストを作成するようにしました。
それに伴い、そのネームスペース、プロパティリストを使用して、自動的にデータ全体を検索できる SPARQLクエリも自動生成して、それを初期クエリとしてフォームに追加しています。
このクエリを元にすればデータの絞り込み等かなり容易になると思います。

[![SPARQLクエリ自動生成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/5e931ab9-7e3f-7768-cf22-68a8e92fc786.jpeg)](https://uedayou.net/ldapinavi/linkdata/rdf1s8978i/272104_care_service_202209)

### 4. LODチャレンジ受賞データセットの集約

現在公開中のSPARQLエンドポイントには、過去LODチャレンジでデータセットとして受賞経験のあるものが複数あります。
Linked Data API Navi では、これらエンドポイントに **LODチャレンジ** タグを追加しました。

また、LinkData にも多数の受賞データセットがあり、これらを元に作成したSPARQLエンドポイントにも **LODチャレンジ** タグを付与しています。

これにより、質の高いデータセットを持つSPARQLエンドポイントを探すことが可能となっています。

<https://uedayou.net/ldapinavi/?query=LODチャレンジ>

![LODチャレンジ受賞データセット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/a710ed84-cb02-4c4c-4435-4dc857ecd4ad.jpeg)


個別のSPARQLエンドポイントのページでは、受賞したこと、受賞年度を表示しています。

[![小倉百人一首のオープンデータ音声リスト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/78df2689-6034-b287-241e-db2e6199eff4.jpeg)](https://uedayou.net/ldapinavi/linkdata/rdf1s8930i/ogura_audio)


### 5. メンテナンスフリーでサスティナブルなサイト構成

SPARQLエンドポイントの構築は、[Virtuoso](https://virtuoso.openlinksw.com/) や [Apache Jena Fuseki](https://jena.apache.org/documentation/fuseki2/) 等を利用することが一般的だと思います。
これらは、サーバインスタンスを用意してインストールや設定、その後の保守など運用にかかるコストが比較的大きい印象です。

独自で提供するSPARQLエンドポイントは、極力運用コストを減らすためにクラウドサービス上でリクエスト毎に逐次SPARQLクエリを実行するプログラムを開発して利用しています。
VirtuosoやFusekiのような常駐サービスではなく常にサーバインスタンスを用意する必要がないため低コストで、かつ完全なリードオンリーエンドポイントのため障害に強い構成になっています。

また、上記のSPARQLエンドポイントのようなサーバサイドでの実行が必要なもの以外は、SPA(Single Page Application) により極力ブラウザ側の実装で処理するようにしました(例えば、検索やページ遷移等)。

その他、クラウドサービス上のマネージドサービスをできるだけ活用し、PaaS(Platform as a Service)により構築しています。
これにより、保守に手がかからず、出来るだけ低コストで、個人でも長く運用し続けられる、持続可能な構成を目指しました。

**Linked Data API Navi** は 主に Amazon Web Service(AWS) 上に構築していますが、AWSでしか実現できないようなマネージドサービスの利用は控え、Google Cloud Platform(GCP) や Microsoft Azure、Oracle Cloud など他社クラウドサービスでの構成も可能なように設計には配慮しました。

サイト構成は以下のようになります。

![サイト構成図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/2e681a6f-0565-371c-c679-f21f2110d135.png)


## 今後について

**Linked Data API Navi** は、SPARQL や Linked Open Data 技術の活用の促進のため、出来るだけ長くサービスを続けられたらと思います。
今後、このサービスをさらに活用してもらえるようにいろいろと改善していくつもりです。
例えば以下のようなことを考えています。

1. Linked Data API Navi の SPARQLエンドポイントを利用した活用事例の作成
2. RDF化されたオープンデータの収集とSPARQLエンドポイントの作成、サイト登録
3. GitHub を利用した RDF化されたオープンデータを募り、自動的にサイト登録される仕組み作り

3番目については、既に RDFファイルの GitHub への push により、SPARQLエンドポイントを自動生成される仕組みがあり、これを利用することにより、第三者のRDFファイルの Pull Request をもらうことで自動的に SPARQLエンドポイントを作ることができる状態にはなっています。

![GitHubを利用した半自動登録](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62575/9abee32b-ed6e-41b3-fd2f-f694e01e4acb.png)


この仕組みを発展させ、サイト登録に必要なメタデータも登録してもらうことにより、自動生成されたSPARQLエンドポイントをサイトに自動登録、検索対象にできるようにし、エコシステム化を進めていきます。

## オープンソースへの貢献

Linked Data API Navi は サイト構成上、セキュリティ面などもあり、全てのソースコードを公開することは難しいですが、サイト内で使用する要素技術は GitHub にコード公開、また、技術資料を Qiita や Zenn に投稿していますので、興味があれば参照ください。

https://github.com/uedayou/opendata-sites

https://github.com/uedayou/oxigraph-sparql-api-serverless

https://github.com/uedayou/quadstore-server-on-aws-serverless

https://github.com/uedayou/jena-sparql-server-aws-serverless

https://zenn.dev/uedayou/articles/8787c281379346

https://zenn.dev/uedayou/articles/22252000441999

https://zenn.dev/uedayou/articles/06f744ac1c4737

https://qiita.com/uedayou/items/18f968e3d07b5aa2db50

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

https://qiita.com/uedayou/items/9e4c6029a2cb6b76de9f