index Zurück zur Hilfe-Übersichthome Zurück zur Homepage

CQL Syntax

Ein CQL-Skript hat die folgende generische Struktur:

(match
  (position ... )
  (position ... )
  (position ... )
  ...)

In diesem Beispiel repräsentiert "..." verschiedene Schlüsselwörter und Befehle, die nachfolgend noch definiert werden. Der englische Begriff "match" bedeutet hier "Filter" oder "Suche".

Als Beispiel folgt ein einfaches CQL-Skript um vierfach hintereinanderstehende Bauern aufzufinden, aber nur in Partien gespielt im Jahr 2013:

(match
  :year 2013
  (position
    :pawncount consecutive(4) >0
    :flipcolor))

Um die einzelnen Bestandteile von CQL zu verstehen, werden einige syntaktische Terminologien definiert.

Eine Liste ist eine endliche Folge von Elementen, separiert mit Leerzeichen, und eingeschlossen in Klammern. Jedes Element ist entweder eine Zeichenkette, die keine Leerzeichen enthält, oder eine weitere Liste.

Beispielsweise ist

eine Liste deren drei Elemente die Zeichenketten "position", ":shifthorizontal", und ":flipcolor" sind.

Die obige Liste, beginnend mit "(match", hat sechs Elemente. Das letzte Element ist selbst eine Liste mit sechs Elementen, dessen erstes Element "position", und dessen letztes Element ":flipcolor" ist.

Ein Schlüsselwort ist eine Zeichenkette beginnend mit ":". Beispielsweise beinhaltet die obige Suchliste das Schlüsselwörter :year.

Ein Schlüsselwortparameter ist eine Liste, oder eine Zeichenkette, unmittelbar hinter dem Schlüsselwort, das einen Parameter erwartet. Einige Schlüsselwörter erwarten mehrere Parameter, einen hinter dem anderen.

Beispiele für Schlüsselwortparameter

In der Liste

(match
  (position
    :pawncount consecutive(4) >0
    :flipcolor))

erhält :pawncount die Parameter consecutive(4) und >0. Die anderen Schlüsselwörter :shifthorizontal und :flipcolor erwarten keine Parameter. Eine Liste mit dem ersten Element "match" wird eine Suchliste genannt und definiert einen Suchfilter.

Eine Liste mit dem ersten Element "position" wird eine Positionsliste genannt und definiert einen Positionsfilter.

Funktionsweise von CQL

Um zu bestimmen ob ein Suchfilter eine Partie filtert (findet), agiert CQL wie folgendermaßen beschrieben. Es wendet jeden einzelnen Positionsfilter, der in der Suchliste definiert ist, auf die Startposition an. (Der CQL-Standard läßt die Startposition aus.) Danach spielt es jeden Zug der Partie, gegebenfalls auch die der Varianten. Nach jedem Zug wird wiederum jeder einzelne Positionsfilter auf die enstandene Position angewendet.

Beispiel: In einer Partie mit 40 Zügen ohne Untervarianten, in der Weiß den ersten Zug macht und Schwarz den letzten, werden genau 81 Positionen von CQL untersucht, inklusive der Startposition. (Der CQL-Standard läßt die Startposition aus.)

Sobald alle Positionsfilter der Suchliste eine Position in der Partie filtern (auffinden), genau dann filtert diese Suchliste diese Partie.

Der einfachste Positionsfilter ist:

(position)

Dieser Positionsfilter filtert jede Position. Folglich filtert das folgende Skript alle Partien:

(match (position))

In CQL-S kann dieses Skript noch einfacher formuliert werden, denn in CQL-S muß die Suchliste, abweichend vom CQL-Standard, keine Positionsliste enthalten:

(match)

Kommentare in einem CQL-Skript

Alle Zeichen hinter einem Semikolon in einem CQL-Skript werden ignoriert. Beispiel:

; Ein CQL-Skript das alle Partien filtert
(match
  (position) ; ein Positionsfilter der alles filtert
)

Einige Basiselemente