Change order of attribute payloads in attribute queries

Change-Id: Ifae409a53d93b9ce17b663d4ebe9d2b7d80c3e0c
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
index 3fc9ea5..b69bc75 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestAttributeIndex.java
@@ -2,6 +2,8 @@
 
 import static org.junit.Assert.assertEquals;
 
+import static de.ids_mannheim.korap.TestSimple.*;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -11,13 +13,17 @@
 import org.apache.lucene.search.spans.SpanTermQuery;
 import org.junit.Test;
 
+import de.ids_mannheim.korap.Krill;
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.query.SpanAttributeQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanWithAttributeQuery;
+import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 import de.ids_mannheim.korap.response.Result;
 
+import de.ids_mannheim.korap.util.QueryException;
+
 public class TestAttributeIndex {
 
     private KrillIndex ki = new KrillIndex();
@@ -37,28 +43,28 @@
                 + "<>:s$<b>64<i>0<i>5<i>5<b>0<s>3|"
                 + "<>:div$<b>64<i>0<i>2<i>2<b>0<s>2|"
                 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>1|"
-                + "@:class=header$<b>17<i>3<s>1|@:class=header$<b>17<i>2<s>2]"
+                + "@:class=header$<b>17<s>1<i>3|@:class=header$<b>17<s>2<i>2]"
 
                 + "[(1-2)s:e|_2$<i>1<i>2|"
-                + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>1|@:class=header$<b>17<i>2<s>1]"
+                + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>1|@:class=header$<b>17<s>1<i>2]"
 
                 + "[(2-3)s:e|_3$<i>2<i>3|"
-                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=time$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=time$<b>17<s>1<i>5]"
 
                 + "[(3-4)s:a|_4$<i>3<i>4|"
-                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=header$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=header$<b>17<s>1<i>5]"
 
                 + "[(4-5)s:b|_5$<i>4<i>5|" + "<>:a$<b>64<i>4<i>5<i>5<b>0<s>2|"
                 + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|"
-                + "@:class=header$<b>17<i>5<s>2]"
+                + "@:class=header$<b>17<s>2<i>5]"
 
                 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>2|"
                 + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>1|"
-                + "@:class=header$<b>17<i>6<s>1]"
+                + "@:class=header$<b>17<s>1<i>6]"
 
                 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
                 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1"
-                + "|@:class=header$<b>17<i>7<s>1|@:class=header$<b>17<i>7<s>2]");
+                + "|@:class=header$<b>17<s>1<i>7|@:class=header$<b>17<s>2<i>7]");
 
         return fd;
     }
@@ -70,26 +76,26 @@
         fd.addTV("base", "bcbabd", "[(0-1)s:b|_1$<i>0<i>1|"
                 + "<>:s<b>64<i>0<i>5<i>5<b>0<s>2|"
                 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>1|"
-                + "@:class=header$<b>17<i>3<s>1|@:class=title$<b>17<i>3<s>1|@:class=book$<b>17<i>3<s>1]"
+                + "@:class=header$<b>17<s>1<i>3|@:class=title$<b>17<s>1<i>3|@:class=book$<b>17<s>1<i>3]"
 
                 + "[(1-2)s:c|_2$<i>1<i>2|" + "<>:div$<b>64<i>1<i>2<i>2<b>0<s>1|"
-                + "@:class=header$<b>17<i>2<s>1|@:class=title$<b>17<i>2<s>1]"
+                + "@:class=header$<b>17<s>1<i>2|@:class=title$<b>17<s>1<i>2]"
 
                 + "[(2-3)s:b|_3$<i>2<i>3|"
-                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=book$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>2<i>5<i>5<b>0<s>1|@:class=book$<b>17<s>1<i>5]"
 
                 + "[(3-4)s:a|_4$<i>3<i>4|"
-                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<s>1<i>5]"
 
                 + "[(4-5)s:b|_5$<i>4<i>5|" + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|"
-                + "@:class=header$<b>17<i>5<s>1|@:class=book$<b>17<i>5<s>1|@:class=title$<b>17<i>5<s>1]"
+                + "@:class=header$<b>17<s>1<i>5|@:class=book$<b>17<s>1<i>5|@:class=title$<b>17<s>1<i>5]"
 
                 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>2|"
-                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
+                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<s>1<i>6]"
 
                 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
                 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1|"
-                + "@:class=header$<b>17<i>7<s>1|@:class=title$<b>17<i>7<s>1]");
+                + "@:class=header$<b>17<s>1<i>7|@:class=title$<b>17<s>1<i>7]");
 
         return fd;
     }
