Poznámka: V tomto výkladu se výslovně vyhýbáme používání slova soubor, když mluvíme o obsahu. Běhový generátor obsahu nepředpokládá, že je obsah obsažen v souboru v rámci systému souborů. Nicméně zahrnuje protokol umožňující přidružování typů obsahu k jednotlivým druhům názvů souborů. V praxi tyto názvy souborů představují soubory v systému souborů, avšak v implementaci systému obsahu nic nevychází z předpokladu, že se obsah nachází v systému souborů. Kódování souboru a typy obsahu pojednává o souborově orientovaných schopnostech typu obsahu vkládaných modulem plug-in prostředků platformy. Doporučujeme pozornosti vývojářů, kteří mají zájem o použití rozhraní API typu obsahu v tomto kontextu.
Typy obsahu jsou reprezentovány třídou IContentType. Toto rozhraní reprezentuje jedinečný typ obsahu, který zná způsob čtení datového toku a interpretace informace o konkrétním typu obsahu. Typy obsahu mají hierarchickou povahu. Například typ obsahu pro data XML je považován za podřízený prvek textového typu obsahu. To umožňuje, aby nové typy obsahu využívaly výhody atributů nebo chování obecnějších typů obsahu.
IContentTypeManager je vstupním bodem, který poskytuje přístup k větší části rozhraní API typu obsahu poskytovaného běhovým modulem platformy. K získání informací pro platformu používejte IContentTypeManager, klienti mohou použít rozhraní API platformy API:
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
Klienti mohou používat IContentTypeManager platformy k vyhledávání typů obsahu v systému.
Pro určitý tok bajtů lze stanovit typ obsahu voláním rozhraní API IContentTypeManager:
InputStream stream = ...; IContentType contentType = contentTypeManager.findContentTypeFor(stream, "file.xml"); stream.close();
Toto vrátí nejvhodnější IContentType
pro daný vstup nebo null
, nelze-li vstup nalézt. Pro daný datový tok lze stanovit více typů obsahu. V takovém případě platforma použije heuristický postup ke stanovení typu, který má být zvolen.
Název souboru je prvním kritériem volby typů obsahu. Lze vynechat, avšak vznikají dva možné problémy: výsledky nemusejí být správné, protože tentýž vstup může akceptovat několik nesouvisejících typů obsahu; rovněž dochází k velkému poklesu výkonu, protože všechny typy obsahu platformy jsou stejně vhodnými kandidáty analýzy datového toku. Takže pokud je název souboru k dispozici, měli byste jej zadat společně s datovým tokem.
Jinou zajímavou vlastností podpory typů obsahu v platformě je schopnost popisování obsahu binárního i znakového datového toku. Následující úsek kódu předvádí realizaci:
InputStream stream = ...; IContentDescription description = contentTypeManager.getDescriptionFor(stream, "file.xml"); stream.close();
Vrácená instance IContentDescription popisuje typ obsahu a poskytuje přídavné relevantní informace získané z obsahu. Popis obsahu ukládá vlastnosti specifické pro obsah v podobě dvojic klíč/hodnota. Samotná platforma je schopna popisovat vlastnosti znakové sady a uspořádání bajtů pro textové datové toky, ostatní vlastnosti lze definovat prostřednictvím poskytovatelů typu obsahu.
Nové typy obsahu se často definují vymezením stávajících typů. Tato hierarchie ustavuje vztah "korespondence" mezi odvozeným a příslušným základním typem obsahu. Vývojáři modulu plug-in musejí takto postupovat při implementaci kontextově podmíněných vlastností. Pokud lze danou vlastnost použít pro daný typ obsahu, musí být tato vlastnost uplatnitelná i pro veškeré odvozené typy obsahu. Metoda IContentType.isKindOf(IContentType superType) umožňuje určit, zda vzájemně korespondují dva IContentType. Metoda IContentType.getBaseType() umožňuje určení základního typu daného IContentType.