Dříve byly kontextové nabídky některých aplikací omezeny vyloučením určitých voleb nabídek. To bylo založeno na známých periferních informacích, jako je počet vybraných prostředků, fyzický název souboru, typ prostředku atd. V některých instancích bylo známo omezené množství informací o obsahu prostředku a toto významně snížilo počet nepoužitelných voleb nabídek. Takové informace by mohly mít rozsáhlé využití u souboru XML, jelikož existuje mnoho situací, ve kterých je nějaká akce použitelná pro jeden typ souboru XML a není pro jiný, jako např. pro soubory XML obsahující skripty Ant. Akce Spustit Ant..., která je logická v jejich kontextové nabídce, není akcí použitelnou u souboru XML, který je použit k definici modulu plug-in.
S dodatkem bodu rozšíření, org.eclipse.core.runtime.contentTypes, platforma Eclipse nyní nabízí 'typ obsahu', který umožňuje modulům plug-in přispívat do Katalogu typů obsahu platformy, a dále jsou také dostupné třídy nazývané Popisovač typu obsahu (Content Type Describer). Pro vývojáře poskytující vlastní typy obsahu jsou k dispozici dva přizpůsobitelné vestavěné popisovače typu obsahu: BinarySignatureDescriber (pro binární typy obsahu) a XMLRootElementContentDescriber (pro textové typy obsahu založené na XML). Navíc mohou poskytovatelé modulů plug-in vytvářet své vlastní popisovače obsahu - podrobné informace najdete v části Příručka vývojáře modulu plug-in platformy (Příručka programátora > Přehled běhového modulu > Typy obsahu).
Nyní je možné definovat příspěvky objektu specifické k souboru XML danou značkou nejvyšší úrovně nebo toto specifikuje daná definice typu dokumentu DTD. Chcete-li toto provést, definujte rozšíření k bodu rozšíření org.eclipse.core.runtime.contentTypes extension pomocí třídy popisovače XMLRootElementContentDescriber a parametrů indikujících název značky nejvyšší úrovně nebo název DTD následujícím způsobem:
<extension
point="org.eclipse.core.runtime.contentTypes">
<content-type
id=<id>
name=<name>
base-type="org.eclipse.core.runtime.xml">
<describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
<parameter name="element" value=tagValue />
</describer>
</content-type>
</extension> nebo
<extension
point="org.eclipse.core.runtime.contentTypes">
<content-type
id=<id>
name=<name>
base-type="org.eclipse.core.runtime.xml">
<describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
<parameter name="dtd" value=dtdValue />
</describer>
</content-type>
</extension>
kde tagValue představuje název značky nejvyšší úrovně k odsouhlasení adtdValue představuje název DTD, jak se zobrazuje v souboru XML.
Uvažujme následující příspěvek objektu v souboru plugin.xml:
<extension
point="org.eclipse.core.runtime.contentTypes">
<content-type
id="topElementContentType"
name="Tests top-level element recognition"
base-type="org.eclipse.core.runtime.xml"
priority="high">
<describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
<parameter name="element" value="myTag" />
</describer>
</content-type>
</extension>
<extension
point="org.eclipse.core.runtime.contentTypes">
<content-type
id="dtdContentType"
name="Tests dtd element recognition"
base-type="org.eclipse.core.runtime.xml"
priority="high">
<describer class="org.eclipse.core.runtime.content.XMLRootElementContentDescriber">
<parameter name="dtd" value="myDTD.xml" />
</describer>
</content-type>
</extension>
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="org.eclipse.ui.examples.objectContributions"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.xml">
<visibility>
<or>
<objectState
name="contentTypeId"
value="org.eclipse.ui.examples.topElementContentType"/>
<objectState
name="contentTypeId"
value="org.eclipse.ui.examples.dtdContentType"/>
</or>
</visibility>
<action id="org.eclipse.ui.examples.objectContributions.action1"
label="%PopupMenus.action"
icon="icons/ctool16/openbrwsr.png"
menubarPath="additions"
class="org.eclipse.ui.examples.objectContributions.PopupMenuActionDelegate"
enablesFor="1">
</action>
</objectContribution>
</extension>
Toto zviditelní action1 pro každý soubor IFile s názvem odpovídajícím *.xml za předpokladu, že obsahuje myTag jako značku XML nejvyšší úrovně nebo používá DTD s názvem myDTD.xml. Takže odpovídat budou následující soubory:
<?xml version="1.0" encoding="UTF-8"?> <myTag id="org.eclipse.ui.workbench" name="%pluginName" version="3.0.0" provider-name="%providerName" class="org.eclipse.ui.internal.WorkbenchPlugin"> </myTag>
nebo
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Book SYSTEM "myDTD.xml"> <fragment id="org.eclipse.ui.workbench" name="%pluginName" version="3.0.0" provider-name="%providerName" class="org.eclipse.ui.internal.WorkbenchPlugin"> <runtime> <library name="workbench.jar"> <export name="*"/> <packages prefixes="org.eclipse.ui, org.eclipse.jface"/> </library> </runtime> </fragment>
BinarySignatureDescriber je popisovač obsahu, který detekuje zadaný binární 'podpis' na daném offsetu v rámci souboru. Tento popisovač se používá stejným způsobem jako XMLRootElementContentDescriber s výjimkou toho, že přebírá parametry "signature", "offset" a "required" namísto "element" nebo "dtd". Dokumentace Javadoc pro popisovač BinarySignatureDescriber nabízí všechny podrobnosti o použití této třídy popisovače obsahu.