这个问题中没有足够的信息来确定为什么你没有得到你正在寻找的结果,但是我们可以很好地重现这个场景来证明这是可以实现的。考虑一个包含三个类和一些个体的本体:
- 玩家 {p1, p2}
- 团队 {team1}
- 位置{前锋}
和公理
- p1≠p2
- team1 雇用 p1
- team1 雇用 p2
- p1 hasPosition 前锋
- p2 hasPosition 前锋
然后查询
- 团队和雇员最少2 名(球员和hasPosition值前锋)
返回个人 team1。(这也适用于“hasPosition some {Striker}”,但对于一个值,我认为value关键字更合适。)
这是本体:
@prefix : <http://stackoverflow.com/q/22688901/1281433/competitions#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
<http://stackoverflow.com/q/22688901/1281433/competitions>
a owl:Ontology .
:Player a owl:Class .
:Position a owl:Class .
:Team a owl:Class .
:hasPosition a owl:ObjectProperty .
:Striker a owl:NamedIndividual , :Position .
:p1 a owl:NamedIndividual , :Player ;
:hasPosition :Striker .
:p2 a owl:NamedIndividual , :Player ;
:hasPosition :Striker .
[ a owl:AllDifferent ;
owl:distinctMembers ( :p1 :p2 )
] .
:team1 a owl:NamedIndividual , :Team ;
:employs :p1 , :p2 .