2011-03-01 16 views
13

SPARQLクエリを使用してDBpediaリソース(Person)に関する情報を取得しようとしています。私はリソースURIをパラメータ化して、同じクエリを使用して任意のPersonに関するデータを取得したいと考えています。いくつかの属性は特定のリソースに対して存在しないかもしれないので、私はOPTIONALステートメントを利用しています。ここに私のクエリは次のとおりです。SPARQL OPTIONALを正しく使用して、存在する可能性のあるリソースの属性を取得する方法はありますか?

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    PREFIX dbo: <http://dbpedia.org/ontology/> 
    PREFIX dbpprop: <http://dbpedia.org/property/> 
    PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
    SELECT DISTINCT ?label ?abstract ?placeOfBirth 
     ?birthPlace ?birthDate ?deathDate ?page ?thumbnail 
    WHERE { 
     <http://dbpedia.org/resource/Neil_Simon> rdfs:label ?label ; 
      dbo:abstract ?abstract ; 
      foaf:page ?page . 
     OPTIONAL { 
      <http://dbpedia.org/resource/Neil_Simon> dbpprop:placeOfBirth ?placeOfBirth ; 
       dbpprop:birthPlace ?birthPlace ; 
       dbo:birthDate ?birthDate ; 
       dbo:deathdate ?deathDate ; 
       dbo:thumbnail ?thumbnail . 
     } 
     FILTER (LANG(?label) = 'en')  
     FILTER (LANG(?abstract) = 'en') 
    } 
    LIMIT 1 

私は他の人のために同じクエリを使用している場合、彼らはそれらの性質を持っていないかもしれないので、私は、オプションでラベル、抽象的でページ以外のすべてを残してきました。問題は、これらのオプションの属性のいずれも結果に表示されていないことです。 Neil Simonのケースでは、birthDate、birthPlace、およびサムネイルの値がhttp://dbpedia.org/resource/Neil_Simonであることがわかります。ただし、クエリを実行すると、これらの値が表示されません。DBpedia SPARQL query。私は間違って何をしていますか、オプションでそれらのプロパティをオプションで取得できますか?

答えて

14

オプションの構成を使用していますが、マップパターン自体には、一致するすべての属性が必要です。出生地、生年月日、死亡日、サムネイルがある場合にのみ、内部の任意の構成が満たされます。

オプション構成を複数のオプション構成に分割することをお勧めします。

+0

もちろん、それは非常に意味があります!私はOPTIONALコンストラクトをそれぞれのプロパティのために別々のものに分割し、完全に動作します。 –

+0

私たちに作業コードを教えてください –

関連する問題