Shortcut: Wikidata:Gentle Query
ウィキデータ:SPARQLクエリサービス/ウィキデータクエリサービスのやさしい入門
ウィキデータクエリサービスのやさしい入門
これまでに次のような疑問を持ったことはないでしょうか?
- 女性が市長を務める都市で、世界で最も大きい都市はどこか?
- ベルリンから100km以内に位置する空港には何があるか?
- チンギス・カンの子孫として知られている人には誰がいるか?
ウィキデータはこれらの問いに答えることができます。
ウィキデータとは何か?
ウィキデータは知識の倉庫(レポジトリ)です。 ウィキデータのアイディアやコンセプトの紹介は、はじめにで読むことができます。
質問をするにはどうすればよいか?
ウィキデータにおいて、前掲のような質問をするのに用いられる問い合わせ言語は、SPARQLと呼ばれます。なんだか専門的で私には難しそう、と思われますか? でも心配しないでください。この入門では、SPARQLそのものを学ぶ必要はありません。その代わりに、実際のクエリ例を見ながら、それらをどう改変できるかを見ていきましょう。
クエリとは何か?
クエリ(問い合わせ)とは、コンピュータシステムが理解し、回答することができる、特別な形の質問を言います。人工知能を相手に質問をするのでない限り、質問を決められたやり方で、明確な形にする方法を学ばなくてはなりません。
データは自由に使うことができるか?
はい、その通りです。ウィキデータのすべてのデータはパブリック・ドメイン (CC0) なので、誰もがあらゆる目的で利用することができます。
それでどうするのか?
クエリサービスの使い方を見てもらうために、簡単な例から初めましょう。その後に、少しずつより複雑な例を組み立てていきます。進むにつれて、基本的な疑問は解消することと思います。お約束します。
ウィキデータを使った簡単な質問の仕方
それでは、簡単な例として、世界の有名な猫の一覧を得る方法を見てみましょう。
世界のすべての猫の一覧を取得する
クエリサービスへは次のURLからアクセスしてください: https://query.wikidata.org
- 「例」をクリックする
- 新しいウィンドウに現れる一覧から「ネコ」を選択する
- コードボックスのすぐ下の「クエリを実行」ボタンをクリックする
これによって、インターネット上で見つかる――少なくともウィキデータが知っている――すべての有名な、あるいは無名な猫の一覧を得ることができました。これは、たとえあなたが猫派であってもそうでなくても、たとえば犬派であっても、すばらしいことでしょう。
犬についてはどうか?
代わりに犬(又は他の何か)の一覧が欲しい場合、クエリを編集する二通りの方法があります:
- 項目を猫 (cat) から動物園 (zoo) に変更する為にはQuery Helperを用います。
- クエリを手動で編集する Wikidata上の各項目は符号を用いて一意に識別されます。「猫」に対してはQ146という符号です。「犬」に対応する符号を見付けるには、次のようにしてWikidataで調べることができます。
- 自動補完を利用する(最後に説明します)
- 「猫」の例と同様に入力するが「Q146」を削除する
- 「wd:」の後にカーソルを置く
- 「wd:」の後に「犬」と入力する
- Ctrl+Spaceを押下する
- 上下キーを押下する。Enterを押下すると、Q144に入れ替わります
- 注意: 検索結果は表示言語によって変わります。
- https://www.wikidata.org に移動する
- 検索欄に「犬」と入力する
- ドロップダウンメニューの最初の結果をクリックする
- 表示されたWikidataページ (Q144) から「犬」の項目番号を書き留める
「猫」から「犬」に問合せを変更するには、単にSPARQLクエリエディタにてQ146をQ144で置き換えるだけです。
プログラムを実行すると,著名な犬からそうでないものまで全ての一覧が表示されます。
クエリを分解する
さて、ここでコードを分析して一般化することで、任意のひとつの対象(例えば犬、惑星、国、歌など)を検索できるようになりましょう。
#Cats
SELECT ?item ?itemLabel
WHERE
{
?item wdt:P31 wd:Q146 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
SELECT
クエリは何かを選択 (SELECT) します。 何を選択して表示したいかは、後で厳密に記述することになりますが、差し当たっては単にプレースホルダー(または変数とも言います)だけを記しておきます。 ここでは?item
と?itemLabel
がそれです。 クエスチョンマークから始まっているのが変数です。?item
これは私たちが求めている項目のリストです。 この事例では、「有名な猫」がそれでした。 Wikidataの項目は300近くの言語で利用可能です。我々は世界は英語でできていてその他の言語は英語の特殊例に過ぎないなどとは思っていませんので、どのような言語でも使えるような形で項目は格納されています。 すべての概念には番号が振られています。 Q146 は猫の概念で、 Q64 はドイツのベルリン、 Q42 は作家のDouglas Adamsである、といった具合です。 Tip:?item
は単に変数の名前で、このクエリ例ではこれを使うと決めただけです。 変数名は例えば ?animal でも何でもいいのです。?itemLabel
人間には番号よりも人間的な名前の方がより良く理解することができます。 Label (ラベル) は人間の言葉、例えば英語やエスペラント語、日本語、ズールー語等々での項目の名前です。 Q1371145 が “Socks” (これはビル・クリントン家の猫の名前です)と表示されるように、ここでのクエリ例にもラベルが欲しいですね。 ラベルサービスについての正確な詳細は User manual にあります。WHERE {
これはクエリの WHERE 節です。 プレースホルダーに入るものをここで正確に定義します。 WHERE 節は開き中括弧{
で始まり、閉じ中括弧}
で終わります。wdt:P31
これは主語に対する述語です。 この部分にカーソルを当てると、この述語が「分類」を意味することがわかると思います。
wd:Q146 .
これは目的語です。 この部分にカーソルを当てると、この目的語が「猫」を意味することがわかると思います。
これだとかなり長ったらしいですね。クエリを通常の言葉で言い直してみるのが役に立つかもしれません。
“猫に分類されている項目とそのラベルのリストをください。そして項目のラベルは英語で表示してください。”
ここで紹介したコードによって、インターネット上のあらゆる有名無名の猫を示すことができました。このクエリは例えば犬について同様のリストを示すように簡単に変更することができます。
テキストをSPARQLにするデモンストレーション
次の動画は、主語・述語・目的語の三つ組みをまず自然言語で書いてから、その後にそれをSPARQLクエリに変換する方法を示しています。
鍵は、変数には先頭に ?
つけること、項目には wd:
をつけること、述語(属性)には wdt:
をつけること。そして後者2つをウィキデータの実際の識別子に変換するために、 Ctrl+Space
(もしくは Ctrl+Alt+Space
もしくは Alt+Enter
) のキーボードショートカットによる自動補完を使うことです。
ユーザーインターフェースを掘り下げる
結果が表示される言語を変更する方法
この検索クエリツールによって、シンプルな(あるいは複雑な)クエリをカスタマイズし検索できるだけでなく、あらゆる言語で検索し、あらゆる言語で回答を得ることもできます。
- デフォルトの言語コードを “en” (英語) からその他の言語に変えます。例えば日本語なら “ja” です。
#Cats
SELECT ?item ?itemLabel WHERE
{
?item wdt:P31 wd:Q146 .
SERVICE wikibase:label { bd:serviceParam wikibase:language "ja" }
}
結果の表示の並び順を変更する方法
項目が表示される並び順は、インターフェース上で簡単に変更することができます。検索結果のコラムで、並び順を変更したい列の見出しをただクリックするだけです。
UIの言語を変更する方法
Englishという言葉をクリックして、表示される一覧から言語を選択して下さい。
選択された言語にUIが変わったことに注意してください。
猫の写真が欲しい! 画像を検索するには?
ここまでクエリの結果は表で出力されていました。次に画像を試してみましょう。
「例」ボタンをクリックして、「https://query.wikidata.org/#%23Even%20more%20cats%2C%20with%20pictures%0A%23defaultView%3AImageGrid%0ASELECT%20%3Fitem%20%3FitemLabel%20%3Fpic%0AWHERE%0A%7B%0A%20%20%3Fitem%20%3Fx1%20wd%3AQ146%20.%20%0A%20%20OPTIONAL%20%7B%0A%20%20%20%20%3Fitem%20wdt%3AP18%20%3Fpic%0A%20%20%7D%20%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20%7D%0A%7D ほかの猫をもっと見る、画像付き」の例を選択してください。クエリを実行すると画面の下半分に猫の画像が現れるはずです。
これが結果をテーブルではなく画像で表示したものです。結果の上端の左端にある「結果の表示形式を選択」のドロップダウンメニューを使うと、手動でデータの表示方法を変更することができます。"Table" を選択して、同じ結果を表形式で見てみてください。
このクエリが前の章のクエリと比較してどう変わったか、ちょっとみてみましょう。このクエリは自然言語の文章だと、次のように書くことができます。「猫について言及しているすべての項目をください。そしてそれら一つ一つの画像もください。ちなみに結果は表ではなくて画像を並べて表示してください。」
#defaultView:ImageGrid
これはコメントに見えるのですが、実際はクエリの結果を表ではなく画像で表示する指示として機能しています。?x1
これが意味するのは、このクエリの述語は「分類される」だけでなく、すべての述語を含む、ということです。例えば「題材(P180)」とか「名前の由来(P138)」といった述語を考えてください。?x1 がクエリの他の部分では使われていないということは、このプレースホルダーは「猫を主題とさえしていれば述語は何でもよいのですべての結果をください」ということを意味しているということです。OPTIONAL
結果にオプションのデータを付加する文が中括弧の中にあります。別の文Inside the curly braces you see another statement that adds optional data to the result. The placeholder ?item というプレースホルダーが再度使われて、P18という述語(「画像」を意味します)と、新たなプレースホルダーである ?pic と結合されています。います。文が OPTIONAL の中括弧で囲まれているということは、検索された結果はP18という述語を持っている必要はなく、?pic というプレースホルダーは空でもよい、ということです。
クエリを次のように変更するのも試してみてください。
- 猫ではなく犬を検索する。ヒント:WHEREの中の最初の文の目的語を変更する。
- 猫を「題材とする」項目だけを表示する(画像が取得されます)。ヒント:?x1 を他の何かに変更する。
- OPTIONALを削除する
データを表示する方法は他にもありますが、そのすべてが常に可能なわけではありません。メニュー項目がグレーアウトして選択できないことがあるのはこの理由によります。“Image map” は結果のデータが画像のURLを含む時のみに選択可能です。続く章では検索した項目を地図上に点として表示する方法も学びます。
クエリを共有して他の人に使ってもらうには?
クエリを他の人、例えばソーシャルメディアと共有したい場合は、クエリのショートリンクを作ることができます。
- クエリを完成させる
- LINKアイコンをクリックする
- そこに表示されたURLをコピーする。これがそのクエリのURLです。
地図上の位置を調べる
クエリの結果を視覚化するには別の方法もあります。クエリによる要請に位置座標を含む場合は、結果を地図上に表示することができます。
lighthouses in Norway の例をみてみましょう。このクエリを実行すると、ノルウェー海岸にある灯台が赤い点で表示されます。
調査ダイアログを使う
クエリ結果の表には、各項目の頭に虫眼鏡アイコンがあります。 このアイコンをクリックすると調査ダイアログが開きます。
調査ダイアログには最初は、特定の結果項目を表すノードが一つだけ表示されています。ダイアログの下端にはトグルボタンがあり、最初は ‘Outgoing’ と表示されています。 この状態でノードをクリックすると、そのノードのすべてのプロパティが、Wikidataの知識ベースに基づいて展開されます。 トグルボタンを ‘Incoming’ に変更してノードをクリックすると、このノードを目的語とするすべての述語やリンクを見ることができます。 この方法により、いろいろな項目とそのプロパティ間のすべての関係を、Wikidataを使って調べることができます。
調査ダイアログは複数同時に開くことができますので、複数のクエリの結果を一度に比較することができます。 調査ダイアログの左端にはツールバーがあり、グラフやツリー、地図、表などの複数のビューから選択して切り替えることができます。
こんな方法も
調査のためには次のような視覚化も可能です。
クエリ例をいろいろと見て試してみてください!
自動補完
エディタではクエリの任意の場所で Ctrl+Space を押すと、適当と思われるコードの候補を受けとることができます。 up/down 矢印キーで正しい候補を選択して、 Enter を押して確定させてください。
たとえば、SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
と毎回毎回入力する代わりに、SERV
とだけ入力して、Ctrl+Space キーを押せばいいんです。すると一番上の候補に、ラベル用のこの魔法の一文がバッチリ表示されているものと思います。準備は整いました!あとは Enter キーを押してこれを確定させるだけです。(入力されたコードのフォーマットは少しばかり違っているかもしれませんが、問題ありません。)
自動補完はあなた固有のクエリのために使うこともできます。 wd:
や wdt:
といったWikidataの接頭辞を入力してその後に文字を入力し、 Ctrl+Space を押すとWikidataから検索して候補を表示します。 wd:
なら項目を検索し、 wdt:
ならプロパティを検索します。例えば Johann Sebastian Bach (Q1339) と father (P22) を探す代わりに、単に wd:バッハ
や wdt:父
と入力して、自動補完で正しい候補を選ぶことができます。 (これはテキスト中にスペースがあっても有効です。例えば wd:Johann Sebastian Bach
など。)
ChromeOS と MacOS ユーザのための注: Ctrl+Alt+Space と Alt+Enter のショートカットでも機能します。
ここから先は
これでWikidataクエリサービスの使い方はわかったことと思います。あとはWikidataで自分の質問をする方法を学ぶために、いろいろインターフェースをいじったりクエリの値を変えてみるのがよいでしょう。