I suspect this is another instance of the common misunderstanding: the @prefix 
declarations are not mapped to any triples and are only a concept of the 
serialization. To make them visible to SHACL, you need to declare triples such 
as in

https://www.w3.org/TR/shacl/#sparql-prefixes
in your case it would be skos: as subject.

Holger


> On 28 Feb 2023, at 12:56 pm, Martynas Jusevičius <marty...@atomgraph.com> 
> wrote:
> 
> Hi,
> 
> Does Jena's SHACL engine support sh:prefixes? Or am I using them wrong?
> 
> The following test shape
> 
> @prefix skos:   <http://www.w3.org/2004/02/skos/core#> .
> @prefix sh:     <http://www.w3.org/ns/shacl#> .
> 
> <#ConceptBroaderCycleShape>
>    a sh:NodeShape ;
>    sh:targetClass skos:Concept ;
>    sh:sparql [
>        a sh:SPARQLConstraint ;
>        sh:message "Concept is broader than itself (directly or indirectly)" ;
>        sh:prefixes skos: ;
>        sh:select """
>            SELECT *
>            {
>                $this skos:broader+ $this .
>            }
>            """ ;
>    ] .
> 
> returns an error:
> 
> org.apache.jena.shacl.parser.ShaclParseException: Bad query: Line 5,
> column 23: Unresolved prefixed name: skos:broader
> at org.apache.jena.shacl.lib.ShLib.parseQueryString(ShLib.java:262)
> at org.apache.jena.shacl.lib.ShLib.extractSPARQLQuery(ShLib.java:270)
> at 
> org.apache.jena.shacl.engine.SparqlConstraints.parseSparqlConstraint(SparqlConstraints.java:64)
> at 
> org.apache.jena.shacl.parser.Constraints.lambda$static$20(Constraints.java:116)
> at 
> org.apache.jena.shacl.parser.Constraints.parseConstraint(Constraints.java:176)
> at 
> org.apache.jena.shacl.parser.Constraints.parseConstraints(Constraints.java:160)
> at 
> org.apache.jena.shacl.parser.ShapesParser.parseShape$(ShapesParser.java:319)
> at 
> org.apache.jena.shacl.parser.ShapesParser.parseShapeStep(ShapesParser.java:305)
> at org.apache.jena.shacl.parser.ShapesParser.parseShape(ShapesParser.java:236)
> at 
> org.apache.jena.shacl.parser.ShapesParser.parseShapeAcc(ShapesParser.java:221)
> at 
> org.apache.jena.shacl.parser.ShapesParser.parseShapes(ShapesParser.java:163)
> at 
> org.apache.jena.shacl.parser.ShapesParser.parseProcess(ShapesParser.java:100)
> at org.apache.jena.shacl.Shapes.parseProcess(Shapes.java:111)
> at org.apache.jena.shacl.Shapes.parseAll(Shapes.java:106)
> at org.apache.jena.shacl.Shapes.parse(Shapes.java:83)
> at 
> org.apache.jena.shacl.validation.ShaclPlainValidator.parse(ShaclPlainValidator.java:38)
> at 
> org.apache.jena.shacl.validation.ShaclPlainValidator.validate(ShaclPlainValidator.java:90)
> at shacl.shacl_validate.exec(shacl_validate.java:124)
> at org.apache.jena.cmd.CmdMain.mainMethod(CmdMain.java:87)
> at org.apache.jena.cmd.CmdMain.mainRun(CmdMain.java:56)
> at org.apache.jena.cmd.CmdMain.mainRun(CmdMain.java:43)
> at shacl.shacl_validate.main(shacl_validate.java:60)
> at shacl.shacl.main(shacl.java:81)
> 
> 
> Martynas

Reply via email to