> b. I think I actually tried the rule below and I didn’t get any > inference result. Don’t know if it’s my config, my rule or my data. I could > start a. by trying to provide a dataset and config file as well. Again, > anybody willing to hold my hand?
Works for me as expected: | Model m = ModelFactory.createDefaultModel();|| || String s = "@prefix ns: <http://test.org/> .\n" +|| || "@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n" +|| || "<s> ns:hasDeadline \"2002-05-30T09:00:00\"^^xsd:dateTime .";|||| || m.read(new StringReader(s), null, "Turtle");|| || || String rule =|| || " [ruleMissedDeadline2: (?conference <http://test.org/hasDeadline> ?date) now(?now) greaterThan(?now, ?date) " +|| || "-> (?conference <http://test.org/status> <http://test.org/DeadlinePassed>)]";|| || || List rules = Rule.parseRules(rule);|| || Reasoner reasoner = new GenericRuleReasoner(rules);|| || Model infModel = ModelFactory.createInfModel(reasoner, m);|| || infModel.write(System.out, "N-Triples");| > Give a shout. > > Thanks, > Pierre > > From: Lorenz B. [mailto:buehm...@informatik.uni-leipzig.de] > Sent: 17 May 2019 07:24 > To: users@jena.apache.org > Subject: Re: Documentation/tutorial on using dates in Jena rules with > GenericRuleReasoner > > Hi, > >> Hi Lorenz, >> >> Thank you for your answer. >> >> Quick follow up. >> >> I think the issue for me is the documentation of the built-ins is too >> abstract or relies on understanding the source code. So I suppose, >> documentation / tutorial seems somewhat superfluous when you can do that – >> only I can’t understand what’s there and the source at the moment. > I can see that it might be too abstract for people coming from different > areas, sure. But, the question is who is able to provide such a tutorial > and also who has the time. It's always a trade-off in Open Source > projects like Jena - I guess most of the devs or other project related > people here are not getting payed, and clearly such a tutorial for most > if not all of the built-ins definitely needs some effort. Ideally, the > community could take over those things, but looks like nobody ever wrote > blog posts or tutorials about the Jena rule system and its built-ins. >> >> >> 1. Yes, I seem to understand difference is a no go but I was wondering if >> there might be some work around coercing the dateTime to something else. I’m >> not sure I understood that very well but it looks like I can’t use functions >> in arguments of built-ins (so no xsd:year(?date) or whatever). > I don't think you can use functions or expressions from the SPARQL > engine resp. its XPath constructors. Both are totally different > implementations I guess - but again, I'm not a developer, so I can't > make a valid statement, except for looking into the code and the docs. > From my point of view, only the mentioned built-ins from the docs are > valid so far. >> >> >> But then, on greaterThan, something should be workable if I have >> xsd:dateTime, no? >> >> What’s wrong with : >> >> >> >> [ruleMissedDeadline2: >> >> (?conference ns:hasDeadline ?date) >> >> now(?now) >> >> greaterThan(?now, ?date) >> >> -> >> >> (?conference ns:status ns:DeadlinePassed) >> >> ] > Well I was clearly thinking too complicated, so yes, your rule should > work given that the docs say > >> lessThan(?x, ?y), greaterThan(?x, ?y) >> le(?x, ?y), ge(?x, ?y) >> >> Test if x is <, >, <= or >= y. Only passes if both x and y are numbers >> or time instants (can be integer or floating point or XSDDateTime). > I was more thinking about things like inferring the age of a person > isn't possible right now, but would clearly be some nice to have feature > such that you could have it as implicit fact in your KB without the need > to change the asserted data every year. > >> 2. When you say extend the rule system, you mean adding a class using as a >> starting point something is in ..rulesys.builtins and adapting it and then >> rebuild all the jars. I’m using Fuseki, so I’d have to rebuild that too, >> yeah? Aside from the fact I’m not coding in java, this isn’t the easiest >> path for me at the moment. > That's also something I can't answer properly. I mean, yes, you can > create custom built-ins and register those or maybe create an overriding > registry [1] ? But not sure, it looks like at least the overriding > registry would have to be used by the rule parser, so I don't know how > you would have to combine it with Fuseki. And in the end, yes, you have > to repackage Fuseki I think as long as you modify the existing > BuiltinRegistry. > > Maybe there is also some other kind of plugin system here, but that can > only be answered by Andy, Dave, Adam, etc. > > > [1] > https://issues.apache.org/jira/browse/JENA-1204<https://issues.apache.org/jira/browse/JENA-1204> > >> Many thanks, >> Pierre >> >> >> From: Lorenz B. [mailto:buehm...@informatik.uni-leipzig.de] >> Sent: 16 May 2019 08:33 >> To: users@jena.apache.org >> Subject: Re: Documentation/tutorial on using dates in Jena rules with >> GenericRuleReasoner >> >> I'm not aware of any tutorial, but afaik you can't do what you did here >> with SPARQL in Jena rules without writing custom built-ins or by >> extending the existing ones because: >> >> * the "difference" built-in does only work for numbers right now [1] >> >> * there is no support for duration type at all it looks like >> >> >> So, so far you could only compare datetime values via lessThan, le, >> greaterThan, ge but there is no other built-in with support for date >> values so far. Others might indeed correct me if I'm wrong of. >> >> >> It looks like, you have to extend the rule system by custom built-ins - >> it's not that difficult though [2] >> >> [1] >> https://github.com/apache/jena/blob/master/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/Difference.java#L68<https://github.com/apache/jena/blob/master/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/Difference.java#L68><https://github.com/apache/jena/blob/master/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/Difference.java#L68<https://github.com/apache/jena/blob/master/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/Difference.java#L68>> >> [2] >> https://jena.apache.org/documentation/inference/#builtins<https://jena.apache.org/documentation/inference/#builtins><https://jena.apache.org/documentation/inference/#builtins<https://jena.apache.org/documentation/inference/#builtins>> >> >>> Could people recommend a good reference/tutorial on how to use built-ins >>> (greaterThan, difference, now etc) with dates (e.g., datetime, duration and >>> so on) in rules for the GenericRuleReasoner? >>> >>> Example: >>> >>> Assume a KB of conferences with their deadlines as xsd:dateTime. >>> >>> Here are examples of SPARQL queries to find conferences whose deadlines are >>> passed: >>> >>> SELECT * WHERE { >>> ?subject here:hasDeadline ?date . >>> BIND((xsd:dateTime(?date) - now()) AS ?Span) >>> FILTER(?Span < "P0D"^^xsd:duration) >>> } >>> >>> SELECT * WHERE { >>> ?subject here:hasDeadline ?date . >>> FILTER(now() > xsd:dateTime(?date)) >>> } >>> >>> Suppose instead I wanted to infer some attribute of the conference, e.g: >>> >>> ?subject here:hasStatus here:DeadlinePassed >>> >>> I don't really get how to do that in a rule and I can't quite figure if I'm >>> misusing the built-ins or just mixing SPARQL and rule syntax (e.g., when >>> trying to coerce variables to datatypes). >>> >>> There's a bunch of recurring questions around that sort of rules but I >>> can't quite find any answer that's giving clear examples. >>> >>> Thus I would find it useful if anybody could point at a resource that goes >>> through some sort of how to do date comparison and use that in rules as the >>> Jena doc on built-in is not self-contained in that respect. >>> >>> https://jena.apache.org/documentation/inference/#rules<https://jena.apache.org/documentation/inference/#rules><https://jena.apache.org/documentation/inference/#rules<https://jena.apache.org/documentation/inference/#rules>> >>> >>> >>> With many thanks and kind regards, >>> Pierre >>> >> -- >> Lorenz Bühmann >> AKSW group, University of Leipzig >> Group: http://aksw.org<http://aksw.org><http://aksw.org<http://aksw.org>> - >> semantic web research center >> >> THIS E-MAIL MAY CONTAIN CONFIDENTIAL AND/OR PRIVILEGED INFORMATION. >> IF YOU ARE NOT THE INTENDED RECIPIENT (OR HAVE RECEIVED THIS E-MAIL >> IN ERROR) PLEASE NOTIFY THE SENDER IMMEDIATELY AND DESTROY THIS >> E-MAIL. ANY UNAUTHORISED COPYING, DISCLOSURE OR DISTRIBUTION OF THE >> MATERIAL IN THIS E-MAIL IS STRICTLY FORBIDDEN. >> >> IN ACCORDANCE WITH MIFID II RULES ON INDUCEMENTS, THE FIRM'S EMPLOYEES >> MAY ATTEND CORPORATE ACCESS EVENTS (DEFINED IN THE FCA HANDBOOK AS >> "THE SERVICE OF ARRANGING OR BRINGING ABOUT CONTACT BETWEEN AN INVESTMENT >> MANAGER AND AN ISSUER OR POTENTIAL ISSUER"). DURING SUCH MEETINGS, THE >> FIRM'S EMPLOYEES MAY ON NO ACCOUNT BE IN RECEIPT OF INSIDE INFORMATION >> (AS DESCRIBED IN ARTICLE 7 OF THE MARKET ABUSE REGULATION (EU) NO 596/2014). >> (https://www.handbook.fca.org.uk/handbook/glossary/G3532m.html<https://www.handbook.fca.org.uk/handbook/glossary/G3532m.html>) >> COMPANIES WHO DISCLOSE INSIDE INFORMATION ARE IN BREACH OF REGULATION >> AND MUST IMMEDIATELY AND CLEARLY NOTIFY ALL ATTENDEES. FOR INFORMATION >> ON THE FIRM'S POLICY IN RELATION TO ITS PARTICIPATION IN MARKET SOUNDINGS, >> PLEASE SEE >> https://www.horizon-asset.co.uk/market-soundings/<https://www.horizon-asset.co.uk/market-soundings/>. >> >> HORIZON ASSET LLP IS AUTHORISED AND REGULATED >> BY THE FINANCIAL CONDUCT AUTHORITY. >> >> > -- > Lorenz Bühmann > AKSW group, University of Leipzig > Group: http://aksw.org<http://aksw.org> - semantic web research center > > THIS E-MAIL MAY CONTAIN CONFIDENTIAL AND/OR PRIVILEGED INFORMATION. > IF YOU ARE NOT THE INTENDED RECIPIENT (OR HAVE RECEIVED THIS E-MAIL > IN ERROR) PLEASE NOTIFY THE SENDER IMMEDIATELY AND DESTROY THIS > E-MAIL. ANY UNAUTHORISED COPYING, DISCLOSURE OR DISTRIBUTION OF THE > MATERIAL IN THIS E-MAIL IS STRICTLY FORBIDDEN. > > IN ACCORDANCE WITH MIFID II RULES ON INDUCEMENTS, THE FIRM'S EMPLOYEES > MAY ATTEND CORPORATE ACCESS EVENTS (DEFINED IN THE FCA HANDBOOK AS > "THE SERVICE OF ARRANGING OR BRINGING ABOUT CONTACT BETWEEN AN INVESTMENT > MANAGER AND AN ISSUER OR POTENTIAL ISSUER"). DURING SUCH MEETINGS, THE > FIRM'S EMPLOYEES MAY ON NO ACCOUNT BE IN RECEIPT OF INSIDE INFORMATION > (AS DESCRIBED IN ARTICLE 7 OF THE MARKET ABUSE REGULATION (EU) NO 596/2014). > (https://www.handbook.fca.org.uk/handbook/glossary/G3532m.html) > COMPANIES WHO DISCLOSE INSIDE INFORMATION ARE IN BREACH OF REGULATION > AND MUST IMMEDIATELY AND CLEARLY NOTIFY ALL ATTENDEES. FOR INFORMATION > ON THE FIRM'S POLICY IN RELATION TO ITS PARTICIPATION IN MARKET SOUNDINGS, > PLEASE SEE https://www.horizon-asset.co.uk/market-soundings/. > > HORIZON ASSET LLP IS AUTHORISED AND REGULATED > BY THE FINANCIAL CONDUCT AUTHORITY. > > -- Lorenz Bühmann AKSW group, University of Leipzig Group: http://aksw.org - semantic web research center