@@ -101,28 +107,28 @@
         fd.addTV("base", "bcbabd", "[(0-1)s:b|_1$<i>0<i>1|"
                 + "<>:div$<b>64<i>0<i>3<i>3<b>0<s>2|"
                 + "<>:s$<b>64<i>0<i>5<i>5<b>0<s>1|"
-                + "@:class=header$<b>17<i>3<s>2|@:class=book$<b>17<i>5<s>1|@:class=book$<b>17<i>3<s>2]"
+                + "@:class=header$<b>17<s>2<i>3|@:class=book$<b>17<s>1<i>5|@:class=book$<b>17<s>2<i>3]"
 
                 + "[(1-2)s:e|_2$<i>1<i>2|" + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>2|"
                 + "<>:div$<b>64<i>1<i>2<i>2<b>0<s>1|"
-                + "@:class=book$<b>17<i>2<s>2|@:class=header$<b>17<i>2<s>1]"
+                + "@:class=book$<b>17<s>2<i>2|@:class=header$<b>17<s>1<i>2]"
 
                 + "[(2-3)s:b|_3$<i>2<i>3|" + "<>:a$<b>64<i>1<i>2<i>2<b>0<s>2|"
                 + "<>:div$<b>64<i>2<i>3<i>5<b>0<s>1|"
-                + "@:class=header$<b>17<i>2<s>2|@:class=book$<b>17<i>5<s>1]"
+                + "@:class=header$<b>17<s>2<i>2|@:class=book$<b>17<s>1<i>5]"
 
                 + "[(3-4)s:a|_4$<i>3<i>4|"
-                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>3<i>5<i>5<b>0<s>1|@:class=title$<b>17<s>1<i>5]"
 
                 + "[(4-5)s:b|_5$<i>4<i>5|"
-                + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|@:class=header$<b>17<i>5<s>1|@:class=book$<b>17<i>5<s>1]"
+                + "<>:div$<b>64<i>4<i>5<i>5<b>0<s>1|@:class=header$<b>17<s>1<i>5|@:class=book$<b>17<s>1<i>5]"
 
                 + "[(5-6)s:d|_6$<i>5<i>6|" + "<>:s$<b>64<i>5<i>6<i>6<b>0<s>1|"
-                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<i>6<s>1]"
+                + "<>:div$<b>64<i>5<i>6<i>6<b>0<s>1|@:class=header$<b>17<s>1<i>6]"
 
                 + "[(6-7)s:d|_7$<i>6<i>7|" + "<>:s$<b>64<i>6<i>7<i>7<b>0<s>2|"
                 + "<>:div$<b>64<i>6<i>7<i>7<b>0<s>1|"
-                + "@:class=header$<b>17<i>7<s>1|@:class=book$<b>17<i>7<s>2]");
+                + "@:class=header$<b>17<s>1<i>7|@:class=book$<b>17<s>2<i>7]");
 
         return fd;
     }
@@ -223,6 +229,11 @@
         sq = new SpanWithAttributeQuery(new SpanElementQuery("base", "div"),
                 sql, true);
 
+        assertEquals("spanElementWithAttribute(<base:div />, "+
+                     "[spanAttribute(base:@:class=header), "+
+                     "spanAttribute(!base:@:class=book), "+
+                     "spanAttribute(!base:@:class=title)])", sq.toString());
+        
         kr = ki.search(sq, (short) 10);
         assertEquals((long) 1, kr.getTotalResults());
         assertEquals(5, kr.getMatch(0).getStartPos());
@@ -452,4 +463,45 @@
         kr = ki.search(swaq, (short) 10);
     }
 
