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.

Reply via email to