Package com.google.refine.tests.rdf.exporters

Source Code of com.google.refine.tests.rdf.exporters.RdfExporterTest

package com.google.refine.tests.rdf.exporters;


import org.json.JSONObject;
import org.openrdf.model.Resource;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.model.vocabulary.RDFS;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.repository.util.RepositoryUtil;
import org.openrdf.rio.RDFFormat;
import org.openrdf.sail.memory.MemoryStore;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import com.google.refine.browsing.Engine;
import com.google.refine.expr.ExpressionUtils;
import com.google.refine.grel.ControlFunctionRegistry;
import com.google.refine.model.Cell;
import com.google.refine.model.Column;
import com.google.refine.model.Project;
import com.google.refine.model.Row;
import com.google.refine.util.ParsingUtilities;
import com.google.refine.rdf.RdfSchema;
import com.google.refine.rdf.app.ApplicationContext;
import com.google.refine.rdf.exporters.RdfExporter;
import com.google.refine.rdf.expr.RdfBinder;
import com.google.refine.rdf.expr.functions.strings.Urlify;


import static org.testng.Assert.*;

public class RdfExporterTest {

  Project project;
  Engine engine;
  RdfExporter exporter;
  Repository model;
 
  Repository expected;
  RdfSchema schema;
 
  @BeforeClass
  public void init()throws Exception{
    expected = buildExpectedModel();
    schema = getRdfSchema();
   
    ApplicationContext ctxt = new ApplicationContext();
   
    buildTheSampleProject();
    engine = new Engine(project);
    exporter = new RdfExporter(ctxt,RDFFormat.RDFXML);
    ControlFunctionRegistry.registerFunction("urlify", new Urlify());
    ExpressionUtils.registerBinder(new RdfBinder(ctxt));
 
   
    model = exporter.buildModel(project, engine,schema);
   
    assertEquals(project.rows.size(),2);
    assertEquals(project.columnModel.getColumnIndexByName("Job Title"),3);
  }

  @Test(groups={"rdf-schema-test"})
  public void testModel() throws RepositoryException{
    assertTrue(RepositoryUtil.equals(expected, model));
  }
  //helper methods
 
  void buildColumnModel()throws Exception{
    project.columnModel.addColumn(0, new Column(0,"Post unique reference"), true);
    project.columnModel.addColumn(1, new Column(1,"Name"), true);
    project.columnModel.addColumn(2, new Column(2,"Grade"), true);
    project.columnModel.addColumn(3, new Column(3,"Job Title"), true);
    project.columnModel.addColumn(4, new Column(4,"Job/Team Function"), true);
    project.columnModel.addColumn(5, new Column(5,"Parent Department"), true);
    project.columnModel.addColumn(6, new Column(6,"Organisation"), true);
    project.columnModel.addColumn(7, new Column(7,"Unit"), true);
    project.columnModel.addColumn(8, new Column(8,"Contact Phone"), true);
    project.columnModel.addColumn(9, new Column(9,"Contact e-mail"), true);
    project.columnModel.addColumn(10, new Column(10,"Reports To"), true);
    project.columnModel.addColumn(11, new Column(11,"Reports To (Name)"), true);
    project.columnModel.addColumn(12, new Column(12,"HRO-Grade"), true);
    project.columnModel.addColumn(13, new Column(13,"HRO-AssignmentStatus"), true);
    project.columnModel.addColumn(14, new Column(14, "removed"), true);
    project.columnModel.addColumn(15, new Column(15,"Post unique reference OK"), true);
    project.columnModel.addColumn(16, new Column(16,"Is Department"), true);
    project.columnModel.addColumn(17, new Column(17,"Grade OK"), true);
  }
  void buildTheSampleProject()throws Exception{
    project = new Project();
    buildColumnModel();
    Row row1 = new Row(17);
    row1.cells.add(new Cell("101198", null));
    row1.cells.add(new Cell("Paula Freedman", null));
    row1.cells.add(new Cell("G5", null));
    row1.cells.add(new Cell("Deputy Director - International Group", null));
    row1.cells.add(new Cell("tbc", null));
    row1.cells.add(new Cell("BIS", null));
    row1.cells.add(new Cell("BIS", null));
    row1.cells.add(new Cell("UK Trade and Investment", null));
    row1.cells.add(new Cell("020 7215 4320", null));
    row1.cells.add(new Cell("paula.freedman@ukti.gsi.gov.uk", null));
    row1.cells.add(new Cell("127460", null));
    row1.cells.add(new Cell("Susan Haird", null));
    row1.cells.add(new Cell("Senior Civil Service.Pay Band 1", null));
    row1.cells.add(new Cell("Active Assignment", null));
    row1.cells.add(new Cell(null,null));
    row1.cells.add(new Cell(true, null));
    row1.cells.add(new Cell(true, null));
    row1.cells.add(new Cell(false, null));
   
    project.rows.add(row1);
   
    /*
     * 111912|  Bryan Welch|  G5|  Deputy Director - Legal Services Directorate B|  tbc|  BIS|  BIS|  Legal Services Group|  020 7215 3181|  bryan.welch@bis.gsi.gov.uk|  901575|  Stephen Braviner-Roman|  Senior Civil Service.Pay Band 1|  Active Assignment    TRUE  TRUE  FALSE
     */
    Row row2 = new Row(17);
    row2.cells.add(new Cell("111912", null));
    row2.cells.add(new Cell("Bryan Welch", null));
    row2.cells.add(new Cell("G5", null));
    row2.cells.add(new Cell("Deputy Director - Legal Services Directorate B", null));
    row2.cells.add(new Cell("tbc", null));
    row2.cells.add(new Cell("BIS", null));
    row2.cells.add(new Cell("BIS", null));
    row2.cells.add(new Cell("Legal Services Group", null));
    row2.cells.add(new Cell("020 7215 3181", null));
    row2.cells.add(new Cell("bryan.welch@bis.gsi.gov.uk", null));
    row2.cells.add(new Cell("901575", null));
    row2.cells.add(new Cell("Stephen Braviner-Roman", null));
    row2.cells.add(new Cell("Senior Civil Service.Pay Band 1", null));
    row2.cells.add(new Cell("Active Assignment", null));
    row2.cells.add(new Cell(null,null));
    row2.cells.add(new Cell(true, null));
    row2.cells.add(new Cell(true, null));
    row2.cells.add(new Cell(false, null));
   
    project.rows.add(row2);
   
    project.update();
    //set model
    project.overlayModels.put("rdfSchema", schema );
  }
 
