Sisältölajien lisäys

Uuden sisältölajin lisäys

Ympäristö määrittää eräitä keskeisiä sisältölajeja, esimerkiksi tavallisen tekstin ja XML:n. Nämä sisältölajit määritetään samalla tavalla kuin minkä tahansa lisäosan lisäämät sisältölajit. Seuraavaksi tarkastellaan, kuinka ympäristö määrittää eräitä sisältölajeja, jotta sisältölajikehys tulee paremmin ymmärrettäväksi.

Lisäosat määrittävät sisältölajeja lisäämällä laajennuksen laajennuspisteelle org.eclipse.core.runtime.contentTypes. Tässä laajennuksessa lisäosa määrittää sisältölajille yksinkertaisen tunnuksen ja nimen (koko tunnus on aina yksinkertainen tunnus, jonka etuliitteenä on nykyinen nimitila). Seuraavassa katkelmassa on tiivistetty versio org.eclipse.core.runtime.text-sisältölajin lisäyksestä:

	<extension point="org.eclipse.core.runtime.contentTypes">
		<content-type 
			id="text"
			name="%textContentTypeName">
			file-extensions="txt">
			<describer class="org.eclipse.core.internal.content.TextContentDescriber"/>
		</content-type>
		...

file-extensions-määrite määrittää, mitkä tiedostotunnisteet liittyvät sisältölajiin (tässä esimerkissä ".txt"). file-names-määrite (jota ei käytetty tässä tapauksessa) mahdollistaa koko nimien käytön. Ympäristö huomioi kummankin määritteen tunnistaessaan ja kuvatessaan sisältölajia (jos asiakas antaa tiedostonimen).

describer-elementin avulla määritetään sisältölajin sisällön kuvaaja.

Sisällön tunnistus ja kuvaaminen

Sisältölajin on annettava sisällön kuvaaja, jos sisältölajin tiedoissa on tunnistettavissa olevia ominaisuuksia, jotka mahdollistavat sisältölajin automaattisen tunnistuksen, tai muita kiinnostavia ominaisuuksia. Kun kyseessä on org.eclipse.core.runtime.text, sisältölajin tunnistus ei onnistu pelkästään sisältöä tarkastelemalla. Tekstivirtaan voidaan kuitenkin lisätä tavujärjestyksen merkki. Asiakkaat voivat olla kiinnostuneita tästä ominaisuudesta, joten siihen kannattaa käyttää sisällön kuvaajaa.

Kuvaaja on IContentDescriber-kohteen tai ITextContentDescriber-kohteen toteutus. Jälkimmäinen on edellisen erikoistapaus, joka on toteutettava tekstisuuntautuneiden sisältölajien kuvaajien avulla. Sisältölajin luonteesta huolimatta kuvaajalla on kaksi tehtävää: se auttaa selvittämään, onko sen sisältölaji sovelias tietylle tietovirralle, ja noutaa ominaisuuksia tietovirrasta, jonka oletetaan kuuluvan sen sisältölajiin.

Metodia describe(stream, description) kutsutaan aina, kun ympäristö yrittää selvittää tietyn tietovirran sisältölajin tai kuvata sen sisältöä. Kuvaus on null, jos pelkkää tunnistusta on pyydetty. Muutoin kuvaaja yrittää täyttää sisältökuvauksen vain ominaisuuksilla, jotka ovat löytyneet virtaa lukemalla. Sisältölajin merkintöjen avulla on esiteltävä kaikki ominaisuudet, joilla on oletusarvoja (esimerkiksi org.eclipse.core.runtime.xml esittelee UTF-8-merkistön oletusmerkistönä).

Toteuttaessaan tehtäväänsä sisällön kuvaaja oletetaan ajettavan niin nopeasti kuin mahdollista. Mitä vähemmän tietovirtaa on luettava, sitä parempi. Lisäksi oletetaan, että sisällön kuvaajan toteutus esitellään paketissa, joka on vapautettu lisäosan aktivoinnista (katso Eclipse-AutoStart-resurssijoukon manifest-tiedoston ylätunniste). Koska kaikkien kuvaajien ilmentymät luodaan, kun sisältölajikehys alustetaan, tämän edellytyksen huomiotta jättäminen aiheuttaa ennenaikaisen aktivoinnin, mitä on vältettävä. Ympäristön tulevat toteutukset voivat ehkä kieltäytyä kuvaajien ilmentymien luonnista, jos niiden luonti liipaisisi vastaavan lisäosan aktivoinnin.

