尽管这是一个库请求问题,因此与 StackOverflow 无关,但我想指出,在许多情况下,您可以使用看起来更复杂的 SPARQL 查询来回答这两个查询。对于这两种情况,您都可以使用以下查询来获取所需的结果,即 where <class-of-interest>
is:SuperClass
或:SiblingClass
:
select ?x where {
?x rdf:type/(rdfs:subClassOf|owl:equivalentClass)* <class-of-interest> .
}
这会发现?x
s 有一条从 开始,rdf:type
然后是零个或多个rdfs:subClassOf
orowl:equivalentClass
并最终到达的路径:SuperType
。
例如,考虑 Turtle/N3 中的以下数据。(顺便说一句,如果您询问有关对数据运行查询的问题,请提供我们可以使用的数据。您在问题中提供了类似于 RDF 数据的东西,但我们无法复制、粘贴和编写查询.)
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix : <http://stackoverflow.com/q/20474862/1281433/>
:i1 a :C .
:C rdfs:subClassOf :D .
:D rdfs:subClassOf :E .
:i2 a :F .
:F rdfs:subClassOf :G1 .
:G1 owl:equivalentClass :G2 .
:G2 rdfs:subClassOf :H .
您可以像上面那样运行查询来选择个人及其类型(请注意,这a
是 SPARQL 和 Turtle/N3 中的简写rdf:type
):
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix : <http://stackoverflow.com/q/20474862/1281433/>
select ?i ?type where {
?i a/(rdfs:subClassOf|owl:equivalentClass)* ?type
}
--------------
| i | type |
==============
| :i2 | :F |
| :i2 | :G1 |
| :i2 | :G2 |
| :i2 | :H |
| :i1 | :C |
| :i1 | :D |
| :i1 | :E |
--------------