Um relatório SHACL pode indicar conformidade mesmo quando há um recurso sem o campo esperado. Primeiro confira se a forma selecionou o recurso como nó de foco. Depois confira a restrição.
@prefix ex: <https://example.org/> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
ex:PersonShape a sh:NodeShape ;
sh:targetClass ex:Person ;
sh:property [
sh:path ex:email ;
sh:minCount 1
] .
No grafo de dados, adicione a tripla ex:Ana a ex:Person. Sem um valor para ex:email, a validação deve apontar Ana como nó de foco e ex:email como caminho do resultado. Se o grafo contém apenas ex:Ana ex:name "Ana", a forma acima não seleciona Ana. O resultado muda mesmo com a propriedade de e-mail ausente nos dois grafos.
Isole a seleção no teste
Para testar diretamente uma instância, acrescente sh:targetNode ex:Ana à forma. A ausência de e-mail agora pode ser detectada mesmo sem a declaração de classe. Ao voltar ao alvo por classe, use uma massa que represente a tipagem realmente entregue ao validador. Se o teste depende de subclasses, inclua no grafo os vínculos de subclasse usados pela seleção.
O próximo teste pode usar um valor presente com tipo inesperado. sh:minCount só conta valores. Uma restrição como sh:datatype cobre outra regra.
W3C SHACL, alvos por classe · Restrição sh:minCount
Leia também: JSON-LD 1.1 e a diferença entre IRIs e literais