hp牛人的代码怎一个棒字了得!研读收益颇多,总结一下编程调用模式流程:
[推荐下载:cvs -d:pserver:anonymous@jena.cvs.sourceforge.net:/cvsroot/jena login]
//1、创建模型[Model](rdf模型)
//无怪乎是用一堆三元组表示
Model model = createModel() ;
//2、创建查询[Query]
Query query = QueryFactory.make() ;
//2-1、设置查询类型 为select型
query.setQueryType(Query.QueryTypeSelect) ;
//3、创建模式[Pattern]
//3-1、创建元素组[ElementGroup](组中每一个元素都是一个三元组模式[ElementTriplePattern])
ElementGroup elg = new ElementGroup() ;
//3-2、创建变量(Node类型)
Node varTitle = Node.createVariable("title") ;
Node varX = Node.createVariable("x") ;
//3-3、创建三元组(基于变量和谓词(或者叫属性))
Triple t1 = new Triple(varX, DC.title.asNode(), varTitle) ;
//3-4、创建三元组模式(基于三元组)
ElementTriplePattern tp1 = new ElementTriplePattern(t1) ;
//3-5、将三元组模式加入元素组中
elg.addElementTriplePattern(tp1) ;
//(3-2 --〉 3-5)可以重复多次,最终得到一个元素组[ElementGroup]
Triple t2 = new Triple(varX, DC.description.asNode(), Node.createVariable("desc")) ;
elg.addElementTriplePattern(new ElementTriplePattern(t2)) ;
//4、将元素组[ElementGroup]设置到查询[Query],
//这个元素组[ElementGroup]相当于SPARQL中的查询条件
query.setQueryPattern(elg) ;
Model model = createModel() ;
//2、创建查询[Query]
Query query = QueryFactory.make() ;
//2-1、设置查询类型 为select型
query.setQueryType(Query.QueryTypeSelect) ;
//3、创建模式[Pattern]
//3-1、创建元素组[ElementGroup](组中每一个元素都是一个三元组模式[ElementTriplePattern])
ElementGroup elg = new ElementGroup() ;
//3-2、创建变量(Node类型)
Node varTitle = Node.createVariable("title") ;
Node varX = Node.createVariable("x") ;
//3-3、创建三元组(基于变量和谓词(或者叫属性))
Triple t1 = new Triple(varX, DC.title.asNode(), varTitle) ;
//3-4、创建三元组模式(基于三元组)
ElementTriplePattern tp1 = new ElementTriplePattern(t1) ;
//3-5、将三元组模式加入元素组中
elg.addElementTriplePattern(tp1) ;
//(3-2 --〉 3-5)可以重复多次,最终得到一个元素组[ElementGroup]
Triple t2 = new Triple(varX, DC.description.asNode(), Node.createVariable("desc")) ;
elg.addElementTriplePattern(new ElementTriplePattern(t2)) ;
//4、将元素组[ElementGroup]设置到查询[Query],
//这个元素组[ElementGroup]相当于SPARQL中的查询条件
query.setQueryPattern(elg) ;
//5、设置查询的选择结果,
//相当于SPARQL中的查询结果条目,就是select后面跟的部分
query.addResultVar(varTitle) ;
//下句可对序列化造成影响:
//如果有这一句,查询将序列化为引入PREFIX的文档,文档中的谓词(属性)将以前缀:名称形式出现;
//否则,将序列化为无PREFIX引入的文档,文档中的的谓词(属性)将以全名称形式出现。
//该句有无对查询结果无影响。
query.getPrefixMapping().setNsPrefix("dc" , DC.getURI()) ;
query.serialize(new IndentedWriter(System.out,true)) ;
System.out.println() ;
//6、将模型、查询一并交给查询引擎,执行查询
//查询的过程是一个模式匹配的过程,和prolog的机制应该一样,都和描述逻辑有关
QueryExecution qexec = QueryExecutionFactory.create(query, model) ;
QueryExecution qexec = QueryExecutionFactory.create(query, model) ;
//7、结果的显示。。。(现在还没仔细研究,再说)
//....
//8、最后别忘了吧查询引擎关掉,释放资源
//下面这一句话,就把查询引擎、模型、查询以及查询中由三元组模式构成的元素组全释放了
qexec.close() ;