2011-03-01 6 views
13

Próbuję użyć kwerendy SPARQL do pobierania informacji o zasobie DBpedia (osoba). Chciałbym użyć tego samego zapytania do pobrania danych o dowolnej osobie poprzez sparametryzowanie identyfikatora URI zasobu. Ponieważ niektóre atrybuty mogą nie istnieć dla określonego zasobu, używam instrukcji OPCJONALNEJ. Tu jest mój kwerendy:Jak poprawnie używać OPCJONALNIE SPARQL do pobierania atrybutów dla zasobu, który może istnieć?

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 

Zostawiłam wszystko oprócz etykiety, abstrakcyjne i stronie w opcjonalny, ponieważ jeśli mogę użyć tego samego zapytania do innej osoby, nie mogą mieć te właściwości. Problem polega na tym, że żaden z opcjonalnych atrybutów nie pojawia się w wynikach. W przypadku Neila Simona możesz zauważyć, że istnieją wartości dla daty urodzenia, miejsca urodzenia i miniatury: http://dbpedia.org/resource/Neil_Simon. Jednak wartości te nie pojawiają się po uruchomieniu zapytania: DBpedia SPARQL query. Co robię źle i jak mogę opcjonalnie pobrać te właściwości?

Odpowiedz

14

Mimo że użyto opcjonalnej konstrukcji, sam wzór mapy wymaga dopasowania wszystkich atrybutów. Tak więc tylko jeśli masz miejsce urodzenia, datę urodzin, datę śmierci i miniaturę, wewnętrzny opcjonalny konstrukt jest spełniony Proponuję podzielenie opcjonalnej konstrukcji na kilka opcjonalnych konstrukcji.

+0

Oczywiście to ma sens! Podzielę konstrukcję OPCJONALNĄ na osobną dla każdej własności i działa idealnie. –

+0

prosimy o podzielenie się z nami roboczym kodem –

Powiązane problemy