2

我有一个用于验证研究变量的 SHACL 模式。

{
  "@id": "m:VariableShape",
  "@type": "sh:NodeShape",
  "targetClass": "pplan:Variable",
  "property": [ 
    {
      "path": "m:dataType",
      "class" : "rdfs:Datatype",
      "minCount":"1"
    }, 
    {
      "path": "m:varName",
      "datatype": "xsd:string",
      "minCount":"1"
    }
  ]
},    
{
  "@id" : "m:dataType",
  "@type" : "owl:ObjectProperty"
},    
{
  "@id": "m:varName",
  "@type": "owl:DatatypeProperty"
}

我正在尝试针对它验证以下数据:

{
    "@id" : "ex:bp_var",
    "@type" : "pplan:Variable",
    "m:dataType" : "xsd:decimal",
    "m:varName" : "blood_pressure"
}

根据架构验证此数据会返回类似于以下内容的违规报告:

a sh:ValidationResult ;
sh:resultSeverity sh:Violation ;
…
sh:value xsd:decimal ;
sh:resultPath <http://.../m#dataType> ;
sh:resultMessage "Value does not have class rdfs:Datatype" ;

我是否应该明确指定'xsd:decimal is of type rdfs:Datatype'才能成功验证我的数据?

4

1 回答 1

2

1.5 SHACL 和 RDFS 推理的关系

SHACL 使用 RDF 和 RDFS 词汇表,但不需要完整的 RDFS 推理。但是,SHACL 处理器可以在包含蕴含 [ sparql11-entailment ] 的 RDF 图上运行——或者在提交给 SHACL 处理器之前预先计算,或者作为 SHACL 处理的一部分动态执行(不修改数据图或形状图)。为了支持蕴涵处理,SHACL 包含了sh:entailment指示给定形状图需要哪些推理的属性。

该属性的值sh:entailment是 IRI。[ sparql11-entailment ]涵盖了此属性的常用值。

因此,只需添加以下三元组(在 Turtle 语法中):

m:VariableShape  sh:entailment  <http://www.w3.org/ns/entailment/RDFS>

的确

当使用 RDFS 语义时,所有可识别的数据类型 IRI 的引用都可以被认为在类中rdfs:Datatype

这在 TopBraid Composer 中对我有用。

于 2018-12-22T14:16:24.950 回答