컨텐츠 유형 사용

참고: 이 설명의 경우, 컨텐츠에 대해 논의할 때 특히 파일이라는 단어를 사용하지 않습니다. 런타임 컨텐츠 엔진은 컨텐츠가 파일 시스템에 있는 파일에 포함되어 있다고 가정하지 않습니다. 그러나 컨텐츠는 컨텐츠 유형을 파일 이름 지정 패턴과 연관시킬 수 있는 프로토콜을 포함합니다. 실제로 이러한 파일 이름은 파일 시스템의 파일을 나타내지만 컨텐츠 시스템 구현의 어떠한 항목도 컨텐츠가 파일 시스템에 있음을 가정하지 않습니다. 파일 인코딩 및 컨텐츠 유형에서는 플랫폼 자원 플러그인에서 제공하는 파일 지향 컨텐츠 유형 기능을 설명하며, 해당 컨텍스트에서 컨텐츠 유형 사용에 관심이 있는 개발자는 반드시 읽어야 합니다.

컨텐츠 유형 찾기

컨텐츠 유형은 IContentType으로 표시됩니다. 이 인터페이스는 데이터 스트림을 읽고 컨텐츠 유형 특정 정보를 해석하는 방법을 알고 있는 고유 컨텐츠 유형을 표시합니다. 컨텐츠 유형은 본질적으로 계층 구조입니다. 예를 들어 XML 데이터의 컨텐츠 유형은 텍스트 컨텐츠 유형의 하위로 간주됩니다. 이를 통해 새 컨텐츠 유형은 더욱 일반적인 컨텐츠 유형의 속성 또는 작동에 영향을 줍니다.

IContentTypeManager는 플랫폼 런타임이 제공하는 대부분의 컨텐츠 유형 관련 API에 대한 액세스를 제공하는 시작점입니다. 플랫폼 IContentTypeManager에 대한 참조를 얻기 위해 클라이언트는 Platform API를 사용할 수 있습니다.

IContentTypeManager contentTypeManager = Platform.getContentTypeManager();

클라이언트는 IContentTypeManager를 사용하여 시스템에서 컨텐츠 유형을 찾을 수 있습니다.

데이터 스트림의 컨텐츠 유형 발견

바이트 스트림이 제공되면 다음과 같이 IContentTypeManager API를 호출하여 컨텐츠 유형을 판별할 수 있습니다.

InputStream stream = ...; 
IContentType contentType = contentTypeManager.findContentTypeFor(stream, "file.xml");
stream.close();

이는 입력이 제공된 경우 가장 적합한 IContentType를 리턴하거나 아무 것도 찾을 수 없는 경우에는 null을 리턴합니다. 주어진 데이터 스트림에 다중 컨텐츠 유형이 적합한 것으로 간주될 수 있습니다. 이 경우, 플랫폼은 일부 휴리스틱을 사용하여 선택해야 하는 유형을 결정합니다. 파일 이름은 컨텐츠 유형을 선택하는 첫 번째 기준입니다. 파일 이름을 생략할 수 있지만 이 경우 두 가지 문제가 있습니다. 관련되지 않은 많은 컨텐츠 유형이 동일한 입력을 허용할 수 있기 때문에 결과가 올바르지 않을 수 있으며, 플랫폼의 모든 컨텐츠 유형에 스트림 분석 기회가 제공되어야 하므로 성능에 커다른 문제점이 있습니다. 따라서 파일 이름을 사용할 수 없는 경우를 제외하고 클라이언트는 항상 스트림과 함게 파일 이름을 제공합니다.

데이터 스트림 설명

플랫폼에서 컨텐츠 유형 지원의 특별한 또 다른 기능은 2진 또는 문자 스트림에 대한 컨텐츠 설명 기능입니다. 다음 코드 스니펫은 이를 수행하는 방법을 표시합니다.

InputStream stream = ...; 
IContentDescription description = contentTypeManager.getDescriptionFor(stream, "file.xml");
stream.close();

리턴된 IContentDescription 인스턴스는 컨텐츠 유형 및 제공된 컨텐츠에서 추출된 추가 관련 정보를 설명합니다. 컨텐츠 설명은 키/값 쌍 양식으로 컨텐츠별 특성을 저장합니다. 플랫폼 자체가 텍스트 기반 스트림의 문자 세트 및 바이트 순서와 같은 특성을 설명할 수 있지만 컨텐츠 유형 제공자가 다른 특성을 정의할 수 있습니다.

컨텐츠별 기능 제공

새 컨텐츠 유형이 기존 컨텐츠 유형의 특수화로 정의되는 경우가 많습니다. 이 계층 구조는 파생된 컨텐츠 유형과 기본 유형 간에 "is a" 관계를 설정합니다. 플러그인 개발자는 컨텐츠별 기능을 구현할 때 이를 준수해야 합니다. 주어진 기능을 주어진 컨텐츠 유형에 적용할 수 있는 경우, 파생된 컨텐츠 유형에도 기능을 적용할 수 있어야 합니다. IContentType.isKindOf(IContentType superType) 메소드를 사용하면 두 개의 IContentType이 관련되어 있는지 여부를 판별할 수 있습니다. IContentType.getBaseType() 메소드를 사용하면 주어진 IContentType의 기본 유형을 판별할 수 있습니다.