+
+    @Test
+    public void testAttributeRealIndex () throws QueryException, IOException {
+        // Construct index
+        KrillIndex ki = new KrillIndex();
+        // Indexing test files
+        ki.addDoc(getClass().getResourceAsStream("/others/REDEW-DOC1-00001.json.gz"),
+                    true);
+        ki.commit();
+
+        SpanTermQuery stq = new SpanTermQuery(new Term("tokens", "@:dereko/s:mode:direct"));
+        kr = ki.search(stq, (short) 10);
+        assertEquals((long) 4, kr.getTotalResults());
+        
+
+        SpanAttributeQuery saq = new SpanAttributeQuery(
+            new SpanTermQuery(new Term("tokens", "@:dereko/s:mode:direct")), true);
+
+        SpanElementQuery seq = new SpanElementQuery("tokens", "dereko/s:said");
+
+        // div with @class=header
+        SpanQuery sq = new SpanWithAttributeQuery(seq, saq, true);
+        assertEquals("spanElementWithAttribute(<tokens:dereko/s:said />, " +
+                     "spanAttribute(tokens:@:dereko/s:mode:direct))", sq.toString());
+
+        kr = ki.search(sq, (short) 10);
+        assertEquals((long) 4, kr.getTotalResults());
+
+
+        String filepath = getClass()
+                .getResource(
+                        "/queries/attribute/element-single-attribute-2.jsonld")
+                .getFile();
+
+        SpanQueryWrapper sqw = getJsonQuery(filepath);        
+        Krill krill = new Krill(sqw);
+        assertEquals("spanElementWithAttribute(<tokens:dereko/s:said />, " +
+                     "spanAttribute(tokens:@:dereko/s:mode:direct))", krill.getSpanQuery().toString());
+        Result kr = krill.apply(ki);
+        assertEquals(kr.getTotalResults(), 4);
+    }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
index 8f50f41..e232499 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRelationIndex.java
@@ -161,8 +161,8 @@
                         + "<:child-of$<b>35<i>0<i>38<i>0<i>3<i>7<i>0<i>1<s>2<s>3<s>0|"
                         + "<:child-of$<b>35<i>0<i>38<i>4<i>9<i>7<i>1<i>7<s>2<s>2<s>0|"
                         + "<:dep$<b>32<i>0<s>1<s>1<s>0|"
-                        + "@:func=sbj$<b>18<i>7<s>4|" // attribute belongs to a relation
-                        + "@:case=nominative$<b>18<i>1<s>3]" // attribute belongs to a relation node
+                        + "@:func=sbj$<b>18<s>4<i>7|" // attribute belongs to a relation
+                        + "@:case=nominative$<b>18<s>3<i>1]" // attribute belongs to a relation node
 
                         + "[(1-2)s:kaufe|_1$<i>4<i>9|pos:V$<s>1|<>:vp$<b>64<i>4<i>38<i>7<b>0<s>2|"
                         + ">:child-of$<b>35<i>4<i>38<i>0<i>38<i>7<i>0<i>7<s>2<s>2<s>0|"
@@ -185,16 +185,16 @@
                         + "<:child-of$<b>35<i>10<i>38<i>21<i>38<i>7<i>4<i>7<s>4<s>2<s>0|"
                         + ">:parent-of$<b>35<i>10<i>38<i>21<i>38<i>7<i>4<i>7<s>4<s>2<s>0|"
                         + "<:dep$<b>32<i>3<s>1<s>1<s>3|"
-                        + "@:func=head$<b>18<i>4<s>3|"
-                        + "@:case=accusative$<b>18<i>4<s>3|" // attribute belongs to a relation node
-                        + "@:case=accusative$<b>18<i>7<s>2]" // attribute belongs to a relation node
+                        + "@:func=head$<b>18<s>3<i>4|"
+                        + "@:case=accusative$<b>18<s>3<i>4|" // attribute belongs to a relation node
+                        + "@:case=accusative$<b>18<s>2<i>7]" // attribute belongs to a relation node
 
                         + "[(3-4)s:Blümen|_3$<i>14<i>20|pos:NN$<s>1|"
                         + ">:child-of$<b>33<i>10<i>24<i>2<i>4<s>1<s>3<s>0|"
                         + "<:dep$<b>32<i>1<s>1<s>1<s>0|"
                         + ">:dep$<b>32<i>2<s>1<s>1<s>2|"
                         + ">:dep$<b>32<i>4<s>1<s>1<s>0|"
-                        + "@:func=obj$<b>18<i>4<s>2]"
+                        + "@:func=obj$<b>18<s>2<i>4]"
 
                         + "[(4-5)s:für|_4$<i>21<i>24|pos:PREP$<s>1|<>:pp$<b>64<i>21<i>38<i>7<b>0<s>2|"
                         + ">:child-of$<b>33<i>21<i>38<i>4<i>7<s>1<s>2<s>0|"
@@ -212,8 +212,8 @@
                         + "<:child-of$<b>34<i>25<i>38<i>7<i>5<s>2<s>1<s>0|"
                         + "<:child-of$<b>34<i>25<i>38<i>7<i>6<s>2<s>1<s>0|"
                         + "<:dep$<b>32<i>6<s>1<s>1<s>3<s>0|"
