我是SPIN的新手。我想知道将其用于以下目的是否有意义。假设我有以下类层次结构:
ex:Vehicle
ex:Car
ex:Sedan
某些类将属性owl:equivalenClass
设置为某个值,例如:
ex:Vehicle
owl:equivalentClass wd:MeanOfTransportation
ex:Sedan
owl:equivalentClass wd:Sedan
如果owl:equivalentClass
未设置为值,则应采用其父类的值。在上面的例子中:
ex:Car
owl:equivalentClass wd:MeanOfTransportation
这可以通过SPIN完成吗,在我的情况下使用TopBraid?
将 SPIN 用于这些目的是有意义的,因为 SPIN 推理引擎是 TopBraid Composer Free Edition 中唯一可用的推理引擎。
在其他 TopBraid 编写器版本中,适当性以及获得的结果可能会因推理配置而异(推理>配置推理(。
规则是:
rdfs:Class spin:rule [
rdf:type sp:Construct ;
sp:text """
CONSTRUCT {
?this owl:equivalentClass ?equivalentClass .
}
WHERE {
?this rdfs:subClassOf ?superClass .
?superClass owl:equivalentClass|^owl:equivalentClass ?equivalentClass .
FILTER NOT EXISTS {
?this owl:equivalentClass|^owl:equivalentClass [] .
}
} """
] .
请注意,这个 SPIN 规则附加到rdfs:Class
:一个实例所有这些ex:Car
的类,ex:Vehicle
。?this
是一个特殊变量,它引用此类的"当前"实例。
似乎spl:InferDefaultValue
SPIN 模板不能用于您的情况,因为spl:InferDefaultValue
不接受 SPARQL 变量作为其spl:defaultValue
参数。