Мне нужно выполнить запрос sparql к конечной точке dbpedia, который должен:
- Найти все сущности, содержащие "вену" в
label
и "город" в abstract
- Отфильтруйте их, сохранив только те из них, которые имеют хотя бы один
dbo
rdf:type
- Сортировка результатов по количеству типов
dbo
(например, если у объекта 5 dbo
rdf:type
это должно быть показано перед сущностями с 4 dbo
rdf:type
)
Я сделал несколько попыток, ближайший к результату:
select distinct (str(?s) as ?s) count(?t) as ?total where {{ ?s rdfs:label "vienna"@en. ?s rdf:type ?t.}
UNION { ?s rdfs:label ?l. ?s rdf:type ?t . ?l <bif:contains> '("vienna")'
. FILTER EXISTS { ?s dbo:abstract ?cc. ?cc <bif:contains> '("city")'. FILTER(lang(?cc) = "en").}}
FILTER (!strstarts(str(?s), str("http://dbpedia.org/resource/Category:")))
. FILTER (!strstarts(str(?s), str("http://dbpedia.org/property/")))
. FILTER (!strstarts(str(?s), str("http://dbpedia.org/ontology/")))
. FILTER (strstarts(str(?t), str("http://dbpedia.org/ontology/"))).}
LIMIT 50
Что будет (неправильно) подсчитайте rdf:type
перед тем, как его отфильтровать.Я не хочу считать rdf:type
, которые не dbo
(онтология).