Может ли SHACL выражать ограничения во всей области данных? - PullRequest
2 голосов
/ 24 апреля 2019

Можно ли использовать 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 Ответ

2 голосов
/ 25 апреля 2019

Как правило, для проверки 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.

...