Проблема SPARQL-запроса -> неправильный ответ - PullRequest
0 голосов
/ 08 июня 2009

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

SELECT count (*)
WHERE {?s ?p ?o}
FILTER (?s=http://kjkhlsa.net && ?p=http://lkasdjlkjas.com && ?o=Test)

В качестве ответа я получаю полностью неправильную тройку :( субъект не равен "http://kjkhlsa.net", предикат не равен" http://lkasdjlkjas.com", а объект также не равен "Тест". Может кто-нибудь объяснить мне, что я делаю не так: (

edit1: Я поместил запрос в php файл:

    $inst_query = 'SELECT * { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test"}';
    echo $inst_query;

Ответ от эха был "SELECT * {" Test "}". Тогда я попробовал это с ГДЕ:

    $inst_query = 'SELECT * WHERE { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test"}';
    echo $inst_query;

Здесь был ответ "SELECT * WHERE {" Test "}" ... так что мне не хватает URI, но для меня это проблема php, а не sparql.

edit2: Я поместил запрос в редактор запросов SPARQL, и я получил ответ "нет результата" .... но я уверен, что у меня есть эта тройка.

Ответы [ 3 ]

2 голосов
/ 08 июня 2009

В его нынешнем виде вопрос не очень ясен (см. Мой комментарий выше).

Поскольку вы по сути пытаетесь получить тройки, соответствующие шаблону, более эффективно использовать шаблон графика вместо FILTER. Многие реализации SPARQL сначала сопоставляют подходящие тройки по шаблонам графов и только затем применяют выражение FILTER. По сути, с помощью ?s ?p ?o графического шаблона вы выполняете линейное сканирование всех ваших троек.

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

SELECT * { <http://kjkhlsa.net> <http://lkasdjlkjas.com> "Test" }

Примечания: я не включил COUNT(*), который не является стандартным SPARQL. <> вокруг URI. "" вокруг буквального.

0 голосов
/ 03 января 2017

В следующем запросе используется функция count для подсчета количества различных URI, возвращаемых в переменную? S.

 SELECT ?s (COUNT (DISTINCT ?s) as ?count)
    WHERE {?s ?p ?o}
    FILTER (?o="Test")
0 голосов
/ 28 марта 2014

Попробуйте использовать это:

SELECT count (*) as ?count
WHERE {
    ?s ?p ?o
FILTER (?s=<http://kjkhlsa.net> && ?p=<http://lkasdjlkjas.com> && ?o=Test)
}
...