Формы SHACL для проверки подграфа

#rdf #semantic-web #shacl

#rdf #семантическая сеть #shacl

Вопрос:

Я хочу проверить порядок предикатов в подграфе с помощью SHACL. Теоретически, я думаю, мне пришлось бы использовать формы SHACL для каждого из связанных вместе предикатов, а затем определить условный оператор, который проверяет, присутствует ли первый предикат, а затем продолжить обход графика для следующего предиката.

Например:

 <bob> foaf:knows <emma>.
<emma> ontology1:gender <woman>.
<woman> ontology1:species <human>.
<human> ontology2:category <earth>.
  

В этом я хотел бы проверить, что последовательность предикатов:-

foaf:знает -> онтология1: пол -> онтология1: вид -> онтология2: категория

Я просмотрел множество документации, но пока не нашел примера для этого. Есть идеи, как это сделать с помощью основных функций SHACL? Или даже с помощью SHACL-SPARQL?

Комментарии:

1. Я не понимаю, когда это будет нарушением — является ли ваш пример нарушением? Каким будет начальное свойство? Я имею в виду, что первое свойство должно быть rdfs:label , это уже не выполняется для выборки данных

2. @UninformedUser: Извините, неправильно написал первый предикат в примере.

Ответ №1:

Если ontology1:gender и ontology1:species не может иметь более одного значения, тогда используйте объекты-цели и пути следования. Вот так:

 :FellowShape
   sh:targetObjectsOf foaf:knows ;
   sh:property [
      sh:path (ontology1:gender ontology1:species ontology2:category) ;
      sh:message "Property chain is broken" ;
      sh:minCount 1
   ] .
  

<a rel="noreferrer noopener nofollow" href="https:///rdfshape.herokuapp.com/validate?data=@prefix : .
@prefix sh: .

:woman :species :human .

:human :category :earth .

:bob :knows :emma .

:emma :gender :woman .
amp;dataFormat=turtleamp;schema=@prefix sh: .
@prefix : .

:FellowShape
sh:targetObjectsOf :knows ;
sh:property [
sh:path (:gender :species :category) ;
sh:message «Property chain is broken» ;
sh:minCount 1 ;
] .amp;schemaFormat=Turtleamp;schemaEngine=SHACLexamp;triggerMode=TargetDeclsamp;schemaEmbedded=falseamp;inference=NONEamp;activeDataTab=#dataTextAreaamp;activeSchemaTab=#schemaTextAreaamp;activeShapeMapTab=#shapeMapTextAreaamp;amp;shapeMap=» rel=»nofollow noreferrer»>Игровая площадка.

Ответ №2:

В качестве альтернативы важным моментом является то, что цель должна быть частью тройки, которая запускает цепочку свойств. В данном случае это объект foaf: знает. Есть несколько способов сделать это, в том числе:

 :FellowShape
   sh:targetNode :emma ;
   sh:property [
      sh:path (ontology1:gender ontology1:species ontology2:category) ;
      sh:message "Property chain is broken" ;
      sh:minCount 1
   ] .
  

Обратите внимание, что sh:targetNode :emma используется вместо sh:targetObjectsOf foaf:knows , оба из которых указывают спецификацию формы для начала foaf:knows :emma .