org.eclipse.core.runtime.content 套件支援定義資料串流的內容類型。Eclipse 的數種內容敏感特性會使用到內容類型,如自動編碼判定、比較編輯器選項以及功能表構成要素。由 IContentTypeManager 管理的中央內容登錄允許外掛程式定義內容類型和指定如何讀取和說明內容的類型。為了提供內容類型,需要瞭解基本的內容組織架構。
附註:因此,在提及內容時,要特別避免使用 file 單字。執行時期內容引擎不會假設內容是包含在檔案系統的檔案中。但是,它的確包含允許將內容類型關聯 檔案命名型樣的協定。實際上,這些檔名代表檔案系統中的檔案,但是內容系統的實作方式會假設內容是位在檔案系統中。 檔案編碼和內容類型討論平台資源外掛程式所提供的檔案導向內容類型。
平台定義部分的基本內容類型,如純文字和 XML 資料串流。這些內容類型的定義與其他外掛程式提供的相同。我們會查看平台如何定義文字內容類型,以便更充分的瞭解內容類型組織架構。
外掛程式在延伸點 org.eclipse.core.runtime.contentTypes 提供延伸來定義內容類型。在這個延伸中,外掛程式指定內容類型的 ID 和名稱,以及 IContentDescriber 來讀取輸入串流並提供內容的說明。下列片段是執行時期外掛程式的文字內容類型構成要素:
<extension point="org.eclipse.core.runtime.contentTypes"> <content-type id="text" name="%textContentTypeName"> priority="high" file-extensions="txt"> <describer class="org.eclipse.core.internal.content.TextContentDescriber"/> </content-type> ...
TextContentDescriber 負責讀取輸入串流並快速判斷提供的內容是否為有效的文字範例。每當平台嘗試判斷特定資料串流的內容時,都會呼叫 describe(inputStream, description) 方法。 IContentDescriber 負責快速判斷內容是否代表其內容類型的有效範例並傳回指出內容是否符合其類型的常數。如果內容符合其類型,describer 應該也要在提供的 IContentDescription 填入資料的相關資訊。
IContentDescription 將特定內容相關的屬性儲存到鍵值配對。這些屬性與特定內容類型有關。平台指定字集的屬性以及文字檔的位元組次序,但是可以定義其他項目。
IContentTypeManager 定義內容登錄的協定。用戶端可以使用這個類別來測試內容串流或瞭解系統中的其他內容類型。
內容類型是由 IContentType 表示。 這個類別代表一個唯一內容類型,知道如何讀取資料串流並解譯特定類型專用的資訊。內容類型在本質上是階層式的。例如,XML 資料的內容類型即視為文字內容類型的子項。
<content-type id="xml" name="%xmlContentTypeName" base-type="text" priority="high" file-extensions="xml" default-charset="UTF-8"> <describer class="org.eclipse.core.internal.content.XMLContentDescriber"/> </content-type>
這允許新的內容類型能輕易使用更一般化的內容類型屬性或行為。
平台文字內容類型未定義文字內容的字集。文字內容類型的子項可以視情況自由指定不同的預設字集,如同 XML 內容類型的指定方式。XML 串流的預設字集是 UTF-8,表示當 XML 檔的內容未明確描述其編碼方式時,即會認為其編碼為 UTF-8。
您可以想像兩個獨立的外掛程式提供相同內容種類的內容類型。在這種情況下,平台只會為該內容選取一個內容的描述程式。描述程式的選取是利用 priority 屬性來判斷,這個屬性可以在 contentTypes 延伸中指定。如果兩個外掛程式提供相同優先順序之相同內容的內容類型,則不確定會選取哪一個內容說明子。然而,一旦選定內容說明子之後,參照「遺漏」之內容說明子的所有登錄, 將會被以別名方式指到選中的內容說明子。