Instances
Één van de mogelijke bronnen van gegevens in select expressies is de verzameling van instances beschikbaar tijdens het invullen van een formulier, door middel van de bron instance(...). Bijvoorbeeld:
select $[c1], $[c2] from instance("lookuplists", "lookuplist[@target='straatnaammelding']/row", "value", "label") end
Het gebruik van deze bron vraagt onder meer om kennis van XForms, XML, en XPath. De tekst hieronder heeft als doel de bron te benoemen en wat overzichtsinformatie te geven.
Tijdens het invullen van een formulier is in elk geval de default instance beschikbaar. De default instance bevat de ingevulde formuliervelden. De default instance heeft als naam "", een lege naam. Het voorbeeld gaat uit van een tweede instance met naam "lookuplists"; dit is een instance die lijstjes bevat voor de vulling van list controls. In dit geval het lijstje met straatnaammeldingen.
Van XML gegevens naar een tabel
De structuur van de XML gegevens van een instance kan onbeperkt complex zijn. Maar de select expressie gaat uit van gegevens in de vorm van een tabel: een aantal kolommen, een aantal rijen, en per kolom en per rij een cel met één waarde, of eventueel een cel zonder een waarde.
Na het eerste argument met de instancenaam heeft de bron instance(...) een aantal argumenten om de XML om te vormen naar een tabel.
- Row selector. Dit is
"lookuplist[@target='straatnaammelding']/row"
in het voorbeeld. Het is een XPath expressie om de rijen uit de XML te selecteren. Een geselecteerde rij is zelf ook weer een fragment XML, en is nog niet direct geschikt als vulling voor de tabel. - Column selectors. Dit zijn
"value"
en"label"
in het voorbeeld. Iedere column selector is een (in dit geval eenvoudige) XPath expressie om binnen de XML van de rij de waarde voor de cel te selecteren.
Als de row selector bijvoorbeeld drie rijen selecteert dan is het eindresultaat een tabel met drie rijen, twee kolommen vanwege de twee column selectors, en zes cellen al dan niet met een waarde in elke cel. Per kolom zijn alle cellen van hetzelfde Smartforms type, bijvoorbeeld allemaal van het type integer, of allemaal van het type string als er geen eenduidig type is gegeven de celwaarden in een kolom.
Het resultaat van de instance(...) bron is de tabel, en de select selecteert uit die tabel.
Select expressie
Een select of selectone selecteert uit de tabel.
De kolommen van de tabel hebben als namen c1, c2 enzovoort, aan te spreken met de letterlijke paden $[c1] en $[c2]. De kolomnamen zijn niet automatisch value en label: alhoewel dit voor de column selectors in het voorbeeld voor de hand ligt kunnen de column selectors ook complexere XPath expressies zijn waarvan onduidelijk is wat de kolomnaam zou moeten zijn.
Als de select expressie voor de vulling van een list control gebruikt wordt dan verwacht de list control wel de namen value en label. Dit kan gespecificeerd worden in de selectielijst:
select value: $[c1], label: $[c2] from instance("lookuplists", "lookuplist[@target='straatnaammelding']/row", "value", "label") end