Generalized poliqarp tutorials (thx to Susanne Feix)

Change-Id: I0bf4a431d2a231507d48b63ae88d9a99e3f19e1b
diff --git a/Changes b/Changes
index af33ec2..7a02ead 100755
--- a/Changes
+++ b/Changes
@@ -6,6 +6,7 @@
         - Attach querycreator object to annotation table.
         - Update client side dependencies
         - Introduce development mode to client side code.
+        - Generalized Poliqarp tutorials.
 
 0.25 2018-01-31
         - Make annotation helper configurable.
diff --git a/kalamar.dict b/kalamar.dict
index c3256e9..8791534 100644
--- a/kalamar.dict
+++ b/kalamar.dict
@@ -85,10 +85,10 @@
       'ql' => 'Anfragesprachen',
       '#segments' => 'Einfache Segmente',
       '#complex' => 'Komplexe Segmente',
-      '#spans' => 'Span Segmente',
+      '#spans' => 'Span-Segmente',
       '#paradigmatic-operators' => 'Paradigmatische Operatoren',
       '#syntagmatic-operators' => 'Syntagmatische Operatoren',
-      '#class-operators' => 'Klassen Operatoren',
+      '#class-operators' => 'Klassen-Operatoren',
       'regexp' => 'Reguläre Ausdrücke',
       'data' => 'Daten',
       'corpus' => 'Korpora',
diff --git a/templates/de/doc/ql/poliqarp-plus.html.ep b/templates/de/doc/ql/poliqarp-plus.html.ep
index fa85afa..3540b90 100644
--- a/templates/de/doc/ql/poliqarp-plus.html.ep
+++ b/templates/de/doc/ql/poliqarp-plus.html.ep
@@ -7,11 +7,11 @@
 <section id="segments">
   <h3>Einfache Segmente</h3>
 
-  <p>Die einzelnen Elemente von Poliqarp sind Segmente. Meistens repräsentieren Segmente Wörter und können leicht abgefragt werden:</p>
+  <p>Die kleinsten Elemente von Poliqarp sind Segmente. Meistens repräsentieren Segmente Wörter und können leicht abgefragt werden:</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_simple', 'Tree')
 
-  <p>Abfolgen einfacher Segmenten werden durch Leerzeichen getrennt:</p>
+  <p>Abfolgen einfacher Segmente werden durch Leerzeichen getrennt:</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_simpleseq', 'the Tree')
 
@@ -19,7 +19,7 @@
 
   %= doc_query poliqarp => loc('Q_poliqarp_simpleci', 'run/i')
 
-  <p>Die Abfrage oben findet alle Vorkommen des Wortes unabhängig von der Großschreibung von Buchstaben.
+  <p>Die Abfrage oben findet alle Vorkommen des Wortes unabhängig von ihrer Großschreibung.
 
   <h4 id="regexp">Reguläre Ausdrücke</h4>
 
@@ -27,7 +27,8 @@
 
   %= doc_query poliqarp => '"l(au|ie)fen"'
 
-  <p>Reguläre Ausdrücke stimmen immer mit dem gesamten Segment überein, d.h. die obige Abfrage findet Wörter, die mit <code>l</code> beginnen und mit <code>n</code> enden. Um Teilausdrücke zu unterstützen, können Sie das Flag <code>/x</code> verwenden.</p>
+  <p>Reguläre Ausdrücke stimmen immer mit dem gesamten Segment überein,
+    d.h. die obige Abfrage findet Wörter, die mit dem ersten Buchstaben des Ausdrucks beginnen und mit dem letzten Buchstaben enden. Um Teilausdrücke zu unterstützen, können Sie das Flag <code>/x</code> verwenden.</p>
 
     %= doc_query poliqarp => '"l(au|ie)fen"/x', cutoff => 1
 
@@ -39,10 +40,10 @@
 
   %= doc_query poliqarp => 'trenn/xi', cutoff => 1
 
-  <p>Die obige Abfrage findet alle Vorkommen von Segmenten mit der Zeichenfolge <code>trenn</code> unabhängig von Groß-Kleinschreibung, wie &quot;Trennung&quot;, &quot;unzertrennlich&quot; oder &quot;Wettrennen&quot;.</p>
+  <p>Die obige Abfrage findet alle Vorkommen von Segmenten mit der definierten Zeichenfolge - unabhängig von Groß-Kleinschreibung und unabhängig von ihrem Zeichenkontext.</p>
 
   <blockquote class="warning">
-    <p>Achtung: Diese Art von Abfragen (mit vorangestellten <code>.*</Code> Ausdrücken) sind extrem langsam!</p>
+    <p>Achtung: Diese Art von Abfragen (mit vorangestellten <code>.*</Code> Ausdrücken) können extrem langsam sein!</p>
   </blockquote>
 
   <p>Sie können das <code>/i</code> Flag erneut anwenden, um unabhängig von Groß-Kleinschreibung zu suchen.</p>
@@ -56,9 +57,9 @@
 
   <p>Komplexe Segmente werden in eckigen Klammern ausgedrückt und enthalten zusätzliche Informationen über die Ressource des zu prüfenden Begriffs, indem sie Schlüssel/Wert-Paare enthalten, die durch ein Gleichheitszeichen getrennt sind.</p>
 
-  <p>Die KorAP-Implementierung von Poliqarp bietet drei spezielle Segmentschlüssel: <code>orth</code> für Oberflächenformen, <code>base</code> für Lemmata und <code>pos</code> für Part-of-Speech-Annotationen. Die folgende komplexe Abfrage findet alle Oberflächenformen von <code>Baum</code>.</p>
+  <p>Die KorAP-Implementierung von Poliqarp bietet drei spezielle Segmentschlüssel: <code>orth</code> für Oberflächenformen, <code>base</code> für Lemmata und <code>pos</code> für Part-of-Speech-Annotationen. Die folgende komplexe Abfrage findet alle Oberflächenformen des eingegebenen Wortes.</p>
 
