區分內容的物件構成要素

先前,有些應用程式的快速功能表會受到限制,排除某些功能表選項。 這是以所選的資源數目、檔案的實體名稱、資源類型等已知的周邊資訊為基礎。 在某些情況下,有限的資源內容相關資訊是已知的,這可以大幅減少無用的功能表選項。 這些資訊在 XML 檔中可能會很有用,因為在許多情況中,某個動作會適合某類型的 XML 檔, 但不適合其他類型,如包含 Ant Script 的 XML 檔就是如此。 執行 Ant... 動作在它的快速功能表是合邏輯的, 但它並不適合用來定義外掛程式的 XML 檔。

在新增 org.eclipse.core.runtime.contentTypes 延伸點之後, 現在,Eclipse 提供了「內容類型」,使外掛程式能夠有助於建立平台內容類型型錄, 不但如此,它還能使用稱為「內容類型說明程式」的類別。 如果開發人員要提供自己的內容類型,可以使用兩個可自訂的內建內容類型: BinarySignatureDescriber(二進位內容類型)和 XMLRootElementContentDescriber(文字、XML 型的內容類型)。 另外,外掛程式提供者也可以建立自己的內容說明程式, 如果需要詳細資訊,請參閱 Platform Plug-in Developer Guide(程式設計師手冊 > 執行時期概觀 > 內容類型)。

XMLRootElementContentDescriber

現在,您可以定義含有給定的最上層標示的 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

BinarySignatureDescriber 是一個內容說明程式,用來在檔案內的給定偏移上偵測指定的二進位 'signature'。 這個說明程式的使用方式和 XMLRootElementContentDescriber 相同,不過,它的參數是 "signature"、"offset" 和 "required",而不是 "element" 或 "dtd"。BinarySignatureDescriber 的 Javadoc 有這個內容說明程式類別用法的完整詳細資料。