首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Sesame解析SPARQL查询中的可选语句?

如何使用Sesame解析SPARQL查询中的可选语句?
EN

Stack Overflow用户
提问于 2013-06-11 17:01:34
回答 1查看 497关注 0票数 1

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

给定查询:

代码语言:javascript
复制
PREFIX ex: <http://example.com/#>
SELECT * WHERE {
  ?s a ex:Foo .
  OPTIONAL { ?s ex:someProperty ?property }
} LIMIT 10

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

代码语言:javascript
复制
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可实现以下功能:

代码语言:javascript
复制
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)

打印每个pattern的结果如下:

代码语言:javascript
复制
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的信息

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-12 06:27:49

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17040208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档