我正在使用Protege 4.3(也尝试过5-beta),使用以下简单的本体:
Class: Person
Class: Man
SubClassOf:
Person
Individual: John
Types:
Man
接下来,我启动了Reasoner Hermit 1.3.8,但John并未被推断为人。此外,以下SPARQL不会返回任何内容:
PREFIX this: <http://www.semanticweb.org/ontologies/2015/6/untitled-ontology-18#>
SELECT ?subject
WHERE { ?subject a this:Person }
你有什么建议我理解错了吗?
答案 0 :(得分:2)
关于子类 Man 对超类 Person 的“缺失”推断:
即使推理者处于活动状态,Protégé也不会在其超类中显示子类的个体。然而,正如您已经看到的那样,推理有效。以下两个示例都将 John 作为类 Person 的个人返回:
SPARQL +推理器(Snap SPARQL插件4.2.0 + HermiT 1.3.8.413)
PREFIX this: <urn:absolute:test#>
SELECT ?subject
WHERE { ?subject a this:Person }
DL-Query + Reasoner(DL-Query 4.0.1 + HermiT 1.3.8.413)
Person
另一种使其显而易见的方法是使用所有推断的公理导出本体(“文件” - &gt;“导出推断的公理为本体......”)。生成的本体包含两个 John 的类断言,一个作为 Man ,另一个作为 Person 。
我认为这种行为可以在处理可能包含许多个人的更大的本体时保持GUI的可用性。从Protégé5.1.0开始,似乎无法改变这种行为。