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
84
85
86
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 }