我需要在Java应用程序中解析SPARQL和SPARQL Update查询。我试图通过使用rdf4j库来做到这一点。这个库提供了解析查询的可能性(例如QueryParserUtil.parseQuery(...)或SyntaxTreeBuilder.parseQuery(...))以及解析更新的可能性(例如QueryParserUtil.parseUpdate(...)或SyntaxTreeBuilder.parseUpdateSequence(... ))。但是没有方法可以解析它们。因此,我需要弄清楚查询字符串是代表查询还是更新。
当更新字符串应用于parseQuery()方法时,抛出ParseException。反过来也是如此。当然,如果抛出异常,总是可以尝试其他方法。但那将是一个糟糕的编程风格。
rdf4j库中是否有一个方法可用于检查queryString是代表更新还是简单查询?
如果没有,是否还有解析更新和查询的其他解决方案?
答案 0 :(得分:2)
您可以使用QueryParserUtil.parseOperation()来实现此目的。它解析String,并为您提供ParsedOperation
对象,该对象有两个子类型:ParsedUpdate
和ParsedQuery
。然后你可以做一个简单的instanceof
检查:
String str = "....";
ParsedOperation operation = QueryParserUtil.parseOperation(QueryLanguage.SPARQL, str, null);
if (operation instanceof ParsedQuery) {
// it's a query
} else {
// it's an update
}