SPARQL 的基数限制

Cardinality restrictions on SPARQL

我的问题是关于 RDF 三元组的 SPARQL 查询语言,假设我们有一个以 RDF/XML 格式编写的家族 ontology。

现在,我想查询所有 parents,例如至少有两个 children(hasChild 关系上的基数)使用 SPARQL。

我的问题是,是否可以用 SPARQL 语言编写此查询,但我知道可以用 DL 查询语言(描述逻辑)编写此查询

以更一般的形式,是否可以在 SPARQL 语言中应用一些基数限制?

Now, I want to query all parents, for example, with at least two children (cardinality on hasChild relation) with SPARQL.

你只需在每一行中 select 一个 parent 和 child,然后按 parent 分组,然后只取那些至少有两个值的child:

select ?parent where {
  ?parent :hasChild ?child
}
group by ?parent
having (count(distinct ?child) >= 2)

不过要小心;在 OWL 中你可以有一个人必须至少有两个 children,但这个查询不会 return。例如,如果您有

TwoChildParent subClassof (hasChild min 2)
Joe a TwoChildParent

但没有

Joe hasChild ?x

三元组,此查询不会 return Joe,即使 Joe 至少有两个 child仁.