Sisältölajien käyttö

Huomautus: Seuraavassa vältetään nimenomaisesti sanan tiedosto käyttöä sisällöstä puhuttaessa. Ajonaikaisen sisällön perusosa ei oleta, että sisältö on tiedostojärjestelmän tiedostossa. Siihen sisältyy kuitenkin käytäntö, jonka avulla sisältölajit voi liittää tiedostojen nimiin. Käytännössä nämä tiedostonimet edustavat tiedostojärjestelmän tiedostoja, mutta mikään sisältöjärjestelmän toteutuksessa ei edellytä, että sisältö sijaitsee tiedostojärjestelmässä. Kohdassa Tiedoston koodaus ja sisältölajit käsitellään ympäristön resurssilisäosan lisäämiä tiedostosuuntautuneita sisältölajitoimintoja. On tärkeää, että sisältölajin sovellusohjelmaliittymän käytöstä kyseisessä ympäristössä kiinnostuneet kehittäjät perehtyvät kyseiseen kohtaan.

Tietoja sisältölajeista

Sisältölajeja edustaa IContentType-rajapinta. Rajapinta kuvaa yksilöllistä sisältölajia, joka osaa lukea tietovirtaa ja tulkita sisältölajikohtaisia tietoja. Sisältölajit ovat luonteeltaan hierarkkisia. Esimerkiksi XML-tietojen sisältölaji katsotaan tekstisisältölajin aliobjektiksi. Näin uuden sisältölajit voivat hyötyä yleisempien sisältölajien määritteistä ja toiminnasta.

IContentTypeManager on tulokohta, jonka avulla käytetään useimpia ajonaikaisesta ympäristöstä peräisin olevia sisältölajeihin liittyviä sovellusohjelmaliittymiä. Asiakkaat voivat hankkia viittauksen ympäristön IContentTypeManager-kohteeseen käyttämällä Platform-sovellusohjelmaliittymää:

IContentTypeManager contentTypeManager = Platform.getContentTypeManager();

Asiakkaat voivat etsiä tietoja järjestelmän sisältölajeista IContentTypeManager-kohteen avulla.

Tietovirran sisältölajin havaitseminen

On mahdollista selvittää tavuvirran sisältölaji kutsumalla IContentTypeManager-sovellusohjelmaliittymää seuraavasti:

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

Tämä palauttaa syötteen perusteella sopivimman IContentType-kohteen tai arvon null, jos mitään ei löydy. Useat sisältölajit voivat sopia tietovirtaan. Siinä tapauksessa ympäristö selvittää valittavan lajin heuristiikan avulla. Tiedostonimi on ensimmäinen kriteeri, jonka perusteella sisältölajit valitaan. Sen voi jättää pois, mutta tästä on kaksi seurausta: ensiksi tulokset eivät ehkä ole yhtä oikeellisia, koska monet asiaan liittymättömät sisältölajit saattavat hyväksyä saman syötteen, toiseksi tästä aiheutuu merkittävä suoritustehon lasku, koska ympäristön kaikille sisältölajeille on annettava mahdollisuus analysoida virtaa. Jos työasema on käytettävissä, sen tulisi siis aina antaa tiedostonimi virran mukana.

Tietovirran kuvaus

Toinen sisältölajien tuen kiinnostava tuoteominaisuus ympäristössä on mahdollisuus kuvata sisältö binaarisesta tai merkkivirrasta. Seuraava koodin katkelma osoittaa, kuinka tämän voi tehdä:

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

Palautuva IContentDescription-ilmentymä kuvaa annetun sisällön sisältölajia ja muita olennaisia tietoja. Sisällön kuvaus tallentaa sisältökohtaiset ominaisuudet avain/arvo-parien muodossa. Ympäristö itse pystyy kuvaamaan ominaisuuksia, kuten merkistöä ja tekstiperustaisten tietovirtojen tavujärjestystä, mutta sisältölajien toimittajat voivat kuvata muitakin ominaisuuksia.

Sisältökohtaisten tuoteominaisuuksien lisääminen

Uudet sisältölajit on usein määritetty aiempien erikoismuotoina. Tämä hierarkia luo suhteen johdetun sisältölajin ja sen peruslajin välille. Lisäosien kehittäjien on huomioitava tämä toteuttaessaan sisältökohtaisia tuoteominaisuuksia. Jos tuoteominaisuus sopii sisältölajiin, tuoteominaisuuden on sovittava myös kaikkiin johdettuihin sisältölajeihin. IContentType.isKindOf(IContentType superType)-metodin avulla voi selvittää, liittyvätkö kaksi IContentType-kohdetta toisiinsa. IContentType.getBaseType()-metodin avulla voit selvittää tietyn IContentType-kohteen peruslajin.