Может ли SHACL выражать ограничения во всей области данных?

Можно ли использовать SHACL для формулирования ограничений по всей области данных?

Например, могу ли я требовать наличия в данных тройки, соответствующей определенной форме?

Пример кода того, что я имел в виду:

# DEMO code, currently raises an error!!

@prefix ex: <http://example.org/ns#> .
@prefix sh:   <http://www.w3.org/ns/shacl#> .

ex:ObligatoryShape
    a sh:NodeShape ;
    minCount 1 . # What I want

Моя идея состоит в том, что приведенный выше код вызовет ошибку для каждого графа данных, который не включает в себя хотя бы один экземпляр данных, трижды соответствующий ex:ObligatoryShape - это включает в себя пустой граф данных.

1 ответ

Решение

В общем, проверка SHACL требует целевых операторов, которые обеспечивают отправную точку.

Если у вас нет какого-либо конкретного целевого узла, который, естественно, служил бы триггером для проверки, используйте что-то вроде

ex:MyShape
    sh:targetNode ex:DummyNode ;
    sh:sparql [ ... ] .

Ваш первоначальный вопрос не содержит достаточно подробностей о том, что конкретно вы тестируете - что будет "экземпляром фигуры"? Может быть, вы имеете в виду "содержит ли мой граф какой-либо экземпляр класса X". Следующая форма проверяет наличие хотя бы одного экземпляра Person:

ex:PersonCountShape
    a sh:NodeShape ;
    sh:targetNode ex:Person ;
    sh:property [
        sh:path [ sh:inversePath rdf:type ] ;
        sh:minCount 1 ;
    ] .

Возможно, ваши фигуры данных имеют схожие тройки, которые можно использовать в качестве отправной точки. Выше мы использовали тройки rdf: type, но часто полезны sh: targetSubjectsOf и sh: targetObjectsOf.

Другие вопросы по тегам