2011-03-19 4 views
7

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

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

Update: Я придумал способ, чтобы получить иерархию классов это, кажется, перебирая this query:

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

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

Обновление 2 Подходит ближе. Этот запрос получает мне все свойства (дети DBpedia: недвижимость), которые также являются страной, а также их названия:

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

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

ответ

7

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

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

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

После того, как пользователь выбрал класс низшего уровня, что они хотели бы, чтобы отобразить список свойств, в порядке убывания по количеству записей, в которых они появляются, я использую this query:

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»? What?), Но это, по крайней мере, то, что я искал в первую очередь.

2

Это поможет вам все свойства которых 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 ,

+0

По какой-то причине, что, кажется, не работает, когда вы выбираете страну вместо SpaceMission. Все, что он возвращает, - «twinCountry». Кроме того, похоже, что они возвращают вещи, которые находятся в dbpedia: онтология, а не dbpedia: свойство. Я обновил основной пост тем, что, похоже, является ответом на мой оригинальный вопрос. – Paul

3

(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 
} 
1

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

?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)) 

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

 Смежные вопросы

  • Нет связанных вопросов^_^