Skip to content

odd behavior with SHACL inverse path #214

@fils

Description

@fils

I'm submitting a

  • [X ] bug report.
  • feature request.

Current Behaviour:

Expected Behaviour:

running pyshacl from the command results in this

(kglab) ➜  validation git:(master) ✗ pyshacl -s shapes/oih_checkDownload.ttl  -f human ./datagraphs/lipd.json
Validation Report
Conforms: False
Results (1):
Constraint Violation in MinCountConstraintComponent (http://www.w3.org/ns/shacl#MinCountConstraintComponent):
        Severity: shacl:Violation
        Source Shape: [ shacl:minCount Literal("1", datatype=xsd:integer) ; shacl:path [ shacl:inversePath rdf:type ] ]
        Focus Node: :Course
        Result Path: [ shacl:inversePath rdf:type ]
        Message: Less than 1 values on :Course->[ shacl:inversePath rdf:type ]

but the script simpleshacl.py in https://github.com/gleanerio/notebooks/tree/master/notebooks/validation when run generates

(kglab) ➜  validation git:(master) ✗ python simpleshacl.py                                                   
Usage of abort_on_error is deprecated. Use abort_on_first instead.
Traceback (most recent call last):
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1174, in uri_ref2
    ns = self._bindings[pfx]
KeyError: 'rdf'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "simpleshacl.py", line 25, in <module>
    conforms, report_graph, report_text = kg.validate(
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/kglab/kglab.py", line 1181, in validate
    g.parse(
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/graph.py", line 1261, in parse
    raise se
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/graph.py", line 1252, in parse
    parser.parse(source, self, **args)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1921, in parse
    p.loadStream(stream)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 438, in loadStream
    return self.loadBuf(stream.read())  # Not ideal
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 444, in loadBuf
    self.feed(buf)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 470, in feed
    i = self.directiveOrStatement(s, j)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 490, in directiveOrStatement
    j = self.statement(argstr, i)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 740, in statement
    j = self.property_list(argstr, i, r[0])
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1088, in property_list
    i = self.objectList(argstr, j, objs)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1132, in objectList
    i = self.object(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1418, in object
    j = self.subject(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 747, in subject
    return self.item(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 839, in item
    return self.path(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 846, in path
    j = self.nodeOrLiteral(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1446, in nodeOrLiteral
    j = self.node(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 919, in node
    i = self.property_list(argstr, j, subj)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1088, in property_list
    i = self.objectList(argstr, j, objs)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1132, in objectList
    i = self.object(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1418, in object
    j = self.subject(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 747, in subject
    return self.item(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 839, in item
    return self.path(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 846, in path
    j = self.nodeOrLiteral(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1446, in nodeOrLiteral
    j = self.node(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 919, in node
    i = self.property_list(argstr, j, subj)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1088, in property_list
    i = self.objectList(argstr, j, objs)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1132, in objectList
    i = self.object(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1418, in object
    j = self.subject(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 747, in subject
    return self.item(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 839, in item
    return self.path(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 846, in path
    j = self.nodeOrLiteral(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1446, in nodeOrLiteral
    j = self.node(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1050, in node
    j = self.uri_ref2(argstr, i, res)
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1182, in uri_ref2
    self.BadSyntax(argstr, i, 'Prefix "%s:" not bound' % (pfx))
  File "/home/fils/.conda/envs/kglab/lib/python3.8/site-packages/rdflib/plugins/parsers/notation3.py", line 1653, in BadSyntax
    raise BadSyntax(self._thisDoc, self.lines, argstr, i, msg)
rdflib.plugins.parsers.notation3.BadSyntax: at line 10 of <>:
Bad syntax (Prefix "rdf:" not bound) at ^ in:
"...b':type ]" ;\n            shacl:resultPath [ shacl:inversePath '^b'rdf:type ] ;\n            shacl:resultSeverity shacl:Violatio'..."

You can also reference RDFLib/pySHACL#36 which may be related.

Steps to reproduce:

use the command above and the script simpleshacl.py in https://github.com/gleanerio/notebooks/tree/master/notebooks/validation environment file https://github.com/gleanerio/notebooks/blob/master/environment.yml

Environment:

  • python version 3.8.10
  • OS details Fedora 34

(kglab) ➜ validation git:(master) ✗ conda list | grep -i shacl
pyshacl 0.16.1 pyhd8ed1ab_0 conda-forge

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions