В моем случае есть вопросы SingleChoice (SC) и MultipleChoice (MC).У SC есть набор ответов (в виде пустых узлов), которые должны содержать одно свойство "points" и одно "text".У 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.Как мне управлять выполнением разных правил для экземпляров класса ex: Answer, в зависимости от того, есть ли ссылки (принадлежат SC или MC)?Это возможно даже с Shacl?