package dbpedia.runner; import java.io.FileInputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Properties; import util.FileUtil; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.sparql.engine.http.QueryExceptionHTTP; public class MainRelations { public static String service = "http://dbpedia.org/sparql"; static HashMap<String, HashSet<String>> proptomovie = new HashMap<String, HashSet<String>>(); static HashMap<String,String> edges = new HashMap<String,String>(); public static void main(String[] args) { int count = 0; Properties properties = new Properties(); try { properties.load(new FileInputStream("MovieMap.properties")); for (Object key : properties.keySet()) { // ldapContent.put((String)key,(String)properties.get(key)); addDataforMovie((String) key,"moviefiles"); System.out.println(count++); } } catch (Exception e) { System.out.println(e.getMessage()); } finally { } } public static void getMovieFiles(String moviemap,String directory){ int count = 0; Properties properties = new Properties(); try { properties.load(new FileInputStream(moviemap+".properties")); for (Object key : properties.keySet()) { // ldapContent.put((String)key,(String)properties.get(key)); addDataforMovie((String) key,directory); System.out.println(count++); } } catch (Exception e) { System.out.println(e.getMessage()); } finally { } } private static void addDataforMovie(String str,String directory) { String str2 = "\"" + str + "\"^^xsd:integer"; String query = getMovieQuery(str2); QueryExecution qe = QueryExecutionFactory.sparqlService(service, query); HashMap<String,HashSet<String>> MovieHashMap = new HashMap<String, HashSet<String>>(); HashSet<String> r = new HashSet<String>(); r.add(str); MovieHashMap.put("id", r); try { ResultSet results = qe.execSelect(); for (; results.hasNext();) { QuerySolution soln = results.next(); RDFNode property = soln.get("property"); RDFNode data = soln.get("data"); // dbo:director OR dbpedia2:director if(property.toString().trim().equals("http://dbpedia.org/property/director") || property.toString().trim().equals("http://dbpedia.org/ontology/director") ){ if(data.isLiteral()){ addtoHashMap("director",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("director",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("director",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbo:starring OR dbpedia2:starring else if(property.toString().trim().equals("http://dbpedia.org/property/starring") || property.toString().trim().equals("http://dbpedia.org/ontology/starring") ){ if(data.isLiteral()){ addtoHashMap("starring",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("starring",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("starring",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbo:producer OR dbpedia2:producer else if(property.toString().trim().equals("http://dbpedia.org/property/producer") || property.toString().trim().equals("http://dbpedia.org/ontology/producer") ){ if(data.isLiteral()){ addtoHashMap("producer",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("producer",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("producer",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbo:cinematography OR dbpedia2:cinematography else if(property.toString().trim().equals("http://dbpedia.org/property/cinematography") || property.toString().trim().equals("http://dbpedia.org/ontology/cinematography") ){ if(data.isLiteral()){ addtoHashMap("camera",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("camera",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("camera",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbo:editing OR dbpedia2:editing else if(property.toString().trim().equals("http://dbpedia.org/property/editing") || property.toString().trim().equals("http://dbpedia.org/ontology/editing") ){ if(data.isLiteral()){ addtoHashMap("editor",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("editor",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("editor",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbo:musicComposer OR dbpedia2:music else if(property.toString().trim().equals("http://dbpedia.org/property/music") || property.toString().trim().equals("http://dbpedia.org/ontology/musicComposer") ){ if(data.isLiteral()){ addtoHashMap("music",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("music",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("music",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbo:writer OR dbpedia2:writer OR dbpedia2:writers OR dbpedia2:story OR dbpedia2:screenplay else if(property.toString().trim().equals("http://dbpedia.org/ontology/writer") || property.toString().trim().equals("http://dbpedia.org/property/writer") || property.toString().trim().equals("http://dbpedia.org/property/writers") || property.toString().trim().equals("http://dbpedia.org/property/story") || property.toString().trim().equals("http://dbpedia.org/property/screenplay") ){ if(data.isLiteral()){ addtoHashMap("writer",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("writer",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("writer",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbpedia2:genre else if(property.toString().trim().equals("http://dbpedia.org/property/genre") ){ if(data.isLiteral()){ addtoHashMap("genre",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("genre",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("genre",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dbpedia2:awards else if(property.toString().trim().equals("http://dbpedia.org/property/awards") ){ if(data.isLiteral()){ addtoHashMap("awards",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ if(data.asResource().toString().length() > 28) if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("awards",data.asResource().getLocalName(),str,MovieHashMap); }else{ addtoHashMap("awards",data.asResource().toString().substring(28, data.asResource().toString().length()),str,MovieHashMap); } } } // dcterms:subject else if(property.toString().trim().equals("http://purl.org/dc/terms/subject") ){ if(data.isLiteral()){ addtoHashMap("category",parseLiteral(data.asLiteral().getString()),str,MovieHashMap); }else{ String URI = data.asResource().toString().substring(37, data.asResource().toString().length()).trim(); if(!URI.toString().equalsIgnoreCase("English-language_films") && !URI.toString().equalsIgnoreCase("American_films") ){ if(!data.asResource().getLocalName().trim().equals("")){ addtoHashMap("category",URI,str,MovieHashMap); }else{ addtoHashMap("category",URI,str,MovieHashMap); } } } } FileUtil.saveHashMapToDisk(directory+"/"+str, MovieHashMap); } } catch (QueryExceptionHTTP e) { System.out.println(service + " is DOWN"); } finally { qe.close(); } // end try/catch/finally } private static void addtoHashMap(String prop,String property, String movie, HashMap<String, HashSet<String>> movieHashMap ) { if (!property.equalsIgnoreCase("English-language_films") && !property.equalsIgnoreCase("American_films")) { if (proptomovie.containsKey(prop + ":" + property)) { if (!proptomovie.get(prop + ":" + property).contains(movie)) { proptomovie.get(prop + ":" + property).add(movie); } } else { HashSet<String> t = new HashSet<String>(); t.add(movie); proptomovie.put(prop + ":" + property, t); } } if (movieHashMap.containsKey(prop)) { if (!movieHashMap.get(prop).contains(property)) { movieHashMap.get(prop).add(property); } } else { HashSet<String> t = new HashSet<String>(); t.add(property); movieHashMap.put(prop, t); } } private static String parseLiteral(String string) { string = string.replaceAll("\\s", "_"); return string; } private static String getMovieQuery(String str) { String q = "PREFIX dbo: <http://dbpedia.org/ontology/> " + "PREFIX dbpedia2: <http://dbpedia.org/property/> " + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " + "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " + "SELECT ?film ?property ?data " + "WHERE {?film dbo:wikiPageID " + str + " . " + "?film rdf:type dbo:Film . " + "?film ?property ?data . }"; return q; } }