如何让Jena SPARQL返回RDF XML格式而非三元组结果
获取RDF XML格式结果的两种方法
方法一:使用CONSTRUCT查询直接生成RDF图
把原有的SELECT查询替换为CONSTRUCT语句,SPARQL的CONSTRUCT会直接返回符合条件的RDF图,而非离散的三元组结果,之后可以将这个图序列化为RDF/XML格式。
修改查询字符串:
String queryString = "CONSTRUCT { ?dog ?p ?o } " + "WHERE {" + "?dog <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://test#dog>. " + "?dog ?p ?o. " + "}";
执行查询并输出RDF/XML:
// 假设已初始化QueryExecution对象qexec Model model = qexec.execConstruct(); // 将模型序列化为RDF/XML输出到控制台(也可写入文件) model.write(System.out, "RDF/XML");
方法二:从SELECT结果构建RDF模型再序列化
如果不想修改原有查询,可遍历SELECT返回的三元组结果,逐个添加到RDF模型中,再将模型序列化为RDF/XML。
修改结果处理代码:
// 创建空RDF模型 Model model = ModelFactory.createDefaultModel(); // 配置命名空间(可选,让XML结构更简洁) model.setNsPrefix("test", "http://test#"); model.setNsPrefix("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); while (rs_s.hasNext()) { QuerySolution qs = rs_s.next(); Resource dog = qs.getResource("dog"); Property p = qs.getProperty("p"); RDFNode o = qs.get("o"); // 将三元组添加到模型 model.add(dog, p, o); } // 输出RDF/XML格式内容 model.write(System.out, "RDF/XML");
注意:第二种方法里尽量直接调用getResource、getProperty获取RDF对象,避免用toString解析字符串,能减少格式错误。
内容的提问来源于stack exchange,提问作者user20297975
相关产品推荐
相关产品推荐

