컨텐츠 유형 제공

새 컨텐츠 유형 제공

플랫폼은 일반 텍스트 및 XML과 같은 일부 기본 컨텐츠 유형을 정의합니다. 이러한 컨텐츠 유형은 기타 플러그인에서 제공하는 유형과 동일한 방식으로 정의됩니다. 컨텐츠 유형 프레임워크를 더 잘 이해하기 위해 플랫폼이 일부 컨텐츠 유형을 정의하는 방법을 살펴 보기로 합니다.

플러그인은 org.eclipse.core.runtime.contentTypes 확장점에 대한 확장을 제공하여 컨텐츠 유형을 정의합니다. 이 확장에서 플러그인은 컨텐츠 유형의 단순 ID와 이름을 지정합니다(전체 ID는 항상 단순 ID 앞에 현재 이름 공간 접두부가 추가됨). 다음 스니펫은 org.eclipse.core.runtime.text 컨텐츠 유형 지시문의 절단된 버전을 표시합니다.

	<extension point="org.eclipse.core.runtime.contentTypes">
		<content-type id="text" name="%textContentTypeName">
			file-extensions="txt">
			<describer class="org.eclipse.core.internal.content.TextContentDescriber"/>
		</content-type>
		...

file-extensions 속성은 컨텐츠 유형과 연관된 파일 확장자(이 예제에서는 ".txt")를 정의합니다. file-names 속성(이 경우에는 사용되지 않음)은 전체 이름 연관을 허용합니다. 플랫폼은 컨텐츠 유형 발견 및 설명(클라이언트가 파일 이름을 제공하는 경우)을 수행할 때 두 속성을 모두 고려합니다.

describer 요소는 컨텐츠 유형의 컨텐츠 설명자를 정의하는 데 사용됩니다.

컨텐츠 발견 및 설명

컨텐츠 유형은 자동 컨텐츠 유형 발견을 허용하는 식별 가능한 특성이 있거나 컨텐츠 유형에 속한 데이터에 특별한 특성이 있는 경우 컨텐츠 설명자를 제공해야 합니다. org.eclipse.core.runtime.text의 경우, 컨텐츠만 보고 컨텐츠 유형을 이해할 수는 없습니다. 그러나 제품 정보에 관심이 있을 수 있는 특성 클라이언트인 바이트 순서 표시가 텍스트 스트림에 미리 추가될 수 있으므로 컨텐츠 설명자가 보장됩니다.

설명자는 IContentDescriber 또는 ITextContentDescriber의 구현입니다. 후자는 설명자 또는 텍스트 지향 컨텐츠 유형으로 구현해야 하는 전자를 특수화한 것입니다. 컨텐츠 유형의 네이처에 관계없이 설명자는 두 가지 책임을 맡고 있는데, 컨텐츠 유형이 주어진 데이터 스트림에 적합한지 여부를 판별할 수 있도록 돕고 컨텐츠 유형에 속한 것으로 추정되는 데이터 스트림에서 특별한 특성을 추출하는 것입니다.

describe(stream, description) 메소드는 플랫폼이 특정 데이터 스트림의 컨텐츠 유형을 판별하거나 컨텐츠를 설명하려고 시도할 때마다 호출됩니다. 발견만 요청하는 경우에는 설명이 null입니다. 그렇지 않으면 설명자가 스트림을 읽어 발견할 수 있는 특성만으로 컨텐츠 설명을 채우려고 시도해야 합니다. 컨텐츠 유형 마크업을 사용하여 기본값을 갖는 특성을 선언해야 합니다(예를 들어, org.eclipse.core.runtime.xml은 UTF-8을 기본 문자 세트로 선언함).

컨텐츠 설명자는 임무 수행 시 가능한 빨리 실행되어야 합니다. 읽어야 할 데이터 스트림이 적을수록 좋습니다. 또한 플러그인 활성화에서 면제된 패키지에 컨텐츠 설명자 구현이 선언됩니다(Eclipse-AutoStart 번들 Manifest 헤더 참조). 컨텐츠 유형 프레임워크가 초기화될 때 모든 설명자가 인스턴스화되기 때문에 이 요구사항을 준수하지 못하면 조기 활성화가 발생하므로 이를 피해야 합니다. 향후 플랫폼 구현에서는 설명자가 인스턴스화되면 해당 플러그인의 활성화가 트리거되는 경우 이를 거부할 수도 있습니다.

