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 <javedbtk...@gmail.com> 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. <
buehm...@informatik.uni-leipzig.de> 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 <
dave.e.reyno...@gmail.com>
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




Reply via email to