-  %# Es gibt mehr spezielle Schlüssel in Poliqarp, aber KorAP bietet sie nicht an.
+  %# Es gibt noch mehr spezielle Schlüssel in Poliqarp, aber KorAP bietet sie nicht an.
 
   %= doc_query poliqarp => '[orth=Baum]'
 
@@ -71,7 +72,7 @@
   %= doc_query poliqarp => '[orth="l(au|ie)fen"/xi]', cutoff => 1
 
   <p>Ein weiterer spezieller Schlüssel ist <code>base</code>, bezogen auf die Lemma-Annotation der <%= doc_link_to 'Standard-Foundry', 'data', 'annotation'%>.
-    Die folgende Abfrage findet alle Vorkommen von Segmenten, die als Lemma <code>Baum</code> durch die Standard-Foundry annotiert wurden.</p>
+    Die folgende Abfrage findet alle Vorkommen von Segmenten, die mit dem eingegebenen Lemma in der Standard-Foundry annotiert wurden.</p>
 
   %= doc_query poliqarp => '[base=Baum]'
 
@@ -80,19 +81,19 @@
 
   %= doc_query poliqarp => '[pos=ADJA]'
 
-  <p>Komplexe Segmente, die weitere Token-Annotationen anfordern, können Schlüssel der <code>foundry/layer</code> Notation folgend haben.
-    Zum Beispiel, um alle Vorkommen von mehreren Wörtern in der <code>mate</code> Foundry zu finden, können Sie mit der folgenden Abfrage suchen:</p>
+  <p>Komplexe Segmente, die weitere Token-Annotationen erfordern, können die <code>foundry/layer</code> Notation dem Suchschlüssel voranstellen.
+    Zum Beispiel, um alle Vorkommen von Plural-Wörtern in einer diese Information enthaltenden Foundry zu finden, können Sie mit der folgenden Abfrage suchen:</p>
 
   %= doc_query poliqarp => '[mate/m=number:pl]'
 
   <h4>Negation</h4>
-  <p>Die Negation von Termen in komplexen Ausdrücken kann durch Voranstellen eines Ausrufezeichen vor dem Gleichheitszeichen oder dem gesamten Term ausgedrückt werden.</p>
+  <p>Die Negation von Termen in komplexen Ausdrücken kann durch Voranstellen eines Ausrufezeichens vor dem Gleichheitszeichen oder dem gesamten Term ausgedrückt werden.</p>
 
   %= doc_query poliqarp => '[pos!=ADJA]'
   %= doc_query poliqarp => '[!pos=ADJA]'
 
   <blockquote class="warning">
-    <p>Vorsicht: Negierte komplexe Segmente können nicht alleinstehend im Lucene-Index gesucht werden.
+    <p>Vorsicht: Negierte komplexe Segmente können nicht alleinstehend gesucht werden.
       Allerdings funktionieren sie, wenn sie Teil einer <%= doc_link_to 'Sequenz', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence'%> sind.</p>
   </blockquote>
 
@@ -105,16 +106,16 @@
   <p>Leere Segmente sind nützlich, um Abstände von Wörtern auszudrücken, indem sie <%= doc_link_to 'Wiederholungen', 'ql', 'poliqarp-plus#syntagmatic-operators-repetitions' %> verwenden.</p>
 
   <blockquote class="warning">
-    <p>Vorsicht: Leere Segmente können nicht alleinstehend im Lucene-Index gesucht werden. 
-      Allerdings arbeiten sie, falls sie Teil eines <%= doc_link_to 'sequence', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %> sind.</p>
+    <p>Vorsicht: Leere Segmente können nicht alleinstehend gesucht werden. 
+      Allerdings funktionieren sie, wenn sie Teil einer <%= doc_link_to 'Sequenz', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %> sind.</p>
   </blockquote>
 </section>
 
 <section id="spans">
-  <h3>Span Segmente</h3>
+  <h3>Span-Segmente</h3>
 
   <p>Nicht alle Segmente sind an Worte gebunden - manche sind an Konzepte gebunden, die mehrere Wörter überspannen, z. B. Nominalphrasen, Sätze oder Absätze.
-Spansegmente können durch spitze Klammern anstelle von eckigen Klammern gesucht werden.</p>
+Span-Segmente können durch spitze Klammern anstelle von eckigen Klammern gesucht werden.</p>
 
   %= doc_query poliqarp => '<xip/c=INFC>'
     
@@ -124,7 +125,7 @@
 <section id="paradigmatic-operators">
   <h3>Paradigmatische Operatoren</h3>
 
-  <p>Ein komplexes Segment kann mehrere Eigenschaften haben, die ein Token erfüllen muss. Zum Beispiel, um nach allen Wörtern mit der Oberflächenform <code>laufe</code> (egal ob großgeschrieben oder nicht) zu suchen, die das Lemma <code>lauf</code> haben (und nicht z. B. <code>laufen</code>, was ein Verb oder ein Gerundium angeben würde), können Sie suchen nach:</p>
+  <p>Ein komplexes Segment kann mehrere Eigenschaften haben, die ein Token erfüllen muss. Zum Beispiel, um nach allen Wörtern einer bestimmten Oberflächenform eines bestimmten Lemmas (egal ob großgeschrieben oder nicht) zu suchen, können Sie folgende Abfrage nutzen:</p>
 
   %= doc_query poliqarp => '[orth=laufe/i & base=Lauf]'
 
@@ -135,7 +136,7 @@
 
   <p>Die folgende Abfrage ist daher äquivalent:</p>
 
-  %= doc_query poliqarp => '[orth=laufe & !base=Lauf]'
+  %= doc_query poliqarp => '[orth=laufe/i & !base=Lauf]'
 
   <p>Alternativen können mit dem Balkensymbol ausgedrückt werden:</p>
 
@@ -151,7 +152,7 @@
 
   <h4 id="syntagmatic-operators-sequence">Sequenzen</h4>
 
