Version 2.1 - Dernière révision : 17 mars 2003
Les définitions des marques du manifeste ci-dessous utilisent divers jetons et identificateurs de noms. Pour supprimer toute ambiguïté, les règles de production qui s'y appliquent sont énoncées ci-dessous. En règle générale, tous les identificateurs font une distinction entre les minuscules et les majuscules.
SimpleToken := sequence of characters from ('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)
Le reste de cette section décrit la structure du fichier plugin.xml en tant que série de fragments DTD. Le fichier plugin.dtd présente la définition du DTD dans son intégralité.
<?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 >
L'élément <plugin> définit le corps du manifeste. Il peut en option contenir des définitions pour l'exécution du plug-in, des définitions des plug-ins requis par celui-ci, des déclarations de tous les nouveaux points d'extension introduits par le plug-in, ainsi que la configuration des extensions fonctionnelles (configurées dans des points d'extension définis par d'autres plug-ins ou introduites par le plug-in en question). Les attributs <plugin> sont les suivants :
Dans la règle de construction DTD XML, l'élément* signifie aucune ou plusieurs occurrences de l'élément. L'élément? signifie aucune ou une occurrence de l'élément et l'élément+ (utilisé ci-dessous) signifie une ou plusieurs occurrences de l'élément. En fonction de la définition de <plugin> ci-dessus, ceci signifie par exemple qu'un plug-in contenant uniquement une définition d'exécution et aucune déclaration de point d'extension ou de configuration d'extension est valide (par exemple, des bibliothèques courantes dont dépendent d'autres plug-ins).De même, un plug-in contenant uniquement des configurations d'extension et aucune exécution de point d'extension qui lui soit propre est également valide (par exemple, la configuration de classes fournies dans d'autres plug-ins dans des points d'extension déclarés dans d'autres plug-ins).
La section <requires> du manifeste déclare les dépendances envers d'autres 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"
>
Chaque dépendance est spécifiée à l'aide d'un élément <import>. Il contient les attributs suivants :
La section <runtime> du manifeste contient une définition d'une ou de plusieurs bibliothèques qui constituent l'exécution du plug-in. Les bibliothèques référencées sont utilisées par les mécanismes d'exécution de la plateforme (le chargeur de classe du plug-in) pour charger et exécuter le code correct requis par le plug-in.
<!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 >
L'élément <runtime> n'a pas d'attribut.
Les éléments <library> définissent collectivement l'exécution du plug-in. Au moins un élément <library> doit être spécifié. Chaque élément <library> comporte les attributs suivants :
Chaque élément <library> peut spécifier la portion de bibliothèque à exporter. Les règles d'exportation sont spécifiées en tant que jeu de masques d'exportation. Par défaut, (aucune règle d'exportation spécifiée), la bibliothèque est considérée comme étant privée. L'élément <export> comporte les attributs suivants :
L'architecture de la plateforme est basée sur la notion de points d'extension configurables. La plateforme définit un jeu de points d'extension qui couvre les tâches d'extension de la plateforme et du bureau (par exemple, l'ajout d'actions de menu, la contribution d'un éditeur imbriqué). En plus des points d'extension prédéfinis, chaque plug-in fourni peut déclarer des points d'extension supplémentaires. En déclarant un point d'extension, le plug-in signale essentiellement la capacité de configurer la fonction du plug-in avec des extensions fournies de l'extérieur. Par exemple, le plug-in Page Builder peut déclarer un point d'extension pour l'ajout de nouveaux DTC dans sa palette de générateur. Ceci signifie que Page Builder a défini une architecture pour ce qui est censé être un DTC et a implémenté le code qui recherche les extensions DTC ayant été configurées dans les points d'extension.
<!ELEMENT extension-point EMPTY> <!ATTLIST extension-point name CDATA #REQUIRED id CDATA #REQUIRED schema CDATA #IMPLIED >
L'élément <extension-point> comporte les attributs suivants :
Les extensions réelles sont configurées dans des points d'extension (prédéfinis ou nouvellement déclarés dans le plug-in) à la section <extension>. Les informations de configuration sont spécifiées au format XML, entre les marques <extension> et </extension>. La plateforme ne spécifie pas le format réel de la marque de configuration (autre que devant être du XML syntaxiquement correct). Les marques sont définies par le fournisseur du plug-in ayant déclaré le point d'extension. La plateforme n'interprète pas réellement les marques de configuration. Elle transmet simplement les informations de configuration au plug-in en tant que part du traitement du point d'extension (au moment où le point d'extension demande la totalité de ses extensions configurées).
<!ELEMENT extension ANY> <!ATTLIST extension point CDATA #REQUIRED id CDATA #IMPLIED name CDATA #IMPLIED >
L'élément <extension> comporte les attributs suivants :
Important : le contenu de l'élément <extension> est déclaré à l'aide de la règle ANY. Ceci signifie que tout XML syntaxiquement correct peut être spécifié dans la section de configuration de l'extension (entre les marques <extension> et </extension>).
Les fragments permettent d'étendre la portée d'un plug-in. Par exemple, d'y introduire des données telles que des messages ou des libellés dans une autre langue.<?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" >
Chaque fragment doit être associé à un plug-in spécifique. Le plug-in associé est identifié par <plugin-id>, <plugin-version> et éventuellement <match>. Si cette spécification correspond à plusieurs plug-in, le plug-in correspondant dont le numéro de version est le plus élevé est utilisé.
Les composants <requires>, <runtime>, <extension-point> et <extension> d'un fragment sont ajoutés logiquement au plug-in correspondant.Les attributs <fragment> sont les suivants :