如何用SHACL验证本体类至少含英文skos:definition并允许多语言
用SHACL验证本体类必须包含英文skos:definition并支持多语言翻译
我们需要为本体制定规则:每个owl:Class类必须至少包含一个带英文(@en)标签的skos:definition属性,同时允许添加其他语言标签的skos:definition翻译版本。
有效类定义示例:
ex:ExampleClass a owl:Class ; skos:definition "An example Class"@en, "Eine Beispielklasse"@de .
现有尝试的问题
之前使用sh:languageIn的约束写法,会强制所有skos:definition的语言都属于指定集合(仅英文),无法满足"允许其他语言翻译"的需求:
ex:Pattern1 a sh:NodeShape ; sh:targetClass owl:Class ; sh:property [ sh:path skos:definition ; sh:datatype rdf:langString ; sh:languageIn ( "en" ) ; ] .
解决方案
要实现"至少一个英文定义+允许其他语言"的规则,需使用SHACL的限定值约束,通过sh:qualifiedValueShape指定符合条件的子约束,配合sh:qualifiedMinCount确保至少存在一个满足该子约束的值。
修改后的SHACL形状如下:
ex:ClassDefinitionRule a sh:NodeShape ; sh:targetClass owl:Class ; sh:property [ sh:path skos:definition ; sh:datatype rdf:langString ; # 限定至少有一个值满足英文标签约束 sh:qualifiedValueShape [ sh:path skos:definition ; sh:datatype rdf:langString ; sh:language "en" ; ] ; sh:qualifiedMinCount 1 ; # 明确允许任意数量的其他语言值(可选,为默认行为) sh:maxCount sh:unbounded ; ] .
规则解释
sh:qualifiedValueShape:定义子约束,要求存在至少一个skos:definition的值是带@en标签的语言字符串sh:qualifiedMinCount 1:确保目标类至少有一个值满足上述英文标签的子约束sh:maxCount sh:unbounded:明确允许添加任意数量的其他语言翻译版本(SHACL默认支持该行为,可省略,添加后规则更清晰)
此规则既保证了每个类必须包含英文定义,又不会限制其他语言的翻译版本。
内容的提问来源于stack exchange,提问作者Matthias Jung
相关产品推荐
相关产品推荐

