Hi everyone, thanks for your answers. @Lorenz Buehmann: I am currently only using SELECT SPARQL queries and no CONSTRUCT SPARQL queries. Also, I think the strategy for first executing the SPARQL query and use the output as input to the reasoner is not going to work if the SELECT SPARQL query selects inferred triples. However, the strategy where the SPARQL query is reduced in steps until it gives results and use these results as the starting point for a reasoner might be a valid strategy.
@ Martynas Jusevičius: I'm not directly interested in extending Apache Jena's rule engine to include SPARQL queries in the rules, but it is interesting from the perspective on how to extend Jena's rule engine. Maybe an example helps explaining my use case. If I have the following (not that useful) data.ttl file: @prefix tno: <http://tno.nl/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . tno:A rdf:type tno:Country . tno:A tno:hasProduction tno:B . tno:B rdf:type tno:Production . tno:B tno:productionOfCountry tno:A . tno:C rdf:type tno:Country . tno:C tno:hasProduction tno:D . tno:D rdf:type tno:Production . tno:D tno:productionOfCountry tno:C . And a file et.rules with the following rule: @prefix tno: <http://tno.nl/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . [test: (?a rdf:type tno:Country) (?a tno:hasProduction ?b) -> (?a rdf:type tno:ProducingCountry) ] And I execute the following SPARQL Query: SELECT ?object WHERE { tno:A a tno:ProducingCountry . tno:A tno:hasProduction ?object . } The GenericRuleReasoner first applies the rule above twice and derives two new triples: tno:A a tno:ProducingCountry tno:C a tno:ProducingCountry And then executes the SPARQL Query above on the data.ttl data together with the two new triples above and gives the following result: tno:B Now what I would like the GenericRuleReasoner to do, is the following. After I execute the SPARQL Query above, the reasoner would 'see' that the SPARQL query is only interested in the subject tno:A and not in subject tno:C. So, instead of applying the rule twice to both tno:A and tno:C, it would only apply it to tno:A. Then there would only be a single inferred triple: tno:A a tno:ProducingCountry And the query result would again be: tno:B I hope this helps with understanding what I meant with my point 1 in my initial email. Any pointers on how to achieve this? Regards, Barry -----Original Message----- From: Lorenz Buehmann [mailto:[email protected]] Sent: dinsdag 16 januari 2018 13:29 To: [email protected] Subject: Re: GenericRuleReasoner with limited scope Source code [1] Jena version: 2.12.1-SNAPSHOT [1] https://github.com/mbentoalves/jena/tree/trunk/jena-core On 16.01.2018 12:56, Martynas Jusevičius wrote: > There is also something like this: > https://www.researchgate.net/publication/307934931_SPARQL_Commands_in_ > Jena_Rules > > On Tue, Jan 16, 2018 at 12:21 PM, Lorenz Buehmann < > [email protected]> wrote: > >>> I would like the GenericRuleReasoner to take the SPARQL query into >> account when reasoning. So, only reason about those facts that 'seem' >> relevant for answering the SPARQL query. >> Wouldn't the logical way here to execute the SPARQL query (it has to >> be a CONSTRUCT query indeed) and use the model returned here as the >> input of the reasoner? >> >> >> On 16.01.2018 10:55, Nouwt, B. (Barry) wrote: >>> Hi everyone, >>> >>> Currently I'm using the GenericRuleReasoner of Apache Jena in my >>> project >> to apply custom rules to my RDF data. This works as expected: as soon >> as I execute the first SPARQL query in Apache Jena Fuseki, the >> GenericRuleReasoner correctly determines all the derived triples and >> the query can be answered. >>> Now I am looking for the following GenericRuleReasoner (or another >> reasoner) behavior: >>> 1. I would like the GenericRuleReasoner to take the SPARQL query >>> into >> account when reasoning. So, only reason about those facts that 'seem' >> relevant for answering the SPARQL query. >>> 2. I would like the GenericRuleReasoner to remove the derived >>> triples >> after the SPARQL query has been answered. So, the next time it >> receives the same SPARQL query, it will not be able to reuse the >> previous reasoning result. >>> Note: >>> >>> * I am willing to accept some incomplete answers to get the >> functionality described in 1. >>> * In literature I found the term 'query answering' as one of the >> things a reasoner can do, which looks like the behavior I describe in >> point >> 1 above. It is also mentioned here: http://ontogenesis. >> knowledgeblog.org/1486 >>> Does anyone know whether the behavior described above is possible >>> (does >> Apache Jena allow the reasoner to use the SPARQL query as input at >> all) and whether there are rule engine implementations for Jena >> available that implement such behavior? Is it possible to configure >> Jena in such a way that it restarts the reasoner for every query it receives? >>> Any other pointers that help me understand this reasoner related >>> subject >> are welcome as well. >>> Regards, >>> >>> Barry >>> This message may contain information that is not intended for you. >>> If >> you are not the addressee or if this message was sent to you by >> mistake, you are requested to inform the sender and delete the >> message. TNO accepts no liability for the content of this e-mail, for >> the manner in which you use it and for damage of any kind resulting >> from the risks inherent to the electronic transmission of messages. >>