  RdfSchema getRdfSchema()throws Exception{
    String json = "{\"baseUri\":\"http://data.bis.gov.uk/data/organogram/2010-08-26/\",\"rootNodes\":[{\"nodeType\":\"cell-as-resource\",\"isRowNumberCell\":false,\"expression\":\"'http://reference.data.gov.uk/id/department/bis/post/' + value\",\"columnName\":\"Post unique reference\",\"rdfTypes\":[{\"uri\":\"http://reference.data.gov.uk/def/central-government/CivilServicePost\",\"curie\":\"gov:CivilServicePost\"}],\"links\":[{\"uri\":\"http://reference.data.gov.uk/def/central-government/heldBy\",\"curie\":\"http://reference.data.gov.uk/def/central-government/heldBy\",\"target\":{\"nodeType\":\"cell-as-resource\",\"isRowNumberCell\":true,\"expression\":\"('#person' + row.index).urlify()\",\"rdfTypes\":[{\"uri\":\"http://xmlns.com/foaf/0.1/Person\",\"curie\":\"foaf:Person\"}],\"links\":[{\"uri\":\"http://xmlns.com/foaf/0.1/name\",\"curie\":\"foaf:name\",\"target\":{\"nodeType\":\"cell-as-literal\",\"expression\":\"value\",\"isRowNumberCell\":false,\"columnName\":\"Name\"}},{\"uri\":\"http://xmlns.com/foaf/0.1/mbox\",\"curie\":\"foaf:mbox\",\"target\":{\"nodeType\":\"cell-as-resource\",\"isRowNumberCell\":false,\"expression\":\"'mailto:' + value\",\"columnName\":\"Contact e-mail\",\"rdfTypes\":[],\"links\":[]}}]}},{\"uri\":\"http://www.w3.org/2000/01/rdf-schema#label\",\"curie\":\"rdfs:label\",\"target\":{\"nodeType\":\"cell-as-literal\",\"expression\":\"value\",\"isRowNumberCell\":false,\"lang\":\"en\",\"columnName\":\"Job Title\"}},{\"uri\":\"http://reference.data.gov.uk/def/central-government/postIn\",\"curie\":\"http://reference.data.gov.uk/def/central-government/postIn\",\"target\":{\"nodeType\":\"cell-as-resource\",\"isRowNumberCell\":false,\"expression\":\"value.urlify()\",\"columnName\":\"Unit\",\"rdfTypes\":[],\"links\":[{\"uri\":\"http://reference.data.gov.uk/def/central-government/hasPost\",\"curie\":\"http://reference.data.gov.uk/def/central-government/hasPost\",\"target\":{\"nodeType\":\"cell-as-resource\",\"isRowNumberCell\":false,\"expression\":\"'http://reference.data.gov.uk/id/department/bis/post/' + value\",\"columnName\":\"Post unique reference\",\"rdfTypes\":[],\"links\":[]}}]}}]}]}";
    JSONObject o = ParsingUtilities.evaluateJsonStringToObject(json);
    return RdfSchema.reconstruct(o);
  }
 