-  <p>Sequenzen können verwendet werden, um Segmente in einer Reihe zu suchen. Zum Beispiel um nach dem Wort &quot;alte&quot; zu suchen, vorangestellt mit &quot;der&quot; und gefolgt von &quot;Mann&quot;, können Sie einfach nach der Reihenfolge der einfachen Ausdrücke, die durch Leerzeichen getrennt sind, suchen.</p>
+  <p>Sequenzen können verwendet werden, um Segmente in einer bestimmten Reihenfolge zu suchen. Hierfür werden die einfachen Ausdrücke mit Leerzeichen getrennt.</p>
 
   %= doc_query poliqarp => 'der alte Mann'
 
@@ -159,29 +160,29 @@
 
   %= doc_query poliqarp => '[orth=der][orth=alte][orth=Mann]'
 
-  <p>Jetzt können Sie den Nutzen des leeren Segments erkennen, um nach Wörtern zu suchen, die Sie nicht kennen:</p>
+  <p>Jetzt können Sie auch den Nutzen des leeren Segments erkennen, um nach Wörtern zu suchen, die Sie nicht kennen:</p>
 
   %= doc_query poliqarp => '[orth=der][][orth=Mann]'
 
-  <p>Sie können auch Segmente und Span Segmente in Sequenzen mischen, um beispielsweise nach dem Wort &quot;Der&quot; am Anfang eines Satzes zu suchen (das als erstes Wort nach dem Ende eines Satzes interpretiert werden kann).</p>
+  <p>Sie können Segmente und Span-Segmente auch in Sequenzen mischen, um beispielsweise nach einem Wort am Anfang eines Satzes zu suchen (das als erstes Wort nach dem Ende eines Satzes interpretiert werden kann).</p>
 
   %= doc_query poliqarp => '<base/s=s>[orth=Der]'
 
-  <h4>Groups</h4>
+  <h4>Gruppen</h4>
 
   ...
 
   <h4>Alternativen</h4>
 
-  <p>Alternativen erlauben die Suche nach alternativen Segmenten oder Sequenzen von Segmenten, ähnlich dem paradigmatischen Operator. Sie haben bereits gesehen, dass Sie nach beiden Sequenzen von <code>der alte Mann</code> und <code>der junge Mann</code> suchen können, indem Sie eingeben:</p>
+  <p>Alternativen erlauben die Suche nach alternativen Segmenten oder Sequenzen von Segmenten, ähnlich dem paradigmatischen Operator. Sie haben bereits gesehen, dass Sie nach alternativen Adjektiv-Sequenzen suchen können, indem Sie eingeben:</p>
 
   %= doc_query poliqarp => 'der [orth=alte | orth=junge] Mann'
 
-  <p>Allerdings macht dieser Ausdruck Probleme, falls Sie nach Alternativen von Sequenzen anstatt von Begriffen suchen möchten. Wenn Sie nach beiden Sequenzen von <code>dem jungen Mann</code> und <code>der alte Mann</code> suchen möchten, können Sie syntagmatische Alternationen und Gruppen verwenden:</p>
+  <p>Allerdings bereitet dieser Ausdruck Probleme, falls Sie nach Alternativen von Sequenzen anstatt von Begriffen suchen möchten. In diesem Fall können Sie syntagmatische Alternativen und Gruppen verwenden:</p>
 
   %= doc_query poliqarp => '(dem jungen | der alte) Mann'
 
-  <p>Das Balkensymbol funktioniert genauso wie bei der paradigmatischen Alternative, unterstützt aber Sequenzen unterschiedlicher Länge als Operanden. Die obige Abfrage für <code>der alte Mann</code> und <code>der junge Mann</code> kann daher umformuliert werden als:</p>
+  <p>Das Balkensymbol funktioniert genauso wie bei der paradigmatischen Alternative, unterstützt aber Sequenzen unterschiedlicher Länge als Operanden. Die obige Abfrage nach einem alternativen Adjektiv kann daher umformuliert werden als:</p>
 
   %= doc_query poliqarp => 'der (junge | alte) Mann'
 
@@ -189,23 +190,23 @@
 
   <p>Wiederholungen in Poliqarp werden wie in <%= doc_link_to 'regulären Ausdrücken', 'ql', 'regexp'%> realisiert, indem Quantifizierer in geschweifte Klammern gesetzt werden.</p>
 
-    <p>Um eine Sequenz von drei Vorkommen von <code>der</code> zu suchen, können Sie Ihre Abfrage auf eine der folgenden Arten formulieren - sie werden dieselben Ergebnisse erhalten:</p>
+    <p>Um eine Sequenz von drei Vorkommen eines Wortes zu suchen, können Sie Ihre Abfrage auf eine der folgenden Arten formulieren - sie werden die selben Ergebnisse erhalten:</p>
 
   %= doc_query poliqarp => 'der der der'
   %= doc_query poliqarp => 'der{3}'
   %= doc_query poliqarp => '[orth=der]{3}'
 
-  <p>Im Unterschied zu regulären Ausdrücken bezieht sich der Wiederholungsoperator nicht auf den Treffer, sondern auf das gegebene Muster. So gibt Ihnen die folgende Abfrage eine Sequenz von drei Wörtern mit dem Begriff <code>der</code> als Teilstring - aber die Wörter müssen nicht identisch sein. Die folgende Abfrage findet beispielsweise eine Sequenz von drei Wörtern, die alle mit <code>la</code> beginnen.</p>
+  <p>Im Unterschied zu regulären Ausdrücken bezieht sich der Wiederholungsoperator nicht auf den Treffer, sondern auf das gegebene Muster. So gibt Ihnen die folgende Abfrage eine Sequenz von drei Wörtern mit einer definierten Zeichenfolge als Teilstring - aber die gefundenen Wörter müssen nicht identisch sein.</p>
 
   %= doc_query poliqarp => '"la.*?"/i{3}'
 
