2

我是 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 

在我使用 TopBraid 的情况下,这可以通过 SPIN 完成吗?

4

1 回答 1

2

将 SPIN 用于这些目的是有意义的,因为 SPIN 推理引擎是 TopBraid Composer 免费版中唯一可用的推理引擎。

在其他 TopBraid Composer 版本中,适当性以及获得的结果可能会因您的推理配置而异(推理 > 配置推理)。

规则是:

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:Carex:Vehicle?this是一个特殊变量,它引用这个类的“当前”实例。

在您的情况下,似乎无法spl:InferDefaultValue使用 SPIN 模板,因为spl:InferDefaultValue它不接受 SPARQL 变量作为其spl:defaultValue参数。

于 2017-07-13T14:50:05.993 回答