PfadiQL
Eine Suchsprache für Pfadfinderdaten
PfadiQL steht für Pfadfinder Query Language (Suchsprache), angelehnt an SQL und FQL (von Facebook).
Was kann PfadiQL
Mit PfadiQL kannst du in der ScoutNet API gezielt nach bestimmten Daten suchen und zwar egal welche Programmiersprache zu einsetzt. PfadiQL erlaubt das Ausdrücken von Filterregeln, ähnlich dem WHERE-Teil von SQL-Queries und ist für jeden ScoutNet API client verfügbar. Filterregeln können mit UND und ODER verbunden und geklammert werden.
Operatoren
PfadiQL bietet folgende Operatoren mit den allgemein geläufigen Bedeutungen an:
NOT IN LIKE <= >= < > = <> AND OR
Die obige Reihenfolge gibt auch die Präzedenz der Operatoren an. NOT bindet am stärksten, OR an geringsten.
Zusätzlich gibt es noch folgende Aliase für den schnelleren Einstieg und verschiedene Geschmäcker:
not ! in == != and or
Verfügbare Datenfelder
Mit den Operatoren können Datenfelder mit Werten verglichen werden, um so die gewünschten Einträge zu finden. Die genau zur Verfügung stehenden Datenfelder sind:
kind event
id, uid, group_id, title, organizer, target_group, start_date, start_time, end_date, end_time, zip, location, url_text, url, description, last_modified_by, last_modified_on, keywords, sections
kind group
name, zip, city, district, internal_id, federal_state, country
kind url
id, group_id, url, text
Beschreibungen zu den Feldern finden sich zum Teil in der API Dokumentation des PHP clients.
Zu beachten ist: Die meisten Felder enthalten einfache Werte, z.B. kann titel gleich "Leiterrunde" sein und id gleich 12345. Hier können daher die Operatoren == <> etc. angewandt werden. Manche Felder enthalten jedoch mehrere Werte, wie z.B. keywords. Hier muss dann der Operator IN verwendet werden, um zu testen, ob ein Wert darin enthalten ist. Beim Vergleich von Strings ist zu beachten, dass diese UTF-8 kodiert sein müssen, da es sonst Probleme mit Umlauten gibt.
Platzhalter
Für Bequemlichkeit beim Maskieren/Escapen und zum Schutz vor Injection-Attacken unterstützt PfadiQL Platzhalter. Es empfiehlt sich diese zu benutzen wenn Werte in der Suchanfrage aus Benutzereingaben kommen (z.B. aus der Datenbank oder aus $_GET, $_POST, etc. ) oder um eine Suchanfrage lesbarer zu gestalten. Dafür ersetzt man einen Wert in der Suchanfrage durch ein ? und übergibt den tatsächlichen Wert. Wie das funktioniert kommt auf den jeweilgen Client an. Beispiele gibt es auf den Seiten der Clients.
Beispiele
Code
// alle Ausbildungstermine "Ausbildung" IN keywords // Alle Leiterrunden 2011 end_date > "2011-01-01" AND start_date < "2011-12-31" AND "Leiterrunde" in keywords // Alle Leiterrunden 2011 mit Platzhaltern end_date > ? AND start_date < ? AND ? in keywords // Parameter: '2011-01-01', '2011-12-31', 'Leiterrunde' // Alle Gruppenstunden der Rover und der Wölflings title == "Gruppenstunde" AND ( ? in sections OR ? in sections ) // Parameter: 'Rover', 'Wölflinge' // Alle Gruppenstunden ausser Rover title == "Gruppenstunde" AND not "Rover" in sections
Fragen? Probleme? Anregungen? Beiträge? Oder du willst mithelfen?
Wende dich an Chris unter chris(at)scoutnet.de.