先前,有些應用程式的快速功能表會受到限制,排除某些功能表選項。 這是以所選的資源數目、檔案的實體名稱、資源類型等已知的周邊資訊為基礎。 在某些情況下,有限的資源內容相關資訊是已知的,這可以大幅減少無用的功能表選項。 這些資訊在 XML 檔中可能會很有用,因為在許多情況中,某個動作會適合某類型的 XML 檔, 但不適合其他類型,如包含 Ant Script 的 XML 檔就是如此。 執行 Ant... 動作在它的快速功能表是合邏輯的, 但它並不適合用來定義外掛程式的 XML 檔。
在新增 org.eclipse.core.runtime.contentTypes 延伸點之後, 現在,Eclipse 提供了「內容類型」,使外掛程式能夠有助於建立平台內容類型型錄, 不但如此,它還能使用稱為「內容類型說明程式」的類別。 如果開發人員要提供自己的內容類型,可以使用兩個可自訂的內建內容類型: BinarySignatureDescriber(二進位內容類型)和 XMLRootElementContentDescriber(文字、XML 型的內容類型)。 另外,外掛程式提供者也可以建立自己的內容說明程式, 如果需要詳細資訊,請參閱 Platform Plug-in Developer Guide(程式設計師手冊 > 執行時期概觀 > 內容類型)。
現在,您可以定義含有給定的最上層標示的 XML 檔或指定給定 DTD 的 XML 檔專用的物件構成要素。 如果要這麼做,請依照下列方式,利用說明程式類別 XMLRootElementContentDescriber 和指示最上層標示名稱或 dtd 名稱的參數,定義延伸規格給 org.eclipse.core.runtime.contentTypes 延伸點:
<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>或
<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>
其中 tagValue 代表要符合的最上層標示的名稱,dtdValue 代表如 XML 檔中所呈現的 DTD 的名稱。
請考量在 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.gif"
menubarPath="additions"
class="org.eclipse.ui.examples.objectContributions.PopupMenuActionDelegate"
enablesFor="1">
</action>
</objectContribution>
</extension>
這會使名稱符合 *.xml 的任何 IFile,只要它的最上層 XML 標示包含 myTag, 或它使用稱為 myDTD.xml 的 DTD,它的 action1 都會成為可見的。 因此,下列 XML 檔將會符合:
<?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>
或
<?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 是一個內容說明程式,用來在檔案內的給定偏移上偵測指定的二進位 'signature'。 這個說明程式的使用方式和 XMLRootElementContentDescriber 相同,不過,它的參數是 "signature"、"offset" 和 "required",而不是 "element" 或 "dtd"。BinarySignatureDescriber 的 Javadoc 有這個內容說明程式類別用法的完整詳細資料。