如何检查SPARQL查询是Java中的查询还是更新?

时间:2016-09-07 09:03:13

标签: java sparql rdf4j

我需要在Java应用程序中解析SPARQL和SPARQL Update查询。我试图通过使用rdf4j库来做到这一点。这个库提供了解析查询的可能性(例如QueryParserUtil.parseQuery(...)或SyntaxTreeBuilder.parseQuery(...))以及解析更新的可能性(例如QueryParserUtil.parseUpdate(...)或SyntaxTreeBuilder.parseUpdateSequence(... ))。但是没有方法可以解析它们。因此,我需要弄清楚查询字符串是代表查询还是更新。

当更新字符串应用于parseQuery()方法时,抛出ParseException。反过来也是如此。当然,如果抛出异常,总是可以尝试其他方法。但那将是一个糟糕的编程风格。

rdf4j库中是否有一个方法可用于检查queryString是代表更新还是简单查询?

如果没有,是否还有解析更新和查询的其他解决方案?

1 个答案:

答案 0 :(得分:2)

您可以使用QueryParserUtil.parseOperation()来实现此目的。它解析String,并为您提供ParsedOperation对象,该对象有两个子类型:ParsedUpdateParsedQuery。然后你可以做一个简单的instanceof检查:

String str = "....";
ParsedOperation operation =  QueryParserUtil.parseOperation(QueryLanguage.SPARQL, str, null);
if (operation instanceof ParsedQuery) {
   // it's a query
} else {
   // it's an update
}