Cleanup and initial position frames
diff --git a/Changes b/Changes
index 247c82a..3bc1681 100644
--- a/Changes
+++ b/Changes
@@ -4,9 +4,11 @@
- [feature] Added deserialization of SpanSubSpanQueries (margaretha,diewald)
- [bugfix] Null filters are now correctly extended (diewald)
- [cleanup] Refactoring of KorapResult, KorapResponse, KorapQuery,
- deprecated operation:or in favor of operation:junction (diewald)
+ deprecated operation:or in favor of operation:junction,
+ updating test suite for class and frame attributes (diewald)
- [bugfix] Empty class segments are now correctly serialized
in sequences (diewald)
+ - [feature] Started support for position frames (diewald)
0.49.2 2014-12-05
- [documentation] Improved documentation for various queries (margaretha)
diff --git a/src/main/java/de/ids_mannheim/korap/KorapQuery.java b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
index 9ad167c..027161f 100644
--- a/src/main/java/de/ids_mannheim/korap/KorapQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KorapQuery.java
@@ -333,9 +333,10 @@
case "operation:or": // Deprecated in favor of operation:junction
return this._operationJunctionFromJson(operands);
-
+ /*
case "operation:submatch": // Deprecated in favor of korap:reference
return this._operationSubmatchFromJson(json, operands);
+ */
};
// Unknown
@@ -360,7 +361,7 @@
if (operands.size() != 2)
throw new QueryException(705, "Number of operands is not acceptable");
- String frame = "contains";
+ String frame = "isAround";
// Temporary workaround for wrongly set overlaps
if (json.has("frames")) {
JsonNode frameN = json.get("frames");
@@ -372,6 +373,8 @@
}
// <legacyCode>
else if (json.has("frame")) {
+ this.addMessage(0, "Frame is deprecated");
+
JsonNode frameN = json.get("frame");
if (frameN != null && frameN.isValueNode())
frame = frameN.asText().substring(6);
@@ -383,17 +386,17 @@
// Byte flag - should cover all 13 cases, i.e. two bytes long
byte flag = WITHIN;
switch (frame) {
- case "contains":
+ case "isAround":
break;
case "strictlyContains":
flag = REAL_WITHIN;
break;
- case "within":
+ case "isWithin":
break;
- case "startswith":
+ case "startsWith":
flag = STARTSWITH;
break;
- case "endswith":
+ case "endsWith":
flag = ENDSWITH;
break;
case "matches":
@@ -401,6 +404,10 @@
break;
case "overlaps":
flag = OVERLAP;
+ this.addWarning(
+ 769,
+ "Overlap variant currently interpreted as overlap"
+ );
break;
case "overlapsLeft":
// Temporary workaround
@@ -421,6 +428,9 @@
case "strictlyOverlaps":
flag = REAL_OVERLAP;
break;
+
+ // alignsLeft
+
default:
throw new QueryException(706, "Frame type is unknown");
};
@@ -551,6 +561,7 @@
}
// <legacyCode>
else if (json.has("class")) {
+ this.addMessage(0, "Class is deprecated");
number = json.get("class").asInt(0);
};
// </legacyCode>
diff --git a/src/main/java/de/ids_mannheim/korap/query/FrameConstraint.java b/src/main/java/de/ids_mannheim/korap/query/FrameConstraint.java
new file mode 100644
index 0000000..d035463
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/query/FrameConstraint.java
@@ -0,0 +1,202 @@
+package de.ids_mannheim.korap.query;
+import de.ids_mannheim.korap.util.QueryException;
+import java.util.*;
+
+/**
+ * Class representing a frame constraint as a bit vector.
+ *
+ * @author diewald
+ */
+public class FrameConstraint {
+
+ public static final Integer FRAME_ALL = 1024 * 8 - 1;
+ private static final Map<String,Integer> FRAME;
+ static {
+ Map<String, Integer> FRAME_t = new HashMap<>();
+
+ /*
+ * A precedes B
+ *
+ * |-A-|
+ * |-B-|
+ *
+ * A.end < B.start
+ */
+ FRAME_t.put("precedes", 1);
+
+ /*
+ * A precedes B directly
+ *
+ * |-A-|
+ * |-B-|
+ *
+ * A.end == b.start
+ */
+ FRAME_t.put("precedesDirectly", 1 << 1);
+
+ /*
+ * A overlaps B to the left
+ *
+ * |-A-|
+ * |-B-|
+ *
+ * a.end < b.end && a.end > b.start && a.start < b.start
+ */
+ FRAME_t.put("overlapsLeft", 1 << 2);
+
+ /*
+ * A aligns B to the left
+ *
+ * |-A-|
+ * |-B--|
+ *
+ * a.end < b.end && a.start == b.start
+ */
+ FRAME_t.put("alignsLeft", 1 << 3);
+
+ /*
+ * A starts with B
+ *
+ * |-A--|
+ * |-B-|
+ *
+ * a.end > b.end && a.start == b.start
+ */
+ FRAME_t.put("startsWith", 1 << 4);
+
+ /*
+ * A matches B
+ *
+ * |-A-|
+ * |-B-|
+ *
+ * a.end = b.end && a.start = b.start
+ */
+ FRAME_t.put("matches", 1 << 5);
+
+ /*
+ * A is within B
+ *
+ * |-A-|
+ * |--B--|
+ *
+ * a.end < b.end && a.start > b.start
+ */
+ FRAME_t.put("isWithin", 1 << 6);
+
+ /*
+ * A is around B
+ *
+ * |--A--|
+ * |-B-|
+ *
+ * a.start < b.start && a.end > b.end
+ */
+ FRAME_t.put("isAround", 1 << 7);
+
+ /*
+ * A ends with B
+ *
+ * |-A--|
+ * |-B-|
+ *
+ * a.start < b.start && a.end == b.end
+ */
+ FRAME_t.put("endsWith", 1 << 8);
+
+ /*
+ * A aligns B to the right
+ *
+ * |-A-|
+ * |--B-|
+ *
+ * a.start > b.start && a.end == b.end
+ */
+ FRAME_t.put("alignsRight", 1 << 9);
+
+ /*
+ * A overlaps B to the right
+ *
+ * |-A-|
+ * |-B-|
+ *
+ * a.start > b.start && a.start < b.end && && a.end > b.end
+ */
+ FRAME_t.put("overlapsRight", 1 << 10);
+
+ /*
+ * A succeeds B directly
+ *
+ * |-A-|
+ * |-B-|
+ *
+ * a.start == b.end
+ */
+ FRAME_t.put("succeedsDirectly", 1 << 11);
+
+ /*
+ * A succeeds B
+ *
+ * |-A-|
+ * |-B-|
+ *
+ * a.start > b.end
+ */
+ FRAME_t.put("succeeds", 1 << 12);
+ FRAME = Collections.unmodifiableMap(FRAME_t);
+ };
+
+ // Bitvector representing the frame constraint
+ public int vector;
+
+ public FrameConstraint () {
+ this.vector = 0;
+ };
+
+ public FrameConstraint or (String constraint) throws QueryException {
+ int or = FRAME.get(constraint);
+ if (or == 0)
+ throw new QueryException(706, "Frame type is unknown");
+
+ this.vector |= or;
+ return this;
+ };
+
+ public FrameConstraint or (FrameConstraint constraint) {
+ this.vector |= constraint.vector;
+ return this;
+ };
+
+ public FrameConstraint invert () {
+ this.vector ^= FRAME_ALL;
+ return this;
+ };
+
+
+ /**
+ * Check for constraint per bit vector.
+ */
+ public boolean check (int check) {
+ return (this.vector & check) != 0;
+ };
+
+
+ /**
+ * Check for constraint per FrameConstraint.
+ */
+ public boolean check (FrameConstraint check) {
+ return (this.vector & check.vector) != 0;
+ };
+
+
+ /**
+ * Check for constraint per string.
+ */
+ public boolean check (String constraint) throws QueryException {
+ int check = FRAME.get(constraint);
+ if (check == 0)
+ throw new QueryException(706, "Frame type is unknown");
+
+ return this.check(check);
+ };
+};
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanWithinQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanWithinQuery.java
index e0d23cd..c25b187 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanWithinQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanWithinQuery.java
@@ -13,17 +13,18 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermContext;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.util.Bits;
-import org.apache.lucene.util.ToStringUtils;
-import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.spans.SpanQuery;
import org.apache.lucene.search.spans.Spans;
import org.apache.lucene.search.spans.SpanTermQuery;
+import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.ToStringUtils;
import de.ids_mannheim.korap.query.spans.WithinSpans;
import de.ids_mannheim.korap.query.SpanElementQuery;
+
/**
* Matches spans that are within certain elements.
*/
@@ -35,75 +36,80 @@
private boolean collectPayloads;
public static final byte
- OVERLAP = WithinSpans.OVERLAP,
- REAL_OVERLAP = WithinSpans.REAL_OVERLAP,
- WITHIN = WithinSpans.WITHIN,
- REAL_WITHIN = WithinSpans.REAL_WITHIN,
- ENDSWITH = WithinSpans.ENDSWITH,
- STARTSWITH = WithinSpans.STARTSWITH,
- MATCH = WithinSpans.MATCH;
+ OVERLAP = WithinSpans.OVERLAP,
+ REAL_OVERLAP = WithinSpans.REAL_OVERLAP,
+ WITHIN = WithinSpans.WITHIN,
+ REAL_WITHIN = WithinSpans.REAL_WITHIN,
+ ENDSWITH = WithinSpans.ENDSWITH,
+ STARTSWITH = WithinSpans.STARTSWITH,
+ MATCH = WithinSpans.MATCH;
// may support "starting" and "ending"
+
// Constructor
public SpanWithinQuery (SpanQuery wrap,
- SpanQuery embedded,
- byte flag,
- boolean collectPayloads) {
+ SpanQuery embedded,
+ byte flag,
+ boolean collectPayloads) {
- this.field = embedded.getField();
- this.embedded = embedded;
- this.wrap = wrap;
- this.flag = flag;
- this.collectPayloads = collectPayloads;
- };
-
- // Constructor
- public SpanWithinQuery(String element,
- SpanQuery embedded) {
- this(element, embedded, WITHIN, true);
- };
-
- // Constructor
- public SpanWithinQuery (String element,
- SpanQuery embedded,
- byte flag,
- boolean collectPayloads) {
- this(
- (SpanQuery) new SpanElementQuery(embedded.getField(), element),
- embedded,
- flag,
- collectPayloads
- );
+ this.field = embedded.getField();
+ this.embedded = embedded;
+ this.wrap = wrap;
+ this.flag = flag;
+ this.collectPayloads = collectPayloads;
};
// Constructor
public SpanWithinQuery(String element,
- SpanQuery embedded,
- byte flag) {
- this(element, embedded, flag, true);
+ SpanQuery embedded) {
+ this(element, embedded, WITHIN, true);
};
+
// Constructor
public SpanWithinQuery (String element,
- SpanQuery embedded,
- boolean collectPayloads) {
- this(element, embedded, WITHIN, collectPayloads);
+ SpanQuery embedded,
+ byte flag,
+ boolean collectPayloads) {
+ this(
+ (SpanQuery) new SpanElementQuery(embedded.getField(), element),
+ embedded,
+ flag,
+ collectPayloads
+ );
+ };
+
+
+ // Constructor
+ public SpanWithinQuery(String element,
+ SpanQuery embedded,
+ byte flag) {
+ this(element, embedded, flag, true);
+ };
+
+
+ // Constructor
+ public SpanWithinQuery (String element,
+ SpanQuery embedded,
+ boolean collectPayloads) {
+ this(element, embedded, WITHIN, collectPayloads);
};
// Constructor
public SpanWithinQuery(SpanQuery wrap,
- SpanQuery embedded,
- byte flag) {
- this(wrap, embedded, flag, true);
+ SpanQuery embedded,
+ byte flag) {
+ this(wrap, embedded, flag, true);
};
+
// Constructor
public SpanWithinQuery(SpanQuery wrap,
- SpanQuery embedded) {
- this(wrap, embedded, WITHIN, true);
+ SpanQuery embedded) {
+ this(wrap, embedded, WITHIN, true);
};
@@ -112,122 +118,130 @@
public SpanQuery wrap() { return wrap; };
public SpanQuery embedded() { return embedded; };
public byte flag() { return flag; };
-
+
+
@Override
public void extractTerms(Set<Term> terms) {
- embedded.extractTerms(terms);
+ embedded.extractTerms(terms);
};
+
@Override
public String toString(String field) {
- StringBuilder buffer = new StringBuilder();
- buffer.append("span");
- buffer.append(flagToString());
- buffer.append("(");
+ StringBuilder buffer = new StringBuilder();
+ buffer.append("span");
+ buffer.append(flagToString());
+ buffer.append("(");
buffer.append(wrap.toString());
buffer.append(", ");
- buffer.append(embedded.toString(field));
- buffer.append(")");
- buffer.append(ToStringUtils.boost(getBoost()));
- return buffer.toString();
+ buffer.append(embedded.toString(field));
+ buffer.append(")");
+ buffer.append(ToStringUtils.boost(getBoost()));
+ return buffer.toString();
};
+
private String flagToString () {
- switch (flag) {
- case OVERLAP:
- return "Overlap";
- case REAL_OVERLAP:
- return "OverlapStrict";
- case WITHIN:
- return "Contain";
- case REAL_WITHIN:
- return "ContainStrict";
- case ENDSWITH:
- return "EndsWith";
- case STARTSWITH:
- return "StartsWith";
- case MATCH:
- return "Match";
- };
- return "Contains";
+ switch (flag) {
+ case OVERLAP:
+ return "Overlap";
+ case REAL_OVERLAP:
+ return "OverlapStrict";
+ case WITHIN:
+ return "Contain";
+ case REAL_WITHIN:
+ return "ContainStrict";
+ case ENDSWITH:
+ return "EndsWith";
+ case STARTSWITH:
+ return "StartsWith";
+ case MATCH:
+ return "Match";
+ };
+ return "Contains";
};
+
@Override
public Spans getSpans (final AtomicReaderContext context,
- Bits acceptDocs,
- Map<Term,TermContext> termContexts) throws IOException {
- return (Spans) new WithinSpans (
+ Bits acceptDocs,
+ Map<Term,TermContext> termContexts) throws IOException {
+ return (Spans) new WithinSpans (
this, context, acceptDocs, termContexts, this.flag
- );
+ );
};
+
/*
* Rewrite query in case it includes regular expressions or wildcards
*/
@Override
public Query rewrite (IndexReader reader) throws IOException {
- SpanWithinQuery clone = null;
+ SpanWithinQuery clone = null;
- // Does the embedded query needs a rewrite?
- SpanQuery query = (SpanQuery) embedded.rewrite(reader);
- if (query != embedded) {
- if (clone == null)
- clone = this.clone();
- clone.embedded = query;
- };
+ // Does the embedded query needs a rewrite?
+ SpanQuery query = (SpanQuery) embedded.rewrite(reader);
+ if (query != embedded) {
+ if (clone == null)
+ clone = this.clone();
+ clone.embedded = query;
+ };
- // Does the wrap query needs a rewrite?
- query = (SpanQuery) wrap.rewrite(reader);
- if (query != wrap) {
- if (clone == null)
- clone = this.clone();
- clone.wrap = query;
- };
+ // Does the wrap query needs a rewrite?
+ query = (SpanQuery) wrap.rewrite(reader);
+ if (query != wrap) {
+ if (clone == null)
+ clone = this.clone();
+ clone.wrap = query;
+ };
- // There is a clone and it is important
- if (clone != null)
- return clone;
+ // There is a clone and it is important
+ if (clone != null)
+ return clone;
- return this;
+ return this;
};
@Override
public SpanWithinQuery clone () {
- SpanWithinQuery spanWithinQuery = new SpanWithinQuery(
+ SpanWithinQuery spanWithinQuery = new SpanWithinQuery(
(SpanQuery) wrap.clone(),
- (SpanQuery) embedded.clone(),
- this.flag,
- this.collectPayloads
+ (SpanQuery) embedded.clone(),
+ this.flag,
+ this.collectPayloads
);
- spanWithinQuery.setBoost(getBoost());
- return spanWithinQuery;
+ spanWithinQuery.setBoost(getBoost());
+ return spanWithinQuery;
};
- /** Returns true iff <code>o</code> is equal to this. */
+ /**
+ * Returns true iff <code>o</code> is equal to this.
+ */
@Override
public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof SpanWithinQuery)) return false;
-
- final SpanWithinQuery spanWithinQuery = (SpanWithinQuery) o;
-
- if (collectPayloads != spanWithinQuery.collectPayloads) return false;
- if (!wrap.equals(spanWithinQuery.wrap)) return false;
- if (!embedded.equals(spanWithinQuery.embedded)) return false;
-
- return getBoost() == spanWithinQuery.getBoost();
+ if (this == o) return true;
+ if (!(o instanceof SpanWithinQuery)) return false;
+
+ final SpanWithinQuery spanWithinQuery = (SpanWithinQuery) o;
+
+ if (collectPayloads != spanWithinQuery.collectPayloads) return false;
+ if (!wrap.equals(spanWithinQuery.wrap)) return false;
+ if (!embedded.equals(spanWithinQuery.embedded)) return false;
+
+ return getBoost() == spanWithinQuery.getBoost();
};
+
// I don't know what I am doing here
@Override
public int hashCode() {
- int result = flag;
- result = embedded.hashCode();
- result += wrap.hashCode();
- result ^= (result << 4) | (result >>> 29);
- result += Float.floatToRawIntBits(getBoost());
- return result;
+ int result = flag;
+ result = embedded.hashCode();
+ result += wrap.hashCode();
+ result ^= (result << 4) | (result >>> 29);
+ result += Float.floatToRawIntBits(getBoost());
+ return result;
};
};
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestFrameConstraint.java b/src/test/java/de/ids_mannheim/korap/query/TestFrameConstraint.java
new file mode 100644
index 0000000..37f038d
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/query/TestFrameConstraint.java
@@ -0,0 +1,201 @@
+package de.ids_mannheim.korap.query;
+
+import de.ids_mannheim.korap.query.FrameConstraint;
+import de.ids_mannheim.korap.util.QueryException;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.junit.Ignore;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * @author diewald
+ */
+@RunWith(JUnit4.class)
+public class TestFrameConstraint {
+
+ @Test
+ public void testInitialization () throws QueryException {
+ FrameConstraint fc = new FrameConstraint();
+ assertEquals(fc.check(1), false);
+ };
+
+ @Test
+ public void testBitVector () throws QueryException {
+ int a = 1;
+ int b = 1 << 1;
+
+ assertEquals(3, a ^ b);
+ };
+
+ @Test
+ public void testOr () throws QueryException {
+ FrameConstraint fc = new FrameConstraint();
+
+ // Nothing set
+ assertEquals(fc.check("precedes"), false);
+ assertEquals(fc.check("precedesDirectly"), false);
+ assertEquals(fc.check("overlapsLeft"), false);
+ assertEquals(fc.check("alignsLeft"), false);
+ assertEquals(fc.check("startsWith"), false);
+ assertEquals(fc.check("matches"), false);
+ assertEquals(fc.check("isWithin"), false);
+ assertEquals(fc.check("isAround"), false);
+ assertEquals(fc.check("endsWith"), false);
+ assertEquals(fc.check("alignsRight"), false);
+ assertEquals(fc.check("overlapsRight"), false);
+ assertEquals(fc.check("succeedsDirectly"), false);
+ assertEquals(fc.check("succeeds"), false);
+
+ // Some or
+ fc.or("succeeds").or("succeedsDirectly");
+ assertEquals(fc.check("precedes"), false);
+ assertEquals(fc.check("precedesDirectly"), false);
+ assertEquals(fc.check("overlapsLeft"), false);
+ assertEquals(fc.check("alignsLeft"), false);
+ assertEquals(fc.check("startsWith"), false);
+ assertEquals(fc.check("matches"), false);
+ assertEquals(fc.check("isWithin"), false);
+ assertEquals(fc.check("isAround"), false);
+ assertEquals(fc.check("endsWith"), false);
+ assertEquals(fc.check("alignsRight"), false);
+ assertEquals(fc.check("overlapsRight"), false);
+ assertEquals(fc.check("succeedsDirectly"), true);
+ assertEquals(fc.check("succeeds"), true);
+
+ // Moar or
+ fc.or("precedes").or("precedesDirectly");
+ assertEquals(fc.check("precedes"), true);
+ assertEquals(fc.check("precedesDirectly"), true);
+ assertEquals(fc.check("overlapsLeft"), false);
+ assertEquals(fc.check("alignsLeft"), false);
+ assertEquals(fc.check("startsWith"), false);
+ assertEquals(fc.check("matches"), false);
+ assertEquals(fc.check("isWithin"), false);
+ assertEquals(fc.check("isAround"), false);
+ assertEquals(fc.check("endsWith"), false);
+ assertEquals(fc.check("alignsRight"), false);
+ assertEquals(fc.check("overlapsRight"), false);
+ assertEquals(fc.check("succeedsDirectly"), true);
+ assertEquals(fc.check("succeeds"), true);
+
+ // Moar or
+ fc.or("matches").or("startsWith");
+ assertEquals(fc.check("precedes"), true);
+ assertEquals(fc.check("precedesDirectly"), true);
+ assertEquals(fc.check("overlapsLeft"), false);
+ assertEquals(fc.check("alignsLeft"), false);
+ assertEquals(fc.check("startsWith"), true);
+ assertEquals(fc.check("matches"), true);
+ assertEquals(fc.check("isWithin"), false);
+ assertEquals(fc.check("isAround"), false);
+ assertEquals(fc.check("endsWith"), false);
+ assertEquals(fc.check("alignsRight"), false);
+ assertEquals(fc.check("overlapsRight"), false);
+ assertEquals(fc.check("succeedsDirectly"), true);
+ assertEquals(fc.check("succeeds"), true);
+
+ // Invert
+ fc.invert();
+ assertEquals(fc.check("precedes"), false);
+ assertEquals(fc.check("precedesDirectly"), false);
+ assertEquals(fc.check("overlapsLeft"), true);
+ assertEquals(fc.check("alignsLeft"), true);
+ assertEquals(fc.check("startsWith"), false);
+ assertEquals(fc.check("matches"), false);
+ assertEquals(fc.check("isWithin"), true);
+ assertEquals(fc.check("isAround"), true);
+ assertEquals(fc.check("endsWith"), true);
+ assertEquals(fc.check("alignsRight"), true);
+ assertEquals(fc.check("overlapsRight"), true);
+ assertEquals(fc.check("succeedsDirectly"), false);
+ assertEquals(fc.check("succeeds"), false);
+
+
+ fc.or("precedes").
+ or("precedesDirectly").
+ or("startsWith").
+ or("matches");
+ assertEquals(fc.check("precedes"), true);
+ assertEquals(fc.check("precedesDirectly"), true);
+ assertEquals(fc.check("overlapsLeft"), true);
+ assertEquals(fc.check("alignsLeft"), true);
+ assertEquals(fc.check("startsWith"), true);
+ assertEquals(fc.check("matches"), true);
+ assertEquals(fc.check("isWithin"), true);
+ assertEquals(fc.check("isAround"), true);
+ assertEquals(fc.check("endsWith"), true);
+ assertEquals(fc.check("alignsRight"), true);
+ assertEquals(fc.check("overlapsRight"), true);
+ assertEquals(fc.check("succeedsDirectly"), false);
+ assertEquals(fc.check("succeeds"), false);
+
+ fc.or("succeeds").
+ or("succeedsDirectly");
+ assertEquals(fc.check("precedes"), true);
+ assertEquals(fc.check("precedesDirectly"), true);
+ assertEquals(fc.check("overlapsLeft"), true);
+ assertEquals(fc.check("alignsLeft"), true);
+ assertEquals(fc.check("startsWith"), true);
+ assertEquals(fc.check("matches"), true);
+ assertEquals(fc.check("isWithin"), true);
+ assertEquals(fc.check("isAround"), true);
+ assertEquals(fc.check("endsWith"), true);
+ assertEquals(fc.check("alignsRight"), true);
+ assertEquals(fc.check("overlapsRight"), true);
+ assertEquals(fc.check("succeedsDirectly"), true);
+ assertEquals(fc.check("succeeds"), true);
+ };
+
+ @Test
+ public void testOrVector () throws QueryException {
+ FrameConstraint fc1 = new FrameConstraint();
+ // Some or
+ fc1.or("succeeds").or("succeedsDirectly");
+ assertEquals(fc1.check("precedes"), false);
+ assertEquals(fc1.check("precedesDirectly"), false);
+ assertEquals(fc1.check("overlapsLeft"), false);
+ assertEquals(fc1.check("alignsLeft"), false);
+ assertEquals(fc1.check("startsWith"), false);
+ assertEquals(fc1.check("matches"), false);
+ assertEquals(fc1.check("isWithin"), false);
+ assertEquals(fc1.check("isAround"), false);
+ assertEquals(fc1.check("endsWith"), false);
+ assertEquals(fc1.check("alignsRight"), false);
+ assertEquals(fc1.check("overlapsRight"), false);
+ assertEquals(fc1.check("succeedsDirectly"), true);
+ assertEquals(fc1.check("succeeds"), true);
+
+ FrameConstraint fc2 = new FrameConstraint();
+ fc2.or("precedes").or("precedesDirectly");
+ assertEquals(fc2.check("precedes"), true);
+ assertEquals(fc2.check("precedesDirectly"), true);
+ assertEquals(fc2.check("overlapsLeft"), false);
+ assertEquals(fc2.check("alignsLeft"), false);
+ assertEquals(fc2.check("startsWith"), false);
+ assertEquals(fc2.check("matches"), false);
+ assertEquals(fc2.check("isWithin"), false);
+ assertEquals(fc2.check("isAround"), false);
+ assertEquals(fc2.check("endsWith"), false);
+ assertEquals(fc2.check("alignsRight"), false);
+ assertEquals(fc2.check("overlapsRight"), false);
+ assertEquals(fc2.check("succeedsDirectly"), false);
+ assertEquals(fc2.check("succeeds"), false);
+
+ fc1.or(fc2);
+ assertEquals(fc1.check("precedes"), true);
+ assertEquals(fc1.check("precedesDirectly"), true);
+ assertEquals(fc1.check("overlapsLeft"), false);
+ assertEquals(fc1.check("alignsLeft"), false);
+ assertEquals(fc1.check("startsWith"), false);
+ assertEquals(fc1.check("matches"), false);
+ assertEquals(fc1.check("isWithin"), false);
+ assertEquals(fc1.check("isAround"), false);
+ assertEquals(fc1.check("endsWith"), false);
+ assertEquals(fc1.check("alignsRight"), false);
+ assertEquals(fc1.check("overlapsRight"), false);
+ assertEquals(fc1.check("succeedsDirectly"), true);
+ assertEquals(fc1.check("succeeds"), true);
+ };
+};
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
index 87dc893..a4bbf12 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
@@ -1154,7 +1154,7 @@
assertEquals(
kr.getError(0).getMessage(),
- "Number of operands is not acceptable"
+ "Operation needs operand list"
);
};
diff --git a/src/test/resources/queries/benchmark1.jsonld b/src/test/resources/queries/benchmark1.jsonld
index 79403b4..dccdeef 100644
--- a/src/test/resources/queries/benchmark1.jsonld
+++ b/src/test/resources/queries/benchmark1.jsonld
@@ -3,7 +3,7 @@
"query": {
"@type": "korap:group",
"operation": "operation:position",
- "frame": "frame:contains",
+ "frames": ["frames:isAround"],
"operands": [
{
"@type": "korap:span",
diff --git a/src/test/resources/queries/benchmark1b.jsonld b/src/test/resources/queries/benchmark1b.jsonld
index aa1e729..5ee9791 100644
--- a/src/test/resources/queries/benchmark1b.jsonld
+++ b/src/test/resources/queries/benchmark1b.jsonld
@@ -3,7 +3,7 @@
"query": {
"@type": "korap:group",
"operation": "operation:position",
- "frame": "frame:contains",
+ "frames": ["frames:isAround"],
"operands": [
{
"@type": "korap:span",
@@ -14,7 +14,7 @@
{
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 1,
+ "classOut" : 1,
"operands" : [
{
"@type": "korap:token",
diff --git a/src/test/resources/queries/benchmark5-submatch.jsonld b/src/test/resources/queries/benchmark5-submatch.jsonld
index a9cad71..885b458 100644
--- a/src/test/resources/queries/benchmark5-submatch.jsonld
+++ b/src/test/resources/queries/benchmark5-submatch.jsonld
@@ -13,14 +13,13 @@
}
},
{
- "@type" : "korap:group",
- "operation" : "operation:submatch",
+ "@type" : "korap:reference",
"classRef" : [2],
"operands" : [
{
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 1,
+ "classOut" : 1,
"operands" : [
{
"@type": "korap:group",
@@ -37,7 +36,7 @@
{
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 2,
+ "classOut" : 2,
"operands" : [
{
"@type": "korap:token",
diff --git a/src/test/resources/queries/benchmark5.jsonld b/src/test/resources/queries/benchmark5.jsonld
index 332d23f..1f64527 100644
--- a/src/test/resources/queries/benchmark5.jsonld
+++ b/src/test/resources/queries/benchmark5.jsonld
@@ -15,7 +15,7 @@
{
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 1,
+ "classOut" : 1,
"operands" : [
{
"@type": "korap:group",
@@ -32,7 +32,7 @@
{
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 2,
+ "classOut" : 2,
"operands" : [
{
"@type": "korap:token",
diff --git a/src/test/resources/queries/bsp-bug.jsonld b/src/test/resources/queries/bsp-bug.jsonld
index 33bb904..e46374e 100644
--- a/src/test/resources/queries/bsp-bug.jsonld
+++ b/src/test/resources/queries/bsp-bug.jsonld
@@ -1,8 +1,7 @@
{
"@context": "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
- "@type": "korap:group",
- "operation" : "operation:submatch",
+ "@type": "korap:reference",
"classRef" : [0],
"operands" : []
},
diff --git a/src/test/resources/queries/bsp-class-2.jsonld b/src/test/resources/queries/bsp-class-2.jsonld
index 162070f..4cccfa5 100644
--- a/src/test/resources/queries/bsp-class-2.jsonld
+++ b/src/test/resources/queries/bsp-class-2.jsonld
@@ -3,7 +3,7 @@
"query" : {
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 0,
+ "classOut" : 0,
"operands" : [ {
"@type" : "korap:token",
"wrap" : {
diff --git a/src/test/resources/queries/bsp-class.jsonld b/src/test/resources/queries/bsp-class.jsonld
index b4fd65e..f095a47 100644
--- a/src/test/resources/queries/bsp-class.jsonld
+++ b/src/test/resources/queries/bsp-class.jsonld
@@ -3,7 +3,7 @@
"query":{
"@type":"korap:group",
"operation" : "operation:class",
- "class":1,
+ "classOut":1,
"operands":[
{
"@type":"korap:group",
diff --git a/src/test/resources/queries/bsp-fail1.jsonld b/src/test/resources/queries/bsp-fail1.jsonld
index 7425bc1..fc6fb51 100644
--- a/src/test/resources/queries/bsp-fail1.jsonld
+++ b/src/test/resources/queries/bsp-fail1.jsonld
@@ -2,7 +2,7 @@
"@context": "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
"@type": "korap:group",
- "frame": "frame:contains",
+ "frames": ["frame:isAround"],
"operation": "operation:position"
"operands": [
{
diff --git a/src/test/resources/queries/bsp-fail2.jsonld b/src/test/resources/queries/bsp-fail2.jsonld
index dc4ace2..96a3bb5 100644
--- a/src/test/resources/queries/bsp-fail2.jsonld
+++ b/src/test/resources/queries/bsp-fail2.jsonld
@@ -3,7 +3,7 @@
"query": {
"@type": "korap:group",
"operation": "operation:position",
- "frame": "frame:contains",
+ "frames": ["frames:isAround"],
"operands": [
{
"@type": "korap:span",
diff --git a/src/test/resources/queries/bsp-startswith.json b/src/test/resources/queries/bsp-startswith.json
index c986a5a..95df8b9 100644
--- a/src/test/resources/queries/bsp-startswith.json
+++ b/src/test/resources/queries/bsp-startswith.json
@@ -1 +1,13 @@
-{"@context":{"korap":"http://korap.ids-mannheim.de/ns/query","@language":"de","operands":{"@id":"korap:operands","@container":"@list"},"relation":{"@id":"korap:relation","@type":"korap:relation#types"},"class":{"@id":"korap:class","@type":"xsd:integer"},"query":"korap:query","filter":"korap:filter","meta":"korap:meta"},"query":{"@type":"korap:group","relation":"position","position":"startswith","operands":[{"@type":"korap:element","@value":"s"},{"@type":"korap:sequence","operands":[{"@type":"korap:group","class":"0","operands":[{"@type":"korap:token","@value":{"@type":"korap:term","@value":"tt_p:ADJA","relation":"="}}]},{"@type":"korap:token","@value":{"@type":"korap:term","@value":"mate_p:NN","relation":"="}}]}]},"meta":[{"@type":"korap:meta-filter","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"A00"}},{"@type":"korap:meta-extend","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"A01"}}],"startPage":1,"count":50,"context":{"left":["token",6],"right":["token",6]}}
+{
+ "@context":"http://korap.ids-mannheim.de/ns/query/context.json.ld",
+ "query":{
+ "@type":"korap:group",
+ "relation":"position",
+ "frames":[
+ "frames:startsWith"
+ ],
+ "operands":[
+ {
+ "@type":"korap:element",
+ "@value":"s"
+ },{"@type":"korap:sequence","operands":[{"@type":"korap:group","class":"0","operands":[{"@type":"korap:token","@value":{"@type":"korap:term","@value":"tt_p:ADJA","relation":"="}}]},{"@type":"korap:token","@value":{"@type":"korap:term","@value":"mate_p:NN","relation":"="}}]}]},"meta":[{"@type":"korap:meta-filter","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"A00"}},{"@type":"korap:meta-extend","@value":{"@type":"korap:term","@field":"korap:field#corpusID","@value":"A01"}}],"startPage":1,"count":50,"context":{"left":["token",6],"right":["token",6]}}
diff --git a/src/test/resources/queries/bsp10.jsonld b/src/test/resources/queries/bsp10.jsonld
index 643edc3..384175d 100644
--- a/src/test/resources/queries/bsp10.jsonld
+++ b/src/test/resources/queries/bsp10.jsonld
@@ -1,105 +1,5 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
"@type": "korap:group",
"operation" : "operation:sequence",
diff --git a/src/test/resources/queries/bsp12.jsonld b/src/test/resources/queries/bsp12.jsonld
index 4db4b95..6b7a7b5 100644
--- a/src/test/resources/queries/bsp12.jsonld
+++ b/src/test/resources/queries/bsp12.jsonld
@@ -1,109 +1,9 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
"@type": "korap:group",
"operation": "operation:position",
- "frame": "frame:contains",
+ "frames": ["frames:isAround"],
"operands": [
{
"@type": "korap:span",
diff --git a/src/test/resources/queries/bsp13.jsonld b/src/test/resources/queries/bsp13.jsonld
index bb177ee..879fbf5 100644
--- a/src/test/resources/queries/bsp13.jsonld
+++ b/src/test/resources/queries/bsp13.jsonld
@@ -1,108 +1,8 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
"@type": "korap:group",
- "frame": "frame:startswith",
+ "frames": ["frames:startsWith", "frames:alignsLeft", "frames:matches"],
"operation": "operation:position",
"operands": [
{
diff --git a/src/test/resources/queries/bsp13b.jsonld b/src/test/resources/queries/bsp13b.jsonld
index 6a4b19e..077aeff 100644
--- a/src/test/resources/queries/bsp13b.jsonld
+++ b/src/test/resources/queries/bsp13b.jsonld
@@ -1,108 +1,8 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
"@type": "korap:group",
- "frame": "frame:startswith",
+ "frames": ["frames:startsWith", "frames:alignsLeft", "frames:matches"],
"operation": "operation:position",
"operands": [
{
diff --git a/src/test/resources/queries/bsp17.jsonld b/src/test/resources/queries/bsp17.jsonld
index 2df7268..8d9eca8 100644
--- a/src/test/resources/queries/bsp17.jsonld
+++ b/src/test/resources/queries/bsp17.jsonld
@@ -1,109 +1,9 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
"@type": "korap:group",
"operation": "operation:position",
- "frame": "frame:within",
+ "frames": ["frames:isWithin"],
"operands": [
{
"@type": "korap:span",
diff --git a/src/test/resources/queries/bsp18.jsonld b/src/test/resources/queries/bsp18.jsonld
index 99afb29..f0c2fc2 100644
--- a/src/test/resources/queries/bsp18.jsonld
+++ b/src/test/resources/queries/bsp18.jsonld
@@ -13,7 +13,7 @@
"operands" : [ {
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 1,
+ "classOut" : 1,
"operands" : [ {
"@type" : "korap:token",
"wrap" : {
diff --git a/src/test/resources/queries/bsp3.jsonld b/src/test/resources/queries/bsp3.jsonld
index 0e76838..b662b72 100644
--- a/src/test/resources/queries/bsp3.jsonld
+++ b/src/test/resources/queries/bsp3.jsonld
@@ -1,114 +1,13 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
- "@type": "korap:group",
- "operation": "operation:submatch",
+ "@type": "korap:reference",
"classRef": [1],
"operands": [
{
"@type": "korap:group",
"operation" : "operation:class",
- "class": 1,
+ "classOut": 1,
"operands": [
{
"@type": "korap:token",
diff --git a/src/test/resources/queries/bsp4.jsonld b/src/test/resources/queries/bsp4.jsonld
index 3a0c3c4..6cea948 100644
--- a/src/test/resources/queries/bsp4.jsonld
+++ b/src/test/resources/queries/bsp4.jsonld
@@ -1,108 +1,7 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
- "@type": "korap:group",
- "operation": "operation:submatch",
+ "@type": "korap:reference",
"classRef": [1],
"operands": [
{
@@ -112,7 +11,7 @@
{
"@type": "korap:group",
"operation":"operation:class",
- "class": 1,
+ "classOut": 1,
"operands": [
{
"@type": "korap:token",
diff --git a/src/test/resources/queries/bsp5.jsonld b/src/test/resources/queries/bsp5.jsonld
index bebc438..b1dc6d8 100644
--- a/src/test/resources/queries/bsp5.jsonld
+++ b/src/test/resources/queries/bsp5.jsonld
@@ -1,108 +1,7 @@
{
- "@context" : {
- "korap" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/",
- "query" : "korap:query",
- "meta" : "korap:meta",
- "collections" : {
- "@id" : "korap:collections",
- "@container" : "@list"
- },
- "token" : "korap:token/",
- "distance" : "korap:distance/",
- "boundary" : "korap:boundary/",
- "group" : "korap:group/",
- "span" : "korap:span/",
- "term" : "korap:term/",
- "termGroup" : "korap:termGroup/",
- "wrap" : "token:wrap",
- "operation" : {
- "@id" : "group:operation/",
- "@type" : "@id"
- },
- "class" : {
- "@id" : "group:class",
- "@type" : "xsd:integer"
- },
- "operands" : {
- "@id" : "group:operands",
- "@container" : "@list"
- },
- "frame" : {
- "@id" : "group:frame/",
- "@type" : "@id"
- },
- "classRef" : {
- "@id" : "group:classRef",
- "@type" : "xsd:integer"
- },
- "spanRef" : {
- "@id" : "group:spanRef",
- "@type" : "xsd:integer"
- },
- "classRefOp" : {
- "@id" : "group:classRefOp",
- "@type" : "@id"
- },
- "min" : {
- "@id" : "boundary:min",
- "@type" : "xsd:integer"
- },
- "max" : {
- "@id" : "boundary:max",
- "@type" : "xsd:integer"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "distances" : {
- "@id" : "group:distances",
- "@container" : "@list"
- },
- "inOrder" : {
- "@id" : "group:inOrder",
- "@type" : "xsd:boolean"
- },
- "exclude" : {
- "@id" : "group:exclude",
- "@type" : "xsd:boolean"
- },
- "key" : {
- "@id" : "korap:key",
- "@type" : "xsd:string"
- },
- "foundry" : {
- "@id" : "korap:foundry",
- "@type" : "xsd:string"
- },
- "layer" : {
- "@id" : "korap:layer",
- "@type" : "xsd:string"
- },
- "value" : {
- "@id" : "korap:value",
- "@type" : "xsd:string"
- },
- "caseInsensitive" : {
- "@id" : "term:caseInsensitive",
- "@type" : "xsd:boolean"
- },
- "type" : {
- "@id" : "term:type/",
- "@type" : "@id"
- },
- "match" : {
- "@id" : "term:match/",
- "@type" : "@id"
- },
- "relation" : {
- "@id" : "korap:relation/",
- "@type" : "@id"
- }
- },
+ "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query": {
- "@type": "korap:group",
- "operation": "operation:submatch",
+ "@type": "korap:reference",
"classRef": [1],
"operands": [
{
@@ -121,7 +20,7 @@
{
"@type": "korap:group",
"operation" : "operation:class",
- "class": 1,
+ "classOut": 1,
"operands": [
{
"@type": "korap:token",
diff --git a/src/test/resources/queries/cosmas16.json b/src/test/resources/queries/cosmas16.json
index b392098..852a964 100644
--- a/src/test/resources/queries/cosmas16.json
+++ b/src/test/resources/queries/cosmas16.json
@@ -1,20 +1,19 @@
{
"@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query" : {
- "@type" : "korap:group",
- "operation" : "operation:submatch",
+ "@type" : "korap:reference",
"classRef" : [ 1 ],
"operands" : [ {
"@type" : "korap:group",
"operation" : "operation:position",
- "frame" : "frame:startswith",
+ "frames" : ["frames:startsWith"],
"operands" : [ {
"@type" : "korap:span",
"key" : "s"
}, {
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 1,
+ "classOut" : 1,
"operands" : [ {
"@type" : "korap:token",
"wrap" : {
diff --git a/src/test/resources/queries/cosmas17.json b/src/test/resources/queries/cosmas17.json
index 1eec888..c0d1f5c 100644
--- a/src/test/resources/queries/cosmas17.json
+++ b/src/test/resources/queries/cosmas17.json
@@ -3,7 +3,7 @@
"query" : {
"@type" : "korap:group",
"operation" : "operation:position",
- "frame" : "frame:startswith",
+ "frames" : ["frames:startsWith", "frames:matches", "frames:alignsLeft"],
"operands" : [ {
"@type" : "korap:span",
"key" : "s"
diff --git a/src/test/resources/queries/cosmas20.json b/src/test/resources/queries/cosmas20.json
index 86a7df6..5a4b745 100644
--- a/src/test/resources/queries/cosmas20.json
+++ b/src/test/resources/queries/cosmas20.json
@@ -1,20 +1,19 @@
{
"context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
"query" : {
- "@type" : "korap:group",
- "operation" : "operation:submatch",
+ "@type" : "korap:reference",
"classRef" : [ 1 ],
"operands" : [ {
"@type" : "korap:group",
"operation" : "operation:position",
- "frame" : "frame:endswith",
+ "frames" : ["frames:endsWith", "frames:matches", "frames:alignsRight"],
"operands" : [ {
"@type" : "korap:span",
"key" : "s"
}, {
"@type" : "korap:group",
"operation" : "operation:class",
- "class" : 1,
+ "classOut" : 1,
"operands" : [ {
"@type" : "korap:token",
"wrap" : {
diff --git a/src/test/resources/queries/poly1.json b/src/test/resources/queries/poly1.json
index bc1b138..77bc6b5 100644
--- a/src/test/resources/queries/poly1.json
+++ b/src/test/resources/queries/poly1.json
@@ -22,7 +22,6 @@
"operands" : [
{
"@type" : "korap:group",
- "class" : 1,
"classOut" : 1,
"operands" : [
{
@@ -40,7 +39,6 @@
},
{
"@type" : "korap:group",
- "class" : 2,
"classOut" : 2,
"operands" : [
{
diff --git a/src/test/resources/queries/poly2.json b/src/test/resources/queries/poly2.json
index 68bcadc..543da5e 100644
--- a/src/test/resources/queries/poly2.json
+++ b/src/test/resources/queries/poly2.json
@@ -18,9 +18,8 @@
"meta" : {},
"query" : {
"@type" : "korap:group",
- "frame" : "frame:contains",
"frames" : [
- "frames:contains"
+ "frames:isAround"
],
"operands" : [
{
@@ -88,4 +87,4 @@
},
"warnings" : []
}
-
\ No newline at end of file
+
diff --git a/src/test/resources/queries/poly4.json b/src/test/resources/queries/poly4.json
index eb863e1..4d38ad4 100644
--- a/src/test/resources/queries/poly4.json
+++ b/src/test/resources/queries/poly4.json
@@ -42,7 +42,6 @@
"operands" : [
{
"@type" : "korap:group",
- "class" : 1,
"classOut" : 1,
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/empty-first-class.jsonld b/src/test/resources/queries/sequence/empty-first-class.jsonld
index 89f44e3..f55d382 100644
--- a/src/test/resources/queries/sequence/empty-first-class.jsonld
+++ b/src/test/resources/queries/sequence/empty-first-class.jsonld
@@ -16,7 +16,7 @@
"operands" : [
{
"@type" : "korap:group",
- "class" : 2,
+ "classOut" : 2,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/empty-last-class.jsonld b/src/test/resources/queries/sequence/empty-last-class.jsonld
index e2591e7..9a5ad5e 100644
--- a/src/test/resources/queries/sequence/empty-last-class.jsonld
+++ b/src/test/resources/queries/sequence/empty-last-class.jsonld
@@ -25,7 +25,7 @@
},
{
"@type" : "korap:group",
- "class" : 3,
+ "classOut" : 3,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/empty-middle-class.jsonld b/src/test/resources/queries/sequence/empty-middle-class.jsonld
index 865bfa1..9203e5e 100644
--- a/src/test/resources/queries/sequence/empty-middle-class.jsonld
+++ b/src/test/resources/queries/sequence/empty-middle-class.jsonld
@@ -25,7 +25,7 @@
},
{
"@type" : "korap:group",
- "class" : 1,
+ "classOut" : 1,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/empty-surround-class-2.jsonld b/src/test/resources/queries/sequence/empty-surround-class-2.jsonld
index 5f15478..f927e59 100644
--- a/src/test/resources/queries/sequence/empty-surround-class-2.jsonld
+++ b/src/test/resources/queries/sequence/empty-surround-class-2.jsonld
@@ -5,7 +5,7 @@
"operands" : [
{
"@type" : "korap:group",
- "class" : 3,
+ "classOut" : 3,
"operation" : "operation:class",
"operands" : [
{
@@ -24,7 +24,7 @@
},
{
"@type" : "korap:group",
- "class" : 2,
+ "classOut" : 2,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/empty-surround-class.jsonld b/src/test/resources/queries/sequence/empty-surround-class.jsonld
index 2c5846f..b9a44d0 100644
--- a/src/test/resources/queries/sequence/empty-surround-class.jsonld
+++ b/src/test/resources/queries/sequence/empty-surround-class.jsonld
@@ -18,7 +18,7 @@
},
{
"@type" : "korap:group",
- "class" : 2,
+ "classOut" : 2,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/empty-surround-repetition-class.jsonld b/src/test/resources/queries/sequence/empty-surround-repetition-class.jsonld
index 8a584dc..ec34606 100644
--- a/src/test/resources/queries/sequence/empty-surround-repetition-class.jsonld
+++ b/src/test/resources/queries/sequence/empty-surround-repetition-class.jsonld
@@ -14,7 +14,7 @@
"operands" : [
{
"@type" : "korap:group",
- "class" : 1,
+ "classOut" : 1,
"operation" : "operation:class",
"operands" : [
{
@@ -36,7 +36,7 @@
},
{
"@type" : "korap:group",
- "class" : 2,
+ "classOut" : 2,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/negative-last-class-repetition-2.jsonld b/src/test/resources/queries/sequence/negative-last-class-repetition-2.jsonld
index 4d93449..0d7207a 100644
--- a/src/test/resources/queries/sequence/negative-last-class-repetition-2.jsonld
+++ b/src/test/resources/queries/sequence/negative-last-class-repetition-2.jsonld
@@ -24,7 +24,7 @@
"operands" : [
{
"@type" : "korap:group",
- "class" : 2,
+ "classOut" : 2,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/negative-last-class-repetition.jsonld b/src/test/resources/queries/sequence/negative-last-class-repetition.jsonld
index 372e390..71cc4f3 100644
--- a/src/test/resources/queries/sequence/negative-last-class-repetition.jsonld
+++ b/src/test/resources/queries/sequence/negative-last-class-repetition.jsonld
@@ -15,7 +15,7 @@
},
{
"@type" : "korap:group",
- "class" : 2,
+ "classOut" : 2,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/sequence/negative-last-class.jsonld b/src/test/resources/queries/sequence/negative-last-class.jsonld
index 41e0d45..b668db6 100644
--- a/src/test/resources/queries/sequence/negative-last-class.jsonld
+++ b/src/test/resources/queries/sequence/negative-last-class.jsonld
@@ -15,7 +15,7 @@
},
{
"@type" : "korap:group",
- "class" : 2,
+ "classOut" : 2,
"operation" : "operation:class",
"operands" : [
{
diff --git a/src/test/resources/queries/submatch/1.jsonld b/src/test/resources/queries/submatch/1.jsonld
index 4baa073..cc4a529 100644
--- a/src/test/resources/queries/submatch/1.jsonld
+++ b/src/test/resources/queries/submatch/1.jsonld
@@ -15,9 +15,8 @@
"operands" : [
{
"@type" : "korap:group",
- "frame" : "frame:contains",
"frames" : [
- "frames:contains"
+ "frames:isAround"
],
"operands" : [
{