/** * Query SPARQL endpoint with a SELECT query * * @param qExec QueryExecution encapsulating the query * @return model retrieved by querying the endpoint */ private Model getSelectModel(QueryExecution qExec) { Model model = ModelFactory.createDefaultModel(); Graph graph = model.getGraph(); ResultSet results = qExec.execSelect(); while (results.hasNext()) { QuerySolution sol = results.next(); String subject; String predicate; RDFNode object; try { subject = sol.getResource("s").toString(); predicate = sol.getResource("p").toString(); object = sol.get("o"); } catch (NoSuchElementException e) { logger.error("SELECT query does not return a (?s ?p ?o) Triple"); continue; } Node objNode; if (object.isLiteral()) { Literal obj = object.asLiteral(); objNode = NodeFactory.createLiteral(obj.getString(), obj.getDatatype()); } else { objNode = NodeFactory.createLiteral(object.toString()); } graph.add( new Triple(NodeFactory.createURI(subject), NodeFactory.createURI(predicate), objNode)); } return model; }
/** * A method to build a collection of collaborator objects representing a network based on an * organisation * * @param id the id of the central organisation * @param radius the number of edges required from the central contributor * @return the collection of collaborator objects */ @SuppressWarnings("rawtypes") public TreeMap<Integer, Collaborator> getRawCollaboratorData_org(String id, int radius) { // check the parameters if (InputUtils.isValidInt(id) == false) { throw new IllegalArgumentException("Error: the id parameter is required"); } if (InputUtils.isValidInt(radius, ExportServlet.MIN_DEGREES, ExportServlet.MAX_DEGREES) == false) { throw new IllegalArgumentException( "Error: the radius parameter must be between " + ExportServlet.MIN_DEGREES + " and " + ExportServlet.MAX_DEGREES); } // define helper variables // collection of collaborators java.util.TreeMap<Integer, Collaborator> cId_cObj_map = new java.util.TreeMap<Integer, Collaborator>(); // set of collaborators that we've already processed java.util.TreeSet<Integer> foundCollaboratorsSet = new java.util.TreeSet<Integer>(); // define other helper variables String contributor_id = null; QuerySolution row = null; Collaborator collaborator = null; String sql = "SELECT DISTINCT b.eventid " + "FROM events a, orgevlink b " + "WHERE b.organisationid = ? " // +id + "AND a.eventid = b.eventid"; int[] param = {Integer.parseInt(id)}; java.sql.ResultSet resultSet = db.exePreparedStatement(sql, param); ArrayList<String> eventResults = new ArrayList<String>(); try { // check to see that data was returned if (!resultSet.last()) { db.tidyup(); return null; } else resultSet.beforeFirst(); // loop through the resultset while (resultSet.next() == true) { eventResults.add(resultSet.getString(1)); } } catch (java.sql.SQLException ex) { System.out.println("Exception: " + ex.getMessage()); resultSet = null; } db.tidyup(); // helper int first = 0; // define the query String sparqlQuery1 = "PREFIX foaf: <" + FOAF.NS + "> " + "PREFIX ausestage: <" + AuseStage.NS + "> " + "PREFIX event: <http://purl.org/NET/c4dm/event.owl#> " + "PREFIX dcterms: <http://purl.org/dc/terms/> " + "SELECT DISTINCT ?agent ?givenName ?familyName " + "WHERE { "; for (String event : eventResults) { if (first > 0) { sparqlQuery1 += "UNION "; } first++; sparqlQuery1 += "{<ausstage:e:" + event + "> a event:Event; " + " event:agent ?agent. " + " ?agent a foaf:Person; " + " foaf:givenName ?givenName; " + " foaf:familyName ?familyName. " + " } "; } sparqlQuery1 += " } "; // execute query ResultSet results = rdf.executeSparqlQuery(sparqlQuery1); // now we transfer the results to a TreeMap <Integer, while (results.hasNext()) { row = results.nextSolution(); contributor_id = AusStageURI.getId(row.get("agent").toString()); collaborator = new Collaborator(contributor_id); cId_cObj_map.put(Integer.parseInt(contributor_id), collaborator); foundCollaboratorsSet.add(Integer.parseInt(contributor_id)); } rdf.tidyUp(); return cId_cObj_map; } // end getRawCollaboratorData_org method
/* * add some of the additional required information for collaborator */ public ArrayList<Collaborator> getCollaborators( TreeMap<Integer, Collaborator> network, String id) { // declare helper variables java.util.ArrayList<Collaborator> collaborators = new java.util.ArrayList<Collaborator>(); // define a SPARQL query to get details about a collaborator String sparqlQuery = "PREFIX foaf: <" + FOAF.NS + ">" + "PREFIX ausestage: <" + AuseStage.NS + "> " + "SELECT ?collabName ?function ?gender ?nationality " + "WHERE { " + " @ a foaf:Person ; " + " foaf:name ?collabName. " + "OPTIONAL {@ ausestage:function ?function} " + "OPTIONAL {@ foaf:gender ?gender} " + "OPTIONAL {@ ausestage:nationality ?nationality} " + "} "; String queryToExecute = null; ResultSet results = null; QuerySolution row = null; Collaborator collaborator = null; // loop through the list of collaborators and get additional information Collection networkKeys = network.keySet(); Iterator networkKeyIterator = networkKeys.iterator(); Integer networkKey = null; Integer centreId = Integer.parseInt(id); // loop through the list of keys while (networkKeyIterator.hasNext()) { // get the key for this collaborator networkKey = (Integer) networkKeyIterator.next(); // create a new collaborator object collaborator = new Collaborator(networkKey.toString()); // build the query queryToExecute = sparqlQuery.replaceAll( "@", "<" + AusStageURI.getContributorURI(collaborator.getId()) + ">"); // execute the query results = rdf.executeSparqlQuery(queryToExecute); // add details to this contributor while (results.hasNext()) { // loop though the resulset // get a new row of data row = results.nextSolution(); // add the data to the collaborator collaborator.setName(row.get("collabName").toString()); if (row.get("function") != null) { collaborator.setFunction(row.get("function").toString()); } if (row.get("gender") != null) { collaborator.setGender(row.get("gender").toString()); } if (row.get("nationality") != null) { collaborator.setNationality(row.get("nationality").toString()); } collaborator.setUrl(AusStageURI.getContributorURL(collaborator.getId())); } // play nice and tidy rdf.tidyUp(); results = null; // add the collaborator to the list collaborators.add(collaborator); } return collaborators; }