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仁.
我的问题是关于 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仁.