Получение DBPedia Infobox категорий - PullRequest
7 голосов
/ 19 марта 2011

В настоящее время я ищу способ запросить DBPedia в базе данных Infobox Onyology через конечную точку SPARQL, чтобы получить список классов, подклассов выбранного класса и свойств данного класса.Насколько я смог найти, вам нужно либо знать свойство, которое вы ищете, либо искать что-то конкретное - все примеры, которые я нашел, основаны на идее, что вы захотите найти что-то конкретное(например, население городов выше определенной высоты и т. д.), тогда как я хотел бы создать что-то, где я мог бы эффективно «просматривать» категории.Например, начиная со списка подклассов «owl: Thing» на этой диаграмме иерархии классов и представляя пользователю список подклассов выбранного подкласса.Кажется возможным просмотреть что-то вроде этого через вики отображений, но было бы предпочтительнее напрямую запросить конечную точку SPARQL.

Есть ли какой-нибудь простой запрос SPARQL, который бы возвращал доступные классы и свойства этих классов?

Обновление: Я нашел способ получить иерархию классов, как кажется, путем итерации по этого запроса:

SELECT ?subject WHERE {
     ?subject rdfs:subClassOf owl:Thing
}

Который возвращает список подклассов owl: Thing, и если я заменяю owl: Thing одним из подклассов, я получаю список подклассов этого, пока нет подклассов, и в этот момент я могу выбрать все ресурсы, которые имеюттип, заданный выбранным подклассом.Я все еще не совсем уверен, как получить все свойства, общие для подкласса.

Обновление 2 Становимся ближе.Этот запрос возвращает мне все свойства (потомки dbpedia: property), которые также являются страной, и их названия:

SELECT DISTINCT ?prop ?title WHERE {
     ?country ?prop ?value.
     ?country a <http://dbpedia.org/ontology/Country>.
     ?prop rdf:type rdf:Property.
     ?prop rdfs:label ?title
}

Это фактически все, что я действительно просил.Последнее, что я сейчас пытаюсь сделать, это попытаться упорядочить их по количеству страниц, на которых они появляются (предположительно, наиболее распространенные свойства будут наиболее интересными).

Ответы [ 4 ]

7 голосов
/ 20 марта 2011

ОК, так что я действительно более или менее точно выяснил, как это сделать, поэтому я представляю это как ответ, а не просто как правку.То, что , похоже, дает мне именно то, что я ищу, - это начать с итерации иерархии классов, используя этот запрос :

SELECT ?class ?label WHERE {
     ?class rdfs:subClassOf owl:Thing.
     ?class rdfs:label ?label. 
     FILTER(lang(?label) = "en")
}

Подача выбранного результатав запрос вместо owl: Thing каждый раз.

После того, как пользователь выбрал класс самого низкого уровня, который ему нужен, для отображения списка свойств в порядке убывания по количеству записей вгде они появляются, я использую этот запрос :

SELECT ?prop ?title WHERE {
     ?country ?prop [].
     ?country a <http://dbpedia.org/ontology/Country>.
     ?prop rdf:type rdf:Property.
     ?prop rdfs:label ?title
} ORDER BY DESC(COUNT(DISTINCT ?country))

Конечно, если вы действительно посмотрите на эти результаты, там есть несколько прикольных свойств, которые не имеют очень описательных меток ("s"? Что?), но это как минимум то, что я искал в первую очередь.

3 голосов
/ 20 марта 2011

(1) Запрос для всех существующих классов:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?class
WHERE {
  ?s rdf:type ?class .
}

(2) Запрос для всех свойств, используемых в любом экземпляре класса C:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?property
WHERE {
  ?s rdf:type <C> .
  ?s ?property ?o
}
2 голосов
/ 20 марта 2011

Это даст вам все свойства, для которых rdfs:domain равно SpaceMission s:

select ?property where {
    ?property rdfs:domain <http://dbpedia.org/ontology/SpaceMission>
}

Все эти свойства принимают SpaceMission в качестве субъекта.

Обратите внимание, что вRDF (S), не обязательно иметь явный оператор rdfs:domain для каждого свойства, потому что использование свойства может подразумевать rdfs:domain s.Таким образом, вы можете обнаружить, что этот запрос даст вам список всех свойств, которые были определены с доменом SpaceMission, но не даст вам список всех свойств, которые фактически используются со всеми экземплярами SpaceMission.

1 голос
/ 29 марта 2011

Вполне возможно, что некоторые свойства на самом деле не определены так:

?p a rdf:Property .

, но любой термин в средней позиции по определению является свойством.Таким образом, вы можете получить больше результатов с помощью:

SELECT ?prop ?title WHERE {
     ?country a <http://dbpedia.org/ontology/Country>.
     ?country ?prop [] .
     ?prop rdfs:label ?title .
} 
ORDER BY DESC(COUNT(DISTINCT ?country))

(слегка переупорядочено, выборочно в начале может улучшить производительность)

...