【问题标题】:simple SPARQL with OR operator带有 OR 运算符的简单 SPARQL
【发布时间】:2021-03-14 04:59:15
【问题描述】:

我正在尝试学习与 WikiData 一起使用的 SPARQL,但我不知道如何执行“或”语句,例如查找属于哺乳动物子类或哺乳动物子类子类的所有分类单元。我看不到如何使用 VALUES 方法,如果我将 operator P171* 与过滤器一起使用,则需要很长时间。以下代码提供了一个“AND”语句我想要等效的“OR”语句。

SELECT ?taxon 
WHERE
{
  ?taxon wdt:P171 wd:Q7377.  #taxon is a subclass of mammals
  ?taxonn wdt:P171/wdt:P171 wd:Q7377.  #taxon is a subclass of a subclass of mammals
}

【问题讨论】:

  • ?taxon wdt:P171/wdt:P171? wd:Q7377.

标签: sparql wikidata


【解决方案1】:

有多种方法可以在 SPARQL 中执行“OR”语句。以下答案提供了一个很好的概述:https://stackoverflow.com/a/30502737/12780418

对于您的查询,最简单的方法是使用|,即

SELECT ?taxon WHERE {
   ?taxon wdt:P171|wdt:P171/wdt:P171 wd:Q7377.
}

【讨论】:

  • 谢谢。顺便说一句,你知道如何将后代带到 n 阶,其中 n 是一些变量吗? (以上为 n=2)
  • @kaleidoscop 正如评论中提到的,还有? 后缀运算符用于“0 次或多次出现”,因此您也可以使用此路径:wdt:P171/(wdt:P171?)(这是属性 可选 后跟相同的属性)。
  • @kaleidoscop 至于匹配“up to order n”,在标准 SPARQL 中没有方便的方法,但是当属性路径仍在开发中时,建议的功能之一包括 p{n,m} for “n to m" 重复 p,p{,n} 表示 "0 到 n"。有关详细信息,请参阅该草案中的 3 Path Language。一些端点实现了该功能并且仍然包含它,因此您可能很幸运已经在使用其中之一。
猜你喜欢
  • 2018-09-06
  • 1970-01-01
  • 2015-07-08
  • 2014-02-17
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2017-03-07
相关资源
最近更新 更多