Versione 2.0 - Ultima modifica 20 giugno 2002
Le definizioni dei tag manifest di seguito riportate utilizzano diversi token e identificativi dei nomi. Per evitare equivoci, sono state fornite alcune regole relative alla loro produzione. Di solito, tutti gli identificativi seguono la differenza tra lettere maiuscole e minuscole.
SimpleToken := sequenza dei caratteri '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)
Il resto di questa sezione descrive la struttura del file plugin.xml come una serie di frammenti DTD. Il file plugin.dtd presenta l'intera definizione DTD.
<?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'elemento <plugin> definisce il corpo del manifest. Esso può contenere definizioni di esecuzione, definizioni di altri plug-in necessarie per questo, dichiarazioni di qualsiasi nuovo punto di estensione introdotto da un plug-in oppure la configurazione di estensioni funzionali (configurate nei punti di estensione definiti da un altro plug-in o introdotti da questo plug-in). Gli attributi <plugin> sono:
La regola di costruzione DTD XMLelement* indica zero o più occorrenze dell'elemento; element? indica nessuna o una occorrenza dell'elemento; element+ (riportato di seguito) indica una o più occorrenze dell'elemento. Facendo riferimento alla precedente definizione <plugin>, si nota che un plug-in, contenente una sola definizione di esecuzione e nessuna dichiarazione di un punto di estensione o configurazione di estensione, è valido (ad esempio, librerie comuni da cui dipendono altri plug-in). Analogamente, è valido anche un plug-in che contenga solo configurazioni di estensione e nessuna definizione di esecuzione o punto di estensione, come avviene, ad esempio, quando classi inviate in altri plug-in vengono configurate in punti di estensione dichiarati in altri plug-in.
La sezione del manifest <requires> riporta tutti gli elementi dipendenti da altri plug-in.
<!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" >
Ogni dipendenza viene specificata utilizzando un elemento <import>, che contiene i seguenti attributi:
La sezione <runtime> del manifest contiene una definizione di una o più librerie che compongono l'esecuzione del plug-in. Queste librerie vengono utilizzate dai meccanismi di esecuzione della piattaforma (il caricatore di classe del plug-in) per caricare ed eseguire il codice esatto necessario al plug-in.
<!ELEMENT runtime (library+)> <!ELEMENT library (export*)> <!ATTLIST library name CDATA #REQUIRED type (code | resource) "code" > <!ELEMENT export EMPTY> <!ATTLIST export name CDATA #REQUIRED >
L'elemento <runtime> non ha attributi.
Gli elementi <library> definiscono insieme l'esecuzione del plug-in. Almeno un elemento <library> deve essere specificato. Ogni elemento <library> possiede i seguenti attributi:
Ogni elemento <library> può specificare la parte della libreria da esportare. Le regole di esportazione vengono specificate come un gruppo di maschere di esportazione. Per impostazione predefinita, dal momento che non è specificata nessuna regola di esportazione, la libreria viene considerata riservata. Gli attributi degli elementi <export> sono:
L'architettura della piattaforma si basa sui punti di estensione configurabili. La piattaforma definisce un gruppo di punti di estensione che svolgono le attività di estensione della piattaforma e del desktop, come ad esempio l'aggiunta di voci di menu o l'inserimento di editor incorporati. In aggiunta ai punti di estensione predefiniti, ogni plug-in supportato può dichiarare ulteriori punti di estensione. A questo scopo, il plug-in deve poter configurare la funzione plug-in con le estensioni fornite dall'esterno. Ad esempio, il plug-in Page Builder può dichiarare un punto di estensione per l'aggiunta di nuovi DTC (Design Time Control) nella propria tavolozza di costruzione. In questo modo il plug-in definisce un'architettura per ciò che intende come DTC e implementa il codice che ricerca le estensioni DTC, configurato nei punti di estensione.
<!ELEMENT extension-point EMPTY> <!ATTLIST extension-point name CDATA #REQUIRED id CDATA #REQUIRED schema CDATA #IMPLIED >
L'elemento <extension-point> presenta i seguenti attributi:
Le estensioni attuali sono configurate nei punti di estensione (predefinite o dichiarate dal plug-in) nella sezione <extension>. Le informazioni di configurazione vengono specificate come XML correttamente formattati e contenuti tra i tag <extension> e </extension>. La piattaforma non specifica la forma attuale del tag di configurazione, salvo prevedere la corretta formattazione XML. I tag vengono definiti dalle informazioni ulteriori del plug-in che ha dichiarato il punto di estensione. La piattaforma, nel momento in cui la logica del punto di estensione richiede tutte le proprie estensioni configurate, non analizza i tag di configurazione, ma si limita a inviare le informazioni di configurazione al plug-in, come parte dell'elaborazione del punto di estensione.
<!ELEMENT extension ANY> <!ATTLIST extension point CDATA #REQUIRED id CDATA #IMPLIED name CDATA #IMPLIED >
Gli attributi dell'elemento <extension> sono:
Importante: il contenuto dell'elemento <extension> viene dichiarato utilizzando la regola ANY. Così, ogni XML formattato correttamente può essere specificato nella sezione di configurazione dell'estensione (tra i tag <extension> e </extension>).
I frammenti vengono utilizzate per ampliare l'ambito di un plug-in. Un esempio potrebbe essere dato dall'incorporare dati quali messaggi o etichette in una altra lingua.
<?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" >
Ciascun frammento deve essere associato a unplug-in specifico. Il plug-in associato viene identificato con <plugin-id>, <plugin-version> e <match>. Si noti che se questa specifica corrisponde a più di un plug-in, sarà utilizzato il plug-in corrispondente con il numero di versione più alto.
I componenti <requires>, <runtime>, <extension-point>, e <extension> di un frammento saranno aggiunti in modo logico al plug-in corrispondente.
Gli attributi di <fragment> sono i seguenti: