package model; import com.hp.hpl.jena.graph.Node; import com.hp.hpl.jena.graph.Triple; import com.hp.hpl.jena.ontology.ProfileRegistry; import com.hp.hpl.jena.query.*; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.sparql.core.TriplePath; import com.hp.hpl.jena.sparql.expr.Expr; import com.hp.hpl.jena.sparql.syntax.*; import com.hp.hpl.jena.vocabulary.VCARD; import esl.system.SysLoggerUtils; import org.apache.log4j.Logger; import org.junit.Test; public class ModelPatternMatcher { static { SysLoggerUtils.initLogger(); } @Test public void main() { Model model = ModelFactory.createOntologyModel(ProfileRegistry.OWL_LANG); String personURI = "http://somewhere/arjun-satish-uri"; String givenName = "Arjun"; String familyName = "Satish"; String fullName = givenName + " " + familyName; model.createResource(personURI).addProperty(VCARD.FN, fullName) .addProperty(VCARD.N, model.createResource() .addProperty(VCARD.Given, givenName) .addProperty(VCARD.Family, familyName)); personURI = "http://somewhere/john-smith-uri"; givenName = "John"; familyName = "Smith"; fullName = givenName + " " + familyName; model.createResource(personURI).addProperty(VCARD.FN, fullName) .addProperty(VCARD.N, model.createResource() .addProperty(VCARD.Given, givenName) .addProperty(VCARD.Family, familyName)); personURI = "http://somewhere/adarsh-satish-uri"; givenName = "Adarsh"; familyName = "Satish"; fullName = givenName + " " + familyName; model.createResource(personURI).addProperty(VCARD.FN, fullName) .addProperty(VCARD.N, model.createResource() .addProperty(VCARD.Given, givenName) .addProperty(VCARD.Family, familyName)); StmtIterator iter = model.listStatements(); // while(iter.hasNext()) { // Statement statement = iter.nextStatement(); // Resource subject = statement.getSubject(); // Property predicate = statement.getPredicate(); // RDFNode object = statement.getObject(); // // System.out.print(subject.toString() + " "); // System.out.print(predicate.toString() + " "); // if (object instanceof Resource) { // System.out.print(object.toString()); // } else // System.out.print(" \"" + object.toString() + "\""); // // System.out.println(" ."); // } // model.write(System.out); String queryString = "SELECT ?x ?givenName ?name" + " WHERE { " + "?x <http://www.w3.org/2001/vcard-rdf/3.0#FN> ?fullname . " + "?x <http://www.w3.org/2001/vcard-rdf/3.0#N> ?name . " + "?name <http://www.w3.org/2001/vcard-rdf/3.0#Given> ?givenName . " + //"?name <http://www.w3.org/2001/vcard-rdf/3.0#Family> \"Satish\" . " + //" FILTER (?givenName != \"Arjun\" && ?givenName != \"Nujre\") } "; " FILTER (?x=<http://somewhere/arjun-satish-uri>) }"; // URI Filtering // " FILTER (?givenName != \"Arjun\" && ?givenName != \"Nujre\") } "; //" MINUS { (?y <http://www.w3.org/2001/vcard-rdf/3.0#Given> \"Arjun\") UNION " + //" (?y <http://www.w3.org/2001/vcard-rdf/3.0#Given> \"Nujre\") } }"; Query query = QueryFactory.create(queryString); query.getQueryPattern().visit(new EV()); QueryExecution queryExecutor = QueryExecutionFactory.create(query, model); ResultSet results = queryExecutor.execSelect(); ResultSetFormatter.out(System.out, results, query); queryExecutor.close(); } public class EV implements ElementVisitor { Logger logger = Logger.getLogger(EV.class); @Override public void visit(ElementTriplesBlock el) { logger.info("Visit: ElementTriplesBlock"); for (Triple statement: el.getPattern()) { Node subject = statement.getSubject(); Node predicate = statement.getPredicate(); Node object = statement.getObject(); System.out.print(subject.toString() + " "); System.out.print(predicate.toString() + " "); System.out.print(object.toString() + "\n"); } } @Override public void visit(ElementPathBlock el) { logger.info("Visit: ElementPathBlock"); for (TriplePath tp: el.getPattern().getList()) { logger.info("Visit Element Path Block: " + tp.toString()); } } @Override public void visit(ElementFilter elementFilter) { logger.info("Visit: ElementFilter"); Expr expr = elementFilter.getExpr(); expr.getVarName(); } @Override public void visit(ElementAssign el) { logger.info("Visit: ElementAssign"); } @Override public void visit(ElementBind elementBind) { logger.info("Visit: ElementBind"); } @Override public void visit(ElementUnion el) { logger.info("Visit: ElementUnion"); } @Override public void visit(ElementOptional el) { logger.info("Visit: ElementOptional"); } @Override public void visit(ElementGroup el) { logger.info("Visit: ElementGroup"); for (Element m: el.getElements()) { m.visit(this); } } @Override public void visit(ElementDataset el) { logger.info("Visit: ElementDataset"); } @Override public void visit(ElementNamedGraph el) { logger.info("Visit: ElementNamedGraph"); } @Override public void visit(ElementExists elementExists) { logger.info("Visit: ElementExists"); } @Override public void visit(ElementNotExists elementNotExists) { logger.info("Visit: ElementNotExists"); } @Override public void visit(ElementMinus elementMinus) { logger.info("Visit: ElementMinus"); } @Override public void visit(ElementService el) { logger.info("Visit: ElementService"); } @Override public void visit(ElementFetch el) { logger.info("Visit: ElementFetch"); } @Override public void visit(ElementSubQuery el) { logger.info("Visit: ElementSubQuery"); } } }