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 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.parseRules(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 >
