Chess Query Language
# Chess Query Language

Chess Query Language (CQL) ist eine Sprache zur Abfrage von bestimmten Situationen in Schachpartien oder Schachstudien. Die Partien bzw. Studien müssen in der Portable Game Notation vorliegen und werden nach der in CQL zu beschreibenden Situation durchsucht. CQL wird unter anderem zur wissenschaftlichen Auswertung von Schachpartien genutzt.

## Abgrenzung und Einschränkungen

Ein verwandtes Abfragesystem für Schachpositionen ist Query by Example (QBE). Dabei wird jede Position einer Partie gehasht (meist per Zobrist-Hashing) und in einer Hashtabelle gespeichert. Zur Abfrage einer bestimmten Position wird deren Hash berechnet und die passenden Ergebnisse aus der Datenbank zurückgegeben. Dieser Ansatz ist effizient auch auf sehr große Spielsammlungen anzuwenden.
Der größte Nachteil dieser Methode ist, dass damit nur exakte Treffer gefunden werden können. Selbst minimal andere Stellungen führen zu einem völlig anderen Hashwert und werden per QBE nicht gefunden. CQL umgeht diesen Nachteil, indem eine Näherungssuche möglich gemacht wird. Dazu wird ein boolescher Filter eingesetzt, der die gewünschte Position exakt spezifiziert. Die Abfrage (position [RQ]b2 bg8) findet beispielsweise alle Stellungen mit einem weißen Turm oder einer weißen Dame auf dem Feld b2 und einem schwarzen Läufer auf g8. Dieser Ansatz ist jedoch auch bei nur moderat großen Datenbanken erheblich langsamer als die hashbasierte Suche mit QBE.
Eine weitere Einschränkung stellt die boolesche Natur der Abfrage dar: Sie kann nur exakte Treffer zurückgeben, diese aber nicht nach Ähnlichkeit mit einer gewünschten Stellung gewichten.