-                        + "@:func=head$<b>18<i>7<s>3|"
-                        + "@:case=accusative$<b>18<i>7<s>2]" // attribute belongs to a relation node
+                        + "@:func=head$<b>18<s>3<i>7|"
+                        + "@:case=accusative$<b>18<s>2<i>7]" // attribute belongs to a relation node
 
                         + "[(6-7)s:Mutter.|_6$<i>31<i>38|pos:NN$<s>1|"
                         + ">:child-of$<b>33<i>25<i>38<i>5<i>7<s>1<s>2<s>0|"
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java b/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java
index 1458000..a0080ab 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestTermInfo.java
@@ -124,5 +124,20 @@
         assertEquals("startChar", term.getStartChar(), 20);
         assertEquals("endChar", term.getEndChar(), 25);
         assertEquals("depth", term.getDepth(), 0);
+
+        bb.clear();
+        bb.put((byte) 17);   // att PTI
+        bb.putShort((short)1);
+        bb.putInt(25);
+        term = new TermInfo("@:dereko/s:mode:direct", 20, bb).analyze();
+        assertEquals("type", term.getType(), "attr");
+        assertEquals("value", term.getValue(), "mode:direct");
+        assertEquals("foundry", term.getFoundry(), "dereko");
+        assertEquals("layer", term.getLayer(), "s");
+        assertEquals("startPos", term.getStartPos(), 20);
+        assertEquals("endPos", term.getEndPos(), 20);
+        assertEquals("startChar", term.getStartChar(), -1);
+        assertEquals("endChar", term.getEndChar(), -1);
+        assertEquals("depth", term.getDepth(), 0);
     };
 };
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java
index 3a55968..99b2e54 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanRelationQueryJSON.java
@@ -29,7 +29,7 @@
         assertEquals(
                 "focus(#[1,2]spanSegment(<tokens:c:vp />, "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
-                        + "spanWithAttribute(spanAttribute(tokens:type:case:accusative))),sorting)),sorting)",
+                        + "spanWithAttribute(spanAttribute(tokens:@:type:case:accusative))),sorting)),sorting)",
                 sq.toString());
     }
 
@@ -47,7 +47,7 @@
                 // +
                 // "<tokens:c:vp />)), spanWithAttribute(spanAttribute(tokens:type:case:accusative))))",
                 //
-                "focus(#[1,2]spanSegment(spanWithAttribute(spanAttribute(tokens:type:case:accusative)), "
+                "focus(#[1,2]spanSegment(spanWithAttribute(spanAttribute(tokens:@:type:case:accusative)), "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
                         + "<tokens:c:vp />),sorting)),sorting)",
                 sq.toString());
@@ -70,7 +70,7 @@
                 "focus(#[1,2]spanSegment(<tokens:c:vp />, "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
                         + "spanElementWithAttribute(<tokens:c:np />, "
-                        + "spanAttribute(tokens:type:case:accusative))),sorting)),sorting)",
+                        + "spanAttribute(tokens:@:type:case:accusative))),sorting)),sorting)",
                 sq.toString());
     }
 
@@ -86,10 +86,10 @@
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
                 "focus(#[1,2]spanSegment(spanElementWithAttribute(<tokens:c: />, "
-                        + "spanAttribute(tokens:type:case:accusative)), "
+                        + "spanAttribute(tokens:@:type:case:accusative)), "
                         + "focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
                         + "spanElementWithAttribute(<tokens:c: />, "
-                        + "spanAttribute(tokens:type:case:accusative))),sorting)),sorting)",
+                        + "spanAttribute(tokens:@:type:case:accusative))),sorting)),sorting)",
                 sq.toString());
     }
 
@@ -173,7 +173,7 @@
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
                 "focus(#[1,2]spanSegment(<tokens:c:vp />, focus(#2: spanSegment(spanRelation(tokens:>:mate/d:HEAD), "
-                        + "spanElementWithAttribute(<tokens:c:s />, spanAttribute(tokens:type:top))),sorting)),sorting)",
+                        + "spanElementWithAttribute(<tokens:c:s />, spanAttribute(tokens:@:type:top))),sorting)),sorting)",
                 sq.toString());
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java
index 23a1beb..481949d 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestSpanWithAttributeJSON.java
@@ -25,7 +25,7 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:head />, spanAttribute(tokens:type:top))",
+                "spanElementWithAttribute(<tokens:head />, spanAttribute(tokens:@:type:top))",
                 sq.toString());
     }
 
