package esl.cuenet.mapper.tree;
import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
import esl.cuenet.mapper.parser.MappingParser;
import esl.cuenet.mapper.parser.ParseException;
import esl.cuenet.query.IResultSet;
import esl.cuenet.source.AccesorInitializationException;
import esl.cuenet.source.ISource;
import esl.cuenet.source.SourceQueryException;
import org.apache.log4j.Logger;
import org.junit.Test;
import test.TestBase;
import java.io.*;
public class ParserTreeTest extends TestBase {
public ParserTreeTest() {
super();
}
private Logger logger = Logger.getLogger(ParserTreeTest.class);
@Test
public void runParserTreeTests() throws ParseException, SourceQueryException, AccesorInitializationException {
SourceMapper mapper = parseFileToSourceMapper("./mappings/sources.map");
ISource geocoderSource = mapper.get("yahoo-geocoder");
IResultSet result = geocoderSource.query(new String[] {"coordinates.latitude",
"coordinates.longitude"}, prepareLatLonLiterals());
// IResultSet result = geocoderSource.query(new String[]{"address.street-address"},
// prepareAddressLiterals());
logger.info(result.printResults());
}
public void parseMultiFiles() throws ParseException {
File file = new File("./src/main/javacc/test/");
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return (name.contains("test"));
}
});
for (File filename: files) {
logger.info("Parsing " + filename.getAbsolutePath());
parseFileToSourceMapper(filename.getAbsolutePath());
}
}
public SourceMapper parseFileToSourceMapper(String filename) throws ParseException {
SourceMapper m = null;
OntModel model = ModelFactory.createOntologyModel();
try {
model.read(new FileReader("/home/arjun/Documents/Dropbox/Ontologies/cuenet-main/cuenet-main.owl"),
"http://www.semanticweb.org/arjun/cuenet-main.owl");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
MappingParser parser = new MappingParser(new FileInputStream(filename));
parser.setIParseTreeCreator(new ParseTree(filename));
IParseTree tree = parser.parse_document();
ParseTreeInterpreter interpreter = new ParseTreeInterpreter(tree);
interpreter.setOntologyModel(model);
interpreter.interpret();
m = interpreter.getSourceMapper();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SourceParseException e) {
e.printStackTrace();
}
return m;
}
public Literal[] prepareLatLonLiterals() {
OntModel model = ModelFactory.createOntologyModel();
Resource coordinate = model.createResource("http://cuenet/coordinate");
Property latitude = model.createProperty("http://cuenet/latitude");
Property longitude = model.createProperty("http://cuenet/longitude");
Property address = model.createProperty("http://cuenet/address");
Individual c0 = model.createIndividual(coordinate);
c0.addLiteral(latitude, 33.645686);
c0.addLiteral(longitude, -117.944156);
c0.addLiteral(address, "Verano Pl, Irvine, CA");
String queryString = "SELECT distinct ?y ?z" +
" WHERE { _:b0 <http://cuenet/latitude> ?z . } ";
Query query = QueryFactory.create(queryString);
QueryExecution queryExecutor = QueryExecutionFactory.create(query, model);
Literal[] literals = new Literal[2];
ResultSet results = queryExecutor.execSelect();
Literal l = null;
while (results.hasNext()) {
QuerySolution qs = results.next();
l = qs.getLiteral("?z");
}
literals[0] = l;
queryString = "SELECT distinct ?y ?z" +
" WHERE { _:b0 <http://cuenet/longitude> ?z . } ";
query = QueryFactory.create(queryString);
queryExecutor = QueryExecutionFactory.create(query, model);
results = queryExecutor.execSelect();
while (results.hasNext()) {
QuerySolution qs = results.next();
l = qs.getLiteral("?z");
}
literals[1] = l;
return literals;
}
public Literal[] prepareAddressLiterals() {
OntModel model = ModelFactory.createOntologyModel();
Resource coordinate = model.createResource("http://cuenet/coordinate");
Property latitude = model.createProperty("http://cuenet/latitude");
Property longitude = model.createProperty("http://cuenet/longitude");
Property address = model.createProperty("http://cuenet/address");
Individual c0 = model.createIndividual(coordinate);
c0.addLiteral(latitude, 33.645921);
c0.addLiteral(longitude, -117.948732);
c0.addLiteral(address, "Verano Pl, Irvine, CA");
String queryString = "SELECT distinct ?y ?z" +
" WHERE { _:b0 <http://cuenet/address> ?z . } ";
Query query = QueryFactory.create(queryString);
QueryExecution queryExecutor = QueryExecutionFactory.create(query, model);
Literal[] literals = new Literal[1];
ResultSet results = queryExecutor.execSelect();
Literal l = null;
while (results.hasNext()) {
QuerySolution qs = results.next();
l = qs.getLiteral("?z");
}
literals[0] = l;
return literals;
}
}