package eu.fbk.knowledgestore;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.junit.Ignore;
import org.junit.Test;
import org.openrdf.model.URI;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.vocabulary.DCTERMS;
import org.openrdf.model.vocabulary.RDF;
import eu.fbk.knowledgestore.data.Data;
import eu.fbk.knowledgestore.data.Record;
import eu.fbk.knowledgestore.data.XPath;
import eu.fbk.knowledgestore.vocabulary.KS;
import eu.fbk.knowledgestore.vocabulary.NFO;
import eu.fbk.knowledgestore.vocabulary.NIE;
public class XPathTest {
@Test
public void test7() {
final Record record = Record.create(new URIImpl("ex:id"));
record.set(new URIImpl(KS.NAMESPACE + "p"), new URIImpl(KS.NAMESPACE + "x"));
System.out.println(record.toString(Data.getNamespaceMap(), true));
// final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
// final XPath xpath = XPath.parse("ks:p = \\ks:x");
final XPath xpath = XPath.parse("ks:p = $$", new URIImpl(KS.NAMESPACE + "x"));
final Map<URI, Set<Object>> map = Maps.newHashMap();
xpath.decompose(map);
System.out.println(map);
System.out.println(xpath.eval(record));
}
@Ignore
@Test
public void test5() {
final long now = System.currentTimeMillis();
final Record record = Record.create(new URIImpl("ex:id"));
record.set(new URIImpl(KS.NAMESPACE + "p"), new Date(now));
System.out.println(record.toString(Data.getNamespaceMap(), true));
// final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
final XPath xpath = XPath.parse("ks:p > $$ and ks:p < $$", new Date(now - 5000), new Date(
now + 5000));
final Map<URI, Set<Object>> map = Maps.newHashMap();
xpath.decompose(map);
System.out.println(map);
System.out.println(xpath.eval(record));
}
@Ignore
@Test
public void test4() {
final Record record = Record.create(new URIImpl("ex:id"));
record.set(new URIImpl(KS.NAMESPACE + "p"), "test");
System.out.println(record.toString(Data.getNamespaceMap(), true));
// final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
final XPath xpath = XPath.parse("ks:p > '' and ks:p <= 'test'");
final Map<URI, Set<Object>> map = Maps.newHashMap();
xpath.decompose(map);
System.out.println(map);
System.out.println(xpath.eval(record));
}
@Ignore
@Test
public void test3() {
final Record record = Record.create(new URIImpl("ex:id"));
record.set(new URIImpl(KS.NAMESPACE + "boolean"), false);
record.set(new URIImpl(KS.NAMESPACE + "test"), true);
System.out.println(record.toString(Data.getNamespaceMap(), true));
// final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
final XPath xpath = XPath.parse("ks:boolean = false");
final Map<URI, Set<Object>> map = Maps.newHashMap();
xpath.decompose(map);
System.out.println(map);
System.out.println(xpath.eval(record));
}
@Ignore
@Test
public void test2() {
final Record record = Record.create(new URIImpl("ex:id"));
record.set(new URIImpl(KS.NAMESPACE + "pippo"), "pioppo");
System.out.println(record.toString(Data.getNamespaceMap(), true));
final XPath xpath = XPath.parse("ks:pippo = 'pioppo'");
System.out.println(xpath.evalBoolean(record));
}
@Ignore
@Test
public void test() {
System.out.println(XPath.parse("dct:test = $$", 55));
final XPath xpath2 = XPath.parse("dct:created >= dateTime('2012-01-01') " //
+ "and dct:created < dateTime('2012-01-31') " //
+ "and dct:source = \\ks:test ");
final Map<URI, Set<Object>> map2 = new HashMap<>();
xpath2.decompose(map2);
System.out.println(map2);
final XPath xpath0 = XPath.parse("rdfs:comment = 'comment # 0'");
System.out.println(xpath0);
final Record resource = getMockResource();
// final XPath xpath = XPath.create("with dct: <" + DCTERMS.NAMESPACE + "> : "
// + "./nie:isStoredAs[/dct:creator = 'John']/dct:issued >= 1007 "
// + "and dct:title = 'This is the news title'" + " and rdf:type = \\ks:Resource",
// ImmutableBiMap.of("nie", NIE.NAMESPACE, "rdf", RDF.NAMESPACE));
System.out.println(XPath.constant(5, 3, new URIImpl("test:a"), "bla"));
System.out.println(XPath.parse("uri(sequence('test:a', 'test:b', 13))").eval(resource));
System.out.println(XPath.compose("and", XPath.constant(false),
XPath.parse(ImmutableMap.of("dct", "sesame:nil:"), "dct:title = 'test'")));
XPath xpath = XPath.parse(ImmutableMap.of("ks", "sesame:nil:"),
"\\ks:Resource = uri(sequence('sesame:nil:Resource', 'fd'))");
System.out.println(xpath);
// System.out.println(xpath.eval(resource));
System.out.println(xpath.getHead());
System.out.println(xpath.getBody());
System.out.println(xpath.getNamespaces());
System.out.println(xpath.getProperties());
xpath = XPath.parse(ImmutableBiMap.of("nie", NIE.NAMESPACE, "rdf", RDF.NAMESPACE),
"with dct: <" + DCTERMS.NAMESPACE + "> : /nie:isStoredAs >= 1008"
+ "and ./nie:isStoredAs[/dct:creator = 'John']/dct:issued >= 1007 "
+ "and dct:title = 'This is the news title'"
+ " and rdf:type = \\ks:Resource");
final Map<URI, Set<Object>> map = Maps.newHashMap();
final XPath remaining = xpath.decompose(map);
System.out.println(xpath.evalBoolean(resource));
System.out.println("*** remaining: " + remaining);
System.out.println("*** map: " + map);
// final long ts = System.nanoTime();
// for (int i = 0; i < 100000; ++i) {
// xpath.evalBoolean(resource);
// }
// System.out.println((System.nanoTime() - ts) / 100000);
//
// System.out.println(condition);
// System.out.println(condition.apply(resource));
}
public static Record getMockResource() {
final GregorianCalendar calendar = new GregorianCalendar();
calendar.set(2013, 9, 23);
final Record rep = Record.create();
rep.setID(new URIImpl("ks:r15_rep"));
rep.set(RDF.TYPE, KS.REPRESENTATION);
rep.set(NFO.FILE_NAME, "r15.txt");
rep.set(NFO.FILE_SIZE, 1533L);
rep.set(NFO.FILE_CREATED, new Date());
rep.set(NIE.MIME_TYPE, "text/plain");
rep.set(DCTERMS.CREATOR, "John", "Steve", "Mark");
rep.set(DCTERMS.ISSUED, 1000, 1005, 1007);
final Record resource = Record.create();
resource.setID(new URIImpl("ks:r15"));
resource.set(RDF.TYPE, KS.RESOURCE);
resource.set(DCTERMS.TITLE, "This is the news title");
resource.set(DCTERMS.ISSUED, calendar);
resource.set(NIE.IS_STORED_AS, rep);
return resource;
}
}