15

SPARQL クエリを使用して DBpedia リソース (Person) に関する情報を取得しようとしています。リソース URI をパラメーター化することで、同じクエリを使用して任意の Person に関するデータを取得したいと考えています。特定のリソースには一部の属性が存在しない可能性があるため、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

label、abstract、page 以外はすべて に残しましたOPTIONAL。別の人に同じクエリを使用すると、それらのプロパティがない可能性があるためです。問題は、これらのオプションの属性が結果に表示されないことです。Neil Simon の場合、http://dbpedia.org/resource/Neil_SimonbirthDateに、 、birthPlaceおよびの値があることがわかります。ただし、クエリを実行すると、これらの値は表示されません: DBpedia SPARQL query。私は何を間違っていますか?オプションでそれらのプロパティを取得するにはどうすればよいですか?thumbnail

4

1 に答える 1

15

コンストラクトを使用しOPTIONALましたが、マップ パターン自体は一致するために内部のすべての属性を必要とします。したがってbirthPlacebirthDate、 がdeathDateありthumbnail、内部のオプション構造が満たされている場合にのみ

OPTIONALコンストラクトを複数のコンストラクトに分割することをお勧めしOPTIONALます。

于 2011-03-01T23:26:30.160 に答える