外部资源的SHACL验证错误

时间:2018-12-21 20:29:14

标签: rdf rdfs shacl

我有一个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为rdfs:Datatype类型”才能成功验证我的数据?

1 个答案:

答案 0 :(得分:2)

来自1.5 Relationship between SHACL and RDFS inferencing

  

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>

Indeed

  

使用RDFS语义时,所有公认的数据类型IRI的引用都可以视为在rdfs:Datatype类中。

这在TopBraid Composer中对我有用。