我是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吗?
答案 0 :(得分:1)
将SPIN用于这些目的是有意义的,因为SPIN推理引擎是TopBraid Composer免费版中唯一可用的推理引擎。
在其他TopBraid Composer版本中,适用性以及获得的结果可能会因您的inferencing configuration(推理>配置推理)而异。
规则是:
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
参数。