概要

本章では、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(更新日)や所属するコレクション、プロバイダなどの情報が含まれます。

データの構造を簡略化すると以下のようになります。

?chojps:sourceInfo?surceIssnccfhhoeemmaa::diastPeaMrotdOiffied?col"l2e0c2t3i-o0n8-01"

このように、各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)

クエリの解説

  1. ?cho jps:sourceInfo ?sourceInfo: CHO(文化遺産オブジェクト)からソース情報を取得します。
  2. ?sourceInfo schema:dateModified ?date: ソース情報に関連付けられた更新日を取得します。
  3. ?sourceInfo schema:isPartOf ?collection: ソース情報が属するコレクションを取得します。
  4. FILTER(?date = "2023-08-01"^^xsd:date): 更新日が指定した日付に一致するものだけに絞り込みます。日付のフィルタは、xsd:date型としてキャストして比較しています。
  5. GROUP BY ?collection: コレクション単位でグループ化し、COUNT(?cho)で各コレクションに属するアイテム数を集計します。
  6. 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ツールです。以下の手順で実行できます。

  1. YASGUIにアクセスします(例: https://yasgui.triply.cc/)。
  2. エンドポイントに https://jpsearch.go.jp/rdf/sparql/ を設定します。
  3. 上記のクエリをエディタに貼り付けます。
  4. 「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)

出力結果の例

クエリの実行結果として、以下のような形式のデータが得られます。

collectioncount
https://jpsearch.go.jp/collection/xxx11500
https://jpsearch.go.jp/collection/xxx2800
https://jpsearch.go.jp/collection/xxx3350

各行は、指定した日に更新されたアイテムが属するコレクションと、そのコレクションに属するアイテムの件数を表しています。この結果から、どのコレクションのデータが集中的に更新されたかを把握できます。

活用のポイント

このクエリは、ジャパンサーチのデータ更新状況を把握するために役立ちます。例えば、以下のような活用が考えられます。

  • データ更新のモニタリング: 定期的にクエリを実行し、データの更新傾向を把握する。
  • コレクションの分析: どのコレクションが活発に更新されているかを確認し、データ連携の状況を分析する。
  • 障害検知: 通常更新されるべきコレクションが更新されていない場合に、問題を早期に発見する。

関連記事