From f84980b6c86b0336a22dbc3f39e9d54791767cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr> Date: Tue, 3 Jun 2014 15:02:10 +0000 Subject: [PATCH] - Reengineered LOVAlignmentService --- .../exmo/align/service/AlignmentService.java | 6 +- .../align/service/LOVAlignmentService.java | 235 +++++++++--------- 2 files changed, 123 insertions(+), 118 deletions(-) diff --git a/src/fr/inrialpes/exmo/align/service/AlignmentService.java b/src/fr/inrialpes/exmo/align/service/AlignmentService.java index 3c83f1d2..dd86c8d9 100644 --- a/src/fr/inrialpes/exmo/align/service/AlignmentService.java +++ b/src/fr/inrialpes/exmo/align/service/AlignmentService.java @@ -92,7 +92,7 @@ public class AlignmentService extends CommonCLI { private Hashtable<String,Directory> directories = null; private HTTPTransport transport = null; - private AServProtocolManager manager; + protected AServProtocolManager manager; private DBService connection; public AlignmentService() { @@ -120,12 +120,12 @@ public class AlignmentService extends CommonCLI { } - public static void main(String[] args) { + public static void main( String[] args ) { try { new AlignmentService().run( args ); } catch ( Exception ex ) { logger.error( "FATAL error", ex ); }; } - public void run(String[] args) throws Exception { + public void run( String[] args ) throws Exception { services = new Vector<AlignmentServiceProfile>(); directories = new Hashtable<String,Directory>(); diff --git a/src/fr/inrialpes/exmo/align/service/LOVAlignmentService.java b/src/fr/inrialpes/exmo/align/service/LOVAlignmentService.java index d9b554d1..6d850590 100644 --- a/src/fr/inrialpes/exmo/align/service/LOVAlignmentService.java +++ b/src/fr/inrialpes/exmo/align/service/LOVAlignmentService.java @@ -1,3 +1,23 @@ +/* + * $Id$ + * + * Copyright (C) INRIA, 2006-2009, 2010, 2013-2014 + * + * This program 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 2.1 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + package fr.inrialpes.exmo.align.service; import java.io.IOException; @@ -10,6 +30,7 @@ import java.net.URL; import java.util.Collection; import java.util.Iterator; import java.util.Set; +import java.util.Properties; import org.semanticweb.owl.align.AlignmentException; import org.semanticweb.owl.align.OntologyNetwork; @@ -21,131 +42,115 @@ import com.google.gson.JsonParser; import fr.inrialpes.exmo.align.impl.BasicOntologyNetwork; -public class LOVAlignmentService extends AlignmentService{ +public class LOVAlignmentService extends AlignmentService { - private AServProtocolManager manager; - public LOVAlignmentService(AServProtocolManager manager) { - this.manager = manager; + public static void main( String[] args ) { + try { new LOVAlignmentService().run( args ); } + catch ( Exception ex ) { logger.error( "FATAL error", ex ); }; + } + + protected void init( Properties parameters ) { + logger.info("LOVAlignment server running"); + // Here should everything be done! + // If no ontologynetwork for LOV + // create it + BasicOntologyNetwork nolov; + try { + nolov = readLOV( "http://lov.okfn.org/dataset/lov/api/v1/vocabs" ); + String id = manager.alignmentCache.recordNewNetwork( nolov, true ); + logger.trace( "Nolov loaded as {}", id ); + // JE: it should also be matched + // JE: it should also be stored + } catch (AlignmentException e) { + logger.debug( "IGNORED: cannot record LOV network of ontology" ); } - - public static JsonObject getJsonObject( String uri ) throws IOException { - - URL url = new URL(uri); - HttpURLConnection request = (HttpURLConnection) url.openConnection(); - request.connect(); - // Convert to a JSON object to print data - JsonParser jp = new JsonParser(); - //convert the input stream to a json element - JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); - JsonObject jsonobject = root.getAsJsonObject(); - return jsonobject; - } - + // Otherwise + // update it (check each filename) + } - public static BasicOntologyNetwork readLOV( String uri ) throws AlignmentException { - - JsonObject jsonobject; - try { - jsonobject = getJsonObject(uri); - } catch (IOException e) { - throw new AlignmentException( "Ontology Network error: unable to create Json Object from ("+uri+")" ); - } + /* + * URI is LOV uri + */ + public static BasicOntologyNetwork readLOV( String uri ) throws AlignmentException { + JsonObject jsonobject; + try { + URL url = new URL( uri ); + HttpURLConnection request = (HttpURLConnection) url.openConnection(); + request.connect(); + // Convert to a JSON object to print data + JsonParser jp = new JsonParser(); + //convert the input stream to a json element + JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); + jsonobject = root.getAsJsonObject(); + } catch (IOException e) { + throw new AlignmentException( "Ontology Network error: unable to create Json Object from ("+uri+")" ); + } - /* - * lov Structure at May 27th, 2014 - * using api: http://lov.okfn.org/dataset/lov/api/v1/vocabs - * "vocabularies": [ - * { - * "uri", "namespace", "prefix", - * "titles": [ {"value", "language", "dataType"} ], - * "descriptions": [ {"value", "language", "dataType"} ], - * "lastVersionReviewed": {"date", "versionDecimal", "label", "link"} - * } - * ] - * We are getting the ontologies' uri - */ + /* + * lov Structure at May 27th, 2014 + * using api: http://lov.okfn.org/dataset/lov/api/v1/vocabs + * "vocabularies": [ + * { + * "uri", "namespace", "prefix", + * "titles": [ {"value", "language", "dataType"} ], + * "descriptions": [ {"value", "language", "dataType"} ], + * "lastVersionReviewed": {"date", "versionDecimal", "label", "link"} + * } + * ] + * We are getting the ontologies' uri + */ - BasicOntologyNetwork on = null; - //fetching the ontologies in the network - JsonElement ontologynetwork = jsonobject.get("vocabularies"); - JsonArray array = ontologynetwork.getAsJsonArray(); - Iterator<JsonElement> itr = array.iterator(); - on = new BasicOntologyNetwork(); - while(itr.hasNext()) { - JsonElement element = itr.next(); - JsonObject data = element.getAsJsonObject(); - - // main data - String ontouri = data.get("uri").isJsonNull() ? null : data.get("uri").getAsString(); - try { - on.addOntology(new URI(ontouri) ); - } catch (URISyntaxException e) { - throw new AlignmentException( "Ontologies must be identified by URIs" ); - } - /* if other information is needed: - String namespace = data.get("namespace").isJsonNull() ? null : data.get("namespace").getAsString(); - String prefix = data.get("prefix").isJsonNull() ? null : data.get("prefix").getAsString(); - - // titles - JsonArray array_titles = data.get("titles").getAsJsonArray(); - Iterator<JsonElement> itr_titles = array_titles.iterator(); - while(itr_titles.hasNext()) { - JsonElement titles = itr_titles.next(); - JsonObject data_titles = titles.getAsJsonObject(); - String title_value = data_titles.get("value").isJsonNull() ? null : data_titles.get("value").getAsString(); - String title_language = data_titles.get("language").isJsonNull() ? null : data_titles.get("language").getAsString(); - String title_dataType = data_titles.get("dataType").isJsonNull() ? null : data_titles.get("dataType").getAsString(); - } - - // descriptions - JsonArray array_descriptions = data.get("descriptions").getAsJsonArray(); - Iterator<JsonElement> itr_descriptions = array_descriptions.iterator(); - while(itr_descriptions.hasNext()) { - JsonElement descriptions = itr_descriptions.next(); - JsonObject data_descriptions = descriptions.getAsJsonObject(); - String descriptions_value = data_descriptions.get("value").isJsonNull() ? null : data_descriptions.get("value").getAsString(); - String descriptions_language = data_descriptions.get("language").isJsonNull() ? null : data_descriptions.get("language").getAsString(); - String descriptions_dataType = data_descriptions.get("dataType").isJsonNull() ? null : data_descriptions.get("dataType").getAsString(); - } + BasicOntologyNetwork on = new BasicOntologyNetwork(); + //fetching the ontologies in the network + for ( JsonElement element : jsonobject.get("vocabularies").getAsJsonArray() ) { + JsonObject data = element.getAsJsonObject(); + // main data + String ontouri = data.get("uri").isJsonNull() ? null : data.get("uri").getAsString(); + try { + // JE2014: + // I want more than that! I want to create an ontology object + // with the ontology locator + on.addOntology( new URI( ontouri ) ); + } catch (URISyntaxException e) { + logger.debug( "IGNORED: Malformed URI in LOV data : {}", ontouri ); + } + /* if other information is needed: + String namespace = data.get("namespace").isJsonNull() ? null : data.get("namespace").getAsString(); + String prefix = data.get("prefix").isJsonNull() ? null : data.get("prefix").getAsString(); + + // titles + JsonArray array_titles = data.get("titles").getAsJsonArray(); + Iterator<JsonElement> itr_titles = array_titles.iterator(); + while(itr_titles.hasNext()) { + JsonElement titles = itr_titles.next(); + JsonObject data_titles = titles.getAsJsonObject(); + String title_value = data_titles.get("value").isJsonNull() ? null : data_titles.get("value").getAsString(); + String title_language = data_titles.get("language").isJsonNull() ? null : data_titles.get("language").getAsString(); + String title_dataType = data_titles.get("dataType").isJsonNull() ? null : data_titles.get("dataType").getAsString(); + } + + // descriptions + JsonArray array_descriptions = data.get("descriptions").getAsJsonArray(); + Iterator<JsonElement> itr_descriptions = array_descriptions.iterator(); + while(itr_descriptions.hasNext()) { + JsonElement descriptions = itr_descriptions.next(); + JsonObject data_descriptions = descriptions.getAsJsonObject(); + String descriptions_value = data_descriptions.get("value").isJsonNull() ? null : data_descriptions.get("value").getAsString(); + String descriptions_language = data_descriptions.get("language").isJsonNull() ? null : data_descriptions.get("language").getAsString(); + String descriptions_dataType = data_descriptions.get("dataType").isJsonNull() ? null : data_descriptions.get("dataType").getAsString(); + } - // descriptions - if (!data.get("lastVersionReviewed").isJsonNull()) { + // descriptions + if (!data.get("lastVersionReviewed").isJsonNull()) { JsonObject lastVersionReviewed = data.get("lastVersionReviewed").getAsJsonObject(); String lastVersionReviewed_date = lastVersionReviewed.get("date").isJsonNull() ? null : lastVersionReviewed.get("date").getAsString(); String lastVersionReviewed_versionDecimal = lastVersionReviewed.get("versionDecimal").isJsonNull() ? null : lastVersionReviewed.get("versionDecimal").getAsString(); String lastVersionReviewed_label = lastVersionReviewed.get("label").isJsonNull() ? null : lastVersionReviewed.get("label").getAsString(); String lastVersionReviewed_link = lastVersionReviewed.get("link").isJsonNull() ? null : lastVersionReviewed.get("link").getAsString(); } - */ - } - return on; - } - - public void lovServer( ) { - - logger.info("LOVAlignment server running"); - BasicOntologyNetwork noo1 = new BasicOntologyNetwork(); - BasicOntologyNetwork noo2 = new BasicOntologyNetwork(); - String uri = "http://lov.okfn.org/dataset/lov/api/v1/vocabs"; - Collection<OntologyNetwork> allOntologyNetworks = manager.ontologyNetworks(); - for ( OntologyNetwork oNetwork : allOntologyNetworks ) { - noo1 = (BasicOntologyNetwork) oNetwork; - } - - try { - noo2 = readLOV (uri); - String id = manager.alignmentCache.recordNewNetwork( noo2, true ); - logger.info("Loading network of ontology (lov) {}",uri); - } catch (AlignmentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - Set<URI> networkOntology1 = noo1.getOntologies(); - Set<URI> networkOntology2 = noo2.getOntologies(); - if( !(networkOntology1.containsAll(networkOntology2) && networkOntology2.containsAll(networkOntology1))) { - //update differences - logger.info("lov Network has changed {}",uri); - } - - } + */ + } + return on; + } + } -- GitLab