SPARQL查询QueryParseException ^ owl,端点正常,耶拿不正常

时间:2018-12-12 11:39:04

标签: sparql jena

我有以下SPARQL查询:

PREFIX owl <http://www.w3.org/2002/07/owl#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT Distinct(?so2) WHERE {
 ?city a dbo:City ; (owl:sameAs|^owl:sameAs)* ?so2 .
 filter( !regex(str(?so2), "dbpedia" ))
} order by ?city

这在http://dbpedia.org/sparql下有效,但不能与Java / Jena一起使用。

Jena我收到此错误:

Exception in thread "main" org.apache.jena.query.QueryParseException: Lexical error at line 1, column 11.  Encountered: " " (32), after : "owl"

所以,怎么了:

(owl:sameAs|^owl:sameAs)*

我正在使用最新版本的耶拿(3.9.0)。

我的Java代码快照,错误来自:

Query query = QueryFactory.create(cSparql);
QueryExecution qexec = QueryExecutionFactory.sparqlService(endPoint, query);

如果我使用以下代码:

QueryEngineHTTP qexec = new QueryEngineHTTP(endPoint, cSparql);

我收到此错误:

HttpException: 400 HTTP 400 error making the query: Bad Request

为什么会这样,以及如何使用Java / Jena执行?

预先感谢

2 个答案:

答案 0 :(得分:3)

您的查询不是正确的SPARQL。如评论中所述,Virtuoso在SPARQL中接受了许多SQL-ism,但是并不是所有SPARQL处理器都具有这种灵活性。

您的查询应该是(为了便于阅读而对空白进行了调整)-

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT DISTINCT ?so2  
WHERE
  {
    ?city  a                          dbo:City ; 
           (owl:sameAs|^owl:sameAs)*  ?so2 .
    FILTER ( !regex(str(?so2), "dbpedia" ) )
  } 
ORDER BY ?city

答案 1 :(得分:0)

完美的作品: 这样:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT DISTINCT ?so2  
WHERE
  {
    ?city  a                          dbo:City ; 
           (owl:sameAs|^owl:sameAs)*  ?so2 .
    FILTER ( !regex(str(?so2), "dbpedia" ) )
  } 
ORDER BY ?city

以这种方式:

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT Distinct(?so2) WHERE {
 ?city a dbo:City ; owl:sameAs|^owl:sameAs* ?so2 .
 filter( !regex(str(?so2), "dbpedia" ))
} order by ?city

非常感谢大家!