- From: James Hudson <jameshudson3010@gmail.com>
- Date: Tue, 21 Apr 2020 11:39:51 -0400
- To: Public Shacl W3C <public-shacl@w3.org>
- Message-ID: <CAEUVO9G4Y3dKHDhaLaqCAKCSN8vw7hUZ09pGycMB1duKstAy6A@mail.gmail.com>
Hello, Since people here have been so helpful in the past, I thought I would ask a few more questions. Background to this is my SO question at https://stackoverflow.com/questions/61323857/what-is-the-difference-between-these-shape-graphs-which-use-shor The SO question has the data graph under consideration. In the book Validating RDF, it says: Node shapes declare constraints directly on a node. Property shapes declare constraints on the values associated with a node through a path. Based on this, I believe I want to use a Property Shape because I want to define a constraint on the value of the rdf:type path on a focus node. Is this correct? If I try the property shape: @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix sch: <http://schema.org/> . @prefix sh: <http://www.w3.org/ns/shacl#> . @prefix ex: <http://example.org/> . ex:ClassOrProperty a sh:PropertyShape ; sh:target [ a sh:SPARQLTarget ; sh:select """ SELECT ?this WHERE { ?this ?p ?o . } """ ; ] ; sh:path [sh:zeroOrMorePath rdf:type] ; sh:in ( rdfs:Class rdf:Property ) ; . I get the unexpected validation error: (J) Constraint Violation in InConstraintComponent ( http://www.w3.org/ns/shacl#InConstraintComponent): Severity: sh:Violation Source Shape: ex:ClassOrProperty Focus Node: hr:Longer Value Node: hr:Employee Result Path: [ sh:zeroOrMorePath rdf:type ] The way I thought [sh:zeroOrMorePath rdf:type] ; would work is that it would consider the node hr:Longer and follow the rdf:type path through hr:Employee to where it terminates at rdfs:Class and then validate. However, it seems to stop one step away, sees that hr:Employee is not a rdfs:Class or rdf:Property and then generates a validation error. I get another unexpected validation error: (K) Constraint Violation in InConstraintComponent ( http://www.w3.org/ns/shacl#InConstraintComponent): Severity: sh:Violation Source Shape: ex:ClassOrProperty Focus Node: hr:Employee Value Node: hr:Employee Result Path: [ sh:zeroOrMorePath rdf:type ] I was thinking that the zero in sh:zeroOrMorePath would see hr:Employee a rdfs:Class ; and validate. Is it the case that the zero in sh:zeroOrMorePath causes a validation engine to compare a node against itself without following or looking for the path? I did try using sh:oneOrMorePath, but I received the validation error (J) again, but (K) did not show up. Is the reason why (K) did not show up because it was forced to see hr:Employee a rdfs:Class ; because of the one in sh:oneOrMorePath and could validate it? Perhaps a validation engine validates every node along the path and not just where the path terminates? If this is the case, is it possible to validate where the path terminates only? Needless to say, I am rather confused. Can anyone clear this up? Thank you, James
Received on Tuesday, 21 April 2020 15:40:17 UTC