Megjegyzés: Ezen leírásban a tartalom ismertetése során szándékosan kerüljük a fájl szó használatát. A futási tartalomalrendszer nem tételezi fel, hogy a fájlrendszeren lévő fájl rendelkezik tartalommal. Tartalmaz egy protokollt, amelynek segítségével tartalomtípusok rendelhetők a fájlelnevezési mintákhoz. Gyakorlatban ezek a fájlnevek a fájlrendszer fájljait ábrázolják, de a tartalomrendszer megvalósításában semmi nem feltételezi, hogy a fájlrendszer rendelkezik tartalommal. A Fájlkódolás és tartalomtípusok rész a platform erőforrások bedolgozója által biztosított fájlorientált tartalomtípusokat mutatja és azoknak a fejlesztőknek el kell olvasniuk, akik a tartalomtípus alkalmazás programozási felületet használni kívánják.
A tartalomtípusokat az IContentType ábrázolja. Ez a felület egy egyedi tartalomtípust ábrázol, amely tudja, hogyan lehet adatfolyamot olvasni és tartalomtípus-specifikus információkat értelmezni. A tartalomtípusok hierarchikusak. Az XML adatok tartalomtípusa például a szöveg tartalomtípus leszármazottja. Ennek segítségével az új tartalomtípusok kihasználhatják az általánosabb tartalomtípusok attribútumait és jellemzőit.
Az IContentTypeManager belépési pont, amely a platform futási környezet által biztosított alkalmazás programozási felülettel kapcsolatos legtöbb tartalomtípushoz hozzáférést biztosít. Az IContentTypeManager platform hivatkozása a Platform alkalmazás programozási felület segítségével kérhető le:
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
A kliensek az IContentTypeManager platform segítségével megkereshetik a rendszer tartalomtípusait.
Egy bytefolyam tartalomtípusa az IContentTypeManager API meghívásával az alábbi módon határozható meg:
InputStream stream = ...; IContentType contentType = contentTypeManager.findContentTypeFor(stream, "file.xml"); stream.close();
Ez visszaadja a legmegfelelőbb
IContentType
típust feltéve, hogy a bemenet meg van adva, vagy null
értéket, ha nem található. Egy adott adatfolyamhoz több tartalomtípus is
megfelelő lehet. Ebben az esetben a platform bizonyos heurisztika
segítségével meghatározza a használandó típust. A tartalomtípusok először
fájlnév alapján kerülnek kiválasztásra. Ez kihagyható, de ezzel két
probléma van: elképzelhető, hogy az eredmények nem lesznek annyira
pontosak, mivel számos független tartalomtípus fogadhatja ugyanazt a
bemenetet; jelentős teljesítményromlást jelent, mivel a platform minden
tartalomtípusának meg kell adni a lehetőséget a folyam elemzésére. Így -
hacsak nem áll rendelkezésre - az ügyfeleknek mindig meg kell adniuk egy
fájlnevet a folyamhoz.
A platform tartalomtípus-támogatásának másik érdekes jellemzője az, hogy képes leírni a bináris vagy karakterkészlet-folyam tartalmát. Az alábbi kódrészlet bemutatja, hogy ez hogyan történhet:
InputStream stream = ...; IContentDescription description = contentTypeManager.getDescriptionFor(stream, "file.xml"); stream.close();
A visszaadott IContentDescription példány leírja a tartalomtípust és a további lényeges információkat, amelyek a megadott tartalomból kerültek kibontásra. A tartalomleírás tartalom-specifikus tulajdonságokat tárol kulcs/érték párok formájában. A platform le tud írni olyan tulajdonságokat, mint például a karakterkészlet és a szövegfájl byte-sorrendje, de a tartalomtípus-szolgáltatók másikakat is megadhatnak.
Az új tartalomtípusok gyakran meglévők specializálásával kerülnek megadásra. Ez a hierarchia "is a" kapcsolatot létesít a származtatott és az alap tartalomtípus között. A bedolgozófejlesztőknek kontextusfüggő szolgáltatások megvalósításakor ezt figyelembe kell venniük. Ha egy adott szolgáltatás alkalmazható egy adott tartalomtípusra, akkor a származtatott tartalomtípusokra is annak kell lennie. Az IContentType.isKindOf(IContentType superType) metódus segítségével meghatározható, hogy két IContentType kapcsolódik-e egymáshoz. Az IContentType.getBaseType() egy adott IContentType alaptípusát határozza meg.