2015-07-03 2 views
1

Я пытаюсь запросить данные из dbpedia по имени страны. Я хочу, чтобы найти его, есть ли ресурс для этой страны или через его существование в wikiPageRedirects. Вот рабочая версия:SPARQL для прямого ресурса dbpedia ИЛИ wikiPageRedirects

PREFIX res: <http://dbpedia.org/resource/> 
PREFIX ont: <http://dbpedia.org/ontology/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT ?country ?capital ?label 
WHERE { 
    { res:Dominion_of_Canada ont:capital ?capital . 
    ?capital rdfs:label ?label } 
UNION 
    { res:Dominion_of_Canada ont:wikiPageRedirects ?country . 
    ?country ont:capital ?capital . 
    ?capital rdfs:label ?label } 

FILTER (lang(?label) = "en") 
} 

Я бы хотел (если возможно), разделить страну. Можно ли назначить ресурс переменной таким образом, чтобы запрос SPARQL выглядел следующим образом?

SELECT ?country ?capital ?label 
WHERE { 
{ ?country EXISTS res:Dominion_of_Canada } # to get the idea across 
UNION 
{ res:Dominion_of_Canada ont:wikiPageRedirects ?country } 

?country ont:capital ?capital . 
?capital rdfs:label ?label . 
FILTER (lang(?label) = "en") 
} 

Как и прежде, скорость важна также. Если ресурс существует, тогда было бы лучше, если бы он пропустил поиск в wikiPageRedirects.

+0

ли ответ на http://stackoverflow.com/questions/23871225/retriving-dbpedia-owltype-value-of-resource-with-dbpedia-owlwikipageredirect help? –

+0

Спасибо, Джошуа. Эта часть запроса уже работает. Я добавил некоторые подробности к основному вопросу выше. – Bonjiro

+0

Я не вижу там запроса ..., но обычно проще отправлять сообщения в виде обновлений вопросов. –

ответ

2

Проверка «существует» ли ресурс или нет, это немного расплывчатым, так как радужины только постоянные данные. Вопрос в том, действительно ли DBpedia содержит любые троек о конкретном ресурсе. В вашем случае вы хотите знать, перенаправляет ли он на что-либо еще, или имеет собственные свойства. Путь собственности в форме dbpedia: France dbpedia-owl: wikiPageRedirects *? Country - на самом деле, вероятно, лучший способ это сделать. Если нет перенаправленных ссылок, то ? Страна is dbpedia: France, а если есть, то ? Страна - значение переадресации. Единственный способ «проверить» - это искать эти тройки. Я думаю, что это означает, что вы будете в конечном итоге с чем-то вроде этого (подобно тому, как это показано в моем ответе another question involving redirects):

select ?country ?anthem ?author { 
    #-- The only way to really "check" that the resource 
    #-- "exists" and is not a redirect, is by checking 
    #-- whether it has any redirect links. If it doesn't, 
    #-- then ?country is dbpedia-owl:France, like you want 
    #-- and if it does, then then you want to follow them. 
    dbpedia:France dbpedia-owl:wikiPageRedirects* ?country . 

    #-- I'm using anthem and author here because 
    #-- it doesn't look like there was reliable information 
    #-- about the capital. 
    ?country dbpedia-owl:anthem ?anthem .     
    ?anthem dbpprop:author ?author . 
} 

SPARQL results

+0

Круто! Это сделало это и упростило запрос совсем немного. Что означает * означает? (и вы были правы - другой ответ был похож, хотя я не видел, как он работает) – Bonjiro

+0

@Bonjiro '*' является одним из [путей собственности] (http://www.w3.org/TR/sparql11-query/# propertypaths), поддерживаемых в SPARQL 1.1.Образец 'a p * b' соответствует, если есть * путь * от a до b, состоящий из нуля или более вхождений' p'. В случае, если длина пути равна нулю, это означает, что a и b должны быть одинаковыми. Например, 'x hasChild *? Y' свяжет'? Y' с 'x' и все потомки' x'. –

+0

Отлично, и это очень полезно. Большое вам спасибо, Джошуа! – Bonjiro

0

Как насчет этого?

PREFIX dbr: <http://dbpedia.org/resource/> 

select dbr:France ?capital ?label where { 
    {dbr:France a dbpedia-owl:Country. 
    dbr:France dbpedia-owl:capital ?capital . 
    ?capital rdfs:label ?label . 
    } 

union {dbr:France dbpedia-owl:wikiPageRedirects ?redirectPage. 
     ?redirectPage dbpedia-owl:capital ?capital. 
     ?capital rdfs:label ?label .  
} 
} 

Result

+1

Hi Ali. Я уточнил этот вопрос. Дело в том, можно ли разделить часть страны, назначив ресурс переменной, если она существует. – Bonjiro

+0

Хорошо. Джошуа уже ответил :) –

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