Merk: I denne beskrivelsen unngår vi bevisst å bruke ordet fil når vi snakker om innhold. Kjøretidsinnholdsmotoren forventer ikke at innholdet ligger i en fil i filsystemet. Den inneholder imidlertid en protokoll som gjør det mulig å knytte innholdstyper til filnavngivningsmønstre. I praksis representerer disse filnavnene filer i filsystemet, men det er ingenting i implementeringen av innholdssystemet som tilsier at innholdet ligger i filsystemet. Filkoding og innholdstyper beskriver den filorienterte innholdstypefunksjonaliteten som er oppgitt av plattformens plugin-modul for ressurser, og bør leses av utviklere som vil bruke programmeringsgrensesnittet for innholdstypen i den konteksten.
Innholdstyper representeres av IContentType. Dette grensesnittet representerer en unik innholdstype som vet hvordan en datastrøm skal leses, og tolker informasjon som er spesifikk for innholdstyper. Innholdstyper er hierarkiske typer. For eksempel betraktes en innholdstype for XML-data som underordnet tekstinnholdstypen. Dette gjør det mulig for nye innholdstyper å dra fordel av attributtene eller funksjonaliteten i mer generelle innholdstyper.
IContentTypeManager er inngangspunktet som gir tilgang til det meste av det innholdstyperelaterte programmeringsgrensesnittet som er oppgitt av plattformkjøretiden. For å få en referanse til plattformens IContentTypeManager, kan programmeringsgrensesnittet for Platform brukes:
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
Hvis det er interessant å fastsette innholdstypene i systemet, kan plattformens IContentTypeManager brukes.
Med en datastrøm av byte er det mulig å fastsette innholdstypen ved å kalle programmeringsgrensesnittet for IContentTypeManager på følgende måte:
InputStream stream = ...; IContentType contentType = contentTypeManager.findContentTypeFor(stream, "file.xml"); stream.close();
Ut fra de oppgitte inndataene returneres en mest mulig egnet
IContentType
eller null
hvis ingen blir funnet. Det kan hende at flere
innholdstyper anses som egnede for en gitt datastrøm. I så fall bruker
plattformen heuristisk metoder for å fastsette hvilken som skal velges.
Filnavnet er det første kriteriet som brukes til å velge innholdstyper. Det kan
utelates, men vil få konsekvenser både for resultatet som muligens ikke blir helt
nøyaktig fordi mange utilknyttede innholdstyper kan godta samme inndata, og for ytelsen
som belastes siden det er mulig for alle innholdstyper i plattformen å analysere
datastrømmen. Så med mindre filnavnet ikke er tilgjengelig, bør det alltid
oppgis sammen med datastrømmen.
En annen interessant funksjon for innholdstypestøtten i plattformen, er muligheten til å beskrive innholdet i en binær eller tegnbasert datastrøm. Følgende kodesnutt viser hvordan du gjør dette:
InputStream stream = ...; IContentDescription description = contentTypeManager.getDescriptionFor(stream, "file.xml"); stream.close();
Den returnerte forekomsten av IContentDescription beskriver innholdstypen og annen relevant informasjon som er trukket ut fra det oppgitte innholdet. Innholdsbeskrivelsen lagrer innholdsspesifikke egenskaper i form av nøkkel/verdi-par. Selve plattformen kan beskrive egenskaper, for eksempel tegnsettet og byterekkefølgen i tekstbaserte datastrømmer, mens andre kan defineres av innholdstypeleverandører.
Nye innholdstyper defineres ofte som en spesialisering av eksisterende innholdstyper. Dette hierarkiet oppretter et "er et"-forhold mellom en avledet innholdstype og basistypen. Plugin-utviklere må ta hensyn til dette når de implementerer innholdsavhengige funksjoner. Hvis en gitt funksjon kan brukes i en gitt innholdstype, må funksjonen også kunne brukes i hvilke som helst avledede innholdstyper. Med metoden IContentType.isKindOf(IContentType superType) er det mulig å fastsette om to forekomster av IContentType er knyttet til hverandre. Metoden IContentType.getBaseType() gjør det mulig å fastsette basistypen til en gitt IContentType.