> 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

Reply via email to