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?
Oczywiście to ma sens! Podzielę konstrukcję OPCJONALNĄ na osobną dla każdej własności i działa idealnie. –
prosimy o podzielenie się z nami roboczym kodem –