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

How to check if a SPARQL query is a query or an update in Java?

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

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

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

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

您可以使用 QueryParserUtil.parseOperation() 来达到这个目的。它解析字符串,并返回一个 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
}