Rdf ExecConstruct()方法中的RiotException-QueryExecution类-使用Jena 2.13

Rdf ExecConstruct()方法中的RiotException-QueryExecution类-使用Jena 2.13,rdf,jena,dbpedia,Rdf,Jena,Dbpedia,当我使用execConstruc()方法时,它会在读取许多RDF后抛出RioException。在这个执行过程中,它发现一些返回的三元组具有不兼容的字符 Exception in thread "main" org.apache.jena.riot.RiotException: [line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013) at org.apache.jena.riot.syste

当我使用execConstruc()方法时,它会在读取许多RDF后抛出RioException。在这个执行过程中,它发现一些返回的三元组具有不兼容的字符

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
    at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:136)
    at org.apache.jena.riot.lang.LangEngine.raiseException(LangEngine.java:163)
    at org.apache.jena.riot.lang.LangEngine.nextToken(LangEngine.java:106)
    at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:249)
    at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191)
    at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:47)
    at org.apache.jena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:90)
    at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:42)
    at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:185)
    at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:906)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:257)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:231)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:221)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:432)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:387)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:382)
    at testes.TestReadSparql2.main(TestReadSparql2.java:28)
[line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
我简化了代码,只显示与问题相关的部分

package testes;

import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
public class TestReadSparql2 {
    public static void main(String[] args) {
        String queryStr = 
                "CONSTRUCT {"+
                "   ?s ?p <http://dbpedia.org/resource/Education> . }"+
                "WHERE {"+
                "   ?s ?p <http://dbpedia.org/resource/Education>"+
                "}"
                // + "LIMIT 800"   // adding this line, it is work!!
                ;

        Query query = QueryFactory.create(queryStr);
        QueryExecution queryExecution = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql",  query);

        // ERROR AT NEXT LINE - in execConstruct(): "org.apache.jena.riot.RiotException ... Failed to find a prefix name or keyword: –(8211;0x2013)"
        Model model = queryExecution.execConstruct();

        StmtIterator stmtIterator = model.listStatements();
        while (stmtIterator.hasNext()) {
            Statement statement = stmtIterator.nextStatement();  
            System.out.println(statement.getSubject().toString() + " -> " + 
                               statement.getPredicate().toString() + " -> " + 
                               statement.getObject().toString());
        }
        queryExecution.close();
    }
}
在这种情况下,前三元组显示正确:

http://dbpedia.org/resource/BBNM -> http://dbpedia.org/property/industry -> http://dbpedia.org/resource/Education
    http://dbpedia.org/resource/The_Liberator_Magazine -> http://dbpedia.org/property/category -> http://dbpedia.org/resource/Education
    http://dbpedia.org/resource/Fisdap -> http://dbpedia.org/property/data -> http://dbpedia.org/resource/Education
    http://dbpedia.org/resource/WUVS-LP -> http://dbpedia.org/property/format -> http://dbpedia.org/resource/Education
    http://dbpedia.org/resource/5_and_Up -> http://dbpedia.org/property/format -> http://dbpedia.org/resource/Education
我在互联网上搜索了很多,我发现只有一个人有类似的问题: 但不幸的是,这对我没有帮助


顺便说一下,我使用的是eclipse Luna 4.4.2和java版本1.8.0_40,您的分析是正确的-返回一个带有不兼容字符的三元组

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
    at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:136)
    at org.apache.jena.riot.lang.LangEngine.raiseException(LangEngine.java:163)
    at org.apache.jena.riot.lang.LangEngine.nextToken(LangEngine.java:106)
    at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:249)
    at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191)
    at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:47)
    at org.apache.jena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:90)
    at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:42)
    at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:185)
    at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:906)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:257)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:231)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:221)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:432)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:387)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:382)
    at testes.TestReadSparql2.main(TestReadSparql2.java:28)
[line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
这意味着在响应的第888行,有一个0x2013(一个短划线字符),看起来它被用作减号(0x002D)。它们看起来可以一样,但实际上不同。0x2013在海龟前缀名称中是非法的

第888行是:

dbpedia:Novitas_–_ROYAL dbpedia-owl:academicDiscipline  dbpedia:Education .
                ^ wrong
更糟糕的是,数据中的URI实际上是(我使用RDF/XML输出来查找它)。%E2%80%93不应在海龟中转换。(%E2%80%93是UTF-8 0x2013编码的百分比)

N-triples也是错误的;JSON-LD是正确的

因此,您应该能够使用其中一种格式(将QueryExecution强制转换为QueryEngineHTTP,并在使用execConstruct之前调用setModelContentType)

让DBpedia知道Turtle输出不好

无关:您可以将查询编写为:

CONSTRUCT WHERE { ?s ?p <http://dbpedia.org/resource/Education> . }
构造其中{s?p.}

您的分析是正确的-返回带有不兼容字符的三元组

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
    at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:136)
    at org.apache.jena.riot.lang.LangEngine.raiseException(LangEngine.java:163)
    at org.apache.jena.riot.lang.LangEngine.nextToken(LangEngine.java:106)
    at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:249)
    at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191)
    at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:47)
    at org.apache.jena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:90)
    at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:42)
    at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:185)
    at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:906)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:257)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:231)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:221)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:432)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:387)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:382)
    at testes.TestReadSparql2.main(TestReadSparql2.java:28)
