2014-04-03 22 views
0

我试着执行下面的java代码来创建使用SPARQL构造功能的新三元组。使用sparql查询创建新的三元组

package jenasemweb; 


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.query.QuerySolution; 
import com.hp.hpl.jena.query.ResultSet; 
import com.hp.hpl.jena.rdf.model.InfModel; 
import com.hp.hpl.jena.rdf.model.Model; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 
import com.hp.hpl.jena.rdf.model.Property; 
import com.hp.hpl.jena.rdf.model.Resource; 
import com.hp.hpl.jena.rdf.model.Statement; 
import com.hp.hpl.jena.rdf.model.StmtIterator; 
import com.hp.hpl.jena.util.FileManager; 
import com.hp.hpl.jena.util.PrintUtil; 

    public class SparqlQuery03 { 
public static void main(String [] args) { 

// LOAD Raw Model from URL 
Model myRawModel = 
FileManager.get().loadModel(
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/Houghland.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/cruz.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/abraham.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/akundi.v2.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/bennett.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/hanna.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/liew_hw2.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/ramani.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/rawal.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/sison.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/tara.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/turney.n3", "N3"); 

// READ another N3 into the Model 
FileManager.get().readModel(myRawModel, 
"http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/wilson.n3", "N3"); 

// Create an RDFS inference model from the Raw Model 
InfModel infmodel = ModelFactory.createRDFSModel(myRawModel); 

// Create a new SPARQL query 
String queryString = 
"PREFIX drc: <http://www.codesupreme.com/onto/cse7392/#> " + 
"PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " + 
"PREFIX foaf: <http://xmlns.com/foaf/0.1/> " + 
"SELECT DISTINCT ?lname ?fname " + // space after last ?var 
"WHERE {" + 
" ?who foaf:lastName ?lname." + 
" ?who foaf:firstName ?fname." + 
" }" + 
"ORDER BY ?lname"; 

// create a Jena query from the queryString 
com.hp.hpl.jena.query.Query query = QueryFactory.create(queryString); 

// create a Jena QueryExecution object that knows the query 
// and the N3 over which the query will be run 
QueryExecution qe = QueryExecutionFactory.create(query, infmodel); 


// execute the query - get back a ResultSet 
ResultSet results = qe.execSelect(); 

// iterate over the result set 
while(results.hasNext()) { 
QuerySolution sol = results.next(); 
System.out.println("Solution:" + sol.toString()); 
}}} 

但执行返回下列错误:

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 119, col: 27] Unrecognized: [DOT] 
    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.exceptionDirect(LangEngine.java:156) 
    at org.apache.jena.riot.lang.LangEngine.exception(LangEngine.java:149) 
    at org.apache.jena.riot.lang.LangTurtleBase.triplesNodeCompound(LangTurtleBase.java:408) 
    at org.apache.jena.riot.lang.LangTurtleBase.triplesNode(LangTurtleBase.java:388) 
    at org.apache.jena.riot.lang.LangTurtleBase.objectList(LangTurtleBase.java:350) 
    at org.apache.jena.riot.lang.LangTurtleBase.predicateObjectItem(LangTurtleBase.java:288) 
    at org.apache.jena.riot.lang.LangTurtleBase.predicateObjectList(LangTurtleBase.java:269) 
    at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:250) 
    at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191) 
    at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:44) 
    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$ReaderRIOTFactoryImpl$1.read(RDFParserRegistry.java:142) 
    at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:859) 
    at org.apache.jena.riot.RDFDataMgr.parse(RDFDataMgr.java:687) 
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:208) 
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:141) 
    at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:130) 
    at org.apache.jena.riot.adapters.AdapterFileManager.readModelWorker(AdapterFileManager.java:291) 
    at com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:369) 
    at jenasemweb.SparqlQuery03.main(SparqlQuery03.java:44) 

我是新来这个,非常新。所以所有的帮助表示赞赏。

+1

因为@jkbkot指出错误与解析你的一个数据文件的问题有关,而没有在错误中给出的位置('[line:119,col:27]')的人发布相关文件的片段不能再帮助你 – RobV

+0

关于你的数据的一个注释:我在http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/rawal.n3中看到许多形式为foaf:person的三元组一个rdfs:class.'应该使用['rdfs:Class'](http://www.w3.org/TR/rdf-schema/#ch_class)(注意大写'C')。 –

+0

抱歉,我在复制粘贴提供的代码时犯了一个错误,它抱怨的文件是http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/hanna.n3 –

回答

1

该错误与您的SPARQL查询无关。这是关于解析文件http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/hanna.n3(至少在你提供的代码段中的44行)的问题。
我试图运行该文件,我得到一个异常上线36(不44),即http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/akundi.v2.n3

这也许可以是一个URI以点结尾的问题,可能在的对象三倍。是否有可能使用Jena 2.11.0或更高版本?

请参阅https://issues.apache.org/jira/browse/JENA-584 - >您可以尝试升级到耶拿2.11.1。

+0

感谢您的回答;但我正在使用jena的最后一个版本。 – Nanis

+0

@ user3347859因此它可能是文件或其他错误中的语法问题。查看该文件中第119行的内容很有用。 –

+0

@ user3347859这将很难诊断,因为我们在这里没有任何文件副本,我们可以依赖保持不变。我刚刚拉下了http://lyle.smu.edu/~coyle/cse7392.semweb/onto/a3/rawal.n3,耶拿的'rdfcat'读取它没有问题。你没有告诉我们改变了吗? :) –