PageRenderTime 46ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/src/com/getsemantics/semtools/dbpedia/DBpediaSearch.java

https://github.com/alegrm/LinkDataTools
Java | 113 lines | 66 code | 22 blank | 25 comment | 4 complexity | 46f23306c18b9f1cfde6684b7257b7e3 MD5 | raw file
  1. package com.getsemantics.semtools.dbpedia;
  2. import java.io.IOException;
  3. import java.net.MalformedURLException;
  4. import java.net.ProtocolException;
  5. import java.net.SocketTimeoutException;
  6. import java.net.URL;
  7. import java.net.URLConnection;
  8. import java.net.URLEncoder;
  9. import org.apache.log4j.Logger;
  10. import org.apache.log4j.xml.DOMConfigurator;
  11. import com.hp.hpl.jena.rdf.model.Model;
  12. import com.hp.hpl.jena.rdf.model.ModelFactory;
  13. import com.hp.hpl.jena.rdf.model.Resource;
  14. public class DBpediaSearch {
  15. private static Logger logger = Logger.getLogger(DBPediaQuery.class.getPackage().getName());
  16. private final String prefixes =
  17. "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
  18. "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +
  19. "PREFIX dbp: <http://dbpedia.org/ontology/> " +
  20. "PREFIX dc: <http://purl.org/dc/elements/1.1/> " +
  21. "PREFIX dbpedia2: <http://dbpedia.org/property/> ";
  22. // get the DBpedia Res
  23. public DBpediaSearch(){
  24. DOMConfigurator.configure("logger.xml");
  25. }
  26. public Resource search(String pQuery){
  27. Resource resource = null;
  28. Model m = query(prefixes+pQuery);
  29. if(m!=null){
  30. /*
  31. Model model = resource.getModel();
  32. Property redirect = model.getProperty("http://dbpedia.org/property/", "redirect");
  33. if(resource.hasProperty(redirect)){
  34. String newUri= resource.getProperty(redirect).getResource().getURI();
  35. q = resourceQuery.replaceAll("DBPEDIA_URI", newUri);
  36. logger.debug(" URIExpand is redirected to " + newUri);
  37. resource = query(q, newUri);
  38. }
  39. StmtIterator iter = resource.listStatements(new SimpleSelector(resModel.getResource(dbpediaUri), redirect, (RDFNode) null));
  40. if (iter.hasNext()) {
  41. while (iter.hasNext()) {
  42. //UPDATES A NEW URI FROM REDIRECT
  43. dbpediaUri = iter.nextStatement().getObject().toString();
  44. q = resourceQuery.replaceAll("DBPEDIA_URI", dbpediaUri);
  45. logger.debug(" is redirected to " + dbpediaUri);
  46. resModel = query(q, dbpediaUri);
  47. }
  48. } */
  49. }
  50. return resource;
  51. }
  52. public static Model query(String query){
  53. String endpoint = "http://dbpedia.org/sparql/?format=application%2Frdf%2Bxml&query=";
  54. boolean blnSocketTimeoutException = false;
  55. int countSocketTimeoutException = 0;
  56. Model model = null;
  57. try {
  58. // Set up the initial connection
  59. logger.debug(endpoint + URLEncoder.encode(query, "UTF-8"));
  60. URL url = new URL(endpoint+URLEncoder.encode(query, "UTF-8"));
  61. do{
  62. try{
  63. URLConnection connection = url.openConnection();
  64. connection.setReadTimeout(30000);
  65. blnSocketTimeoutException=false;
  66. connection.connect();
  67. model = ModelFactory.createDefaultModel();
  68. model.read(connection.getInputStream(), "");
  69. // add results to the model
  70. }catch(SocketTimeoutException e){
  71. blnSocketTimeoutException =true;
  72. countSocketTimeoutException++;
  73. logger.info(" RETRY connection " + countSocketTimeoutException);
  74. }
  75. }while(blnSocketTimeoutException==true && countSocketTimeoutException<3);
  76. if(blnSocketTimeoutException==true && countSocketTimeoutException==3){
  77. logger.error(" QUERY FIELD: " + query);
  78. }
  79. } catch (MalformedURLException e) {
  80. e.printStackTrace();
  81. } catch (ProtocolException e) {
  82. e.printStackTrace();
  83. } catch (IOException e) {
  84. e.printStackTrace();
  85. }
  86. return model;
  87. }
  88. }