1   package eu.fbk.knowledgestore;
2   
3   import java.util.Date;
4   import java.util.GregorianCalendar;
5   import java.util.HashMap;
6   import java.util.Map;
7   import java.util.Set;
8   
9   import com.google.common.collect.ImmutableBiMap;
10  import com.google.common.collect.ImmutableMap;
11  import com.google.common.collect.Maps;
12  
13  import org.junit.Ignore;
14  import org.junit.Test;
15  import org.openrdf.model.URI;
16  import org.openrdf.model.impl.URIImpl;
17  import org.openrdf.model.vocabulary.DCTERMS;
18  import org.openrdf.model.vocabulary.RDF;
19  
20  import eu.fbk.knowledgestore.data.Data;
21  import eu.fbk.knowledgestore.data.Record;
22  import eu.fbk.knowledgestore.data.XPath;
23  import eu.fbk.knowledgestore.vocabulary.KS;
24  import eu.fbk.knowledgestore.vocabulary.NFO;
25  import eu.fbk.knowledgestore.vocabulary.NIE;
26  
27  public class XPathTest {
28  
29      @Test
30      public void test7() {
31  
32          final Record record = Record.create(new URIImpl("ex:id"));
33          record.set(new URIImpl(KS.NAMESPACE + "p"), new URIImpl(KS.NAMESPACE + "x"));
34          System.out.println(record.toString(Data.getNamespaceMap(), true));
35  
36          // final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
37          // final XPath xpath = XPath.parse("ks:p = \\ks:x");
38          final XPath xpath = XPath.parse("ks:p = $$", new URIImpl(KS.NAMESPACE + "x"));
39  
40          final Map<URI, Set<Object>> map = Maps.newHashMap();
41          xpath.decompose(map);
42          System.out.println(map);
43  
44          System.out.println(xpath.eval(record));
45      }
46  
47      @Ignore
48      @Test
49      public void test5() {
50  
51          final long now = System.currentTimeMillis();
52  
53          final Record record = Record.create(new URIImpl("ex:id"));
54          record.set(new URIImpl(KS.NAMESPACE + "p"), new Date(now));
55          System.out.println(record.toString(Data.getNamespaceMap(), true));
56  
57          // final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
58          final XPath xpath = XPath.parse("ks:p > $$ and ks:p < $$", new Date(now - 5000), new Date(
59                  now + 5000));
60  
61          final Map<URI, Set<Object>> map = Maps.newHashMap();
62          xpath.decompose(map);
63          System.out.println(map);
64  
65          System.out.println(xpath.eval(record));
66      }
67  
68      @Ignore
69      @Test
70      public void test4() {
71  
72          final Record record = Record.create(new URIImpl("ex:id"));
73          record.set(new URIImpl(KS.NAMESPACE + "p"), "test");
74          System.out.println(record.toString(Data.getNamespaceMap(), true));
75  
76          // final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
77          final XPath xpath = XPath.parse("ks:p > '' and ks:p <= 'test'");
78  
79          final Map<URI, Set<Object>> map = Maps.newHashMap();
80          xpath.decompose(map);
81          System.out.println(map);
82  
83          System.out.println(xpath.eval(record));
84      }
85  
86      @Ignore
87      @Test
88      public void test3() {
89  
90          final Record record = Record.create(new URIImpl("ex:id"));
91          record.set(new URIImpl(KS.NAMESPACE + "boolean"), false);
92          record.set(new URIImpl(KS.NAMESPACE + "test"), true);
93          System.out.println(record.toString(Data.getNamespaceMap(), true));
94  
95          // final XPath xpath = XPath.parse("ks:test = strdt('true', \\xsd:boolean)");
96          final XPath xpath = XPath.parse("ks:boolean = false");
97  
98          final Map<URI, Set<Object>> map = Maps.newHashMap();
99          xpath.decompose(map);
100         System.out.println(map);
101 
102         System.out.println(xpath.eval(record));
103     }
104 
105     @Ignore
106     @Test
107     public void test2() {
108 
109         final Record record = Record.create(new URIImpl("ex:id"));
110         record.set(new URIImpl(KS.NAMESPACE + "pippo"), "pioppo");
111         System.out.println(record.toString(Data.getNamespaceMap(), true));
112 
113         final XPath xpath = XPath.parse("ks:pippo = 'pioppo'");
114         System.out.println(xpath.evalBoolean(record));
115     }
116 
117     @Ignore
118     @Test
119     public void test() {
120 
121         System.out.println(XPath.parse("dct:test = $$", 55));
122 
123         final XPath xpath2 = XPath.parse("dct:created >= dateTime('2012-01-01') " //
124                 + "and dct:created < dateTime('2012-01-31') " //
125                 + "and dct:source = \\ks:test ");
126         final Map<URI, Set<Object>> map2 = new HashMap<>();
127         xpath2.decompose(map2);
128         System.out.println(map2);
129 
130         final XPath xpath0 = XPath.parse("rdfs:comment = 'comment # 0'");
131         System.out.println(xpath0);
132 
133         final Record resource = getMockResource();
134         // final XPath xpath = XPath.create("with dct: <" + DCTERMS.NAMESPACE + "> : "
135         // + "./nie:isStoredAs[/dct:creator = 'John']/dct:issued >= 1007 "
136         // + "and dct:title = 'This is the news title'" + " and rdf:type = \\ks:Resource",
137         // ImmutableBiMap.of("nie", NIE.NAMESPACE, "rdf", RDF.NAMESPACE));
138         System.out.println(XPath.constant(5, 3, new URIImpl("test:a"), "bla"));
139         System.out.println(XPath.parse("uri(sequence('test:a', 'test:b', 13))").eval(resource));
140         System.out.println(XPath.compose("and", XPath.constant(false),
141                 XPath.parse(ImmutableMap.of("dct", "sesame:nil:"), "dct:title = 'test'")));
142         XPath xpath = XPath.parse(ImmutableMap.of("ks", "sesame:nil:"),
143                 "\\ks:Resource = uri(sequence('sesame:nil:Resource', 'fd'))");
144         System.out.println(xpath);
145         // System.out.println(xpath.eval(resource));
146         System.out.println(xpath.getHead());
147         System.out.println(xpath.getBody());
148         System.out.println(xpath.getNamespaces());
149         System.out.println(xpath.getProperties());
150 
151         xpath = XPath.parse(ImmutableBiMap.of("nie", NIE.NAMESPACE, "rdf", RDF.NAMESPACE),
152                 "with dct: <" + DCTERMS.NAMESPACE + "> : /nie:isStoredAs >= 1008"
153                         + "and ./nie:isStoredAs[/dct:creator = 'John']/dct:issued >= 1007 "
154                         + "and dct:title = 'This is the news title'"
155                         + " and rdf:type = \\ks:Resource");
156         final Map<URI, Set<Object>> map = Maps.newHashMap();
157         final XPath remaining = xpath.decompose(map);
158         System.out.println(xpath.evalBoolean(resource));
159         System.out.println("*** remaining: " + remaining);
160         System.out.println("*** map: " + map);
161         // final long ts = System.nanoTime();
162         // for (int i = 0; i < 100000; ++i) {
163         // xpath.evalBoolean(resource);
164         // }
165         // System.out.println((System.nanoTime() - ts) / 100000);
166         //
167         // System.out.println(condition);
168         // System.out.println(condition.apply(resource));
169     }
170 
171     public static Record getMockResource() {
172         final GregorianCalendar calendar = new GregorianCalendar();
173         calendar.set(2013, 9, 23);
174 
175         final Record rep = Record.create();
176         rep.setID(new URIImpl("ks:r15_rep"));
177         rep.set(RDF.TYPE, KS.REPRESENTATION);
178         rep.set(NFO.FILE_NAME, "r15.txt");
179         rep.set(NFO.FILE_SIZE, 1533L);
180         rep.set(NFO.FILE_CREATED, new Date());
181         rep.set(NIE.MIME_TYPE, "text/plain");
182         rep.set(DCTERMS.CREATOR, "John", "Steve", "Mark");
183         rep.set(DCTERMS.ISSUED, 1000, 1005, 1007);
184 
185         final Record resource = Record.create();
186         resource.setID(new URIImpl("ks:r15"));
187         resource.set(RDF.TYPE, KS.RESOURCE);
188         resource.set(DCTERMS.TITLE, "This is the news title");
189         resource.set(DCTERMS.ISSUED, calendar);
190         resource.set(NIE.IS_STORED_AS, rep);
191         return resource;
192     }
193 
194 }