-  <p>Das gleiche gilt für Annotationen. Die folgende Abfrage findet eine Folge von 3 bis 4 Adjektiven, wie sie von der TreeTagger-Foundry annotiert wurden, dem das Lemma <code>ein</code> vorausgeht, wie es von der Standard-Foundry annotatiert wurde, gefolgt von einem Substantiv, wie es von der XIP-Foundry annotiert wurde.</p>
+  <p>Das gleiche gilt für Annotationen. Die folgende Abfrage findet eine Folge von 3 bis 4 Adjektiven in einem definierten Kontext, wobei die Adjektive nicht identisch sein müssen.</p>
 
   %= doc_query poliqarp => '[base=ein][tt/p=ADJA]{3,4}[xip/p=NOUN]'
 
-  <p>Zusätzlich zu nummerierten Quantitäten ist es auch möglich, Wiederholungsinformationen als Kleene-Operatoren <code>?</code>, <code>+</code> und <code>*</code> anzugeben.</p>
+  <p>Zusätzlich zu nummerierten Quantitäten ist es auch möglich, Wiederholungsinformationen als Kleene-Operatoren <code>?</code>, <code>*</code> und <code>+</code> anzugeben.</p>
 
-  <p>Um nach einer Sequenz des Lemmas <code>der</code> (Standard-Foundry), gefolgt von dem Lemma <code>baum</code> (Standard-Foundry) mit einem optionalen Adjektiv von der TreeTagger Foundry annotiert dazwischen zu suchen, können Sie folgendes angeben:</p>
+  <p>Um nach einer Sequenz mit einem optionalen Segment zu suchen, können Sie Folgendes angeben:</p>
 
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]?[base=Baum]'
 
@@ -213,19 +214,19 @@
 
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]{,1}[base=Baum]'
 
-  <p>Um nach den gleichen Sequenzen zu suchen, aber mit unbegrenzten Adjektiven dazwischen wie von der TreeTagger-Foundry annotiert, können Sie den Kleene-Stern benutzen:</p>
+  <p>Um nach den gleichen Sequenzen zu suchen, aber mit einer unbegrenzten Anzahl von Adjektiven, können Sie den Kleene-Stern benutzen:</p>
 
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]*[base=Baum]'
 
-  <p>Und um nach dieser Sequenz zu suchen, aber mit mindestens einem Adjektiv dazwischen, kannst du das Kleene Plus benutzen (alle Abfragen sind identisch):</p>
+  <p>Und um nach dieser Sequenz zu suchen, aber mit mindestens einem Adjektiv dazwischen, können Sie das Kleene Plus benutzen (alle Abfragen sind identisch):</p>
 
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]+[base=Baum]', cutoff => 1
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]{1,}[base=Baum]', cutoff => 1
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA][tt/pos=ADJA]*[base=Baum]', cutoff => 1
 
   <blockquote class="warning">
-    <p>Wiederholungsoperatoren wie <code>{,4}</code>, <code>?</code> und <code>*</code> machen Segmente oder Gruppen von Segmenten optional. Falls diese Abfragen getrennt und nicht als Teil einer Sequenz verwendet werden (und es keine obligatorischen Segmente in der Abfrage gibt), werden Sie vom System gewarnt, dass Ihre Abfrage nicht als optional behandelt wird.</p>
-    <p>Denken Sie daran, dass Optionalität auf unterschiedliche Arten <i>vererbt</i> sein kann, zum Beispiel, wenn Sie nach <code>(junge | alte)? | Tote</code> suchen, ist ein Segment der Alternation optional, was die ganze Abfrage optional macht.</p>
+    <p>Wiederholungsoperatoren wie <code>{,n}</code>, <code>?</code> und <code>*</code> machen Segmente oder Gruppen von Segmenten optional. Falls diese Abfragen getrennt und nicht als Teil einer Sequenz verwendet werden (und es keine obligatorischen Segmente in der Abfrage gibt), werden Sie vom System gewarnt, dass Ihre Abfrage nicht als optional behandelt wird.</p>
+    <p>Denken Sie daran, dass Optionalität auf unterschiedliche Arten <i>vererbt</i> sein kann, zum Beispiel wird eine ganze Abfrage optional, sobald ein Segment der Alternative optional ist.</p>
   </blockquote>
 
   <p>Die Wiederholung kann auch verwendet werden, um Distanzen zwischen Segmenten auszudrücken, indem Sie <%= doc_link_to 'leere Segmente', 'ql', 'poliqarp-plus # leere Segmente'%> verwenden.</p>
@@ -243,11 +244,11 @@
     
   <h4>Positionen</h4>
 
-    <p>Sequenzen wie oben gezeigt können in weiteren komplexen Abfragen verschachtelt und als Unterabfragen behandelt werden (siehe <%= doc_link_to 'Klassenoperatoren', 'ql', 'poliqarp-plus#class-operator' %>, um direkten Zugriff auf Unterabfragen zu erhalten).</p>
+    <p>Sequenzen wie oben können in weiteren komplexen Abfragen verschachtelt und als Unterabfragen behandelt werden (siehe <%= doc_link_to 'Klassenoperatoren', 'ql', 'poliqarp-plus#class-operator' %>, um direkten Zugriff auf Unterabfragen zu erhalten).</p>
     
-    <p>Positionsoperatoren vergleichen zwei Varianten von Unterabfragen und ergeben einen Treffer, falls eine bestimmte Bedingung bezüglich der Position von beiden wahr ist.</p>
+    <p>Positionsoperatoren vergleichen zwei Treffer von Unterabfragen und ergeben einen Treffer, falls eine bestimmte Bedingung bezüglich der Position von beiden wahr ist.</p>
 
-  <p>Der Befehl <code>contains()</code> ergibt einen Treffer, wenn die zweite Unterabfrage innerhalb der Spanne einer ersten Unterabfrage liegt.</p>
+  <p>Der Befehl <code>contains()</code> ergibt einen Treffer, wenn eine zweite Unterabfrage innerhalb der Spanne einer ersten Unterabfrage liegt.</p>
 
   %= doc_query poliqarp => 'contains(<base/s=s>, [tt/p=KOUS])', cutoff => 1
 
