/**
* PRISSMA is a presentation-level framework for Linked Data adaptation.
*
* Copyright (C) 2013 Luca Costabello, v1.0
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see <http://www.gnu.org/licenses/>.
*/
package fr.inria.wimmics.prissma.test;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.util.FileManager;
import fr.inria.wimmics.prissma.selection.Decomposer;
import fr.inria.wimmics.prissma.selection.Matcher;
import fr.inria.wimmics.prissma.selection.PrissmaProperties;
import fr.inria.wimmics.prissma.selection.entities.ContextUnit;
import fr.inria.wimmics.prissma.selection.entities.CtxUnitType;
import fr.inria.wimmics.prissma.selection.entities.DecompItem;
import fr.inria.wimmics.prissma.selection.entities.Decomposition;
import fr.inria.wimmics.prissma.selection.entities.Edge;
import fr.inria.wimmics.prissma.selection.utilities.ContextUnitConverter;
public class MatcherTest {
private Matcher testMatcher;
@Test
public void testConversion(){
// creates input model
Model model = ModelFactory.createDefaultModel();
Resource ctx1 = model.createResource(PrissmaProperties.DEFAULT + "ctx1");
Resource usr1 = model.createResource(PrissmaProperties.DEFAULT + "usr1");
model.add(ctx1, PrissmaProperties.pUsr, usr1);
model.add(usr1, PrissmaProperties.pKnows, "computer programming" );
// create some prissma property first
Property prissmaUser = ResourceFactory.createProperty(PrissmaProperties.PRISSMA, "user");
Property foafInterest = ResourceFactory.createProperty(PrissmaProperties.FOAF, "knows");
// create ctx units
ContextUnit ctxUnit1 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit1.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "ctx1");
ContextUnit ctxUnit2 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "usr1");
ContextUnit ctxUnit3 = new ContextUnit( CtxUnitType.STRING);
ctxUnit3.instance = ResourceFactory.createPlainLiteral("computer programming");
// edges
Edge edge1 = new Edge();
edge1.label = prissmaUser;
edge1.v1 = ctxUnit1;
edge1.v2 = ctxUnit2;
Edge edge2 = new Edge();
edge2.label = foafInterest;
edge2.v1 = ctxUnit2;
edge2.v2 = ctxUnit3;
// Set input graph
Set<ContextUnit> expectedCtxUnits = new HashSet<ContextUnit>();
Set<Edge> expectedEdges = new HashSet<Edge>();
expectedCtxUnits.add(ctxUnit1);
expectedCtxUnits.add(ctxUnit2);
expectedCtxUnits.add(ctxUnit3);
expectedEdges.add(edge1);
expectedEdges.add(edge2);
this.testMatcher = new Matcher(new Decomposition());
ContextUnitConverter c = new ContextUnitConverter();
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(model);
c.convertInputToUnits(ctxRoot, new ArrayList<String>());
testMatcher.inputGraphContextUnits = c.inputGraphContextUnits;
testMatcher.inputGraphEdges = c.inputGraphEdges;
assertTrue( testMatcher.inputGraphContextUnits.contains(ctxUnit1));
assertTrue( testMatcher.inputGraphContextUnits.contains(ctxUnit2));
assertTrue( testMatcher.inputGraphContextUnits.contains(ctxUnit3));
assertEquals(expectedCtxUnits.size(), testMatcher.inputGraphContextUnits.size());
assertTrue( testMatcher.inputGraphEdges.contains(edge1));
assertTrue( testMatcher.inputGraphEdges.contains(edge2));
assertEquals(expectedEdges.size(), testMatcher.inputGraphEdges.size());
}
@Test
public void testConversionGEO(){
double lat = 45.76849,
lon = 7.564732,
radius = 20;
// creates input model
Model model = ModelFactory.createDefaultModel();
Resource ctx1 = model.createResource(PrissmaProperties.DEFAULT + "ctx1");
Resource usr1 = model.createResource(PrissmaProperties.DEFAULT + "usr1");
Resource env1 = model.createResource(PrissmaProperties.DEFAULT + "env1");
Resource poi1 = model.createResource(PrissmaProperties.DEFAULT + "poi1");
model.add(ctx1, PrissmaProperties.pUsr, usr1);
model.add(usr1, PrissmaProperties.pKnows, "computer programming" );
model.add(ctx1, PrissmaProperties.pEnv, env1);
model.add(env1, PrissmaProperties.pPOI, poi1 );
model.add(poi1, PrissmaProperties.pLat, model.createTypedLiteral(lat));
model.add(poi1, PrissmaProperties.pLon, model.createTypedLiteral(lon));
model.add(poi1, PrissmaProperties.pRad, model.createTypedLiteral(radius));
// create some prissma property first
Model model2 = ModelFactory.createDefaultModel();
Property prissmaUser = ResourceFactory.createProperty(PrissmaProperties.PRISSMA, "user");
Property foafInterest = ResourceFactory.createProperty(PrissmaProperties.FOAF, "knows");
// create ctx units
ContextUnit ctxUnit1 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit1.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "ctx1");
ContextUnit ctxUnit2 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "usr1");
ContextUnit ctxUnit3 = new ContextUnit( CtxUnitType.STRING);
ctxUnit3.instance = ResourceFactory.createPlainLiteral("computer programming");
ContextUnit envUnit1 = new ContextUnit( CtxUnitType.ENTITY);
envUnit1.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "env1");
ContextUnit poiUnit1 = new ContextUnit( CtxUnitType.GEO);
poiUnit1.instance = model2.createResource(PrissmaProperties.DEFAULT + "poi1")
.addLiteral(PrissmaProperties.pLat, lat)
.addLiteral(PrissmaProperties.pLat, lon)
.addLiteral(PrissmaProperties.pRad, radius);
// poiUnit1.instance = ResourceFactory.createResource("http://example/poi1")
// .addLiteral(PrissmaProperties.pLat, lat)
// .addLiteral(PrissmaProperties.pLat, lon)
// .addLiteral(PrissmaProperties.pRad, radius);
// edges
Edge edge1 = new Edge();
edge1.label = prissmaUser;
edge1.v1 = ctxUnit1;
edge1.v2 = ctxUnit2;
Edge edge2 = new Edge();
edge2.label = foafInterest;
edge2.v1 = ctxUnit2;
edge2.v2 = ctxUnit3;
Edge edge3 = new Edge();
edge3.label = PrissmaProperties.pEnv;
edge3.v1 = ctxUnit1;
edge3.v2 = envUnit1;
Edge edge4 = new Edge();
edge4.label = PrissmaProperties.pPOI;
edge4.v1 = envUnit1;
edge4.v2 = poiUnit1;
// Set input graph
Set<ContextUnit> expectedCtxUnits = new HashSet<ContextUnit>();
Set<Edge> expectedEdges = new HashSet<Edge>();
expectedCtxUnits.add(ctxUnit1);
expectedCtxUnits.add(ctxUnit2);
expectedCtxUnits.add(ctxUnit3);
expectedCtxUnits.add(envUnit1);
expectedCtxUnits.add(poiUnit1);
expectedEdges.add(edge1);
expectedEdges.add(edge2);
expectedEdges.add(edge3);
expectedEdges.add(edge4);
this.testMatcher = new Matcher(new Decomposition());
ContextUnitConverter c = new ContextUnitConverter();
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(model);
c.convertInputToUnits(ctxRoot, new ArrayList<String>());
testMatcher.inputGraphContextUnits = c.inputGraphContextUnits;
testMatcher.inputGraphEdges = c.inputGraphEdges;
assertTrue( testMatcher.inputGraphContextUnits.contains(ctxUnit1));
assertTrue( testMatcher.inputGraphContextUnits.contains(ctxUnit2));
assertTrue( testMatcher.inputGraphContextUnits.contains(ctxUnit3));
assertTrue( testMatcher.inputGraphContextUnits.contains(envUnit1));
assertTrue( testMatcher.inputGraphContextUnits.contains(poiUnit1));
assertEquals(expectedCtxUnits.size(), testMatcher.inputGraphContextUnits.size());
assertTrue( testMatcher.inputGraphEdges.contains(edge1));
assertTrue( testMatcher.inputGraphEdges.contains(edge2));
assertTrue( testMatcher.inputGraphEdges.contains(edge3));
assertTrue( testMatcher.inputGraphEdges.contains(edge4));
assertEquals(expectedEdges.size(), testMatcher.inputGraphEdges.size());
}
@Test
public void testSearchSinglePrismSuccess() {
List<URI> expectedResult = new ArrayList<URI>();
try {
expectedResult.add(new URI(PrissmaProperties.DEFAULT + "prism1"));
} catch (URISyntaxException e) {
}
this.testMatcher = new Matcher(new Decomposition());
setupSearchSinglePrismSuccess();
testMatcher.search(null);
assertArrayEquals(expectedResult.toArray(), testMatcher.results.toArray());
}
@Test
public void testSearchSinglePrismFail() {
this.testMatcher = new Matcher(new Decomposition());
setupSearchSinglePrismFail();
testMatcher.search(null);
assertTrue( testMatcher.results.isEmpty());
}
@Test
public void testSearchSinglePrismSimilarSuccess() {
List<URI> expectedResult = new ArrayList<URI>();
try {
expectedResult.add(new URI(PrissmaProperties.DEFAULT + "prism1"));
} catch (URISyntaxException e) {
}
this.testMatcher = new Matcher(new Decomposition());
setupSearchSinglePrismSimilar();
testMatcher.search(null);
assertArrayEquals(expectedResult.toArray(), testMatcher.results.toArray());
}
@Test
public void testSearchSinglePrismModelInputSuccess() {
// creates input model
Model model = createSampleCtxInput();
List<URI> expectedResult = new ArrayList<URI>();
try {
expectedResult.add(new URI(PrissmaProperties.DEFAULT + "prism1"));
} catch (URISyntaxException e) {
}
this.testMatcher = new Matcher(new Decomposition());
setupSearchSinglePrismSuccessModel();
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(model);
testMatcher.search(ctxRoot);
assertArrayEquals(expectedResult.toArray(), testMatcher.results.toArray());
}
private Model createSampleCtxInput() {
Model model = ModelFactory.createDefaultModel();
Resource ctx1 = model.createResource(PrissmaProperties.DEFAULT + "ctx1");
Resource usr1 = model.createResource(PrissmaProperties.DEFAULT + "usr1");
model.add(ctx1, PrissmaProperties.pUsr, usr1);
model.add(usr1, PrissmaProperties.pKnows, "computer programming" );
return model;
}
@Test
public void testSearchAndDecompositionSinglePrismSuccess(){
String prism1URI = PrissmaProperties.DEFAULT + "prism1";
Set<URI> expectedResult = new HashSet<URI>();
try {
expectedResult.add(new URI(prism1URI));
} catch (URISyntaxException e) {
}
Model inputPrism = createSimpleModel();
// add prism
inputPrism.add(ResourceFactory.createResource(prism1URI),
PrissmaProperties.pPurpose,
ResourceFactory.createResource(PrissmaProperties.DEFAULT + "ctx1"));
Decomposer decomposer = new Decomposer();
Decomposition decomp = decomposer.decompose(inputPrism, new Decomposition());
this.testMatcher = new Matcher(decomp);
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(inputPrism);
testMatcher.search(ctxRoot);
Set<URI> prismURIs = testMatcher.results;
assertEquals(expectedResult, prismURIs);
}
@Test
public void testIOSearchAndDecompositionSinglePrismSuccess(){
Model inputPrism = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open( PrissmaProperties.PRISM_PATH_TEST + PrissmaProperties.PRISM1_FILENAME );
if (in != null) {
inputPrism.read(in, null, "TURTLE");
}
String prism1URI = PrissmaProperties.DEFAULT + "prism1";
Set<URI> expectedResult = new HashSet<URI>();
try {
expectedResult.add(new URI(prism1URI));
} catch (URISyntaxException e) {
}
Decomposer decomposer = new Decomposer();
Decomposition decomp = decomposer.decompose(inputPrism, new Decomposition());
this.testMatcher = new Matcher(decomp);
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(inputPrism);
testMatcher.search(ctxRoot);
Set<URI> prismURIs = testMatcher.results;
assertEquals(expectedResult, prismURIs);
}
@Test
public void testIOSearchAndDecompositionMultiplePrismsSuccess(){
// set expected result first
String prism1URI = PrissmaProperties.DEFAULT + "prism2";
Set<URI> expectedResult = new HashSet<URI>();
try {
expectedResult.add(new URI(prism1URI));
} catch (URISyntaxException e) {
}
Decomposer decomposer = new Decomposer();
Decomposition decomp = new Decomposition();
// read all prisms
File dir = new File(PrissmaProperties.PRISM_PATH_TEST);
for (File file : dir.listFiles()) {
if (file.getName().endsWith(".ttl")){
Model inputPrism = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open( PrissmaProperties.PRISM_PATH_TEST + file.getName() );
if (in != null) {
inputPrism.read(in, null, "TURTLE");
decomp = decomposer.decompose(inputPrism, decomp);
}
}
}
// read input ctx
Model actualCtx = ModelFactory.createDefaultModel();
// InputStream in = FileManager.get().open( PrissmaProperties.ACTUAL_CTX_PATH_TEST + PrissmaProperties.ACTUAL_CTX_FILENAME );
InputStream in = FileManager.get().open( PrissmaProperties.ACTUAL_CTX_PATH_TEST + "ctx2.ttl" );
if (in != null) {
actualCtx.read(in, null, "TURTLE");
}
// search for actual ctx.
this.testMatcher = new Matcher(decomp);
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(actualCtx);
testMatcher.search(ctxRoot);
Set<URI> prismURIs = testMatcher.results;
assertEquals(expectedResult, prismURIs);
}
/**
* Precision/recall validation campaign (test 5).
*/
@Test
public void testIOSearchAndDecompositionMultiplePrismsGEOSuccess(){
final int BOUNDARY = 25;
final int CTX_FILES_COUNT = 50;
int truePos = 0, trueNeg = 0,
falsePos = 0, falseNeg = 0;
for (int INDEX = 0 ; INDEX < CTX_FILES_COUNT ; INDEX++){
// set expected result first
String prism3URI = PrissmaProperties.DEFAULT + "prism0";
Set<URI> expectedResult = new HashSet<URI>();
try {
expectedResult.add(new URI(prism3URI));
} catch (URISyntaxException e) {
}
Decomposer decomposer = new Decomposer();
Decomposition decomp = new Decomposition();
// read all prisms
File dir = new File(PrissmaProperties.PRISM_PATH_TEST);
for (File file : dir.listFiles()) {
if (file.getName().endsWith(".ttl")){
Model inputPrism = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open( PrissmaProperties.PRISM_PATH_TEST + file.getName() );
if (in != null) {
inputPrism.read(in, null, "TURTLE");
decomp = decomposer.decompose(inputPrism, decomp);
}
}
}
// read input ctx
Model actualCtx = ModelFactory.createDefaultModel();
InputStream in = FileManager.get().open( PrissmaProperties.ACTUAL_CTX_PATH_TEST + "ctx" + INDEX + ".ttl" );
if (in != null) {
actualCtx.read(in, null, "TURTLE");
}
// search for actual ctx.
this.testMatcher = new Matcher(decomp);
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(actualCtx);
ctxRoot = ContextUnitConverter.switchToClasses(ctxRoot, decomp);
testMatcher.search(ctxRoot);
Set<URI> prismURIs = testMatcher.results;
// assertEquals(expectedResult, prismURIs);
URI targetPrismURI = null;
try {
targetPrismURI = new URI(prism3URI);
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// contexts with id < 5 should match.
// contexts with id >=5 should not match.
if (prismURIs.contains(targetPrismURI) && INDEX < BOUNDARY){
truePos++;
System.out.println("ctx" + INDEX + " matches");
}
else if (prismURIs.contains(targetPrismURI) && INDEX >= BOUNDARY ){
falsePos++;
System.err.println("ctx" + INDEX + " matches");
}
else if (!prismURIs.contains(targetPrismURI) && INDEX < BOUNDARY ){
falseNeg++;
System.err.println("ctx" + INDEX + " does not match");
}
else if (!prismURIs.contains(targetPrismURI) && INDEX >= BOUNDARY ){
trueNeg++;
System.out.println("ctx" + INDEX + " does not match");
}
}
System.out.println("\nTrue Positives\tTrue Negatives\tFalse Positives\tFalse Negatives");
System.out.println(truePos);
System.out.println(trueNeg);
System.out.println(falsePos);
System.out.println(falseNeg);
}
@Test
public void testSpeedStrings(){
Decomposer decomposer = new Decomposer();
Decomposition decomp = new Decomposition();
Model inputPrism = ModelFactory.createDefaultModel();
// decompose
InputStream in = FileManager.get().open( PrissmaProperties.PRISM_PATH_TEST + "prism15.ttl" );
if (in != null) {
inputPrism.read(in, null, "TURTLE");
decomp = decomposer.decompose(inputPrism, decomp);
}
// read input ctx
Model actualCtx = ModelFactory.createDefaultModel();
InputStream inCtx = FileManager.get().open( PrissmaProperties.ACTUAL_CTX_PATH_TEST + "ctx0.ttl" );
if (inCtx != null) {
actualCtx.read(inCtx, null, "TURTLE");
}
// search for actual ctx.
Matcher testMatcher = new Matcher(decomp);
RDFNode ctxRoot = ContextUnitConverter.getRootCtxNode(actualCtx);
ctxRoot = ContextUnitConverter.switchToClasses(ctxRoot, decomp);
long t0 = System.currentTimeMillis();
testMatcher.search(ctxRoot);
long t1 = System.currentTimeMillis();
System.out.println( "PRISSMA search Done in "+(t1-t0)+" msec." );
}
private Model createSimpleModel(){
Model model = ModelFactory.createDefaultModel();
Resource ctx1 = model.createResource(PrissmaProperties.DEFAULT + "ctx1");
Resource usr1 = model.createResource(PrissmaProperties.DEFAULT + "usr1");
model.add(ctx1, PrissmaProperties.pUsr, usr1);
model.add(usr1, PrissmaProperties.pKnows, "computer programming" );
return model;
}
/**
* Set a sample input graph. Same graph used in the decomposition.
* Sets test decomposition containing a single test graph.
* Creates a ctx1-->usr1-->"computer programming" structure.
*/
private void setupSearchSinglePrismSuccess(){
// create some prissma property first
Property prissmaUser = ResourceFactory.createProperty(PrissmaProperties.PRISSMA, "user");
Property foafInterest = ResourceFactory.createProperty(PrissmaProperties.FOAF, "knows");
// create ctx units
ContextUnit ctxUnit1 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit1.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "ctx1");
ContextUnit ctxUnit2 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "usr1");
ContextUnit ctxUnit3 = new ContextUnit( CtxUnitType.STRING);
ctxUnit3.instance = ResourceFactory.createPlainLiteral("computer programming");
// convert ctx units to decomposition elements elements list
DecompItem item0 = new DecompItem(0);
item0.ctxUnit = ctxUnit1;
item0.isCtxUnit = true;
DecompItem item1 = new DecompItem(1);
item1.ctxUnit = ctxUnit2;
item1.isCtxUnit = true;
DecompItem item2 = new DecompItem(2);
item2.ctxUnit = ctxUnit3;
item2.isCtxUnit = true;
//create other decomp items
DecompItem item3 = new DecompItem(3);
Edge edge1 = new Edge();
edge1.label = foafInterest;
edge1.v1 = ctxUnit2;
edge1.v2 = ctxUnit3;
item3.edges.add(edge1);
item3.idAncestor1 = 1;
item3.idAncestor2 = 2;
DecompItem item4 = new DecompItem(4);
Edge edge2 = new Edge();
edge2.label = prissmaUser;
edge2.v1 = ctxUnit1;
edge2.v2 = ctxUnit2;
item4.edges.add(edge2);
item4.idAncestor1 = 0;
item4.idAncestor2 = 3;
item4.prismURISet = new HashSet<URI>();
try {
item4.prismURISet.add(new URI(PrissmaProperties.DEFAULT + "prism1"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
// add converted ctx units to decomposition
testMatcher.decomp.elements.add(item0.id, item0);
testMatcher.decomp.elements.add(item1.id, item1);
testMatcher.decomp.elements.add(item2.id, item2);
testMatcher.decomp.elements.add(item3.id, item3);
testMatcher.decomp.elements.add(item4.id, item4);
// Set input graph
testMatcher.inputGraphContextUnits.add(ctxUnit1);
testMatcher.inputGraphContextUnits.add(ctxUnit2);
testMatcher.inputGraphContextUnits.add(ctxUnit3);
testMatcher.inputGraphEdges.add(edge1);
testMatcher.inputGraphEdges.add(edge2);
}
/**
* Set a sample input graph. Same graph used in the decomposition.
* Sets test decomposition containing a single test graph.
* Creates a ctx1-->usr1-->"computer programming" structure.
*/
private void setupSearchSinglePrismFail(){
// create some prissma property first
Property prissmaUser = ResourceFactory.createProperty(PrissmaProperties.PRISSMA, "user");
Property foafInterest = ResourceFactory.createProperty(PrissmaProperties.FOAF, "knows");
// create ctx units
ContextUnit ctxUnit1 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit1.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "ctx1");
ContextUnit ctxUnit2 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "usr1");
ContextUnit ctxUnit3 = new ContextUnit( CtxUnitType.STRING);
ctxUnit3.instance = ResourceFactory.createPlainLiteral("computer programming");
ContextUnit ctxUnit2Wrong = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2Wrong.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "WRONG-USER");
ContextUnit ctxUnit3Similar = new ContextUnit( CtxUnitType.STRING);
ctxUnit3Similar.instance = ResourceFactory.createPlainLiteral("computer programming languages");
// convert ctx units to decomposition elements elements list
DecompItem item1 = new DecompItem(0);
item1.ctxUnit = ctxUnit1;
item1.isCtxUnit = true;
DecompItem item2 = new DecompItem(1);
item2.ctxUnit = ctxUnit2;
item2.isCtxUnit = true;
DecompItem item3 = new DecompItem(2);
item3.ctxUnit = ctxUnit3;
item3.isCtxUnit = true;
//create other decomp items
DecompItem item4 = new DecompItem(3);
Edge edge1 = new Edge();
edge1.label = prissmaUser;
edge1.v1 = ctxUnit1;
edge1.v2 = ctxUnit2;
item4.edges.add(edge1);
item4.idAncestor1 = 0;
item4.idAncestor2 = 3;
DecompItem item5 = new DecompItem(4);
Edge edge2 = new Edge();
edge2.label = foafInterest;
edge2.v1 = ctxUnit2;
edge2.v2 = ctxUnit3;
item5.edges.add(edge2);
item5.idAncestor1 = 1;
item5.idAncestor2 = 2;
item5.prismURISet = new HashSet<URI>();
try {
item5.prismURISet.add(new URI(PrissmaProperties.DEFAULT + "prism1"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
// add converted ctx units to decomposition
testMatcher.decomp.elements.add(item1.id, item1);
testMatcher.decomp.elements.add(item2.id, item2);
testMatcher.decomp.elements.add(item3.id, item3);
testMatcher.decomp.elements.add(item4.id, item4);
testMatcher.decomp.elements.add(item5.id, item5);
// Set input graph
testMatcher.inputGraphContextUnits.add(ctxUnit1);
testMatcher.inputGraphContextUnits.add(ctxUnit2Wrong);
testMatcher.inputGraphContextUnits.add(ctxUnit3);
testMatcher.inputGraphEdges.add(edge1);
testMatcher.inputGraphEdges.add(edge2);
}
/**
* Set a sample input graph. Same graph used in the decomposition.
* Sets test decomposition containing a single test graph.
* Creates a ctx1-->usr1-->"computer programming" structure.
*/
private void setupSearchSinglePrismSimilar(){
// create some prissma property first
Property prissmaUser = ResourceFactory.createProperty(PrissmaProperties.PRISSMA, "user");
Property foafInterest = ResourceFactory.createProperty(PrissmaProperties.FOAF, "knows");
// create ctx units
ContextUnit ctxUnit1 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit1.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "ctx1");
ContextUnit ctxUnit2 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "usr1");
ContextUnit ctxUnit3 = new ContextUnit( CtxUnitType.STRING);
ctxUnit3.instance = ResourceFactory.createPlainLiteral("computer programming");
ContextUnit ctxUnit2Wrong = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2Wrong.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "WRONG-USER");
ContextUnit ctxUnit3Similar = new ContextUnit( CtxUnitType.STRING);
ctxUnit3Similar.instance = ResourceFactory.createPlainLiteral("computer programming languages");
// convert ctx units to decomposition elements elements list
DecompItem item1 = new DecompItem(0);
item1.ctxUnit = ctxUnit1;
item1.isCtxUnit = true;
DecompItem item2 = new DecompItem(1);
item2.ctxUnit = ctxUnit2;
item2.isCtxUnit = true;
DecompItem item3 = new DecompItem(2);
item3.ctxUnit = ctxUnit3;
item3.isCtxUnit = true;
//create other decomp items
DecompItem item4 = new DecompItem(3);
Edge edge1 = new Edge();
edge1.label = prissmaUser;
edge1.v1 = ctxUnit1;
edge1.v2 = ctxUnit2;
item4.edges.add(edge1);
item4.idAncestor1 = 0;
item4.idAncestor2 = 3;
DecompItem item5 = new DecompItem(4);
Edge edge2 = new Edge();
edge2.label = foafInterest;
edge2.v1 = ctxUnit2;
edge2.v2 = ctxUnit3;
item5.edges.add(edge2);
item5.idAncestor1 = 1;
item5.idAncestor2 = 2;
item5.prismURISet = new HashSet<URI>();
try {
item5.prismURISet.add(new URI(PrissmaProperties.DEFAULT + "prism1"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
// add converted ctx units to decomposition
testMatcher.decomp.elements.add(item1.id, item1);
testMatcher.decomp.elements.add(item2.id, item2);
testMatcher.decomp.elements.add(item3.id, item3);
testMatcher.decomp.elements.add(item4.id, item4);
testMatcher.decomp.elements.add(item5.id, item5);
// Set input graph
testMatcher.inputGraphContextUnits.add(ctxUnit1);
testMatcher.inputGraphContextUnits.add(ctxUnit2);
testMatcher.inputGraphContextUnits.add(ctxUnit3Similar);
testMatcher.inputGraphEdges.add(edge1);
testMatcher.inputGraphEdges.add(edge2);
}
/**
* Set a sample input graph. Same graph used in the decomposition.
* Sets test decomposition containing a single test graph.
* Creates a ctx1-->usr1-->"computer programming" structure.
*/
private void setupSearchSinglePrismSuccessModel(){
// create some prissma property first
Property prissmaUser = ResourceFactory.createProperty(PrissmaProperties.PRISSMA, "user");
Property foafInterest = ResourceFactory.createProperty(PrissmaProperties.FOAF, "knows");
// create ctx units
ContextUnit ctxUnit1 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit1.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "ctx1");
ContextUnit ctxUnit2 = new ContextUnit( CtxUnitType.ENTITY);
ctxUnit2.instance = ResourceFactory.createResource(PrissmaProperties.DEFAULT + "usr1");
ContextUnit ctxUnit3 = new ContextUnit( CtxUnitType.STRING);
ctxUnit3.instance = ResourceFactory.createPlainLiteral("computer programming");
// convert ctx units to decomposition elements elements list
DecompItem item1 = new DecompItem(1);
item1.ctxUnit = ctxUnit1;
item1.isCtxUnit = true;
DecompItem item2 = new DecompItem(2);
item2.ctxUnit = ctxUnit2;
item2.isCtxUnit = true;
DecompItem item3 = new DecompItem(3);
item3.ctxUnit = ctxUnit3;
item3.isCtxUnit = true;
//create other decomp items
DecompItem item4 = new DecompItem(4);
Edge edge1 = new Edge();
edge1.label = prissmaUser;
edge1.v1 = ctxUnit1;
edge1.v2 = ctxUnit2;
item4.edges.add(edge1);
item4.idAncestor1 = 1;
item4.idAncestor2 = 2;
DecompItem item5 = new DecompItem(5);
Edge edge2 = new Edge();
edge2.label = foafInterest;
edge2.v1 = ctxUnit2;
edge2.v2 = ctxUnit3;
item5.edges.add(edge2);
item5.idAncestor1 = 4;
item5.idAncestor2 = 3;
item5.prismURISet = new HashSet<URI>();
try {
item5.prismURISet.add(new URI(PrissmaProperties.DEFAULT + "prism1"));
} catch (URISyntaxException e) {
e.printStackTrace();
}
// add converted ctx units to decomposition
testMatcher.decomp.elements.add(item1.id, item1);
testMatcher.decomp.elements.add(item2.id, item2);
testMatcher.decomp.elements.add(item3.id, item3);
testMatcher.decomp.elements.add(item4.id, item4);
testMatcher.decomp.elements.add(item5.id, item5);
}
}