1   package eu.fbk.rdfpro.util;
2   
3   import java.util.HashSet;
4   import java.util.List;
5   import java.util.Set;
6   import java.util.concurrent.atomic.AtomicInteger;
7   
8   import com.google.common.collect.Lists;
9   
10  import org.junit.Assert;
11  import org.junit.Test;
12  import org.openrdf.model.Resource;
13  import org.openrdf.model.Statement;
14  import org.openrdf.model.URI;
15  import org.openrdf.model.Value;
16  import org.openrdf.model.ValueFactory;
17  import org.openrdf.model.vocabulary.OWL;
18  import org.openrdf.model.vocabulary.XMLSchema;
19  import org.openrdf.rio.RDFHandlerException;
20  
21  import eu.fbk.rdfpro.AbstractRDFHandler;
22  import eu.fbk.rdfpro.RDFSources;
23  import eu.fbk.rdfpro.util.Dictionary;
24  import eu.fbk.rdfpro.util.Statements;
25  
26  public class DictionaryTest {
27  
28      @Test
29      public void test() {
30          final ValueFactory vf = Statements.VALUE_FACTORY;
31          final List<Value> values = Lists.newArrayList();
32          values.add(vf.createLiteral("str"));
33          values.add(vf.createLiteral("str", "en"));
34          values.add(vf.createLiteral("str", "it"));
35          values.add(vf.createLiteral("12", XMLSchema.INT));
36          values.add(vf.createLiteral("13.1", XMLSchema.DECIMAL));
37          values.add(vf.createLiteral("13.5", XMLSchema.FLOAT));
38          values.add(vf.createLiteral("13311", XMLSchema.INTEGER));
39          values.add(vf.createLiteral(true));
40          values.add(OWL.THING);
41          values.add(OWL.THING);
42          final int codes[] = new int[values.size()];
43          final Dictionary d = Dictionary.newMemoryDictionary();
44          for (int i = 0; i < values.size(); ++i) {
45              System.out.println(values.get(i));
46              codes[i] = d.encode(values.get(i));
47          }
48          for (int i = 0; i < values.size(); ++i) {
49              System.out.println(Integer.toHexString(codes[i]));
50              final Value v = d.decode(codes[i]);
51              Assert.assertEquals(values.get(i), v);
52          }
53      }
54  
55      @Test
56      public void test2() throws RDFHandlerException {
57          final Set<Value> set = new HashSet<>();
58          final Dictionary d = Dictionary.newMemoryDictionary();
59          final long ts = System.currentTimeMillis();
60          RDFSources.read(true, true, null, null, "/mnt/data/pikes/data/abox10m.tql.gz").emit(
61                  new AbstractRDFHandler() {
62  
63                      private final AtomicInteger counter = new AtomicInteger(0);
64  
65                      @Override
66                      public void handleStatement(final Statement stmt) throws RDFHandlerException {
67                          final int counter = this.counter.incrementAndGet();
68                          if (counter % 10000 == 0) {
69                              System.out.println(counter);
70                          }
71                          final int sc = d.encode(stmt.getSubject());
72                          final int pc = d.encode(stmt.getPredicate());
73                          final int oc = d.encode(stmt.getObject());
74                          final int cc = d.encode(stmt.getContext());
75                          final Resource sv = (Resource) d.decode(sc);
76                          final URI pv = (URI) d.decode(pc);
77                          final Value ov = d.decode(oc);
78                          final Resource cv = (Resource) d.decode(cc);
79                          Assert.assertEquals(stmt.getSubject(), sv);
80                          Assert.assertEquals(stmt.getPredicate(), pv);
81                          Assert.assertEquals(stmt.getObject(), ov);
82                          Assert.assertEquals(stmt.getContext(), cv);
83                          // add(stmt.getSubject());
84                          // add(stmt.getPredicate());
85                          // add(stmt.getObject());
86                          // set.add(stmt.getContext());
87                      }
88  
89                      private void add(final Value value) {
90                          set.add(value);
91                          if (value instanceof URI) {
92                              final URI uri = (URI) value;
93                              if (uri.getLocalName().length() > 0) {
94                                  set.add(Statements.VALUE_FACTORY.createURI(uri.getNamespace()));
95                              }
96                          }
97                      }
98  
99                  }, 1);
100         System.out.println(System.currentTimeMillis() - ts);
101         System.out.println(d);
102         System.out.println(set.size());
103     }
104 
105 }