I created an Ontology model in Java using the Apache Jena library, and I entered pizza ontology.
I am trying to make a sparql query but the table print is blank, although normaly there are answers to my query.
Am I doing something wrong…?
Here is the code:
OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF);
String inputFileName="pizza.owl";
InputStream in = FileManager.get().open( inputFileName );
if (in == null) {
throw new IllegalArgumentException(
"File: " + inputFileName + " not found");
}
model.read(in, null);
String queryString =
"prefix pizza: <www.co-ode.org/ontologies/pizza/pizza.owl#Pizza> "+
"prefix rdfs: <" + RDFS.getURI() + "> " +
"prefix owl: <" + OWL.getURI() + "> " +
"select ?pizza where {?pizza a owl:Class ; " +
"rdfs:subClassOf ?restriction. " +
"?restriction owl:onProperty pizza:hasTopping ;" +
"owl:someValuesFrom pizza:PeperoniSausageTopping" +
"}";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, model);
com.hp.hpl.jena.query.ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
qe.close();
Your prefix declaration is wrong. You have accidentally included the name of the
Pizzaclass, and also left off thehttpprotocol prefix. Corrected, it should be:The way prefixes work in RDF and SPARQL is that you replace the
prefix:with whatever the prefix is defined to be, and the resulting string must exactly match the URI of the resource you are trying to match. It must be an exact match – even differences in the case of letters is significant.By the way, you can also simplify loading the ontology via the
FileManager: