Changed label format in dominance.

Change-Id: Ie724196192c7850a1f01291467fb484752e6d52e
diff --git a/src/main/antlr/annis/AqlParser.g4 b/src/main/antlr/annis/AqlParser.g4
index bd0d8d6..6ef84fe 100644
--- a/src/main/antlr/annis/AqlParser.g4
+++ b/src/main/antlr/annis/AqlParser.g4
@@ -58,7 +58,7 @@
 ;
 
 edgeAnno
-:	((foundry '/')? layer eqOperator)? textSpec
+:	((foundry '/')? (layer COLON)? key eqOperator)? textSpec
 ;
 
 edgeSpec
@@ -76,16 +76,18 @@
 | PRECEDENCE (layer COMMA?)? rangeSpec #RangePrecedence
 ;
 
+// EM: it seems that dominance does not have qName
 dominance
 : DOMINANCE (qName)? (LEFT_CHILD | RIGHT_CHILD)? (anno=edgeSpec)? # DirectDominance
 | DOMINANCE (qName)? STAR # IndirectDominance
 | DOMINANCE (qName)? rangeSpec? # RangeDominance
 ;
 
+// EM: qName is edgeAnno
 pointing
-: POINTING edgeAnno (anno=edgeSpec)? # DirectPointing
-| POINTING edgeAnno (anno=edgeSpec)? STAR # IndirectPointing
-| POINTING edgeAnno (anno=edgeSpec)? COMMA? rangeSpec # RangePointing
+: POINTING (qName | edgeAnno) (anno=edgeSpec)? # DirectPointing
+| POINTING (qName | edgeAnno) (anno=edgeSpec)? STAR # IndirectPointing
+| POINTING (qName | edgeAnno) (anno=edgeSpec)? COMMA? rangeSpec # RangePointing
 
 //: POINTING qName (anno=edgeSpec)? # DirectPointing
 //| POINTING qName (anno=edgeSpec)? STAR # IndirectPointing
@@ -147,6 +149,9 @@
 layer
 : ID;
 
+key
+: ID;
+
 label
 : ID;
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
index 5757625..c193300 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
@@ -709,7 +709,7 @@
                     group = KoralObjectGenerator.makeGroup(KoralOperation.RELATION);
                     Map<String, Object> relation = new HashMap<String, Object>();
                     putAllButGroupType(relation, operatorGroup);
-                    group.put("relation", relation);
+                    group.put("relType", relation);
                 }
                 else if (groupType.equals("sequence")) {
                     group = KoralObjectGenerator.makeGroup(KoralOperation.SEQUENCE);
@@ -875,10 +875,9 @@
                 String edgeSpecType = (String) edgeSpec.get("@type");
                 if (edgeSpecType.equals("koral:termGroup")) {
                     ((ArrayList<Object>) edgeSpec.get("operands")).add(term);
-                    term = edgeSpec;
+//                    term = edgeSpec;
                 }
-                else {
-                    term = edgeSpec;
+//                else {
 //                    term = KoralObjectGenerator.makeTermGroup(KoralTermGroupRelation.AND);
 //                    ArrayList<Object> termGroupOperands = (ArrayList<Object>) term
 //                            .get("operands");
@@ -887,8 +886,11 @@
 //                            .makeTerm();
 //                    constTerm.put("layer", "c");
 //                    termGroupOperands.add(constTerm);
-                }
-                relation.put("label", term);
+//                }
+                term = edgeSpec;
+                Map<String, Object> relType = KoralObjectGenerator.makeRelation();
+                relType.put("wrap", term);
+                relation.put("relType", relType);
             }
             if (star != null)
                 relation.put("boundary",
@@ -900,22 +902,28 @@
             relation = KoralObjectGenerator.makeRelation();
             relation.put("groupType", "relation");
             ParseTree qName = getFirstChildWithCat(operatorNode, "qName");
-            ParseTree edgeSpec = getFirstChildWithCat(operatorNode, "edgeSpec");
+            ParseTree edgeSpec = getFirstChildWithCat(operatorNode, "edgeAnno");
             ParseTree star = getFirstChildWithCat(operatorNode, "*");
             ParseTree rangeSpec = getFirstChildWithCat(operatorNode,
                     "rangeSpec");
             Map<String, Object> term = KoralObjectGenerator
                     .makeTerm();
-            if (qName != null)
+            if (qName != null){
                 term.putAll(parseQNameNode(qName));
-            if (edgeSpec != null)
+                relation.put("wrap", term);
+            }
+            if (edgeSpec != null){
                 term.putAll(parseEdgeSpec(edgeSpec));
+                Map<String, Object> relType = KoralObjectGenerator.makeRelation();
+                relType.put("wrap", term);
+                relation.put("relType", relType);
+            }
             if (star != null)
                 relation.put("boundary",
                         KoralObjectGenerator.makeBoundary(0, null));
             if (rangeSpec != null)
                 relation.put("boundary", boundaryFromRangeSpec(rangeSpec));
-            relation.put("wrap", term);
+            
         }
         else if (operator.equals("precedence")) {
             relation = new HashMap<String, Object>();
@@ -1013,11 +1021,11 @@
         }
     }
 
-
     private Map<String, Object> parseEdgeAnno (ParseTree edgeAnnoSpec) {
         Map<String, Object> edgeAnno = KoralObjectGenerator
                 .makeTerm();
         ParseTree textSpecNode = getFirstChildWithCat(edgeAnnoSpec, "textSpec");
+        ParseTree keyNode = getFirstChildWithCat(edgeAnnoSpec, "key");
         ParseTree layerNode = getFirstChildWithCat(edgeAnnoSpec, "layer");
         ParseTree foundryNode = getFirstChildWithCat(edgeAnnoSpec, "foundry");
         ParseTree matchOperatorNode = getFirstChildWithCat(edgeAnnoSpec,
@@ -1027,7 +1035,9 @@
                     .toStringTree(parser));
         if (layerNode != null)
             edgeAnno.put("layer", layerNode.getChild(0).toStringTree(parser));
-        edgeAnno.putAll(parseTextSpec(textSpecNode));
+        if (keyNode != null)
+            edgeAnno.put("key", keyNode.getChild(0).toStringTree(parser));
+        edgeAnno.putAll(parseTextSpec(textSpecNode, "value"));
         edgeAnno.put("match", parseMatchOperator(matchOperatorNode));
         return edgeAnno;
     }
@@ -1070,16 +1080,19 @@
         return KoralObjectGenerator.makeDistance("w", min, max);
     }
 
-
     private Map<String, Object> parseTextSpec (ParseTree node) {
+        return parseTextSpec(node, "key");
+    }
+    
+    private Map<String, Object> parseTextSpec (ParseTree node, String name) {
         Map<String, Object> term = new HashMap<String, Object>();
         if (hasChild(node, "regex")) {
             term.put("type", "type:regex");
-            term.put("key", node.getChild(0).getChild(0).toStringTree(parser)
+            term.put(name, node.getChild(0).getChild(0).toStringTree(parser)
                     .replaceAll("/", ""));
         }
         else {
-            term.put("key", node.getChild(1).toStringTree(parser));
+            term.put(name, node.getChild(1).toStringTree(parser));
         }
         term.put("match", "match:eq");
         return term;