コモンズ構造化データの整備と活用

### - コモンズ利用のヒント5
[コモンズ構造化プロジェクト](https://commons.wikimedia.org/wiki/Commons:Structured_data/ja)の概況についてはよろしければ[過去記事（コモンズ構造化プロジェクトの状況）](https://qiita.com/higa4/items/b1bb7d50f0d595576b9c)をご参照ください。ここでは浮世絵に関わるデータを実際に登録して検索する例を紹介します。
## 1 はじめに
[前回](https://qiita.com/higa4/items/4578a8666cb8a22c29ec)は構造化データをウィキデータ側に置きました。ウィキデータはMediawikiの拡張であるWikibase上で動作していますが、コモンズ自体にもWikibaseは設置されています。それがコモンズ構造化データといわれるものです。今回はコモンズ側にデータを登録します。

## 2 何を登録するか
[シリーズ3回目の記事](https://qiita.com/higa4/items/1a4fd4d5d1b2aebfd6d3#51-%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E3%82%B3%E3%83%A2%E3%83%B3%E3%82%BA%E3%81%8C%E5%8F%96%E3%82%8A%E6%89%B1%E3%81%86%E5%AF%BE%E8%B1%A1%E3%81%AE%E7%B2%92%E5%BA%A6)で触れたように、コモンズ側では基本的に画像ファイルのライセンスなど主にデジタルコピーとしての属性と写し取られたコンテンツの題材を登録します。
具体的な登録方法や範囲については[データモデル](https://commons.wikimedia.org/wiki/Commons_talk:Structured_data/Modeling)や[使用するプロパティ](https://commons.wikimedia.org/wiki/Commons:Structured_data/Properties_table)の議論が行われていますが、意見が分かれていてまだ収束する方向には至っていないように思われます。
題材をいろいろ登録することでそれをキーワードとして検索できるようになりますが、例えば「武者絵」のようなジャンルはウィキデータ側では題材としてではなく構造化された文（プロパティと値のセット）として題材とは区別して登録します。こうして区別しておくことで文字列だけによるフラットな検索ではなく、「ジャンルが武者絵である」かつ「題材が源義経である」といった意味を踏まえた的確な検索ができることになります。
このあたりは個人的には題材以外でもある程度内容に関わるデータも試験的に構造化した形で「文」として入力しています。具体的には以下のような内容です：
分類：木版画、デッサン、肉筆浮世絵、etc.
ジャンル：武者絵、役者絵、子供絵、etc.
作者：オリジナル作品の作者
シリーズ名：揃物の名前
画像内の相対位置：登録した題材の位置を指定
題材の展望位置：写し取られている風景などを望む（推定）位置

これらは本来ウィキデータ側に登録して連携するのが正しい形だとは思いますが、浮世絵には作品のタイトルがよく分からないものも多く、ウィキデータには最低限名前に相当するラベルが無いと登録することができません。そのため現時点ではコモンズ側にある程度の文を試験的に登録しています。
## 3 対話的に登録してみる
ファイルページの中段あたりにあるタブ2つがコモンズ構造化データの入力画面になります。アップロードウィザードの最後にも出てくる入力項目ですが、何を入れたら良いのか戸惑われた方もおられるかもしれません。
（ファイル情報タブ）
![](https://i.imgur.com/Et6erWM.png)
このファイルのキャプション（ファイルを説明する情報）をフリーテキストで記述します。言語ごとに入力できます。入力桁数は5文字以上必要です。タイトルや説明との使い分けが曖昧なため、実際のところあまり入力されていません。
（構造化データタブ）
![](https://i.imgur.com/Abfd9I8.png)
題材欄にはこの画像ファイルに描写されているものをフリーテキストではなくウィキデータにある項目名で記述します。上にスクロールして[このページの画像](https://commons.wikimedia.org/wiki/File:Mitate_musha_rokkasen_(Warriors_Viewed_as_the_Six_Immortal_Poets)_(BM_1906,1220,0.1335).jpg)を見てみます。
![](https://i.imgur.com/j8HxGQ6.png)
「熊谷直実」は登録されていましたが「源義経」が未登録なのでこれを入れてみます。（2020/12/13追記：「源頼朝」の間違いでした。データは訂正しましたが、都合により説明はこのままとさせて頂きます。）
![](https://i.imgur.com/DuOg5U4.png)
候補がウィキデータ項目からいくつか表示されます。先頭が目的のものなのでこれを選びます。
![](https://i.imgur.com/slLD2dC.png)
「変更を公開」をクリックして登録完了。
### 3.1 [wd image position](https://wd-image-positions.toolforge.org/)連携ツールの有効化
題材が複数登録されている場合、予備知識のないひとにはどちらがどれを指しているのか区別がつきづらい場合があります。そんな時のために題材の位置を示すツールを紹介します。

コモンズ上の自分のユーザーページ直下にcommon.jsというページを作って（具体的には下記の位置）
```https://commons.wikimedia.org/wiki/User:（自分のアカウント名）/common.js```
下記スクリプトをコピペして保存します。
```mw.loader.load( 'https://commons.wikimedia.org/w/index.php?title=User:Lucas_Werkmeister/wd-image-positions.js&action=raw&ctype=text/javascript' );```
これで有効化は完了です。
### 3.2 題材の位置を矩形で指定
上述の操作でこのツールを有効化すると[ファイルページの画像](https://commons.wikimedia.org/wiki/File:Mitate_musha_rokkasen_(Warriors_Viewed_as_the_Six_Immortal_Poets)_(BM_1906,1220,0.1335).jpg)の下部に「Add a Structured Data region」ボタンが現れます。これを選びます。
![](https://i.imgur.com/mb8eFyt.png)
ツール画面に遷移します。初回は右上でログインします。（ウィキメディア共通ログインです）
![](https://i.imgur.com/gJM8bIO.png)
「許可」します。
![](https://i.imgur.com/AVp6Fls.png)
ログイン後に改めてツールの画面に戻ってリロードすると、画像の下部に題材として登録された項目が表示されます。
![](https://i.imgur.com/6V0DkmJ.png)
位置を指定する項目名の右隣「add region」ボタンをクリックします。
![](https://i.imgur.com/F1cKP86.png)
この題材がどの位置に描かれているか、位置を指定する矩形が初期表示されます。境界線や角をドラッグしたり、全く新しい位置をドラッグして新たに引き直したりして、目的のものを囲みます。
![](https://i.imgur.com/mbgD8n4.png)
OKなら「use this region」ボタンを押して終了です。他の項目も同様に位置を指定します。
### 3.3 題材位置の表示
[コモンズのファイルページ](https://commons.wikimedia.org/wiki/File:Mitate_musha_rokkasen_(Warriors_Viewed_as_the_Six_Immortal_Poets)_(BM_1906,1220,0.1335).jpg)に戻ってリロードし、画像上にマウスカーソルを持っていくと、指定済みの矩形上に来た時に黄色枠の矩形と名称を表示します。（選択状態の矩形枠が太く表示されます）
![](https://i.imgur.com/pdL75H4.png)
さらにこの矩形をクリックすると該当するウィキデータ項目が開きます。
![](https://i.imgur.com/HY0yGqZ.png)
[ファイルページ](https://commons.wikimedia.org/wiki/File:Mitate_musha_rokkasen_(Warriors_Viewed_as_the_Six_Immortal_Poets)_(BM_1906,1220,0.1335).jpg)に戻って「構造化データ」タブを開いてみます。
![](https://i.imgur.com/ljvBWhK.png)
修飾子「画像内の相対位置」プロパティに対して矩形の四隅の相対位置が登録されています。

## 4 一括登録してみる
### 4.1 ツールの有効化
個人設定＞ガジェット　より下記をチェックして「AC/DC」というツールを有効化します。
![](https://i.imgur.com/83hfB6D.png)
これはカテゴリまたはPagePile（後述）単位で一括して構造化データをコモンズに登録するツールです。事前に各ファイルページをカテゴリに集めておいて、そのカテゴリページ上で操作すると便利です。
### 4.2 文（ジャンルが子供絵）の登録
別の方が集めてくれた「[Children by Utagawa Kuniyoshi](https://commons.wikimedia.org/wiki/Category:Children_by_Utagawa_Kuniyoshi)」というカテゴリページでその配下のファイルページに全て「子供絵」というジャンルを登録してみます。
ガジェットを有効化したので左サイドのメニュー中段あたりに「AC/DC」が表示されています。これを選びます。
![](https://i.imgur.com/eM58bsi.png)
すると「AC/DC」のポップアップが開きます。
![](https://i.imgur.com/Mag65SP.png)
通常は題材欄に題材を入力しますが、ここでは「ジャンルが子供絵」という文を登録したいので「文を追加」ボタンをクリックします。
![](https://i.imgur.com/3i6prdv.png)
まずプロパティの名称「ジャンル」を入力します。
![](https://i.imgur.com/4U4RDFO.png)
ウィキデータから候補が表示され（ここでは1件のみ）それを選びます。
![](https://i.imgur.com/JEhSH9O.png)
次にジャンルの値の入力待ちとなるので「子供絵」を入力します。
![](https://i.imgur.com/ri1gNUH.png)
ウィキデータから候補が表示され（ここでは1件のみ）それを選びます。File to editの下にある「…」を選んで
![](https://i.imgur.com/coEbGk2.png)
「Load category」を選びます。
![](https://i.imgur.com/LMWx09E.png)
現在いるカテゴリが表示されるのでそのまま「OK」。
![](https://i.imgur.com/CfGtgTY.png)
このカテゴリにあるファイルページが一覧表示されます。不要なページがあれば右端の「X」で削除できます。ここではそのまま「変更を公開」。
![](https://i.imgur.com/2JoIvW4.png)
一括登録処理が始まり、終わったらポップアップは自動的に閉じます。
![](https://i.imgur.com/eqZNYO9.png)
これで「ジャンルは子供絵」という文が登録できました。しかし、これはこのカテゴリ直下のファイルページにしか適用されません。ひとつ下にはさらにいくつかサブカテゴリがあります。
![](https://i.imgur.com/ZeNK9qa.png)
サブカテゴリも含めて一括処理する場合はPagePileという概念を利用します。[PetScan](https://petscan.wmflabs.org/)というツールを使うと様々な条件指定が可能で、その条件に一致するファイルページの一覧表(PagePile)は一意のIDを付けて保存されるため、そのIDを介して一括して処理を行えます。
### 4.3 [PetScan](https://petscan.wmflabs.org/)でPagePileを作成しIDを取得する
[PetScan](https://petscan.wmflabs.org/)の画面は6つのタブに分かれています。まず1つ目「カテゴリ」ページで対象プロジェクト、カテゴリ深度（サブカテゴリを何階層下まで対象にするか）、対象カテゴリなどを指定します。
![](https://i.imgur.com/NaVno8s.png)
2つ目「ページ情報」タブでページの種類として「ファイル」を指定します。
![](https://i.imgur.com/KPqj4pk.png)
6つ目「出力」タブで出力形式に「PagePile」を選んで「実行」。
![](https://i.imgur.com/ECLrXHd.png)
画面が自動的に2回遷移します。最終的に下記のような画面になり、左上にある赤枠の数字がPagePileのIDです。このリストは恒久保存されるのでPagePileIDに対応している別のアプリでも利用することができます。
![](https://i.imgur.com/gj9O2cn.png)
### 4.4 AC/DCに戻る
カテゴリページ左サイドのメニューから再度「AC/DC」を選んで、今度は「Load PagePile」ボタンを押して上記で取得したPagePileのID「33151」を入力します。
![](https://i.imgur.com/CYs1xJE.png)
件数がやや多い(100件以上)ので大丈夫か聞いてきましたが、ここでは十分確認しているので「OK」。なお、管理者などのウォッチリストの監視対象に該当していた場合、警告が飛んでくる場合があるので大量処理にはご注意ください。
![](https://i.imgur.com/qFHhp6d.png)
対象一覧が表示されるので「変更を公開」。
![](https://i.imgur.com/iaIMWQ3.png)
この時、現在のカテゴリの直下にあるファイルページは既に登録済みのため、本来は対象から除外しておくべきですが、同じ値を登録しようとすると単純に処理をスキップするだけなので、このまま実行します。これでサブカテゴリも含め全てのページに登録できました。

## 5 検索してみる
今回操作分を含め、事前にある程度構造化データを登録済みなのでその検索例をいくつか紹介します。
### 5.1 [Structured Search](https://hay.toolforge.org/sdsearch/)
サードパーティ製のコモンズ構造化データを元にした検索ツールです。検索手段としては[WikibaseCirrusSearch](https://www.mediawiki.org/wiki/Help:Extension:WikibaseCirrusSearch/ja)というAPIと[WCQS](https://wcqs-beta.wmflabs.org/)というSPARQLエンドポイントの2種類が用意されており、このツールはAPIの方を使用しています。SPARQLに強くない（私のような）人でも直感的に使える優れたインタフェースです。（願わくばどのような値が入力できるのか、その候補が分かると完璧！）APIはコモンズ標準機能として提供されており、データの更新結果はリアルタイムで反映されるので、データの登録チェックにも使えます。
#### 5.1.1 言語切替
デフォルトでは英語になっているので日本語に切り替えます。
![](https://i.imgur.com/IopNgmg.png)
#### 5.1.2 検索例1
まず、題材として「源義経」が描かれているものを選んでみます。「click to set item」をクリックして
![](https://i.imgur.com/RgVR85X.png)
「源義経」と入力します。ウィキデータ項目から候補が表示されるので先頭のものを選びます。
![](https://i.imgur.com/mVCXALY.png)
「検索」ボタンを押すと[147件見つかりました](https://hay.toolforge.org/sdsearch/#q=haswbstatement:P180=Q310445)。
![](https://i.imgur.com/M0ZsGFe.png)
#### 5.1.3 検索例2
上記はコモンズ全体が対象なので「歌川国芳」の作品に絞り込んでみます。「文」というボタンをクリックし、さらに「click to set property」をクリックして
![](https://i.imgur.com/yFZXbyE.png)
「作者」と入力し、表示されたプロパティの1つ目を選びます。
![](https://i.imgur.com/eScnBqw.png)
「click to set item」をクリックして
![](https://i.imgur.com/ASONBoK.png)
「歌川国芳」と入力し、表示された項目の1つ目を選びます。
![](https://i.imgur.com/iwW0wOU.png)
「検索」ボタンを押します。
![](https://i.imgur.com/U5bT3Qd.png)
[38件見つかりました](https://hay.toolforge.org/sdsearch/#q=haswbstatement:P170=Q317736%20haswbstatement:P180=Q310445)。
![](https://i.imgur.com/WKychj6.png)
歌川国芳は源義経を結構描いていたんですね。
さらに適当な画像をひとつ選ぶと画面右側にそのメターデータが黒地に白でプレビュー表示されます。区別がわかりづらいのですが赤枠部分が登録されているコモンズ構造化データの内容です。
![](https://i.imgur.com/nzqXjhL.png)
題材にある「武蔵坊弁慶」を選ぶと[弁慶が描かれた浮世絵が96件一覧表示](https://hay.toolforge.org/sdsearch/#q=haswbstatement:P180=Q316898)されました。なお、この操作では「作者が歌川国芳である」という文は外れてしまうので、現在登録されている全ての浮世絵師による弁慶が表示されています。
![](https://i.imgur.com/Xls4gZx.png)
このようにキーワードで縦横に関係をたどって行けるのも構造化データの面白いところです。
#### 5.1.4 検索例3
元の検索条件に戻って、「題材が源義経」という条件を外してみます。各条件右端の(X)をクリックするとその条件を削除できます。その後「検索」すると4741件見つかりました。これが現在コモンズにある浮世絵のうち「作者が歌川国芳」という文が登録されたものになります。（同じ作品の重複もあります）
![](https://i.imgur.com/4pvOSF1.png)
これだけ件数があると検索のし甲斐があります。ジャンルがどこまで正確に登録されているか細かい検証はできていませんが、主なジャンルで検索してみると2020年12月現在[武者絵が1046件](https://hay.toolforge.org/sdsearch/#q=haswbstatement:P170=Q317736%20haswbstatement:P136=Q11546300)、[役者絵が799件](https://hay.toolforge.org/sdsearch/#q=haswbstatement:P170=Q317736%20haswbstatement:P136=Q616973)、[美人画が227件](https://hay.toolforge.org/sdsearch/#q=haswbstatement:P170=Q317736%20haswbstatement:P136=Q284521)、[子供絵が112件](https://hay.toolforge.org/sdsearch/#q=haswbstatement:P170=Q317736%20haswbstatement:P136=Q11447860)登録されていました。

### 5.2 [WCQS](https://wcqs-beta.wmflabs.org/)による検索
インタフェースはウィキデータの[WDQS](https://query.wikidata.org/)とほぼ同じです。2020年12月時点ではまだ試作版の位置付けでありデータは一週間単位程度で更新されます。また、大量データの処理には時間が掛かったりエラーとなる場合があります。
#### 5.2.1 検索例4
「題材の展望位置」という文（座標）が登録されていれば[こちら](https://wcqs-beta.wmflabs.org/#%23%20%E3%80%8C%E4%BD%9C%E8%80%85%E3%80%8D%28P170%29%3D%E3%80%8C%E6%AD%8C%E5%B7%9D%E5%9B%BD%E8%8A%B3%E3%80%8D%28Q317736%29%E3%81%A7%E3%80%8C%E9%A1%8C%E6%9D%90%E3%81%AE%E5%B1%95%E6%9C%9B%E4%BD%8D%E7%BD%AE%E5%BA%A7%E6%A8%99%E3%80%8D%28P1259%29%E3%81%8C%E3%81%82%E3%82%8B%E3%82%82%E3%81%AE%E3%81%AE%E3%83%9E%E3%83%83%E3%83%97%0A%23defaultView%3AMap%0ASELECT%20%3Ffile%20%3Fpov_coords%20%3Fimage%20WHERE%20%7B%0A%20%20%3Ffile%20wdt%3AP170%20wd%3AQ317736%20%3B%0A%20%20%20%20%20%20%20%20wdt%3AP1259%20%3Fpov_coords%20%3B%0A%20%20%20%20%20%20%20%20schema%3AcontentUrl%20%3Furl%20%3B%0A%20%20bind%28iri%28concat%28%22http%3A%2F%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2F%22%2C%20wikibase%3AdecodeUri%28substr%28str%28%3Furl%29%2C53%29%29%29%29%20AS%20%3Fimage%29%0A%7D)のようにマップ上に落とすこともできます。
![](https://i.imgur.com/G2sLBp1.png)
#### 5.2.2 検索例5
こちらはコモンズ構造化データとウィキデータの連携サンプルで、[歌川国芳の作品に描かれた題材の位置をWikidataから取得して地図上に可視化](https://wcqs-beta.wmflabs.org/#%23%20%E6%AD%8C%E5%B7%9D%E5%9B%BD%E8%8A%B3%E3%81%AE%E4%BD%9C%E5%93%81%E3%81%AB%E6%8F%8F%E3%81%8B%E3%82%8C%E3%81%9F%E9%A1%8C%E6%9D%90%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%82%92Wikidata%E3%81%8B%E3%82%89%E5%8F%96%E5%BE%97%E3%81%97%E3%81%A6%E5%9C%B0%E5%9B%B3%E4%B8%8A%E3%81%AB%E5%8F%AF%E8%A6%96%E5%8C%96%0A%23defaultView%3AMap%0ASELECT%20%3Ffile%20%3Fimage%20%3FdepictionLabel%20%3Fcoord%20WHERE%20%7B%0A%20%20%3Ffile%20wdt%3AP170%20wd%3AQ317736%20.%0A%20%20%3Ffile%20wdt%3AP180%20%3Fdepiction%20.%0A%20%20%3Ffile%20schema%3AcontentUrl%20%3Furl%20.%0A%20%20SERVICE%20%3Chttps%3A%2F%2Fquery.wikidata.org%2Fsparql%3E%20%7B%0A%20%20%20%20%3Fdepiction%20wdt%3AP625%20%3Fcoord.%0A%20%20%20%20SERVICE%20wikibase%3Alabel%20%7B%0A%20%20%20%20%20%20%20%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cja%22%20.%0A%20%20%20%20%20%20%20%20%3Fdepiction%20rdfs%3Alabel%20%3FdepictionLabel%20.%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20bind%28iri%28concat%28%22http%3A%2F%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2F%22%2C%20replace%28substr%28str%28%3Furl%29%2C53%29%2C%22_%22%2C%22%2520%22%29%29%29%20AS%20%3Fimage%29%0A%7D)したものです。
![](https://i.imgur.com/jCIbIZp.png)
SPARQLはこうしたエンドポイントどうしの連携(federation)がしやすい点が魅力です。

## 6 まとめ
ここまで[ウィキテキストとテンプレートによる表現](https://qiita.com/higa4/items/1a4fd4d5d1b2aebfd6d3)、[ウィキデータ連携](https://qiita.com/higa4/items/4578a8666cb8a22c29ec)、コモンズ構造化データという3つの層について紹介してきました。過渡期でもあり明確な使い分けがまだできていないのでまわりくどい説明になってしまいましたが何かしら参考になれば幸いです。

## 7 関連情報
- [PetScanの説明](https://ja.wikipedia.org/wiki/Wikipedia:PetScan)
- [PetScanサイト](https://petscan.wmflabs.org/)
- [wd image position](https://wd-image-positions.toolforge.org/)（画像内の題材の位置を構造化データとして登録するツール）
- [Structured Search](https://hay.toolforge.org/sdsearch/)（コモンズ構造化データの検索ツール）
- [WikibaseCirrusSearch](https://www.mediawiki.org/wiki/Help:Extension:WikibaseCirrusSearch/ja)（コモンズ構造化データの検索API）
- [WCQS](https://wcqs-beta.wmflabs.org/)（コモンズ構造化データの検索用SPARQLエンドポイント）

## 8 関連記事
- [メディアファイルをコモンズに一括アップロードするPattypan](https://qiita.com/higa4/items/19a2b07fc97a5a3e62c2) - コモンズ利用のヒント1
- [コモンズのカテゴリを整理してアクセス統計を取るまで](https://qiita.com/higa4/items/b6fe06414a664a949118) - コモンズ利用のヒント2
- [コモンズのテンプレートでウィキデータ連携](https://qiita.com/higa4/items/1a4fd4d5d1b2aebfd6d3) - コモンズ利用のヒント3
- [コモンズとウィキデータで浮世絵を整理する](https://qiita.com/higa4/items/4578a8666cb8a22c29ec) - コモンズ利用のヒント4