🙆‍♀️

RDFストアのトリプル数を数える

2024/05/06に公開

概要

RDFストアのトリプル数を数える方法について、備忘録です。

今回は、ジャパンサーチのRDFストアを例にします。

https://jpsearch.go.jp/rdf/sparql/easy/

トリプル数

以下でトリプル数をカウントできます。

SELECT (COUNT(*) AS ?NumberOfTriples)
WHERE {
  ?s ?p ?o .
}

結果は以下です。

https://jpsearch.go.jp/rdf/sparql/easy/?query=SELECT+(COUNT(*)+AS+%3FNumberOfTriples) WHERE+{ ++%3Fs+%3Fp+%3Fo+. }

本記事の執筆時点(2024年5月6日)において、12億8064万5565トリプルありました。

NumberOfTriples
1280645565

特定のプロパティでどれだけのトリプルが接続されているか

次に、特定のプロパティでどれだけのトリプルが接続されているかをカウントしてみます。以下がクエリ例です。

SELECT ?p (COUNT(*) AS ?count)
WHERE {
  ?s ?p ?o .
}
GROUP BY ?p
ORDER BY DESC(?count)

結果は以下です。

https://jpsearch.go.jp/rdf/sparql/easy/?query=SELECT+%3Fp+(COUNT(*)+AS+%3Fcount) WHERE+{ ++%3Fs+%3Fp+%3Fo+. } GROUP+BY+%3Fp ORDER+BY+DESC(%3Fcount)

schema:descriptionで接続されるトリプルが399,447,925件、約4億件あることがわかります。

p count
schema:description 399447925
rdf:type 84363276
jps:relationType 72908233
jps:value 72214780
schema:name 57377225
schema:provider 52481873

指定したプロパティを使用して、特定のサブジェクトとオブジェクトのタイプの組み合わせをカウントする

上記の打ち合わせの概要を知るにあたり、?subject と ?object が schema:description プロパティによって結びつけられている場合のサブジェクトタイプとオブジェクトタイプの組み合わせをカウントします。

SELECT ?subjectType ?objectType (COUNT(*) AS ?count)
WHERE {
  ?subject schema:description ?object .
  ?subject rdf:type ?subjectType . 
  optional {?object rdf:type ?objectType . }
}
GROUP BY ?subjectType ?objectType
ORDER BY DESC(?count)

結果は以下です。

https://jpsearch.go.jp/rdf/sparql/easy/?query=SELECT+%3FsubjectType+%3FobjectType+(COUNT(*)+AS+%3Fcount) WHERE+{ ++%3Fsubject+schema%3Adescription+%3Fobject+. ++%3Fsubject+rdf%3Atype+%3FsubjectType+.+ ++optional+{%3Fobject+rdf%3Atype+%3FobjectType+.+} } GROUP+BY+%3FsubjectType+%3FobjectType ORDER+BY+DESC(%3Fcount)

type:図書クラスのインスタンスをサブジェクトに持つトリプルが約9,000件ありました。

subjectType objectType count
type:図書 87593194
type:動物標本 47068657
type:植物標本 46548944
type:アクセス情報 33291083
type:雑誌 21643930
type:行政文書 11780814

インスタンスをカウントしてみる

以下のクエリにより、type:図書クラスのインスタンスをサブジェクトに持ち、schema:descriptionをプロパティに持つトリプルの組み合わせをカウントしてみます。

SELECT ?subject (COUNT(*) AS ?count)
WHERE {
  ?subject schema:description ?object .
  ?subject rdf:type type:図書 .
}
GROUP BY ?subject
ORDER BY desc(?count)

結果は以下です。

https://jpsearch.go.jp/rdf/sparql/easy/?query=SELECT+%3Fsubject+(COUNT(*)+AS+%3Fcount) WHERE+{ ++%3Fsubject+schema%3Adescription+%3Fobject+. ++%3Fsubject+rdf%3Atype+type%3A図書+. } GROUP+BY+%3Fsubject ORDER+BY+desc(%3Fcount)

1つのインスタンスが多くのschema:descriptionで接続されるトリプルを持つことがわかります。

subject count
https://jpsearch.go.jp/data/bibnl-20601759 251
https://jpsearch.go.jp/data/bibnl-23328672 213
https://jpsearch.go.jp/data/bibnl-22858450 211
https://jpsearch.go.jp/data/bibnl-20579860 186
https://jpsearch.go.jp/data/bibnl-20919858 171
https://jpsearch.go.jp/data/bibnl-21013375 170
https://jpsearch.go.jp/data/bibnl-20787748 168
https://jpsearch.go.jp/data/bibnl-22866452 165

実際に以下にアクセスしてみると、確かに251件のトリプルを持つことが確認できました。

https://jpsearch.go.jp/data/bibnl-20601759

まとめ

RDFストア内のトリプル数の分析などにあたり、参考になりましたら幸いです。

Discussion