#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
.