2012-03-21 5 views
3

私はSPARQLステートメントでOPTIONAL句を使うことに問題があります。私がこのようなdbpediaを動かしているとき:紛らわしいOPTIONAL - 消えているレコード

CONSTRUCT { ?guitarist rdfs:label ?name . ?guitarist rdfs:comment ?desc . ?guitarist dbpprop:placeOfBirth ?placebirth } 
WHERE { 
    ?guitarist dbpprop:wikiPageUsesTemplate <http://dbpedia.org/resource/Template:Infobox_musical_artist> . 
    ?guitarist rdfs:label ?name . 
    ?guitarist rdfs:comment ?desc . 
    ?guitarist dbpprop:placeOfBirth ?placebirth . 
    FILTER (lang(?name) = "en" && lang(?desc) = "en") 
} 

ロジャーウォーターズ生誕地などのデータが返されます。しかし、私はこれにそれを回したときに、すべてのRoger_Watersレコードが不足している:私が間違ってやっている

CONSTRUCT { ?guitarist rdfs:label ?name . ?guitarist rdfs:comment ?desc . ?guitarist dbpprop:placeOfBirth ?placebirth } 
WHERE { 
    ?guitarist dbpprop:wikiPageUsesTemplate <http://dbpedia.org/resource/Template:Infobox_musical_artist> . 
    ?guitarist rdfs:label ?name . 
    ?guitarist rdfs:comment ?desc . 
    OPTIONAL { ?guitarist dbpprop:placeOfBirth ?placebirth } 
    FILTER (lang(?name) = "en" && lang(?desc) = "en") 
} 

何を - 私はオプション適用した後に失われていない完全な記録を想定...

答えて

4

DBpediaのエンドポイントは、それはあまりにも高価と思われるクエリの部分的な結果を返します。

これらの2つのクエリでSELECT COUNT(*) WHERE …を実行すると、最初のクエリでは8kの結果が返され、2番目のクエリでは60kの結果が返されるように見えます。 CONSTRUCTは結果ごとに2〜3のトリプルを生成する必要があるため、最初のクエリは16〜24kのトリプルを生成し、2番目のクエリは120〜180kを生成します。クエリを実行すると、いずれかのクエリから厳密に10001個のトリプルが得られます。明らかに結果は切り捨てられます。

LIMITOFFSET(おそらくORDER BY)を試してください。

+0

まあ、私は、ギタリストdbpprop:shortDescription "British Musician"を追加して結果を制限しようとしました。 constarintをWHERE句に追加しますが、空のセットが返されます(http://dbpedia.org/page/Roger_Watersに従って返される必要があります) – deha

関連する問題