Warum steht der H5P-Inhaltstyp X nicht als Option im Inhaltstyp Y zur Verfügung?

H5P zeichnet sich besonders durch seinen modularen Ansatz für verschiedene Inhaltstyp aus. Das bedeutet, dass du, nachdem du eine bestimmte Art von Inhalt erstellt hast, diesen problemlos als Unterinhalt in eine andere Art von Inhalt integrieren kannst. Wenn du beispielsweise Combination Lock in Column einbinden möchtest, ist lediglich ein einziger Eintrag in der semantics.json-Datei von Column erforderlich.

Du musst lediglich die Datei mit der Liste der „machine names“ um H5P.CombinationLock 1.0 erweitern, und das war es. Der H5P-Kern kümmert sich um den Rest. Bemerkenswert ist, dass du dir keine Sorgen machen musst, selbst wenn der Inhaltstyp Combination Lock nicht auf der Plattform installiert ist. Der H5P-Kern bewältigt das, indem er ihn einfach nicht als Option anbietet und man so ohne Probleme arbeiten kann.

Wenn das also so einfach ist, warum wird dann nicht jeder Inhaltstyp automatisch zu allen zusammengesetzten Inhaltstypen hinzugefügt? Nun, in der Praxis ist es nicht so einfach, wie es vielleicht scheint. Theoretisch könnte eine einzige Zeile genügen, aber es gibt mehrere Gründe, warum das eventuell nicht reicht. Hier sind einige Überlegungen dazu.

Der Inhaltstyp funktioniert nicht als Unterinhalt

Annahmen über die Umgebung

Manchmal funktionieren die einzelnen Inhaltstypen für sich genommen reibungslos, aber als Teilkomponente treten Probleme auf. Die folgenden Beispiele sollen die komplexen Zusammenhänge verdeutlichen:

  • Füge einfach mal die Version 1.5 von Agamotto in einem Interactive Book ein und öffne das Menü auf der linken Seite. Ein Fehler tritt auf: Der Knopf des Schiebereglers von Agamotto ist beim Loslassen falsch positioniert. Das liegt daran, dass Agamotto davon ausgeht, 100% des H5P-iframes einzunehmen. Diese Annahme läuft aber fehl, wenn das Menü von Interactive Book ausgeklappt wird. Obwohl dieses Problem in der Version 1.5.4 im Januar 2021 behoben wurde (inzwischen gibt es Agamotto 1.6.4), verwendet die H5P Group weiterhin die Version 1.5.2. Die Macke besteht noch :-/
  • Größenanpassung stellt in H5P eine große Herausforderung dar, die sich auch auf das Thema Unterinhalte erstreckt. Die verwendeten Mechanismen im zusammengesetzten Inhaltstyp kommen sich gegebenenfalls mit denen des Unterinhalts in die Quere.
  • Bei einigen Inhaltstypen wird davon ausgegangen, dass sie bei der Instanziierung sofort in die Webseite eingebunden werden. Dies ist jedoch nicht garantiert, wenn sie als Unterinhalt verwendet werden. Unerwartete Probleme können auftauchen. Zum Beispiel können Timeline und Advanced Fill in the Blanks gar nicht angezeigt werden und stürzen als Unterinhalt ab.

Diese Beispiele verdeutlichen, wie kompliziert die Integration von Inhaltstypen als Unterinhalt sein kann, und machen deutlich, dass sorgfältige Überlegungen und mögliche Anpassungen erforderlich sind.

Fehlende Implementierung von „Verträgen“, fehlende Funktionalität

Bestimmte Inhaltstypen, wie etwa Question Set, verwenden Unterinhaltstypen, die jedoch bestimmte Kriterien erfüllen müssen. Diese sind in einem „Vertrag“ festgelegt , der für Question Set als „question type contract“ bezeichnet wird. Er wird aber auch von anderen zusammengesetzten Inhaltstypen verwendet. Diese Kriterien gewährleisten eine nahtlose Integration und Funktionalität. Zum Beispiel sollte ein Unterinhaltstyp wesentliche Funktionen wie getScore zum Abrufen der aktuellen Punktzahl und resetTask zum Zurücksetzen des Inhalts anbieten. Diese Anforderungen bilden zusammen den „question type contract“.