@@ -269,28 +270,28 @@
 
   <blockquote class="warning">
     <p>Positionsoperatoren sind noch experimentell und können sich in bestimmten Aspekten in Zukunft ändern (obwohl das definierte Verhalten stabil ist). Es gibt auch falsches Verhalten, das in zukünftigen Versionen korrigiert wird.</p>
-    <p>Optionale Operanden in Positionsoperatoren wie in <code>contains(&lt;s&gt;, [orth=Baum]*)</code> müssen derzeit obligatorisch sein und werden umformuliert um mindestens einmal vorzukommen.</p>
+    <p>Optionale Operanden in Positionsoperatoren müssen derzeit obligatorisch sein und werden umformuliert um mindestens einmal vorzukommen.</p>
     <p>Dieses Verhalten kann sich in Zukunft ändern.</p>
   </blockquote>
 
   <!--
       <blockquote>
-	<p>Die KorAP-Implementierung von Poliqarp unterstützt auch den Postfix <code> innerhalb </ code> Operator, der ähnlich wie der <code> enthält () </ code> Operator funktioniert, aber nicht schachtelbar ist.</p>
+	<p>Die KorAP-Implementierung von Poliqarp unterstützt auch den Postfix <code>within</ code> Operator, der ähnlich wie der <code>contains()</ code> Operator funktioniert, aber nicht schachtelbar ist.</p>
       </blockquote>
       -->
       
 </section>
 
 <section id="class-operators">
-  <h3>Klassen Operatoren</h3>
+  <h3>Klassen-Operatoren</h3>
 
-  <p>Klassen werden verwendet, um Teiltreffer durch umgebende geschweifte Klammern und eine Klassennummer <code>{1: ...}</code> zu gruppieren. Klassen können verwendet werden, um auf Teiltreffer in einer Abfrage zu verweisen, ähnlich wie bei Captures in regulären Ausdrücken. In Poliqarp+ haben Klassen mehrere Zwecke, wobei die Hervorhebung der natürlichste ist:</p>
+  <p>Klassen werden verwendet, um Teiltreffer durch umgebende geschweifte Klammern und eine Klassennummer <code>{1: ...}</code> zu gruppieren. Klassen können verwendet werden, um auf Teiltreffer in einer Abfrage zu verweisen, ähnlich wie bei Captures in regulären Ausdrücken. In Poliqarp+ haben Klassen mehrere Zwecke, wobei die Hervorhebung der Intuitivste ist:</p>
 
   %= doc_query poliqarp => 'der {1:{2:[]} Mann}'
 
   %#= doc_query poliqarp => 'der {1:{2:[]{1,4}} {3:Baum}} {4:[]}'
 
-  <p>In KorAP können Klassen von 1 bis 128 definiert werden. Wenn eine Klassennummer fehlt, ist die Klasse standardmäßig auf die Klassennummer 1 gesetzt: <code>{...}</code> ist gleich <code>{1: ...}</code> voreingestellt.</p>
+  <p>In KorAP können Klassen von 1 bis 128 definiert werden. Wenn eine Klassennummer fehlt, ist die Klasse standardmäßig auf die Klassennummer 1 gesetzt: <code>{...}</code> ist gleich <code>{1: ...}</code>.</p>
 
   <h4>Treffer-Modifikation</h4>
 
@@ -298,13 +299,13 @@
 
   %= doc_query poliqarp => 'focus(der {Baum})'
 
-  <p>Die obige Abfrage sucht nach der Sequenz <code>der Baum</code>, aber der Treffer wird auf <code>Baum</code> beschränkt. Sie können <code>der</code> in dieser Abfrage als positive look-behind zero-length assertion in regulären Ausdrücken verstehen.</p>
+  <p>Die obige Abfrage sucht nach einer Sequenz, wobei der Treffer auf das zweite Segment beschränkt wird. Sie können das erste Segment in dieser Abfrage als <i>positive look-behind zero-length assertion</i> in regulären Ausdrücken verstehen.</p>
 
-  <p>Aber Fokussieren ist weitaus nützlicher, wenn Sie nach Treffern suchen, ohne die Oberflächenform zu kennen. Um beispielsweise alle Begriffe zwischen den Worten &quot;der&quot; und &quot;Mann&quot; zu finden, können Sie suchen:</p>
+  <p>Aber Fokussieren ist weitaus nützlicher, wenn Sie nach Treffern suchen, ohne die Oberflächenform zu kennen. Um beispielsweise alle Wörter zwischen zwei definierten Wörtern zu finden, können Sie suchen:</p>
 
   %= doc_query poliqarp => 'focus(der {[]} Mann)'
 
-  <p>Dies beschränkt die Treffer auf alle interessanten Begriffe zwischen &quot;der&quot; und &quot;Mann&quot;. Oder Sie können nach allen Wörtern, die der Sequenz &quot;der alte und&quot; unmittelbar folgen suchen:</p>
+  <p>Dies beschränkt die Treffer auf alle interessanten Begriffe zwischen der definierten Sequenz. Oder Sie können nach allen Wörtern, die einer Sequenz unmittelbar folgen suchen:</p>
 
   %= doc_query poliqarp => 'focus(der alte und {[]})'
 
@@ -314,7 +315,7 @@
       %= doc_query poliqarp => 'focus(1:contains(er []{,10} sagte, {1:Baum}))'
       -->
 
-  <p>Falls eine Klassennummer entfernt wird, setzt der Fokusoperator standardmäßig auf die Klassennummer 1: <code>focus(...)</code> entspricht <code>focus(1: ...)</code>.</p>
+  <p>Falls eine Klassennummer fehlt, setzt der Fokusoperator standardmäßig auf die Klassennummer 1: <code>focus(...)</code> entspricht <code>focus(1: ...)</code>.</p>
 
   <blockquote class="warning">
     <p>Da Zahlen in geschweiften Klammern unter bestimmten Umständen zweideutig sein können (beispielsweise kann <code>[]{3}</code> entweder als &quot;irgendein Wort dreimal wiederholt&quot; gelesen werden oder als &quot;irgendein Wort, gefolgt von der Zahl 3, die als Klassennummer 1 hervorgehoben ist&quot;), sollten Zahlen immer als <code>[orth=3]</code> für den letzteren Fall ausgedrückt werden.</p>
