SPARQL-запрос с неработающим путем к свойству - PullRequest
0 голосов
/ 22 апреля 2019

Я хочу сделать запрос, который выполняет следующие действия: Выберите все тройки (s,p,o), если существует путь длиной не менее 2 ребер от s до o со свойством p.Таким образом, все края пути должны быть помечены p.Я попробовал следующее:

select  ?s <http://dbpedia.org/ontology/isPartOf> ?o
WHERE { 
?s <http://dbpedia.org/ontology/isPartOf>{2,} ?o.
?s <http://dbpedia.org/ontology/isPartOf> ?o 
}

Я выполнил его с помощью API Jena:

ParameterizedSparqlString parameterizedSparql = new ParameterizedSparqlString(model);
parameterizedSparql.setCommandText(sparql);
Query query = QueryFactory.create(parameterizedSparql.asQuery().toString(), Syntax.syntaxARQ);
QueryExecutionFactory.create(query, model).execSelect();

Я использовал Syntax.syntaxARQ, чтобы он понимал пути к свойствам.

Это дает мне следующую ошибку:

Exception in thread "main" org.apache.jena.query.QueryParseException: Encountered " "{" "{ "" at line 3, column 42.
Was expecting one of:
<IRIref> ...
<PNAME_NS> ...
<PNAME_LN> ...
<BLANK_NODE_LABEL> ...
<VAR1> ...
<VAR2> ...

Можете ли вы показать мне, как я могу правильно сделать запрос?

1 Ответ

1 голос
/ 22 апреля 2019

Кроме того, как заметил @AKSW, синтаксис {2,} из рабочего проекта SPARQL 1.1 не включил в окончательную спецификацию SPARQL 1.1 , поэтому вы не можетеполагайтесь на то, что он поддерживается каждым процессором SPARQL.

Вы можете использовать синтаксис {2,} с Virtuoso , который является двигателем, питающим общедоступную DBpediaконечная точка , но чтобы сделать это через Jena, вы должны либо использовать «расширенный синтаксис» (Syntax.syntaxARQ), либо обойти синтаксический анализатор ARQ .

Похоже, что ваша непосредственная проблемасводится к ошибке в Йене, где ParameterizedSparqlString.asQuery() в настоящее время не поддерживает "расширенный синтаксис" (Syntax.syntaxARQ) запросов ;parameterizedSparql.toString() должно быть достаточно, как прокомментировал @ AndyS.

...