我是 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 免费版中唯一可用的推理引擎。
在其他 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
参数。
关于sparql - 使用 SPIN 将默认值设置为属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45067947/