diff --git a/templates/doc/ql/poliqarp-plus.html.ep b/templates/doc/ql/poliqarp-plus.html.ep
index 7535627..b8fe913 100644
--- a/templates/doc/ql/poliqarp-plus.html.ep
+++ b/templates/doc/ql/poliqarp-plus.html.ep
@@ -7,7 +7,7 @@
 <section id="segments">
   <h3>Simple Segments</h3>
 
-  <p>The atomic elements of Poliqarp queries are segments. Most of the time segments represent words and can be simply queried:</p>
+  <p>The atomic elements of Poliqarp queries are segments. Most of the time segments represent words and can be simple queried:</p>
   %# footnote: In the polish national corpus, Poliqarp can join multiple segments when identifying a single word.
 
   %= doc_query poliqarp => loc('Q_poliqarp_simple', 'Tree')
@@ -28,7 +28,7 @@
 
   %= doc_query poliqarp => '"l(au|ie)fen"'
 
-  <p>Regular expression segments will always match the whole segment, meaning the above query will find words starting with <code>l</code> and ending with <code>n</code>. To support subqueries, you can use the <code>/x</code> flag.</p>
+  <p>Regular expression segments will always match the whole segment, meaning the above query will find words starting with the first letter of the regular expression and ending with the last letter. To support subqueries, you can use the <code>/x</code> flag.</p>
 
     %= doc_query poliqarp => '"l(au|ie)fen"/x', cutoff => 1
 
@@ -36,17 +36,17 @@
 
   %= doc_query poliqarp => '".*?l(au|ie)fen.*?"', cutoff => 1
 
-  <p>The <code>/x</code> flag can also be used in conjuntion with strict expressions to search for substrings:</p>
+  <p>The <code>/x</code> flag can also be used in conjunction with strict expressions to search for substrings:</p>
 
   %= doc_query poliqarp => 'trenn/xi', cutoff => 1
 
-  <p>The above query will find all occurrences of segments including the string <code>trenn</code> case insensitive, like &quot;Trennung&quot;, &quot;unzertrennlich&quot;, or &quot;Wettrennen&quot;.</p>
+  <p>The above query will find all occurrences of segments including the defined substring regardless of upper and lower case.</p>
 
   <blockquote class="warning">
-    <p>Beware: These kinds of queries (with prepended <code>.*</code> expressions) are extremely slow!</p>
+    <p>Beware: Queries with prepended <code>.*</code> expressions can become extremely slow!</p>
   </blockquote>
 
-  <p>You can again apply the <code>/i</code> flag to search case insensitive.</p>
+  <p>You can again apply the <code>/i</code> flag to regular expressions to search case insensitive.</p>
 
   %= doc_query poliqarp => '"l(au|ie)fen"/xi', cutoff => 1
 </section>
@@ -56,7 +56,7 @@
 
   <p>Complex segments are expressed in square brackets and contain additional information on the resource of the term under scrutiny by providing key/value pairs, separated by an equal-sign.</p>
 
-  <p>The KorAP implementation of Poliqarp provides three special segment keys: <code>orth</code> for surface forms, <code>base</code> for lemmata, and <code>pos</code> for Part-of-Speech. The following complex query finds all surface forms of <code>Baum</code>.</p>
+  <p>The KorAP implementation of Poliqarp provides three special segment keys: <code>orth</code> for surface forms, <code>base</code> for lemmata, and <code>pos</code> for Part-of-Speech. The following complex query finds all surface forms of the defined word.</p>
   %# There are more special keys in Poliqarp, but KorAP doesn't provide them.
 
   %= doc_query poliqarp => '[orth=Baum]'
@@ -70,7 +70,7 @@
   %= doc_query poliqarp => '[orth="l(au|ie)fen"/xi]', cutoff => 1
 
   <p>Another special key is <code>base</code>, refering to the lemma annotation of the <%= doc_link_to 'default foundry', 'data', 'annotation' %>.
-    The following query finds all occurrences of segments annotated as the lemma <code>Baum</code> by the default foundry.</p>
+    The following query finds all occurrences of segments annotated as a specified lemma by the default foundry.</p>
 
   %= doc_query poliqarp => '[base=Baum]'
 
@@ -80,7 +80,7 @@
   %= doc_query poliqarp => loc('Q_poliqarp_complexpos', '[pos=ADJA]')
 
   <p>Complex segments requesting further token annotations can have keys following the <code>foundry/layer</code> notation.
-    For example to find all occurrences of plural words in the <code>mate</code> foundry, you can search using the following query:</p>
+    For example to find all occurrences of plural words in a supporting foundry, you can search using the following query:</p>
 
   %= doc_query poliqarp => '[mate/m=number:pl]'
 
@@ -91,7 +91,7 @@
   %= doc_query poliqarp => '[!pos=ADJA]'
 
   <blockquote class="warning">
-    <p>Beware: Negated complex segments can't be searched solely in the Lucene index.
+    <p>Beware: Negated complex segments can't be searched as a single statement.
       However, they work in case they are part of a <%= doc_link_to 'sequence', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %>.</p>
   </blockquote>
 
@@ -104,7 +104,7 @@
   <p>Empty segments are useful to express distances of words by using <%= doc_link_to 'repetitions', 'ql', 'poliqarp-plus#syntagmatic-operators-repetitions' %>.</p>
 
   <blockquote class="warning">
-    <p>Beware: Empty segments can't be searched solely in the Lucene index.
+    <p>Beware: Empty segments can't be searched as a single statement.
       However, they work in case they are part of a <%= doc_link_to 'sequence', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %>.</p>
   </blockquote>
 </section>
@@ -123,7 +123,7 @@
 <section id="paradigmatic-operators">
   <h3>Paradigmatic Operators</h3>
 
