\section{Metatietomoduuli (RH, KJ)}
\label{tira}
Metatietomoduuli luo ja ylläpitää oliomallin käytetyistä ontologioista, ontologialuokkien ilmentymistä ja kuvakorteista. 
Moduuli tarjoaa korkeamman tason palveluja ohjelmiston muille osille. 
Ontologioiden hallintajärjestelmänä käytetään Jena-kirjastoa.
Kuvakortit, ontologia ja ontologian luokkien ilmentymät ovat palvelimen levyllä RDF-muodossa. 
Itse kuvatiedostot ovat erillisessä hakemistossa palvelimen levyllä. Näitten välinen suhde on visualisoitu kuvassa \ref{tira2}. 

\begin{figure}
\begin{center}
\includegraphics[width=0.8\textwidth]{kuva_solmu.eps}
\caption{Kuvakortti joka liittyy kolmeen ontologialuokan, ominaisuuksiensa ja ontologian ilmentymien kautta.}
\label{tira2}
\end{center}
\end{figure}

\subsection{Luokat}
\label{tira_mod}
Moduulissa on kahdeksan luokkaa. Moduulin luokkarakenne on kuvattu kuvassa \ref{tira1}.
\begin{figure}
\begin{center}
\includegraphics[width=1.0\textwidth]{TiraAPI.eps}
\caption{UML-kaavio tietokantamoduulista.}
\label{tira1}
\end{center}
\end{figure}

Seuraavaksi on kuvattu metatietomoduulin rajapinnat sekä luokkien keskeiset, rajapinnan toteuttamiseksi 
tarvittavat tietorakenteet.

\subsection{Rajapinta}
\label{tira_api}

Jenaa pyritään hyödyntämään niin paljon kuin mahdollista, jotta uutta koodia jouduttaisiin kirjoittamaan mahdollisimman vähän. 
Kaikki luokat on tarkoitettu myös oliomallin ulkoisen käyttöön, ja siksi erillistä sisäistä rajapintaa ei ole.
Seuraavissa metodeissa ei ole otettu kantaa siihen, toteutetaanko ne suoraan Jenalla vai ohjelmoimalla itse. 
Tästä tehdään lopullinen päätös toteutusvaiheessa, kun Jenaa aletaan hyödyntää ja käyttää täysipainoisesti. 
Vasta tällöin sen puutteet ja sopivuus projektin kannalta selviävät lopullisesti. 

\input{tiraapi_liite.tex}

\subsection{Tiedonhakupolut metatietomoduulissa}
\label{tira_polut}
Tässä luvussa selitetään yleisellä tasolla miten tietyn tiedon haku etenee metatietomoduulissa. Poluilla on hyötyä sekä moduulin käyttöohjeena, tiedon siirtymisen kartoittajina sekä moduulin luokkien rajapintojen puutteiden havaitsijoina.

\subsection*{Kuvan hakeminen koodin perusteella}
\begin{description}
\item
Tarvitaan MuseumModel-olio. 
\item
Kutsutaan MuseumModelin metodia getImage parametrinaan koodi. Metodi palauttaa Image-olion halutusta kuvakortista.
\item
Image-oliolta voidaan pyytää fyysisen kuvansa URL metodilla getPictureURL, joka vaatii parametrikseen kuvan tyyppikoodin.
Tyyppikoodi 0 vastaa aina alkuperäistä kuvamuotoa. Kuvan URL palautetaan java.net.URL-luokan ilmentymänä.
\end{description}

\subsection*{Ontologialuokan hakeminen nimen perusteella}
\begin{description}
\item
Tarvitaan MuseumModel-olio. 
\item
Kutsutaan MuseumModelin metodia getOntologyClass parametrinaan URI, johon sisältyy namespace-tieto. Metodi palauttaa OntologyClass-olion halutusta ontologialuokasta.
\end{description}

\subsection*{Kuvaan liittyvien linkkien hakeminen}
\begin{description}
\item
Tarvitaan halutun kuvan Image-olio.
\item
Haetaan kuvaan liittyvät ominaisuudet päämoduulin getLinksForImage -metodilla.
\item
Metodin palauttaman vektorin alkioina on taulukko jonka ensimmäisessa alkiossa on ominaisuus johon linkki liittyy ja toisessa alkiossa kohdekuvan Image-olio.
\item
Ominaisuuden käyttölaskurin saa kutsumalla ImageProperty-olion getAccessCount-metodia.
\end{description}

\subsection*{HiBrowsen muuttuneen tilan päivitys}
\begin{description}
\item
Tarvitaan MuseumModel-olio sekä fasettijuurien ja faseteissa valittujen solmujen nimet.
\item
Kutsutaan MuseumModelin getOntologyClass-metodia kuten yllä saadaksemme fasettijuurten sekä valittujen solmujen ontologialuokat.
\item
Käytetään jotakin puun läpikäymisalgoritmia ja OntologyClassin getChildren-metodia löytääkseen valittujen solmujen alipuuhun kuuluvat ontologialuokat.
\item
Kutsutaan jokaisen alipuun solmun OntologyClass-olion metodia getInstances saadaksemme alipuun ontologialuokkien ilmentymät.
\item
Kutsutaan MuseumModel-olion getImagesForInstances-metodia parametrinaan Vector-olio jossa on alipuun ontologialuokkien ilmentymät. Metodi palauttaa Vector-olion jossa on siihen alipuuhun kuuluvien kuvien Image-oliot. Tämä tehdään kerran jokaiselle fasetille.
\item
Muodostetaan näitten Image-olioiden leikkaus fasettien suhteen.
\item
Lopuksi jokainen kuva ripustetaan jokaiseen fasettiin etsimällä syntyneestä leikkauksesta jokaisen kuvan jokaista ilmentymä-arvoista ominaisuutta vastaava ilmentymä ja paikallistamalla tämä ilmentymän sijainti fasetissa.
\end{description}

\subsection*{Instansseihin liittyvien kuvien hakeminen}
\begin{description}
\item
Tarvitaan MuseumModel-olio ja yksi tai useampi Instance olio. Lisätään ne Vector-olioon.
\item
Kutsutaan MuseumModel-olion getImagesForInstances-metodia parametrinaan tämä Vector-olio. Metodi palauttaa Vectorin jossa on annettuihin instansseihin liittyvät Image-oliot.
\end{description}

\subsection*{Kuvan etäisyysarvon hakeminen}
\begin{description}
\item
Tarvitaan MuseumModel-olio, Image-olio kuvasta jolle etäisyys pitää hakea ja HiBrowsen tila, johon sisältyy fasettijuurien ja valittujen solmujen OntologyClass-oliot kahdessa Vector-oliossa.
\item
Kutsutaan MuseumModel-olion getImageDistance-metodia parametrinaan kuvan Image-olio, ja HiBrowsen tilan määrittävät Vector-oliot.
\item
Metodi palauttaa Integer-olion jonka arvo on se määrä ylöspäisiirtoja joita HiBrowsessa tarvitaan jotta kuva sisältyisi HiBrowsen suodatukseen.
\end{description}

\subsection*{Laskureiden käyttö}
\begin{description}
\item
Image-, ImageProperty-, OntologyClass- ja Instance-olioiden laskurin arvio lisätään olion addCount-metodilla.
\item
Olioiden laskurin arvot luetaan kutsumalla olioden getAccessCount-metodia.
\end{description}
