Projekt

Allgemein

Profil

Codelisten - Datenmodell & Masken

Anforderungen von AdV und Geologischen Diensten sind:
#124
#125

Beschreibung aktueller Stand

TODO Dokument:

In der Codelisten Registry werden die "Items"
>>> hier fehlt Text

  • Codeliste
    Eine Codeliste ist ein Item bestehend aus den Attributen:
    - Name [1]
    - Kurzname [1]
    - externe Codeliste [0..1]
    und den Assoziationen:
    - übergeordnete (erweiterte) Codeliste [0..1]
    - beinhaltende Codes [0..*] (die Codeliste weiss von ihren Kindern, da sie entsprechend abgefragt werden kann. Es ist möglich, dass in der umsetzung die bidirektionale Assoziation anders gelöst wird, aber aus Nutzersicht ist eine solche beidseitige navigation notwendig.
    Die externe Codeliste ist dabei ein Link auf eine Codeliste, die von einer anderen Institution gepflegt wird und evtl. nicht dem Muster der Codelisten in der GDI-DE entspricht. Die Codeliste wird als Kopie der originären Codeliste gepflegt. Die Codes sollten dann als "externe Codes" gepflegt werden (wäre nicht auch eine eigene Item Klasse "externe Codeliste" sinnvoll?).
    Als zusätzliche Regel gilt:
    - Höchstens die "übergeordnete externe Codeliste" oder die "übergeordnete Codliste" (oder gar keine) belegt sein darf.
    Screenshot der Maske: Codelist.png
  • Code
    Ein Code ist ein Item bestehend aus den Attributen:
    - Code [1]
    - Kurzname [1]
    - Name [1]
    und den Assoziationen:
    - Codeliste [1]
    - übergeordneter (spezialisierter) Code [0..1]
    Als spezielle Regeln soll gelten:
    - der Code ist nur mit der Codeliste gültig (Aggregation - auch bei der Gültigkeit)
    - der übergeordnete Code soll aus
    - derselben Codeliste stammen wie der Code
    - uas einer Codeliste stammen, die sich direkt von der Codeliste des übergeordneten Codes ableitet/erweitert
    Screenshot der Maske: Code.png
  • externer Code
    Ein externer Code ist eine Spezialisierung eines Codes. Er enthält alle Attribute und Assoziationen eines Codes und zusätzllich ein Feld Link, welches auf einen externen Link verweist. D.h. mit einem externen Code erstellt man eine Kopie eines Codes und verweist auf die originale Quelle.
    Screenshot der Maske: CodeExternerCode.png

Die Items stehen untereinander in Beziehung (Achtung: Das Datenmodell ist nicht "offiziell", sondern nur aus der GUI abgeleitet):
Vereinfachtes Klassendiagramm

Beurteilung aktueller Stand

Bei der Implementierung der Codelisten-Registry wurde erst einmal eine einfache Lösung realisiert; durch die Assoziationen der drei Item Element sind die assoziativen Möglichkeiten aber schon jetzt relativ mächtig.
Im Konkreten zeigen sich aber einige Unzulänglichkeiten, die sich z.T. auch in den gestellten Tickets zeigen:
Fehlende Mehrsprachigkeit (siehe http://redmine.gdi-de.org/issues/125):
  • Mindestens die einfachen Namensfelder sollen mit "Language Code" und "String" versehen werden und damit auch mehrfach vorkommen können.
    (Evtl. reicht es aber aus, einfach eine optionale 2. Sprache anzugeben -> deutsch/englisch)
  • Das Code Kürzel "Code" scheint überflüssig (ist auch bei INSPIRE nicht vorhanden)
  • Die Semantik, speziell beim Zusammenhang mit externen und übergeordneten Codelisten ist nicht klar dargestellt:
    1. Eine Codeliste innerhalb der Registry erweitern

      In der Test-Registry ist als Beispiel die "Codeliste Zwei" als eine einfache Erweiterung der "Codeliste Eins" gespeichert (https://hro.testbed.gdi-de.org/item/4ecd4f19-a17e-40fd-a80d-d6535cbe506c)
      In diesem Beispiel zeigt die Assoziation "erweiterte Codeliste" auf "Codeliste Eins".
    2. Eine Codeliste erweitert eine externe Codeliste

In der Test-Registry wird die INSPIRE Codeliste für Seilbahnen (http://inspire.ec.europa.eu/codelist/CablewayTypeValue) in der "Codeliste Drei" erweitert (https://hro.testbed.gdi-de.org/item/641ddf26-5651-4906-b848-3b8eb17a8dc2).
Ein Problem der Erweiterung der externen Codelisten sind die unterschiedlichen datenstrukturen, die unklaren Rückgabeformate und ungeklärte Wartungsprozesse.
  1. Ein Code erweitert einen Code in derselben Codeliste

    In der Registry wird innerhalb der "Codeliste Vier" der Code "A" mit "A1" erweitert. (Leider ist auch eine Erweiterung eines Codes einer anderen Codeliste möglich, das sollte aber imho nicht möglich sein!)
  2. Ein Code erweitert einen Code aus einer externen Codeliste

    Um diesen Fall abbilden zu können ist ein Workaround notwendig. Ein "externer" Codelistenwert einer externen Registry muss in der GDI-DE Registry abgelegt werden, um dann von einem neuen Code erweitert zu werden.
    Neben aktuellen Bugs in der Umsetzung ist dieses Vorgehen nicht gut um Erweiterungen externer Listen durchzuführen; speziell da ein einzelner Code aus einer externen Codeliste kopiert werden muss und damit aus dem Context der gesamten Liste herausgelöst wird. Da ist eine Kopie der gesamten Liste sinnvoller (wie bei INSPIRE).

Weiterentwicklungsideen

  1. Code und Codeliste werden gleich behandelt
    Codes und Codelisten tragen +/- dieselben Inhalte (einen Namen und eine Beschreibung). Bei der Verwaltung von hierarchischen Codelisten müssten z.T. die Objekteigenschaften von Codes und Codelisten geändert werden (z.B. bei Erweiterung eines Codes zu einem hierarchischen Codebaum). In diesem Falle wäre eine Änderung der Item Klasse notwendig. Um dies zu vermeiden, werden Codelisten gemeinsam mit Codes als einfache, verknüpfte Baumstruktukturen modelliert.
  2. Eine "externe Codeliste" repräsentiert eine Codeliste im Internet
    Das ist ein häufiger Fall, wenn eine Codeliste an einer anderen Stelle gepflegt wird, in Struktur und Kodierung aber nicht unmittelbar genutzt werden kann. Z.B. XÖV Codelisten.
    Es macht Sinn, eine "externe Codeliste" als eigenständiges Item zu pflegen, was zusätzlich zu den Eigenschaften einer normalen Codeliste einen externen Link auf die repräsentierte Resource hat.
  3. Zwei Vererbungsarten "extension" und "nesting"
    Die Vererbung im bisherigen Codelisten-Register nicht eindeutig geklärt. Es werden nun zwei Vererbungsarten umgesetzt:
    • Die Erweiterung von Codelisten "Extension"
      Die Erweiterung einer Codeliste mit einer anderen Codeliste ist notwendig, um Ergänzungen für Codelisten in speziellen Domänen oder durch andere Nutzer zu erlauben. Es sind nur Einfacherrweiterungen zulässig.

      Eine Erweiterung kann entweder auf eine Codeliste im Internet (z.B. INSPIRE Registry) per URL weisen, die dieselbe Struktur, Datenpflegeregeln und Datenformate (siehe auch externe Codeliste) hat, oder auf eine Codeliste innerhalb der Registry verweisen. Bei Verweisen innerhalb der Registry soll eine Verknüpfung in beide Richtungen bestehen, also die untergeodnete Liste kennt die "Elternliste" und die übergeordnete Liste kennt die "Kinderlisten".
      Hinweis: Prinzipiell lassen sich natürlich auch leere Codelisten (und damit Codes) erweitern. Es muss diskutiert werden, ob diese Möglichkeit geblockt wird (in INSPIRE gibt es aber leere Listen, die erweitert werden können).
    • Die Schachtelung "nesting" von Codelisten
      Duch eine Schachtelung von Codelisten lassen sich baumartige Strukturen von Codes aufbauen. Dabei ist nur eine Einfachvererbung zulässig.
  1. Internationalisierung
    Die Codewerte und Beschreibungen in der Registry sind aktuell nur einsprachig. Eine Mehrsprachigkeit wird umgesetzt für "name" und "description", wobei zur Sprachsteuerung ein zusätzliches Attribut "lang" eingeführt wird und eine Sprache für jeden Code als "Default" gilt.
  2. Identifierverwaltung
    Im Kontext der GDI-DE Registry werden UUIDs als eindeutige Identifikatoren eingesetzt. Dies erlaubt eine stabile Verwaltung aller Items über die gesamte Lebenspanne, führt aber zu schwer lesbaren Identifiern (https://hro.testbed.gdi-de.org/item/70e94649-e79f-44a5-9e18-f37e52bbaa93). Zusätzlich zu den UUIDs werden lesbare, stabile URL Muster angeboten, entsprechend der Vorgaben von INSPIRE umgesetzt (http://inspire.ec.europa.eu/codelist/SewerWaterTypeValue/combined).
  3. zusätzliche Attribute
    Teilweise sollen in den Codelisten noch zusätzliche Attribute hinterlegt werden. Es muss noch erarbeitet werden, inwiefern Modellerweiterungen innerhalb der "Codelisten" oder aber in eigenständige Registry-Items und eigene Register überführt werden müssen. I.d.R. sind auch grössere Anpassungen der Oberfläche verbunden.
    Im Datenmodell wurde eine generische Erweiterung der Codelisten per Key-Value Items notiert.