Ошибка проверки 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 ответ
Из 1.5 Взаимосвязь между SHACL и выводом RDFS:
SHACL использует словари RDF и RDFS, но полное вывод RDFS не требуется. Однако процессоры SHACL МОГУТ работать с графами RDF, которые включают в себя entailments [ https://www.w3.org/TR/sparql11-entailment/] - либо предварительно вычисленные перед отправкой в процессор SHACL, либо выполняемые на лету как часть обработки SHACL (без изменения графа данных или графа фигур). Чтобы поддержать обработку влечений, SHACL включает свойство
sh:entailment
чтобы указать, какой вывод требуется для данного графика форм.Значения имущества
sh:entailment
являются IRI. Общие значения для этого свойства указаны в [ https://www.w3.org/TR/sparql11-entailment/].
Таким образом, просто добавьте следующую тройку (в синтаксисе Turtle):
m:VariableShape sh:entailment <http://www.w3.org/ns/entailment/RDFS>
При использовании семантики RDFS можно считать, что ссылки всех распознанных IRI типов данных находятся в классе
rdfs:Datatype
,
Это работает для меня в TopBraid Composer.