Невозможно выполнить SPARQL Select Query с использованием интерфейса REST GraphDB - PullRequest
0 голосов
/ 15 января 2019

У меня есть экземпляр graphDB, работающий на VPS, и я хочу получить список организаций с отношением hasUnit. Следующий запрос выполняется нормально на странице выполнения SPARQL:

PREFIX org: <http://www.w3.org/ns/org#>
SELECT (?s AS ?Organization) (COUNT(?o) AS ?Count)
WHERE{
    ?s org:hasUnit ?o  .
} GROUP BY ?s

, но когда я пытаюсь получить результаты, используя интерфейс REST, я получаю сообщение об ошибке "MALFORMED QUERY: org.eclipse.rdf4j.query.parser.sparql.ast.VisitorException: QName" org: hasUnit "использует неопределенный префикс"

вот мой запрос uri:

http://23.101.230.37:7200/repositories/CSIRO?query= SELECT (?s AS ?Organization) (COUNT(?o) AS ?Count) WHERE{
    ?s org:hasUnit ?o  . } GROUP BY ?s

Хотя следующий запрос выполняется нормально:

http://23.101.230.37:7200/repositories/CSIRO?query= SELECT (?s AS ?Organization) (COUNT(?o) AS ?Count) WHERE{
    ?s ?p ?o  . } GROUP BY ?s

1 Ответ

0 голосов
/ 15 января 2019

Проблема, как указывает сообщение об ошибке, заключается в том, что префикс пространства имен org: не определен в вашем запросе.

Обратите внимание, что в запросе, который вы пробовали в интерфейсе Workbench, это первая строка:

PREFIX org: <http://www.w3.org/ns/org#> 

Но эта строка отсутствует в запросе, который вы делаете через вызов REST API. Чтобы исправить, запустите запрос SPARQL с этой строки, когда вы выполняете вызов REST:

http://23.101.230.37:7200/repositories/CSIRO?query=PREFIX org: <http://www.w3.org/ns/org#> SELECT (?s AS ?Organization) (COUNT(?o) AS ?Count) WHERE{ ?s org:hasUnit ?o  . } GROUP BY ?s

Edit обратите внимание, что фактический запрос SPARQL должен быть в форме urlencoded , когда вы помещаете его в URL в качестве параметра, подобного этому - хотя некоторые клиентские инструменты могут обрабатывать это для вас , Я оставил его незакодированным для удобства чтения.

Кстати, причина, по которой вы не получаете эту ошибку во втором запросе, заключается в том, что в этом втором запросе вы не используете предикат с префиксом org:.

Каждый ресурс в RDF и SPARQL идентифицируется IRI. Например, в своем запросе вы используете идентификатор свойства http://www.w3.org/ns/org#hasUnit. Префикс пространства имен - это способ ввести сокращение, чтобы вы не каждый раз записывали полный IRI. В этом примере org: становится сокращением для http://www.w3.org/ns/org#, поэтому идентификатор свойства можно записать сокращенно (как префиксное имя ) как org:hasUnit.

...