-  <p>A complex segment can have multiple properties a token has to fulfill. For example to search for all words with the surface form <code>laufe</code> (no matter if capitalized or not) that have the lemma <code>lauf</code> (and not, for example, <code>laufen</code>, which would indicate a verb or a gerund), you can search for:</p>
+  <p>A complex segment can have multiple properties a token requires. For example to search for all words with a certain surface form of a particular lemma (no matter if capitalized or not), you can search for:</p>
 
   %= doc_query poliqarp => '[orth=laufe/i & base=Lauf]'
 
@@ -134,7 +134,7 @@
 
   <p>The following query is therefore equivalent:</p>
 
-  %= doc_query poliqarp => '[orth=laufe & !base=Lauf]'
+  %= doc_query poliqarp => '[orth=laufe/i & !base=Lauf]'
 
   <p>Alternatives can be expressed by using the pipe symbol:</p>
 
@@ -150,7 +150,7 @@
 
   <h4 id="syntagmatic-operators-sequence">Sequences</h4>
 
-  <p>Sequences can be used to search for segments in order. For example to search for the word &quot;alte&quot; preceded by &quot;der&quot; and followed by &quot;Mann&quot;, you can simple search for the sequence of simple expressions separated by whitespaces.</p>
+  <p>Sequences can be used to search for segments in order. For this, simple expressions are separated by whitespaces.</p>
 
   %= doc_query poliqarp => 'der alte Mann'
 
@@ -162,7 +162,7 @@
 
   %= doc_query poliqarp => '[orth=der][][orth=Mann]'
 
-  <p>You are also able to mix segments and spans in sequences, for example to search for the word &quot;Der&quot; at the beginning of a sentence (which can be interpreted as the first word after the end of a sentence).</p>
+  <p>You are also able to mix segments and spans in sequences, for example to search for a word at the beginning of a sentence (which can be interpreted as the first word after the end of a sentence).</p>
 
   %= doc_query poliqarp => '<base/s=s>[orth=Der]'
 
@@ -172,38 +172,38 @@
 
   <h4>Alternation</h4>
 
-  <p>Alternations allow for searching alternative segments or sequences of segments, similar to the paradigmatic operator. You already have seen that you can search for both sequences of <code>der alte Mann</code> and <code>der junge Mann</code> by typing in:</p>
+  <p>Alternations allow for searching alternative segments or sequences of segments, similar to the paradigmatic operator. You already have seen that you can search for a sequence with an alternative adjective in between by typing in:</p>
 
   %= doc_query poliqarp => 'der [orth=alte | orth=junge] Mann'
 
-  <p>However, this formulation has problems in case you want to search for alternations of sequences rather than terms. If you want to search for both sequences of <code>dem jungen Mann</code> and <code>der alte Mann</code> you can use syntagmatic alternations and groups:</p>
+  <p>However, this formulation has problems in case you want to search for alternations of sequences rather than terms. In this case you can use syntagmatic alternations and groups:</p>
 
   %= doc_query poliqarp => '(dem jungen | der alte) Mann'
 
-  <p>The pipe symbol works the same way as with the paradigmatic alternation, but supports sequences of different length as operands. The above query for <code>der alte Mann</code> and <code>der junge Mann</code> can therefor be reformulated as:</p>
+  <p>The pipe symbol works the same way as with the paradigmatic alternation, but supports sequences of different length as operands. The above query with an alternative adjective in a sequence can therefore be reformulated as:</p>
 
   %= doc_query poliqarp => 'der (junge | alte) Mann'
 
   <h4 id="syntagmatic-operators-repetitions">Repetition</h4>
 
   <p>Repetitions in Poliqarp are realized as in <%= doc_link_to 'regular expressions', 'ql', 'regexp' %>, by giving quantifieres in curly brackets.</p>
-  <p>To search for a sequence of three occurrences of <code>der</code>, you can formulate your query in any of the following ways - they will have the same results:</p>
+  <p>To search for a sequence of three occurrences of a defined string, you can formulate your query in any of the following ways - they will have the same results:</p>
 
   %= doc_query poliqarp => 'der der der'
   %= doc_query poliqarp => 'der{3}'
   %= doc_query poliqarp => '[orth=der]{3}'
 
-  <p>In difference to regular expressions, the repetition operation won't refer to the match but to the pattern given. So the following query will give you a sequence of three words having the term <code>der</code> as a substring - but the words don't have to be identical. The following query for example will match a sequence of three words all starting with <code>la</code>.</p>
+  <p>In difference to regular expressions, the repetition operation won't refer to the match but to the pattern given. So the following query will give you a sequence of three words with a defined substring - but the words don't have to be identical.</p>
 
   %= doc_query poliqarp => '"la.*?"/i{3}'
 
-  <p>The same is true for annotations. The following query will find a sequence of 3 to 4 adjectives as annotated by the TreeTagger foundry, that is preceded by the lemma <code>ein</code> as annotated by the default foundry and followed by a noun as annotated by the XIP foundry. The adjectives do not have to be identical though.</p>
+  <p>The same is true for annotations. The following query will find a sequence of 3 to 4 adjectives in a defined context. The adjectives do not have to be identical though.</p>
 
   %= doc_query poliqarp => '[base=ein][tt/p=ADJA]{3,4}[xip/p=NOUN]'
 
-  <p>In addition to numbered quantities, it is also possible to pass repetition information as Kleene operators <code>?</code>, <code>+</code>, and <code>*</code>.</p>
+  <p>In addition to numbered quantities, it is also possible to pass repetition information as Kleene operators <code>?</code>, <code>*</code>, and <code>+</code>.</p>
 
-  <p>To search for a sequence of the lemma <code>der</code> followed by the lemma <code>baum</code> as annotated by the default foundry, but allowing an optional adjective as annotated by the TreeTagger foundry in between, you can search for:</p>
+  <p>To search for a sequence with an optional segment, you can search for:</p>
 
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]?[base=Baum]'
 
@@ -211,7 +211,7 @@
 
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]{,1}[base=Baum]'
 
