Condities
From HNS.dev
Conditionele functies en operatoren kunnen alleen gebruikt worden in where-tags. Ze onderscheiden zich van normale expressies doordat ze een waarheidswaarde teruggeven; de verschillende conditionele operatoren ondersteuenen wel expressies als linker- en rechterkant. De querysyntax ondersteund de standaard operatoren, alsmede een aantal domeinspecifieke functies.
Contents |
Conditionele operatoren
De querysyntax ondersteunt de zes traditionele conditionele operatoren, zowel in platte syntax als in de gestructureerde syntax.
- Gelijk aan.
- Platte syntax: a = b
- Gestructureerde syntax: <eq><p>a</p><p>b</p></eq>
- Ongelijk aan.
- Platte syntax: a != b
- Gestructureerde syntax: <ne><p>a</p><p>b</p></ne>
- Groter dan.
- Platte syntax: a > b
- Gestructureerde syntax: <gt><p>a</p><p>b</p></gt>
- Kleiner dan.
- Platte syntax: a < b
- Gestructureerde syntax: <lt><p>a</p><p>b</p></lt>
- Groter dan of gelijk aan.
- Platte syntax: a >= b
- Gestructureerde syntax: <ge><p>a</p><p>b</p></ge>
- Kleiner dan of gelijk aan.
- Platte syntax: a <= b
- Gestructureerde syntax: <le><p>a</p><p>b</p></le>
Patroonherkenning
De like-operator zoals gebruikt in SQL wordt ondersteund. Deze operator accepteert als rechterkant een patroonstring die met de linkerkant vergeleken wordt. Deze patroonstring ondersteund twee wildcardkarakters, te weten:
- % (procent). Dit karakter komt overeen met elke string van 0 of meer karakters.
- _ (underscore). Dit karakter komt overeen met precies één karakter.
Deze operator heeft de volgende syntax:
- Platte syntax: a like '%x%'
- Gestructureerde syntax: <like><p>a</p><v>%x%</v></like>
De operator is ook beschikbaar in een hoofdletter-ongevoelige variant. Deze operator heet ilike in plaats van like maar heeft verder dezelfe syntax.
Connectieven
De standaard logische connectieven worden ondersteund:
- Conjunctie:
- Platte syntax: a and b
- Gestructureerde syntax: <and><p>a</p><p>b</p></and>
- Disjunctie:
- Platte syntax: a or b
- Gestructureerde syntax: <or><p>a</p><p>b</p></or>
- Negatie:
- Platte syntax: not a
- Gestructureerde syntax: <not>a</not>
Verzamelingen
De querysyntax bevat een functie om alleen elementen van een verzameling te selectern. De syntax hiervan is:
- Platte syntax: elem table[id].field
- Gestructureerde syntax: <elem><p>table[id].field</p></elem>
Deze functie selecteert alleen de objecten die een onderdeel zijn van de genoemde set. Als we bijvoorbeeld naar personen zoeken en de where-conditie is elem document[1].authors, worden alleen die personen geselecteerd die een onderdeel zijn van de authors-verzameling van het document met id 1; in andere woorden, de auteurs van dit document. De syntax bevat ook de in-operator, om een waarde met een lijst van waarden te vergelijken. De syntax hiervan is:
- Platte syntax: a in (1, 2, 3)
- Gestructureerde syntax: <in><p>a</p><l><v>1</v><v>2</v><v>3</v></l></in>
In dit voorbeeld wordt een object alleen geselecteerd als de kolom a de waarde 1, 2 of 3 heeft.
Tagovereenkomsten
De querysyntax bevat een functie om tags te vergelijken met een ander object. De syntax hiervan is:
- Platte syntax: match tabel[id] at 75%
- Gestructureerde syntax: <match weight="75%">tabel[id]</match>
Deze operatie vergelijkt de tag cloud van elk van de objecten in de gezochte tabel met de tag cloud van het gespecificeerde object. Deze vergelijking gebeurt via het wiskundige inproduct, dat wil zeggen, per tag wordt het product genomen van de gewichten in de twee objecten, en de totale som wordt hiervan genomen. Het object met de hoogste gelijkenis wordt gedefinieerd als een 100% overeenkomst, en de andere objecten worden evenredig geschaald. Deze operator selecteert vervolgens alleen die objecten die minstens de gevraagde een overeenkomst hebben (in het voorbeeld 75%). Merk op dat het id-veld in de syntax alleen een numeriek id ondersteund; expressies worden hier niet geaccepteerd. Als deze operatie wordt gebruikt, wordt de resultaat set naast de al opgegeven sorteringsvolgordes ook gesorteerd op de mate van overeenkomst; de bestaande volgordes worden echter eerst geraadpleegd.

