В моем случае есть вопросы SingleChoice (SC) и MultipleChoice (MC). У SC есть набор ответов (в виде пустых узлов), которые должны точно содержать одно свойство «точки» и одно свойство «текст». У MC есть набор ответов, который должен содержать одно свойство "points", одно "text" и одно свойство pointsNegative ". Пример как черепаха:
prefix ex ...
ex:SC a ex:SingleChoice .
ex:hasAnswers [
a ex:Answer .
ex:text "Answer 1" .
ex:points 5 ;
],[ ...sameAsAbove ], ... ;
ex:MC a ex:MultipleChoice .
ex:hasAnswers [
a ex:Answer .
ex:text "Answer 1" .
ex:points 5 .
ex:pointsNegative 1 ;
],[ ...sameAsAbove ], ... ;
Мне удалось написать правила shacl, которые проверяют все экземпляры класса ex: Answer. Но я не могу сделать разницы, к какому экземпляру принадлежат эти экземпляры (SC или MC), проверяя их с помощью следующих правил:
ex:AnswerShape
a sh:NodeShape ;
sh:targetClass ex:Answer ;
sh:property [
a sh:PropertyShape ;
sh:path ex:Text ;
sh:minCount 1 ;
sh:maxCount 1 ;
sh:dataType xsd:string .
] .
Например. если я добавлю еще одну PropertyShape для ex: pointsNegative, форма не будет выполнена для всех ответов на вопрос SC (поскольку в них нет ex: pointsNegative). Я мог бы опустить ограничение minCount, но тогда ответы на вопросы MC могут не иметь свойства ex: pointsNegative. Как мне удается выполнять разные правила для экземпляров Class ex: Answer в зависимости от того, какие ссылки (принадлежат SC или MC)? Возможно ли это вообще с Shacl?