Может ли 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.