-  <p>To search for the same sequences but with unlimited adjectives as annotated by the TreeTagger foundry in between, you can use the Kleene Star:</p>
+  <p>To search for the same sequences but with unlimited adjectives in between, you can use the Kleene Star:</p>
 
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA]*[base=Baum]'
 
@@ -222,8 +222,8 @@
   %= doc_query poliqarp => '[base=die][tt/pos=ADJA][tt/pos=ADJA]*[base=Baum]', cutoff => 1
 
   <blockquote class="warning">
-    <p>Repetition operators like <code>{,4}</code>, <code>?</code>, and <code>*</code> make segments or groups of segments optional. In case these queries are used separated and not as part of a sequence (and there are no mandatory segments in the query), you will be warned by the system that your query won't be treated as optional.</p>
-    <p>Keep in mind that optionality may be somehow <i>inherited</i>, for example when you search for <code>(junge|alte)?|tote</code>, one segment of the alternation is optional, which makes the whole query optional as well.</p>
+    <p>Repetition operators like <code>{,n}</code>, <code>?</code>, and <code>*</code> make segments or groups of segments optional. In case these queries are used separated and not as part of a sequence (and there are no mandatory segments in the query), you will be warned by the system that your query won't be treated as optional.</p>
+    <p>Keep in mind that optionality may be somehow <i>inherited</i>, for example an entire query becomes optional as soon as one segment of an alternation is optional.</p>
   </blockquote>
 
   <p>Repetition can also be used to express distances between segments by using <%= doc_link_to 'empty segments', 'ql', 'poliqarp-plus#empty-segments' %>.</p>
@@ -255,7 +255,7 @@
 
   %= doc_query poliqarp => 'endsWith(<base/s=s>, [opennlp/p=NN])', cutoff => 1
 
-  <p>The <code>matches()</code> operation will match, when a second subquery has the exact same span of a first subquery.</p>
+  <p>The <code>matches()</code> operation will match, when a second subquery has the exact same span as a first subquery.</p>
 
   %= doc_query poliqarp => 'matches(<base/s=s>,[tt/p=CARD][tt/p="N.*"])', cutoff => 1
 
@@ -265,7 +265,7 @@
 
   <blockquote class="warning">
     <p>Positional operators are still experimental and may change in certain aspects in the future (although the behaviour defined is intended to be stable). There is also known incorrect behaviour which will be corrected in future versions.</p>
-    <p>Optional operands in position operators, like in <code>contains(&lt;s&gt;,[orth=Baum]*)</code>, have to be mandatory at the moment and will be reformulated to occur at least once.</p>
+    <p>Optional operands in position operators have to be mandatory at the moment and will be reformulated to occur at least once.</p>
     <p>This behaviour may change in the future.</p>
   </blockquote>
 
@@ -280,13 +280,13 @@
 <section id="class-operators">
   <h3>Class Operators</h3>
 
-  <p>Classes are used to group sub matches by surrounding curly brackets and a class number <code>{1:...}</code>. Classes can be used to refer to sub matches in a query, similar to captures in regular expressions. In Poliqarp+ classes have multiple purposes, with highlighting being the most intuitive one:</p>
+  <p>Classes are used to group submatches by surrounding curly brackets and a class number <code>{1:...}</code>. Classes can be used to refer to submatches in a query, similar to captures in regular expressions. In Poliqarp+ classes have multiple purposes, with highlighting being the most intuitive one:</p>
 
   %= doc_query poliqarp => 'der {1:{2:[]} Mann}'
 
   %#= doc_query poliqarp => 'der {1:{2:[]{1,4}} {3:Baum}} {4:[]}'
 
-  <p>In KorAP classes can be defined from 1 to 128. In case a class number is dismissed, the class defaults to the class number 1: <code>{...}</code> is equal to <code>{1:...}</code>.</p>
+  <p>In KorAP classes can be defined from 1 to 128. In case a class number is missing, the class defaults to the class number 1: <code>{...}</code> is equal to <code>{1:...}</code>.</p>
 
   <h4>Match Modification</h4>
 
@@ -294,13 +294,13 @@
 
   %= doc_query poliqarp => 'focus(der {Baum})'
 
-  <p>The query above will search for the sequence <code>der Baum</code> but the match will be limited to <code>Baum</code>. You can think of <code>der</code> in this query as a positive look-behind zero-length assertion in regular expressions.</p>
+  <p>The query above will search for a sequence but the match will be limited to the second segment. You can think of the first segment in this query as a <i>positive look-behind zero-length assertion</i> in regular expressions.</p>
 
-  <p>But focus is way more useful if you are searching for matches without knowing the surface form. For example, to find all terms between the words &quot;der&quot; and &quot;Mann&quot; you can search:</p>
+  <p>But focus is way more useful if you are searching for matches without knowing the surface form. For example, to find all terms between defined words you can search:</p>
 
   %= doc_query poliqarp => 'focus(der {[]} Mann)'
 
-  <p>This will limit the match to all interesting terms in between &quot;der&quot; and &quot;Mann&quot;. Or you may want to search for all words following the sequence &quot;der alte und&quot; immediately:</p>
+  <p>Or you may want to search for all words following a known sequence immediately:</p>
 
   %= doc_query poliqarp => 'focus(der alte und {[]})'
 
@@ -311,7 +311,7 @@
       %= doc_query poliqarp => 'focus(1:contains(er []{,10} sagte, 1{Baum}))'
       -->
 
-  <p>In case a class number is dismissed, the focus operator defaults to the class number 1: <code>focus(...)</code> is equal to <code>focus(1: ...)</code>.</p>
+  <p>In case a class number is missing, the focus operator defaults to the class number 1: <code>focus(...)</code> is equal to <code>focus(1: ...)</code>.</p>
 
   <blockquote class="warning">
     <p>As numbers in curly brackets can be ambiguous in certain circumstances, for example <code>[]{3}</code> can be read as either &quot;any word repeated three times&quot; or &quot;any word followed by the number 3 highlighted as class number 1&quot;, numbers should always be expressed as <code>[orth=3]</code> for the latter case.</p>