我想找出一个子类的超类,但是在找到一个特定的类之后过滤掉所有的超类。 例如,这棵树(from this question):
Main
|__ Network
| |__ ATM
| |__ ARPANET
|
|__ Software
|__ Linux
|__ Windows
|__ XP
|__ Win7
|__ Win8
我想找到win7的超类,但忽略了“软件”类之上的所有超类:
Software
|__ Windows
|__ Win7
这是我做的第一件事:
SELECT ?superClass
WHERE {
:Win7 rdfs:subClassOf ?superClass .
FILTER (?superClass != :Software)
}
但是只有一个:软件,我想过滤掉所有其他超类
答案 0 :(得分:2)
最直接的方法是使用专有路径和FILTER NOT EXISTS
来排除:Software
上方的所有内容,例如:
select * where {
:Win7 rdfs:subClassOf+ ?super .
filter not exists {
:Software rdfs:subClassOf+ ?super
}
}