Ilivalidator: Prüfung auf Integer

Ich möchte bei der Validierung mit ilivalidator prüfen können, ob ein bestimmtes numerisches Attribut eine Ganzzahl ist.

Meines Wissens gibt es noch keine Funktion dafür, die man in einem Constraint verwenden könnte. Ich stelle mir sowas vor wie

FUNCTION IsInt (a: NUMERIC): BOOLEAN;

Welches ist nun die richtige resp. nachhaltigste Option?

  • a) Ich schreibe dazu ein eigenes Modell und ein Plugin für ilivalidator?
  • b) Ich schaue, dass das interne INTERLIS-Datenmodell (RefHB Anhang A) um diese Funktion ergänzt wird; das Plugin steure ich dem ilivalidator-Repository bei?*
  • c) Ich schaue, dass das offizielle Math_V2-Modell um diese Funktion ergänzt wird, das Plugin steure ich dem ilivalidator-Repository bei?**
  • d) Ich schaue, dass das Anliegen bei den Funktionserweiterungen von Geowerkstatt (GeoW_FunctionsExt) aufgenommen wird und steure dort mein Plugin bei?

* Würde eine Revision des RefHB bedeuten (eCH-Prozess).
** Wer entscheidet eigentlich darüber, welche Funktionen hier aufgenommen werden?

Ich denke Variante c) wäre pragmatisch und nachhaltig. Die Funktion würde dann Teil vom iox-ili und wäre so in allen Formen des ilivalidators verfügbar. Und aus meiner Sicht sollten solche Erweiterungen problemlos und ohne grosse Vernehmlassung umgesetzt werden können.

Bin gespannt auf die robuste Implementierung. Ist 1.000000000001 ein Integer? Oder ist es nur ein Integer wenn der String identisch „1“ ist?

das müsste wohl über eine gewrappte Modulo - Funktion passieren, so gäbs auch nicht unendlich viel zu tun

Ja, es ist im Detail noch zu definieren, was diese Funktion können muss (und was nicht). Aber das ist für mich zurzeit zweitrangig.

Ich würde gerne die Diskussion führen, wo (auf Stufe der Werkzeuge) eine solche Funktion platziert werden sollte.

@olivergrimm Wo siehst du die Abgrenzung zwischen c) und d)? Welche Eigenschaften muss eine Funktion aufweisen, damit sie ‚nativ‘ unterstützt wird? Und wann schreibt man ein Plugin dafür?

Diese Abgrenzung ist schwierig, aber ich finde die aktuelle Liste der Funktionen in GeoW_FunctionsExt zeigt eine mögliche Klassierung. Aktuell packen wir da Funktionen aus projektspezifischen Anforderungen rein, bei welchen wir oder der Kunde der Meinung ist, dass diese auch in einem anderen Kontext verwendet werden können und trotzdem keine allgemeine Methode darstellt. Und dann werden sie bzgl. Name und Parametrisierung möglichst allgemein gestaltet.
Aber diese IsInt()-Funktion gehört m.E. klar in die native Unterstützung, weil sie eine Ergänzung einer der Grund-Bibliotheken (Math, Text) darstellt.

1 „Gefällt mir“