Aiemmin luodun sisältölajin laajennus

Sisältölajit ovat luonteeltaan hierarkkisia. Näin uuden sisältölajit voivat hyötyä yleisempien sisältölajien määritteistä ja toiminnasta. Esimerkiksi XML-tietojen sisältölaji katsotaan tekstisisältölajin aliobjektiksi:

		<content-type 
	id="xml"
	name="%xmlContentTypeName"
	base-type="org.eclipse.core.runtime.text"
	file-extensions="xml">
	<describer class="org.eclipse.core.internal.content.XMLContentDescriber"/>
	<property name="charset" default="UTF-8"/>
</content-type>

XML-tiedosto katsotaan eräänlaiseksi tekstitiedostoksi, joten kaikki jälkimmäiseen soveltuvat tuoteominaisuudet soveltuvat myös edelliseen.

Huomaa, että XML-sisältölaji ohittaa useat sisältölajimääritteet, jotka on alun perin määritetty tekstisisältölajiin, esimerkiksi tiedostoliitännät ja kuvaajan toteutuksen. Lisäksi tämä sisältölaji esittelee oletusarvoisen ominaisuusarvon charset-ominaisuudelle. Tämä tarkoittaa, että sellaisen tietovirran sisällön kuvauksen aikana, jonka katsotaan kuuluvan XML-sisältölajiin, ympäristö määrittää arvoksi "UTF-8", jos kuvaaja ei täytä charset-ominaisuutta.

Toisena esimerkkinä org.eclipse.ant.core.antBuildFile-sisältölaji (Ant-koontikomentosarjoja varten) laajentaa XML-sisältölajia:

		<content-type  
id="antBuildFile"
name="%antBuildFileContentType.name"
base-type="org.eclipse.core.runtime.xml"
file-names="build.xml"
file-extensions="macrodef,ent,xml">
<describer
class="org.eclipse.ant.internal.core.contentDescriber.AntBuildfileContentDescriber">
</describer>
</content-type>

Huomaa, että charset-ominaisuuden oletusarvo on peritty. On mahdollista peruuttaa peritty ominaisuus tai kuvaaja esittelemällä ne uudelleen käyttäen arvona tyhjää merkkijonoa.

Tiedostojen lisäliitännät

Aiemmin luotuihin sisältölajeihin voi lisätä uusia tiedostoliitäntöjä. Esimerkiksi Resurssit-lisäosa liittää org.eclipse.core.runtime.xml-kohteen ".project"-tiedostoihin:

	<extension point="org.eclipse.core.runtime.contentTypes">
	<file-association content-type="org.eclipse.core.runtime.xml" file-names=".project"/>
	...

Sisältölajien valenimet

Eclipse-ympäristön laajennettavan luonteen vuoksi sisältölaji, jonka varassa lisäosa on, ei ehkä ole käytettävissä kaikissa tuotteen kokoonpanoissa. Tämän voi kiertää käyttämällä sisältölajin valenimeä. Sisältölajin valenimi on jonkin sellaisen muun, ensisijaisen sisältölajin paikanvaraaja, jonka saatavuus ei ole varmaa. Esimerkiksi ajonaikainen osa esittelee valenimen (org.eclipse.core.runtime.properties) Java properties -sisältölajille, jonka Java Development Tooling (org.eclipse.jdt.core.javaProperties) lisää:

<!-- paikanvaraaja tilanteisiin, joissa JDT:n virallinen tyyppi ei ole käytettävissä -->			
<content-type id="properties" name="%propertiesContentTypeName"
base-type="org.eclipse.core.runtime.text"
alias-for="org.eclipse.jdt.core.javaProperties"
file-extensions="properties">
<property name="charset" default="ISO-8859-1"/>
</content-type>

Tämä antaa lisäosille paikanvaraajan, johon ne voivat viitata siitä huolimatta, onko ensisijainen sisältölaji käytettävissä vai ei. Jos se on käytettävissä, valenimisisältölaji ei ole sisältölajiluettelossa ja kaikki viittaukset siihen tulkitaan viittauksiksi kohdesisältölajiin. Jos se ei ole käytettävissä, valenimeä käytetään tavallisena sisältölajina.