기존 컨텐츠 유형 확장

컨텐츠 유형은 본질적으로 계층 구조입니다. 이를 통해 새 컨텐츠 유형은 더욱 일반적인 컨텐츠 유형의 속성 또는 작동에 영향을 줍니다. 예를 들어, XML 데이터의 컨텐츠 유형은 텍스트 컨텐츠 유형의 하위로 간주됩니다:

       <content-type
	id="xml"
	name="%xmlContentTypeName"
	base-type="org.eclipse.core.runtime.text"
	file-extensions="xml">
	<describer class="org.eclipse.core.internal.content.XMLContentDescriber"/>
	<property name="charset" default="UTF-8"/>
</content-type>

XML 파일은 일종의 텍스트 파일로 간주되므로 후자에 적용할 수 있는 기능은 전자에도 적용할 수 있어야 합니다.

XML 컨텐츠 유형은 파일 연관 및 설명자 구현 등 Text 컨텐츠 유형에 원래 정의된 몇 가지 컨텐츠 유형 속성을 대체합니다. 또한 이 컨텐츠 유형은 charset 특성의 기본 특성 값을 선언합니다. 이는 XML 컨텐츠 유형에 속한 것으로 간주되는 데이터 스트림에 대한 컨텐츠 설명 중에 설명자가 charset 속성을 채우지 않으면 플랫폼이 이를 "UTF-8"로 설정함을 의미합니다.

또 다른 예제로 org.eclipse.ant.core.antBuildFile 컨텐츠 유형(Ant 빌드 스크립트의 경우)은 XML 컨텐츠 유형을 확장합니다.

       <content-type

id="antBuildFile"
name="%antBuildFileContentType.name"
base-type="org.eclipse.core.runtime.xml"
file-names="build.xml"
file-extensions="macrodef,ent,xml">
<describer
class="org.eclipse.ant.internal.core.contentDescriber.AntBuildfileContentDescriber">
</describer>
</content-type>

charset 특성의 기본값은 상속됨에 유의하십시오. 상속된 특성 또는 설명자를 빈 문자열 값으로 다시 선언하여 취소할 수 있습니다.

추가 파일 연관

기존 컨텐츠 유형에 새 파일 연관을 추가할 수 있습니다. 예를 들어, 자원 플러그인은 org.eclipse.core.runtime.xml을 ".project" 파일과 연관시킵니다.

	<extension point="org.eclipse.core.runtime.contentTypes">
	<file-association content-type="org.eclipse.core.runtime.xml" file-names=".project"/>
	...

컨텐츠 유형 별명 지정

Eclipse의 확장 가능한 특성 때문에 플러그인이 의존하는 컨텐츠 유형을 주어진 제품 구성에서 사용 불가능할 수도 있습니다. 컨텐츠 유형 별명 지정을 사용하여 이를 해결할 수 있습니다. 컨텐츠 유형 별명은 사용가능성이 보장되지 않는 선호하는 다른 컨텐츠 유형의 플레이스홀더입니다. 예를 들어, 런타임은 JDT(Java Development Tooling)에서 제공하는 Java 특성 컨텐츠 유형(org.eclipse.jdt.core.javaProperties)의 별명(org.eclipse.core.runtime.properties)을 선언합니다.

<!-- a placeholder for setups where JDT's official type is not available -->			
<content-type id="properties" name="%propertiesContentTypeName"
base-type="org.eclipse.core.runtime.text"
alias-for="org.eclipse.jdt.core.javaProperties"
file-extensions="properties">
<property name="charset" default="ISO-8859-1"/>
</content-type>

이는 선호 컨텐츠 유형 사용 가능 여부에 관계없이 참조할 수 있는 플레이스홀더를 플러그인에 제공합니다. 선호 컨텐츠 유형을 사용할 수 있는 경우, 별명 컨텐츠 유형은 컨텐츠 유형 카탈로그에서 억제되고 이에 대한 참조는 대상 컨텐츠 유형에 대한 참조로 해석됩니다. 사용할 수 없는 경우, 별명은 일반 컨텐츠 유형으로 사용됩니다.