SPARQL 在查询中,如何在找到特定 class 后过滤掉 superclasses?
SPARQL In a query, how to filter out superclasses after a specific class has been found?
我想找出子class的超级class,但在找到特定的class后过滤掉所有超级class。
例如这棵树(from this question):
Main
|__ Network
| |__ ATM
| |__ ARPANET
|
|__ Software
|__ Linux
|__ Windows
|__ XP
|__ Win7
|__ Win8
我想找到 win7 的超级classes,但遗漏了 "Software" 以上的所有超级classes class:
Software
|__ Windows
|__ Win7
这是我做的第一件事:
SELECT ?superClass
WHERE {
:Win7 rdfs:subClassOf ?superClass .
FILTER (?superClass != :Software)
}
但只遗漏了:软件,我想过滤我们所有其他超级classes
最直接的方法是使用属性路径和 FILTER NOT EXISTS
排除高于 :Software
的所有内容,例如:
select * where {
:Win7 rdfs:subClassOf+ ?super .
filter not exists {
:Software rdfs:subClassOf+ ?super
}
}
我想找出子class的超级class,但在找到特定的class后过滤掉所有超级class。 例如这棵树(from this question):
Main
|__ Network
| |__ ATM
| |__ ARPANET
|
|__ Software
|__ Linux
|__ Windows
|__ XP
|__ Win7
|__ Win8
我想找到 win7 的超级classes,但遗漏了 "Software" 以上的所有超级classes class:
Software
|__ Windows
|__ Win7
这是我做的第一件事:
SELECT ?superClass
WHERE {
:Win7 rdfs:subClassOf ?superClass .
FILTER (?superClass != :Software)
}
但只遗漏了:软件,我想过滤我们所有其他超级classes
最直接的方法是使用属性路径和 FILTER NOT EXISTS
排除高于 :Software
的所有内容,例如:
select * where {
:Win7 rdfs:subClassOf+ ?super .
filter not exists {
:Software rdfs:subClassOf+ ?super
}
}