概要
本章では、Japan Search(ジャパンサーチ)のRDFストアに対して、指定した日に更新されたアイテムをコレクション別に集計するSPARQLクエリを紹介します。ジャパンサーチは、日本の多様なデジタルコンテンツのメタデータを統合的に検索できるプラットフォームであり、そのデータはRDF(Resource Description Framework)として公開されています。
SPARQLエンドポイント(https://jpsearch.go.jp/rdf/sparql/)を通じて、これらのデータに対するクエリを実行することができます。
Japan Searchのデータモデル
ジャパンサーチのRDFデータは「利活用スキーマ」と呼ばれるデータモデルに基づいて構成されています。このデータモデルでは、文化財や書籍などの各アイテムは「Cultural Heritage Object(CHO)」として表現されます。各CHOには、jps:sourceInfoを通じてソース情報が関連付けられており、ソース情報にはschema:dateModified(更新日)や所属するコレクション、プロバイダなどの情報が含まれます。
データの構造を簡略化すると以下のようになります。
このように、各CHOのソース情報を辿ることで、更新日やコレクション情報にアクセスできます。
SPARQLクエリ
以下のクエリは、指定した日(例: 2023-08-01)に更新されたアイテムをコレクション別に集計します。
PREFIX jps: <https://jpsearch.go.jp/term/property#>
PREFIX schema: <http://schema.org/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?collection (COUNT(?cho) AS ?count) WHERE {
?cho jps:sourceInfo ?sourceInfo .
?sourceInfo schema:dateModified ?date .
?sourceInfo schema:isPartOf ?collection .
FILTER(?date = "2023-08-01"^^<http://www.w3.org/2001/XMLSchema#date>)
}
GROUP BY ?collection
ORDER BY DESC(?count)
クエリの解説
?cho jps:sourceInfo ?sourceInfo: CHO(文化遺産オブジェクト)からソース情報を取得します。?sourceInfo schema:dateModified ?date: ソース情報に関連付けられた更新日を取得します。?sourceInfo schema:isPartOf ?collection: ソース情報が属するコレクションを取得します。FILTER(?date = "2023-08-01"^^xsd:date): 更新日が指定した日付に一致するものだけに絞り込みます。日付のフィルタは、xsd:date型としてキャストして比較しています。GROUP BY ?collection: コレクション単位でグループ化し、COUNT(?cho)で各コレクションに属するアイテム数を集計します。ORDER BY DESC(?count): 件数の多いコレクションから順に表示します。
日付の範囲指定
特定の日ではなく、日付の範囲を指定したい場合は、FILTERを以下のように変更します。
PREFIX jps: <https://jpsearch.go.jp/term/property#>
PREFIX schema: <http://schema.org/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?collection (COUNT(?cho) AS ?count) WHERE {
?cho jps:sourceInfo ?sourceInfo .
?sourceInfo schema:dateModified ?date .
?sourceInfo schema:isPartOf ?collection .
FILTER(?date >= "2023-08-01"^^xsd:date && ?date <= "2023-08-31"^^xsd:date)
}
GROUP BY ?collection
ORDER BY DESC(?count)
この例では、2023年8月の1か月間に更新されたアイテムをコレクション別に集計しています。
クエリの実行方法
YASGUIを用いた実行
YASGUIは、SPARQLクエリを作成・実行し、結果を可視化するためのウェブベースのGUIツールです。以下の手順で実行できます。
- YASGUIにアクセスします(例: https://yasgui.triply.cc/)。
- エンドポイントに
https://jpsearch.go.jp/rdf/sparql/を設定します。 - 上記のクエリをエディタに貼り付けます。
- 「Run」ボタンをクリックしてクエリを実行します。
結果はテーブル形式で表示され、各コレクションのURIと件数を確認できます。また、YASGUIの「チャート」タブを使用して、棒グラフや円グラフなどで結果を可視化することも可能です。
curlを用いた実行
コマンドラインからcurlを使ってクエリを実行することもできます。
curl -X POST https://jpsearch.go.jp/rdf/sparql/ \
-H "Accept: application/sparql-results+json" \
--data-urlencode "query=PREFIX jps: <https://jpsearch.go.jp/term/property#>
PREFIX schema: <http://schema.org/>
SELECT ?collection (COUNT(?cho) AS ?count) WHERE {
?cho jps:sourceInfo ?sourceInfo .
?sourceInfo schema:dateModified ?date .
?sourceInfo schema:isPartOf ?collection .
FILTER(?date = \"2023-08-01\"^^<http://www.w3.org/2001/XMLSchema#date>)
}
GROUP BY ?collection
ORDER BY DESC(?count)"
Acceptヘッダにapplication/sparql-results+jsonを指定することで、JSON形式で結果を取得できます。Pythonなどのプログラムから利用する場合には、この方法が便利です。
Google Colabを用いた実行
PythonのSPARQLWrapperライブラリを使用して、Google Colab上でクエリを実行することもできます。
from SPARQLWrapper import SPARQLWrapper, JSON
import pandas as pd
sparql = SPARQLWrapper("https://jpsearch.go.jp/rdf/sparql/")
sparql.setQuery("""
PREFIX jps: <https://jpsearch.go.jp/term/property#>
PREFIX schema: <http://schema.org/>
SELECT ?collection (COUNT(?cho) AS ?count) WHERE {
?cho jps:sourceInfo ?sourceInfo .
?sourceInfo schema:dateModified ?date .
?sourceInfo schema:isPartOf ?collection .
FILTER(?date = "2023-08-01"^^<http://www.w3.org/2001/XMLSchema#date>)
}
GROUP BY ?collection
ORDER BY DESC(?count)
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
df = pd.json_normalize(results["results"]["bindings"])
print(df)
出力結果の例
クエリの実行結果として、以下のような形式のデータが得られます。
| collection | count |
|---|---|
| https://jpsearch.go.jp/collection/xxx1 | 1500 |
| https://jpsearch.go.jp/collection/xxx2 | 800 |
| https://jpsearch.go.jp/collection/xxx3 | 350 |
| … | … |
各行は、指定した日に更新されたアイテムが属するコレクションと、そのコレクションに属するアイテムの件数を表しています。この結果から、どのコレクションのデータが集中的に更新されたかを把握できます。
活用のポイント
このクエリは、ジャパンサーチのデータ更新状況を把握するために役立ちます。例えば、以下のような活用が考えられます。
- データ更新のモニタリング: 定期的にクエリを実行し、データの更新傾向を把握する。
- コレクションの分析: どのコレクションが活発に更新されているかを確認し、データ連携の状況を分析する。
- 障害検知: 通常更新されるべきコレクションが更新されていない場合に、問題を早期に発見する。
関連記事
- ジャパンサーチのSPARQLエンドポイントをYasguiで使ってみる - YASGUIを使ったジャパンサーチのSPARQLエンドポイントの利用方法について解説しています。
- Google Colabを用いたジャパンサーチRDFストアに対するSPARQLの実行例 - Pythonを用いたRDFストアの利用方法を紹介しています。