先前,有些應用程式的快速功能表會受到限制,排除某些功能表選項。 這是以所選的資源數目、檔案的實體名稱、資源類型等已知的周邊資訊為基礎。 在某些情況下,有限的資源內容相關資訊是已知的,這可以大幅減少無用的功能表選項。 這些資訊在 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.png" 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="big5"?> <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="big5"?> <!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 有這個內容說明程式類別用法的完整詳細資料。