# OpenMI Standard

Der OpenMI Standard (engl., kurz für: Open Modeling Interface) definiert Modell-Schnittstellen zum Austausch Memory-basierter Daten zur Laufzeit der Modelle. Modellkomponenten mit standardkonform implementierten Schnittstellen laufen simultan und tauschen ihre Informationen beispielsweise zu jedem Zeitschritt einer Simulation aus. So wird die Integration auch bestehender Modelle bis hin zum operativen Betrieb durchführbar.
Die Motivation für die Schaffung des OpenMI-Standards bestand darin die Interaktion physikalischer Prozesse besser zu verstehen und sie vorherzusagen. Ferner sollte ein integrativer Ansatz zum Management von Umweltprozessen entwickelt werden. Die OpenMI Association entwickelt den OpenMI-Standard und hält die Rechte an ihm. Sie ist ein offener und gemeinnütziger Verband, dem sowohl internationale Institutionen als auch Individuen angehören. Zum 1. Juli 2014 hat das Open Geospatial Consortium (OGC) den Open Modeling Interface Standard Version 2 (OpenMI) als einen OGC-Standard anerkannt.

## OpenMI-Architektur

OpenMI basiert auf einem „Request & Reply“-Mechanismus und einer zugbasierten Pipe-&-Filter-Architektur, die aus miteinander kommunizierenden Quell- und Zielkomponenten besteht. Sie tauschen im Speicher abgelegte Daten in vordefinierter Weise und in einem vordefinierten Format aus.

### Linkable Component

    Eine Software-Komponente, die die verpflichtenden OpenMI-Schnittstellen exakt implementiert, wird zum Linkable Component oder auch zur OpenMI-konformen Komponente.
Die Standardschnittstelle OpenMI hat drei Phasen:
* Modelldefinition: Die Definition beschreibt die Eigenschaften der zum Austausch angebotenen Größen und die geografische Position, an der die jeweilige Größe verfügbar ist. OpenMI-konforme Komponenten können direkt auf diese Informationen anderer OpenMI-konformer Komponenten zugreifen.
* Konfiguration: Sie definiert, was zwischen zwei miteinander verknüpften Komponenten ausgetauscht werden soll.
* Run-Time-Betrieb: In dieser Phase wird es einer Komponente Daten ermöglicht, die eigentlichen Daten zu senden oder zu empfangen.

## OpenMI Standard in Kürze
### OpenMI ist schnittstellenbasiert

Der Standard definiert Schnittstellen von Softwarekomponenten. Die Schnittstelle schließt im übertragenen Sinne einen Vertrag zwischen den Software-Komponenten ab, der den Datenaustausch regelt. Die Schnittstellenspezifikation ist nicht auf bestimmte Technologieplattformen oder Implementierungen beschränkt.
Die implementierte Schnittstelle kann durch die technischen Möglichkeiten des verwendeten Release limitiert werden. Eine Software-Komponente, die die verpflichtenden OpenMI-Schnittstellen exakt implementiert, wird zum Linkable Component oder auch zur OpenMI-konformen Komponente.

### OpenMI ist offen

Die Spezifikation ist im Internet öffentlich zugänglich. Der OpenMI-Quellcode ist offen und steht unter Lesser-GPL-Lizenzbedingungen zur Verfügung. OpenMI ermöglicht Verbindungen zwischen unterschiedlichen Arten von Modellen aus unterschiedlichen Disziplinen für verschiedene wissenschaftliche Bereiche.
Es bietet eine komplette Metadaten-Struktur, um Semantik, Einheiten, Dimensionen, die räumliche sowie zeitliche Darstellung und Daten-Operationen der auszutauschenden Daten zu beschreiben. Es gibt die Möglichkeiten zu definieren, was, wie und wann etwas verknüpft wird. Eine Default-Implementierung und Software-Utilities stehen unter einer Open-Source-Software-Lizenz zur Verfügung.

### OpenMI ist ein Standard

Es standardisiert die Art und Weise wie der Datenaustausch ausgeführt wird. Es erlaubt einem beliebigen Modell mit einem beliebigen anderen Modell (z. B. von einem anderen Entwickler) zu kommunizieren, ohne weitere Software-Entwickelung. Seine generische Natur ermöglicht die Anwendung in verschiedensten Domänen (zum Beispiel im Wasser- oder auch im Umwelt-Bereich).
Es ist zu beachten, dass der OpenMI-Standard eine Validierung der Verknüpfung über das Prüfen der verwendeten Dimensionen vorsieht. Allerdings kann die Schnittstelle nicht garantieren, dass die Verknüpfung der Komponenten auch wissenschaftlich korrekt ist. Dies liegt vielmehr im Verantwortungsbereich des implementierenden Entwicklers und des Anwenders.