Может ли 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 - включая пустой граф данных.


person Jerome Broadlane    schedule 24.04.2019    source источник


Ответы (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.

person Holger Knublauch    schedule 25.04.2019
comment
Спасибо, это решило мою проблему. Я немного отредактировал вопрос, чтобы исправить свою терминологию. - person Jerome Broadlane; 26.04.2019
comment
Я до сих пор удивляюсь, что это решение работает. Если в графе нет узла, который соответствует sh:targetNode ex:Person, как можно проверить свойства узла на соответствие ограничению minCount? Очевидно, ограничение минимальности свойства просачивается до требования минимальности узла, чье свойство должно быть оценено? Я был бы признателен (за ссылку) за некоторые пояснения по этому поводу. - person Jerome Broadlane; 26.04.2019
comment
Спецификация SHACL W3C, вероятно, не объясняет эти вещи напрямую - это просто формальный документ, из которого можно сделать вывод о таких деталях. Короче говоря, нет понятия о существовании узла, поэтому даже если узел не входит ни в одну тройку, его все равно можно использовать в качестве целевого узла. Это определяется sh: targetNode, который просто добавляет свои объекты в набор целевых узлов. - person Holger Knublauch; 27.04.2019