ウィキデータ クエリ サービス/利用者マニュアル
ウィキデータクエリサービス (WDQS) は、ウィキデータのデータセットにクエリ(問い合わせ)することを可能にするSPARQLエンドポイントを提供するために設計されたソフトウェアパッケージであり、公開サービスです。
このページあるいは関連するその他の説明文書は、臨機応変に更新されます。このサービスを利用する場合は、これらをウォッチリストに追加するようお勧めします。
If you're looking for a tutorial on the SPARQL syntax itself, we recommend starting here: SPARQL tutorial.
SPARQLクエリの例は、SPARQLの例のページを参照してください。
データセット
ウィキデータ クエリ サービスは Wikidata.org から得たデータセットを取り扱います。データセットはRDFダンプ形式説明文書に解説してあるとおり、RDF形式で表現されます。
このサービスのデータセットは主に性能上の理由から、RDF形式のダンプファイルと完全には一致しません。相違点の解説は説明文書を参照してください。
同じデータの週ごとのダンプを以下からダウンロードすることができます。
https://dumps.wikimedia.org/wikidatawiki/entities/
基本 - SPO(主語、述語、目的語)またはセマンティックトリプルを理解する
SPOつまり「主語・述語・目的語」(Subject, Predicate, Object)はトリプルとして知られ、あるいはウィキデータでは一般的にデータの文(ステートメント)と呼ばれています。
「アメリカ合衆国の首都はワシントンD.C.である」という文の、主語は〈アメリカ合衆国〉(Q30)、述語は〈首都は〜である〉(P36)、目的語は〈ワシントンD.C.〉(Q61)です。この文は以下の3つのURIで表現することができます。
<http://www.wikidata.org/entity/Q30> <http://www.wikidata.org/prop/direct/P36> <http://www.wikidata.org/entity/Q61> .
接頭辞(下記で詳述)のおかげで、同じ文をより簡潔に書くことができます。文の終わりを表すドット「.」に注意してください。
wd:Q30 wdt:P36 wd:Q61 .
/entity/ (wd:)はウィキデータのエンティティ(Q-番号の値)を表します。 /prop/direct/ (wdt:)は「真らしい」プロパティ、つまり文を見るときに最もよく想定されるであろう値です。 ある文が他の文と比べて「より真」となりうるので、真らしいプロパティが必要とされます。 例えば「アメリカ合衆国の首都はニューヨークである」という文は真ですが、それは1790年という年の歴史的文脈においてのみです。 WDQSはどの文を「真らしい」と扱うべきか、ランクを使って判断します。
真らしい文に加え、WDQSは(真らしい文もそうでないものも)すべての文を保存しますが、同じ接頭辞wdt:は使いません。 アメリカの首都は、ワシントンDC、フィラデルフィア、ニューヨークという3つの値を持ちます。 さらにそれぞれの値が、「修飾子」— 開始日や終了日などのように、それぞれの文の範囲を絞り込む追加の情報 — を持ちます。 WDQSはトリプルストアにこの情報を保存するために、自動的に「宣言」("statement")される主語を導入します。これは本質的には以下のような乱数です:
wd:Q30 p:P36 <random_URI_1> . # US "indirect capital" is <X>
<random_URI_1> ps:P36 wd:Q61 . # The X's "real capital value" is Washington DC
<random_URI_1> pq:P580 "1800-11-17" . # The X's start date is 1800-11-17
詳細はSPARQLチュートリアル - 修飾子を参照してください。
SPOはまた、RDFデータ構造をクエリするための基本的な構文のレイアウト形式として、あるいはあらゆるグラフデータベースやトリプルストアに対して使われます。高性能グラフ データベースであるBlazegraphによって動作しているウィキデータクエリサービス(WDQS)もこれに含まれます。
トリプル(SPO)の高度な利用では、トリプルを他のトリプルの目的語もしくは主語として用いることすらあります!
基本 - 接頭辞(プレフィックス)とは
主語と述語(トリプルの最初と2番目の値)は常にURIとして保存する必要があります。 例えば、主語が宇宙 (Q1)の場合は<https://www.wikidata.org/wiki/Q1>として保存されます。 接頭辞を用いると、この長いURIをコンパクトにwd:Q1と書くことができます。 主語や述語とは異なり、目的語(トリプルの3番目の値)はURIでも、数字や文字列などのリテラルでも構いません。
WDQSは接頭辞と呼ばれる多くの省略形ショートカットを解釈します。いくつかはウィキデータ内部のもの(例:wd, wdt, p, ps, bd)であり、その他の多くのものは一般的に使われているrdf、skos、owl、schemaのような外部接頭辞です。
下記のクエリでは、"P279 = Q7725634" という文にあてはまる項目を求めています。より完全な用語でいうと、述語として「上位クラス」を持ち、その目的語が=「文芸作品」であるような主語を選択している、となります。
出力の変数:
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wds: <http://www.wikidata.org/entity/statement/>
PREFIX wdv: <http://www.wikidata.org/value/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>
PREFIX pq: <http://www.wikidata.org/prop/qualifier/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX bd: <http://www.bigdata.com/rdf#>
# The below SELECT query does the following:
# Selects all the items(?s subjects) and their labels(?label)
# that have(WHERE) the statement(?s subject) has a direct property(wdt:) = P279 <subclasses of>
# with a value of entity(wd:) = Q7725634 <Literary Work>
# and optionally return the English labels
SELECT ?s ?label WHERE {
?s wdt:P279 wd:Q7725634 .
OPTIONAL {
?s rdfs:label ?label filter (lang(?label) = "en").
}
}
拡張機能
このサービスはSPARQLの標準機能に対して、下記の拡張機能を提供します。
ラベルサービス
クエリするエンティティのラベルや別名あるいは説明を言語フォールバックありで入手することに特化したサービスをURI <http://wikiba.se/ontology#label>で使うことができます。 他の方法で同じ効果を得ようとすると必要になるSPARQLクエリの複雑さを減らしてくれるので、このサービスはラベルを入手したいときに大変便利です。
サービスは手動と自動の2つのモードのうちいずれかで使うことができます。
自動モードではサービスのテンプレートを指定するだけです。例:
PREFIX wikibase: <http://wikiba.se/ontology#>
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
そして WDQS が自動生成するラベルは以下のとおりです。
SELECT
内の未割り当て変数が?NAMELabel
という名前であるならば、WDQS は変数?NAME
のエンティティに対するラベル (rdfs:label
) を生成します。SELECT
内の未割り当て変数が?NAMEAltLabel
という名前であるならば、WDQS は変数?NAME
のエンティティに対する別名 (skos:altLabel
) を生成します。SELECT
内の未割り当て変数が?NAMEDescription
という名前であるならば、WDQS は変数?NAME
のエンティティに対する説明 (schema:description
) を生成します。
いずれの場合も、変数?NAME
が割り当てられるべきで、そうしないとサービスが機能しません。
自動モードはクエリのプロジェクション(射影)のみを調べます – 例として、SELECT ?aLabel (GROUP_CONCAT(?bLabel) AS ?bLabels)
では、最初のラベルのみが認識され、SELECT *
は自動モードによってまったくサポートされません。
このような場合、手動モードを使う必要があるでしょう(下記参照)。
ラベルに使う好きな言語を、ひとつまたは複数のbd:serviceParam wikibase:language "language-code"
トリプルで指定します。
それぞれの文字列にひとつまたはカンマで区切られた複数の言語コードを含めることができます。
WDQSは指定した順に言語を検討します。
指定されたいずれの言語のラベルも取得できない場合、そのエンティティの(いかなる接頭辞も含まない)Q-idがラベルとなります。
ウィキデータクエリサービスのウェブサイトは、自動的に[AUTO_LANGUAGE]
を現状の利用者のインターフェースの言語コードに置き換えます。
例えば、利用者のUIがフランス語であるならば、bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en"
はクエリサービスに送信される前にbd:serviceParam wikibase:language "fr,en"
へ変換されます。
たとえばアメリカ合衆国の大統領夫妻の一覧を閲覧する場合。
SELECT ?p ?pLabel ?w ?wLabel WHERE {
wd:Q30 p:P6/ps:P6 ?p .
?p wdt:P26 ?w .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
この例では、WDQSがプロパティに対するラベル ?pLabel
と ?wLabel
を自動生成します。
手動モードでは、サービス呼び出し内でラベル変数を明示的に割り当てますが、WDQSはそれでもなお言語の解決とフォールバックを提供します。 例:
SELECT *
WHERE {
SERVICE wikibase:label {
bd:serviceParam wikibase:language "fr,de,en" .
wd:Q123 rdfs:label ?q123Label .
wd:Q123 skos:altLabel ?q123Alt .
wd:Q123 schema:description ?q123Desc .
wd:Q321 rdf:label ?q321Label .
}
}
ラベルと説明をフランス語、ドイツ語、英語で検討し、そのいずれも取得できない場合は、Q-idをラベルとして使います。
地理空間検索
このサービスは、特定の中心点から特定の半径の範囲内あるいは特定の矩形領域の範囲内に含まれる座標を持つ項目を検索することを可能にします。
点の周辺を検索する
例:
# Airports within 100km from Berlin
#defaultView:Map
SELECT ?place ?placeLabel ?location ?dist WHERE {
# Berlin coordinates
wd:Q64 wdt:P625 ?berlinLoc .
SERVICE wikibase:around {
?place wdt:P625 ?location .
bd:serviceParam wikibase:center ?berlinLoc .
bd:serviceParam wikibase:radius "100" .
bd:serviceParam wikibase:distance ?dist.
}
# Is an airport
FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q1248784 }
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
} ORDER BY ASC(?dist)
around
サービス呼び出しの1行目には?item
predicate
?location
形式が必須で、検索結果は?item
に指定された範囲内にある項目を割り当て、?location
にその項目の座標を割り当てます。以下のパラメータがサポートされます。
述語 | 意味 |
---|---|
wikibase:center | この点の周辺の検索が行われる。検索を機能させるために割り当てが必須。 |
wikibase:radius | 中心点からの距離。現状、距離は常にキロメートル単位で、他の単位はまだサポートされていない。 |
wikibase:globe | 検索される天体。オプション、既定は地球 (wd:Q2)。 |
wikibase:distance | 距離情報を受け取る変数 |
矩形範囲内を検索する
矩形範囲検索の例:
# Schools between San Jose, CA and Sacramento, CA
#defaultView:Map
SELECT * WHERE {
wd:Q16553 wdt:P625 ?SJloc .
wd:Q18013 wdt:P625 ?SCloc .
SERVICE wikibase:box {
?place wdt:P625 ?location .
bd:serviceParam wikibase:cornerSouthWest ?SJloc .
bd:serviceParam wikibase:cornerNorthEast ?SCloc .
}
FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q3914 }
}
または:
#Schools between San Jose, CA and San Francisco, CA
#defaultView:Map
SELECT ?place ?location WHERE {
wd:Q62 wdt:P625 ?SFloc .
wd:Q16553 wdt:P625 ?SJloc .
SERVICE wikibase:box {
?place wdt:P625 ?location .
bd:serviceParam wikibase:cornerWest ?SFloc .
bd:serviceParam wikibase:cornerEast ?SJloc .
}
FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q3914 }
}
座標は直接、指定できます:
# Schools between San Jose, CA and Sacramento, CA
#same as previous
#defaultView:Map
SELECT * WHERE {
SERVICE wikibase:box {
?place wdt:P625 ?location .
bd:serviceParam wikibase:cornerWest "Point(-121.872777777 37.304166666)"^^geo:wktLiteral .
bd:serviceParam wikibase:cornerEast "Point(-121.486111111 38.575277777)"^^geo:wktLiteral .
}
FILTER EXISTS { ?place wdt:P31/wdt:P279* wd:Q3914 }
}
box
サービス呼び出しの1行目には?item
predicate
?location
形式が必須で、検索結果は ?item
に指定された範囲内にある項目を割り当て、?location
にその項目の座標を割り当てます。
以下のパラメータがサポートされます:
述語 | 意味 |
---|---|
wikibase:cornerSouthWest | 矩形の南西角。 |
wikibase:cornerNorthEast | 矩形の北東角。 |
wikibase:cornerWest | 矩形の西角。 |
wikibase:cornerEast | 矩形の東角。 |
wikibase:globe | 検索される天体。オプション、既定は地球 (wd:Q2)。 |
wikibase:cornerSouthWest
とwikibase:cornerNorthEast
を一緒に、またwikibase:cornerWest
とwikibase:cornerEast
を一緒に使うべきであり、混用はできません。
wikibase:cornerWest
とwikibase:cornerEast
が述語として使われた場合、それらの点が矩形の対角の座標であると仮定し、それに応じて角を導出します。
拡張された関数
距離関数
geof:distance
関数は地球上の2地点間の距離を、キロメートル単位で返します。
使用例:
# Airports within 100km from Berlin
SELECT ?place ?placeLabel ?location ?dist WHERE {
# Berlin coordinates
wd:Q64 wdt:P625 ?berlinLoc .
SERVICE wikibase:around {
?place wdt:P625 ?location .
bd:serviceParam wikibase:center ?berlinLoc .
bd:serviceParam wikibase:radius "100" .
}
# Is an airport
?place wdt:P31/wdt:P279* wd:Q1248784 .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
BIND(geof:distance(?berlinLoc, ?location) as ?dist)
} ORDER BY ?dist
# Places around 0°,0°
SELECT *
{
SERVICE wikibase:around {
?place wdt:P625 ?location .
bd:serviceParam wikibase:center "Point(0 0)"^^geo:wktLiteral .
bd:serviceParam wikibase:radius "250" .
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . ?place rdfs:label ?placeLabel }
BIND(geof:distance("Point(0 0)"^^geo:wktLiteral, ?location) as ?dist)
}
ORDER BY ?dist
座標部分関数
関数 geof:globe
、geof:latitude
およびgeof:longitude
は、それぞれ座標の構成部分である天体のURI、緯度および経度を返します。
URLデコード関数
wikibase:decodeUri
関数は指定されたURI文字列をデコード(つまりパーセントエンコーディングを逆処理)します。
これはウィキペディアの記事名(エンコードされている)を実際の文字列に変換するときに必要となる場合があります。
この関数はSPARQL encode_for_uri の逆関数です。
# Example usage of wikibase:decodeUri function
SELECT DISTINCT * WHERE {
?el wdt:P31 wd:Q5.
?webRaw schema:about ?el;
schema:inLanguage "ru";
schema:isPartOf <https://ru.wikipedia.org/>.
BIND(URI(wikibase:decodeUri(STR(?webRaw))) AS ?webHyperlink) .
BIND(wikibase:decodeUri(STR(?webRaw)) AS ?webString) .
}
LIMIT 20
自動接頭辞
一般的なクエリに用いる接頭辞の多くは、明示的に指定しなくてもエンジンによってサポートされています。
日付の延長
サービスは過去および未来のおよそ2900億年の範囲の xsd:dateTime
型の日付の値を1秒精度でサポートします。
WDQSは日付をUnixエポックからの64ビットの秒数として保存します。
ブレーズグラフ関数
ブレーズグラフ(Blazegraph)プラットフォームはその上にWDQSが実装されており、独自のSPARQL拡張機能の組み合わせがあります。 Blazegraph ウィキで説明されたいくつかのグラフトラバーサルアルゴリズムがあり、その中にBFS、最短パス、CC、PageRankの実装を含みます。
クエリ実行のコントロールとエンジンのさまざまな特徴については、上記に加えてクエリのヒントに書かれたブレーズグラフの説明文書も参照してください。
bd:sample 拡張子の説明は、ブレイズグラフ・ウィキ BlazeGraph にはありません。 唯一の解説文書はコード内のコメントのみです。
連携
SPARQL連携クエリを使って、選択した件数の外部データベースを呼び出すことができます。 専用ページで連携エンドポイントの総覧をご参照ください。
連携クエリの例:
- Items used: Lope de Vega (Q165257)
- Properties used: BVMC person ID (P2799)
SELECT ?workLabel WHERE {
wd:Q165257 wdt:P2799 ?id
BIND(uri(concat("https://data.cervantesvirtual.com/person/", ?id)) as ?bvmcID)
SERVICE <http://data.cervantesvirtual.com/openrdf-sesame/repositories/data> {
?bvmcID <http://rdaregistry.info/Elements/a/otherPFCManifestationOf> ?work .
?work rdfs:label ?workLabel
}
}
連携エンドポイントが提供するデータベースが使用するオントロジーは、ウィキデータのものとは大きく異なる可能性があることに注意してください。これらのデータベースのオントロジーとデータへのアクセス方法について学ぶには、所有者の説明文書のリンクを参照してください。
MediaWiki API
完全版の解説は MediaWiki API サービス説明文書のページを参照してください。
MediaWiki API サービスは SPARQL から MediaWiki API を呼び出し、SPARQL クエリ内でその結果を受け取ることを可能にします。 例(カテゴリに属するものを探す):
- Items used: parking lot (Q6501349)
- Properties used: topic's main category (P910)
SELECT * WHERE {
wd:Q6501349 wdt:P910 ?category .
?link schema:about ?category; schema:isPartOf <https://en.wikipedia.org/>; schema:name ?title .
SERVICE wikibase:mwapi {
bd:serviceParam wikibase:api "Generator" .
bd:serviceParam wikibase:endpoint "en.wikipedia.org" .
bd:serviceParam mwapi:gcmtitle ?title .
bd:serviceParam mwapi:generator "categorymembers" .
bd:serviceParam mwapi:gcmprop "ids|title|type" .
bd:serviceParam mwapi:gcmlimit "max" .
# out
?subcat wikibase:apiOutput mwapi:title .
?ns wikibase:apiOutput "@ns" .
?item wikibase:apiOutputItem mwapi:item .
}
}
ウィキメディア・サービス
ウィキメディアが走らせるWDQSの公開サービスの例は、リンク先から利用できます。
公開エンドポイントのクエリの実行時間は60秒が上限です。 それはGUIでも公開SPARQLエンドポイントでも同じです。
GUI
http://query.wikidata.org/ のホームページにあるGUIは、SPARQLクエリを編集しクエリエンジンへサブミットすることを可能にします。 結果はHTMLテーブルとして表示されます。 クエリごとに固有のURLが与えられ、ブックマークして後で閲覧することができることに注意してください。 このURLへ進むと、クエリが編集ウィンドウに入力されますが、実行はされません - 実行するにはさらに「実行」ボタンをクリックする必要があります。
また、クエリの短縮URLを作成するには、右側にある「短縮URLを作成」を押してURL短縮サービスを起動します - この操作でそのとき手がけているクエリの短縮URLが生成されます。
「接頭辞を追加」ボタンはSPARQLクエリの標準の接頭辞を記したヘッダを生成します。 有用そうな接頭辞の全一覧はRDFフォーマット説明文書に列挙されています。 WDQSが既定でサポートしているため、ほとんどの一般的な接頭辞は自動的に機能することに注意してください。
GUIは簡易なエンティティ・エクスプローラー機能も備えており、エンティティ結果の横の虫眼鏡アイコン「🔍」をクリックすることで起動することができます。 エンティティのQ-id自体をクリックすると、wikidata.org 上のエンティティページへと導かれます。
既定の表示
WDQS GUIでクエリを実行する場合、クエリの最初に#defaultView:viewName
というタグで指定することによって、結果の表示形式を選択することができます。
タイトルを表示する
WDQS GUIでクエリを実行する場合、クエリの最初に#title: 表示したい文字列
というタグで指定することによって、タイトルを結果の上部に表示することができます。
SPARQLエンドポイント
https://query.wikidata.org/sparql
へのGETまたはPOSTリクエストで、SPARQLクエリを直接、SPARQLエンドポイントにサブミットすることができます。
GETリクエストは、 https://query.wikidata.org/sparql?query=(SPARQL_query)
形式で、例えば https://query.wikidata.org/sparql?query=SELECT%20?dob%20WHERE%20{wd:Q42%20wdt:P569%20?dob.}
のようにURL内に指定されたクエリを持っています。
POSTリクエストは、クエリをURLの代わりにリクエストボディに受け入れます。これによりURLの長さ制限に達することなく、より大きなクエリを実行することができるようになります。(それでもなおPOSTボディはquery=
接頭辞を含めなければならず(つまり、単に(SPARQL query)
ではなく、query=(SPARQL_query)
とすべき)、SPARQLクエリはURLエスケープされていなければならないことに注意してください。)
結果は既定ではXML、URLにクエリパラメータformat=json
が含まれるかリクエストでヘッダーAccept: application/sparql-results+json
が与えられているならばJSONとして返されます。
JSON 形式は標準SPARQL 1.1 Query Results JSON Format。
POSTクエリはキャッシュされないので、小規模なクエリにはGETを、大規模なクエリはPOSTを利用することが推奨されます。
サポートする形式
SPARQLエンドポイントでサポートする出力形式は下記のとおりです。
形式 | HTTP ヘッダー | クエリパラメータ | 説明 |
---|---|---|---|
XML | Accept: application/sparql-results+xml | format=xml | XML 出力形式は既定。https://www.w3.org/TR/rdf-sparql-XMLres/ で規定されている通り。 |
JSON | Accept: application/sparql-results+json | format=json | JSON 出力形式。https://www.w3.org/TR/sparql11-results-json/ の通り。 |
TSV | Accept: text/tab-separated-values | https://www.w3.org/TR/sparql11-results-csv-tsv/ で規定されている通り。 | |
CSV | Accept: text/csv | https://www.w3.org/TR/sparql11-results-csv-tsv/ で規定されている通り。 | |
バイナリRDF | Accept: application/x-binary-rdf-results-table |
クエリの制限
固定のクエリ期限は60秒 に設定されています。 以下の制限もあります。
- 1クライアント(ユーザーエージェント + IP)は、60秒ごとに60秒の処理が許容されます
- 1クライアントは、1分当たり30個のエラークエリが許容されます
上記の制限を超えたクライアントは、HTTPコード 429
で抑圧されます。
いつリクエストを再開できるか見るために Retry-After
ヘッダーを使用してください。
もしクライアントが429レスポンスを無視して制限を超えるリクエストをし続けた場合、サービスの利用を一時的に禁止される可能性があります。
ユーザーエージェントの方針に従わないクライアントは完全にブロックされるかもしれません – 必ず良い User-Agent
ヘッダーを送るようにしてください。
この制限時間を超過したクエリはすべて時間切れになります。 クエリを最適化する、もしくは問題のあるクエリをこちらで報告するのがよいかもしれません。
また現状では同一IPで並行処理できるクエリは、5件に制限されています。リソースと利用パターンを考慮し、これらの制限を変更する可能性があります。
クエリの説明
ブレイズグラフ(Blazegraph)はクエリの分析を表示させ、クエリのパーシングの各段階とどのオプション設定を採用したか説明します。
この情報の表示は、クエリ文字列に パラメータのexplain=details
を追加します。例:https://query.wikidata.org/sparql?query=SELECT%20?dob%20WHERE%20{wd:Q42%20wdt:P569%20?dob.}&explain=details
。
名前空間
メインのSPARQLエンドポイントに対するクエリ先は、ウィキデータクエリサービス上のデータに含まれた標準名前空間つまりwdq
があり、その他にも以下に示す補助的な名前空間があります。
別の名前空間からデータをクエリするには、エンドポイントのURL https://query.wikidata.org/bigdata/namespace/NAMESPACENAME/sparql を使います。
カテゴリ
完全な説明はカテゴリの説明文書ページを参照してください。
ウィキデータのクエリサービスでも一部のウィキ群を対象にカテゴリのグラフ化が表示できます。対象のウィキ群一覧はこちら:https://noc.wikimedia.org/conf/dblists/categories-rdf.dblist
カテゴリ名前空間の名称は categories
。これを表示する SPARQL エンドポイントは $url。
詳細説明はカテゴリ ページを参照してください。
DCAT-AP
ウィキデータに対応する DCAT-AP データ (訳注: RDFボキャブラリで、データ・カタログ間の相互運用性を促進。) は https://query.wikidata.org/bigdata/namespace/dcatap/sparql エンドポイントで SPARQL として入手できます。
データのソース:https://dumps.wikimedia.org/wikidatawiki/entities/dcatap.rdf
データを取得するクエリの例:
PREFIX dcat: <http://www.w3.org/ns/dcat#>
PREFIX dct: <http://purl.org/dc/terms/>
SELECT ?url ?date ?size WHERE {
<https://www.wikidata.org/about#catalog> dcat:dataset ?dump .
?dump dcat:distribution [
dct:format "application/json" ;
dcat:downloadURL ?url ;
dct:issued ?date ;
dcat:byteSize ?size
] .
}
Linked Data Fragments エンドポイント
Triple Pattern Fragmentsインタフェースを使ったデータベースのクエリもサポートしています。 これによりトリプルのうち1つないし2つの要素がわかっていて、このテンプレートに対応するすべてのトリプルを取得する必要があるときに、手軽にそして効率的にトリプルデータをブラウズすることができるようになります。 Linked Data Fragmentsのサイトの詳細情報を参照してください。
インターフェイスの利用には以下の URL からアクセスします: https://query.wikidata.org/bigdata/ldf
。
このサービスはBlazegraphデータベース上で実装されているので、クエリサービスと同じようなラグがあります。
リクエストの例:
- https://query.wikidata.org/bigdata/ldf?subject=http%3A%2F%2Fwww.wikidata.org%2Fentity%2FQ146 - 主語 cat (Q146) を持つすべてのトリプル
- https://query.wikidata.org/bigdata/ldf?subject=&predicate=http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23label&object=%22London%22%40en - 英語のラベル「London」を持つすべてのトリプル
- https://query.wikidata.org/bigdata/ldf?predicate=http%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2FP212&object=%22978-0-262-03293-3%22 All triples that have
978-0-262-03293-3
as the value for ISBN-13 (P212). The following shell command usescurl
to build the same URL and obtain the same data.
$ curl \
--get \
-H 'Accept: application/rdf+xml' \
--data-urlencode 'predicate=http://www.wikidata.org/prop/direct/P212' \
--data-urlencode 'object="978-0-262-03293-3"' \
'https://query.wikidata.org/bigdata/ldf'
subject
とpredicate
およびobject
パラメータとして、現状は完全なURLのみがサポートされていることに注意してください。
既定ではHTMLインタフェースが表示されますが、他にも Accept
HTTPヘッダで定義された、いくつかのデータ形式が利用可能です。
Accept | 形式 |
---|---|
text/html | 既定の HTML ブラウザー インターフェイス |
text/turtle | Turtle形式 |
application/ld+json | JSON-LD形式 |
application/n-triples | N-Triples形式 |
application/rdf+xml | RDF/XML 形式 |
ページサイズが100トリプルであるページにデータが返されます。
ページには1から始まる番号が付与されていて、ページ番号は page
パラメーターで定義されます。
スタンドアローンのサービス
このサービスはオープンソースのソフトウェアなので、以下の手順に従って、任意の利用者のサーバ上で稼動させることもできます。
ハードウェアの推奨条件は Blazegraph 説明文書 を参照してください。
もしサービスの利用対象がウィキデータ以外のウィキベース案件の場合、詳細の確認をお願いします。
インストール
サービスをインストールするために、例えばMaven Central から、group ID org.wikidata.query.rdf
と artifact ID service
で完全なサービスパッケージを圧縮形式のZIPファイルとしてダウンロードするか、あるいは https://github.com/wikimedia/wikidata-query-rdf/ でソース配布物をクローンし、「mvn package」でビルドすることが推奨されます。
パッケージのZIPファイルは service-バージョン-dist.zip
として dist/target
ディレクトリに格納されています。
パッケージには、.war アプリケーションとしてBlazegraphサーバ、ウィキデータサイトから新しいデータを取得する更新サービスを実行するために必要となるライブラリ、さまざまなタスクをより簡単にするスクリプト、そして gui
下位ディレクトリ内にGUIが含まれています。
GUIを使いたい場合は、あなたのHTTPサーバがGUIを提供するように設定を変更する必要があるでしょう。
既定では、http://localhost:9999/bigdata/namespace/wdq/sparql のSPARQLエンドポイントのみが設定されており、既定のBlazegraph GUIは http://localhost:9999/bigdata/ で利用可能です。 既定の設定ではどちらもローカルホストからのみアクセス可能であること注意してください。 もし外部からアクセスするつもりであれば、外部エンドポイントと適切なアクセス制御を提供する必要があるでしょう。
スナップショット版の使用
未リリースのスナップショット版を利用したい場合(たいていはリリース版がバグを含んでいて、バグが修正されているものの、まだ新しいリリース版が利用可能でない場合に必要とされます)および自分でバイナリをコンパイルしたくない場合には、次のいずれかを利用できます:
- https://github.com/wikimedia/wikidata-query-deploy - プロダクション・バイナリを含むデプロイメントリポジトリ。
git fat
の作動が必要です。 確認して "git fat pull
" を実行してください。 - https://archiva.wikimedia.org/#artifact/org.wikidata.query.rdf/service のArchiva スナップショットデプロイメント - 最新版を選択し、続いてArtifacts、ダウンロードする最新版のパッケージを選択してください。
データの読み込み
詳細なインストール手順は、配布物の一部である使用開始の説明文書で詳しく説明されており、以下の手順が含まれます。
- 最新のRDFダンプを https://dumps.wikimedia.org/wikidatawiki/entities/ からダウンロードします (RDFダンプは
.ttl.gz
で終わるもの)。 munge.sh
スクリプトでデータを前処理します。 これにより $ などのような名前を持つ一連の前処理されたデータのTTLファイルが生成されます。 オプションは下記のスクリプトを参照。runBlazegraph.sh
スクリプトを実行して、Blazegraphサービスを開始します。loadData.sh
を使用してサービスにデータを読み込みます。読み込みは通常、前処理に比べてかなり遅いことに注意してください。したがって、いくつかの前処理されたファイルが準備できたら、すぐに読み込みを開始できます。下記のオプションを使用と、任意のファイルから読み込みを再開できます。- すべてのデータが読み込まれた後に、
runUpdate.sh
を使用して更新サービスを開始します。
カテゴリの読み込み
カテゴリのデータも読み込みたいのであれば、以下の手順に従ってください:
- 名前空間を作成する。例えば、
categories
:createNamespace.sh categories
- そこにデータを読み込む:
forAllCategoryWikis.sh loadCategoryDump.sh categories
これらのスクリプトは、ウィキメディアの設定に従い、ウィキメディアのウィキからのみデータを読み込むことに注意してください。 もし他のウィキを扱う必要があるならば、スクリプト内のいくつかの変数を変更する必要があるかもしれません。
スクリプト
配布物には以下の便利なスクリプトが同梱されています。
munge.sh
RDFダンプから読み込むためにデータを前処理します。
オプション | 必須かどうか | 説明 |
---|---|---|
-f filename | 必須 | RDF ダンプのファイル名 |
-d directory | 省略可能 | 処理が済んだファイルを書き込むディレクトリ。既定では現在のディレクトリ |
-l language | 省略可能 | 指定すると、その言語のラベルのみ取得。単一言語のみ必要な場合はこのオプションを有効にして、性能を上げ、データベースのサイズを抑えてクエリを単純化する。 |
-s | 省略可能 | 指定すると、サイトリンクのデータを除外。サイトリンクに対するクエリが不要の場合はこのオプションを使用すると、性能を上げデータベースのサイズを抑えることができます。 |
-c size | 省略可能 | このオプションは既定のチャンクサイズをオーバーライドするために使用します。 大きすぎるチャンクはインポートするときにタイムアウトするかもしれません。 |
例:
./munge.sh -c 50000 -f data/wikidata-20150427-all-BETA.ttl.gz -d data -l en -s
処理済みのデータをBlazegraphに読み込みます。curl
がインストールされている必要があります。
オプション | 必須かどうか | 説明 |
---|---|---|
-n namespace | 必須 | データを読み込むグラフ名前空間を指定。WDQSデータに対しては wdqとすべきです。 |
-d directory | 省略可能 | 処理したファイルを保存するディレクトリの指定。既定では現在のディレクトリ。 |
-h host | 省略可能 | SPARQL エンドポイントのホスト名。既定ではlocalhost |
-c context | 省略可能 | SPARQL エンドポイントのコンテキスト URL。既定ではbigdata - 通常、WDQS に対して変更は不要。 |
-s start | 省略可能 | 処理を開始するファイルの番号。既定では1 |
-e end | 省略可能 | 処理を終了するファイルの番号 |
例:
./loadData.sh -n wdq -d `pwd`/data
runBlazegraph.sh
ブレイズグラフ・サービスを実行。
オプション | 必須かどうか | 説明 |
---|---|---|
-d directory | 省略可能 | ブレイズグラフをインストールするホームディレクトリ。既定ではスクリプトが保存されたディレクトリ |
-c context | 省略可能 | SPARQL エンドポイントのコンテキスト URL。既定では bigdata - 通常は WDQS に対して変更は不要 |
-p port | 省略可能 | SPARQL サービスのポート番号。既定では 9999 |
-o options | 省略可能 | コマンドラインにオプションを追加 |
例:
./runBlazegraph.sh
スクリプト内で、以下の2つの変数を変更したい場合があるかもしれません。
# Q-id of the default globe
DEFAULT_GLOBE=2
# Blazegraph HTTP User Agent for federation
USER_AGENT="Wikidata Query Service; https://query.wikidata.org/";
また、以下の環境変数がスクリプトによって確認されます(すべてオプション)。
変数 | 既定 | 説明 |
---|---|---|
HOST | localhost | ブレイズグラフ・サービスをバインドするホスト名 |
PORT | 9999 | ブレイズグラフ・サービスをバインドするポート |
DIR | スクリプトを保存するディレクトリ | 設定ファイルを保存するディレクトリ |
HEAP_SIZE | 16g | ブレイズクラフの Java ヒープのサイズ |
MEMORY | -Xms${HEAP_SIZE} -Xmx${HEAP_SIZE}
|
ブレイズグラフの総 Java メモリ設定 |
GC_LOGS | ソースを参照 | GC ログ設定 |
CONFIG_FILE | RWStore.properties | ブレイズグラフの設定ファイルの保存先 |
BLAZEGRAPH_OPTS | 空 | その他のオプションはそのまま Java コマンドラインに渡す |
runUpdate.sh
更新サービスを実行します。
オプション | 必須かどうか | 説明 |
---|---|---|
-n namespace | 省略可能 | データを読み込むグラフ名前空間の指定。WDQS データに対しては必ず wdq を指定。 既定値: wdq |
-h host | 省略可能 | SPARQL エンドポイントのホスト名。既定では localhost |
-c context | 省略可能 | SPARQL エンドポイントのコンテキスト URL。既定では bigdata - 通常、WDQS に対して変更は不要 |
-l language | 省略可能 | 指定すると、指定した言語のラベルのみ取得。単一言語のみ必要な場合はこのオプションを有効にして、性能を上げ、データベースのサイズを抑えてクエリを単純化する。 |
-s | 省略可能 | 指定すると、サイトリンクに関するデータを除外。サイトリンクのクエリが不用の場合はこのオプションを有効にして、性能を上げ、データベースのサイズを抑える。 |
-t secs | 省略可能 | ブレイズブラフに問い合わせたときのタイムアウト設定。単位は秒。 |
-N | 省略可能 | このオプションはスクリプトにオプションを無視させ、結果として1番目のアップデータをすでに走らせた状態で2番目のを開始させた場合に、問題を起こす場合があります。 たとえば (下記の例のように) --ids 形式で特定のアイテムを追跡する場合などに使ってください。
|
-S | 省略可能 | ログファイルの代わりにコンソールへログを出力します。メンテナンスタスクのためにコマンドラインからスクリプトを実行するときに有用です。 |
オプションの -l
と -s
の設定(あるいは設定なし)は、munge.sh と runUpdate.sh で同じにすることが推奨されます。さもないとデータを適切に更新することができません。
例:
./runUpdate.sh
また、スクリプトは次の環境変数を確認します(すべてオプション)。
変数 | 既定 | 説明 |
---|---|---|
UPDATER_OPTS | 空 | その他のオプションはそのまま Java コマンドラインに渡す |
更新プログラムのオプション
以下のオプションが更新プログラムアプリケーションで機能します。
これらはrunUpdate.sh
スクリプトに追加のオプションとして--
の後に与えられるべきです。例: runUpdate.sh -- -v
.
オプション | ロングオプション | 意味 |
---|---|---|
-v | --verbose | 冗長モード |
-s TIMESTAMP | --start TIMESTAMP | 特定のタイムスタンプからデータ取得を開始、形式は 2015-02-11T17:11:08Z もしくは 20150211170100 。
|
--keepTypes | すべてのタイプのタイムスタンプを保存 | |
--ids ID1,ID2,... | 特定のIDを更新して終了 | |
--idrange ID1-ID2 | 特定の範囲のIDを更新して終了 | |
-d SECONDS | --pollDelay SECONDS | 新規データが見つからない場合の待ち受けの長さ |
-t NUMBER | --threadCount NUMBER | ウィキベースのデータを取得するときのスレッド数 |
-b NUMBER | --batchSize NUMBER | RecentChanges API から取得する変更の件数 |
-V | --verify | 読み込み後のデータを確認 (たいへん遅い! デバッグ専用) |
-T SECONDS | --tailPollerOffset SECONDS | 第一のポーリングに時差を与えた、第二の追跡ポーリングを使用 |
--entityNamespaces NUMBER,NUMBER,... | 変更を確認するデータベースの名前空間一覧 | |
-W | --wikibaseUrl URL | URL を使い、ウィキベースへ問い合わせ。 例: https://www.wikidata.org 。 更新源がウィキデータではない時に必須。
|
-U | --conceptUri URL | URLs 文字列の URL ベースは RDF 形式でウィキベース エントリで表現します。 例: http://www.wikidata.org 。 ウィキベースのインスタンスに ウィキデータ 由来の接頭辞が無い場合に必須。
|
--commonsUri URL | SDCサポートのためのコモンズのURI。 これを機能させるには--conceptUri と--commonsUri の両方を設定すべきです。
| |
--wikibaseScheme SCHEME | ウィキベースの問い合わせに用いる URL スキーマ(http、https) (廃止予定) 上述のwikibaseUrlを代用してください。 | |
--wikibaseHost HOSTNAME | ウィキベースに問い合わせるときに用いるホスト名。 (廃止予定) 上述のwikibaseUrlを代用してください。 | |
-I | --init | 開始時間とともに指定すると、この時間はデータベースで最も最近の変更時間として記録され、その後のリクエストがあった場合は、たとえ新規のデータが見つからなくても、この時間を開始ポイントとして使用。 |
--constraints | 更新された項目の抽出は constraintsrdf API 経由で制約違反 constraints violations を読み込み
| |
-K SERVERS | --kafka SERVERS | 指定すると、アップデータ Updater は Kafka を更新のソースとして、指定されたサーバをブローカ brokers として使います。たとえば、 kafka1001.eqiad.wmnet:9092,kafka1002.eqiad.wmnet:9092,kafka1003.eqiad.wmnet:9092
|
-C NAME | --consumer NAME | Kafka コンシューマ名。最善手法はホスト名もしくはその応用に指定することです。 |
-c NAME1,NAME2 | --cluster NAME1,NAME2 | Kafka のクラスタ名。 指定した場合は Kafka トピック名の接頭辞にそれを使い、topic1 と書く代わりに NAME1.topic1 や NAME2.topic2 と記述します。
|
--resetKafka | Kafka オフセットをリセット | |
--apiPath | APIへのパス、例えば /w/api.php (既定) または /api.php 。 (I78c222fe8b で導入)
| |
--entityDataPath | エンティティへのパス、例えば /wiki/Special:EntityData/ (既定) または /Special:EntityData/ 。 (I78c222fe8b で導入)
|
設定可能なプロパティ
下記のプロパティは、上記のスクリプトのスクリプト実行コマンドに追加することで設定可能です。
名前 | 意味 | 既定 |
---|---|---|
wikibaseServiceWhitelist | リモートサービスのホワイトリストのファイル名。 Blazegraphに適用。 | whitelist.txt |
org.wikidata.query.rdf.blazegraph.mwapi.MWApiServiceFactory.config | MWAPI integrationの設定ファイル | mwservices.json |
com.bigdata.rdf.sail.sparql.PrefixDeclProcessor.additionalDeclsFile | ファイル名にその他の接頭辞の定義を含む場合。構文は SPARQL クエリ内と同一です。ブレイズグラフはその定義を読み込み、クエリに反映可能です。 | |
wikibaseConceptUri | ウィキベース データの URL 接頭辞は、エントリの RDF 変換に使います。ウィキデータ接頭辞を使わないデータセットには指定が必須です。 | http://www.wikidata.org |
commonsConceptUri | Structured Data on CommonsサポートのためのURL接頭辞。 機能させるにはwikibaseConceptUri とcommonsConceptUri の両方を設定すべきです。
|
|
wikibaseHost | ウィキベースのインスタンスのホスト名。Blazegraphと更新プログラムの両方に適用。 (廃止予定) 上述のwikibaseConceptUriを使用してください。 | www.wikidata.org |
org.wikidata.query.rdf.blazegraph.inline.literal.WKTSerializer.noGlobe | 天体がない座標の既定の天体の値。「2」はエンティティ Q2 を既定の天体とすることを意味する。「0」は既定の天体なしを意味する。 Blazegraphに適用。 | 0 |
org.wikidata.query.rdf.tool.rdf.RdfRepository.timeout | RDFリポジトリとやり取りする時のタイムアウト値。単位は秒。更新プログラムに適用。 | -1 |
org.wikidata.query.rdf.tool.wikibase.WikibaseRepository.timeout | ウィキベース・リポジトリとやり取りする時のタイムアウト値。単位はミリ秒。更新プログラムに適用。 | 5000 |
http.userAgent | その他のサービスを呼び出す間にサービスが用いるユーザーエージェント | |
http.proxyHost http.proxyPort
https.proxyHost https.proxyPort |
その他のサービスを呼び出す間に用いるプロキシの設定 | |
wikibaseMaxDaysBack | 最近の変更データを何日前までさかのぼって更新プログラムから要求することができるか。データベースがこの日数よりも古い場合、より最近のダンプから再読み込みすべきです。 | 30 |
不足している機能
以下は現状サポートされていない機能です。
- リダイレクトはowl:sameAs tripleとしてのみ表現されますが、データではいかなる等価性も表さず、特別なサポートもありません。
お問い合わせ
サービスの不備についてお気づきの点は、メーリングリストdiscovery@lists.wikimedia.org
宛てにメールを送るか、チャットルーム#wikimedia-discovery
にてDiscoveryチームまでご連絡ください。
バグの報告はPhabricator に投稿し、進捗状況はDiscovery Phabricatorボードで確認してください。