就我而言,有 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 ], ... ;
我设法编写了验证所有 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 的实例执行不同的规则?这甚至可能与 Shacl 吗?