在JENA virtuoso中的SPARQL查询中使用绑定时出现空指针异常错误

在JENA virtuoso中的SPARQL查询中使用绑定时出现空指针异常错误,sparql,jena,virtuoso,openlink-virtuoso,Sparql,Jena,Virtuoso,Openlink Virtuoso,运行SPARQL查询时出现以下错误 ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 7 column 7): {E201} The attributes on this property element, are not permitted with any content; expecting end element tag. ERROR [main] (RDFDefaultErrorHandler.java:40) - (line

运行SPARQL查询时出现以下错误

ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 7 column 7): {E201} The attributes on this property element, are not permitted with any content; expecting end element tag.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 7 column 38): {E201} XML element <res:binding> inside an empty property element, whose attributes prohibit any content.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 7 column 52): {E201} XML element <res:variable> inside an empty property element, whose attributes prohibit any content.
ERROR [main] (RDFDefaultErrorHandler.java:40) - (line 7 column 57): {E201} The attributes on this property element, are not permitted with any content; expecting end element tag.
 WARN [main] (RDFDefaultErrorHandler.java:36) - (line 8 column 135): {W102} unqualified use of rdf:datatype is deprecated.
java.lang.NullPointerException
    at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.endElement(XMLHandler.java:149)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNamespaceBinder.handleEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLNamespaceBinder.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser.parse(RDFXMLParser.java:142)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:158)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:145)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:215)
    at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:197)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:169)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execDescribe(QueryEngineHTTP.java:162)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execDescribe(QueryEngineHTTP.java:160)
    at com.hospital.SPARQLQuery.main(SPARQLQuery.java:34)
ERROR[main](RDFDefaultErrorHandler.java:40)-(第7行第7列):{E201}此属性元素上的属性不允许包含任何内容;应为结束元素标记。
ERROR[main](RDFDefaultErrorHandler.java:40)-(第7行第38列):{E201}空属性元素中的XML元素,其属性禁止任何内容。
ERROR[main](RDFDefaultErrorHandler.java:40)-(第7行第52列):{E201}空属性元素中的XML元素,其属性禁止任何内容。
ERROR[main](RDFDefaultErrorHandler.java:40)-(第7行第57列):{E201}此属性元素上的属性不允许包含任何内容;应为结束元素标记。
WARN[main](RDFDefaultErrorHandler.java:36)-(第8行第135列):{W102}不推荐使用rdf:datatype的非限定用法。
java.lang.NullPointerException
在com.hp.hpl.jena.rdf.arp.impl.XMLHandler.endElement(XMLHandler.java:149)上
位于org.apache.xerces.parsers.AbstractSAXParser.endElement(未知源)
位于org.apache.xerces.impl.XMLNamespaceBinder.handleEndElement(未知源)
位于org.apache.xerces.impl.XMLNamespaceBinder.endElement(未知源)
位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.ScannedElement(未知源)
位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(未知源)
位于org.apache.xerces.impl.XMLDocumentFragmentScanneImpl.ScandDocument(未知来源)
位于org.apache.xerces.parsers.DTDConfiguration.parse(未知源)
位于org.apache.xerces.parsers.DTDConfiguration.parse(未知源)
位于org.apache.xerces.parsers.XMLParser.parse(未知源)
位于org.apache.xerces.parsers.AbstractSAXParser.parse(未知源)
位于com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser.parse(RDFXMLParser.java:142)
请访问com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:158)
请访问com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:145)
请访问com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:215)
位于com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:197)
位于com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:169)
在com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execdescriple上(QueryEngineHTTP.java:162)
在com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execdescriple上(QueryEngineHTTP.java:160)
位于com.hospital.SPARQLQuery.main(SPARQLQuery.java:34)
TTL文件数据样本

@prefix dc:   <http://purl.org/dc/elements/1.1/> .
@prefix :     <http://example.org/book/> .
@prefix ns:   <http://example.org/ns#> .

:book1  dc:title     "SPARQL Tutorial" .
:book1  ns:price     42 .
:book1  ns:discount  0.2 .

:book2  dc:title     "The Semantic Web" .
:book2  ns:price     23 .
:book2  ns:discount  0.25 .
@前缀dc:。
@前缀:。
@前缀ns:。
:book1 dc:标题“SPARQL教程”。
:book1-ns:price 42。
:book1 ns:折扣0.2。
:book2dc:title“语义网”。
:book2-ns:price 23。
:book2 ns:折扣0.25。
我正在使用Virtuoso SPARQL端点运行查询

