Please provide a minimal running example that does not work 1) minimal data - in Turtle format 2) the rule that you use 3) the code that performs the rule loading + querying
> Sorry but still not working. > > When I query instances of Expert, it shows "Tim" which is fine. When I > query instance of Student, it shows "Khan", which is also fine. > Even when I query both in one, it shows "Khan" which is also ok because > Khan is also Expert and Student, but when I try to assign it(Khan) to > another class, it does not work. > > I am afraid if Jena generic rules does not work on classes and only it > supports properties like transitive property and inverse property. > > On Wed, Jul 27, 2016 at 1:39 AM, javed khan <[email protected]> wrote: > >> <http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type> >> >> are wrong. Either use the correct URI: >> >> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> >> >> or use the prefix form: >> >> rdf:type >> >> >> I am sorry due to too many threads, I did not read this reply. >> >> Thanks Dave, let me try. >> >> On Wed, Jul 27, 2016 at 1:35 AM, Dave Reynolds <[email protected]> >> wrote: >> >>> See my earlier reply, you had an error in the URLs in your rules. >>> >>> Dave >>> >>> >>> On 27/07/16 09:33, javed khan wrote: >>> >>>> If my email (code) is not understandable, I am just explaining in plain >>>> text. >>>> >>>> I have class Expert which have some researches i-e "Tim hasResearch >>>> Ontologies". I have another class Student (subclasses Master Phd). Khan >>>> is >>>> instance of Phd class (ultimately of Student class also). Phd student can >>>> also have some researches as Expert class and have type both : Student >>>> and >>>> Expert in Protege. >>>> >>>> I want instances which are both in Student and Expert i-e Khan in this >>>> case. >>>> >>>> If ?x rdf:type std:Expert and ?x rdf:type std:Student -> ?x rdf:type >>>> std:StudentExpert (a new class in the ontology). >>>> >>>> my query is : select * where { ?x rdf:type std:StudentExpert} >>>> >>>> On Wed, Jul 27, 2016 at 1:20 AM, javed khan <[email protected]> >>>> wrote: >>>> >>>> I am sorry that is just the mistake when I copy code from my IDE to >>>>> email. >>>>> In the original code, its written just once. >>>>> >>>>> On Wed, Jul 27, 2016 at 1:11 AM, Lorenz B. < >>>>> [email protected]> wrote: >>>>> >>>>> I'm not an expert, but why do you have each URI twice in the rule? >>>>>> I have rule body:I want instance x which are in both classes to assign >>>>>> to >>>>>> >>>>>>> another class "StudentExpert" which have no other instances. But does >>>>>>> >>>>>> not >>>>>> >>>>>>> work. >>>>>>> (My Owl inverse property and transitive property rule works but this >>>>>>> generic rule does not work) >>>>>>> >>>>>>> String rule = "*[rule1:(?x >>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type >>>>>>> <http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type> >>>>>>> http://www.semanticweb.org/141#Student >>>>>>> <http://www.semanticweb.org/141#Student>) " +* >>>>>>> * "(?x >>>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type >>>>>>> <http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type> >>>>>>> http://www.semanticweb.org/141#Expert >>>>>>> <http://www.semanticweb.org/141#Expert> )" + * >>>>>>> >>>>>>> "->(?x http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type >>>>>>> http://www.semanticweb.org/141#StudentExpert )]"; >>>>>>> >>>>>>> After prefixes, my query is: >>>>>>> >>>>>>> "Select * " + "where { ?x rdf:type std:StudentExpert. }"; >>>>>>> >>>>>>> My Reasoner and InfModel classes are: >>>>>>> >>>>>>> Reasoner reasoner2 = new GenericRuleReasoner(Rule.parseRules(rule)); >>>>>>> >>>>>>> InfModel inf = ModelFactory.createInfModel(reasoner2, model); >>>>>>> >>>>>>> Then query is executed as usual in jena. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, Jul 25, 2016 at 2:38 PM, Dave Reynolds < >>>>>>> >>>>>> [email protected]> >>>>>> >>>>>>> wrote: >>>>>>> >>>>>>> On 25/07/16 19:33, javed khan wrote: >>>>>>>> I have a Student class (Phd students) and Teacher class, having >>>>>>>> instances. >>>>>>> There are some students which are also Teacher (teaching to junior >>>>>>>>> classes). >>>>>>>>> ?x rdf:type ont:Student ?y rdf:type ont:Teacher --> ? >>>>>>>>> This will give us Students and teachers instances. >>>>>>>>> >>>>>>>>> I want Jena generic rule(Forward chaining) which filters those who >>>>>>>>> are >>>>>>>>> both >>>>>>>>> Teachers and Students. Is there any way to do so? >>>>>>>>> >>>>>>>>> Yes. You are nearly there but you want the rule body to be more >>>>>>>> like: >>>>>>>> >>>>>>>> (?x rdf:type ont:Student) (?x rdf:type ont:Teacher) -> ... >>>>>>>> >>>>>>>> the rule consequent could assert a new type or some other property to >>>>>>>> indicate that ?x is in both classes. >>>>>>>> >>>>>>>> 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
