Package edu.isi.karma.modeling.alignment.learner

Source Code of edu.isi.karma.modeling.alignment.learner.ModelLearningGraphSparse

/*******************************************************************************
* Copyright 2012 University of Southern California
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This code was developed by the Information Integration Group as part
* of the Karma project at the Information Sciences Institute of the
* University of Southern California.  For more information, publications,
* and related projects, please see: http://www.isi.edu/integration
******************************************************************************/

package edu.isi.karma.modeling.alignment.learner;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import edu.isi.karma.modeling.ModelingParams;
import edu.isi.karma.modeling.alignment.LinkIdFactory;
import edu.isi.karma.modeling.alignment.SemanticModel;
import edu.isi.karma.modeling.ontology.OntologyManager;
import edu.isi.karma.rep.alignment.ClassInstanceLink;
import edu.isi.karma.rep.alignment.ColumnNode;
import edu.isi.karma.rep.alignment.ColumnSubClassLink;
import edu.isi.karma.rep.alignment.DataPropertyLink;
import edu.isi.karma.rep.alignment.DataPropertyOfColumnLink;
import edu.isi.karma.rep.alignment.InternalNode;
import edu.isi.karma.rep.alignment.Label;
import edu.isi.karma.rep.alignment.LabeledLink;
import edu.isi.karma.rep.alignment.LiteralNode;
import edu.isi.karma.rep.alignment.Node;
import edu.isi.karma.rep.alignment.ObjectPropertyLink;
import edu.isi.karma.rep.alignment.ObjectPropertySpecializationLink;
import edu.isi.karma.rep.alignment.SubClassLink;
import edu.isi.karma.util.EncodingDetector;
import edu.isi.karma.util.RandomGUID;

public class ModelLearningGraphSparse extends ModelLearningGraph {

  private static Logger logger = LoggerFactory.getLogger(ModelLearningGraphSparse.class);

  public ModelLearningGraphSparse(OntologyManager ontologyManager) throws IOException {
    super(ontologyManager, ModelLearningGraphType.Sparse);
  }

  public ModelLearningGraphSparse(OntologyManager ontologyManager, boolean emptyInstance) {
    super(ontologyManager, emptyInstance, ModelLearningGraphType.Sparse);
  }

//  protected static ModelLearningGraphSparse getInstance(OntologyManager ontologyManager) {
//    return (ModelLearningGraphSparse)ModelLearningGraph.getInstance(ontologyManager, ModelLearningGraphType.Sparse);
//  }
//
//  protected static ModelLearningGraphSparse getEmptyInstance(OntologyManager ontologyManager) {
//    return (ModelLearningGraphSparse)ModelLearningGraph.getEmptyInstance(ontologyManager, ModelLearningGraphType.Sparse);
//  }


