001/**
002 * Copyright (C) 2007 - 2016, Jens Lehmann
003 *
004 * This file is part of DL-Learner.
005 *
006 * DL-Learner is free software; you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation; either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * DL-Learner is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
018 */
019package org.dllearner.kb.sparql;
020
021import com.google.common.collect.Lists;
022
023import java.net.MalformedURLException;
024import java.net.URL;
025import java.util.Collections;
026import java.util.LinkedList;
027import java.util.List;
028
029/**
030 * One sparql endpoint configuration,
031 * made to comply with Jena.
032 *
033 * @author Sebastian Hellmann
034 *
035 */
036public class SparqlEndpoint {
037        URL url;
038        List<String> defaultGraphURIs;
039        List<String> namedGraphURIs;
040
041        //public HashMap<String, String> parameters = new HashMap<String, String>();
042
043        public SparqlEndpoint(URL u) {
044                this.url = u;
045                this.defaultGraphURIs= new LinkedList<>();
046                this.namedGraphURIs= new LinkedList<>();
047        }
048
049        public SparqlEndpoint(URL u, List<String> defaultGraphURIs, List<String> namedGraphURIs) {
050                this.url = u;
051                this.defaultGraphURIs=defaultGraphURIs;
052                this.namedGraphURIs=namedGraphURIs;
053        }
054
055        public SparqlEndpoint(URL url, String defaultGraphURI) {
056                this(url, Collections.singletonList(defaultGraphURI), Collections.emptyList());
057        }
058
059        public URL getURL() {
060                return this.url;
061        }
062
063        public static SparqlEndpoint create(String url, String defaultGraphURI) throws MalformedURLException {
064                return create(url, defaultGraphURI == null ? Collections.emptyList() : Lists.newArrayList(defaultGraphURI));
065        }
066
067        public static SparqlEndpoint create(String url, List<String> defaultGraphURIs) throws MalformedURLException {
068                return create(url, defaultGraphURIs, Collections.emptyList());
069        }
070
071        public static SparqlEndpoint create(String url, List<String> defaultGraphURIs, List<String> namedGraphURIs) throws MalformedURLException {
072                return new SparqlEndpoint(new URL(url), defaultGraphURIs, namedGraphURIs);
073        }
074
075        public String getHTTPRequest() {
076                String ret = this.url.toString()+"?";
077                ret += (defaultGraphURIs.isEmpty())?"":"default-graph-uri="+defaultGraphURIs.get(0)+"&";
078                ret += "query=";
079                return ret;
080        }
081
082        public List<String> getDefaultGraphURIs() {
083                return defaultGraphURIs;
084        }
085
086        public List<String> getNamedGraphURIs() {
087                return namedGraphURIs;
088        }
089
090        @Override
091        public String toString(){
092                return getHTTPRequest();
093        }
094
095
096        public static SparqlEndpoint getEndpointByName(String name) {
097
098                name = name.toUpperCase();
099
100                switch (name) {
101                        case "DBPEDIA":
102                                return getEndpointDBpedia();
103                        case "GOVTRACK":
104                                return getEndpointGovTrack();
105                        case "SPARQLETTE":
106                                return getEndpointSparqlette();
107                        case "SWCONFERENCE":
108                                return getEndpointSWConference();
109                        case "REVYU":
110                                return getEndpointRevyu();
111                        case "MYOPENLINK":
112                                return getEndpointMyOpenlink();
113                        case "MUSICBRAINZ":
114                                return getEndpointMusicbrainz();
115                        default:
116                                return null;
117                }
118        }
119
120
121        public static List<SparqlEndpoint> listEndpoints() {
122                LinkedList<SparqlEndpoint> ll = new LinkedList<>();
123                ll.add(getEndpointDBpedia());
124                ll.add(getEndpointDOAPspace());
125                ll.add(getEndpointGovTrack());
126                ll.add(getEndpointMusicbrainz());
127                ll.add(getEndpointMyOpenlink());
128                ll.add(getEndpointRevyu());
129                ll.add(getEndpointSWConference());
130                ll.add(getEndpointUSCensus());
131                ll.add(getEndpointSparqlette());
132                return ll;
133        }
134
135        public static SparqlEndpoint getEndpointDBpedia() {
136                URL u = null;
137                try {
138                        u = new URL("http://dbpedia.org/sparql");
139                } catch (Exception e) {
140                        e.printStackTrace();
141                }
142                LinkedList<String> defaultGraphURIs= new LinkedList<>();
143                defaultGraphURIs.add("http://dbpedia.org");
144                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
145        }
146
147        public static SparqlEndpoint getEndpointDBpediaLiveAKSW() {
148                URL u = null;
149                try {
150//                      u = new URL("http://dbpedia.aksw.org:8899/sparql");
151                        u = new URL("http://live.dbpedia.org/sparql");
152                } catch (Exception e) {
153                        e.printStackTrace();
154                }
155                LinkedList<String> defaultGraphURIs= new LinkedList<>();
156                defaultGraphURIs.add("http://dbpedia.org");
157                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
158        }
159
160        public static SparqlEndpoint getEndpointDBpediaHanne() {
161                URL u = null;
162                try {
163                        u = new URL("http://hanne.aksw.org:8892/sparql");
164                } catch (Exception e) {
165                        e.printStackTrace();
166                }
167                LinkedList<String> defaultGraphURIs= new LinkedList<>();
168                defaultGraphURIs.add("http://dbpedia.org");
169                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
170        }
171
172        public static SparqlEndpoint getEndpointDBpediaLiveOpenLink() {
173                URL u = null;
174                try {
175                        u = new URL("http://dbpedia-live.openlinksw.com/sparql");
176                } catch (Exception e) {
177                        e.printStackTrace();
178                }
179                LinkedList<String> defaultGraphURIs= new LinkedList<>();
180                defaultGraphURIs.add("http://dbpedia.org");
181                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
182        }
183
184        public static SparqlEndpoint getEndpointLOD2Cloud() {
185                URL u = null;
186                try {
187                        u = new URL("http://lod.openlinksw.com/sparql/");
188                } catch (Exception e) {
189                        e.printStackTrace();
190                }
191                LinkedList<String> defaultGraphURIs= new LinkedList<>();
192//              defaultGraphURIs.add("http://dbpedia.org");
193                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
194        }
195
196        public static SparqlEndpoint getEndpointDBpediaLOD2Cloud() {
197                URL u = null;
198                try {
199                        u = new URL("http://lod.openlinksw.com/sparql/");
200                } catch (Exception e) {
201                        e.printStackTrace();
202                }
203                LinkedList<String> defaultGraphURIs= new LinkedList<>();
204                defaultGraphURIs.add("http://dbpedia.org");
205                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
206        }
207
208        public static SparqlEndpoint getEndpointLinkedGeoData() {
209                URL u = null;
210                try {
211                        u = new URL("http://linkedgeodata.org/sparql");
212                } catch (Exception e) {
213                        e.printStackTrace();
214                }
215                LinkedList<String> defaultGraphURIs= new LinkedList<>();
216                //TODO defaultGraphURIs.add("http://geonames.org");
217                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
218        }
219
220        public static SparqlEndpoint getEndpointLinkedMDB() {
221                URL u = null;
222                try {
223                        u = new URL("http://www.linkedmdb.org/sparql");
224                } catch (Exception e) {
225                        e.printStackTrace();
226                }
227                LinkedList<String> defaultGraphURIs= new LinkedList<>();
228                //TODO defaultGraphURIs.add("http://geonames.org");
229                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
230        }
231
232        public static SparqlEndpoint getEndpointGovTrack() {
233                URL u = null;
234                try {
235                        u = new URL("http://www.rdfabout.com/sparql");
236                } catch (Exception e) {
237                        e.printStackTrace();
238                }
239                return new SparqlEndpoint(u, new LinkedList<>(), new LinkedList<>());
240        }
241
242        public static SparqlEndpoint getEndpointRevyu() {
243                URL u = null;
244                try {
245                        u = new URL("http://revyu.com/sparql");
246                } catch (Exception e) {
247                        e.printStackTrace();
248                }
249                return new SparqlEndpoint(u, new LinkedList<>(), new LinkedList<>());
250        }
251
252        public static SparqlEndpoint getEndpointMyOpenlink() {
253                URL u = null;
254                try {
255                        u = new URL("http://myopenlink.net:8890/sparql/");
256                } catch (Exception e) {
257                        e.printStackTrace();
258                }
259                LinkedList<String> defaultGraphURIs= new LinkedList<>();
260                defaultGraphURIs.add("http://myopenlink.net/dataspace");
261
262                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
263        }
264
265        public static SparqlEndpoint getEndpointDOAPspace() {
266                URL u = null;
267                try {
268                        u = new URL("http://doapspace.org/sparql");
269                } catch (Exception e) {
270                        e.printStackTrace();
271                }
272
273                return new SparqlEndpoint(u);
274        }
275
276        public static SparqlEndpoint getEndpointSWConference() {
277                URL u = null;
278                try {
279                        u = new URL("http://data.semanticweb.org:8080/openrdf-sesame/repositories/SWC");
280                } catch (Exception e) {
281                        e.printStackTrace();
282                }
283
284                return new SparqlEndpoint(u);
285        }
286
287        public static SparqlEndpoint getEndpointMusicbrainz() {
288                URL u = null;
289                try {
290                        u = new URL("http://dbtune.org/musicbrainz/sparql");
291                } catch (Exception e) {
292                        e.printStackTrace();
293                }
294                return new SparqlEndpoint(u);
295        }
296
297        public static SparqlEndpoint getEndpointUSCensus() {
298                URL u = null;
299                try {
300                        u = new URL("http://www.rdfabout.com/sparql");
301                } catch (Exception e) {
302                        e.printStackTrace();
303                }
304                LinkedList<String> defaultGraphURIs= new LinkedList<>();
305                defaultGraphURIs.add("http://www.rdfabout.com/rdf/schema/census/");
306
307                return new SparqlEndpoint(u, defaultGraphURIs, new LinkedList<>());
308        }
309
310        public static SparqlEndpoint getEndpointSparqlette() {
311                URL u = null;
312                try {
313                        u = new URL("http://www.wasab.dk/morten/2005/04/sparqlette/");
314                } catch (Exception e) {
315                        e.printStackTrace();
316                }
317                return new SparqlEndpoint(u);
318        }
319
320        @Override
321        public int hashCode() {
322                final int prime = 31;
323                int result = 1;
324                result = prime * result + ((defaultGraphURIs == null) ? 0 : defaultGraphURIs.hashCode());
325                result = prime * result + ((namedGraphURIs == null) ? 0 : namedGraphURIs.hashCode());
326                result = prime * result + ((url == null) ? 0 : url.hashCode());
327                return result;
328        }
329
330        @Override
331        public boolean equals(Object obj) {
332                if (this == obj)
333                        return true;
334                if (obj == null)
335                        return false;
336                if (getClass() != obj.getClass())
337                        return false;
338                SparqlEndpoint other = (SparqlEndpoint) obj;
339                if (defaultGraphURIs == null) {
340                        if (other.defaultGraphURIs != null)
341                                return false;
342                } else if (!defaultGraphURIs.equals(other.defaultGraphURIs))
343                        return false;
344                if (namedGraphURIs == null) {
345                        if (other.namedGraphURIs != null)
346                                return false;
347                } else if (!namedGraphURIs.equals(other.namedGraphURIs))
348                        return false;
349                if (url == null) {
350                        if (other.url != null)
351                                return false;
352                } else if (!url.equals(other.url))
353                        return false;
354                return true;
355        }
356}