I have A
, B
and C
作为通过传递属性相关的类isSubClassOf
.
So A isSuclassOF B
and B isSubClassOf C
。所以通过推断我们有A isSubClassOf C
.
我的问题:如何编写 SPARQL 查询以仅返回每个类的直接唯一子类号。例如
A 0
B 1
C 1
在标准 SPARQL 语言中,您可以通过查询“中间”不存在其他子类的子类来完成此操作,如下所示:
SELECT ?directSub ?super
WHERE { ?directSub rdfs:subClassOf ?super .
FILTER NOT EXISTS { ?otherSub rdfs:subClassOf ?super.
?directSub rdfs:subClassOf ?otherSub .
FILTER (?otherSub != ?directSub)
}
}
如果您想计算子类的数量,则需要使用以下内容调整上述查询COUNT
and GROUP BY
运营商。
然而,许多 SPARQL 引擎提供了一些查询直接子类的快捷方式。例如,在 Sesame 中,以编程方式查询时,您可以通过在查询期间设置布尔属性来禁用推理。Query
反对false
。它还提供了一个额外的推理器,可以在数据存储之上配置,并允许您使用“虚拟”属性进行查询,sesame:directSubClassOf
(也sesame:directType
and sesame:directSubPropertyOf
).
其他 SPARQL 引擎也有类似的机制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)