4. Hoe worden expressies opgebouwd? XPath!

Enkelvoudige expressies evalueren de waarde van een bouwsteen. De structuur van de expressie is als volgt: $<label> <operator> ‘<value>’.
Met $<label> wordt verwezen naar de label property van een bouwsteen (invoer veld, vrij tekstblok, blok voor radiobuttons en blok voor checkboxes). De <operator> vergelijkt de door de gebruiker ingevoerde waarde met <value>. Gebruik nooit dubbele quotes in een expressie! Dat resulteert in foutmelding.

Voorbeelden van enkelvoudige expressies:
$x221 = ‘J’
$x200 = ‘A’
$x234 < 7 (in geval numeriek veld)
$x776 > 0 (in geval numeriek veld)

Datatypes

De expressies houden rekening met het datatype van het gerelateerde widget. Is dit een numeriek veld (xs:integer), dan wordt vergeleken met een getal: $x69 < 3.
Is het een string (xs:string), dan wordt vergeleken met een string: $x69 = ‘a’.
Is het een datumveld, dan wordt vergeleken met een datum: $datum = xs:date('2011-02-14').
De item waarde van radiobuttons en checkboxes worden altijd als string geïnterpreteerd.

Een antwoordveld is in het nog lege formulier altijd een tekst veld (string). Bij het evalueren van expressies (relevantie of beperking) wordt het antwoord geconverteerd naar het juiste datatype. Dit kan niet als het antwoord veld nog leeg is. Door bij initiele waarde current-date() in te vullen wordt het datumtype omgezet in 'date'. In expressies moet hiermee rekening worden gehouden. Een gegeven met datatype 'geheel getal' is direct bij het opstarten dus nog een string. Dit leidt tot een fout pagina wanneer u probeert het formulier te bekijken. Door enkele aanhalingstekens rondom cijfers (double) te plaatsen, $getal>='0' wordt de expressie wel geaccepteerd.

Het datumveld geeft vaak problemen in expressies als ze met current-date() worden vergeleken. Een beperking als . < current-date() (alleen data voor vandaag zijn acceptable) zal een fout melding genereren. Deze wordt verholpen door current-date() bij initiële waarde in te vullen

Xpath functies

De toolkit maakt gebruik van XPath voor al haar expressies. Een uitgebreide lijst functies en operatoren staat op  https://www.w3schools.com/xml/xsl_functions.asp.

De volgende tabellen tonen enkele veel gebruikte XPath functies en operators.
 

Operatoren
Operator Betekenis Voorbeeld
= Is gelijk aan $x12 = 1
!= Is niet gelijk aan $x12 != ‘a’
> Groter dan (hoger in het alfabet op basis van ASCII codes, grotere getallen, latere data. $x12 > ‘a’
< Kleiner dan (eerder in het alfabet op basis van ASCII codes, kleiner getal, eerdere data. $x12 < 5
+ optellen $bedrag1 + $bedrag2
- Aftrekken current-date() - xs:dayTimeDuration('P10D')
and en (.>18) and (.<65)
or of (../*[1]/*[2]= 'o') or (../*[3]/*[2]= 'w')

 

Functies
Functie Betekenis Voorbeeld
concat(string1, string2) koppel een tekst aan een formule concat('Uw parkeerkaarten kosten: ', $aantal*$zone)
starts-with(string1, string2) String 1 start met string 2 starts-with($naam,'L')
substring(string,<start>,<lengte>) Selecteer uit string een substring van <lengte> tekens vanaf positie <start>. substring(../*[1], 5, 2) = 'DH'
contains(string1, string2) String1 bevat string2 contains($a,’lennard’) of
contains($a,$b) - ook true als $b=''
empty($id) Is leeg empty($x12)
not(<expressie>) Waar als expressie onwaar is en andersom not(number(substring(., 5,1)))
string-length(string) Lengte string-length(.) < 5
number(string) Converteer naar een getal number(substring($postcode,1,2)) = 25
current-date() Datum van vandaag current-date()
xs:date(string) vertaal de string naar een datum xs:date('2011-09-14')
xs:date(concat(year-from-date(current-date()), '-06-30'))
xs:yearMonthDuration('P<j>Y<m>M') Tijdsduur in maanden m en jaren j . > current-date() + xs:yearMonthDuration('P13Y')
13 jaar na vandaag.
.> current-date() + xs:yearMonthDuration('P1Y2M')
1 jaar en 2 maanden na vandaag
xs:dayTimeDuration('P<d>D') Tijdsduur in dagen current-date() - xs:dayTimeDuration('P10D')
10 dagen vóór vandaag
format-date() Datum formateren

format-date($datum,'[D,2]-[M,2]-[Y]')

format-date($dag,'[F]') Dag in de Week

Voorbeeld expressies

Voorbeeld van een volledige expressie, rekening houdende met het hierboven vermelde datatype punt:

Wanneer de burger minimaal 18 jaar oud moet zijn:
$datum > current-date() - xs:yearMonthDuration('P18Y')

 

Wanneer een veld alleen getoond mag worden binnen een bepaalde periode:
($datum > xs:date('2017-08-01') and $datum < xs:date('2017-10-01'))

Wanneer een veld alleen getoond mag worden buiten een bepaalde periode:
($datum < xs:date('2017-08-01') or $datum > xs:date('2017-10-01'))

Weergeven van de juiste dag van de week als een datum wordt ingegeven:
In een tekstveld met tekst type 'XPath: if($datum castable as xs:date) then(number(format-date(xs:date($datum),'[F0]','en',(),()))) else ('0') waarbij $datum verwijst naar een datumveld;
In een tekstveld met tekst type 'XPath: if ($dag='1') then 'Maandag' else if ($dag='2') then 'Dinsdag' else if ($dag='3') then 'Woensdag' else if ($dag='4') then 'Donderdag' else if ($dag='5') then 'Vrijdag' else if ($dag='6') then 'Zaterdag' else if ($dag='7') then 'Zondag' else if ($dag='0') then 'Verkeerde datuminvoer' else '' waarbij $dag het label is van bovenstaand veld.

Blok voor checkboxes
De item waarden van checkboxes zijn altijd tekstvelden. Hierop zijn de XPath tekst functies van toepassing. Omdat meerdere checkboxes geselecteerd kunnen worden is het belangrijk de 'contains'-functie te gebruiken om te controleren of een bepaalde optie is geselecteerd.

Voorbeeld:
Gegeven een blok voor checkboxes met 3 checkboxes met item waarden: ‘v’, ‘f’ en ‘a’. Met de volgende functie maak je een standaard blok relevant als ‘v’ en/of ‘f’ is geselecteerd:

contains($x140113927, 'v') or contains($x140113927, 'f')

not(contains($x140113927, 'v')) or not(contains($x140113927, 'f'))
 

U bent hier