2015-05-30 19 views
0

Я хочу отфильтровать ресурс, который используется как «join» в запросе. Например, учитывая ресурс DBpedia, мне нужно вернуть метку ресурсов, связанных свойством sameAs, и иметь «pt» в своем URI. Я использую следующий запрос:Подзапрос SPARQL в DBpedia

SELECT ?label 
{ <http://dbpedia.org/resource/Category:Algorithms> owl:sameAs ?nomePT. 
    ?nomePT rdfs:label ?label 
    FILTER regex(str(?nomePT), "pt", "i") 
} 

Однако, он возвращает пустой, так как переменная всегда содержит первый ресурс из списка «NomePT?». см:

SELECT ?nomePT 
{ <http://dbpedia.org/resource/Category:Algorithms> owl:sameAs ?nomePT. 
    ?nomePT rdfs:label ?label 
} 

Но ресурс имеет несколько sameAs ссылки:

SELECT ?nomePT 
{ <http://dbpedia.org/resource/Category:Algorithms> owl:sameAs ?nomePT.} 

, что не так в запросе?

Заранее благодарим.

ответ

0

Если вы пишете запрос:

SELECT distinct * { 
    ?nomePT owl:sameAs category:Algorithms. 
} 

Вы получите все ссылки, которые owl:sameAs ваш ресурс category:Algorithms. Тем не менее, вы уже ограничиваете объем тройки. Так что если вы спросите:

SELECT distinct ?nomePT { 
    ?nomePT owl:sameAs category:Algorithms. 
    ?nomePT rdfs:label ?label 
} 

enter image description here

Если первый находят свой определенный ресурс, а затем ищет ярлык только для этого ресурса. Однако, если вы не связаны ваш тройными в начале и только отфильтровать ваш ресурс даст вам все ссылки вам нужно:

SELECT distinct ?resource { 
    ?nomePT owl:sameAs ?resource. 
    ?nomePT rdfs:label ?label. 
filter(?nomePT=category:Algorithms) 
} 

enter image description here

Таким образом, вы должны сначала найти все ресурсы, а затем фильтровать их на основе конкретных ресурсов, как category:Algorithms и так sameAs рефлексивно:

SELECT distinct * { 
    ?nomePT owl:sameAs ?resource. 
    ?nomePT rdfs:label ?label. 
filter(?nomePT=category:Algorithms && regex(str(?resource), "pt", "i")) 
} 

enter image description here

+0

вы имели в виду 'фильтр (*? resource * = category: Algorithms && ... ' – AndyS

+0

Двигатели могут оптимизировать' FILTER (? resource = category: Algorithms) 'и использовать его в более длинном выражении' && ', чтобы сделать то же самое, что и'? resource owl: sameAs категория: «Алгоритмы», а также ответы «. resource = category: Алгоритмы» в ответах. – AndyS

+0

Можете ли вы подробно рассказать? – Artemis

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