<dependency>
    <groupId>com.hp.hpl.jena</groupId>
    <artifactId>arq</artifactId>
    <version>2.8.8</version>
</dependency>
这是我正在运行的代码

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.rdf.model.Model;


public class SPARQLQuery {

    private static final Logger logger = LogManager.getLogger(SPARQLQuery.class);

    public static void main(String[] args) {

        try {
            String queryString = "PREFIX  dc:  <http://purl.org/dc/elements/1.1/>\r\n" + 
                    "PREFIX  ns:  <http://example.org/ns#>\r\n" + 
                    "\r\n" + 
                    "SELECT  ?title ?price\r\n" + 
                    "{  ?x ns:price ?p .\r\n" + 
                    "   ?x ns:discount ?discount\r\n" + 
                    "   BIND (?p*(1-?discount) AS ?price)\r\n" + 
                    "   FILTER(?price < 20)\r\n" + 
                    "   ?x dc:title ?title . \r\n" + 
                    "}";

            QueryExecution qexec = QueryExecutionFactory.sparqlService("http://localhost:8890/sparql", queryString);
            Model results = qexec.execDescribe();

            results.write(System.out,"TTL");

        }catch(Exception ex) {
            ex.printStackTrace();
        }
    }
}
import org.apache.logging.log4j.LogManager;
导入org.apache.logging.log4j.Logger;
导入com.hp.hpl.jena.query.QueryExecution;
导入com.hp.hpl.jena.query.QueryExecutionFactory;
导入com.hp.hpl.jena.rdf.model.model;
公共类SPARQLQuery{
私有静态最终记录器Logger=LogManager.getLogger(SPARQLQuery.class);
公共静态void main(字符串[]args){
试一试{
字符串queryString=“前缀dc:\r\n”+
“前缀ns:\r\n”+
“\r\n”+
“选择?标题?价格\r\n”+
{?x ns:价格?p。\r\n“+
“?x ns:折扣?折扣\r\n”+
“绑定(?p*(1-?折扣)为?价格)\r\n”+
“过滤器(?价格<20)\r\n”+
“?x dc:标题?标题。\r\n”+
"}";
QueryExecution qexec=QueryExecutionFactory.sparqlService(“http://localhost:8890/sparql“,查询字符串);
模型结果=qexec.execdescripe();
结果写入(系统输出,“TTL”);
}捕获(例外情况除外){
例如printStackTrace();
}
}
}
Maven依赖关系

<dependency>
    <groupId>com.hp.hpl.jena</groupId>
    <artifactId>arq</artifactId>
    <version>2.8.8</version>
</dependency>

com.hp.hpl.jena
arq
2.8.8

在SPARQL查询中使用BIND时,我遇到了一个奇怪的问题。我不明白到底是什么问题,或者我不明白为什么会发生这种情况。此外,我正在使用Virtuoso进行图形数据存储,并使用Jena lib运行SPARQL查询。运行查询时,我遇到了一个错误。我在谷歌上没有找到任何解决方案。

正如@AKSW的评论所揭示的,答案是

  • 更新到(可能是当前的Virtuoso服务器[是否],)
  • 使用正确的调用/查询配对(即,使用SPARQL
    选择查询调用Jena
    .execSelect()
    ,或使用SPARQL
    描述查询调用Jena
    .execdescripe()

  • 1) 你用的是耶拿的古老版本。。。2) 您正在执行
    SELECT
    查询,但正在调用
    .execdescripe()
    -请问原因?显然,您必须a)调用
    .execSelect()
    或b)使用SPARQL
    描述
    查询。很明显,在a)的情况下,您将无法获得RDF,并且由于您只选择了两个变量,因此无法将
    TURTLE
    写入磁盘。哦,这正是问题所在,谢谢@AKSW。您能否提供哪一个是最新的Jena版本或将来的依赖项,任何搜索引擎都会比我更快地回答这个问题。更准确地说,有一种方法允许搜索。当然,所有人都可以免费使用互联网。顺便说一句,它包含了几乎所有您需要的教程,以及RDF/SPARQL W3C建议,您应该能够解决任何进一步的任务w.r.t.语义Web查询感谢您的回答您是对的,我使用的是非常旧的Jena版本。也很抱歉浪费您的时间。