👻

Cultural JapanのRDFストアに格納されている展覧会情報の活用

2023/08/04に公開

概要

Cultural JapanのRDFストアには、展覧会に関する情報が格納されています。rdf:typetype:展覧会を指定する以下のようなクエリを用いて、一覧を取得できます。

PREFIX type: <https://jpsearch.go.jp/term/type/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select distinct * where {
	?s rdf:type type:展覧会;
       rdfs:label ?label . 
}

https://ld.cultural.jp/snorql/?query=select+distinct+*+where+{ %3Fs+rdf%3Atype+type%3A展覧会%3B +++++++rdfs%3Alabel+%3Flabel+.+ } ++

これらの展覧会の情報を活用するための一例について紹介します。

展覧会の一覧

各展覧会は、jps:temporaljps:spatialといった値を持っています。(これらは複数の値を持つ場合があります。)

https://ld.cultural.jp/data/apmoa-exhib-2021-soga

そこで以下のようなクエリにより、展覧会のメタデータを含む、一覧の取得を行うことができます。

PREFIX type: <https://jpsearch.go.jp/term/type/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX schema: <http://schema.org/>
PREFIX jps: <https://jpsearch.go.jp/term/property#>

select distinct 
?s ?label ?access ?image
(GROUP_CONCAT(DISTINCT ?spatial_labels; separator="|") AS ?spacial_label)
(GROUP_CONCAT(DISTINCT ?temporal_labels; separator="|") AS ?temporal_label)
(GROUP_CONCAT(DISTINCT ?jps_temporals; separator="|") AS ?jps_temporal)
(GROUP_CONCAT(DISTINCT IF(BOUND(?descriptions), CONCAT(str(?descriptions), IF(lang(?descriptions) != "", CONCAT("@", lang(?descriptions)), "")), ""); separator="|") AS ?description)
(COUNT(DISTINCT ?workFeatured) AS ?countOfWorkFeatured)
where {
	?s rdf:type type:展覧会;
       rdfs:label ?label . 
  		optional { ?s jps:accessInfo/schema:provider/rdfs:label ?access .  }
  optional { ?s schema:spatial/rdfs:label ?spatial_labels . }
    optional { ?s schema:temporal/rdfs:label ?temporal_labels . }
    optional { ?s jps:temporal/schema:description ?jps_temporals . }
    optional { ?s schema:description ?descriptions . }
      optional { ?s schema:image ?image . }
  optional {?s schema:workFeatured ?workFeatured }
}
group by ?s ?label ?spatial_label ?temporal_label ?description ?jps_temporal ?access ?image
order by ?s

https://ld.cultural.jp/snorql/?query=PREFIX+type%3A+<https%3A%2F%2Fjpsearch.go.jp%2Fterm%2Ftype%2F> PREFIX+rdfs%3A+<http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23> PREFIX+schema%3A+<http%3A%2F%2Fschema.org%2F> PREFIX+jps%3A+<https%3A%2F%2Fjpsearch.go.jp%2Fterm%2Fproperty%23> select+distinct+ %3Fs+%3Flabel+%3Faccess+%3Fimage (GROUP_CONCAT(DISTINCT+%3Fspatial_labels%3B+separator%3D"|")+AS+%3Fspacial_label) (GROUP_CONCAT(DISTINCT+%3Ftemporal_labels%3B+separator%3D"|")+AS+%3Ftemporal_label) (GROUP_CONCAT(DISTINCT+%3Fjps_temporals%3B+separator%3D"|")+AS+%3Fjps_temporal) (GROUP_CONCAT(DISTINCT+IF(BOUND(%3Fdescriptions)%2C+CONCAT(str(%3Fdescriptions)%2C+IF(lang(%3Fdescriptions)+!%3D+""%2C+CONCAT("%40"%2C+lang(%3Fdescriptions))%2C+""))%2C+"")%3B+separator%3D"|")+AS+%3Fdescription) (COUNT(DISTINCT+%3FworkFeatured)+AS+%3FcountOfWorkFeatured) where+{ %3Fs+rdf%3Atype+type%3A展覧会%3B +++++++rdfs%3Alabel+%3Flabel+.+ ++ optional+{+%3Fs+jps%3AaccessInfo%2Fschema%3Aprovider%2Frdfs%3Alabel+%3Faccess+.++} ++optional+{+%3Fs+schema%3Aspatial%2Frdfs%3Alabel+%3Fspatial_labels+.+} ++++optional+{+%3Fs+schema%3Atemporal%2Frdfs%3Alabel+%3Ftemporal_labels+.+} ++++optional+{+%3Fs+jps%3Atemporal%2Fschema%3Adescription+%3Fjps_temporals+.+} ++++optional+{+%3Fs+schema%3Adescription+%3Fdescriptions+.+} ++++++optional+{+%3Fs+schema%3Aimage+%3Fimage+.+} ++optional+{%3Fs+schema%3AworkFeatured+%3FworkFeatured+} } group+by+%3Fs+%3Flabel+%3Fspatial_label+%3Ftemporal_label+%3Fdescription+%3Fjps_temporal+%3Faccess+%3Fimage order+by+%3Fs

複数の値を持ちうるschema:descriptionについて、結果を|でつなぐ、といった処理を加えています。

まとめ

本記事では展覧会の一覧を取得する部分までしか辿りつきませんでした。IIIFコレクションへの変換や、各展覧会の情報の活用などについては、別の記事に記載したいと思います。

Cultural JapanのRDFストアの活用、および、同一のフィールドに複数の値を持ちうるレコードに対する検索を行う際などの参考になりましたら幸いです。

Discussion