Как создать правило SHACL для вывода rdf: type из rdfs: subClassOf - PullRequest
1 голос
/ 27 марта 2020

Чтобы проверить мой график RDF по моим формам проверки SHACL V, я хочу вывести некоторые тройки, чтобы мои формы были простыми. В частности, одно из правил, которое мне нужно реализовать, (в псевдокоде):

(?s, rdf:type, :X) <-- (?s, rdfs:subClassOf, :Y)

Я пробовал несколько реализаций, заканчивая этим тройным правилом (и его вариантами) :

@prefix sh:            <http://www.w3.org/ns/shacl#> .
@prefix rdf:           <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:          <http://www.w3.org/2000/01/rdf-schema#> .
@prefix : <http://example.com/ex#> .
:s
    a              sh:NodeShape ;
    sh:targetClass rdfs:Resource ;
    sh:rule        [ 
                     a            sh:TripleRule ;
                     sh:subject   sh:this ;
                     sh:predicate rdf:type ;
                     sh:object    :X ;
                     sh:condition [ sh:property [ sh:path     rdfs:subClassOf ;
                                                  sh:hasValue :Y ] ]
                   ] .

Однако правило не выводит :A rdf:type :X . для графа данных

:A rdfs:subClassOf :Y .

(Выполнение для https://github.com/TopQuadrant/shacl). Эту проблему можно решить с помощью правила SPARQL, поэтому мой вопрос заключается в том, есть ли возможность сделать это также с помощью правила Triple. Спасибо за подсказки!

1 Ответ

0 голосов
/ 01 апреля 2020

Почему бы вам не разделить правила вывода и проверки, как вы отметили, возможно использование SHACL + SPARQL, поскольку это облегчит задачу?

Вы можете использовать pySHACL и помещать правила в файл онтологии, поскольку pySHACL может запускать правила / выводы онтологии перед применением валидаторов SHACL (см. Параметры -i и -e).

...