当存在属性路径时,SPARQL查询不返回任何结果

当存在属性路径时,SPARQL查询不返回任何结果,sparql,Sparql,以下查询返回的某些结果的skos:brother设置为category:History select ?subject where { ?subject skos:broader category:History . } 但是,将skos:broader替换为skos:broader+或skos:broader*不会返回任何结果。为什么会这样?我希望ethier至少能够获取第一个查询中返回的结果 我在这里使用SPARQL前端:Virtuoso(DBpedia使用的端点)有一些特性

以下查询返回的某些结果的skos:brother设置为category:History

select ?subject
where 
{
      ?subject skos:broader category:History .
}
但是,将
skos:broader
替换为
skos:broader+
skos:broader*
不会返回任何结果。为什么会这样?我希望ethier至少能够获取第一个查询中返回的结果

我在这里使用SPARQL前端:

Virtuoso(DBpedia使用的端点)有一些特性,支持一些非标准语法(这常常让人们想知道为什么在DBpedia上工作的查询不能与其他库一起工作),并且(我认为)不支持所有SPARQL 1.1。在这种情况下,您可能会遇到一些内部限制。但是,您可以使用如下查询近似获得所需的结果:

select ?category { ?category skos:broader{,7} category:History }

这只遵循长度为7或更少的路径。属性路径的{m,n}表示法不是SPARQL 1.1的一部分,而是在早期的草稿中,Virtuoso支持它。它可以方便地限制在回答查询时使用的资源,这是一个很好的用例。

Virtuoso(正在运行的端点DBpedia)不支持SPARQL 1.1的所有功能,我认为,这可能是其中一种边缘情况。在最近的一个问题中,财产路径和SKO也出现了类似的情况:范围更广。不过,我不确定那里的解决方案在这种情况下是否会有很大帮助。作为一个处理属性路径的笨拙示例,DBpedia在查询中阻塞了ask{category:History skos:brother*category:History}并显示了消息“Virtuoso 42000错误TN.:可传递临时内存中超过100000000字节。使用t_distinct、t_max或更多的t_max内存选项来限制搜索或增加池“它应该能够简单地回答
true
,因为
…*
匹配长度为0的路径。