Mooi dat CQL2 eraan komt! Ik heb de demo getest (ik ben gelijk begonnen het in mijn R-package te implementeren) en loop tegen een paar dingen aan.
BETWEEN op huisnummer vergelijkt als tekst in plaats van als getal
Collectie adres: bij het filteren op huisnummer:
filter=... AND huisnummer > 15werkt zoals verwacht: je krijgt 16, 18, 20, enzovoort.filter=... AND huisnummer BETWEEN 1 AND 3geeft ook 10, 12, 13, 122, 137, … terug in plaats van alleen 2 en 3. De waarden worden hier blijkbaar als tekst vergeleken, niet als getal.- Als workaround heb ik het geprobeerd met aanhalingstekens (
huisnummer BETWEEN '1' AND '3'), maar dat geeft de foutmelding “expecting NumericLiteral”. Je moet dus getallen invullen, maar ze worden behandeld als tekst.
Ik denk dat dit komt door de typering van adres in de queryables, daar staat huisnummer als string, maar in de Catalogus BAG staat het als Integer gedefinieerd. In de collecties ligplaats, standplaats en verblijfsobject van de demo-API staat huisnummer wél als integer. Zou het in de collectie adres ook integer kunnen worden?
Reproductie: .../v2-demo/collections/adres/items?filter=openbare_ruimte_naam='Amsterdamseweg' AND woonplaats_naam='Amersfoort' AND huisnummer BETWEEN 1 AND 3
Een te lang filter breekt de verbinding af zonder foutmelding
Voor het binnenhalen van schoolgebouwen (koppeling aan het Register Onderwijs Instellingen) wil ik enkele duizenden objecten op identificatie ophalen. Dat kan alleen met een lange IN (...)-lijst in de URL, en bij een aantal tests werd duidelijk dat een URL-lengte van boven de ± 33 kb de verbinding wordt verbroken zonder een HTTP-respons (bv een 414 URI Too Long). In mijn geval ging het bij 1300 BAG-identificaties in één lijst gewoon goed maar bij 1400 niet meer. Een 414-foutmelding zou al veel helpen; POST-ondersteuning (zoals ook door @thijs1 gevraagd) zou ook goed helpen.
Grote wens: toegestane waarden opnemen in de queryables
Voor velden met een vaste waardenlijst uit de Catalogus BAG — zoals gebruiksdoel en status — vermelden de queryables nu alleen "type": "string". Ik wilde zoeken op onderwijslocaties en probeerde gebruiksdoel = 'onderwijs', maar krijg dan een geldig maar leeg antwoord, want het moet de waarde 'onderwijsfunctie' zijn. Dit kun je nu alleen niet via de API ontdekken. Zouden jullie de enum in het JSON Schema voor dit soort domeinvelden kunnen vullen?
Groet, Coen