Хотя Ответ RobV является правильным в вашем случае, я думаю, что двунаправленная природа совы: sameAs стоит упомянуть.
Давайте расширим ваш пример следующим образом:
:a owl:sameAs :d.
:e owl:sameAs :d.
В этом случае простого owl:sameAs+
будет недостаточно, чтобы найти :e
, поэтому, возможно, используйте что-то вроде (owl:sameAs|^owl:sameAs)+
, чтобы найти все дерево эквивалентности.Имейте в виду, что в зависимости от конечной точки это может вызывать циклы.
Также могут существовать специфичные для реализации расширения для обработки owl:sameAs
рассуждений, например, в Virtuoso :
DEFINE input:same-as "yes"
select * where { :a ?p ?o. }
возвращаются также ?p
и ?o
, выданные на :b, :c, :d
и :e
.