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.