  Repository buildExpectedModel()throws RepositoryException{
    //see test1.xlsx and rdfschema1.png
   
    RepositoryConnection con = null;
    try{
      Repository repo = new SailRepository(new MemoryStore());
      repo.initialize();
      con = repo.getConnection();
      ValueFactory vf = con.getValueFactory();
   
      URI post = vf.createURI("http://reference.data.gov.uk/id/department/bis/post/101198");
      con.add(vf.createStatement(post, RDF.TYPE, vf.createURI("http://reference.data.gov.uk/def/central-government/CivilServicePost")));
   
      con.add(vf.createStatement(post, RDFS.LABEL, (Value)vf.createLiteral("Deputy Director - International Group","en")));
   
      URI person = vf.createURI("http://data.bis.gov.uk/data/organogram/2010-08-26/person0");
      con.add(vf.createStatement(person, RDF.TYPE, vf.createURI("http://xmlns.com/foaf/0.1/Person")));
      con.add(vf.createStatement(person,
                vf.createURI("http://xmlns.com/foaf/0.1/name"), vf.createLiteral( "Paula Freedman")));
      con.add(vf.createStatement(person,
          vf.createURI("http://xmlns.com/foaf/0.1/mbox"), vf.createURI("mailto:paula.freedman@ukti.gsi.gov.uk")));
     
      Resource unit = vf.createURI("http://data.bis.gov.uk/data/organogram/2010-08-26/uk-trade-and-investment");
      con.add(vf.createStatement(unit, vf.createURI("http://reference.data.gov.uk/def/central-government/hasPost"), post));
      con.add(vf.createStatement(post, vf.createURI("http://reference.data.gov.uk/def/central-government/postIn"), unit));
      con.add(vf.createStatement(post, vf.createURI("http://reference.data.gov.uk/def/central-government/heldBy"), person));
     
      /*
       * 111912|  Bryan Welch|  G5|  Deputy Director - Legal Services Directorate B|  tbc|  BIS|  BIS|  Legal Services Group|  020 7215 3181|  bryan.welch@bis.gsi.gov.uk|  901575|  Stephen Braviner-Roman|  Senior Civil Service.Pay Band 1|  Active Assignment    TRUE  TRUE  FALSE
       */
      URI post2 = vf.createURI("http://reference.data.gov.uk/id/department/bis/post/111912");
      con.add(vf.createStatement(post2,RDF.TYPE,vf.createURI("http://reference.data.gov.uk/def/central-government/CivilServicePost")));
      con.add(vf.createStatement(post2,RDFS.LABEL,vf.createLiteral("Deputy Director - Legal Services Directorate B","en")));
     
      URI person2 = vf.createURI("http://data.bis.gov.uk/data/organogram/2010-08-26/person1");
      con.add(vf.createStatement(person2,RDF.TYPE,vf.createURI("http://xmlns.com/foaf/0.1/Person")));
      con.add(vf.createStatement(person2,vf.createURI("http://xmlns.com/foaf/0.1/name"),vf.createLiteral("Bryan Welch")));
      con.add(vf.createStatement(person2,vf.createURI("http://xmlns.com/foaf/0.1/mbox"),vf.createURI("mailto:bryan.welch@bis.gsi.gov.uk")));
     
      URI unit2 = vf.createURI("http://data.bis.gov.uk/data/organogram/2010-08-26/legal-services-group");
     
      con.add(vf.createStatement(unit2, vf.createURI("http://reference.data.gov.uk/def/central-government/hasPost"), post2));
      con.add(vf.createStatement(post2, vf.createURI("http://reference.data.gov.uk/def/central-government/postIn"), unit2));
      con.add(vf.createStatement(post2, vf.createURI("http://reference.data.gov.uk/def/central-government/heldBy"), person2));
     
      return repo;
    }finally{
      con.close();
    }
  }
}
TOP

Related Classes of com.google.refine.tests.rdf.exporters.RdfExporterTest

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.