如何用SPARQL查询Protege本体中个体的层级与所属类?
SPARQL查询Protege本体中个体的类层级结构
查询个体直接所属的类
如果只需要找个体直接声明的类(即你在Protege里给个体指定的类),可以用以下SPARQL语句:
SELECT ?class WHERE { :person1 rdf:type ?class . FILTER (!isBlank(?class)) }
- 替换
:person1为你的个体实际URI的前缀简写(比如本体命名空间是ex:,就写ex:person1),或者直接使用个体的完整URI。 !isBlank(?class)用于过滤推理过程中生成的匿名类,只保留你定义的命名类。
查询个体所属的所有类(含层级父类)
如果需要获取完整的类层级结构(包括直接类的所有父类,通过rdfs:subClassOf继承的上层类),可以使用递归属性路径:
SELECT ?class WHERE { :person1 rdf:type ?originalClass . ?originalClass rdfs:subClassOf* ?class . FILTER (!isBlank(?class)) }
rdfs:subClassOf*是递归匹配符号,表示匹配0次或多次子类关系,会返回个体直接类本身以及所有上层父类,完整呈现类的层级。
Protege中使用提示
在Protege的「SPARQL Query」标签页输入上述语句即可执行查询。如果不确定命名空间前缀,可在「Entities」标签查看个体的完整URI,直接替换到查询语句中。
内容的提问来源于stack exchange,提问作者Areej
相关产品推荐
相关产品推荐

