I have class *Expert*, *Research* and *Student*. Student has Master and Phd
subclasses. Expert hasResearch Research, like BernersLee hasResearch
Ontologies. Phd Student also have Research like: Khan hasResearch
Ontologies.

I added a class *StudentExpert* which have no instance but can be created
with Jena rules.

In Protege, when I give: . SELECT *

                WHERE { ?sub std:hasResearch ?x  }  it gives me research of
both Phd and Expert.

I give then: . SELECT *

                WHERE { ?sub std:hasResearch ?x  . ?sub rdf:type std:Phd }

And it filters research for Phd class only.

In Jena, after read the file, I gives the rules as:

String rule = "[rule1:(?x http://www.semanticweb.org/141#hasResearch ?y) " +

                      "(?x
http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type
http://www.semanticweb.org/141#Phd)" +



         "->(?x  http://www.w3.org/1999/02/22-rdf-syntax-ns#rdf:type
http://www.semanticweb.org/141#StudentExpert)]";

And query like this:

String str= "Prefix  std:<http://www.semanticweb.org/ 141#> " +

        "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"+ "PREFIX
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n"+

        "Select *" + "where {   ?x rdf:type std:StudentExpert  }";



I expect it will answer me: instance Khan to be StudentExpert instance but
it gives me exception:

Exception in thread "main" com.hp.hpl.jena.query.QueryParseException:
Encountered " <PNAME_NS> "http: "" at line 2, column 13.

Was expecting:

    <IRIref> ...



                at
com.hp.hpl.jena.sparql.lang.ParserSPARQL11.perform(ParserSPARQL11.java:87)

                at
com.hp.hpl.jena.sparql.lang.ParserSPARQL11.parse(ParserSPARQL11.java:40)

                at
com.hp.hpl.jena.query.QueryFactory.parse(QueryFactory.java:132)

                at
com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:69)

                at
com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:40)

Reply via email to