I don't understand why people think that "^" is the conjunction of rule atoms? The documentation [1] says "," has to be used as functor in Jena. Note, that this is just implementation dependent and other frameworks might use a different symbol.
One question from my side: Somebody else was asking the same quite recently [2]. Is it some exercise of a computer science lecture at your university? If so, people should try to work together and share there experience and knowledge. At least that's how we did it during studies. [1] https://jena.apache.org/documentation/inference/#rules [2] http://jena.markmail.org/search/#query:+page:1+mid:azf7ksmpxnhlzdrp+state:results Lorenz > Hello Lorenz, Dave, I have used the above method and suddenly I get this > exception: > > WARN [AWT-EventQueue-0] (Rule.java:947) - Rule references unimplemented > functor: ^ > > Where it comes from? > > On Sun, Nov 27, 2016 at 2:59 PM, Lorenz B. < > [email protected]> wrote: > >> >>> Hi Dave, >>> >>> So in that case we dont need to add non-inference model to the generic >>> reasoner because after all, our whole data is in the model. >> Yes, it is simply nested: >> Raw model A is "contained" in the inferred RDFS model B. >> B is "contained" in your user-defined rule model C. >> Thus, A is "contained" in C. >>> >>> On Sat, Nov 26, 2016 at 11:55 AM, Dave Reynolds < >> [email protected]> >>> wrote: >>> >>>> On 25/11/16 13:54, tina sani wrote: >>>> >>>>> I have something like this after my Jena forward chain rules and SPARQL >>>>> query: >>>>> >>>>> Reasoner reasoner1 = new GenericRuleReasoner(Rule.parseRules(rule)); >>>>> InfModel inf = ModelFactory.createInfModel(reasoner1, model); >>>>> >>>>> Reasoner reasoner2 = ReasonerRegistry.getRDFSReasoner(); >>>>> >>>>> InfModel inf2 = ModelFactory.createRDFSModel(model); >>>>> >>>> If you want your rules to see the results of the RDFS closure then you >>>> need something more like: >>>> >>>> InfModel inf = ModelFactory.createRDFSModel(model); >>>> Reasoner reasoner1 = new GenericRuleReasoner(Rule. >> parseRules(rule)); >>>> InfModel inf2 = ModelFactory.createInfModel(reasoner1, inf); >>>> >>>> Dave >>>> >>>> >>>> On Fri, Nov 25, 2016 at 4:46 PM, tina sani <[email protected]> >> wrote: >>>>> So all I should so is to create rdfs model: >>>>>> InfModel inf2 = ModelFactory.createRDFSModel(); >>>>>> >>>>>> What would be the arguments of the ModelFactory.createRDFSModel(). I >>>>>> have two models here, one the simple non inference model and other the >>>>>> inference model : InfModel inf = ModelFactory.createInfModel( >> reasoner, >>>>>> model); >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Fri, Nov 25, 2016 at 3:59 PM, Lorenz B. <[email protected] >>>>>> leipzig.de> wrote: >>>>>> >>>>>> >>>>>>> Yes I use GenericRuleReasoner, so using the following rules along >> with >>>>>>> my >>>>>>> >>>>>>>> own rules will solve the problem? >>>>>>>> >>>>>>>> ?x rdfs:subClassOf emp:ContractEmployee--> ?x rdfs:subClassOf >>>>>>>> >>>>>>> emp:Employee >>>>>>> >>>>>>>> ?x rdfs:subClassOf emp:PermanantEmployee--> ?x rdfs:subClassOf >>>>>>>> >>>>>>> emp:Employee >>>>>>> That might be incomplete as rdfs:subClassOf is transitive. Simply use >>>>>>> the RDFS reasoning. >>>>>>> >>>>>>>> On Thu, Nov 24, 2016 at 11:39 AM, Lorenz B. < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>> If I pass OntModelSpec.OWL_MEM_MICRO_RULE_INF” to the OntModel, >> will >>>>>>>>> it do >>>>>>>>> >>>>>>>>>> the RDFS reasoning? >>>>>>>>>> >>>>>>>>> See [1] in general and in particular [2] which shows how to setup >> an >>>>>>>>> RDFS reasoner >>>>>>>>> >>>>>>>>> InfModel inf = ModelFactory.createRDFSModel(rdfsExample); >>>>>>>>> >>>>>>>>> or >>>>>>>>> >>>>>>>>> Reasoner reasoner = ReasonerRegistry.getRDFSReasoner(); >>>>>>>>> InfModel inf = ModelFactory.createInfModel(reasoner, rdfsExample); >>>>>>>>> >>>>>>>>> [1] https://jena.apache.org/documentation/inference/ [2] >>>>>>>>> https://jena.apache.org/documentation/inference/#generalExamples >>>>>>>>> >>>>>>>>>> b) adding the particular rules to your set of rules >>>>>>>>>> I have already created the rules, mentioned in my first email. >> You >>>>>>>>> means >>>>>>>> rules other than that? >>>>>>>>> I don't know how you setup your rules, but if you use the >>>>>>>>> GenericRuleReasoner it does only apply your rules and you would >> have >>>>>>>>> to >>>>>>>>> add the rules that do the rdfs:subClass/rdf:type inference. >>>>>>>>> >>>>>>>>>> On Wed, Nov 23, 2016 at 11:50 AM, Lorenz B. < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>> Dave meant that you need an additional layer of reasoning like >> RDFS >>>>>>>>>> or >>>>>>>> even less to get the inferences that you describe. >>>>>>>>>>> This can be done by >>>>>>>>>>> >>>>>>>>>>> a) nesting two InfModels one that works on your specific rules >> and >>>>>>>>>> one >>>>>>>> that uses some kind of RDFS or >>>>>>>>>>> b) adding the particular rules to your set of rules >>>>>>>>>>> >>>>>>>>>>> Ok sorry Dave, actually I did not completely understand your >> answer. >>>>>>>>>>>> "You could have an inference model with the appropriate >>>>>>>>>>>> >>>>>>>>>>> configuration >>>>>>>> to >>>>>>>>>> deduce membership of employee" >>>>>>>>>>>> Yes I have the inference model: >>>>>>>>>>>> Reasoner reasoner = new GenericRuleReasoner(Rule.parse >>>>>>>>>>>> >>>>>>>>>>> Rules(rule)); >>>>>>>> InfModel infer = ModelFactory.createInfModel(reasoner, >>>>>>>>>>> model); >>>>>>>>>>>> Query query = QueryFactory.create(queryString); >>>>>>>>>>>> >>>>>>>>>>>> QueryExecution qe = QueryExecutionFactory.create(query, >>>>>>>>>>>> >>>>>>>>>>> infer); >>>>>>>>>>>> What additionally I have to do apart from my Jena rule (Forward >>>>>>>>>>>> >>>>>>>>>>> Chain) >>>>>>>> mentioned in previous email and the inference model. >>>>>>>>>>>> And of course, I will have a SPARQL query : >>>>>>>>>>>> Select * >>>>>>>>>>>> where{ ?x rdf:type emp:QualifiedEmployee } >>>>>>>>>>>> >>>>>>>>>>>> On Tue, Nov 22, 2016 at 6:03 PM, Dave Reynolds < >>>>>>>>>>>> >>>>>>>>>>> [email protected]> >>>>>>>>>>> >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> On 22/11/16 14:56, tina sani wrote: >>>>>>>>>>>>> Let me explain a bit. >>>>>>>>>>>>>> String rule = "[rule1:(?x http://www.w3.org/1999/02/22- >>>>>>>>>>>>>> >>>>>>>>>>>>> rdf-syntax-ns#type >>>>>>>>>>>> http://www.semanticweb.org#Employee) " >>>>>>>>>>>>>> + "( ?x http://www.semanticweb.org#Salary >>>>>>>>>>>>>> >>>>>>>>>>>>> ?salary >>>>>>>> )" >>>>>>>>>> + "greaterThan(?salary, 10,00) " >>>>>>>>>>>>>> + " -> (?x http://www.w3.org/1999/02/22-r >>>>>>>>>>>>>> df-syntax-ns#type >>>>>>>>>>>>>> http://www.semanticweb.org#QualifiedEmployee. )]" >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Classes in my ontology are >>>>>>>>>>>>>> >>>>>>>>>>>>>> Employee (Super class of all employees) >>>>>>>>>>>>>> * ContractEmployee* (Subclass of Employee) >>>>>>>>>>>>>> FinanceManager >>>>>>>>>>>>>> ITManager (Subclasses of >> ContractEmployee) >>>>>>>>>>>>>> * PermanantEmployee *(Subclass of Employee) >>>>>>>>>>>>>> Analyst >>>>>>>>>>>>>> Programmer >>>>>>>>>>>>>> >>>>>>>>>>>>>> In this case, will I use ?x rdf:type Employee or ?x rdf:type >>>>>>>>>>>>>> ContractEmployee >>>>>>>>>>>>>> All the instances are either from subclasses * >> FinanceManager , >>>>>>>>>>>>> ITManager >>>>>>>>>>>> or Analyst, Programmer* >>>>>>>>>>>>>> *Is it must that if I use ?x rdf:type Employee, then >>>>>>>>>>>>>> >>>>>>>>>>>>> FinanceManager & >>>>>>>> ITManager should also be sub classes of general super class >>>>>>>>>>>>> "Employee" >>>>>>>>>> ?* >>>>>>>>>>>> I don't think any of these details change my earlier answer, >> quoted >>>>>>>>>>>> below. >>>>>>>>>>>> Dave >>>>>>>>>>>>> On Tue, Nov 22, 2016 at 5:30 PM, Dave Reynolds < >>>>>>>>>>>>> >>>>>>>>>>>> [email protected]> >>>>>>>>>>>> wrote: >>>>>>>>>>>>>> On 22/11/16 10:12, tina sani wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Inline image 1 >>>>>>>>>>>>>>> The mail list doesn't support attachments so the image didn't >>>>>>>>>>>>>>> >>>>>>>>>>>>>> come >>>>>>>> through. >>>>>>>>>>>>>>> However, I'm guessing it included a class Employee with >>>>>>>>>>>>>>> >>>>>>>>>>>>>> sub-classes >>>>>>>> ContractEmployee and PermanantEmployee. >>>>>>>>>>>>>>> I have this ontology: Now if I want to use some rules like >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> if x rdf:type Employee and ?x salary>Euro10,000. then ?x >>>>>>>>>>>>>>>> QualifiedEmployee. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> My question here is should I use ?x rdf:type Employee or ?x >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> rdf:type >>>>>>>>>> ContractEmployee or PermanantEmployee >>>>>>>>>>>>>>>> Depends on your set up. >>>>>>>>>>>>>>> You could have an inference model with the appropriate >>>>>>>>>>>>>>> >>>>>>>>>>>>>> configuration >>>>>>>> to >>>>>>>>>>>> deduce membership of employee and then query that with SPARQL or >>>>>>>>>>>>>> with >>>>>>>>>> a >>>>>>>>>>>> second inference model with your own rules in. >>>>>>>>>>>>>>> If you want just one layer of rules and want to combine >> OWL/RDFS >>>>>>>>>>>>>> with >>>>>>>>>> your >>>>>>>>>>>>>>> custom rules then that's possible (so long as you set all the >>>>>>>>>>>>>>> >>>>>>>>>>>>>> appropriate >>>>>>>>>>>> flags, see documentation) but make sure that your own rules are >>>>>>>>>>>>>> backward >>>>>>>>>>>> not forward rules. [The default Jena rule sets for RDFS and OWL >>>>>>>>>>>>>> are >>>>>>>> hybrid >>>>>>>>>>>>>>> rules so some of the inferences are only available to >> backward >>>>>>>>>>>>>> rules >>>>>>>> in >>>>>>>>>>>> the >>>>>>>>>>>>>>> same rule set.] >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Or if you don't want the cost of full inference then you can >>>>>>>>>>>>>>> >>>>>>>>>>>>>> indeed >>>>>>>> rewrite the "natural" query to explicitly check for the base >>>>>>>>>>>>>> memberships. >>>>>>>>>>>> Dave >>>>>>>>>>>>>>> -- >>>>>>>>>>> Lorenz Bühmann >>>>>>>>>>> AKSW group, University of Leipzig >>>>>>>>>>> Group: http://aksw.org - semantic web research center >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>> Lorenz Bühmann >>>>>>>>> AKSW group, University of Leipzig >>>>>>>>> Group: http://aksw.org - semantic web research center >>>>>>>>> >>>>>>>>> -- >>>>>>> Lorenz Bühmann >>>>>>> AKSW group, University of Leipzig >>>>>>> Group: http://aksw.org - semantic web research center >>>>>>> >>>>>>> >>>>>>> >> -- >> Lorenz Bühmann >> AKSW group, University of Leipzig >> Group: http://aksw.org - semantic web research center >> >> -- Lorenz Bühmann AKSW group, University of Leipzig Group: http://aksw.org - semantic web research center
