Установите значение по умолчанию для свойства с помощью 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?


person Jay    schedule 12.07.2017    source источник
comment
Мой первый вопрос будет, почему вы хотите это сделать? Именно это и следует из логического вывода.   -  person UninformedUser    schedule 13.07.2017
comment
@AKSW, я не уверен, что это следует (или я вас не понимаю) ... В любом случае, единственный механизм вывода, доступный в бесплатной версии TopBraid Composer, - это механизм SPIN, поэтому этот вопрос имеет смысл, имхо.   -  person Stanislav Kralin    schedule 13.07.2017
comment
@StanislavKralin Ты прав. Это верно только для одного направления отношения эквивалентности, т. е. из этого следует только то, что подкласс является подклассом эквивалентного класса, но не наоборот.   -  person UninformedUser    schedule 13.07.2017
comment
Почему? - Я мог бы написать запрос SPARQL для извлечения значения owl:equivalenClass родительского класса, но мне это не нужно. Я хотел бы, чтобы оператор генерировался автоматически, если его не существует. Также я хочу научиться SPIN...   -  person Jay    schedule 13.07.2017
comment
@AKSW, я согласен, изначально это ожидалось; что при запуске механизма вывода подкласс должен наследовать значения свойств класса своего родителя.   -  person Jay    schedule 14.07.2017


Ответы (1)


Для этих целей имеет смысл использовать 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:Car, ex:Vehicle. ?this – это специальная переменная, которая ссылается на "текущий" экземпляр этого класса.

Похоже, что шаблон SPIN spl:InferDefaultValue в вашем случае использовать нельзя, так как spl:InferDefaultValue не принимать переменные SPARQL в качестве аргумента spl:defaultValue.

person Stanislav Kralin    schedule 13.07.2017
comment
Какова цель добавления обратного пути (^owl:equivalentClass ) в этом случае? ?superClass owl:equivalentClass|^owl:equivalentClass ?equivalentClass - person Jay; 14.07.2017
comment
@Joakim, ты можешь удалить его, если хочешь. В примере свойство (owl:equivalentClass) симметрично. Предположим, что wd:Sedan owl:equivalentClass ex:Sedan утверждается, а ex:Sedan owl:equivalentClass wd:Sedan не утверждается. Тем не менее, вы можете сделать вывод ex:goodSedan owl:equivalentClass wd:Sedan. - person Stanislav Kralin; 14.07.2017