In my case there are SingleChoice (SC) and MultipleChoice (MC) questions. SC have a set of answers (as blank nodes) that must contain exectly one "points" and one "text" property. MC have a set of answers that must contain exectly one "points", one "text" and one "pointsNegative" property. Example as turtle:
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 ], ... ;
クラス ex:Answer のすべてのインスタンスを検証する shacl ルールを書くことができました。しかし、これらのインスタンスが属するもの (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 .
] .
たとえば、ex:pointsNegative に別の PropertyShape を追加すると、SC の質問のすべての回答で形状が失敗します (これらには ex:pointsNegative がないため)。minCount 制限を省略できますが、MC の質問に対する回答に ex:pointsNegative プロパティがない可能性があります。リンク (SC または MC に属する) に応じて、Class ex:Answer のインスタンスに対して異なるルールを実行するにはどうすればよいですか? これはシャクルでも可能ですか?