@@ -38,7 +38,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:dereko/s:said />, spanAttribute(tokens:mode:indirects))",
+                "spanElementWithAttribute(<tokens:dereko/s:said />, " +
+                "spanAttribute(tokens:@:dereko/s:mode:direct))",
                 sq.toString());
     }
 
@@ -51,7 +52,7 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:type:top))",
+                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:@:type:top))",
                 sq.toString());
     }
 
@@ -64,7 +65,7 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:type:top))",
+                "spanElementWithAttribute(<tokens:head />, spanAttribute(!tokens:@:type:top))",
                 sq.toString());
     }
     
@@ -78,8 +79,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:type:Zeitschrift), "
-                        + "spanAttribute(!tokens:complete:Y), spanAttribute(tokens:n:0)])",
+                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:@:type:Zeitschrift), "
+                        + "spanAttribute(!tokens:@:complete:Y), spanAttribute(tokens:@:n:0)])",
                 sq.toString());
     }
 
@@ -92,8 +93,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:type:Zeitschrift), "
-                        + "spanAttribute(!tokens:complete:Y), spanAttribute(tokens:n:0)])",
+                "spanElementWithAttribute(<tokens:div />, [spanAttribute(tokens:@:type:Zeitschrift), "
+                        + "spanAttribute(!tokens:@:complete:Y), spanAttribute(tokens:@:n:0)])",
                 sq.toString());
     }
     
@@ -107,9 +108,9 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:type:Zeitschrift)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:complete:Y)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:n:0))])",
+                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:type:Zeitschrift)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:complete:Y)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:n:0))])",
                 sq.toString());
     }
 
@@ -123,9 +124,9 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:type:Zeitschrift)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:complete:Y)), "
-                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:n:0))])",
+                "spanOr([spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:type:Zeitschrift)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:complete:Y)), "
+                        + "spanElementWithAttribute(<tokens:div />, spanAttribute(tokens:@:n:0))])",
                 sq.toString());
     }
     
@@ -138,7 +139,7 @@
                 .getFile();
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
-        assertEquals("spanWithAttribute(spanAttribute(tokens:type:top))",
+        assertEquals("spanWithAttribute(spanAttribute(tokens:@:type:top))",
                 sq.toString());
     }
 
@@ -152,9 +153,9 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanOr([spanWithAttribute(spanAttribute(tokens:type:Zeitschrift)), "
-                        + "spanWithAttribute(spanAttribute(tokens:complete:Y)), "
-                        + "spanWithAttribute(spanAttribute(tokens:n:0))])",
+                "spanOr([spanWithAttribute(spanAttribute(tokens:@:type:Zeitschrift)), "
+                        + "spanWithAttribute(spanAttribute(tokens:@:complete:Y)), "
+                        + "spanWithAttribute(spanAttribute(tokens:@:n:0))])",
                 sq.toString());
     }
 
@@ -169,8 +170,8 @@
         SpanQueryWrapper sqwi = getJsonQuery(filepath);
         SpanQuery sq = sqwi.toQuery();
         assertEquals(
-                "spanWithAttribute([spanAttribute(tokens:type:Zeitschrift), "
-                        + "spanAttribute(!tokens:complete:Y), spanAttribute(tokens:n:0)])",
+                "spanWithAttribute([spanAttribute(tokens:@:type:Zeitschrift), "
+                        + "spanAttribute(!tokens:@:complete:Y), spanAttribute(tokens:@:n:0)])",
                 sq.toString());
     }
 
@@ -187,5 +188,4 @@
         SpanQuery sq = sqwi.toQuery();
         //        assertEquals("tokens:???", sq.toString());
     }
-
 }
diff --git a/src/test/resources/others/REDEW-DOC1-00001.json.gz b/src/test/resources/others/REDEW-DOC1-00001.json.gz
new file mode 100644
index 0000000..d551bfb
--- /dev/null
+++ b/src/test/resources/others/REDEW-DOC1-00001.json.gz
Binary files differ
diff --git a/src/test/resources/queries/attribute/element-single-attribute-2.jsonld b/src/test/resources/queries/attribute/element-single-attribute-2.jsonld
index 59d0c74..79d682a 100644
--- a/src/test/resources/queries/attribute/element-single-attribute-2.jsonld
+++ b/src/test/resources/queries/attribute/element-single-attribute-2.jsonld
@@ -10,7 +10,7 @@
       "@type": "koral:term",
       "key": "mode",
       "match": "match:eq",
-      "value": "indirects"
+      "value": "direct"
     },
     "wrap": {
       "@type": "koral:term",