Sparql 是语义网的查询语言,是w3c推荐的一个标准,一下演示了之前设计的本体文件的查询,实现了"benz"车拥有者的姓名的查询。
/** * 语义数据查询 * @param spaqrlString * @param queryModel * @param var */ public void queryBySpaqrl( String spaqrlString , Model queryModel , String var ) { Query query = QueryFactory.create(spaqrlString); QueryExecution queryExecution = QueryExecutionFactory.create(query,queryModel); ResultSet resultSet = queryExecution.execSelect(); while(resultSet.hasNext()) { QuerySolution querySolution = resultSet.nextSolution(); RDFNode rdfNode = querySolution.get(var); System.out.println(var +" is " + rdfNode.toString()); } }
Sparql 语句
@Test public void testJenaSparql() { JenaModelSpaqrl jenaModelSpaqrl = new JenaModelSpaqrl(); jenaModel= new JenaModel(); StringBuffer querystringBuffer = new StringBuffer(); querystringBuffer.append("PREFIX s1" + ": <" + defaultNameSpace + ">"); querystringBuffer.append( "select ?name" + " where { " + "?car s1:hasBrand \"Benz\"."+ "?car s1:hasOwner ?person."+ "?person s1:hasName ?name}" ); jenaModelSpaqrl.queryBySpaqrl(querystringBuffer.toString(), jenaModel.createOntologyModel(OntModelSpec.OWL_DL_MEM, pathFile) ,"?name"); }
最终结果