  @Override
  public Set<InternalNode> addModel(SemanticModel model) {

    HashMap<Node, Node> visitedNodes;
    Node source, target;
    Node n1, n2;

    // adding the patterns to the graph

    if (model == null)
      return null;

    String modelId = model.getId();
    if (this.graphBuilder.getModelIds().contains(modelId)) {
      // FIXME
      // we need to somehow update the graph, but I don't know how to do that yet.
      // so, we rebuild the whole graph from scratch.
      logger.info("the graph already includes the model and needs to be updated, we re-initialize the graph from the repository!");
      initializeFromJsonRepository();
      return null;
    }

    visitedNodes = new HashMap<Node, Node>();

    for (LabeledLink e : model.getGraph().edgeSet()) {

      source = e.getSource();
      target = e.getTarget();

      n1 = visitedNodes.get(source);
      n2 = visitedNodes.get(target);

      if (n1 == null) {

        if (source instanceof InternalNode) {
          String id = this.nodeIdFactory.getNodeId(source.getLabel().getUri());
          InternalNode node = new InternalNode(id, new Label(source.getLabel()));
          if (this.graphBuilder.addNode(node)) {
            n1 = node;
          } else continue;
        }
        else {
          String id = new RandomGUID().toString();
          ColumnNode node = new ColumnNode(id, id, ((ColumnNode)target).getColumnName(), null);
          if (this.graphBuilder.addNode(node)) {
            n1 = node;
          } else continue;
        }

        visitedNodes.put(source, n1);
      }

      if (n2 == null) {

        if (target instanceof InternalNode) {
          String id = nodeIdFactory.getNodeId(target.getLabel().getUri());
          InternalNode node = new InternalNode(id, new Label(target.getLabel()));
          if (this.graphBuilder.addNode(node)) {
            n2 = node;
          } else continue;
        }
        else if(target instanceof LiteralNode) {
          LiteralNode lTarget = (LiteralNode)target;
          String id = nodeIdFactory.getNodeId(lTarget.getValue());
          LiteralNode node = new LiteralNode(id, lTarget.getValue(), new Label(target.getLabel()), lTarget.isUri());
          if (this.graphBuilder.addNode(node)) {
            n2 = node;
          } else continue;
        }
        else {
          String id = new RandomGUID().toString();
          ColumnNode node = new ColumnNode(id, id, ((ColumnNode)target).getColumnName(), null);
          if (this.graphBuilder.addNode(node)) {
            n2 = node;
          } else continue;
        }

        visitedNodes.put(target, n2);
      }

      LabeledLink link;
      String id = LinkIdFactory.getLinkId(e.getLabel().getUri(), n1.getId(), n2.getId())
      if (e instanceof DataPropertyLink)
        link = new DataPropertyLink(id, e.getLabel());
      else if (e instanceof ObjectPropertyLink)
        link = new ObjectPropertyLink(id, e.getLabel(), ((ObjectPropertyLink)e).getObjectPropertyType());
      else if (e instanceof SubClassLink)
        link = new SubClassLink(id);
      else if (e instanceof ClassInstanceLink)
        link = new ClassInstanceLink(id, e.getKeyType());
      else if (e instanceof ColumnSubClassLink)
        link = new ColumnSubClassLink(id);
      else if (e instanceof DataPropertyOfColumnLink)
        link = new DataPropertyOfColumnLink(id,
            ((DataPropertyOfColumnLink)e).getSpecializedColumnHNodeId(),
            ((DataPropertyOfColumnLink)e).getSpecializedLinkId()
            );
      else if (e instanceof ObjectPropertySpecializationLink)
        link = new ObjectPropertySpecializationLink(id, ((ObjectPropertySpecializationLink)e).getSpecializedLinkId());
      else {
        logger.error("cannot instanciate a link from the type: " + e.getType().toString());
        continue;
      }


      link.getModelIds().add(modelId);

      if (this.graphBuilder.addLink(n1, n2, link)) {
        this.graphBuilder.changeLinkWeight(link, ModelingParams.PATTERN_LINK_WEIGHT);
      }

      if (!n1.getModelIds().contains(modelId))
        n1.getModelIds().add(modelId);

      if (!n2.getModelIds().contains(modelId))
        n2.getModelIds().add(modelId);

    }

    this.lastUpdateTime = System.currentTimeMillis();
    return null;
  }

  public static void main(String[] args) {

    /** Check if any ontology needs to be preloaded **/
    String preloadedOntDir = "/Users/mohsen/Documents/Academic/ISI/_GIT/Web-Karma/preloaded-ontologies/";
    File ontDir = new File(preloadedOntDir);
    if (ontDir.exists()) {
      File[] ontologies = ontDir.listFiles();
      OntologyManager mgr = new OntologyManager();
      for (File ontology: ontologies) {
        if (ontology.getName().endsWith(".owl") || ontology.getName().endsWith(".rdf")) {
          logger.info("Loading ontology file: " + ontology.getAbsolutePath());
          try {
            String encoding = EncodingDetector.detect(ontology);
            mgr.doImport(ontology, encoding);
          } catch (Exception t) {
            logger.error ("Error loading ontology: " + ontology.getAbsolutePath(), t);
          }
        }
      }
      // update the cache at the end when all files are added to the model
      mgr.updateCache();
      ModelLearningGraph.getInstance(mgr, ModelLearningGraphType.Sparse);

    } else {
      logger.info("No directory for preloading ontologies exists.");
    }



  }
}
TOP

Related Classes of edu.isi.karma.modeling.alignment.learner.ModelLearningGraphSparse

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.