Wenn sich ein potenzieller Unterinhaltstyp nicht an diesen Vertrag hält, funktioniert er nicht innerhalb von Question Set oder anderen zusammengesetzten Inhaltstypen, die Informationen über den Punktestand usw. benötigen. Ein Beispiel dafür ist Arithmetic-Quiz, das zwar mit Punkteständen und benutzerinitiierten Neustarts arbeitet, aber den „question type contract“ nicht implementiert, so dass es nicht mit Question Set kompatibel ist.

Wenn ein zusammengesetzter Inhaltstyp das Wiederaufnehmen von vorherigen Zuständen unterstützt, muss der Unterinhaltstyp dies ebenfalls unterstützen (oder sollte es zumindest). Diese Konsistenz ist entscheidend, um Verwirrung bei den Benutzer*innen zu vermeiden. Obwohl dieser Aspekt eigentlich nicht zum „question type contract“ gehört, hat die H5P Group Ende 2023 die Funktion getCurrentState für diesen Zweck dort aufgenommen.

Wegen „Vetragsbruchs“ scheiden bestimmte Inhaltstypen wie Image Sequencing, Find the Hotspot, Flashcards oder Branching Scenario als Unterinhalte aus.

Einen noch: Der Iframe Embedder ist nur selten zu finden, weil er nicht responsive ist – und je nach Szenario auch ein Sicherheitsproblem darstellen könnte.

Fehlende Barrierearmut

Eine einfache Erklärung für den Ausschluss eines Inhaltstyps als Unterinhalt ist potenziell fehlende Barrierearmut. Maintainer legen gegebenenfalls hohen Wert auf die Barrierearmut ihres übergeordneten Inhaltstyps, und das könnte der Grund sein, warum Find the Words in Column nicht auffindbar ist. Insbesondere ist Find the Words nicht über die Tastatur bedienbar und bietet keine alternative Darstellung.

Verschachtelung

Ein besonderer Grund bei der Einschränkung bestimmter Inhaltstypen als Unterinhalt ist die Herausforderung, die sich aus der Verschachtelung von Unterinhalten ergibt.

Der H5P-Kern kann nur eine Version einer H5P-Bibliothek (oder eines Inhaltstyps) gleichzeitig laden. Diese Einschränkung wird deutlich, wenn es um verschachtelte Unterinhalte geht. Hier müssen Konflikte zwischen verschiedenen Versionen ausgeschlossen werden, oder es kann zu Abstürzen kommen.

Betrachte das Beispiel von einem Column-Inhalt, der Course Presentation in Version 1.0 und True-False in Version 1.3 verwendet. Wenn Course Presentation der Version 1.0 dann True-False 1.2 enthält, entsteht ein Versionskonflikt für die True-False. Wenn ein/ Autor*in eine True-False-Frage in Column integriert und gleichzeitig eine Course Presentation verwendet, die auch eine True-False-Frage enthält, kann es zu Komplikationen kommen. Der/die Entwickler*in muss sicherstellen, dass ColumnTrue False 1.2″ verwendet oder Course Presentation so anpassen, dass „True False 1.3″ genutzt wird. Klingt kompliziert? Zumindest ist es mühsame Arbeit. Außerdem ist man möglicherweise nicht der/die Maintainer*in aller beteiligten Inhaltstypen, so dass die eigenen Möglichkeiten begrenzt sein könnten.

Verschachtelung birgt ein weiteres Problem. Wenn beispielsweise ein Accordion innerhalb eines anderen Accordions platziert wird, könnte dies merkwürdig wirken, weshalb diese Option aufgrund möglicher Probleme mit der Bedienungsfreundlichkeit ausgeschlossen wurde.

Die visuelle Schnittstelle des zusammengesetzten Inhaltstyps hat Probleme

Bestimmte H5P-Inhaltstypen verfügen über ein eigenes Editor-Widget, das von dem Standard-Dropdown-Menü des H5P-Kerns abweicht. Stattdessen verfügen diese Inhaltstypen über eine visuelle Schnittstelle mit Schaltflächen für jeden Unterinhaltstyp.

Ein gutes Beispiel ist Course Presentation, ein zusammengesetzter Inhaltstyp mit einem umfangreichen visuellen Editor. Die Symbolleiste ist voll mit Schaltflächen, und  sie kann durch einen Butten ganz rechts erweitert werden. Dadurch  werden zusätzliche Optionen offenbart. Angesichts des begrenzten Platzes wird das Hinzufügen weiterer Unterinhaltstypen jedoch zu einer Herausforderung.

Eine Möglichkeit besteht darin, den visuellen Editor zu überarbeiten, doch würde diese Lösung ähnliche Mühe für Interactive Video, Branching Scenario und Virtual Tour erfordern – ein ausgesprochen ineffizienter Ansatz.

