package com.google.refine.tests.rdf.exporters;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.io.InputStream;
import java.util.Properties;
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.ProjectMetadata;
import com.google.refine.browsing.Engine;
import com.google.refine.expr.ExpressionUtils;
import com.google.refine.grel.ControlFunctionRegistry;
import com.google.refine.importers.TsvCsvImporter;
import com.google.refine.model.Project;
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 com.google.refine.util.ParsingUtilities;
public class RdfExporterPaymentDataTest {
private Project project ;
private Repository model;
private Repository expected;
RdfExporter exporter;
Engine engine;
private String json = "{\"baseUri\":\"http://www.rbwm.gov.uk/public/finance_supplier_payments_2010_q2#\",\"rootNodes\":[{\"nodeType\":\"resource\",\"value\":\"http://www.rbwm.gov.uk/public/finance_supplier_payments_2010_q2\",\"rdfTypes\":[],\"links\":[{\"uri\":\"http://purl.org/linked-data/cube#slice\",\"curie\":\"http://purl.org/linked-data/cube#slice\",\"target\":{\"nodeType\":\"cell-as-resource\",\"expression\":\"'http://www.rbwm.gov.uk/id/transaction/' + value\",\"columnName\":\"TransNo\",\"isRowNumberCell\":false,\"rdfTypes\":[{\"uri\":\"http://reference.data.gov.uk/def/payment#Payment\",\"curie\":\"http://reference.data.gov.uk/def/payment#Payment\"},{\"uri\":\"http://purl.org/linked-data/cube#Slice\",\"curie\":\"http://purl.org/linked-data/cube#Slice\"}],\"links\":[{\"uri\":\"http://reference.data.gov.uk/def/payment#payer\",\"curie\":\"http://reference.data.gov.uk/def/payment#payer\",\"target\":{\"nodeType\":\"resource\",\"value\":\"http://statistics.data.gov.uk/id/local-authority/00ME\",\"rdfTypes\":[],\"links\":[]}},{\"uri\":\"http://reference.data.gov.uk/def/payment#payee\",\"curie\":\"http://reference.data.gov.uk/def/payment#payee\",\"target\":{\"nodeType\":\"cell-as-resource\",\"expression\":\"'http://www.rbwm.gov.uk/id/supplier/' +value.urlify()\",\"columnName\":\"Supplier Name\",\"isRowNumberCell\":false,\"rdfTypes\":[],\"links\":[]}},{\"uri\":\"http://reference.data.gov.uk/def/payment#transactionReference\",\"curie\":\"http://reference.data.gov.uk/def/payment#transactionReference\",\"target\":{\"nodeType\":\"cell-as-literal\",\"expression\":\"value\",\"columnName\":\"TransNo\",\"isRowNumberCell\":false}},{\"uri\":\"http://www.w3.org/2000/01/rdf-schema#label\",\"curie\":\"rdfs:label\",\"target\":{\"nodeType\":\"cell-as-literal\",\"expression\":\"value\",\"lang\":\"en\",\"columnName\":\"TransNo\",\"isRowNumberCell\":false}},{\"uri\":\"http://purl.org/linked-data/cube#sliceStructure\",\"curie\":\"http://purl.org/linked-data/cube#sliceStructure\",\"target\":{\"nodeType\":\"resource\",\"value\":\"http://reference.data.gov.uk/def/payment#payment-slice\",\"rdfTypes\":[],\"links\":[]}},{\"uri\":\"http://reference.data.gov.uk/def/payment#expenditureLine\",\"curie\":\"http://reference.data.gov.uk/def/payment#expenditureLine\",\"target\":{\"nodeType\":\"cell-as-resource\",\"expression\":\"row.index.urlify()\",\"isRowNumberCell\":true,\"rdfTypes\":[{\"uri\":\"http://reference.data.gov.uk/def/payment#ExpenditureLine\",\"curie\":\"http://reference.data.gov.uk/def/payment#ExpenditureLine\"}],\"links\":[{\"uri\":\"http://reference.data.gov.uk/def/payment#amountExcludingVAT\",\"curie\":\"http://reference.data.gov.uk/def/payment#amountExcludingVAT\",\"target\":{\"nodeType\":\"cell-as-literal\",\"expression\":\"value\",\"valueType\":\"http://www.w3.org/2001/XMLSchema#double\",\"columnName\":\"Amount excl vat\",\"isRowNumberCell\":false}},{\"uri\":\"http://reference.data.gov.uk/def/payment#expenditureCode\",\"curie\":\"http://reference.data.gov.uk/def/payment#expenditureCode\",\"target\":{\"nodeType\":\"cell-as-resource\",\"expression\":\"'http://www.rbwm.gov.uk/def/cost-centre/' + value\",\"columnName\":\"Cost Centre\",\"isRowNumberCell\":false,\"rdfTypes\":[],\"links\":[]}},{\"uri\":\"http://purl.org/linked-data/cube#dataset\",\"curie\":\"http://purl.org/linked-data/cube#dataset\",\"target\":{\"nodeType\":\"resource\",\"value\":\"http://www.rbwm.gov.uk/public/finance_supplier_payments_2010_q2\",\"rdfTypes\":[],\"links\":[]}}]}}]}}]}]}";
@BeforeClass
public void init()throws Exception{
InputStream in = this.getClass().getResourceAsStream("/rdfschema-payment.csv");
ApplicationContext ctxt = new ApplicationContext();
ControlFunctionRegistry.registerFunction("urlify", new Urlify());
ExpressionUtils.registerBinder(new RdfBinder(ctxt));
project = new Project();
ProjectMetadata meta = new ProjectMetadata();
Properties options = new Properties();
// options.put("ignore", "1");
new TsvCsvImporter().read(in, project,meta, options);
project.update();
//Guard assertion
assertEquals(project.rows.size(),2);
//preparing the RDF schema skeleton
RdfSchema schema = RdfSchema.reconstruct(ParsingUtilities.evaluateJsonStringToObject(json));
project.overlayModels.put("rdfSchema", schema);
//building the expected model
expected = new SailRepository(new MemoryStore());
expected.initialize();
RepositoryConnection con = expected.getConnection();
con.add(this.getClass().getResourceAsStream("/rdfschema-payment.rdf"),"",RDFFormat.RDFXML);
//export the project
engine = new Engine(project);
exporter = new RdfExporter(ctxt,RDFFormat.RDFXML);
model = exporter.buildModel(project, engine, schema);
}
@Test(groups={"rdf-schema-test"})
public void testModel() throws RepositoryException{
assertTrue(RepositoryUtil.equals(expected, model));
}
}