ウィキデータのREST APIを使用した次の SPARQL クエリは、いずれもxsd:datetime
1 月 1 日のタイプ の日付を返します。
>>> # Inception of Manchester United F.C. = in 1875
>>> wikidata_rest_query("SELECT ?date WHERE { wd:Q18656 wdt:P571 ?date }")
{'head': {'vars': ['date']},
'results': {'bindings': [{'date': {'datatype': 'http://www.w3.org/2001/XMLSchema#dateTime',
'type': 'literal',
'value': '1875-01-01T00:00:00Z'}}]}}
>>> # Istanbul nightclub attack = on January 1st 2017
>>> wikidata_rest_query("SELECT ?date WHERE { wd:Q28094271 wdt:P585 ?date }")
{'head': {'vars': ['date']},
'results': {'bindings': [{'date': {'datatype': 'http://www.w3.org/2001/XMLSchema#dateTime',
'type': 'literal',
'value': '2017-01-01T00:00:00Z'}}]}}
最初のケースでは、日付は「1875 年」を意味するだけであり、文字どおり 1875 年 1 月 1 日の午前 0 時ではありません。2 番目のケースでは、日付は実際には「2017 年 1 月 1 日」を意味しますが、厳密には午前 0 時ではありません。「1875」や「2017-01-01」などの応答が望ましいでしょう。
これらのトピック (マンチェスター ユナイテッド FCと2017 年のイスタンブール ナイト クラブの攻撃)のウィキデータ ページを参照すると、正しいレベルの詳細が表示されます (つまり、最初のケースでは 1875 年ですが、2 番目のケースでは 2017 年 1 月 1 日)。データベースに正しい情報があり、それを照会する方法があることを願っています。
何か案は?
ノート
datatype(?date)
違いが見られることを期待して、クエリを実行してみましたがxsd:datetime
、両方の例で返されます。
編集
wikidata_rest_query()
上記のクエリをテストする場合は、の python 3 コードを次に示します。
from urllib.request import urlopen, quote
import json
def wikidata_rest_query(query):
url = "https://query.wikidata.org/sparql?query=%s&format=json" % quote(query)
with urlopen(url) as f:
response = f.read().decode("utf-8")
return json.loads(response)