我有以下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执行?
预先感谢
答案 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
非常感谢大家!