androjena android不识别“AS”

问题描述 投票:-1回答:2

附件是我在我的Android应用程序中使用的罐子。

enter image description here

以下是执行查询的代码:

com.hp.hpl.jena.query.Query query = com.hp.hpl.jena.query.QueryFactory.create(
                        queryString, Syntax.syntaxARQ);
            com.hp.hpl.jena.query.QueryExecution qexec = com.hp.hpl.jena.query.QueryExecutionFactory.sparqlService(
                    endpoint, query);

我的查询使用嵌套选择似乎没有问题,但当它归结为:

(SUM(xsd:integer(?numOfMentions)) as ?sum)

我得到一个例外说:

`

W/System.err(22539): com.hp.hpl.jena.query.QueryParseException: Encountered " "as" "AS "" at line 18, column 35.
W/System.err(22539): Was expecting:
W/System.err(22539):     ")" ...
W/System.err(22539):
W/System.err(22539):    at com.hp.hpl.jena.sparql.lang.ParserARQ.perform(ParserARQ.java:86)
W/System.err(22539):    at com.hp.hpl.jena.sparql.lang.ParserARQ.parse(ParserARQ.java:39)
W/System.err(22539):    at com.hp.hpl.jena.query.QueryFactory.parse(QueryFactory.java:129)
W/System.err(22539):    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:72)
W/System.err(22539):    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:43)
W/System.err(22539):    at com.hp.hpl.jena.query.QueryExecutionFactory.makeQuery(QueryExecutionFactory.java:516)
W/System.err(22539):    at com.hp.hpl.jena.query.QueryExecutionFactory.create(QueryExecutionFactory.java:71)
W/System.err(22539):    at technion.com.testapplication.async.FetchMekorotByScoreTask.doInBackground(FetchMekorotByScoreTask.java:42)
W/System.err(22539):    at technion.com.testapplication.async.FetchMekorotByScoreTask.doInBackground(FetchMekorotByScoreTask.java:22)
W/System.err(22539):    at android.os.AsyncTask$2.call(AsyncTask.java:292)
W/System.err(22539):    at enter code herejava.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err(22539):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
W/System.err(22539):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err(22539):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err(22539):    at java.lang.Thread.run(Thread.java:818)

`

请帮忙

更新1:

附加部分查询,我收到失败。

   + "SELECT distinct ?source ?label ?text\n"
                + "?sums ?spanss ?labels\n"
                + "?sum ?description\n"
                + "WHERE {\n"
                + " SELECT ?source ?label ?text ?description\n"
                + " (SUM(xsd:integer(?numOfMentions)) as ?sum)\n"
                + " (group_concat(?numOfMentions;separator=\",\") as ?sums)\n"
                + " (group_concat(?spans;separator=\",\") as ?spanss)\n"
                + " (group_concat(?target_label ;separator=\",\") as ?labels)\n"

该错误被提及:

