GeoWerkstatt / interlis-model-browser

INTERLIS Model Repo Browser
MIT License
0 stars 1 forks source link

Anzeige falscher Kataloge #170

Closed ltzur closed 1 year ago

ltzur commented 1 year ago

Im Repository des Bundes gibt es einen Ordner "obselete", der ungültige Modelle und Kataloge enthält (alte Versionen nach einem Patch Change). Diese dürfen nie angezeigt werden. Bei den Modellen funktioniert das einwandfrei, bei den Katalogen leider nicht immer. Beispiel: Wenn ich nach dem Modell BaseModel_SectoralPlans_LV95_V1_4 suche, erhalte ich auch Kataloge aufgeführt, die im Ordner "obsolete" sind. Diese müssen von der Applikation unterdrückt werden.

olivergrimm commented 1 year ago

Es ist so, dass wir aktuell keine Filterung der in ilidata deklarierten Kataloge vornehmen. Kann das als gängige Praxis angesehen werden, dass Kataloge in Unterverzeichnissen mit dem Namen obsolete nicht interpretiert werden sollen? Bzw. gibts noch andere Konventionen die berücksichtigt werden sollten?

ltzur commented 1 year ago

Das ist eine gute Frage. Es gibt einige Kantone, die sich der Praxis des Bundes angeschlossen haben, andere nicht. Ich denke aber, dass die Lösung nicht darin liegt, einige konkret benennbare Verzeichnisse (wie z.B. \obsolete) herauszufiltern. Der Kern der Lösung liegt tiefer: Jedes Modell bzw. jeder Katalog, der einen Patch Change erfahren hat, wird mit demselben Model-Name bzw. derselben Katalog-ID ein zweites Mal in ilimodels bzw. ilidata erfasst. Die aktuellere Version hat dabei immer das zusätzliche Attribut precursorVersion. Damit sollten alle Modelle und alle Kataloge, die den aktuellen, mit precursorVersion versehenen, vorausgegangen sind unterdrückt werden (ob diese nun in einem Ordner \obsolete oder \depracated oder wie auch immer dieser heissen mag, liegen). Dieser Zusammenhang ist sehr wichtig, so arbeiten auch die Tools von Claude Eisenhut. Wenn ich also mit dem Compiler alle Modelle des Model Repository des Bundes prüfen will, wird bei Modellen, deren Modellnamen mehrmals auftaucht, immer nur die letzte, aktuelle Version geprüft, unabhängig vom Ort, wo die anderen liegen (auch wenn das bei mir immer das Verzeichnis \obsolete ist). Dasselbe passiert, wenn ich mit dem ilivalidator alle Kataloge auf einmal prüfe.

Philippluca commented 1 year ago

@ltzur In der aktuellen Version werden werden von Katalogen sowohl die Version wie auch PrecursorVersion bereits gelesen und in der DB gespeicher. Ein matching über die CatalogId bzw. analyse auf Vorgängerversionen ist bisher nicht ungesetzt. Es werden alle Kataloge, welche einen Verweis auf das entsprechende Modell haben angezeigt.

Grundsätzlich lässt sich aus den verfügbaren Daten eine Versionshistorie der Kataloge aufgrund ihrer 'Id' bauen, sofern alle Katalog-Versionen mit den korrekten & vergleichbaren Feldern Version und PrecursorVersion versehen sind.

Damit könnten wir z.B. jeweils nur die aktuelle bzw. noch nicht abgelöste Version anzeigen. Kataloge welche jedoch keinen direkten Nachfolger haben bzw. ersatzlos obsolete werden, bleiben bei dieser Variante jedoch immer angezeigt solange sie auf das Modell verweisen. Allenfalls bietet das Modell DatasetIdx16 hier ein Konzept an, um Kataloge ohne Nachfolger als obsolete zu markieren, welche wir bisher noch nicht entdeckt haben.

ltzur commented 1 year ago

Jeder Katalog hat eine "id" (erstes Tag eines Katalogeintrags in ilidata.xml) und eine "version". Wird ein Katalog überarbeitet (Minor oder Major Change, also unabhängig ob das zugrundeliegende ili-Modell ändert) erhält die überarbeitete Ausgabe einen neuen Identifikator "id" und eine neue Version "version". Der alte Katalog wird ins jeweilige Unterverzeichnis \replaced verschoben. Wenn ich im Model Browser ein Modell suche, dessen Katalog bereits mehrmals überarbeitet worden ist, finde ich im Moment alle Katalogversionen, auch diejenigen, die durch eine neuere Version abgelöst worden sind (dass diese beim Bund in die Unterverzeichnisse \replaced verschoben worden sind, spielt für diesen Sachverhalt keine Rolle, der korrekte Pfad wird ja im Model Browser angezeigt). Das ist aus meiner Sicht so korrekt und muss nicht geändert werden. Wenn ein Katalog falsch ist (syntaktisch oder semantisch), somit nur eine kleine Korrektur erfahren hat und in den allermeisten Fällen rückwärtskompatibel ist, sprechen wir von einem Patch Change. Bei einem Patch Change ändert sich das Attribut "id" nicht, nur "version" wird angepasst. Dafür erhält der neue Katalog das Attribut "precursorVersion", der auf die vorangegangene Version mit derselben "id" verweist. Damit ist gewährleistet, dass pro Identifikator immer die jeweils aktuellste Version bestimmt werden kann (dass die alte Version beim Bund in das Unterverzeichnis \obsolete verschoben worden ist, spielt für diesen Sachverhalt keine Rolle, solche falschen Modelle sollen im Model Browser ja nie angezeigt werden und der Pfad \obsolete nie auftauchen). Fazit: Im Model Browser werden alle Kataloge aufgeführt, die einen eigenen, d.h. eindeutigen Identifikator "id" aufweisen, falls ein Identifikator mehrmals auftritt, wird nur die jeweils aktuellste Version dieser "id im Model Browser aufgeführt.