Ошибка проверки 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», чтобы иметь возможность успешно проверить мои данные?


person Ehsan    schedule 21.12.2018    source источник


Ответы (1)


Из 1.5 Связь между выводом SHACL и RDFS:

SHACL использует словари RDF и RDFS, но полный вывод RDFS не требуется. Однако процессоры SHACL МОГУТ работать с графами RDF, которые включают в себя следствия [sparql11-entailment] - либо предварительно вычисляются перед отправкой в ​​процессор 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.

person Stanislav Kralin    schedule 22.12.2018