Package org.mmisw.orrclient.core.vine.test

Source Code of org.mmisw.orrclient.core.vine.test.CreationTest

package org.mmisw.orrclient.core.vine.test;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.io.IOUtils;
import org.mmisw.ont.JenaUtil2;
import org.mmisw.ont.vocabulary.Skos;
import org.mmisw.ont.vocabulary.Vine;
import org.mmisw.orrclient.IOrrClient;
import org.mmisw.orrclient.core.util.ontinfo.OntInfoUtil;
import org.mmisw.orrclient.core.util.ontinfo.StmtKey;
import org.mmisw.orrclient.core.util.ontype.OntTypeUtil;
import org.mmisw.orrclient.core.vine.MappingOntologyCreator;
import org.mmisw.orrclient.gwt.client.rpc.CreateOntologyInfo;
import org.mmisw.orrclient.gwt.client.rpc.CreateOntologyResult;
import org.mmisw.orrclient.gwt.client.rpc.MappingDataCreationInfo;
import org.mmisw.orrclient.gwt.client.rpc.MappingOntologyData;
import org.mmisw.orrclient.gwt.client.rpc.OntologyData;
import org.mmisw.orrclient.gwt.client.rpc.OntologyType;
import org.mmisw.orrclient.gwt.client.rpc.TempOntologyInfo;
import org.mmisw.orrclient.gwt.client.rpc.vine.Mapping;

import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.vocabulary.RDFS;


/**
* Tests for the VINE-based creation of mapping ontologies.
*
* Checks include: creation in the approproiate format;
* given namespaces are owl:import'ed; mappings are correct.
*
* @author Carlos Rueda
*/
public class CreationTest extends VineTestCase {
 
  private final String authority = "mmitest";
  private final String shortName = "vinetest1";
  private final String ontologyUri = "http://localhost:8080/ont/" +authority+ "/" +shortName;
 
  private final String namespace1 = "http://example.org/ontologyOne/";
  private final String namespace2 = "http://example.org/ontologyTwo/";
  private final Set<String> namespaces = new HashSet<String>(Arrays.asList(namespace1, namespace2));
  private final String[][]  mapps = {
    { namespace1 + "termAAAAAA", Skos.exactMatch.getURI(), namespace2 + "termPPPPPP" },
    { namespace1 + "termBBBBBB", Skos.closeMatch.getURI(), namespace2 + "termQQQQQQ" },
    { namespace1 + "termCCCCCC", Skos.relatedMatch.getURI(), namespace2 + "termRRRRRR" },
  };
 
  private final String[]  comments = {
    "comment for AAAAAA-PPPPPP"
    "comment for BBBBBB-QQQQQQ"
    "comment for CCCCCC-RRRRRR"
  };
 
  private final String[]  confidences = {
      "100"
      "90"
      "80"
  };
 

  private final Set<StmtKey> originalTriples = new HashSet<StmtKey>();
 

  public void testCreate() throws Exception {
   
    IOrrClient.Manager.init(null);
   
    CreateOntologyResult result = _createOntology(ontologyUri);
    assertNull("No error in creating mapping ontology", result.getError());
   
    File file = new File(result.getFullPath());
   
    if ( log.isDebugEnabled() ) {
      String rdf = IOUtils.toString(new FileInputStream(file), "utf-8");
      log.debug("RDF: \n" +rdf);
    }
   
    OntModel ontModel = _load(file);
   
    OntologyType ontype = OntTypeUtil.determineType(ontModel, ontologyUri, null);
    assertEquals("ontology type should be MAPPING", OntologyType.MAPPING, ontype);
   
    _verifyMappings(ontModel);
    _verifyImports(ontModel);
  }



  private CreateOntologyResult _createOntology(String ontologyUri) throws Exception {
   
    MappingDataCreationInfo mdci = new MappingDataCreationInfo();
    mdci.setNamespaces(namespaces);
    List<Mapping> mappings = new ArrayList<Mapping>();
    mdci.setMappings(mappings);
   
    originalTriples.clear();
    for ( int i = 0; i < mapps.length; i++ ) {
      String[] mapp = mapps[i];
      Mapping mapping = new Mapping(mapp[0], mapp[1], mapp[2]);
      Map<String,String> mappingMetadata = new HashMap<String,String>();
      mappingMetadata.put(RDFS.comment.getURI(), comments[i]);
      mappingMetadata.put(Vine.confidence.getURI(), confidences[i]);
      mapping.setMetadata(mappingMetadata);
      mappings.add(mapping);
      originalTriples.add(new StmtKey(mapp[0], mapp[1], mapp[2]));
    }   
    CreateOntologyInfo coi = new CreateOntologyInfo();
    coi.setUri(ontologyUri);
    coi.setAuthority(authority);
    coi.setShortName(shortName);
    Map<String, String> metadataValues = new HashMap<String, String>();
    coi.setMetadataValues(metadataValues);
   
    MappingOntologyCreator creator = new MappingOntologyCreator(coi, mdci);
   
    CreateOntologyResult result = new CreateOntologyResult();
    creator.createOntology(result);
   
    return result;
  }
 
  private void _verifyMappings(OntModel ontModel) throws Exception {
    // now, test correct extraction
   
    TempOntologyInfo baseOntologyInfo = new TempOntologyInfo();
    baseOntologyInfo.setUri(ontologyUri);
    OntInfoUtil.getEntities(baseOntologyInfo, ontModel);
   
    OntologyData od = baseOntologyInfo.getOntologyData();
    assertSame("ontology data should be mapping", MappingOntologyData.class, od.getClass());

    // check that all mappings in the model exactly correspond to the original ones:
    MappingOntologyData mod = (MappingOntologyData) od;
    List<Mapping> mappings = mod.getMappings();
    Set<StmtKey> retrievedTriples = new HashSet<StmtKey>();
    for ( int i = 0; i < mapps.length; i++ ) {
      Mapping mapping = mappings.get(i);
      retrievedTriples.add(new StmtKey(mapping.getLeft(), mapping.getRelation(), mapping.getRight()));
    }
   
    assertEquals(originalTriples.size(), retrievedTriples.size());
    for ( StmtKey originalKey : originalTriples ) {
      assertTrue("retrieved mapping is a original one", retrievedTriples.contains(originalKey));
    }   
  }

  private void _verifyImports(OntModel ontModel) {
    Set<String> imported = ontModel.listImportedOntologyURIs();
    for ( String namespace : namespaces ) {
      String uri = JenaUtil2.removeTrailingFragment(namespace);
      assertTrue("namespace is owl:import'ed", imported.contains(uri));
    }   
  }
}
TOP

Related Classes of org.mmisw.orrclient.core.vine.test.CreationTest

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.