Я пытаюсь извлечь все сущности в DBPedia, у которых есть население. Однако я обнаружил, что существуют разные имена полей для населения в зависимости от объекта. Например, http://dbpedia.org/page/Boston
имеет поле populationTotal
, а http://dbpedia.org/page/Alaska
имеет поле 2010pop
. Есть ли полный список полей населения, которые я могу запросить?
Что-то вроде select ?p { ?p a rdf:Property filter(regex(str(?p), "pop")) }
- действительно, это зависит от шаблона регулярного выражения, но, в конце концов, вы должны пройтись по списку и решить, какой из них правильный или нет.
Для свойств пространства имен /ontology/
вы также можете попробовать использовать диапазон в качестве дополнительного фильтра: select ?p ?range { ?p a rdf:Property filter(regex(str(?p), "pop")) optional {?p rdfs:range ?range} }
Идеально! Я не против отфильтровать список вручную. Спасибо! Есть ли простой способ взять этот список свойств и найти все сущности, у которых есть хотя бы одно из этих свойств?
"легкий" для меня - SPARQL, что-то вроде SELECT DISTINCT ?s { VALUES ?p {dbo:populationTotal dbp:2010pop} ?s ?p ?o }
должно помочь
Решение через @AKSW выше: запросить все свойства, которые начинаются с "pop" и имеют указанный диапазон.
SELECT ?p ?range {
?p a rdf:Property
FILTER(regex(str(?p), "pop"))
OPTIONAL {?p rdfs:range ?range}
}
Обратите внимание, что этот запрос находит все свойства, которые включают (не обязательно начинаются, заканчиваются или имеют в середине) чувствительную к регистру подстроку «pop», и он определенно находит некоторые из них, которые сомнительно являются «совокупностью». Кроме того, спецификация rdfs:range
не является обязательной, поэтому ее отсутствие не исключает свойство из списка. Когда вы вручную просматриваете вывод, может быть полезно включить что-то вроде ORDER BY ?range ?p
.
Не думаю, что есть список. Некоторые свойства находятся в онтологии DBpedia, другие - просто отображения информационных блоков. Используются разные свойства из-за разных классов соотв. шаблоны infoxbox в Википедии. Вы можете попробовать использовать SPARQL и запросить все свойства, которые соответствуют некоторому шаблону в имени.