For the english version please click here.
Zum besseren Verständnis der Architektur von TerminoloGit werden Grundkenntnisse in den folgenden Technologien und/oder Systemen vorausgesetzt:
TerminoloGit ist ein Open Source Projekt, das aus mehreren interagierenden Repositories besteht und von der österreichischen ELGA GmbH initiiert wurde.
Soll TerminoloGit in Verbindung mit einem FHIR® Server eingesetzt werden, so bietet sich das Projekt TerminoloGit tergi an, das die Einrichtung eines vollwertigen FHIR® Servers ergänzt durch ein leichtgewichtiges Git Repository ermöglicht.
In diesem Kapitel wird kurz die Struktur eines TerminoloGit-Repositorys erläutert:
.
- enthält die README
, den CODE_OF_CONDUCT
, das CONTRIBUTING
, das CHANGELOG
, die LICENSE
, sowie eine Menge Skripte, die während eines Pipeline-Laufs verwendet werden.input/files/
- enthält einige Vorlagen, die für die Erstellung von Terminologie verwendet werden.input/fsh/
- wird beibehalten, um TerminoloGit-Benutzern mitzuteilen, dass keine fsh
-Dateien in diesem Verzeichnis abgelegt werden sollen.input/images/
- Bilder, die in der Dokumentation verwendet werden.input/includes/
- für jede Terminologie wird ein Fragment für ihre Downloads und ihre früheren Versionen in diesem Verzeichnis bereitgestellt. Diese Fragmente werden später von der TerminoloGit-Vorlage verarbeitet.input/pagecontent/
- mehrere Markdown-Dateien, die die Dokumentation von TerminoloGit bilden.input/redirects/
- für jede Terminologie existiert eine redirects-Datei, die den Zugriff auf die Terminologien auf der Grundlage ihres kanonischen Namens ermöglicht.input/resources/
- FHIR®-Ressourcen, die nicht von MaLaC-CT verarbeitet werden sollen, werden in diesem Verzeichnis abgelegt, z.B. ConceptMaps oder intensionale ValueSets.input/sitemap/
- Meta-Informationen für Web-Crawler, wo die Sitemap zu finden ist und welche Seiten indiziert werden sollen.terminologies/
- für jede Terminologie existiert ein Verzeichnis (Muster [CodeSystem | ValueSet]-[id]
). Außerdem enthält es die terminologiesMetadata.csv
.Die Datei terminologies/terminologiesMeta.csv
enthält einige wichtige Meta-Informationen über alle Terminologien, die von TerminoloGit verwaltet werden:
name
- [CodeSystem | ValueSet]-[id]
canonical
- [TERMGIT_CANONICAL]/[CodeSystem | ValueSet]/[id]
oid
- OID der Terminologieversion
- Version der Terminologieid
- die id
der Terminologietyp
- [CodeSystem | ValueSet]
.metadata-change-timestamp
- der Zeitpunkt der letzten Änderung der Terminologie-MetadatenDie CI/CD-Pipeline in TerminoloGit besteht aus mehreren Phasen und den dazugehörigen Jobs und ist wie folgt aufgebaut. Bitte beachten Sie, dass weder alle Phasen noch alle Jobs in jeder Pipeline ausgeführt werden, sondern dass Regeln bestimmen, welche ausgeführt werden.
manual_trigger
manual_trigger
- Ein manueller Auslöser zum Starten der Pipeline in anderen braches als dem Standardbranch. Auf dem Standardbranch wird die Pipeline automatisch gestartet, wenn neue Commits erfolgen.check_variables
check_variables
- Überprüft, ob die erforderlichen Umgebungsvariablen gesetzt sind.run_malac-ct
- Abhängig von den Umständen wird einer der folgenden Jobs ausgeführt. run_malac-ct
- Dieser Job erkennt automatisch neue/aktualisierte Terminologien im Verzeichnis terminologies/
und konvertiert sie mit Hilfe von MaLaC-CT in alle Dateiformate.run_malac-ct_integration_test
- Dieser Job ist nicht Teil der Standard-Pipeline in einem TerminoloGit-Projekt. Er kann aus einem MaLaC-CT-Repository heraus ausgelöst werden und wird dann anstelle des üblichen run_malac-ct
ausgeführt. Er konvertiert alle vorhandenen Terminologien eines bestimmten TerminoloGit-Repositorys unter Verwendung eines bestimmten Dateiformats als Quelle.skip_malac-ct
- Dieser Job kann ausgelöst werden, wenn ein Commit mit SKIP_MALAC
vorangestellt wird. Infolgedessen wird keine Terminologie von MaLaC-CT verarbeitet. Bitte beachten Sie, dass neue Geschäftsversionen/business versions in diesem Fall NICHT erkannt werden.version_ig_files
version_ig_files
- Dieser Job behandelt die Erstellung früherer Versionen (außer für Pipelines, die mit einem SKIP_MALAC
Commit gestartet wurden)run_ig
run_ig
- Diese Jobs kümmern sich in logisch zusammenhängenden Gruppen aufgeteilt um das Starten mehrerer HL7® FHIR® IG Publisher, der die statischen HTML-Seiten erstellt. Außerdem sorgen dieses Jobs dafür, dass für jede Terminologie zwei Git-Tags erstellt werden, die kontinuierlich auf die aktuelle Version der jeweiligen Terminologie verweisen (siehe Abrufen von Metainformationen zu einem Git-Tag).html
- Es wird immer prepare_output_and_update_html
ausgeführt, außer bei Pipelines die aus anderen Pipelines starten, wie den MaLaC-CT Integrationstests. In diesem Fall wird prepare_output
ausgeführt. prepare_output_and_update_html
- Die Ergebnisse von run_ig
werden zusammengeführt und in das TERMGIT_HTML_PROJECT
gepusht. Der Name des Branches ist derselbe wie im TerminoloGit-Projekt, dies gilt auch für den default-Branch.prepare_output
- Die Ergebnisse von run_ig
werden vorbereitet und dem folgenden pages
Job bereitgestellt.publish
- Die folgenden Jobs laufen parallel. pages
- Aktualisiert die GitLab-Seiten des TerminoloGit-Projekts.upload_input_resources
- Lädt alle Ressourcen im Verzeichnis input/resources/
auf die angegebenen FHIR®-Server hoch.Im Folgenden werden die drei häufigsten Abläufe der CI/CD-Pipeline visualisiert. Details finden Sie in der Datei .gitlab-ci.yml
.
Um den Flaschenhals der IG Publisher Ausführung für das HTML-Rendering der FHIR-Ressourcen zu umgehen und dadurch einen deutlich beschleunigten Publikationsprozess zu erreichen, können logische Terminologie-Gruppen verwendet werden, die parallel in eigenen run_ig
-Jobs abgearbeitet und danach zusammengeführt werden.
Diese logischen Gruppen werden in der Datei terminologies/logical_groups_for_parallel_runs.yml
definiert (mittels TERMINOLOGY_LOGICAL_GROUP
). In dieser Datei besteht außerdem die Möglichkeit, einzelnen CI/CD Variablen (siehe CI/CD-Variablen), die im jeweiligen run_ig
-Job verwendet werden, spezielle Werte zuzuweisen.
Eine logische Gruppe macht idealerweise nur Sinn, wenn sie eine oder mehrere Terminologien beinhaltet. Dabei sollte eine logische Gruppe so erstellt werden, dass sich untereinander abhängige Terminologien (Value-Sets und die dazugehörigen Codesysteme) in einer logischen Gruppe befinden, damit der IG Publisher die Referenzen untereinander korrekt aufbauen kann. Terminologien werden in der Datei terminologies/term_to_logical_groups.csv
in der Form von [Resourcentyp]-[id],[TERMINOLOGY_LOGICAL_GROUP]
der jeweiligen logischen Gruppe zugeordnet.
Neben diesen logischen Gruppen mit Terminologien gibt es zwei Arten von speziellen logischen Gruppen, die folgenden Formatvorschriften folgen müssen:
__
-Gruppen,
divide_n_conquer.py
Einfluss auf die Ausführung der Pipeline haben,sollten mit einem doppelten Unterstrich (__
) beginnen. Diese Gruppen sollten nicht in der Datei terminologies/term_to_logical_groups.csv
aufgeführt werden.
Ein Beispiel einer solchen __
-Gruppe ist die logische Gruppe __no_terminologies
. Durch diese wird ein run_ig
-Job ohne Terminologien-Ressourcen ausgeführt, um eine artifacts.html
für den Other artifacts
Menüpunkt zusammenzustellen.
_
-Gruppen,
divide_n_conquer.py
Einfluss auf die Ausführung der Pipeline haben,sollten mit einem Unterstrich (_
) beginnen. Diese Gruppen können, müssen aber nicht in der terminologies/term_to_logical_groups.csv
aufgeführt werden.
Ein Beispiel einer solchen _
-Gruppe ist die logische Gruppe _all_other_terminologies
. Durch diese wird ein run_ig
-Job mit allen Terminologien ausgeführt, die nicht explizit einer Gruppe zugeordnet wurden. Wird diese Gruppe gelöscht oder übersprungen, werden nur die in der Datei terminologies/term_to_logical_groups.csv
angeführten Terminologien im HTML-Rendering vorhanden sein.
Für eine funktionierende TerminoloGit-Pipeline sollen
__
-Gruppen jedes Mal ausgeführt und nicht bearbeitet oder aus der Dateiterminologies/logical_groups_for_parallel_runs.yml
entfernt werden. Im Gegensatz dazu können_
-Gruppen übersprungen, bearbeitet oder sogar vollständig aus der Dateiterminologies/logical_groups_for_parallel_runs.yml
entfernt werden, ohne die Funktionsweise von TerminoloGit zu beeinträchtigen.
Das gesamte Konzept wird in einem fully dressed use case diagram dargestellt, unter dem die schriftlichen Anwendungsfälle auf Unterfunktions-/Fischebene zu finden sind. Bitte beachten Sie, dass dieses Diagramm nicht vollständig mit dem Cockburn-Diagramm für fully dressed use case diagram konform ist. Es wurden ein paar Änderungen vorgenommen, um alle benötigten Informationen in einem Diagramm darzustellen.
Parameter für alle Use Cases:
$validate-code
möglich.$subsumes
möglich.$lookup
möglich.Das folgende BigPicture zeigt die verschiedenen Möglichkeiten der Verwendung von TerminoloGit, einschließlich der möglichen kaskadierenden Systemabhängigkeiten.
Die kaskadierende Synchronisierung zwischen TerminoloGit-Instanzen wird durch Merge Requests empfohlen. Sie können Merge Requests zu und von jedem geforketen Projekt erstellen, Sie können sogar nachträglich Fork-Relationen hinzufügen. Beachten Sie, dass Sie bei Fehlern während des Posts (z. B. einem internen Serverfehler von 500) die alte Fork-Relation vorher löschen müssen. Sie können auch die Git-Funktion Submodule oder Subtree verwenden. Darüber hinaus ist es möglich, die Synchronisation über CI/CD im eigenen System oder über "Mirroring"- oder "Sync"-Funktionen zu automatisieren, wenn Sie selbst keine Anpassungen/Erweiterungen an den Terminologien vornehmen.
Die kaskadierende Synchronisation zwischen einer TerminoloGit-Instanz und einer tergi-Instanz muss in Ihrer TerminoloGit-Instanz eingerichtet werden, siehe das README im tergi-Repo für weitere Informationen.