Java SPARQL查询在Fuseki接口上工作,但在Jena中工作

Java SPARQL查询在Fuseki接口上工作,但在Jena中工作,java,sparql,jena,fuseki,Java,Sparql,Jena,Fuseki,这是我的问题 前缀rdfs: 前缀rdf: 前缀号: 前缀rs: 前缀mo: 前缀: 选择?项目总和?相似性*?重要性*?级别重要性*?评级值作为?总和相似性 组与喜欢此实例的组不同 第二组,因为:;分隔符=,和as?原因 哪里 { 值?用户{:ania} 变量?x绑定到用户喜欢的项目:ania。 ?用户rs:hasRated?评级。 ?评级:喜欢。 ?额定值:约?x。 ?评级rs:根据评级值进行评级。 ?评级rs:createdOn?评级日期。 0级类相似性 { 提取与喜欢的项来自同一类类型的

这是我的问题

前缀rdfs: 前缀rdf: 前缀号: 前缀rs: 前缀mo: 前缀: 选择?项目总和?相似性*?重要性*?级别重要性*?评级值作为?总和相似性 组与喜欢此实例的组不同 第二组,因为:;分隔符=,和as?原因 哪里 { 值?用户{:ania} 变量?x绑定到用户喜欢的项目:ania。 ?用户rs:hasRated?评级。 ?评级:喜欢。 ?额定值:约?x。 ?评级rs:根据评级值进行评级。 ?评级rs:createdOn?评级日期。 0级类相似性 { 提取与喜欢的项来自同一类类型的所有项。 我认为来自同一个班级的人占了50%的相似性。 此值可以根据测试或应用程序域进行更改。 值?classImportance{0.5}类级别 “x a”级。 ?项目a?类别。 ?rs类:相似性值?相似性。 将重要程度绑定为重要程度 将4/7绑定为?级别重要性 bind concatit共享同一个类,即str?class,因为 } } 按项目分组 按描述排序?总和相似性 如果我把它放在fuseki sparql接口中,它就可以工作,但是如果我把它放在一个文件中并从jena调用该文件,我会得到以下异常:

路径为[/SemanticRecommitder]的上下文中Servlet[com.semanticRecommitder.web.Main]的EVERE:Servlet.service引发异常 HttpException:400 位于org.apache.jena.sparql.engine.http.HttpQuery.rewrafttpquery.java:411 位于org.apache.jena.sparql.engine.http.HttpQuery.execPostHttpQuery.java:399 位于org.apache.jena.sparql.engine.http.HttpQuery.execHttpQuery.java:291 位于org.apache.jena.sparql.engine.http.QueryEngineHTTP.execresultsetinerqueryenginehttp.java:359 在org.apache.jena.sparql.engine.http.QueryEngineHTTP.execSelectQueryEngineHTTP.java:351 尽管我打印了jena从文件加载的查询并将其复制到fuseki,但它在fuseki上运行得非常好

这就是我加载查询的方式,但我确信这与实际问题无关

InputStream testIn = getClass().getResourceAsStream("/recommend.rq");
        String queryTemplate = IOUtils.toString(testIn);
System.out.println(queryTemplate);
        QueryExecution x = QueryExecutionFactory.sparqlService(
                "http://localhost:3030/rs/query", queryTemplate);
        ResultSet results = x.execSelect();
        ResultSetFormatter.out(System.out, results);
使现代化 此代码有效

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix no: <http://www.newontology.org/no#>
prefix rs: <http://semanticrecommender.com/rs#>
prefix mo: <http://music.org/musicontology/mo#>
prefix : <http://www.MusicSemanticOntology.com/mso#>

select *
where
{
  values ?user { :ania }
  #the variable ?x is bound to the items the user :ania has liked.
  ?user rs:hasRated ?ratings.
  ?ratings a rs:Likes.
  ?ratings rs:about ?x.
  ?ratings rs:ratesBy ?ratingValue.
 ?ratings rs:createdOn ?ratingDate.

  #level 0 class similarities
  {
    #extract all the items that are from the same class (type) as the liked items.
    #I assumed the being from the same class accounts for 50% of the similarities.
    #This value can be changed according to the test or the application domain.
    values ?classImportance {0.5} #class level
    ?x  a ?class .
    ?item a ?class .
    ?class rs:hasSimilarityValue ?similarity .
    bind (?classImportance as ?importance)
    bind( 4/7 as ?levelImportance)
    bind (concat("it shares the same class, which is ", str(?class), " with ", str(?x)) as ?becauseOf)
  }


}
当我移除它们时,一切正常,但当我放置它们时,我得到了那个错误

更新4 日志是:

2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "Error 400: Parse error: [\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "PREFIX  :     <http://www.MusicSemanticOntology.com/mso#>[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "PREFIX  rs:   <http://semanticrecommender.com/rs#>[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "SELECT  ?item (SUM(( ( ( ?similarity * ?importance ) * ?levelImportance ) * ?ratingValue )) AS ?summedSimilarity) (GROUP_CONCAT DISTINCT (?x) AS ?commingFromLikingThisInstance) (GROUP_CONCAT (?becauseOf ; separator=' ,and ') AS ?reason)[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "WHERE[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "  { VALUES ?user { :ania }[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "    ?user     rs:hasRated  ?ratings .[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "    ?ratings  rdf:type     rs:Likes ;[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "              rs:about     ?x ;[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "              rs:ratesBy   ?ratingValue[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "    { VALUES ?classImportance { 0.5 }[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "      BIND(?classImportance AS ?importance)[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "      BIND(( 4 / 7 ) AS ?levelImportance)[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "      ?x      rdf:type              ?class .[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "      ?item   rdf:type              ?class .[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "      ?class  rs:hasSimilarityValue  ?similarity[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "      BIND(concat("it shares the same class, which is ", str(?class), " with ", str(?x)) AS ?becauseOf)[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "    }[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "  }[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "GROUP BY ?item[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "ORDER BY DESC(?summedSimilarity)[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "[\r]Encountered " "distinct" "DISTINCT "" at line 6, column 129.[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "Was expecting:[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "    "(" ...[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "    [\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.wire:63 - << "Fuseki - version 2.3.1 (Build date: 2015-12-08T09:24:07+0000)[\n]"
2016-03-28 11:17:50 DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager:274 - Connection [id: 0][route: {}->http://localhost:3030] can be kept alive indefinitely
2016-03-28 11:17:50 DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager:281 - Connection released: [id: 0][route: {}->http://localhost:3030][total kept alive: 1; route allocated: 1 of 5; total allocated: 1 of 10]
更新5
现在我发现了真正的问题,它是单词DISTINCT,当我删除它时,一切正常,当我把它放回去时,它只是从fuseki接口工作,而不是从jena java:help guys please

我想如果可以的话,你可能希望jena避免本地解析,在这种情况下,直接将查询发送到远程端点。在answers.semanticweb.com上的问题中描述了这种方法。其想法是使用查询字符串创建QueryEngineHTTP

至于你为什么会犯这个错误,我想这可能是杰娜那边的一个错误。我有一点证据和一点假设。再多调查一点,在Jena的支持下玩,有些奇怪的事情发生了。如果您输入查询

select (group_concat(distinct ?x) as ?y) (sum(distinct ?x) as ?z) {}
在解析器中,经过格式化和解析的查询显示为:

SELECT  (GROUP_CONCAT DISTINCT (?x) AS ?y) (SUM(DISTINCT ?x) AS ?z) WHERE {}
这是不合法的。请注意使用 小组讨论。还要注意的是,它发生在组_concat中,但不发生在sum中

使用Jena将查询发送到远程端点时,如果Jena首先 解析输入查询,然后将重新格式化的查询发送到 远程端点,这将解释调试日志消息和解析错误,但是
我不确定事情是否就是这样实现的。

这真的是完整的堆栈跟踪吗?没有更多的原因是。。。下面是?@JoshuaTaylor,另一个堆栈来自调用该函数的apache tomcat。@JoshuaTaylor我在fuseki服务器termianl cmd的第8行第129列也找到了它。他期待着:。。。37 ms同样,该查询在fuseki接口localhost:3030上也能完美工作。根据您在distinct上看到的情况,您可能会发现一个小得多的查询在Web接口上也能工作,但不能以编程方式工作。这是隔离问题过程的一部分。如果您能够做到这一点,那么对于无法访问您的数据和设置的所有人来说,查看问题所在将变得更加容易。或者你也可以通过这样做来找出问题所在。你能把查询缩短一点,还是能解决问题吗?但是我并没有写GROUP_CONCAT DISTINCT?x AS?commingfrom liking这个实例,我已经写了GROUP_CONCAT DISTINCT?x AS?commingfrom liking这个实例,你能检查一下吗,你发布的调试日志中有我写的东西,但你是对的,我在你发布的代码中没有看到它。您是否正在从某个文件中读取查询?还是将其覆盖并粘贴?我们可能正在接近一个解决方案…@在你的问题中,你写道当我移除它时,一切都很好,当我把它放回去时,它只是从
e fuseki接口,而不是来自jena您确定该类型会将其传回同一位置吗?只需去掉一个字符,然后按调试日志中显示的方式将其粘贴回。我正在读取文件,查询存储在我的资源中的一个文件中,当我删除单词DISTINCT时,它工作正常,即使查询太长,但当我放入单词DISTINCT时,它停止工作,我不知道为什么日志是这样的bty,你想给你看文件吗?我不明白你的第二条评论,请你用简单的英语重复一遍好吗?
SELECT  (GROUP_CONCAT DISTINCT (?x) AS ?y) (SUM(DISTINCT ?x) AS ?z) WHERE {}