虽然这是一个图书馆请求问题,因此不适合在StackOverflow上讨论,但我想指出,在许多情况下,你可以使用稍微复杂的SPARQL查询来回答这两个查询。对于这两种情况,你可以使用以下查询来获取所需的结果,其中<class-of-interest>
是 :SuperClass
或 :SiblingClass
:
select ?x where {
?x rdf:type/(rdfs:subClassOf|owl:equivalentClass)* <class-of-interest> .
}
这个查询找到所有具有从 rdf:type
开始,后跟零个或多个 rdfs:subClassOf
或 owl:equivalentClass
并最终到达 :SuperType
的路径的 ?x
。
例如,考虑以下Turtle / N3格式的数据。 (顺便说一句,如果您有关于运行对数据的查询的问题,请提供可用于处理的数据。您在问题中提供了类似RDF数据的东西,但没有任何可以复制和粘贴以编写查询的内容。)
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix : <https://dev59.com/eGIj5IYBdhLWcg3wPy4a/>
: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
的速记):
您可以像上面那样运行查询,选择个体及其类型(请注意,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 : <https://dev59.com/eGIj5IYBdhLWcg3wPy4a/>
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 |
--------------