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