pySHACL: неспособность сообщить об ошибках проверки
У меня есть содержание всех соответствующих файлов по адресу: https://gist.github.com/James-Hudson3010/2588d9b17dd33e15922122b8b5cf1bd7
Если я выполню:
$ pyshacl -a -f human employees.ttl
Я получаю следующий правильный отчет о проверке...
Validation Report
Conforms: False
Results (3):
Constraint Violation in MaxInclusiveConstraintComponent (http://www.w3.org/ns/shacl#MaxInclusiveConstraintComponent):
Severity: sh:Violation
Source Shape: hr:jobGradeShape
Focus Node: d:e4
Value Node: Literal("8", datatype=xsd:integer)
Result Path: hr:jobGrade
Constraint Violation in DatatypeConstraintComponent (http://www.w3.org/ns/shacl#DatatypeConstraintComponent):
Severity: sh:Violation
Source Shape: hr:jobGradeShape
Focus Node: d:e3
Value Node: Literal("3.14", datatype=xsd:decimal)
Result Path: hr:jobGrade
Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent):
Severity: sh:Violation
Source Shape: hr:jobGradeShape
Focus Node: d:e2
Result Path: hr:jobGrade
Однако, если я разделю employee.ttl на три файла, содержащие данные схемы, формы и экземпляра, и запущу:
pyshacl -s shape.ttl -e schema.ttl -a -f human instance.ttl
результат:
Validation Report
Conforms: True
Полагаю, я правильно называю pyshacl.
1 ответ
Решение
Когда вы используете отдельные файлы, pySHACL не может узнать, что связать с файлом формы. hr:Employee
NodeShape с расширением. Кажется, он знает, когда он находится в этом единственном файле (возможно, он работает со всеми классами в файле??).
Так:
- переименуйте фигуру сотрудника, чтобы не перегружать
hr:Employee
название класса:hr:EmployeeShape
- добавить обратно в
sh:targetClass
директива:
hr:EmployeeShape
a sh:NodeShape ;
sh:targetClasshr:Employee ;
sh:property hr:nameShape ;
sh:property hr:jobGradeShape .
Тогда вызов нескольких файлов дает тот же результат, что и вызов одного файла.
Ваши обращения к pySHACL верны!