У меня есть следующий запрос SPARQL:фильтр в SPARQL запроса
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT *
WHERE {
?person a foaf:Person;
foaf:name ?name;
prop:deathCause ?death_cause.
FILTER (langMatches(lang(?name), "EN")) .
}
LIMIT 50
Если запустить это здесь: http://dbpedia.org/snorql/
Вы увидите, что вы получите много результатов. Теперь я хотел бы отфильтровать одну причину смерти, скажем, «Трафик столкновения». Таким образом, это должно быть просто добавить фильтр:
FILTER (?death_cause = "Traffic collision").
Так запрос должен быть затем:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT *
WHERE {
?person a foaf:Person;
foaf:name ?name;
prop:deathCause ?death_cause.
FILTER (?death_cause = "Traffic collision").
FILTER (langMatches(lang(?name), "EN")) .
}
LIMIT 50
Однако это ничего не возвращает. Кто знает, что не так с запросом? Благодарю.
Спасибо! Извините, я на самом деле не имел в виду _filter out_, мне нужна была одна причина смерти. Но удаление «!» в последнем запросе в вашем ответе решает, что и научиться фильтровать _out_, я считаю бонус! Небольшое продолжение: Какова причина добавления str() вокруг имени/переменной свойства? Это не очевидно. –
@MariusLian Literals в RDF могут быть простыми (без языка или типа данных), набираться (с типом данных) или помечены тегом языка (с тегом языка). 'str' извлекает строку из всех трех видов. Я добавил больше объяснений в ответ. –
Так что на самом деле в другом фильтре это то, что происходит. Функция lang() извлекает часть языка. Спасибо за четкое объяснение! –