1

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

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

rdf4j库中有没有可以用来检查queryString代表更新还是简单查询的方法?

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

4

1 回答 1

2

为此,您可以使用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
}
于 2016-09-07T20:42:25.143 回答