Testbed for the constraints in the "naturgefahren" interlis model | Read-only mirror of https://github.com/sogis/natgef-testbed — Kanton Solothurn. Issues & pull requests at the source.
  • Java 58.5%
  • Shell 31.1%
  • Batchfile 10.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2025-08-25 16:20:34 +02:00
_Runner/interlis-testbed-runner-0.0.1-SNAPSHOT add failcases 2024-01-12 15:44:40 +01:00
app dok version configs / bump versions 2025-08-25 16:20:34 +02:00
gradle/wrapper Update gradle for full Java 21 compatibility 2024-04-15 13:39:59 +02:00
misc update 2024-02-27 15:21:06 +01:00
test_data Sharpen testcase xtf to provoke single error 2025-08-14 15:13:27 +02:00
.gitignore Added capability to test additional data files 2024-06-24 16:45:26 +02:00
gradlew add run_agi.sh and gradle to run testsuite 2024-03-05 08:56:42 +01:00
gradlew.bat add run_agi.sh and gradle to run testsuite 2024-03-05 08:56:42 +01:00
LICENSE Initial commit 2023-11-20 11:22:06 +01:00
readme.md dok version configs / bump versions 2025-08-25 16:20:34 +02:00
runner_doc_copy.md Added testcase for ProzessquelleKennung 2025-07-10 09:33:15 +02:00
settings.gradle add run_agi.sh and gradle to run testsuite 2024-03-05 08:56:42 +01:00

Testbed Constraints Datenmodell 'SO_AFU_Naturgefahren_20240515'

Aufruf Testbed

./gradlew clean test

Ausführen eines einzelnen Tests

./gradlew clean test --tests CheckAuftragKennungen

Schritte zum Ergänzen weiterer Tests

Am Beispiel des Constraints "MyNewConstraint":

  • Neues Verzeichnis test_data/MyNewConstraint/ anlegen und 1-n Failcase.xtf anlegen. Beachten: Kommentare in Failcase.xtf am Ende einfügen.
  • Unter app/src/test/java/ch/so/agi/natgef/testbed/befunde/ oder .../auftraege/ die Klasse MyNewConstraint.java mit der Testmethode anlegen.
  • In app/src/test/java/ch/so/agi/natgef/testbed/TestbedHelper.java in "prefixes" den Prefix für MyNewConstraint eintragen.
    Prefix: Voll qualifizierter Name der INTERLIS-Klasse des Constraints.

Merge-Logik der XTF-Dateien siehe im Repo:

https://github.com/GeoWerkstatt/interlis-testbed-runner

Falls nicht mehr erreichbar: Kopie der Doku (abgerufen am 10.7.2025)

Biblikotheken zur Validierung

Gewisse Constraints sind in den folgenden Funktionsbibliotheken umgesetzt:

  • ilivalidator
  • geow-interlis-functions
  • interlis-functions-ngk-so
  • ilivalidator-custom-functions-geometries

(Vollqualifizierte Namen und aktuelle Versionen siehe app/build.gradle)

