/** * This file is part of General Entity Annotator Benchmark. * * General Entity Annotator Benchmark is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * General Entity Annotator Benchmark is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with General Entity Annotator Benchmark. If not, see <http://www.gnu.org/licenses/>. */ package org.aksw.gerbil.bat.converter; import it.unipi.di.acube.batframework.utils.WikipediaApiInterface; import java.io.FileNotFoundException; import java.io.FileOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.hp.hpl.jena.query.ParameterizedSparqlString; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryParseException; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.impl.StatementImpl; import com.hp.hpl.jena.shared.PrefixMapping; @Deprecated public class DBpediaToWikiId { private static final Logger LOGGER = LoggerFactory.getLogger(DBpediaToWikiId.class); @Deprecated private static String fileName = "dbpediaids.ttl"; @Deprecated private static Model model; @Deprecated private static PrefixMapping prefixes; // static { // File f = new File(fileName); // if (f.exists()) { // // model = RDFDataMgr.loadModel(fileName); // } else { // model = ModelFactory.createDefaultModel(); // } // prefixes = new PrefixMappingImpl() // .withDefaultMappings(PrefixMapping.Extended); // prefixes.setNsPrefix("nif", // "http://persistence.uni-leipzig.org/nlp2rdf/ontologies/nif-core#"); // prefixes.setNsPrefix("dbo", "http://dbpedia.org/ontology/"); // prefixes.setNsPrefix("itsrdf", "http://www.w3.org/2005/11/its/rdf#"); // } /** * The Wikipedia Id or -1 if the Id couldn't be retrieved. * * @param wikiApi * The API used to retrieve the id * @param dbpediaUri * URI for which the id should be retrieved * @return Wikipedia Id or -1 */ public static int getId(WikipediaApiInterface wikiApi, String dbpediaUri) { if (dbpediaUri != null) { int pos = dbpediaUri.indexOf("/resource/"); if (pos >= 0) { String title = dbpediaUri.substring(pos + 10); try { return wikiApi.getIdByTitle(title); } catch (Exception e) { LOGGER.error("Error while trying to get the ID for the title {}. Returning -1.", title, e); } } } return -1; } /** * The Wikipedia Id or -1 if the Id couldn't be retrieved. * * FIXME The method throws an exception for "http://DBpedia.org/resource/Origin_of_the_name_"Empire_State"". this * might be happen because of the quotes inside the URI. * * @param dbpediaUri * @return */ @Deprecated public static int getIdFromDBpedia(String dbpediaUri) { int id = -1; ParameterizedSparqlString query = new ParameterizedSparqlString( "SELECT ?id WHERE { ?dbpedia dbo:wikiPageID ?id .}", prefixes); query.setIri("dbpedia", dbpediaUri); QueryExecution qexec = null; try { qexec = QueryExecutionFactory.create(query.asQuery(), model); } catch (QueryParseException e) { LOGGER.error("Got a bad dbpediaUri \"" + dbpediaUri + "\" which couldn't be parse inside of a SPARQL query. Returning -1.", e); return id; } ResultSet result = qexec.execSelect(); if (result.hasNext()) { id = result.next().get("id").asLiteral().getInt(); return id; } qexec = QueryExecutionFactory.sparqlService( "http://dbpedia.org/sparql", query.asQuery()); result = qexec.execSelect(); if (result.hasNext()) { id = result.next().get("id").asLiteral().getInt(); model.add(new StatementImpl(model.createResource(dbpediaUri), model .createProperty("http://dbpedia.org/ontology/wikiPageID"), model.createTypedLiteral(id))); return id; } model.add(new StatementImpl(model.createResource(dbpediaUri), model .createProperty("http://dbpedia.org/ontology/wikiPageID"), model.createTypedLiteral(id))); return id; } @Deprecated public static void write() { try { model.write(new FileOutputStream(fileName), "TTL"); } catch (FileNotFoundException e) { LOGGER.error("Exception while writing model to file.", e); } } }