Took a look at your code and shapes, had to make a couple of little fixes.
In your prologue, you had:
data_graph_orig = data_graph
That made them both reference the same graph, so there was never a
difference. I replaced that with:
data_graph_orig = Graph()
for t in data_graph:
data_graph_orig.add(t)
to clone the data. That made the extra triples introduced by RDFS reasoning
show up as added. I then took a look
at your shapes, and was a little thrown off by the sh:values construct you
used (I can't find it in SHACL-AF) and the
use of the spif: time functions, which are not natively present in pySHACL
(perhaps you introduced them in your
context?). Regardless, I added the following declaration and rule:
kennedys:
a owl:Ontology ;
owl:imports sh: ;
sh:declare [
sh:prefix "kennedys" ;
sh:namespace "http://kennedys.com/"^^xsd:anyURI ;
] ;
sh:declare [
sh:prefix "schema" ;
sh:namespace "http://schema.org/"^^xsd:anyURI ;
] .
schema:PersonAgeRule
a sh:NodeShape ;
sh:targetClass schema:Person ;
sh:rule [
a sh:SPARQLRule ;
sh:prefixes schema: ;
sh:construct """
CONSTRUCT {
$this schema:age ?age
}
WHERE {
$this schema:birthDate ?birthDate .
FILTER NOT EXISTS { $this schema:deathDate ?any }
bind(year(now()) - year(xsd:dateTime(CONCAT(STR(?birthDate), 'T00:00:00')))
as ?age)
}
""" ;
] ;
.
(The actual YEAR() function only works on dateTime, thus the date hackery)
which caused the following to show up in the graph diff:
(rdflib.term.URIRef('http://kennedys.com/CarolineKennedy'),
rdflib.term.URIRef('http://schema.org/age'), rdflib.term.Literal('64',
datatype=rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#integer')))
Hope that helps.
On Friday, May 21, 2021 at 2:54:02 AM UTC-4 [email protected] wrote:
> Thank you Boris for the hint.
>
> Inferences going into the datagraph makes sense indeed. However attached
> example does not give the wanted result.
> I will check this in the weekend again.
>
> btw I am running on Windows10 using RDFlib 5.0.0
>
> Kind regards,
> Richard
>
> On Thursday, May 20, 2021 at 7:50:17 PM UTC+2 Boris Pelakh wrote:
>
>> Richard,
>>
>> As per the code, it appears that triples created by inference from
>> sh:rule are added into the data_graph, which makes sense, since you can
>> evaluate the other rules against the inferred content. In SPARQLRule:
>>
>> data_graph = clone_graph(g, target_graph=data_graph)
>>
>> and in TripleRule:
>>
>> for i in iter(new_triples):
>> data_graph.add(i)
>>
>> I believe this makes the new triples not accessible from the command line
>> at this time, but if you invoke pySHACL from your own main, you should be
>> able to inspect the data graph you passed in after running and determine
>> the new triples introduced.
>>
>> On Thu, May 20, 2021 at 11:55 AM [email protected] <
>> [email protected]> wrote:
>>
>>> Using shacl-af with pyshacl -a I want to materialize the inferred
>>> triples using shacl-rules.
>>> It is however not clear to me in what result the triples are collected.
>>> Any hint is appreciated.
>>>
>>> kind regards, Richard
>>>
>>> --
>>> http://github.com/RDFLib
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "rdflib-dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/rdflib-dev/6cf11681-7896-472c-8237-7a951548e6d0n%40googlegroups.com
>>>
>>> <https://groups.google.com/d/msgid/rdflib-dev/6cf11681-7896-472c-8237-7a951548e6d0n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
--
http://github.com/RDFLib
---
You received this message because you are subscribed to the Google Groups
"rdflib-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rdflib-dev/fba02899-1648-492c-941d-ebf9f644ef21n%40googlegroups.com.