(SUM(xsd:integer(?numOfMentions)) as ?sum

更新:

    SELECT DISTINCT(?source) SAMPLE(?label) as ?label SAMPLE(?text) as ?text                
    SAMPLE(?sums) as ?sums SAMPLE(?spanss) as ?spanss SAMPLE (?labels) as ?labels           
    SAMPLE(?sum) as ?sum SAMPLE(?description) as ?description                               
    WHERE {                                                                                 
    SELECT ?source ?label ?text ?description                                                
    (SUM(xsd:integer(?numOfMentions)) as ?sum)                                              
    (group_concat(?numOfMentions;separator=",") as ?sums)                               
    (group_concat(?spans;separator=",") as ?spanss)                                     
    (group_concat(?target_label ;separator=",") as ?labels)                                 
    WHERE {                                                                                 
        SELECT ?mentions ?source ?numOfMentions ?target_label ?label ?text ?description     
        (group_concat(DISTINCT(?span);separator=",") as ?spans)                             
        WHERE                                                                               
        {                                                                                   
            {                                                                               
                values ?_var1 {prefix2:text-book-1-6-11 prefix2:text-book-1-6-16}                                   
                ?_var1 a prefix:_var1.                                                      
                ?mentions rdf:type prefix:Mention.                                          
                ?mentions prefix:target ?_var1.                                             
                ?mentions prefix:source ?source.                                                
                ?mentions prefix:numOfMentions ?numOfMentions.                                  
                ?mentions prefix:span ?span.                                                    
                ?source rdfs:label ?label.                                                  
                ?source prefix:text ?text.                                                      
                ?source prefix:book ?source_book.                                               
                ?source_book prefix:description ?description.                                   
                ?_var1 rdfs:label ?target_label }                                           
            UNION {                                                                         
                values ?container {prefix2:text-book-1-6-11 prefix2:text-book-1-6-16}                                   
                values ?types {prefix:Section prefix:_var2}                                 
                ?container a ?types.                                                        
                ?_var1 prefix:within ?container.                                                
                ?_var1 a prefix:_var1.                                                      
                ?mentions rdf:type prefix:Mention.                                              
                ?mentions prefix:target ?_var1.                                             
                ?mentions prefix:source ?source.                                                
                ?mentions prefix:numOfMentions ?numOfMentions.                                  
                ?mentions prefix:span ?span.                                                    
                ?source rdfs:label ?label.                                                  
                ?source prefix:text ?text.                                                      
                ?source prefix:book ?source_book.                                               
                ?source_book prefix:description ?description.                                   
                ?_var1 rdfs:label ?target_label                                             
            }                                                                               
            UNION {                                                                         
                values ?books {prefix2:text-book-1-6-11 prefix2:text-book-1-6-16}                                       
                values ?types { prefix:_var4 }                                          
                ?books a ?types.                                                            
                ?_var1 prefix:book ?books.                                                      
                ?_var1 a prefix:_var1.                                                      
                ?mentions rdf:type prefix:Mention.                                              
                ?mentions prefix:target ?_var1.                                             
                ?mentions prefix:source ?source.                                                
                ?mentions prefix:numOfMentions ?numOfMentions.                                  
                ?mentions prefix:span ?span.                                                    
                ?source rdfs:label ?label.                                                  
                ?source prefix:text ?text.                                                      
                ?source prefix:book ?source_book.                                               
                ?source_book prefix:description ?description.                                   
                ?_var1 rdfs:label ?target_label                                             
            }                                                                               
        }                                                                                   
        group by ?target_label ?text ?mentions ?description                                 
        ?source ?numOfMentions ?label                                                       
    }                                                                                       
    group by ?source ?label ?text ?description                                              
    }                                                                                       
    order by DESC(?sum) offset 0 limit 20
android sparql jena
2个回答
0
投票

该查询有几个问题:

  1. 删除DISTINCT变量周围的外部?source。这是非法的,也没有必要作为内部查询按其分组。
  2. 一旦你使用像GROUP BY这样的集合函数,你必须?source SAMPLE变量
  3. 你是在内部查询中完成的,但不是在外部:在... AS ...(中包装那些)。例如,SAMPLE(?label) as ?label必须是(SAMPLE(?label) as ?label)
  4. 使用已使用的名称分配变量名称不起作用。例如,(SAMPLE(?label) as ?label)确实可能是(SAMPLE(?label) as ?label_),你应该重命名内部变量的名称,以便在最终结果中获得“好”的var名称。

查询的可解析版本:

PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  prefix: <http://...>
PREFIX  prefix2: <http://...>

SELECT  ?source (SAMPLE(?label_) AS ?label) (SAMPLE(?text_) AS ?text) (SAMPLE(?sums_) AS ?sums) (SAMPLE(?spanss_) AS ?spanss) (SAMPLE(?labels_) AS ?labels) (SAMPLE(?sum_) AS ?sum) (SAMPLE(?description_) AS ?description)
WHERE
  { SELECT  ?source (?label AS ?label_) (?text AS ?text_) (?description AS ?description_) (SUM(xsd:integer(?numOfMentions)) AS ?sum_) (GROUP_CONCAT(?numOfMentions ; separator=',') AS ?sums_) (GROUP_CONCAT(?spans ; separator=',') AS ?spanss_) (GROUP_CONCAT(?target_label ; separator=',') AS ?labels_)
    WHERE
      { SELECT  ?mentions ?source ?numOfMentions ?target_label ?label ?text ?description (GROUP_CONCAT(DISTINCT ?span ; separator=',') AS ?spans)
        WHERE
          {   { VALUES ?_var1 { prefix2:text-book-1-6-11 prefix2:text-book-1-6-16 }
                ?_var1    rdf:type              prefix2:_var1 .
                ?mentions  rdf:type             prefix2:Mention ;
                          prefix2:target        ?_var1 ;
                          prefix2:source        ?source ;
                          prefix2:numOfMentions  ?numOfMentions ;
                          prefix2:span          ?span .
                ?source   rdfs:label            ?label ;
                          prefix2:text          ?text ;
                          prefix2:book          ?source_book .
                ?source_book  prefix2:description  ?description .
                ?_var1    rdfs:label            ?target_label
              }
            UNION
              { VALUES ?container { prefix2:text-book-1-6-11 prefix2:text-book-1-6-16 }
                VALUES ?types { prefix2:Section prefix2:_var2 }
                ?container  rdf:type            ?types .
                ?_var1    prefix2:within        ?container ;
                          rdf:type              prefix2:_var1 .
                ?mentions  rdf:type             prefix2:Mention ;
                          prefix2:target        ?_var1 ;
                          prefix2:source        ?source ;
                          prefix2:numOfMentions  ?numOfMentions ;
                          prefix2:span          ?span .
                ?source   rdfs:label            ?label ;
                          prefix2:text          ?text ;
                          prefix2:book          ?source_book .
                ?source_book  prefix2:description  ?description .
                ?_var1    rdfs:label            ?target_label
              }
            UNION
              { VALUES ?books { prefix2:text-book-1-6-11 prefix2:text-book-1-6-16 }
                VALUES ?types { prefix2:_var4 }
                ?books    rdf:type              ?types .
                ?_var1    prefix2:book          ?books ;
                          rdf:type              prefix2:_var1 .
                ?mentions  rdf:type             prefix2:Mention ;
                          prefix2:target        ?_var1 ;
                          prefix2:source        ?source ;
                          prefix2:numOfMentions  ?numOfMentions ;
                          prefix2:span          ?span .
                ?source   rdfs:label            ?label ;
                          prefix2:text          ?text ;
                          prefix2:book          ?source_book .
                ?source_book  prefix2:description  ?description .
                ?_var1    rdfs:label            ?target_label
              }
          }
        GROUP BY ?target_label ?text ?mentions ?description ?source ?numOfMentions ?label
      }
    GROUP BY ?source ?label ?text ?description
  }
GROUP BY ?source
ORDER BY DESC(?sum)
OFFSET  0
LIMIT   20

0
投票

感谢所有的帮助,但它也没有帮助。

最后,我设法使用androjena查询我的远程服务端点,以及以下内容:

QueryEngineHTTP queryEngineHTTP = new QueryEngineHTTP(Queries.ENDPOINT, queryString);
queryEngineHTTP.execSelect()
ResultSet resultSet = queryEngineHTTP.execSelect();
while (resultSet.hasNext()) {
   QuerySolution rb = resultSet.nextSolution();
   // parse rb here.
}

通过这种方式,我设法摆脱了解析器并获得了发布结果并自己解析它们。

我希望这可以帮助将来想要使用androjena的人们。

© www.soinside.com 2019 - 2024. All rights reserved.