通过解析重写Java-SPARQL查询

通过解析重写Java-SPARQL查询,java,parsing,jena,Java,Parsing,Jena,我试图使用Jena或其他Java库来实现一些编码挑战(在本例中,是通过后序遍历进行重写)。我不是在要求一种将SPARQL转换为SQL查询的方法。我已经有了 我目前正在尝试将一个给定的SPARQL查询转换为另一个SQL查询 到目前为止,我已经使用了,给定SPARQL查询,返回一个ARQ树表示,可以按后序遍历。这正是我想做的 唯一的问题是,它只是穿过树。我想做的是这样的事情(假设我经历了一个负数): 然而,耶拿的来访者返回了虚空,这使得这不可能。有没有其他方法,而不是复制Walker和访问者代码,以

我试图使用Jena或其他Java库来实现一些编码挑战(在本例中,是通过后序遍历进行重写)。我不是在要求一种将SPARQL转换为SQL查询的方法。我已经有了

我目前正在尝试将一个给定的SPARQL查询转换为另一个SQL查询

到目前为止,我已经使用了,给定SPARQL查询,返回一个ARQ树表示,可以按后序遍历。这正是我想做的

唯一的问题是,它只是穿过树。我想做的是这样的事情(假设我经历了一个负数):

然而,耶拿的来访者返回了虚空,这使得这不可能。有没有其他方法,而不是复制Walker和访问者代码,以使其按我想要的方式工作?多谢各位


我不是在寻找SPARQL到SQL的直接转换器,因为我需要处理树元素。

我最终解决了这个问题,实现了我自己的Walker(因为我要寻找的任何东西都是在Jena中实现的),它按后序遍历树并返回字符串。

Walker不会返回任何东西,但是
Transformer
Transform
类会这样做。您的问题建议进行广义转换,但这是不可能的,因为SPARQL和SQL有显著差异。大师们为不同的工作以不同的方式进行翻译。将“给定”(您是指“任何给定”还是“特定”?)SPARQL查询转换为“等效”SQL查询取决于使用的SQL模式、SQL方言、SQL引擎和RDF本体,以及其他变量。因此,也许可以修改您的问题,使其包含一些关于您的目标SQL后端的内容,以及更多关于您的特定SPARQL查询的内容?@TallTed是的,当然我只是想将SPARQL的一部分翻译成一些通用SQL方言。然而,这并不是问题的主要目的。我不想找到一个方法来翻译给定的sparql查询,但考虑到我已经有了这个方法,我试图通过Jena或其他库来完成它,而不必重写所有内容。@AKSW这是一个想法,我可以研究,即使它不是一个真正干净的解决方案。谢谢你,thoughSo,你的问题不是关于SPARQL或SQL,也不是它们之间的转换,而是关于一些特定的Java和Jena(或其他Java库)编程挑战。。。请编辑标题和正文,使之更清楚!你的直接问题的大背景很好包括在内,但该背景不应该成为主要焦点。
String visit(OpMinus minus){

    String l_res = minus.getLeft().visit();
    String r_res = minus.getRight().visit();

    /*

    ... do some stuff with the result ...

    */

    String res = l_res + "MINUS (" + r_res + ")";
    return res;
}