openrdf-sesame SPARQLResultsXMLWriter和XSL

时间:2011-10-11 10:59:28

标签: xslt jena sesame

如何在SPARQLResultsXMLWriter提供的XML out流中添加xsl样式表?

RepositoryConnection con = repository.getConnection();
SPARQLResultsXMLWriter sparqlWriter = new SPARQLResultsXMLWriter(out);
   try {
       TupleQuery query = con.prepareTupleQuery(org.openrdf.query.QueryLanguage.SPARQL, qs);
       query.evaluate(sparqlWriter);
   } 
   finally {
       con.close();
   }

我正在寻找类似的东西,

com.hp.hpl.jena.query.ResultSetFormatter.outputAsXML(outStream,resulSet,**xslFilePath**);

由Jena Framework提供......与Sesame相似

谢谢, 恩佐

1 个答案:

答案 0 :(得分:0)

默认的Sesame SPARQLResultsXMLWriter没有此选项。但是,定制它应该相当容易。您需要做的是创建类info.aduna.xml.XMLWriter的子类(这是一个正确格式化的XML的实用程序类,SPARQLResultsXMLWriter在内部使用它)。在这个子类中,添加一个getter / setter来指定样式表链接,然后覆盖startDocument方法,如下所示:

public class MyXMLWriter extends info.aduna.xml.XMLWriter {

     @Override
     public void startDocument() throws IOException {
         super.startDocument();
         _write("<?xml-stylesheet type=\"text/xsl\"");
         _write(" href=\"" + getStylesheetRef() + "\"");
         _writeLn("?>");
     }
}

然后只需将此自定义XMLWriter提供给SPARQLResultsXMLWriter,并将样式表ref设置为正确的值:

MyXMLWriter writer = new MyXMLWriter(out);
writer.setStylesheetRef("example.xsl");

SPARQLResultsXMLWriter sparqlWriter = new SPARQLResultsXMLWriter(writer);

未经测试,但相当自信这应该有效。

或者,使用Sesame项目提出功能请求和/或为其提供补丁。