package esl.cuenet.source.accessors; import com.hp.hpl.jena.ontology.DatatypeProperty; import com.hp.hpl.jena.ontology.Individual; import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Statement; import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.vocabulary.RDF; import com.mongodb.BasicDBList; import com.mongodb.util.JSON; import esl.cuenet.algorithms.BaseAlgorithm; import esl.cuenet.mapper.parser.ParseException; import esl.cuenet.mapper.tree.SourceParseException; import esl.cuenet.query.IResultSet; import esl.cuenet.source.*; import esl.datastructures.graph.relationgraph.IRelationGraph; import esl.datastructures.graph.relationgraph.RelationGraphNode; import org.apache.log4j.Logger; import org.junit.Test; import test.TestBase; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class FacebookRelationAccessorTest extends TestBase { Logger logger = Logger.getLogger(FacebookRelationAccessorTest.class); public FacebookRelationAccessorTest() { super(); } @Test public void doTest() throws SourceQueryException, ParseException, IOException { QueryRelationsTest qrt = new QueryRelationsTest(); FacebookRelationAccessor accessor = new FacebookRelationAccessor(qrt.getModel()); accessor.start(); IResultSet rs = accessor.executeQuery(717562539); //BasicDBList k = (BasicDBList) JSON.parse(rs.printResults()); //logger.info("717562539 has " + k.size() + " relationships"); rs = accessor.executeQuery(111290); logger.info(rs.printResults()); rs = accessor.executeQuery(570206500); logger.info(rs.printResults()); } //@Test public void sourceQueryTest() throws IOException, ParseException { QueryRelationsTest qrt = new QueryRelationsTest(); qrt.query(); } public class QueryRelationsTest extends BaseAlgorithm { public QueryRelationsTest() throws IOException, ParseException { super(); } private void tQuery() throws SourceQueryException, AccesorInitializationException { ISource source = sourceMapper.get("fb-relation"); IRelationGraph relationGraph = source.getRelationGraph(); IMapper mapper = source.getMapper(); OntClass personClass = model.getOntClass("http://www.semanticweb.org/arjun/cuenet-main.owl#person"); DatatypeProperty nameProperty = model.getDatatypeProperty("http://www.semanticweb.org/arjun/cuenet-main.owl#name"); Individual person = personClass.createIndividual( "http://www.semanticweb.org/arjun/cuenet-main.owl#person-fb_717562539"); person.addLiteral(nameProperty, "Arjun Satish"); Statement s = person.getProperty(RDF.type); String personType = removeNamespace(s.getObject().toString()); List<RelationGraphNode> queryNodes = relationGraph.getNodesOfType (personType); List<String> pathExpressions = new ArrayList<String>(); List<Literal> literals = new ArrayList<Literal>(); StmtIterator si; String pathExpr; for (RelationGraphNode queryNode: queryNodes) { si = person.listProperties(); while (si.hasNext()) { Statement st = si.next(); if ( !st.getPredicate().getURI().contains("cuenet") ) continue; if (st.getObject().isLiteral()) { String p = removeNamespace(st.getPredicate().getURI()); pathExpr = queryNode.name() + "." + p; if (!mapper.containsPattern(pathExpr)) continue; Adornment a = mapper.getAdornment(pathExpr); if (a != null && a.type() == Adornment.AdornmentType.Unspecifiable) continue; logger.info("Query Params: " + pathExpr + ", " + st.getObject().asLiteral()); pathExpressions.add(pathExpr); literals.add(st.getObject().asLiteral()); } } } /* set the query attributes */ IResultSet resultsSet = source.query(pathExpressions, literals); logger.info(resultsSet.printResults()); } private String removeNamespace(String uri) { int ix = uri.indexOf("#"); return uri.substring(ix+1); } public void query() { try { tQuery(); } catch (SourceQueryException e) { e.printStackTrace(); } catch (AccesorInitializationException e) { e.printStackTrace(); } } } }