Die Naturgefahren-Daten werden im GRETL-Importjob und im ilivalidator-web-service (https://geo.so.ch/ilivalidator/) validiert. Zwischen Gretl und dem ilivalidator-web-service sind manchmal aufgrund unterschiedlicher Update-Zyklen unterschiedliche Versionen der Bibliotheken nicht vermeidbar, was zu unterschiedlichem Verhalten führen kann. Die Bibliothekversionen in den folgenden Dateien konfiguriert:

Übersicht Constraint-Typen / Testbed-Abdeckung

Mittels diesem Testbed kann das Modell 'SO_AFU_Naturgefahren_20240515' in bezug auf die spezifischen Constraints getestet werden. Die ca. 110 Constraints wurden dafür in 12 Typen-Kategorien eingeteilt und für jeden Kategorie liegt mindestens ein Failcase vor:

Objektcount

  • Beispiele:
    • MANDATORY CONSTRAINT INTERLIS.objectCount(THIS)==1;
  • Abgedeckte Constraints:
    • CheckAuftragEintrag
  • Weitere Constraints:
    • CheckWasserkennwerte

Unique

  • Beispiele:
    • UNIQUE Kennung;
  • Abgedeckte Constraints:
    • CheckAuftragKennungen
  • Weitere Constraints:
    • CheckTeilauftragEindeutigkeit
    • CheckProzessquelleKennung

OR

  • Beispiele:
    • MANDATORY CONSTRAINT (Hauptprozess != #Wasser) OR Wasserkennwerte;
  • Abgedeckte Constraints:
    • CheckTeilauftragWasserKennwert
    • CheckBefundPermanenteRutschungIWCode

GetArea

  • Beispiele:
    • MANDATORY CONSTRAINT GeoW_FunctionsExt.GetArea(THIS,"Geometrie") > 100;
  • Abgedeckte Constraints:
    • CheckAbklperimeterFlaechenGroesse
  • Weitere Constraints:
    • CheckBefundSteinBlockschlagFlaechenGroesse
    • CheckBefundBergFelssturzFlaechenGroesse
    • CheckBefundHangmureFlaechenGroesse
    • CheckBefundAbsenkungFlaechenGroesse
    • CheckBefundEinsturzFlaechenGroesse
    • CheckBefundPermanenteRutschungFlaechenGroesse
    • CheckBefundSpontaneRutschungFlaechenGroesse
    • CheckBefundUebermurungFlaechenGroesse
    • CheckBefundUeberschwemmungDynamischFlaechenGroesse
    • CheckBefundUeberschwemmungStatischFlaechenGroesse

IsInsideExternal

  • Beispiele:
    • MANDATORY CONSTRAINT GeoW_FunctionsExt.IsInsideExternalXtf("SO_Hoheitsgrenzen_Publikation_20170626.Hoheitsgrenzen.Kantonsgrenze.Geometrie", "c6db23e0-0536-4055-a50c-11d2d1e4c6ef" ,THIS, "Geometrie");
  • Abgedeckte Constraints:
    • CheckAbklperimeterFlaechenGroesse
  • Weitere Constraints:
    • Keine

RingCount

  • Beispiele:
    • MANDATORY CONSTRAINT GeoW_FunctionsExt.GetInnerRingsCount(THIS, "Geometrie") == 0;
  • Abgedeckte Constraints:
    • CheckAbklperimeterKeineLoecher
  • Weitere Constraints:
    • CheckBefundKeineLoecher

Equal

  • Beispiele:
    • MANDATORY CONSTRAINT Prozessquelle_R->Teilauftrag_R->Hauptprozess == #Sturz;
  • Abgedeckte Constraints:
    • CheckBefundSteinBlockschlag
  • Weitere Constraints:
    • CheckBefundSpontaneRutschung
    • CheckBefundHangmure
    • CheckBefundBergFelssturz
    • CheckFliessrichtungspfeilHauptprozess
    • CheckBefundBergFelssturzHauptprozess
    • CheckBefundHangmureHauptprozess
    • CheckBefundUfererosionHauptprozess
    • CheckBefundAbsenkungHauptprozess
    • CheckBefundEinsturzHauptprozess
    • CheckBefundPermanenteRutschungHauptprozess
    • CheckBefundSpontaneRutschungHauptprozess
    • CheckBefundUebermurungHauptprozess
    • CheckBefundUeberschwemmungDynamischHauptprozess
    • CheckBefundUeberschwemmungStatischHauptprozess
    • CheckBefundBefundJaehrlichkeitHauptprozess

Defined

  • Beispiele:
    • MANDATORY CONSTRAINT Prozessquelle_R->Teilauftrag_R->Hauptprozess == #Wasser AND DEFINED(Fliessrichtungspfeil_R);
  • Abgedeckte Constraints:
    • CheckFliessrichtungspfeilZuHauptprozess
  • Weitere Constraints:
    • Keine

IsInsideAreaByCode (Überragung)

  • Beispiele:
    • SET CONSTRAINT GeoW_FunctionsExt.IsInsideAreaByCode(GeoW_FunctionsExt.GetInGroups(ALL, "PQ_Jaehrlichkeit_SteinBlockschlag_R->Prozessquelle_R"), "Geometrie" ,"IWCode");
  • Abgedeckte Constraints:
    • CheckBefundSteinBlockschlagKeineUeberragung
    • CheckBefundSpontaneRutschungKeineUeberragung
    • CheckBefundUeberschwemmungDynamischKeineUeberragung
  • Weitere Constraints:
    • CheckBefundBergFelssturzKeineUeberragung
    • CheckBefundHangmureKeineUeberragung
    • CheckBefundAbsenkungKeineUeberragung
    • CheckBefundEinsturzKeineUeberragung
    • CheckBefundUebermurungKeineUeberragung
    • CheckBefundUeberschwemmungStatischKeineUeberragung
    • CheckBefundJaehrlichkeitKeineUeberragung
    • CheckKennwertUeberschwemmungFliesstiefeKeineUeberragungH
    • CheckKennwertUeberschwemmungFliesstiefeKeineUeberragungJaehrlichkeit
    • CheckKennwertUeberschwemmungFliessgeschwindigkeitKeineUeberragungH
    • CheckKennwertUebermurungFliesstiefeKeineUeberragungH
    • CheckKennwertUebermurungFliesstiefeKeineUeberragungJaehrlichkeit
    • CheckKennwertUebermurungFliessgeschwindigkeitKeineUeberragungH

NOT-OR

  • Beispiele:
    • MANDATORY CONSTRAINT NOT((IWCode == #rot_stark_30) OR (IWCode == #rot_mittel_30) OR (IWCode == #blau_schwach_30)) OR (PQ_Jaehrlichkeit_SteinBlockschlag_R->Jaehrlichkeit == 30);
  • Abgedeckte Constraints:
    • CheckBefundSteinBlockschlagJaehrlichkeit-30
  • Weitere Constraints:
    • CheckBefundSteinBlockschlagJaehrlichkeit-100
    • CheckBefundSteinBlockschlagJaehrlichkeit-300
    • CheckBefundHangmureJaehrlichkeit-30
    • CheckBefundHangmureJaehrlichkeit-100
    • CheckBefundHangmureJaehrlichkeit-300
    • CheckBefundSpontaneRutschungJaehrlichkeit-30
    • CheckBefundSpontaneRutschungJaehrlichkeit-100
    • CheckBefundSpontaneRutschungJaehrlichkeit-300
    • CheckAbklperimeterBeurteilungUeberschwemmung_statisch
    • CheckAbklperimeterBeurteilungUeberschwemmung_dynamisch
    • CheckAbklperimeterBeurteilungUebermurung
    • CheckAbklperimeterBeurteilungUfererosion
    • CheckAbklperimeterBeurteilungEinsturz
    • CheckAbklperimeterBeurteilungAbsenkung
    • CheckAbklperimeterBeurteilungSteinBlockschlag
    • CheckAbklperimeterBeurteilungBerg_Felssturz
    • CheckAbklperimeterBeurteilungHangmure
    • CheckAbklperimeterBeurteilungSpontaneRutschung
    • CheckAbklperimeterBeurteilungPermanenteRutschung

IsInside

  • Beispiele:
    • MANDATORY CONSTRAINT (GeoW_FunctionsExt.IsInside(GeoW_FunctionsExt.Union(PQ_Jaehrlichkeit_SteinBlockschlag_R->Prozessquelle_R->Teilauftrag_R->Abklaerungsperimeter_R, "Geometrie"), UNDEFINED, THIS, "Geometrie"));
  • Abgedeckte Constraints:
    • CheckBefundSteinBlockschlagImAbklPerimeter
  • Weitere Constraints:
    • CheckBefundBergFelssturzImAbklPerimeter
    • CheckBefundHangmureImAbklPerimeter
    • CheckBefundUfererosionImAbklPerimeter
    • CheckBefundAbsenkungImAbklPerimeter
    • CheckBefundEinsturzImAbklPerimeter
    • CheckBefundPermanenteRutschungImAbklPerimeter
    • CheckBefundSpontaneRutschungImAbklPerimeter
    • CheckBefundUebermurungImAbklPerimeter
    • CheckBefundUeberschwemmungDynamischImAbklPerimeter
    • CheckBefundUeberschwemmungStatischImAbklPerimeter
    • CheckBefundJaehrlichkeitImAbklPerimeter

AreAreas mit Filter !!Deaktiviert, bis Area-Verbesserungen vorliegen!!

  • Beispiele:
    • SET CONSTRAINT WHERE IWCode == #rot_stark_30 OR IWCode == #rot_mittel_30 OR IWCode == #blau_schwach_30: INTERLIS.areAreas(GeoW_FunctionsExt.GetInGroups(ALL, "Prozessquelle_R"),UNDEFINED, >> Geometrie);
  • Abgedeckte Constraints:
    • CheckBefundUeberschwemmungStatischKeineUeberlappung-300
  • Weitere Constraints:
    • CheckBefundSteinBlockschlagKeineUeberlappung-30
    • CheckBefundSteinBlockschlagKeineUeberlappung-100
    • CheckBefundSteinBlockschlagKeineUeberlappung-300
    • CheckBefundSteinBlockschlagKeineUeberlappung-Restgef
    • CheckBefundBergFelssturzKeineUeberlappung-30
    • CheckBefundBergFelssturzKeineUeberlappung-100
    • CheckBefundBergFelssturzKeineUeberlappung-300
    • CheckBefundBergFelssturzKeineUeberlappung-Restgef
    • CheckBefundHangmureKeineUeberlappung-30
    • CheckBefundHangmureKeineUeberlappung-100
    • CheckBefundHangmureKeineUeberlappung-300
    • CheckBefundHangmureKeineUeberlappung-Restgef
    • CheckBefundAbsenkungKeineUeberlappung-permanent
    • CheckBefundeEinsturzKeineUeberlappung-permanent
    • CheckBefundePermanenteRutschungKeineUeberlappung-permanent
    • CheckBefundePermanenteRutschungKeineUeberlappung-Restgef
    • CheckBefundSpontaneRutschungKeineUeberlappung-30
    • CheckBefundSpontaneRutschungKeineUeberlappung-100
    • CheckBefundSpontaneRutschungKeineUeberlappung-300
    • CheckBefundSpontaneRutschungKeineUeberlappung-Restgef
    • CheckBefundUebermurungKeineUeberlappung-30
    • CheckBefundUebermurungKeineUeberlappung-100
    • CheckBefundUebermurungKeineUeberlappung-300
    • CheckBefundUeberschwemmungDynamischKeineUeberlappung-30
    • CheckBefundUeberschwemmungDynamischKeineUeberlappung-100
    • CheckBefundUeberschwemmungDynamischKeineUeberlappung-300
    • CheckBefundUeberschwemmungDynamischKeineUeberlappung-Restgef
    • CheckBefundUeberschwemmungStatischKeineUeberlappung-30
    • CheckBefundUeberschwemmungStatischKeineUeberlappung-100
    • CheckBefundUeberschwemmungStatischKeineUeberlappung-300
    • CheckBefundUeberschwemmungStatischKeineUeberlappung-Restgef