Version 2.1 - Letzte Überarbeitung am 17. März 2003
Die unten dargestellten Befehlsdefinitionen in der Manifestdatei verwenden unterschiedliche Benennungs-Token und Kennungen. Um eine Mehrdeutigkeit zu vermeiden, hier einige Erstellungsregeln [auf die im Text verwiesen wird]. Im Allgemeinen wird bei allen Kennungen die Groß-/Kleinschreibung beachtet.
SimpleToken := Zeichenfolge aus (a-z, A-Z, 0-9) ComposedToken := SimpleToken | (SimpleToken '.' ComposedToken) JavaClassName := ComposedToken PlugInId := ComposedToken PlugInPrereq := PlugInId | 'export' PlugInId ExtensionId := SimpleToken ExtensionPointId := SimpleToken ExtensionPointReference := ExtensionPointID | (PlugInId '.' ExtensionPointId)
Der Rest dieses Abschnitts beschreibt die Struktur der Datei "plugin.xml" als Folge von DTD-Fragmenten. Die Datei plugin.dtd stellt die DTD-Definition in ihrer Gesamtheit dar.
<?xml encoding="US-ASCII"?> <!ELEMENT plugin (requires?, runtime?, extension-point*, extension*)> <!ATTLIST plugin name CDATA #REQUIRED id CDATA #REQUIRED version CDATA #REQUIRED provider-name CDATA #IMPLIED class CDATA #IMPLIED >
Das Element <plugin> definiert den Hauptteil des Manifests. Es enthält optional Definitionen für die Plug-in-Laufzeit, Definitionen von anderen Plug-ins, die von diesem benötigt werden, Deklarationen von neuen Erweiterungspunkten, die durch das Plug-in eingeführt werden, sowie die Konfiguration von Funktionserweiterungen (die an Erweiterungspunkten konfiguriert werden, die entweder durch andere Plug-ins definiert sind oder durch dieses Plug-in eingeführt werden). Für das Element <plugin> werden die folgenden Attribute verwendet:
Die XML-DTD-Konstruktionsregel element* bedeutet, dass Null oder mehr Vorkommen des Elements vorhanden sind. Die Regel element? bedeutet, dass 0 oder 1 Vorkommen des Elements vorhanden sind und die (im Folgenden verwendete) Regel element+ bedeutet, dass eines oder mehrere Vorkommen des Elements vorhanden sind. Ausgehend von der oben beschriebenen Definition in <plugin> bedeutet dies beispielsweise, dass ein Plug-in, das nur eine Laufzeitdefinition und keine Erweiterungspunktdeklarationen oder Erweiterungskonfigurationen enthält, gültig ist (z. B. allgemeine Bibliotheken, von denen andere Plug-ins abhängig sind). Ähnlich ist auch ein Plug-in gültig, das nur Erweiterungskonfigurationen und keine Laufzeitdefinition oder Erweiterungspunkte für sich selbst enthält (z. B. Klassen konfiguriert, die in anderen Plug-ins für Erweiterungspunkte bereitgestellt werden, die in anderen Plug-ins definiert sind).
Der Abschnitt <requires> des Manifests deklariert alle Abhängigkeiten von anderen Plug-ins.
<!ELEMENT requires (import+)>
<!ELEMENT import EMPTY>
<!ATTLIST import
plugin CDATA #REQUIRED
version CDATA #IMPLIED
match (perfect | equivalent | compatible | greaterOrEqual) "compatible"
export (true | false) "false"
optional (true | false) "false"
>
Jede Abhängigkeit wird durch ein Element <import> angegeben. Es enthält die folgenden Attribute:
Der Abschnitt <runtime> des Manifests enthält die Definition von einer oder mehreren Bibliotheken, die die Plug-in-Laufzeit bilden. Die Bibliotheken, auf die verwiesen wird, werden durch die Ausführungsmechanismen der Plattform (das Ladeprogramm für Plug-in-Klassen) verwendet, um den durch das Plug-in benötigten korrekten Code zu laden und auszuführen.
<!ELEMENT runtime (library+)> <!ELEMENT library (export*, packages?)> <!ATTLIST library name CDATA #REQUIRED type (code | resource) "code" > <!ELEMENT export EMPTY> <!ATTLIST export name CDATA #REQUIRED > <!ELEMENT packages EMPTY> <!ATTLIST packages prefixes CDATA #REQUIRED >
Das Element <runtime> hat keine Attribute.
Die Elemente <library> definieren zusammen die Plug-in-Laufzeit. Es muss mindestens ein Element <library> angegeben werden. Jedes Element <library> hat die folgenden Attribute:
Jedes Element <library> kann angeben, welcher Teil der Bibliothek exportiert werden soll. Die Exportregeln werden als Gruppe von Exportmasken angegeben. In der Standardeinstellung (keine Angabe von Exportregeln) wird die Bibliothek als privat betrachtet. Das Element <export> hat die folgenden Attribute:
Die Architektur der Plattform basiert auf dem Konzept von konfigurierbaren Erweiterungspunkten. Die Plattform selbst gibt eine Reihe von Erweiterungspunkten vor, mit denen die Plattform und der Desktop erweitert werden können (beispielsweise durch das Hinzufügen von Menüaktionen oder das Ergänzen eines integrierten Editors). Neben den vordefinierten Erweiterungspunkten können alle bereitgestellten Plug-ins zusätzliche Erweiterungspunkte deklarieren. Durch das Deklarieren eines Erweiterungspunkts kündigt das Plug-in im Wesentlichen die Möglichkeit an, dass die Plug-in-Funktion mit extern bereitgestellten Erweiterungen konfiguriert werden kann. Das Plug-in für das Seitenerstellungsprogramm könnte beispielsweise einen Erweiterungspunkt für das Hinzufügen neuer DTC-Elemente (Design Time Controls - Steuerelemente für Entwicklungszeit) zur Palette seines Erstellungsprogramms hinzufügen. Dies bedeutet, dass das Seitenerstellungsprogramm eine Architektur für die Bedeutung eines DTC-Elements definiert und den Code implementiert hat, der nach DTC-Erweiterungen sucht, die an den Erweiterungspunkten konfiguriert wurden.
<!ELEMENT extension-point EMPTY> <!ATTLIST extension-point name CDATA #REQUIRED id CDATA #REQUIRED schema CDATA #IMPLIED >
Das Element <extension-point> hat die folgenden Attribute:
Tatsächliche Erweiterungen werden an (vordefinierten oder in diesem Plug-in neu deklarierten) Erweiterungspunkten im Abschnitt <extension> konfiguriert. Die Konfigurationsdaten werden in einem gültigen XML-Format zwischen den Tags <extension> und </extension> angegeben. Die Plattform gibt das tatsächliche Format der Konfigurationsbefehle (das über das XML-Format hinausgeht) nicht an. Die Befehle werden durch den Hersteller des Plug-ins definiert, das den Erweiterungspunkt deklariert hat. Die Konfigurationsdaten werden von der Plattform nicht im eigentlichen Sinn interpretiert. Die Plattform übergibt lediglich die Konfigurationsdaten an die Plug-ins im Rahmen der Verarbeitung für den Erweiterungspunkt (wenn die Logik des Erweiterungspunkts alle konfigurierten Erweiterungen abfragt).
<!ELEMENT extension ANY> <!ATTLIST extension point CDATA #REQUIRED id CDATA #IMPLIED name CDATA #IMPLIED >
Das Element <extension> hat die folgenden Attribute:
Wichtiger Hinweis: Der Inhalt des Elements <extension> wird mit der Regel ANY deklariert. Dies bedeutet, dass im Abschnitt mit der Erweiterungskonfiguration (zwischen den Tags <extension> und </extension> tags) jedes beliebige gültige XML-Format angegeben werden kann.
Mit Fragmenten wird der Bereich eines Plug-ins vergrößert. Ein Beispiel hierfür wäre die Einbindung von Daten wie beispielsweise Nachrichten oder Bezeichnungen in einer anderen Sprache.<?xml encoding="US-ASCII"?> <!ELEMENT fragment (requires?, runtime?, extension-point*, extension*)> <!ATTLIST fragment name CDATA #REQUIRED id CDATA #REQUIRED version CDATA #REQUIRED provider-name CDATA #IMPLIED plugin-id CDATA #REQUIRED plugin-version CDATA #REQUIRED match (perfect | equivalent | compatible | greaterOrEqual) "compatible" >
Jedes Fragment muss mit einem bestimmten Plug-in verknüpft werden. Das dazugehörige Plug-in wird durch <plugin-id>, <plugin-version> und optional durch <match> identifiziert. Beachten Sie: Wenn diese Spezifizierung auf mehrere Plug-ins zutrifft, wird das passende Plug-in mit der höchsten Versionsnummer verwendet.
Die Komponenten <requires>, <runtime>, <extension-point> und <extension> eines Fragments werden logisch zum passenden Plug-in hinzugefügt.Für das Element <fragment> werden die folgenden Attribute verwendet: