Az előzőekben egyes alkalmazások környezetérzékeny menüit bizonyos menüpontok kizárása korlátozta. Ez olyan periféria információkon alapult, mint a kijelölt erőforrások száma, a fájl fizikai neve, az erőforrás típusa stb. Néhány esetben az erőforrás tartalmáról korlátozott információk álltak rendelkezésre, ami jelentősen korlátozta a nem használható menüpontokat. Az ilyen információk igen hasznosak lehetnek egy XML fájlban, mivel számos esetben előfordul, hogy egyes műveletek az egyik XML fájlra alkalmazhatók (például az Ant parancsfájlokat tartalmazó XML fájlokra), másokra viszont nem. Az Ant futtatása... például logikus egy XML fájl előugró menüjében, de nem használható például egy bedolgozót meghatározó XML fájlhoz.
Az org.eclipse.core.runtime.contentTypes kiterjesztési pont hozzáadásával az Eclipse 'tartalomtípus' megadását biztosítja, ami lehetővé teszi a bedolgozók számára, hogy közzétegyék a platform tartalomtípus katalógust, sőt Tartalomtípus leíró osztályokat is használhatnak. A saját tartalomtípusokat használó fejlesztők két testreszabható, beépített tartalomtípus leírót használhatnak: BinarySignatureDescriber (bináris tartalomtípusokhoz) és XMLRootElementContentDescriber (szöveghez és XML alapú tartalomtípusokhoz). A bedolgozók fejlesztői ezenkívül saját tartalom leírókat is biztosíthatnak. Erről részletes információkat a Platform bedolgozó fejlesztői útmutatóban (Programozói útmutató > Futtatási környezet áttekintése > Tartalomtípusok) talál.
Lehetséges adott legfelsőszintű címkével rendelkező vagy adott DTD-t meghatározó XML fájlhoz objektum közreműködéseket megadni. Ehhez adjon meg egy kiterjesztést az org.eclipse.core.runtime.contentTypes kiterjesztési ponthoz XMLRootElementContentDescriber leíró osztállyal és olyan paraméterekkel, amelyek jelzik a legfelső szintű címke vagy a dtd nevét:
<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>vagy
<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>
A tagValue azt a legfelső szintű címkét jelzi, amelynek egyeznie kell, adtdValue pedig az XML fájlban található DTD nevét jelöli.
Fontolja meg az alábbi objektum közreműködést egy plugin.xml fájlban:
<extension point="org.eclipse.core.runtime.contentTypes"> <content-type id="topElementContentType" name="Legfelső szintű elem felismerésének tesztelése" 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="DTD elem felismerésének tesztelése" 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>
Az action1 minden olyan IFile számára látható lesz, amelynek a neve *.xml és amely tartalmazza a myTag legfelső szintű XML címkét vagy használja a myDTD.xml nevű DTD-t. Így az alábbi XML fájlok fognak megfelelni:
<?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>
vagy
<?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>
A BinarySignatureDescriber egy olyan tartalom leíró, amely észleli a megadott bináris 'aláírást' egy adott eltolásnál a fájlokban. Ezt a leírót ugyanúgy lehet használni mint az XMLRootElementContentDescriber-t azzal a különbséggel, hogy ez a leíró az "element" vagy "dtd" paraméter helyett a "signature", "offset" és "required" paramétereket használja. A BinarySignatureDescriber Java dokumentációja teljes leírást tartalmaz ennek a tartalom leíró osztálynak a használatáról.