Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Constraint der alphabetisch zweiten Klasse wird nicht evaluiert #390

Open
Tracked by #418
olivergrimm opened this issue Oct 30, 2023 · 1 comment
Open
Tracked by #418

Comments

@olivergrimm
Copy link

olivergrimm commented Oct 30, 2023

Ausgangslage:
image

CLASS ClassA =
     Nr: MANDATORY TEXT*8;
END ClassA;

CLASS ClassB =
    Nr: MANDATORY TEXT*8;
END ClassB;

CLASS Point =
   Geometry: MANDATORY GeometryCHLV95_V1.Coord2;
END Point;
		
ASSOCIATION ClassA_Punkt =
   ClassA -<#> {0..1} ClassA;
   Point -- {0..1} Point;
END ClassA_Punkt;

ASSOCIATION ClassB_Punkt =
   ClassB -<#> {0..1} ClassB;
   Point -- {0..1} Point;
END ClassB_Punkt;

Ziel:
Es soll mittels Constraint** geprüft werden, dass jedes Objekt der Klassen ClassA und ClassB einen Punkt zugeordnet hat.

** Die Bedingung wird mittels Constraint formuliert, weil im originalen Modell neben Punkten auch Linien oder Flächen möglich sind und daher die Kardinalitäten mit {0..1} modelliert wurden.

Die Constraints werden in einem Viewmodell und in zwei Views wie folgt implementiert:
MANDATORY CONSTRAINT DEFINED(Point);

Beobachtet:
Der ilivalidator wertet nur den Constraint mit bezug zur alphabetisch*** ersten Klasse korrekt aus (ClassA). Die Referenzen zwischen ClassB und Point werden allesamt als fehlerhaft evaluiert.
Wird die Association zwischen ClassA und Point deaktiviert, so evaluiert der ilivalidator den Constraint korrekt und findet die Objekte der ClassB ohne Referenz zur Klasse Point.

Die Beobachtung ist unabhängig der Implementierungsart der Constraints. Auch wenn diese im Hauptmodell integriert werden, ist das Ergebnis dasselbe.

Auch die eindeutige Benennung der Rollennamen ("Point") ändert nichts am Umstand.

*** = starke Vermutung aufgrund zweier unabhängiger Testdatensätze.

modelA.zip
ilivalidator-1.13.4-SNAPSHOT.jar --config modelA.ini --log .\output.log .\testdata.xtf

@domi-b
Copy link

domi-b commented Dec 4, 2023

Bedeutet: Wenn für eine Klasse mehr als eine Association bzw. Rolle definiert ist (wie hier im Beispiel bei Point), kann nur auf der alphabetisch ersten Rolle navigiert werden. Auf allen weiteren Rollen trifft somit z.B. DEFINED(Pfad) nicht mehr zu und INTERLIS.objectCount(Pfad) ist 0.

claeis added a commit to claeis/iox-ili that referenced this issue Dec 11, 2023
Fix evaluation of multiple constraints on associations (claeis/ilivalidator#390)
claeis added a commit that referenced this issue Dec 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants