You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:25:30