Glücklicherweise ist eine Lösung in Aussicht. In absehbarer (oder ferner?) Zukunft wird ein einziger Button das Durcheinander ersetzen und den H5P Hub öffnen. Diese zentrale Drehscheibe wird die Auswahl der gewünschten Unterinhalte abwickeln. Darüber hinaus wird er die Möglichkeit bieten, bestehende Inhalte hochzuladen und Inhalte aus dem H5P OER Hub wiederzuverwenden.

Der Inhaltstyp schien nicht als Unterinhalt relevant zu sein

Gelegentlich kann ein Inhaltstyp aus technischer Sicht als Unterinhalt verwendet werden, aber der/die Entwickler*in hat seinen Nutzen ursprünglich nicht vorausgesehen. Nehmen wir Game Map, das für die Erstellung von spielähnlichen Inhalten mit einer Vielzahl von Unterinhalten entwickelt wurde. Diese Unterinhalte müssen nicht unbedingt bepunktet werden; sie können einfache Level umfassen, die nur Bilder oder Videos enthalten. Aber was ist mit Questionnaire?

Der Ausschluss von Questionnaire aus Game Map war nicht auf technische Beschränkungen zurückzuführen, sondern ergab sich aus dem ursprünglichen Fokus auf spielähnliche Elemente. Die Idee, Questionnaire einzubauen, wurde zunächst nicht als wertvoll erachtet. Als jedoch jemand Interesse daran bekundete, ihn für diesen Zweck zu nutzen, wurde eine Neubewertung vorgenommen.

Der Inhaltstyp wird möglicherweise nicht mehr gepflegt

Bedauerlicherweise passiert es manchmal, dass Entwickler*innen aus der Community Inhaltstypen erstellen, aber nicht die Zeit haben, sie zu dauerhaft zu pflegen. Das Fehlen einer kontinuierlichen Wartung bedeutet, dass diese Inhaltstypen keine neuen Funktionen oder wichtige Fehlerbehebungen erhalten, wenn Probleme auftreten.

Die Verwendung solcher nicht gepflegter Inhaltstypen als Unterinhalte kann zu Komplikationen führen. Bei den ersten Tests könnten Fehler übersehen worden sein, oder Aktualisierungen des übergeordneten Inhaltstyps können Anpassungen am Unterinhaltstyp erforderlich machen. Wenn der nicht aktiv gepflegt wird, fällt das den Betreuer*innen des übergeordneten Inhaltstyps auf die Füße – sie müssen das dann eventuell übernehmen. Das wirft die Frage nach der Verantwortung für den Code von anderen auf – eine Situation, die nicht immer wünschenswert ist.

Wenn due diese also als Unterinhalt haben möchtest und jemanden kennst, der die Aufgabe übernehmen möchte …

Den Betreuenden fehlt es an Ressourcen

Ein Haupthindernis für die Einbindung von Inhaltstypen als Subcontent sind oft die begrenzten Ressourcen auf Seiten der Betreuer*innen. Das Einführen neuer Unterinhaltstypen beinhaltet eine umfassende Prüfung:

  • Überprüfen der Implementierung der relevanten „Verträge“,
  • Sicherstellen einer nahtlosen Größenänderungsfunktionalität,
  • Identifizieren potenzieller Probleme, wenn der Inhalt als Unterinhalt betrieben wird, und vieles mehr.

Diese sorgfältige Prüfung erfordert Zeit und Ressourcen, die nicht ohne weiteres und ohne Kosten zur Verfügung stehen. Während automatisierte Tests vom Bedienerlebnis von Vorteil sein könnten, stellt ihre Implementierung in Inhaltstypen eine bedeutende Aufgabe für sich dar.

Abschließend

Die Liste der Gründe soll verdeutlichen, dass die Modularität von H5P zwar die Flexibilität bietet, Inhaltstypen als Unterkomponenten innerhalb von zusammengesetzten Inhaltstypen zu verwenden, dass aber dennoch einige Hindernisse bestehen. Es ist wichtig zu erkennen, dass diese Liste nicht alle potenziellen Herausforderungen abdeckt. Dieser Beitrag dient der Bewusstseinsbildung, nicht der Entschuldigung, und beleuchtet die Gründe, warum bestimmte H5P-Inhaltstypen nicht ohne Weiteres als Subcontent-Optionen verfügbar sind.