gpt4 book ai didi

java - 如何使用 Sesame 解析 SPARQL 查询中的 OPTIONAL 语句?

转载 作者:太空宇宙 更新时间:2023-11-04 07:34:58 27 4
gpt4 key购买 nike

我正在使用 Sesame 的 queryparser-sparql lib,但我似乎无法从解析的查询中获取OPTIONAL语句。

给出查询:

PREFIX ex: <http://example.com/#>
SELECT * WHERE {
?s a ex:Foo .
OPTIONAL { ?s ex:someProperty ?property }
} LIMIT 10

使用以下代码解析它(使用 Sesame 2.7.2):

SPARQLParserFactory factory = new SPARQLParserFactory();
QueryParser parser = factory.getParser();
ParsedQuery parsedQuery = parser.parseQuery(sparqlQuery, null);

StatementPatternCollector collector = new StatementPatternCollector();
TupleExpr tupleExpr = parsedQuery.getTupleExpr();
tupleExpr.visit(collector);

for (StatementPattern pattern : collector.getStatementPatterns()) {
System.out.println(pattern);
}

打印parsedQuery给出:

Slice ( limit=10 )
Projection
ProjectionElemList
ProjectionElem "s"
ProjectionElem "property"
LeftJoin
StatementPattern
Var (name=s)
Var (name=-const-1, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)
Var (name=-const-2, value=http://example.com/#Foo, anonymous)
StatementPattern
Var (name=s)
Var (name=-const-3, value=http://example.com/#someProperty, anonymous)
Var (name=property)

打印每个模式给出:

StatementPattern
Var (name=s)
Var (name=-const-1, value=http://www.w3.org/1999/02/22-rdf-syntax-ns#type, anonymous)
Var (name=-const-2, value=http://example.com/#Foo, anonymous)

StatementPattern
Var (name=s)
Var (name=-const-3, value=http://example.com/#someProperty, anonymous)
Var (name=property)

如何从 StatementPattern 获取有关其是否为OPTIONAL 的信息?

最佳答案

解决这个问题的唯一方法是检查它是否作为 LeftJoin 的右侧参数(一部分)出现。解决这个问题的一个相对简单的方法是实现一个 QueryModelVisitor,每当遇到左连接并向下传递其右侧参数时,它就会设置某种标志。

或者,您可以通过 getParentStatementPattern 传播回查询模型,并像这样检查树 - 这可能会更困难,因为 LeftJoin 不一定是 SP 的直接父级。

关于java - 如何使用 Sesame 解析 SPARQL 查询中的 OPTIONAL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17040208/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com