org.semanticwb.portal.resources.SemanticSearch Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of SWBPortal Show documentation
Show all versions of SWBPortal Show documentation
SemanticWebBuilder Portal API components and utilities
The newest version!
/*
* SemanticWebBuilder es una plataforma para el desarrollo de portales y aplicaciones de integración,
* colaboración y conocimiento, que gracias al uso de tecnología semántica puede generar contextos de
* información alrededor de algún tema de interés o bien integrar información y aplicaciones de diferentes
* fuentes, donde a la información se le asigna un significado, de forma que pueda ser interpretada y
* procesada por personas y/o sistemas, es una creación original del Fondo de Información y Documentación
* para la Industria INFOTEC, cuyo registro se encuentra actualmente en trámite.
*
* INFOTEC pone a su disposición la herramienta SemanticWebBuilder a través de su licenciamiento abierto al público (‘open source’),
* en virtud del cual, usted podrá usarlo en las mismas condiciones con que INFOTEC lo ha diseñado y puesto a su disposición;
* aprender de él; distribuirlo a terceros; acceder a su código fuente y modificarlo, y combinarlo o enlazarlo con otro software,
* todo ello de conformidad con los términos y condiciones de la LICENCIA ABIERTA AL PÚBLICO que otorga INFOTEC para la utilización
* del SemanticWebBuilder 4.0.
*
* INFOTEC no otorga garantía sobre SemanticWebBuilder, de ninguna especie y naturaleza, ni implícita ni explícita,
* siendo usted completamente responsable de la utilización que le dé y asumiendo la totalidad de los riesgos que puedan derivar
* de la misma.
*
* Si usted tiene cualquier duda o comentario sobre SemanticWebBuilder, INFOTEC pone a su disposición la siguiente
* dirección electrónica:
* http://www.semanticwebbuilder.org
*/
package org.semanticwb.portal.resources;
import org.semanticwb.portal.api.GenericAdmResource;
// TODO: Auto-generated Javadoc
/**
* The Class SemanticSearch.
*
* @author Hasdai Pacheco {[email protected]}
*/
public class SemanticSearch extends GenericAdmResource {
//
// /** The log. */
// private Logger log = SWBUtils.getLogger(SWBAListRelatedObjects.class);
//
// /** The tr. */
// private SWBSparqlTranslator tr = null;
//
// /** The lex. */
// private SWBDictionary lex = null;
//
// /** The lang. */
// private String lang = "x-x";
//
// /* (non-Javadoc)
// * @see org.semanticwb.portal.api.GenericResource#processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.semanticwb.portal.api.SWBParamRequest)
// */
// @Override
// public void processRequest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException {
// String mode = paramRequest.getMode();
// if (mode.equals("SUGGEST")) {
// doSuggest(request, response, paramRequest);
// } else if (mode.equals("SHOWRES")) {
// doShowResults(request, response, paramRequest);
// } else {
// super.processRequest(request, response, paramRequest);
// }
// }
//
// /**
// * Do view.
// *
// * @param request the request
// * @param response the response
// * @param paramRequest the param request
// * @throws IOException Signals that an I/O exception has occurred.
// * @throws SWBResourceException the sWB resource exception
// */
// @Override
// public void doView(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException {
// PrintWriter out = response.getWriter();
// StringBuffer sbf = new StringBuffer();
// SWBResourceURL rUrl = paramRequest.getRenderUrl();
// String query = request.getParameter(createId("naturalQuery"));
// User user = paramRequest.getUser();
//
// response.setContentType("text/html; charset=ISO-8859-1");
// response.setHeader("Cache-Control", "no-cache");
// response.setHeader("Pragma", "no-cache");
//
// //Get user language if any and create lexicon and translator acordingly
// if (user != null) {
// if (!lang.equals(paramRequest.getUser().getLanguage())) {
// lang = paramRequest.getUser().getLanguage();
// SWBLocaleLexicon l = new SWBLocaleLexicon(lang, SWBDictionary.getLanguageName(lang));
// lex.addLexicon(l);
// lex.setLocale(lang);
// }
// } else {
// if (!lang.equals("es")) {
// lang = "es";
// lex.setLocale("es");
// }
// }
//
// SWBSpellChecker speller = new SWBSpellChecker(lex.getSpellDictPath());
//
// //Assert query string
// query = (query == null?"":query.trim());
//
// rUrl.setMode("SUGGEST");
// rUrl.setParameter("prefixes", "swb,swbc");
// rUrl.setCallMethod(rUrl.Call_DIRECT);
//
// sbf.append(" \n" +
// " \n" +
// " \n" +
// " \n\n");
//
// /**
// * Clears the suggestions list and gives focus to the textarea.
// */
// sbf.append(" ");
//
// if (paramRequest.getCallMethod() == paramRequest.Call_STRATEGY) {
// String url = getResourceBase().getAttribute("destUrl");
//
// sbf.append("\n" +
// " \n");
// } else {
// doShowResults(request, response, paramRequest);
// }
// out.print(sbf.toString());
// }
//
// /**
// * Do suggest.
// *
// * @param request the request
// * @param response the response
// * @param paramRequest the param request
// * @throws SWBResourceException the sWB resource exception
// * @throws IOException Signals that an I/O exception has occurred.
// */
// public void doSuggest(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException {
// PrintWriter out = response.getWriter();
// SortedSet objOptions = new TreeSet();
// SortedSet proOptions = new TreeSet();
// String word = request.getParameter("word");
// String lan = request.getParameter("lang");
// boolean props = Boolean.parseBoolean(request.getParameter("props"));
// String tempcDn = "";
// boolean lPar = false;
// boolean rPar = false;
// int idCounter = 0;
// //SWBLexicon lex = new SWBLexicon(lan);
// StringBuffer sbf = new StringBuffer();
//
// String px = request.getParameter("prefixes");
// if (px == null) {
// px = "";
// }
//
// ArrayList lprex = null;
//
// if (!px.equals("")) {
// lprex = new ArrayList(Arrays.asList(px.trim().split(",")));
// }
//
// response.setContentType("text/html; charset=utf-8");
// response.setHeader("Cache-Control", "no-cache");
// response.setHeader("Pragma", "no-cache");
//
// if (lan == null || lan.equals("")) {
// lan = "es";
// }
// if (word.indexOf("(") != -1) {
// lPar = true;
// word = word.replace("(", "");
// }
// if (word.indexOf(")") != -1) {
// rPar = true;
// word = word.replace(")", "");
// }
//
// word = word.replace("[", "");
// word = word.replace("]", "");
// word = word.trim();
//
// if (!props) {
// Iterator cit = SWBPlatform.getSemanticMgr().getVocabulary().listSemanticClasses();
//
// while (cit.hasNext()) {
// SemanticClass tempc = cit.next();
// tempcDn = tempc.getDisplayName(lan);
//
// if (tempcDn.toLowerCase().indexOf(word.toLowerCase()) != -1) {
// if (lprex.contains(tempc.getPrefix())) {
// objOptions.add(tempcDn);
// }
// }
//
// Iterator sit = tempc.listProperties();
// while (sit.hasNext()) {
// SemanticProperty tempp = sit.next();
// tempcDn = tempp.getDisplayName(lan);
//
// if (tempcDn.toLowerCase().indexOf(word.toLowerCase()) != -1) {
// if (lprex.contains(tempc.getPrefix())) {
// proOptions.add(tempcDn);
// }
// }
// }
// }
//
// if (proOptions.size() != 0 || objOptions.size() != 0) {
// idCounter = 0;
// int index;
// Iterator rit = objOptions.iterator();
//
// sbf.append("\n");
// while (rit.hasNext()) {
// String tempi = (String) rit.next();
// index = tempi.toLowerCase().indexOf(word.toLowerCase());
//
// sbf.append("- " + (lPar ? "(" : "") +
// "" + tempi + "" +
// (lPar ? ")" : "") + "
\n");
// idCounter++;
// }
//
// rit = proOptions.iterator();
// while (rit.hasNext()) {
// String tempi = (String) rit.next();
// index = tempi.toLowerCase().indexOf(word.toLowerCase());
//
// sbf.append("- " + (lPar ? "(" : "") +
// "" + tempi + "" +
// (lPar ? ")" : "") + "
\n");
// idCounter++;
// }
// sbf.append("
\n");
// }
// } else {
// String tag = lex.getLexicon(lang).getWord(word, true).getTags().get(0).getTagInfoParam(SWBLocaleLexicon.PARAM_ID);
// //String tag = lex.getObjWordTag(word.toLowerCase()).getObjId();
//
// sbf.append("\n");
//
// if (!tag.equals("")) {
// SemanticClass sc = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClassById(tag);
// idCounter = 0;
// Iterator sit = sc.listProperties();
// while (sit.hasNext()) {
// SemanticProperty t = sit.next();
// sbf.append("- " + (lPar ? "(" : "") +
// "" + t.getDisplayName(lan) + "" +
// (lPar ? ")" : "") + "
\n");
// idCounter++;
// }
// } else {
// tag = lex.getLexicon(lang).getWord(word, false).getSelectedTag().getTagInfoParam(SWBLocaleLexicon.PARAM_URI);
// SemanticClass sc = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClass(tag);
// tag = sc.getPrefix() + ":" + sc.getName();
// //tag = lex.getPropWordTag(word).getRangeClassId();
// if (!tag.equals("")) {
// sc = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClassById(tag);
// idCounter = 0;
// Iterator sit = sc.listProperties();
// while (sit.hasNext()) {
// SemanticProperty t = sit.next();
// sbf.append("- " + (lPar ? "(" : "") +
// "" + t.getDisplayName(lan) + "" +
// (lPar ? ")" : "") + "
\n");
// idCounter++;
// }
// }
// }
// sbf.append("
\n");
// }
// out.println(sbf.toString());
// }
//
// /**
// * Do show results.
// *
// * @param request the request
// * @param response the response
// * @param paramRequest the param request
// * @throws SWBResourceException the sWB resource exception
// * @throws IOException Signals that an I/O exception has occurred.
// */
// public void doShowResults(HttpServletRequest request, HttpServletResponse response, SWBParamRequest paramRequest) throws SWBResourceException, IOException {
// PrintWriter out = response.getWriter();
// StringBuffer sbf = new StringBuffer();
// SWBResourceURL rUrl = paramRequest.getRenderUrl();
// String query = request.getParameter(createId("naturalQuery"));
// User user = paramRequest.getUser();
// SemanticProperty so_lat = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#latitude");
// SemanticProperty so_long = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#longitude");
// SemanticProperty so_home = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#wpUrl");
// SemanticProperty so_name = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#name");
// SemanticProperty so_address = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty("http://www.semanticwebbuilder.org/emexcatalog.owl#address");
// SemanticObject so2;
//
// //Get user language if any and create lexicon and translator acordingly
// if (user != null) {
// if (!lang.equals(paramRequest.getUser().getLanguage())) {
// lang = paramRequest.getUser().getLanguage();
// SWBLocaleLexicon l = new SWBLocaleLexicon(lang, SWBDictionary.getLanguageName(lang));
// lex.addLexicon(l);
// lex.setLocale(lang);
// }
// } else {
// if (!lang.equals("es")) {
// lang = "es";
// lex.setLocale("es");
// }
// }
//
// //Assert query string
// query = (query == null?"":query.trim());
//
// rUrl.setMode("SUGGEST");
// rUrl.setCallMethod(rUrl.Call_DIRECT);
//
// HashMap dbNames = new HashMap();
// dbNames.put("Miguel Hidalgo", "Miguel_Hidalgo,_D.F.");
// dbNames.put("Tamaulipas", "Tamaulipas");
// dbNames.put("México, D.F.", "México_city");
// dbNames.put("Veracruz", "Veracruz");
// dbNames.put("Tamaulipas", "Tamaulipas");
// dbNames.put("Alvaro Obregón", "Álvaro_Obregón,_D.F.");
// dbNames.put("Xochimilco", "Xochimilco");
// dbNames.put("Tlalpan", "Tlalpan");
// dbNames.put("Altamira", "Altamira,_Tamaulipas");
// dbNames.put("Aldama", "Aldama,_Tamaulipas");
// dbNames.put("Abasolo", "");
// dbNames.put("Burgos", "");
// dbNames.put("Aguascalientes", "Aguascalientes,_Aguascalientes");
// dbNames.put("Asientos", "Asientos,_Aguascalientes");
// dbNames.put("Calvillo", "Calvillo,_Aguascalientes");
// dbNames.put("Cosío", "Cosío,_Aguascalientes");
// dbNames.put("Actopan", "Actopan,_Veracruz");
// dbNames.put("Atoyac", "");
// dbNames.put("Córdoba", "Córdoba,_Veracruz");
// dbNames.put("Las minas", "");
//
// sbf.append("\n");
//
// tr = new SWBSparqlTranslator(lex);
// long time = System.currentTimeMillis();
// String sparqlQuery = lex.getLexicon(lang).getPrefixString() + "\n" + tr.translateSentence(query, false);
// //System.out.println("\n+++Tiempo de traducción: " + String.valueOf(System.currentTimeMillis() - time) + "milisegundos");
// //System.out.println(sparqlQuery);
// String errCount = Integer.toString(tr.getErrCode());
//
// if (errCount != null) {
// if (Integer.parseInt(errCount) == 0) {
// String patternStr = "\"[a-zA-Z]+\"";
// String mname = "";
// String dbName = "";
//
// // Compile and use regular expression
// Pattern pattern = Pattern.compile(patternStr);
// Matcher matcher = pattern.matcher(sparqlQuery);
// boolean matchFound = matcher.find();
//
// if (matchFound) {
// // Get all groups for this match
// for (int i = 0; i <= matcher.groupCount(); i++) {
// // Get the group's indices
// int groupStart = matcher.start(i);
// int groupEnd = matcher.end(i);
//
// // groupStr is equivalent to
// mname = sparqlQuery.subSequence(groupStart, groupEnd).toString();
// }
// }
//
// if (dbNames.containsKey(mname.replace("\"", ""))) {
// dbName = dbNames.get(mname.replace("\"", ""));
// }
//
// try {
// // System.out.println("Obteniendo información de la dbpedia");
// time = System.currentTimeMillis();
// if (!dbName.equals("")) {
// String dbPediaQuery =
// "PREFIX geo: \n" +
// "PREFIX dbprop: \n" +
// "PREFIX foaf: \n"+
// "SELECT ?desc ?lat ?long ?page\n" +
// "WHERE {\n" +
// " dbprop:abstract ?desc.\n" +
// "FILTER (lang(?desc) = \"" + lang + "\").\n" +
// " geo:lat ?lat.\n" +
// " geo:long ?long.\n" +
// " foaf:page ?page.\n" +
// "}\n";
// //System.out.println("<<<<<" + dbPediaQuery);
// //Query dbpedia
// SemanticModel dbpModel = SWBPlatform.getSemanticMgr().getModel("DBPedia");
// QueryExecution dbQexec = dbpModel.sparQLQuery(dbPediaQuery);
//
// //Get dbPedia INFO
// ResultSet dbrs = dbQexec.execSelect();
//
// QuerySolution dbrb = dbrs.nextSolution();
// RDFNode desc_node = dbrb.get("desc");
// RDFNode lat_node = dbrb.get("lat");
// RDFNode long_node = dbrb.get("long");
// RDFNode home_node = dbrb.get("page");
//
// String mapUrl = getResourceBase().getAttribute("mapUrl") +
// "?lat=" + lat_node.asNode().getLiteral().getLexicalForm() +
// "&long="+ long_node.asNode().getLiteral().getLexicalForm() +
// "&wikiUrl=" + home_node.toString() +
// "&info=" + dbName.replace("\"", "\\\"");
// sbf.append("\n" +
// " \n" +
// " \n" +
// " " + paramRequest.getLocaleString("infoAbout") + " " + "" + dbName + " \n" +
// " \n" +
// " \n" +
// " \n" +
// " \n" +
// " " + desc_node.asNode().getLiteral().getLexicalForm() + " \n" +
// " \n" +
// " \n" +
// "
\n" +
// "" +
// paramRequest.getLocaleString("mapAbout") + " " + dbName + "
" +
// "
");
// }
// sbf.append("
" + paramRequest.getLocaleString("msgSearch") + ": " + query + ".
");
// //System.out.println("+++Tiempo de consulta dbPedia: " + String.valueOf(System.currentTimeMillis() - time) + "milisegundos");
// Model model = SWBPlatform.getSemanticMgr().getSchema().getRDFOntModel();
// SemanticModel mo = new SemanticModel("test", model);
// //Query squery = QueryFactory.create(sparqlQuery);
// // System.out.println("------------------------------");
// // System.out.println(sparqlQuery);
// // System.out.println("------------------------------");
//
// //squery.serialize();
// QueryExecution qexec = mo.sparQLQuery(sparqlQuery);
//
// try {
// time = System.currentTimeMillis();
// int hitsCount = 0;
// sbf.append("\n" +
// " \n");
// ResultSet rs = qexec.execSelect();
// sbf.append(" \n" +
// " \n");
// if (rs.hasNext()) {
// for (String icol : (List) rs.getResultVars()) {
// sbf.append(" " + icol + " \n");
// }
// sbf.append(" \n");
// sbf.append(" \n");
// sbf.append(" \n");
//
//
// boolean odd = true;
// while (rs.hasNext()) {
// odd = !odd;
// QuerySolution rb = rs.nextSolution();
// if (odd) {
// sbf.append(" \n");
// } else {
// sbf.append(" \n");
// }
// //Iterator it = rs.getResultVars().iterator();
// for (String name : (List) rs.getResultVars()) {
// hitsCount++;
// //while (it.hasNext()) {
// // String name = it.next();
//
// RDFNode x = rb.get(name);
// sbf.append(" ");
// if (x != null) {
// SemanticClass org = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticClass("http://www.semanticwebbuilder.org/emexcatalog.owl#Organisation");
// if (x.isLiteral()) {
// /*if (name.equals(so_name.getDisplayName(lang2))) {
// so2 = getOrganizationByName(x.asNode().getLiteral().getLexicalForm());
// System.out.println(">>>Name " + so2.getProperty(so_name));
// //System.out.println(">>> name: " + x.asNode().getLiteral().getLexicalForm());
// sbf.append(x.asNode().getLiteral().getLexicalForm());
// } else {*/
// sbf.append(x.asNode().getLiteral().getLexicalForm());
// //}
// } else {
// //System.out.println(">obteniendo objeto semántico");
// SemanticObject so = SemanticObject.createSemanticObject(x.toString());
//
// if (so != null) {
// SemanticClass tt = so.getSemanticClass();
// if (tt != null) {
// if (so.instanceOf(org)) {
// String mapUrl = getResourceBase().getAttribute("mapUrl").replace(" ", "%20") +
// "?lat=" + so.getProperty(so_lat) +
// "&long="+ so.getProperty(so_long) +
// "&wikiUrl=" + (so.getProperty(so_home) == null?"#":so.getProperty(so_home).replace(" ","%20")) +
// "&info=" + so.getProperty(so_name).replace("\"", "").replace(" ", "%20");
// sbf.append("" + so.getProperty(so_name).replace("\"", "") + "");
// } else {
// sbf.append(tt.getDisplayName(lang));
// }
// } else {
// SemanticProperty stt = SWBPlatform.getSemanticMgr().getVocabulary().getSemanticProperty(so.getURI());
// sbf.append(stt.getDisplayName(lang));
// }
// } else {
// //System.out.println(">el dato no tiene objeto semántico");
// if (x != null) {
// //System.out.println(">escribiendo valor");
// sbf.append(x);
// } else {
// //System.out.println(">el campo es nulo");
// sbf.append(" - ");
// }
// }
// }
// }
// sbf.append(" \n");
// }
// sbf.append(" \n");
// }
// } else {
// sbf.append(" " + paramRequest.getLocaleString("nofound") + " ");
// sbf.append(" \n");
// sbf.append(" \n");
// sbf.append(" \n");
// }
// sbf.append(" \n");
// sbf.append("
\n");
// sbf.append("\n" + hitsCount + " coincidencias en " + paramRequest.getLocaleString("exectime") + ": " + (System.currentTimeMillis() - time) + "ms." + "
\n");
// //System.out.println("+++Tiempo de consulta modelo local: " + String.valueOf(System.currentTimeMillis() - time) + "milisegundos");
// } finally {
// qexec.close();
// }
// } catch (Exception e) {
// if (tr.getErrCode() != 0) {
// sbf.append("");
// }
// }
// } else {
// sbf.append("");
// }
// }
// sbf.append("\n");
// out.print(sbf.toString());
// }
//
// /**
// * Creates the id.
// *
// * @param suffix the suffix
// * @return the string
// */
// private String createId(String suffix) {
// return getResourceBase().getId() + "/" + suffix;
// }
//
// /**
// * Gets the organization by name.
// *
// * @param name the name
// * @return the organization by name
// */
// private SemanticObject getOrganizationByName(String name) {
// String sparqlQuery = "PREFIX emex: \n" +
// "PREFIX rdf: \n" +
// "SELECT DISTINCT ?org\n" +
// "WHERE {\n" +
// " ?org rdf:type emex:Organisation.\n" +
// " ?org emex:name \"" + name + "\".\n" +
// "}\n";
// //System.out.println(sparqlQuery);
// Model model = SWBPlatform.getSemanticMgr().getOntology().getRDFOntModel();
// Query squery = QueryFactory.create(sparqlQuery);
// squery.serialize();
// QueryExecution qexec = QueryExecutionFactory.create(squery, model);
//
// try {
// ResultSet rs = qexec.execSelect();
// if (rs.hasNext()) {
// while (rs.hasNext()) {
// QuerySolution rb = rs.nextSolution();
// for (String fname : (List) rs.getResultVars()) {
// RDFNode x = rb.get(fname);
//
// if (x != null && !x.isLiteral()) {
// return SemanticObject.createSemanticObject(x.toString());
// } else {
// return null;
// }
// }
// }
// }
// return null;
// } finally {
// qexec.close();
// }
// }
}