[line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
这意味着在响应的第888行,有一个0x2013(一个短划线字符),看起来它被用作减号(0x002D)。它们看起来可以一样,但实际上不同。0x2013在海龟前缀名称中是非法的

第888行是:

dbpedia:Novitas_–_ROYAL dbpedia-owl:academicDiscipline  dbpedia:Education .
                ^ wrong
更糟糕的是,数据中的URI实际上是(我使用RDF/XML输出来查找它)。%E2%80%93不应在海龟中转换。(%E2%80%93是UTF-8 0x2013编码的百分比)

N-triples也是错误的;JSON-LD是正确的

因此,您应该能够使用其中一种格式(将QueryExecution强制转换为QueryEngineHTTP,并在使用execConstruct之前调用setModelContentType)

让DBpedia知道Turtle输出不好

无关:您可以将查询编写为:

CONSTRUCT WHERE { ?s ?p <http://dbpedia.org/resource/Education> . }
构造其中{s?p.}

您的分析是正确的-返回带有不兼容字符的三元组

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
    at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:136)
    at org.apache.jena.riot.lang.LangEngine.raiseException(LangEngine.java:163)
    at org.apache.jena.riot.lang.LangEngine.nextToken(LangEngine.java:106)
    at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:249)
    at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191)
    at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:47)
    at org.apache.jena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:90)
    at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:42)
    at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:185)
    at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:906)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:257)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:231)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:221)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:432)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:387)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:382)
    at testes.TestReadSparql2.main(TestReadSparql2.java:28)
[line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
这意味着在响应的第888行,有一个0x2013(一个短划线字符),看起来它被用作减号(0x002D)。它们看起来可以一样,但实际上不同。0x2013在海龟前缀名称中是非法的

第888行是:

dbpedia:Novitas_–_ROYAL dbpedia-owl:academicDiscipline  dbpedia:Education .
                ^ wrong
更糟糕的是,数据中的URI实际上是(我使用RDF/XML输出来查找它)。%E2%80%93不应在海龟中转换。(%E2%80%93是UTF-8 0x2013编码的百分比)

N-triples也是错误的;JSON-LD是正确的

因此,您应该能够使用其中一种格式(将QueryExecution强制转换为QueryEngineHTTP,并在使用execConstruct之前调用setModelContentType)

让DBpedia知道Turtle输出不好

无关:您可以将查询编写为:

CONSTRUCT WHERE { ?s ?p <http://dbpedia.org/resource/Education> . }
构造其中{s?p.}

您的分析是正确的-返回带有不兼容字符的三元组

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
    at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:136)
    at org.apache.jena.riot.lang.LangEngine.raiseException(LangEngine.java:163)
    at org.apache.jena.riot.lang.LangEngine.nextToken(LangEngine.java:106)
    at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:249)
    at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191)
    at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:47)
    at org.apache.jena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:90)
    at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:42)
    at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:185)
    at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:906)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:257)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:231)
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:221)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:432)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:387)
    at com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:382)
    at testes.TestReadSparql2.main(TestReadSparql2.java:28)
[line: 888, col: 17] Failed to find a prefix name or keyword: –(8211;0x2013)
这意味着在响应的第888行,有一个0x2013(一个短划线字符),看起来它被用作减号(0x002D)。它们看起来可以一样,但实际上不同。0x2013在海龟前缀名称中是非法的

第888行是:

dbpedia:Novitas_–_ROYAL dbpedia-owl:academicDiscipline  dbpedia:Education .
                ^ wrong
更糟糕的是,数据中的URI实际上是(我使用RDF/XML输出来查找它)。%E2%80%93不应在海龟中转换。(%E2%80%93是UTF-8 0x2013编码的百分比)

N-triples也是错误的;JSON-LD是正确的

因此,您应该能够使用其中一种格式(将QueryExecution强制转换为QueryEngineHTTP,并在使用execConstruct之前调用setModelContentType)

让DBpedia知道Turtle输出不好

无关:您可以将查询编写为:

CONSTRUCT WHERE { ?s ?p <http://dbpedia.org/resource/Education> . }
构造其中{s?p.}

如上所述,这是由不兼容字符引起的。我在下面提供了完整的代码片段作为参考
RDF/XML
用作请求的mime类型,然后可以将模型序列化为
TTL

QueryExecution qe=QueryExecutionFactory.sparqlService(targetEndpoint,query);
QueryEngineHTTP qeHttp=(QueryEngineHTTP)qe;
setModelContentType(“应用程序/rdf+xml”);
//序列化它
模型m=qe.execConstruct();
m、 写入(系统输出,“TTL”);

如上所述,这是由不兼容字符引起的。我在下面提供了完整的代码片段作为参考
RDF/XML
用作请求的mime类型,然后可以将模型序列化为
TTL

QueryExecution qe=QueryExecutionFactory.sparqlService(targetEndpoint,query);
QueryEngineHTTP qeHttp=(QueryEngineHTTP)qe;
setModelContentType(“应用程序/rdf+xml”);
//序列化它
模型m=qe.execConstruct();
m、 写入(系统输出,“TTL”);

如上所述,这是由不兼容字符引起的。我在下面提供了完整的代码片段作为参考
RDF/XML
用作请求的mime类型,然后可以将模型序列化为
TTL

QueryExecution qe=QueryExecutionFactory.sparqlService(targetEndpoint,query);
QueryEngineHTTP qeHttp=(QueryEngineHTTP)qe;
setModelContentType(“应用程序/rdf+xml”);
//序列化它
模型m=qe.execConstruct();
m、 写入(系统输出,“TTL”);

如上所述,这是由不兼容字符引起的。我在下面提供了完整的代码片段作为参考
RDF/XML
用作请求的mime类型,然后可以将模型序列化为
TTL

QueryExecution qe=QueryExecutionFactory.sparqlService(targetEndpoint,query);
QueryEngineHTTP QEHTT=(QueryEngineHTTP)