2014-09-24 2 views
0

У меня есть абзац, который разбит на фразы. Мне нужно отфильтровать запрос sparql, чтобы получить строки только первой и второй фразы.запрос фильтра sparql с именем ресурса

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX ns: <http://example.org/ns#> 
SELECT ?string1 ?string2 
WHERE 
{ 
    ?paragraph ns:phrase ?phrase1 , 
         ?phrase2 . 
    ?phrase1 rdfs:label ?string1 . 
    ?phrase2 rdfs:label ?string2 . 
} 
LIMIT 100 

Единственный заказ я имею фраз закодирована в РДФ ресурса <p23969797xX>:

@base <http://example.org/base/> . 
    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 
    @prefix ns: <http://example.org/ns#> . 

    <p23969797x1> ns:phrase <p23969797x2> . 
    <p23969797x1> ns:phrase <p23969797x3> . 
    <p23969797x1> ns:phrase <p23969797x4> . 
    <p23969797x2> rdfs:label "string1" . 
    <p23969797x3> rdfs:label "string2" . 
    <p23969797x4> rdfs:label "string3" . 
+0

Если в вашем RDF нет явной информации о заказе, тогда нет возможности ограничить первые две фразы. Можно было бы написать запрос, который получит всего две фразы, но будет реализован зависимый (и потенциально недетерминированный), какие фразы вы получили, то есть вам не гарантировано получить первые две фразы. RDF - это заданная модель данных, а не список, поэтому упорядочение данных совершенно не имеет значения, тройка просто существует или не существует. – RobV

+1

Btw полезно, если вы действительно публикуете полный рабочий пример, и у вашего запроса, и у данных были синтаксические ошибки в них и не было никаких объявлений с префиксом/базой. Я сделал некоторые определения, чтобы сделать этот жизнеспособный вопрос – RobV

ответ

2

Если заказ на имя URI, вы можете проверить его строковое преобразование и только выбрать URI, заканчивающиеся на «x1» и «x2».

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX ns: <http://example.org/ns#> 
SELECT ?string1 ?string2 
WHERE 
{ 
    ?paragraph ns:phrase ?phrase1 , 
        ?phrase2 . 
    ?phrase1 rdfs:label ?string1 . 
    ?phrase2 rdfs:label ?string2 . 
    FILTER(strEnds(str(?phrase1), "x1") && strEnds(str(?phrase1), "x2")) 
} 
LIMIT 100 
Смежные вопросы