2017-02-11 2 views
1

私はSPARQLとウィキデータに新しいですし、ヒューゴー賞受賞のために次のことを取得しようとしています:WikidataからHugo受賞者を取得するには?

  • 作品タイトル
  • 著者
  • 年ウォン

私が探していますこれは驚くほど困難です。

「優勝者」というリンクタイプのベスト小説の賞にリンクしているすべてのタプルについて質問を始めました。

SELECT DISTINCT ?winner WHERE { 
    # P166: Award Recieved By 
    # Q103360: Hugo Award for Best Novel 
    ?winner ps:P1346 wd:Q255032. 

    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
} 

これは動作しますが、私は勝者からタイトルリンクを追加するとき、データがありません:

SELECT DISTINCT ?winner WHERE { 
    ?winner ps:P1346 wd:Q255032. 

    OPTIONAL { 
    # P1476: Title 
    ?winner wdt:P1476 ?title. 
    } 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
} 

私が間違って何をしているのですか?私は小さな名前空間を試しましたが、理解度はほとんどなく、役に立たないものでした。ヒューゴの勝者のためのページで

、受賞者のセクションがあります:それが生成される方法https://www.wikidata.org/wiki/Q255032#P1346

は?私は、そのプロパティを照会しようとした(と思う)の人々へのリンクが戻った:

SELECT DISTINCT ?winner ?winnerLabel ?for WHERE { 
    # P166: winner 
    # Q103360: Hugo Award for Best Novel 
    wd:Q255032 wdt:P1346 ?winner. 

    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
} 
+0

あなたの最初のクエリは、** **何も返しません!私がhttps://query.wikidata.orgで試したとき、少なくとも今は私のためではありません。なぜwdt:P166を述語として使用していないのですか? – AKSW

+0

2番目のクエリは、述語 'wdt:P166'を使用するときにも機能します。しかし、フィールドを元に戻すには、もちろんSELECT部分​​に追加する必要があります。つまり、SELECT DISTINCT?winner?winnerLabel?titleLabel' – AKSW

答えて

2

述語のためにあなたの代わりにwdt:ps:

を使用する必要がありますthis exampleをご覧ください:

SELECT DISTINCT ?item ?itemLabel ?AuthorLabel ?year WHERE { 
    ?item wdt:P166 wd:Q255032. 
    ?item wdt:P50 ?Author . 
    ?item wdt:P577 ?year . 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }  
} 

PS。私は、日付を獲得していない出版物を使用しました。

UPDATEthis answerを参照してください。

受信賞の時間特性のポイントは、ウィキデータ 修飾子を呼ぶものです。

そしてthis is query

SELECT ?item ?itemLabel ?authorLabel ?publicationDate ?dateOfAwardReceived WHERE { 
    ?item wdt:P50 ?author . 
    ?item wdt:P577 ?publicationDate . 
    ?item p:P166 ?awardReceivedStatement . 
    ?awardReceivedStatement ps:P166 wd:Q255032 . 
    ?awardReceivedStatement pq:P585 ?dateOfAwardReceived . 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }  
} 
+0

本当に賞が与えられた年が必要です。それは簡単に可能ですか? – Will

+1

@Will、もう少し複雑です、私は試してみます – Alexan

+0

私が作業しているプログラム(https://github.com/dhappy/awards/blob/master/test.rb)は、次のようなシンボリックリンクのツリーを作成しています。形式/賞/ヒューゴ/#{年}→/書籍/ by /#{著者} /#{タイトル}。私は現在、13年前に衝突を起こしています。 – Will

関連する問題