はじめに
この記事は、Wikidataから「日本の首都は?」のように、「○○の××は何か?」ということを調べる方法についての記事です。
他の記事
第3回:URIで得られたJSONの内容
このシリーズの他の記事は、「Wikidata」カテゴリーから飛んでください。
スマホの方は画面右下の「サイドバー」ボタンから、それ以外の方は画面右側のサイドバーから。
今回のテーマ
今回は、APIを使った操作で返ってきたJSONテキストの内容と構造を解説します。
APIで得られたJSONの例
エンティティ
URIで得られたJSONの例を示します。
(必要であれば、第2回の内容も参照してください)
APIサンドボックスが提供されていますので、これも使って試しながらやってください。
例によって、まず毘沙ノ鼻で試します。パラメータは、この通りに設定します。
すると、以下のJSONが返ってきます。
「毘沙ノ鼻」の検索結果
{
"searchinfo": {
"search": "毘沙ノ鼻"
},
"search": [
{
"id": "Q11547503",
"title": "Q11547503",
"pageid": 12687429,
"concepturi": "http://www.wikidata.org/entity/Q11547503",
"repository": "wikidata",
"url": "//www.wikidata.org/wiki/Q11547503",
"display": {
"label": {
"value": "毘沙ノ鼻",
"language": "ja"
}
},
"label": "毘沙ノ鼻",
"match": {
"type": "label",
"language": "ja",
"text": "毘沙ノ鼻"
}
}
],
"success": 1
}
これにざっくりとした説明をつけると、こんな感じです。
前回同様、検索にヒットしたエンティティの情報がリストで返ってきます。
(今回は1つだけヒットしましたが)
前回と違って、構造がかなりシンプルなので、そんなに苦労するところはないと思いますが、注意すべきなのは通称や別名での検索です。
match
実は、今回はラベルだけで検索をかけているわけではないんですね。
例えば、「潮岬」で検索をかけると、以下のエンティティがヒットします。
「潮岬」で検索したときの「Q11417658」の情報
(前略)
{
"id": "Q11417658",
"title": "Q11417658",
"pageid": 12556384,
"concepturi": "http://www.wikidata.org/entity/Q11417658",
"repository": "wikidata",
"url": "//www.wikidata.org/wiki/Q11417658",
"display": {
"label": {
"value": "和歌山県道41号",
"language": "ja"
},
"description": {
"value": "和歌山県の道路",
"language": "ja"
}
},
"label": "和歌山県道41号",
"description": "和歌山県の道路",
"match": {
"type": "alias",
"language": "ja",
"text": "潮岬周遊線"
},
"aliases": [
"潮岬周遊線"
]
},
(後略)
「潮岬周遊線」という文字列でヒットしていることがわかります。
なんかよくわからんリストが紛れ込んでます。
一方、ラベル名「和歌山県道41号」で検索をかけた結果は以下のようになります。
「和歌山県道41号」で検索したときの「Q11417658」の情報
{
"searchinfo": {
"search": "和歌山県道41号"
},
"search": [
{
"id": "Q11417658",
"title": "Q11417658",
"pageid": 12556384,
"concepturi": "http://www.wikidata.org/entity/Q11417658",
"repository": "wikidata",
"url": "//www.wikidata.org/wiki/Q11417658",
"display": {
"label": {
"value": "和歌山県道41号",
"language": "ja"
},
"description": {
"value": "和歌山県の道路",
"language": "ja"
}
},
"label": "和歌山県道41号",
"description": "和歌山県の道路",
"match": {
"type": "label",
"language": "ja",
"text": "和歌山県道41号"
}
}
],
"success": 1
}
このように、同じエンティティでも、複数の文字列がマッチすることがあります。
このとき、通称や別名(今の例だと、「潮岬周遊線」)でヒットした場合、$\verb|match|$の$\verb|type|$が$\verb|alias|$(英語で「別名」の意味)になり、$\verb|match|$の下に$\verb|aliases|$という、別名のリストが現れることに注意してください。
プロパティ
基本的に、プロパティも構造はさほど変わりません(プロパティの指定に切り替えるのを忘れないでください)。
以下は、ラベル名「生年月日」(P569)について、2通りの検索をかけた結果です。
「生年月日」で検索したときの結果
{
"searchinfo": {
"search": "生年月日"
},
"search": [
{
"id": "P569",
"title": "Property:P569",
"pageid": 15087781,
"datatype": "time",
"concepturi": "http://www.wikidata.org/entity/P569",
"repository": "wikidata",
"url": "//www.wikidata.org/wiki/Property:P569",
"display": {
"label": {
"value": "生年月日",
"language": "ja"
},
"description": {
"value": "主題の人物や動物が生まれた日付",
"language": "ja"
}
},
"label": "生年月日",
"description": "主題の人物や動物が生まれた日付",
"match": {
"type": "label",
"language": "ja",
"text": "生年月日"
}
}
],
"success": 1
}
「生誕日」で検索したときの結果
{
"searchinfo": {
"search": "生誕日"
},
"search": [
{
"id": "P569",
"title": "Property:P569",
"pageid": 15087781,
"datatype": "time",
"concepturi": "http://www.wikidata.org/entity/P569",
"repository": "wikidata",
"url": "//www.wikidata.org/wiki/Property:P569",
"display": {
"label": {
"value": "生年月日",
"language": "ja"
},
"description": {
"value": "主題の人物や動物が生まれた日付",
"language": "ja"
}
},
"label": "生年月日",
"description": "主題の人物や動物が生まれた日付",
"match": {
"type": "alias",
"language": "ja",
"text": "生誕日"
},
"aliases": [
"生誕日"
]
}
],
"success": 1
}
おんなじですね。
注意
これらの検索は、部分一致検索ではありません。前方一致検索です(たぶん)1。
試しに、「県道41号2」で検索をかけてみます。
「県道41号」の検索結果
{
"searchinfo": {
"search": "県道41号"
},
"search": [],
"success": 1
}
「Q11417658」がヒットしませんでした。
最後に
これでURIとAPIについてはざっくり触れるようになりました。
次回は実装の要点を解説します。
コメント