Semantic Web - Metadata Editor
|
|
|
- Tapio Lehtilä
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 Semantic Web - Metadata Editor Ohjelmistotuotantoprojekti Ohjelmistotuotantoryhmä 1, Meedio Mikko Apiola (M.A) Ari Inkovaara (A.I) Miikka Junnila (M.J) Justus Karekallas (J.K) Pekko Parikka (P.P) Helsinki 30. elokuuta 2002 Esimerkki dokumentti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
2 i Versiohistoria Versio Päivämäärä Laatija Komentti Pekko Parikka Dokumentin runko Ari Inkovaara Dokumentin koostaminen ja oikoluku Justus Karekallas oikoluku Ari Inkovaara Valmis dokumentti
3 Sisältö ii 1 Johdanto (P.P.) Ohjelmiston kuvaus Tärkeimmät vaatimukset Järjestelmän yleiskuvaus (P.P.) Hakemistorakenne Käyttöliittymä Ohjain RDF-käsittelijä XML-käsittelijä Tiedostonkäsittelijä Ohjain (M.A.) MDEController XML-käsittelijä (A.I.) XMLHandler XMLElement RDF-käsittelijä (M.A.) MDEClass MDEProperty MDEOntologyHandler MDEInstanceHandler MDEQueryHandler Siirrettävyys Tiedostonkäsittelijä (J.K.) MDEFileHandler
4 iii 6.2 MDEXmlCardIdentifier MDEJoint MDEXmlFile XMLFileHandler (A.I) MDEJointFile Käyttöliittymämoduuli (M.J.) FilesAndCardsJSP InstanceCardJSP newfilejsp deletefilejsp CardState Käyttöliittymän käyttämät beanit RDFElementBean DynlistElement StringBean XmlCardIdentifier Tagikirjasto Meedio FileIteratorTag CardIteratorTag RDFElementIteratorTag OntologyIteratorTag SetCardStateTag Jatkokehittelymahdollisuudet Multirange - eli monen rangen propertyt Instanssien nimeäminen järkevämmin kuin sen URIn perusteella Kortin otsikon liittäminen sen id:n ohelle RDF:n tallentaminen suoraan tietokantaan
5 iv 8.5 Hakuominaisuuksien monipuolistaminen Tietokantahakujen monipuolistaminen Luokkien ja xml-arvojen sitominen toisiinsa Uusien skriptien lisääminen käyttöliittymään CSS-tiedoston tekeminen Luokkien pathin näyttäminen XML-tietojen näyttäminen Viittaukset lähteisiin (P.P.) 57
6 1 1 Johdanto (P.P.) Tässä dokumentissa kuvataan Helsingin yliopiston tietojenkäsittelytieteen laitoksella ohjelmistotuotantoprojektissa Meedio ryhmän tekemän ohjelmiston toteutus. Tämä dokumentti kuvaa järjestelmän toiminnan pääpiirteissään. Tärkeimpiä yksityiskohtia on myös kuvattu. Dokumentti on tarkoitettu helpottamaan lähdekoodin ymmärtämistä. Meedio ryhmän jäsenet ovat Mikko Apiola, Ari Inkovaara, Miikka Junnila, Justus Karekallas ja Pekko Parikka. 1.1 Ohjelmiston kuvaus Meedio on metadataeditori, eli instanssieditori, jolla luodaan Resource Description Framework [RDF] -tyyppistä metatietoa Extensible Markup Language [XML] -tiedon pohjalta. Ohjelmalla luetaan tietokannasta tuotettua XML-tietoa, joka kuvaa esine- tai kuvakortteja, ja luodaan korteista RDF-skeeman [RDF(S)] -tyyppisen ontologian mukaisia ilmentymiä eli instansseja. Ohjelma on tarkoitettu Finnish Museum Online [FMO] projektin käyttöön museoiden esineiden luokittelemiseen. Ensimmäiseksi ohjelman on tarkoitus tulla Kansallismuseon käyttöön. Ohjelmisto on toteutettu Java-kielellä käyttäen Jakartan Tomcat-palvelinympäristöä ja se toimii sekä Linux- että Windows-käyttöjärjestelmissä. 1.2 Tärkeimmät vaatimukset Ohjelman tarkoitus on helpottaa museotyöntekijöitä tietokantojen esinekuvausten luokittelemisessa. Projektin tavoite on toimiva ja laadukas ohjelmisto vähintään perustoiminnoilla toteutettuna. Ohjelman on pystyttävä lukemaan RDF(S)- muotoisia ontologioita ja tuottamaan niiden mukaisia ilmentymiä, RDF-muotoisia semanttisia luokitteluita. Ohjelman on oltava mahdollisimman geneerinen, eli sen on kyettävä toimimaan erilaisilla ontologioilla ja XML-skeemoilla. Ohjelman käyttöliittymän on myös oltava helposti muokattavissa ja vaihdettavissa.
7 2 2 Järjestelmän yleiskuvaus (P.P.) Meedio-ohjelmisto on jaettu viiteen osioon: Käyttöliittymään, Ohjaimeen, RDFkäsittelijään, XML-käsittelijään sekä tiedostonkäsittelijään. Kuvassa 1 esitetään kaikki osajärjestelmät ja niiden keskinäiset viittaukset. Meedio ohjelmisto noudattaa asiakas-palvelin mallin kaltaista suunnittelumallia, jossa käyttöliittymä toimii asiakkaana pyytäen ohjaimelta palveluja. Tämän lisäksi ohjelmiston palvelinpuoli jakautuu kahteen tasoon, joista ylempänä on ohjain ja sen alla muut osajärjestelmät. Käyttöliittymä kutsuu vain ohjaimen palveluja. Näin käyttöliittymä on helposti vaihdettavissa. Käyttöliittymä on toteutettu Java- Server Pages Standard Tag Library [JSTL] -tekniikalla. Valitun tekniikan ansiosta käyttöliittymän ulkoasua on melko helppo muokata. Koska Meedio-ohjelmiston rakenne muistuttaa asiakas palvelin -mallia, on ohjelmisto melko helposti muokattavissa sellaiseksi, että palvelinosiota käyttää yhtä aikaa monta käyttöliittymää. Tätä varten tarvitsee vain toteuttaa ohjaimen ja käyttöliittymän väliin palvelupyyntöjä käsittelevä moduuli, joka huolehtii palvelupyyntöjen jonottamisesta. Kuva 1: Järjestelmän yleisrakenne
8 3 2.1 Hakemistorakenne Järjestelmän hakemistorakenne on kuvattu taulukossa 1. Tiedoston nimi Tiedoston käyttö classes/ui/tags Hakemisto, johon käännetyt luokat sijoitetaan systemfiles/ Hakemisto, jossa on kaikki ohjelman käyttämät tiedostot systemfiles/mdedata/ Hakemisto, jossa on konfiguraatiotiedosto, liitokset määrittelevä tiedosto, viimeisen käsitellyn tiedoston nimi systemfiles/identifiers Hakemisto, jossa on kaikkien avoinna olevien tiedostojen tilatiedot sarjallistettuina XmlCardIdentifier-taulukko-olioina. Tiedostojen pääte on.xci systemfiles/rdffiles Hakemisto, jossa on kaikki ohjelman käsittelyssä olevat RDF-tiedostot systemfiles/xmlfiles Hakemisto, jossa on kaikki ohjelman käsittelyssä olevat XML-tiedostot index.html Käyttöliittymän käynnistävä html-sivu configuration.mde Ohjelman konfiguraatiotiedosto lastfile Edellisen avatun tiedoston nimi sarjallistettuna String-oliona liitokset.mde Liitokset XML-elementtien ja RDF(S)-luokkien välillä Taulukko 1: Järjestelmän hakemistorakenne 2.2 Käyttöliittymä Käyttöliittymä on toteutettu Tomcat-webpalvelimen päälle ja sitä käytetään internetselaimella. Käyttöliittymä on toteutettu Hypertext Markup Languagella [HTML]
9 4 ja siinä on käytetty hyväksi Javascriptiä. Käyttöliittymä kutsuu pelkästään ohjaimen palveluja ja on siksi erittäin helposti korvattavissa uudella. Koska käyttöliittymän piirtäminen on toteutettu JSTL-tekniikalla, on sen ulkoasu melko helposti muutettavissa. Tarkempi kuvaus käyttöliittymästä on luvussa Ohjain Ohjain tarjoaa korkeamman tason rajapinnan käyttöliittymälle kaikkiin ohjelman tarjoamiin palveluihin. Ohjain käyttää RDF-käsittelijää, XML-käsittelijää sekä tiedostonkäsittelijää. Myös muut osat järjestelmää, kuin käyttöliittymä, käyttävät ohjaimen tarjoamia palveluja. Ajatuksena on, että kaikki osajärjestelmien välinen kommunikointi tapahtuu ohjaimen kautta. Ohjain toimii eräänlaisena palvelimena käyttöliittymälle. Jos ohjelman toimintaa halutaan muuttaa, voidaan muuttaa pelkästään ohjainta. Myös minkä tahansa ohjaimen alla olevan osion voi vaihtaa ilman, että käyttöliittymälle tarvitsee tehdä mitään muutoksia. Ohjaimen tarkempi kuvaus on luvussa RDF-käsittelijä RDF-käsittelijä hoitaa kaiken RDF:n ja RDF-skeemojen käsittelyn. RDF-käsittelijän avulla selataan ontologiaa, luodaan uusia instansseja ja kirjoitetaan ne levylle sekä tehdään instanssikyselyjä verkon yli instanssikantaan. RDF-käsittelijän toteutuksessa on käytetty Jena-rajapintaa. RDF-käsittelijä on muutettavissa käyttämään mitä tahansa muuta rajapintaa kuin Jena-rajapintaa, toteuttamalla Meedioohjelmiston käyttämät rajapinnat RDFOntologyHandler, RDFInstanceHandler ja RDFQueryHandler. RDF-käsittelijä käyttää tiedon välitykseen luokkia MDEClass ja MDEProperty, jotka kuvaavat ontologian luokan ja ominaisuuden eli propertyn. Tarkempi kuvaus RDF-käsittelijästä on luvussa 5.
10 5 2.5 XML-käsittelijä XML-käsittelijä hoitaa XML:n validoinnin XML-skeemaa vasten ja XML:n parsinnan. Kun ohjelmassa avataan uusi tiedosto käyttöön, se validoidaan konfiguraatiotiedostossa määriteltyä XML-skeemaa vasten. Jos luettu XML-tiedosto ei ole validia, niin siitä aiheutuu poikkeus eikä tiedostoa avata. Kun avatusta tiedostosta valitaan jokin XML-kortti käsiteltäväksi, niin se annetaan parsittavaksi XML-käsittelijälle. XML-käsittelijän tarkempi kuvaus on luvussa Tiedostonkäsittelijä Tiedostonkäsittelijä hoitelee kaiken levyltä lukemisen ja kirjoittamisen, paitsi RDF:n kirjoittamisen tiedostoon, jonka RDF-käsittelijä tekee. Tiedostonkäsittelijä kopioi uudet XML-tiedostot järjestelmän käyttöön, luo niille vastaavan RDF-tiedoston, johon instanssit kirjoitetaan RDF-käsittelijän toimesta, tiedostonkäsittelijä lukee uudet tiedostot läpi ja luo niistä tietorakenteen, jossa on tiedoston sisältämien korttien ID:t, otsikot ja tilatiedot (käsittelemätön / valmis). Tiedostonkäsittelijä tallentaa viimeksi käsitellyn tiedoston nimen ja se myös poistaa järjestelmästä käsittelyssä olevia tiedostoja. Tarkempi kuvaus tiedostonkäsittelijästä on luvussa 6. 3 Ohjain (M.A.) Ohjaimeen kuuluu yksi luokka, jonka välityksellä käyttöliittymämoduli kommunikoi järjestelmän muiden osioiden kanssa. Tämän luokan nimi on MDEController. Kaiken toiminnan keskittäminen ohjaimen hallintaan mahdollistaa käyttöliittymän vaihtamisen järjestelmään mahdollisimman vaivattomasti. Kommunikointi käyttöliittymän ja ohjaimen välillä noudattaa suurin piirtein asiakaspalvelin-mallin mukaista rakennetta. Järjestelmä on siis helposti muutettavissa myös niin, että käyttöliittymä kutsuu ohjainta tietoliikenneyhteyden yli.
11 6 3.1 MDEController Luokan tarkoitus on toimia järjestelmässä muiden osioiden ohjaimena. Ohjaimen kutsumisesta vastaa pääasiassa käyttöliittymä. Muuttujat private final String CARD_START="card_start_attribute" Määrittelee konfiguraatiotiedoston kohdan, josta kortin aloittava merkkijono luetaan. private final String CARD_ID="card_id_attribute" Määrittelee konfiguraatiotiedoston kohdan, josta kortin id:n määrittävä tieto luetaan. private final String DB_ID_CLASS="db_id_class" Määrittelee konfiguraatiotiedoston kohdan, josta DBIDCLASS-muuttujaan luetaan arvo. private final String DB_ID_PROPERTY="db_id_property" Määrittelee konfiguraatiotiedoston kohdan, josta DBIDPROPERTY-muuttujaan luetaan arvo. private final String MUSEUM_ID="museum_id" Määrittelee konfiguraatiotiedoston kohdan, josta museon identifioiva merkkijono luetaan. private final String CARD_HEADER="card_header_attribute" Määrittelee konfiguraatiotiedoston kohdan, josta kortin header-tiedon määrittävä merkkijono luetaan. private final String XML_SKEEMA="xml-schema" Määrittelee konfiguraatiotiedoston kohdan, josta xml-skeeman nimen määrittävä merkkijono luetaan. private final String CSTART, CID, CHEADER, DBIDCLASS, DBIDPROPERTY, MUSEUMID Näihin muuttujiin konstruktori lukee arvot. CS- TART:n luetaan kortin aloittavan kentän määrittävä merkkijono. CID:n luetaan kortin ID:n määrittävä merkkijono. CHEADER:n luetaan kortin header:n määrittävä merkkijono. DBIDCLASS:n luetaan tarvittava merkkijono. DBIDPROPERTY:n luetaan tarvittava merkkijono. MUSEUMID:n luetaan museon identifioiva merkkijono. private MDEOntologyHandler rdfoh Viittaus ontologiakäsittelijään.
12 7 private MDEInstanceHandler rdfih Viittaus instanssikäsittelijään. private MDEQueryHandler rdfqh Viittaus instanssikyselykäsittelijään. private MDEFileHandler mdefh Viittaus tiedostonkäsittelijään. private MDEXmlFile mdexf Viittaus xml-tiedostoon (MDEXmlFile-luokka). private XMLHandler xmlh; Viittaus XML-käsittelijään. Konstruktorit Luokassa on yksi konstruktori, jossa tarvittavat muuttujat alustetaan konfiguraatiotiedostosta luetuilla tiedoilla. public MDEController() throws MDEException Metodit Tässä kuvataan luokan metodit. Suunnitteludokumentissa määritellyt metodit: public MDEController() public String [ ] getfilenames( String subdirectory ) public String [ ] getfilesinprocess() public String [ ] [ ] OpenXMLFile(String filename) public String [ ] [ ] OpenLastXMLFile() public LinkedList openxmlcard(string ID, MDEClass m) public boolean createinstance( MDEClass m )
13 8 public Vector getrootclassuris() public Vector getsubclassuris( String classuri ) public Vector getsuperclassuris(string classuri) public MDEClass getclass (String classname) public Vector doinstancequery (MDEClass m) public boolean addjoint(string key, String _class, String predicate) public MDEJoint getjoint(string key) public boolean deletejoint(string key) public boolean saverdffile(string filename) public boolean erasecurrentxmlfile(string filename) public String getcfgitem(string key) Toteutetut metodit: public String[ ] getfilenames(string subdirectory) throws MDEException Palauttaa parametrina annetusta polusta XML-tiedostonimet. public String[ ] getfilesinprocess() Palauttaa järjestelmän käsittelyssä olevien XMLtiedostojen nimet. public XmlCardIdentifier[ ] openxmlfile(string filename) throws MDEException Avaa halutun nimisen XML-tiedoston ja palauttaa listan, joka sisältää avatun XML-tiedoston korttien ID-tiedot, käsittelyvaiheet ja otsikkotiedot. Jos parametrinä annettu tiedosto ei vielä ole järjestelmän käytössä, kopioidaan se ensin järjestelmän käyttöön ja luodaan sitä vastaava tyhjä RDF-tiedosto. Tämän jälkeen palautetaan lista korttien tiedoista. public XmlCardIdentifier[ ] OpenLastXMLFile() throws MDEException Avaa viimeksi käsitellyn XML-tiedoston. Palauttaa listan joka sisältää avatun XMLtiedoston korttien ID-tiedot, käsittelyvaiheet sekä otsikkotiedot
14 9 public LinkedList openxmlcard(string ID, MDEClass m) throws MDEException Avaa halutun XML-kortin, palauttaa kortin tiedot XMLElement-olioista koostuvana linkitettynä listarakenteena sekä viiteparametrin arvona tiedot kortin ID:tä vastaavasta RDF-instanssista, jos sellainen löytyy. public void createinstance( MDEClass m, String ID ) throws MDEException Luo ilmentymän kortin semanttisesta luokituksesta. Parametrinä MDEClass-olio, josta generoidaan RDF RDFInstanceHandlerin avulla ja kortin ID, joka tarvitaan Uniform Resource Identifiers:n [URI] generoimiseen. public Vector getrootclassuris() Palauttaa ontologiasta kaikki juuriluokkien URIt. Paluuarvona String-olioita sisältävä Vector-olio. Toiminta: kutsuu RDFkäsittelijän getrootclassnames()-metodia, ja palauttaa sen paluuarvon kutsujalle. public Vector getsubclassuris( String classuri ) Palauttaa halutun luokan aliluokkien URIt String-olioista koostuvana Vectorina. Toiminta: kutsuu RDFkäsittelijän getsubclassnames()-metodia, ja palauttaa sen paluuarvon kutsujalle public Vector getsuperclassuris(string classuri) Palauttaa luokan yliluokkien nimet.toiminta: kutsuu RDF-käsittelijän getsuperclassnames()-metodia, ja palauttaa sen paluuarvon kutsujalle. public MDEClass getclass (String classuri) throws MDEException Palauttaa halutun luokan MDEClass-oliona, joka sisältää kaikki luokan ominaisuudet. Toiminta: kutsuu RDF-käsittelijän getclass()-metodia, ja palauttaa sen paluuarvon kutsujalle public Vector doinstancequery (MDEClass m) throws MDEException Suorittaa instanssikyselyn parametrinään MDEClass-olio. Toiminta: kutsuu RDF-instanssikäsittelijän doinstancequery()-metodia, ja palauttaa sen paluuarvon kutsujalle public String getelement(string class_, String property) throws MDEException Palauttaa luokan URIin ja luokan propertyn URIin liitetyn elementin. public boolean addjoint(string key, String _class, String predicate) throws MDEException Lisää liitosparin, parametreinä 3 arvoa: key, joka on xmlkenttä joka liitetään, sekä Class, eli domainluokan URI ja predikaatti, joihin
15 10 kahteen avainarvo liitetään. Avainarvo liitetään siis aina kahteen arvoon: Luokkaan ja johonkin siihen liittyvään propertyyn. Property on siis predikaatti, esim. hasname, joka annetaan parametrinä URIna. public MDEJoint getjoint(string key) throws MDEException Hakee liitosta avaimella. Palauttaa MDEJoint:n joka sisältää domainclass URI + propertyn URI eli predikaatti. public boolean deletejoint(string key) Poistaa liitoksen. public boolean saverdffile(string pathname) throws MDEException Tallentaa käsittelyssä olevasta XML-tiedostosta luodut instanssit sisältävän RDF-tiedoston haluttuun sijaintiin. public boolean erasecurrentxmlfile(string filename) throws MDEException Poistaa halutun käsittelyssä olevan XML- ja RDF-tiedoston levyjärjestelmästä. Metodi poistaa vain ohjelman käsittelyssä olevia tiedostoja. Jos parametrinä antaa XML-tiedoston nimen, niin ohjelma poistaa automaattisesti sitä vastaavan RDF-tiedostonkin levyjärjestelmästä. public String getconfigitem( String key) Palauttaa halutun tiedon konfiguraatiotiedostosta. Kutsuu tiedostonkäsittelijän konfiguraatiotiedoston käsittelystä vastaavaa metodia. Tietorakenteet Luokassa käytetään Javan tietorakenneluokkia HashMap ja Vector. 4 XML-käsittelijä (A.I.) XML-käsittelijän tehtävänä on validoida annettu XML-ilmentymä annettua XML- Skeemaa vasten ja tuottaa annetusta XML-kortista XMLElement-olioita.
16 XMLHandler Luokan tehtävänä on validoida annettu XML-ilmentymä annettua XML-Skeemaa vasten ja tuottaa annetusta XML-kortista XMLElement-olioita. XML:n parsinnassa ja validoinnissa käytetään Apachen Xerxcesin Simple API For XML [SAX] - rajapintaa. Muuttujat LinkedList elements lista XMLElement-olioita String xml Käsiteltävä XML-Skeeman ilmentymä String schemauri XML-Skeeman URI String xmlfile XML-tiedoston osoite String cardelement XML-kortin alku / loppu tagi String cardheaderattribute XML-kortin otsikon kertovan attribuutin nimi String fieldheaderattribute Yksittäisen XML-kortin elementin nimen kertovan attribuutin nimi String cardheader XML-kortin otsikko boolean output Ollaanko XML-kortin sisällä. boolean processingelement onko SAX-parseri parhaillaan elementin sisällä vai ulkona boolean validating Onko validointi käynnissä, jos ei käsitellään XML-korttia boolean valid Onko XML-Skeeman ilmentymä validi XMLElement element Parsittava elementti. Konstruktorit XMLHandler(MDEController controller) parametrina MDEController-olio
17 12 Metodit void setxmlinstance(string xml) Asettaa validoitavan XML-skeeman instanssin. void setxmlschema(string uri) Asettaa validointiin käytettävän XML-skeeman osoitteen void parse() Käynnistää yksittäisen XML-kortin prosessoinin. void setxmlfile(string uri) Asettaa validoitavan XML-tiedoston osoitteen. void validate() Validoi XML-tiedoston annettua XML-skeemaa vasten. LinkedList getelements() Palauttaa listan XMLElement-olioita. String getheader() Palauttaa XML-kortin otsikon. Lisäksi luokassa on muutama SAX-parserin kutsuma metodi, joita ei tässä esitetä. 4.2 XMLElement XMLElement-luokka säilöö yksittäisen XML-elementin tietoja. Muuttujat String name String elementin nimi String value String elementin arvo String header String elementin otsikko HashMap attributes name, value -pari elementin attribuuteista Konstruktorit XMLElement(String name) parametrina elementin nimi
18 13 Metodit String getname() palauttaa elementin nimen void setvalue(string value) asettaa elementin arvon String getvalue() palauttaa elementin arvon void setheader(string header) asettaa elementin otsikon String getheader() palauttaa elementin otsikon void setattribute(string name, String value) asettaa elementille attribuutin ja sille arvon. HashMap getattributes() palauttaa HashMap:in elementin attribuutteja. String name, String value -pareina. 5 RDF-käsittelijä (M.A.) RDF-käsittelijän tehtävänä on käsitellä RDF(s)-muotoista ontologiaa ja tuottaa sen mukaista RDF- tietoa. RDF-käsittelijä tarjoaa toiminnot joilla saadaan järjestelmän tarvitsemat tiedot ontologiasta esille, toiminnot RDF-instanssien käsittelyyn sekä instanssikyselyn tekemiselle RDF-tietokantaan. RDF-käsittelijä koostuu seuraavista luokista, joiden suhteet käyvät ilmi kuvasta 2: MDEOntology- Handler (vastaa RDF(s)-muotoisen ontologian käsittelystä), MDEInstanceHandler (vastaa instanssien käsittelystä), MDEQueryHandler (vastaa instanssikyselyn tekemisestä rdf-tietokantaan), MDEClass (pitää sisällään tiedot yhdestä RDFluokasta), MDEProperty (pitää sisällään tiedot yhdestä RDF-luokan ominaisuudesta). 5.1 MDEClass Luokan tarkoitus on säilyttää tietoa yksittäisestä RDF-luokasta (ja siitä luotavasta instanssista).
19 14 Kuva 2: RDF-käsittelijän rakenne Muuttujat private String classuri Muuttuja sisältää luokan URI:n. private String selfuri Muuttuja sisältää luokasta luodun/luotavan instanssin URI:n. private Vector propertylist Muuttuja sisältää MDEProperty-olioista koostuvan
20 15 Vector-taulukon Konstruktorit Luokassa on yksi konstruktori, joka saa ensimmäisenä parametrinaan luokkau- RI:n ja toisena MDEProperty-olioita sisältävän Vector-taulukon. public MDEClass(String _classuri, Vector properties) throws MDEException Metodit Seuraavaksi esitellään luokan metodit. Suunnitteludokumentin mukaiset metodit: public String getclassname() Palauttaa luokan nimen, eli URI pätkäistynä "#- merkin kohdalta, palauttaa null:n, jos #-merkkiä ei löydy. public String getclassuri() Palauttaa luokan URI:n public Vector getproperties() Palauttaa luokan propertyt MDEProperty:istä koostuvana Vector:na. Seuraavat metodit on lisätty toteutusvaiheessa: public void setclassuri(string _classuri) Asettaa luokan URI:n. public void setproperties(vector props) Asettaa luokan ominaisuudet. public String getselfuri() Palauttaa luokasta luotavan/luodun instanssin URI:n. public void setselfuri( String URI ) Asettaa luokasta luotavan instanssin URI:n. public void replace( MDEClass m) Korvaa luokan muuttujien arvon parametrina annettavan MDEClass-olion arvoilla.
21 16 Tietorakenteet Ainoat luokassa käytettävät tietorakenteet ovat Java:n Vector-taulukot ja Stringoliot. 5.2 MDEProperty MDEProperty-luokan tarkoitus on säilyttää tietoa yksittäisestä RDF-luokan ominaisuudesta. Luokkaa käytetään tiedonvälitykseen järjestelmän RDF-osion, ohjaimen ja käyttöliittymän välillä. Järjestelmä varastoi MDEProperty-luokan olioita MDEClass-luokan properties-vektoriin. Muuttujat private String domain Domain-luokan URI, eli tieto siitä mihin luokkaan kyseinen ominaisuus kuuluu. private String name Sisältää ominaisuuden nimen, eli URI:n josta on katkaistu namespace-osa pois. private String URI Ominaisuuden URI. private Vector range String-olioita sisältävä Vectori, joka sisältää ominaisuuden sallimat arvot. private String literalvalue Ominaisuudelle asetettu literaaliarvo. private MDEClass instancevalue Ominaisuudelle asetettu instanssiarvo. private String classvalueuri Ominaisuudelle asetettu luokka-arvo. Konstruktorit Luokassa on yksi konstruktori, joka saa parametrinaan domain-luokan nimen, ominaisuuden URI:n ja sallitut arvot sisältävän range-vectorin.
22 17 public MDEProperty(String _domain, String _URI, Vector _range) throws MDEException Metodit Suunnitteludokumentissa suunnitellut luokan metodit: public String getdomain() public String getname() public String geturi() public Vector getrange() public String getliteralvalue() public MDEClass getclassvalue() public void setliteralvalue(string value) public void setclassvalue(mdeclass value) Toteutetut metodit: public String getdomain() Palauttaa ominaisuuden domainluokan URI:n. Palauttaa siis luokkamuuttujan domain arvon. public String getname() Palauttaa ominaisuuden nimen. Palauttaa siis luokkamuuttujan name arvon. public String geturi() Palauttaa ominaisuuden URI:n. Palauttaa siis luokkamuuttujan URI arvon. public Vector getrange() Palauttaa ominaisuuden sallimien arvojen Vector-taulukon. Palauttaa siis luokkamuuttujan range.
23 18 public String getliteralvalue() Palauttaa ominaisuudelle asetetun literaaliarvon. Palauttaa luokkamuuttujan literalvalue. public MDEClass getinstancevalue() Palauttaa ominaisuudelle asetetun instanssiarvon. Palauttaa luokkamuuttujan instancevalue arvon. public void setliteralvalue(string value) throws MDEException Asettaa ominaisuudelle literaaliarvon. Asettaa luokkamuuttujan literalvalue arvon parametrina annetuksi arvoksi. public void setinstancevalue(mdeclass value) throws MDEException Asettaa ominaisuudelle instanssiarvon. Asettaa luokkamuuttujan instancevalue arvon parametrina annetuksi arvoksi. public void setclassvalueuri( String _uri) Asettaa ominaisuudelle luokka-arvon. Asettaa luokkamuuttujan classvalueuri arvoksi parametrina annetun arvon. public String getclassvalueuri() Palauttaa ominaisuudelle asetetun luokka-arvon. Palauttaa siis luokkamuuttujan classvalueuri arvon. Tietorakenteet Luokassa käsitellään Javan Vector-taulukoita ja String:ejä. Muita tietorakenteita luokassa ei käytetä. 5.3 MDEOntologyHandler MDEOntologyHandler-luokka toteuttaa RDFOntologyHandler-rajapintaluokan, ja vastaa RDF(S)-muotoisen ontologian lukemisesta. Järjestelmässä MDEControllerluokka kutsuu MDEOntologyHandler-luokan metodeja saadakseen tietoja ontologiasta.
24 19 Muuttujat private Model model Jena-oliomalliin kuuluva Model-luokan ilmentymä, johon ontologia luetaan. private HashMap classmap Hajautustaulu, jossa avaimena on luokan URI, ja arvona Vector-taulukko, joka sisältää kyseisen URI:n aliluokat ontologiassa. private HashMap rangemap Hajautustaulu, jossa avaimena on ominaisuuden URI, ja arvona Vector-taulukko, joka sisältää ominaisuudelle sallitut arvot. private HashMap domainmap Hajautustaulu, jossa avaimena on ominaisuuden URI, ja arvona Vector-taulukko, joka sisältää ominaisuuteen liittyvät kantaluokat. private HashMap superclassmap Hajautustaulu, jossa avaimena on luokan URI, ja arvona Vector-taulukko, joka sisältää kyseistä URI:a vastaavat yliluokat ontologiassa. private String ontologyname Ontologiatiedoston nimi. Konstruktorit Luokassa on yksi konstruktori, jossa luetaan RDF(s)- muotoinen ontologia ensin Jena:n Model-luokan ilmentymään. Tämän ilmentymän kaikki lausekkeet käydään läpi ja muodostetaan niiden perusteella luokan sisäiset hajautusrakenteet (classmap, rangemap,domainmap sekä superclassmap. Konstruktori aiheuttaa MDEException-poikkeuksen tapauksessa, jossa parametrina annettu RDF(s)-muotoisen ontologian nimi on virheellinen, tai RDF(s)-tiedosto on väärän muotoinen tai sitä ei saada esim. puutteellisten levyjärjestelmän oikeuksien vuoksi auki. public MDEOntologyHandler( String ontologyfilename ) throws MDEException
25 20 Metodit Tässä kuvataan luokan metodit. Suunnitteludokumentissa määritellyt metodit: public RDFOntologyHandler( String ontologyfilename ) RDFOntologyHandler( String ontologyfilename ) public Vector getsubclassuris( String classname ) public Vector getsubclassuris( MDEClass c ) public Vector getsuperclassuris(string classuri) public MDEClass getclass ( String classname ) Toteutetut metodit: public Vector getrootclassuris() Palauttaa ontologian juuriluokkien nimet Stringolioista koostuvana Vector-taulukkona. Hakee luokan sisäisestä luokat sisältävästä hajautusrakenteesta (classmap) RDF-määritelmän mukaisen yliluokan aliluokat kutsumalla getsubclasses()- funktiota parametrilla "..#Resource". public Vector getsubclassuris( String URI ) Palauttaa ontologiasta halutun luokan aliluokkien nimet String-olioista koostuvana Vector-taulukkona. Aliluokkien nimet löytyvät hajautusrakenteesta classname-avaimen takaa. public Vector getsubclassuris( MDEClass c ) Sama kuin edellinen, mutta ottaa parametrinaan MDEClass-olion. public Vector getsuperclassuris(string URI) Palauttaa luokan yliluokkien nimet. Yliluokkien nimet löytyvät superclassmap-hajautustaulusta. public MDEClass getclass ( String URI ) throws MDEException Palauttaa halutun luokan MDEClass-oliona, joka sisältää luokan ominaisuudet (Properties). Toimii siten, että hajautusrakenteesta domainmap haetaan parametrin
26 21 nimeä vastaava domain:it sisältävä Vector-taulukko. Tämä taulukko käydään läpi hakien jokaista alkiota vastaava range-tieto Vectoriin. Näistä tiedoista muodostetaan MDEProperty-olioita, jotka liitetään palautettavaan MDEClass-olioon. public Vector getrange( String URI ) Palauttaa ominaisuuden sallimat arvot, eli rangen vector-taulukkona. Palauttaa siis luokkamuuttujan range arvon. private void getallsuperclassproperties(string URI, Vector results, HashMap h) throws MDEException Tätä metodia käytetään apuna getclass:ssa. Palauttaa luokan yliluokkien ja niiden yliluokkien propertyt. Parametrina kuljetettava HashMap on duplikaattien poistoa varten, eikä metodin kutsuja tarvitse sitä. Tietorakenteet Luokassa käytetään Javan tietorakenneluokkia HashMap ja Vector. Lisäksi käytetään jena-oliomallin Model-tietorakennetta. 5.4 MDEInstanceHandler MDEInstanceHandler-luokka toteuttaa RDFInstanceHandler-rajapintaluokan, ja vastaa RDF-instansseja sisältävän tiedoston käsittelystä. Järjestelmässä MDEControllorluokka kutsuu MDEInstanceHandler-luokan metodeja halutessaan lukea, tai kirjoittaa RDF-instansseja. Muuttujat Tässä kuvataan MDEInstanceHandler-luokan muuttujat. private Model model Jena-oliomallin Model-luokan ilmentymä, jota luokka käsittelee.
27 22 private String instancefilename Instanssitiedoston nimi. private MDEOntologyHandler ontologyhandler Luokassa tarvitaan tietoja ontologiasta, jotka saadaan tämän viitteen kautta. private MDEQueryHandler queryhandler Luokassa tarvitaan tietoja rdf-tietokannasta. queryhandler Vastaa kyselyistä rdf-tietokantaan. private String museum_id Museon yksilöivä merkkijono. Tämä liitetään uusien instanssien URI:n. private long instancecounter Luotavien instanssien URI:in lisättävä laskuri. Konstruktorit Luokassa on yksi konstruktori, jossa luetaan RDF- muotoinen instanssitiedosto Jena:n Model-luokan ilmentymään ja asetetaan luokan tarvitsemat muuttujat kohdalleen. Konstruktori aiheuttaa MDEException-poikkeuksen tapauksessa, jossa parametrina annettu RDF-muotoisen instanssitiedoston nimi on virheellinen, tai RDF-tiedosto on väärän muotoinen tai sitä ei saada esim. puutteellisten levyjärjestelmän oikeuksien vuoksi auki. public MDEInstanceHandler ( String _instancefilename, MDEOntologyHandler mdeo, MDEQueryHandler mdeq, String _museum_id) throws MDEException Metodit Tässä kuvataan MDEInstanceHandler-luokan metodit. Suunnitteludokumentissa määritellyt metodit: public RDFInstanceHandler ( String _instancefilename ) public void addinstance( MDEClass m ) public MDEClass getinstance( String URI )
28 23 public void replaceinstance( String URI, MDEClass m ) public void write() Toteutetut metodit: private boolean addinstance( MDEClass m, String ID) throws MDEException Luo parametrina annetun MDEClass-olion perusteella ilmentymän luokasta Jenan model-malliin. private boolean addinstance( MDEClass m) throws MDEException Vastaava, kuin edellinen, muttei generoi URI:a. Tämä on replaceinstance-metodia varten. public MDEClass getinstance( String URI ) throws MDEException Palauttaa halutun instanssin MDEClass-oliona. public void replaceinstance( MDEClass m, String ID ) throws MDEException Korvaa instanssin uudella. public boolean deleteinstance( String URI ) throws MDEException Poistaa parametrina annetun URI:n mukaisen instanssin. private boolean containsliteral(vector v) Testaa sisältääkö annettu range-vektori Literaalimääritystä. private boolean containsvalue( Vector v, String search ) Testaa sisältääkö annettu range-vektori parametrina annettua arvoa. public boolean propertyexists( String URI ) throws Exception Testaa sisältyykö parametrina annettua URI:a vastaava ominaisuus instansseihin (Jena-oliomalliin). Tietorakenteet Luokassa käytetään Javan tietorakenneluokkia HashMap ja Vector. Lisäksi käytetään jena-oliomallin Model-tietorakennetta.
29 MDEQueryHandler Luokka toteuttaa RDFQueryHandler-rajapinnan. Luokan tarkoitus on huolehtia instanssikyselyiden suorituksesta. RDFQueryHandler-luokan kutsuminen on järjestelmässä MDEController-luokan tehtävä. Muuttujat private ModelRDB model Jenan oliomallin mukainen Model-luokan ilmentymä, jota luokka käsittelee. private MDEOntologyHandler ontologyhandler Viittaus ontologiaselaimeen. Luokka tarvitsee myös ontologiasta tietoja. Konstruktorit Luokassa on yksi konstruktori, jossa luodaan yhteys instanssikantaan. Parametrit: RDF-instanssitiedoston nimi, käyttäjänimi, salasana, tietokannassa olevan mallin nimi sekä viittaus ontologiaselaimeen (MDEOntologyHandler). public MDEQueryHandler ( String connstring, String username, String password, String modelname, MDEOntologyHandler mdeo ) throws MDEException Metodit Suunnitteludokumentissa kuvatut metodit: public RDFQueryHandler ( String instancefilename ) public Vector doinstancequery( MDEClass m ) Toteutetut metodit:
30 25 public Vector doinstancequery( MDEClass m ) throws MDEException Kyselyn suorittava metodi. Parametrina annetaan MDEClass-olio, joka sisältää haettavat kentät. Paluuarvona saadaan MDEClass-olioista koostuvan Vectortaulukko. Tämä taulukko sisältää löydetyt instanssit. Jos ei löydetty mitään, palautetaan null. public MDEClass getinstance( String URI ) throws MDEException Palauttaa halutun instanssin MDEClass-oliona. private boolean containsliteral(vector v) Testaa sisältääkö annettu range-vektori Literaalimääritystä. private boolean containsvalue( Vector v, String search ) Testaa sisältääkö annettu range-vektori parametrina annettua arvoa. public boolean propertyexists( String URI ) throws Exception Testaa sisältyykö parametrina annettua URI:a vastaava ominaisuus instansseihin (Jena-oliomalliin). Tietorakenteet Luokassa käytetään Javan tietorakenneluokkia HashMap ja Vector. Lisäksi käytetään jena-oliomallin Model-tietorakennetta. 5.6 Siirrettävyys Järjestelmän RDF-käsittelijä on siirrettävissä ontogator-mediatorille siten, että laaditaan rajapintaluokkien RDFInstanceHandler, RDFOntologyHandler sekä RDFQueryHandler toteuttavat ontogator-mediatoria käyttävät luokat. Jälkikäteen ajateltuna järjestelmä olisi ollut miellyttävä toteuttaa siten, että ontogator-mediatorrajapinta olisi ollut käytettävissä, jolloin olisi voitu välttää monia toteutuksen kuoppia.
31 26 6 Tiedostonkäsittelijä (J.K.) Tiedostonkäsittelijä avaa ja sulkee käyttäjän käsittelemät xml-tiedostot. Tiedostonkäsittelijä tarjoaa käyttäjälle mahdollisuuden kopioida tiedostoja järjestelmän ulkopuolelta järjestelmän omaan xml-tiedostoja sisältävään hakemistoon. Avatun xml-tiedoston pohjalta tiedostonkäsittelijä muodostaa XmlCardIdentifier-olioita, joiden avulla pidetään kirjaa käsitellyistä ja käsittelemättömistä xml-korteista ja niiden ominaisuuksista. Kyseiset olio tallennetaan järjestelmän hakemistoon sarjallistettuina olioina. Tiedostonkäsittelijän avulla järjestelmä ylläpitää xml-korteista luotuja rdf-ilmentymiä sisältäviä rdf-tiedostoja, kunnes käyttäjä siirtää ne järjestelmän ulkopuoliseen hakemistoon. Tiedostonkäsittelijä pitää myös huolen tiedostojen poistamisesta järjestelmän omasta hakemistosta. Jokaista xml-tiedostoa vastaa yksi XmlCardIdentifier- tiedosto ja yksi rdf-tiedosto. Kun xml-tiedosto poistetaan, poistetaan samalla sitä vastaava XmlCardIdentifier-tiedosto ja rdftiedosto. Järjestelmän käytössä on lisäksi konfiguraatiotiedosto sekä liitettyjen ominaisuuksien tiedosto. Nämä tiedostot ovat tarkoitettu ainoastaan järjestelmän luettaviksi, joten niihin tehtävät muutokset on tehtävä järjestelmän ulkopuolisilla editoreilla. 6.1 MDEFileHandler Luokka huolehtii tiedostonkäsittely-palvelujen tarjoamisesta järjestelmän muille osille. Palvelut välitetään muuhun järjestelmään ohjaimen avulla. Luokka käyttää Javan valmiiden luokkien lisäksi luokkia XmlCardIdentifier, MDEJoint, MDE- JointFile ja MDEXmlFile toimintojensa toteuttamiseen. Muuttujat Luokkan on lisätty vakiomuuttujat. Muut luokan muuttujat ovat samat, jotka suunnitteludokumentissa määriteltiin. Seuraavat muuttujat on lisätty toteutusvaiheessa:
32 27 private static final String SYSTEM Muuttuja määrittelee hakupolun järjestelmätiedostoille. private static final String XMLFILES Muuttuja määrittelee hakupolun xml-tiedostoille. private static final String CONFIG Muuttuja määrittelee konfiguraatiotiedoston nimen. private static final String LAST Muuttuja määrittelee viimeksi käsitellyn tiedoston nimen. Alkuperäisen suunnitelman mukaan toteutetut muuttujat: private String lastfile Muuttujaan sijoitetaan viimeksi käsitellyn tiedoston nimi. private File configfile Muuttujaan sijoitetaan konfiguraatiotiedosto. protected MDEXmlFile activefile Muuttuja sisältää käsittelyssä olevan xml-tiedoston sekä sitä vastaavan rdf-tiedoston ja XmlCardIdentifier-olion. private String [ ] xmlfilesinuse Muuttujaan sijoitetaan järjestelmän xml-tiedostoja sisältävän hakemiston sisältö. private MDEJointFile joints Muuttuja sisältää liitettyjen ominaisuuksien tiedoston. Konstruktorit Luokassa on kaksi konstruktoria, joista toinen on parametriton. Alunperin suunnitteludokumentissa määriteltiin ainoastaan yksi konstruktori, joten toteutuksessa on jouduttu lisäämään toinen konstruktori. Toinen konstruktori lisättiin helpottamaan järjestelmän hakemistossa olevien xml-tiedostojen avaamista käsiteltäviksi. Toteutuksen yhteydessä lisätty konstruktori:
33 28 public MDEFileHandler(String filename) Luo MDEFileHandler-olion avaten parametrina annetun xml-tiedoston ja sitä vastaavan rdf-tiedoston sekä XmlCardIdentifierolion. Avaa myös konfiguraatiotiedoston ja liitettyjen ominaisuuksien tiedoston. Alunperin suunniteltu konstruktori: public MDEFileHandler() Avaa konfiguraatiotiedoston ja liitettyjen ominaisuuksien tiedoston. Metodit Suunnitteludokumentissa määritellyistä toiminnoista jouduttiin joitakin toimintoja jättämään pois. Toisaalta joitakin alunperin puuttuvia toimintoja jouduttiin lisäämään toteutuksen yhteydessä. Suunnitteludokumentissa määritellyistä metodeista seuraavia ei toteutettu: public boolean openconfigurationfile() Hyödytön, sillä konfiguraatiotiedosto avataan aina, kun luodaan ilmentymä luokasta. public boolean closeconfigurationfile() Konfiguraatiotiedostoon ei kirjoiteta mitään, joten sitä ei tarvitse erikseen sulkea. Seuraavat toiminnot on lisätty luokkaan toteutusvaiheessa: public boolean closefiles() Sulkee avoinna olevat tiedostot. public MDEXmlFile getactivefile() Palauttaa käsittelyssä olevan xml-tiedoston. private String readconfigurationfile(string item) Palauttaa parametrina annettua arvoa vastaavan toiminnon konfiguraatiotiedostosta.
34 29 public String getjoint(mdejoint key) Palauttaa parametrina annettua avainta vastaavan xml-elementin. public String getlastfile() Palauttaa viimeksi käsitellyn tiedoston nimen. public boolean closelastfile() Sulkee viimeksi käsitellyn tiedoston ja tallentaa sen järjestelmän hakemistoon systemfiles/mdedata. Seuraavat toiminnot on toteutettu, mutta niitä ei ole tarkoitettu käytettäviksi järjestelmässä: public boolean addjoint(string key, String domainuri, String propertyuri) Luo uuden liitetyn ominaisuuden. Toimintoa ei käytetä, koska liitettyjen ominaisuuksien tiedosto toimitetaan järjestelmän ulkopuolelta. public boolean deletejoint(string key) Poistaa parametrina annettua avainta vastaavan liitoksen. Toimintoa ei käytetä, koska liitettyjen ominaisuuksien tiedosto toimitetaan järjestelmän ulkopuolelta. Seuraavat toiminnot on määritelty suunnitteludokumentissa: public MDEXmlFile opennewxmlfile(string filename) Kopioi järjestelmän ulkopuolelta parametrina annetun xml-tiedoston järjestelmän hakemistoon. Avaa tiedoston ja luo tiedostoa vastaavat rakenteet. public MDEXmlFile opencurrentxmlfile(string filename) Avaa järjestelmän hakemistosta xml-tiedoston. public MDEXmlFile openlastfile() Avaa viimeksi käsitellyn xml-tiedoston. public boolean saverdffile(string path) Tallentaa rdf-ilmentymätiedoston parametrin osoittamaan hakemistoon. public boolean erasecurrentxmlfile(string filename) Poistaa parametrina annetun tiedoston. public String openxmlcard(string id) Avaa käsittelyssä olevasta xml-tiedostosta parametrina annetulla id-tunnuksella varustetun xml-kortin.
35 30 public String [ ] getfilesinprocess() Palauttaa järjestelmän hakemistossa olevien tiedostojen nimet. public String [ ] getfilenames(string subdirectory) Palauttaa parametrina annetun hakemiston sisältämät tiedostot ja hakemistot. public MDEJoint getjoint(string key) Palauttaa parametrina annettua avainta vastaavan liitetyn ominaisuuden. public String getconfigurationinfo(string configurationfileitem) Palauttaa parametrina annetun konfiguraatiotiedon. Tietorakenteet Luokan tietorakenteet ovat samat kuin suunnitteludokumentissa määritellyt. 6.2 MDEXmlCardIdentifier Luokka kuvaa xml-korttien ominaisuuksia järjestelmässä. Korteista säilytetään seuraavat tiedot: kortin id-tunnus, otsikko, kortista muodostetun rdf-ilmentymän uri ja kortin tilatieto(valmis, kesken). Muuttujat Luokan muuttujat ovat samat kuin suunnitteludokumentissa määritellyt. private String cardheader Kortin otsikko. private String cardid Kortin tunniste. private String carduri Kortista tehdyn rdf-ilmentymän osoite. private boolean cardstate Kortin tila.
36 31 Konstruktorit Konstruktorit vastaavat suunnitteludokumentin määritelmiä. public XmlCardIdentifier() Luo tyhjän olion. public XmlCardIdentifier(String id) Luo parametrina annetulla tunnisteella varustetun olion. Metodit Luokan metodit ovat pääosin samat kuin suunnitteludokumentissa. Luokkaan on lisätty seuraavat toiminnot: public void setcardheader(string header) Asettaa parametrina annetun arvon kortin otsikoksi. public String stateasstring() Palauttaa kortin tilatiedon String-muodossa(valmis/kesken) public String tostring() Palauttaa merkkijono esityksen olion attribuuteista. Suunnitteludokumentissa määritellyt toiminnot: public void setcardid(string id) Asettaa parametrina annetun arvon kortin tunnisteeksi. public void setcarduri(string uri) Asettaa parametrina annetun arvon kortista tehdyn rdf-ilmentymän osoitteeksi. public void setcardstate(boolean state) Asettaa parametrina annetun arvon kortin tilaksi. public void getcardid() Palauttaa kortin tunnistetiedon.
37 32 public void getcarduri() Palauttaa korttia vastaavan rdf-tiedoston osoitteen. public void getcardstate() Palauttaa kortin tilatiedon. public void getcardheader() Palauttaa kortin otsikon. Tietorakenteet Luokassa on käytetty ainoastaan Javan perustyyppejä. 6.3 MDEJoint Luokka liittää kaksi rdf-ominaisuutta toisiinsa. Liitettävät ominaisuudet ovat: tietyn luokan uri-osoite ja kyseistä luokkaa vastaavan ominaisuuden uri-osoite. Muuttujat Luokan muuttujat vastaavat suunnitteludokumentin määritelmiä. private String jointdomain Luokan osoite. private String jointproperty Luokan ominaisuuden osoite. Konstruktorit Luokan konstruktorit ovat samat kuin suunnitteludokumentissa määritellyt konstruktorit. public MDEJoint() Luo tyhjän olion. public MDEJoint(String domainuri, String propertyuri) Luo parametreina annetuilla arvoilla varustetun olion.
38 33 Metodit Luokkaan on lisätty toteutusvaiheessa kaksi metodia, jotka puuttuvat suunnitteludokumentista. Luokkaan lisätyt toiminnot: public String tostring() Palauttaa merkkijono esityksen luokan attribuuteista. public boolean equals(object o) Vertaa kahta ilmentymää. Suunnitteludokumentissa määritellyt toiminnot: public void setdomainuri(string domainuri) Asettaa luokan osoitteen. public void setpropertyuri(string propertyuri) Asettaa luokan ominaisuuden osoitteen. public String getdomainuri() Palauttaa luokan osoitteen. public String getpropertyuri() Palauttaa luokan ominaisuuden osoitteen. Tietorakenteet Luokassa on käytetty ainoastaan Javan perustyyppejä. 6.4 MDEXmlFile Luokassa määritellään tiedostonkäsittelijän xml-tiedon muokkauksessa käyttämät tiedostot. MDEXmlFile-olio sisältää käsiteltävän xml-tiedoston, xml-tiedostoa vastaavan rdf-ilmentymätiedoston ja xml-tiedostoa vastaava XmlCardIdentifiertaulukon. Luokkaa käytetään MDEFileHandler-luokassa tiedon välittämiseen järjestelmän muille osille. Luokka on muuttunut melko radikaalisti suunnitteludo-
39 kumentissa tehdyistä määritelmistä. Kaikki määritellyt toiminnot on toteutettu, mutta toimintoja on lisätty runsaasti toteutusvaiheessa. 34 Muuttujat Muuttujat vastaavat suunnitteludokumentissa määriteltyjä muuttujia, mutta vakiomuuttujat on lisätty toteutuksen yhteydessä. Lisätyt muuttujat: private static final String CARDDIR Hakemisto, jossa on xml-korttien tunnistetiedot. private static final String RDFDIR Hakemisto, jossa on rdf-tiedostot. private static final String XMLDIR Hakemisto, jossa on xml-tiedostot. Suunnitteludokumentissa määritellyt muuttujat: protected File xmlfile Muuttuja sisältää xml-tiedoston. protected File rdffile Muuttuja sisältää xml-tiedostoa vastaavan rdf-tiedoston. protected XmlCardIdentifier [ ] xmlcards Muuttuja sisältää xml-tiedostoa vastaavan XmlCardIdentifier-taulukon. Konstruktorit Luokkaan on lisätty toteutusvaiheessa yksi konstruktori. Luokkaan lisätty konstruktori: public MDEXmlFile(String xmlfilename, String idfield, String headerfield, String idattribute)
40 35 Konstruktori avaa xmlfilename-parametrin osoittaman xml-tiedoston ja luo sitä vastaavan XmlCardIdentifier-taulukon muiden parametrien avulla. Luo myös uuden rdf-tiedoston, joka vastaa avattua xml-tiedostoa. Suunnitteludokumentissa määritelty konstruktori: public MDEXmlFile(String xmlfilename) Avaa parametrina annetun xml-tiedoston ja sitä vastaavat muut tiedostot. Metodit Luokkaan on lisätty useita suunnitteludokumentista puuttuvia toimintoja. Suunnitteludokumentissa määrittellyt toiminnot on kuitenkin kaikki toteutettu. Luokkaan toteutusvaiheessa lisätyt toiminnot: private void setcardinfo(string cardstart, String headerstart, String idattribute) Asettaa xml-tiedoston korttien tiedot muuttujaan. public String getxmlfilename() Palauttaa xml-tiedoston nimen. public String getrdffilename() Palauttaa rdf-tiedoston nimen. public File getrdffile() Palauttaa rdf-tiedoston. public XmlCardIdentifier [ ] getcardidentifiers() Palauttaa korttien tiedot sisältävän taulukon. public String [ ] getfilenames() Palauttaa järjestelmän hakemistossa olevien tiedostojen nimet. Suunnitteludokumentissa määritellyt toiminnot: public MDEXmlFile openfile (String xmlfilename, String idfield, String headerfield, String idattr) Avaa ensimmäisenä parametrina annetulla nimellä
41 36 varustetun tiedoston. Luo muiden parametrien avulla xml-tiedostoa vastaavan XmlCardIdentifier-taulukon. Avaa xml-tiedostoa vastaavan rdf-tiedoston. Metodi on muuttunut suunnitellusta siten, että parametreja on neljä yhden sijasta. Alunperin ainoaksi parametriksi suunniteltiin xmlfilename. public boolean closefile() Sulkee käsittelyssä olevat tiedostot. public boolean erasefile(string filename) Poistaa parametrina annetulla nimellä varustetun xml-tiedoston ja sitä vastaavan rdf-tiedoston sekä XmlCardIdentifiertiedoston. public String getxmlcard (String cardid, String cardstart, String idattribute) Palauttaa ensimmäisenä parametrina annettua tunnistetta vastaavan xmlkortin. Käyttää muita parametreja apunaan etsiessään korttia. Metodi on muuttunut alunperin suunnitellusta siten, että cardstart ja idattribute parametrit on lisätty vasta toteutusvaiheessa. Tietorakenteet Luokassa käytetään suunnitteludokumentissa määriteltyjä tietorakenteita. 6.5 XMLFileHandler (A.I) Luokan tehtävänä on palauttaa annetusta XML-tiedostosta kortit identifioivien attribuuttien arvot sekä palauttaa XML-kortti annetun id:n perusteella. Luokkaa ei ole määritelty suunnitteludokumentissa. Luokan tarpeellisuus havaittiin vasta integrointitestauksen yhteydessä. Suunnitteludokumentissa luokan toiminnot oli määritelty MDEXmlFilen toiminnoiksi. Luokka käyttää Apachen Xerxces ja Xalan -rajapintoja. Kortit ja niiden id:t etsitään Document Object Model [DOM] -puusta XML Path Languagella [XPath]. Muuttujat String cardid Attribuutinnimi, jossa kortin id:t
42 37 String cardelement Elementinnimi, joka erottelee kortit. String uri XML-tiedoston osoite. String cardheader Attribuutinnimi, jonka arvo kortin otsikko. Konstruktori XMLFileHandler (String uri, String cardelement, String cardidattribute, String cardheaderattribute), String cardelement Parametrina XML-tiedoston osoite, kortin alku / loppu -tagi, id-attribuutinnimi ja otsikko-attribuutinnimi. Metodit XmlCardIdentifiers [ ] getcardidentifiers()] Palauttaa taulukon XmlCardIdentifiersoliota. String getxmlcard(string id) Palauttaa XML-kortin. Parametrina kortin id. 6.6 MDEJointFile Luokan avulla luodaan liitettyjen ominaisuuksien tiedostosta MDEJoint-olioita, jotka sijoitetaan hajautustauluihin järjestelmän käytettäväksi. Luokka ei kaikilta osiltaa vastaa suunnitteludokumentin määrittelyjä, vaan luokkaan on lisätty toimintoja. Alunperin luokan oli tarkoitus luoda vain yksi hajautustaulu, mutta toteutusvaiheessa lisättiin toinen hajautustaulu. Nyt luokka hajauttaa liitettyjen ominaisuuksien tiedostoon molempiin suuntiin. Toiseen hajautustauluun xml-elementit hajautetaan MDEJoint- olioiden perusteella ja toiseen MDEJointoliota hajautetaan xml-elementtien perusteella.
43 38 Muuttujat Muuttujiin on lisätty toteutusvaiheessa vakiomuuttujat sekä toinen hajautustaulu. Muilta osin muuttujat vastaavat suunnittelu- dokumentin määritelmiä. Luokkaan lisätyt muuttujat: private static final String JSTART Liitettyjen ominaisuuksien tiedoston liitoksen alun osoittava kenttä. private static final String JEND Liitettyjen ominaisuuksien tiedoston liitoksen lopun osoittava kenttä. private static final String FILEEND Liitettyjen ominaisuuksien tiedoston loppumisen osoittava kenttä. private static final String ELEMENT Xml-elementin nimi liitettyjen ominaisuuksien tiedostossa. private static final String DOMAIN Luokan nimi liitettyjen ominaisuuksien tiedostossa. private static final String PROPERTY Luokan ominaisuuden nimi liitettyjen ominaisuuksien tiedostossa. private HashMap jointobjects Liitettyjen ominaisuuksien tiedostosta muodostettu hajautustaulu, jossa elementit on järjestetty MDEJoint-olioiden perusteella. Muuttuja on lisätty luokkaan toteutusvaiheessa, koska käyttöliittymässä tarvitaan kyseistä tietoa. Suunnitteludokumentissa määritellyt muuttujat: private File jointfile Liitettyjen ominaisuuksien tiedosto. private HashMap jointelements Liitettyjen ominaisuuksien tiedostosta muodostettu hajautustaulu, jossa MDEJoint-oliot on järjestetty elementtien perusteella.
44 39 Konstruktorit Luokan ainoa konstruktori muutettiin toteutusvaiheessa parametrittomasta yhden parametrin saavaksi konstruktoriksi. public MDEJointFile(String filename) Konstruktori avaa liitettyjen ominaisuuksien tiedoston, jonka perusteella luo molemmat hajautustaulut. Metodit Suunnitteludokumentissa määritellyt toiminnot on toteutusvaiheessa muokattu täysin uusiksi. Luokka ei juurikaan vastaa alunperin suunniteltua, vaan lähes kaikki toiminnot on tehty toteutuksen yhteydessä. Luokan metodeista suuri osa on jätetty kokonaan pois ja uusia on tullut paljon lisää. Luokassa on myös totetettu toimintoja, joita ei järjestelmässä ole tarkoitus käyttää. Toiminnot, joita ei toteutettu: private Static String readline() Hyödytön, koska rivien lukeminen tehdään metodien sisällä. private Static boolean writetofile() Metodi on toteutettu nimellä writeattributetofile. Luokkaan lisätyt toiminnot: public String getattribute(mdejoint object) Palauttaa parametrina annettua MDEJointoliota vastaavan xml-elementin. public HashMap getjointobjects() Palauttaa hajautustaulun, jossa xml-elementit on hajautettu MDEJoint-olioiden perusteella. public HashMap getjointelements() Palauttaa hajautustaulun, jossa MDEJointoliot on hajautettu xml-elementtien perusteella.
45 40 Suunnitteludokumentissa määritellyt toiminnot: public MDEJoint getattribute(string element) Palauttaa parametrina annettua xml-elementtiä vastaavan MDEJoint-olion. public boolean setattributes(string element, String domainuri, String propertyuri) Luo uuden toisen ja kolmannen parametrin perusteella MDEJoint-olion ja hajauttaa sen kumpaankin hajautustauluun. private void filetohashmap() Lukee liitettyjen ominaisuuksien tiedoston ja luo sen perusteella hajautustaulut. Luokkaan laaditut toiminnot, joita ei käytetä järjestelmässä: Näitä toimintoja ei käytetä järjestelmässä, koska liitettyjen ominaisuuksien tiedostoa on tarkoitus muokata editoimalla tiedostoa järjestelmän ulkopuolisella tekstieditorilla. public boolean deleteattribute(string element) Poistaa parametrina annettua elementtiä vastaavat tiedot hajautustaulusta. public boolean deleteattribute(mdejoint objects) Poistaa parametrina annettua MDEJoint-oliota vastaavat tiedot hajautustaulusta. private void writeattributetofile(string element, String domain, String property) Kirjoittaa liitettyjen ominaisuuksien tiedostoon rivin, joka sisältää parametreina saadut tiedot. Tietorakenteet Luokassa käytetyt tietorakenteet vastaavat suunnitteludokumentissa tehtyjä määritelmiä.
46 41 7 Käyttöliittymämoduuli (M.J.) Käyttöliittymä on metadataeditorin käyttäjäystävällisin osa. 7.1 FilesAndCardsJSP FilesAndCardsJSP-sivu kuvaa käyttäjälle tämän käytössä olevat tiedostot ja valitun tiedoston kortit, sekä näiden tilat. Apuna käytetään iteratefiles- ja iteratecardstageja. Käyttäjän valitseman tiedoston tai kortin id välitetään parametrina get-metodilla. Luo tiedosto -nappi avaa uuteen ikkunaan sivun newfile.jsp. Poista tiedosto - nappi avaa uuteen ikkunaan sivun deletefile.jsp. Tallenna valmiit -nappi lähettää oikeanpuoleisen kehyksen lomakkeen sivulle InstanceCard.jsp, joka latauduttuaan lähettää vasemmanpuoleisen kehyksen lomakkeen FilesAndCards.jspsivulle. Näin varmistutaan siitä, että kaikki käyttäjän tekemät muutokset tallentuvat. 7.2 InstanceCardJSP InstanceCardJSP-sivu kuvaa käyttäjälle valitun XML-kortin tiedot, sekä antaa käyttäjälle mahdollisuuden luoda RDF-skeeman pohjalta instanssi. Apuna käytetään iteraterdfelements- ja iteratedynlist-tageja. JSP-sivun alussa alustetaan cardstate-muuttuja, johon luodaan uusi CardStateolio. Sitten iteroidaan RDF-elementtejä. JSP-sivulla tarkastetaan RDFElementBeanin muuttujista minkälainen tapaus on kyseessä, ja piirretään sen mukaan oikeanlainen osa käyttöliittymään. Mikäli beanissä on dynaaminen hierarkkinen lista, iteroidaan sen osat sisemmässä silmukassa(iteratedynlist), ja piirretään lista sen RDFElementBeanin yhteyteen, johon se kuuluu. RDFElementBeaneja iteroidessa tarkastetaan sen muuttujia, ja muuttujien yhdistelmien mukaan piirretään oikeanlaiset tiedot käyttöliittymään. Tapaukset ovat
47 42 1. Literaalirange-property ilman arvoa 2. Literaalirange-property jolla on arvo 3. Instancerange-property ilman arvoa 4. Instancerange-property jolla on arvo 5. Classrange-property ilman arvoa 6. Classrange-property jolla on arvo 7. Ensimmäinen property, eli se jonka arvoksi luotava instanssi pistetään, ilman arvoa 8. Ensimmäinen property jolla on arvo ( Tapauksien ymmärtäminen vaatii RDF:än ymmärtämistä. ) Näiden tapauksien mukaan valitaan JSP-sivussa oikea haara, ja piirretään oikeat HTML-elementit. JSP-sivu myös käsittelee parametrit, jotka se saa HTML-taulukosta. Aina kun sivu ladataan uudestaan, muutetaan ohjelman tietojen tila vastaamaan käyttäjän tekemiä muutoksia. Lomakkeen kentät Lomakkeen kentät on nimetty kyseisen beanin id:n perusteella. Alla n kuvastaa beanin id:tä. search_class Teksti, jonka perusteella etsitään luokkaa. search_case Mitä tapausta etsitään. instanceuri Käyttäjän valitseman instanssin URI. instance Käyttäjän valitseman Beanin, joka sisältää instanceuri:n, id.
48 43 search_text Teksti, jonka perusteella etsitään instanssia. search Beanin id, johon etsitään reloadfilecontrol Ladataanko vasemmanpuoleinen kehys uudelleen. meedio_n Käyttäjän syöttämä tieto n:nteen beaniin. dectree_meedio_n Mistä kohtaa n:nnen beanin hierarkkista listaa pienennetään. inctree_meedio_n Mistä kohtaa n:nnen beanin hierarkkista listaa kasvatetaan. dynlist_meedio_n Onko n:nnen beanin hierarkkinen lista auki. 7.3 newfilejsp NewFile.jsp-sivulta käyttäjä voi kopioida uuden XML-tiedoston järjestelmän käyttöön. Tiedoston nimi välitetään newfile.jsp-sivulle post-metodilla. Sulje-nappi sulkee ikkunan ja uudelleen lataa Pääikkunan vasemman puoleisen kehyksen. 7.4 deletefilejsp DeleteFile.jsp-sivulta käyttäjä voi poistaa järjestelmän käytössä olevia XML-tiedostoja. Poistettavan tiedoston nimi välitetään get-metodilla deletefile.jsp-sivulle. Suljenappi sulkee ikkunan ja uudelleen lataa Pääikkunan vasemman puoleisen kehyksen. 7.5 CardState Luokka CardState sisältää tietorakenteita käyttöliittymän senhetkisestä tilasta. JSP-sivut piirtävät käyttöliittymän tietorakenteissa olevien olioiden mukaan tagien avustuksella. CardStatessa on myös metodeita joilla pidetään rdfbeans-listaa ajan tasalla, sekä apumetodeita joita tarvitaan käyttöliittymän toiminnassa. Näiden lisäksi CardStatessa on myös MDEController-olio, jonka kautta saadaan käyttöön muiden ohjelman osien tarjoamat palvelut.
49 44 Muuttujat MDEController controller johon tulee viite ohjaimeen, jota käyttöliittymä käyttää MDEClass instanceof johon tulee se luokka, jonka instanssi kortin esineen halutaan olevan LinkedList xmlelements johon tulee korttikohtainen XMLElement-olioiden lista. LinkedList rdfelements johon tulee korttikohtaiset RDF-tiedot(MDEPropertyt). LinkedList rdfbeans joissa on MDEPropertyjen ympärille lisätty myös käyttöliittymätietoja. Näistä piirretään varsinainen käyttöliittymä. LinkedList files jossa on StringBeanit joista tiedostolista piirretään LinkedList cardids johon tulee auki olevien korttien XmlCardIdentifier-oliot boolean newproperties kertoo pitääkö rdfbeans-listaan lisätä uusia beaneja boolean removeproperties kertoo pitääkö rdfbeans-listasta poistaa beaneja boolean newinstances kertoo pitääkö rdfbeans-listaan lisätä uusia instansseja HashMap ontologyuris täällä on kaikki käytetävän ontologian luokat (nimi,uri)- pareina Konstruktorit public CardState() luo uuden CardState-olion Metodit public LinkedList getbeans(string whatelements) palauttaa JSP-sivuille niiden tarvitsemia tietoja oikeassa muodossa public void setinstanceof(mdeclass mdeclass)
50 45 public MDEClass getinstanceof() public void setfiles(linkedlist files) public LinkedList getfiles() public boolean changefileopen(string filename) Tällä metodilla vaihdetaan auki olevaa tiedostoa. Kun yksi tiedosto avataan, muut suljetaan. public void setnewproperties(boolean maybe) public void setremoveproperties(boolean maybe) public void setnewinstances(boolean maybe) public MDEController getcontroller() public boolean setrdfelements() Tämä metodi päivittää rdfbeans-listaa aina kun kortin tiedot näyttävä JSP-sivu ladataan uudestaan. Alussa tehdään ns.varjoproperty, jonka arvoksi voidaan laittaa joku luokka, jonka instanssi halutaan luoda. Sen jälkeen metodi vain tarkistaa, pitääkö propertyjä tai instansseja poistaa tai lisätä, ja kutsuu alimetodeita jotka tekevät nämä asiat. public boolean setnewrdfelements() Tämä metodi käy läpi rdfbeans-listaa, kunnes löytää paikan jonka alle halutaan lisätä uusia propertyjä, ja lisää ne sitten oikeaan kohtaan listaa. MDEPropertyt myös muutetaan RDFElement- Beaneiksi ennen lisäystä. public boolean removerdfelements() Tämä metodi poistaa rdfbeans-listasta propertyt, jos luokka jonka propertyjä ne olivat muutetaan toiseksi. private void removeremovables() Apumetodi, laittaa kaikkien RDFElementtejen hasremovableproperties:in arvon falseksi. public StringBean getpicturefile() Tämä metodi palauttaa StringBeanin, jonka string-muuttujassa on käsittelyssä olevan kortin kuvan hakemistopolku ja tiedostonimi. public boolean loadoldrdfelements() Tällä metodilla ladataan rdfbeans-listaan avattu instanssi, eli tehdään uuden ladatun InstanceOf:in propertyistä RD- FElementBeaneja, jotta ne voitaisiin piirtää.
51 46 private boolean loadoldrdfelements(mdeclass mdeclass, int depth) Parametrittoman samannimisen metodin rekursiivinen alimetodi. private HashMap initontologyuris() Tämä metodi hajauttaa ontologian URIt hajautustauluun nimensä perusteella, josta voidaan sitten myöhemmin katsoa sisältyykö joku käyttäjän syöttämä luokka tähän ontologiaan. private HashMap initontologyuris(hashmap hash, Vector roots) Tämä metodi on saman nimisen metodin rekursiivinen aliohjelma. public String geturifromname(string classname) Tämä metodi tarkistaa onko ontologiassa parametrin nimistä luokkaa, ja jos on, palauttaa sen URIn. 7.6 Käyttöliittymän käyttämät beanit JSP-sivut piirtävät käyttöliittymän bean-olioissa olevien tietojen perusteella. Tässä kuvataan lyhyesti beanien tietosisältö, ja get- ja set- metodeista poikkeavat ylimääräiset metodit. Jokaisessa beanissa on siis julkisina metodeina jokaista muuttujaa vastaavat metodit getmuuttujanimi ja setmuuttujanimi. Näitä ei kuvata erikseen RDFElementBean Tämä bean on suurin ja monimutkaisin käyttöliittymän käyttämistä beaneista. Muuttujat private boolean first kertoo onko olio ensimmäinen rdfbean- listan olioista, eli ainoa, jota ei ole tehty oikeasta MDEPropertystä. Sitä käsitellään JSP-sivulla eri tavalla kuin muita. private boolean ismultirange kertoo onko tällä oliolla monta rangea
52 47 private boolean hasliteralrange kertoo onko tällä oliolla literaali-arvoista rangea private boolean hasclassrange kertoo onko tällä oliolla luokka-arvoista rangea private boolean hasinstancerange kertoo onko tällä oliolla instanssi-arvoista rangea private String chosenrange kertoo tällä hetkellä valitun rangen private int depth ominaisuuden syvyys ominaisuushierarkiassa private boolean hasnewproperties kertoo onko tälle oliolle tullut uusia aliominaisuuksia, jotka pitäisi lisätä rdfbeans-listaan private boolean hasremovableproperties kertoo onko beanilla poistettavia propertyjä, jotka pitäisi poistaa CardStaten rdfbeans-listasta private boolean hasnewinstances kertoo onko tällä beanilla uusi instanssi valittuna, jonka tiedot pitäisi lisätä CardStaten rdfbeans-listaan private boolean hasvalue kertoo onko tällä oliolla arvo private Vector dynlist tässä Vectorissa on DynlistElement-olioita, joista koostuu dynaaminen hierarkkinen lista. Null jos listaa ei ole. private boolean dynlistvisible kertoo onko olion dynaaminen hierarkkinen lista näkyvissä käyttöliittymässä private MDEProperty property täällä on varsinainen rdf-tieto, jonka ympärille RDFElementBean on kääritty, jotta saataisiin käyttöliittymätieto pysymään tallessa private MDEController controller Viite CardStatessa olevaan MDEController-olioon, jonka kautta myös bean saa käyttöönsä koko ohjelman toiminnallisuuden private int id beanin id-numero private Vector instances Vector jossa on tämän beanin luokkaa vastaavat tietokannasta haetut instanssit private static int counter staattinen apumuuttuja jota käytetään beanien id-numeron yksiselitteisyyden takaamiseksi
53 48 Konstruktorit public RDFElementBean() luo uuden beanin public RDFElementBean(MDEProperty property) luo uuden beanin MDEPropertyn ympärille Metodit Get ja set-metodit löytyvät kaikille edellä mainituille muuttujille, paitsi muutama epäoleellinen metodi on jätetty pois, esimerkiksi staattista counter-muuttujaa ei voi metodein muuttaa. Näiden metodien lisäksi täältä löytyy dynaamisen hierarkkisen listan muuttamismetodit sekä muutaman apumetodin ohjelman tiettyjä toiminnallisuuksia tukemaan. public void initdynlist() Tämä metodi alustaa dynaamisen hierarkkisen listan beanin muiden tietojen perusteella. public boolean addtodynlist(string superuri) Tämä metodi lisää dynaamiseen hierarkkiseen listaan parametrina annetun URIn suorat alaluokat. public boolean addinstancetodynlist(mdeclass mclass) Tämä metodi lisää MDEClassolion kuvaaman instanssin dynaamiseen hierarkkiseen listaan. public boolean removefromdynlist(string superuri) Tämä metodi poistaa dynaamisesta hierakkisesta listasta kaikki parametrina annetun URIn alaluokat ja instanssit. public boolean checkclass(mdeclass mdeclass) Tämä metodi tarkistaa onko käyttäjän ehdottama luokka hyväksyttävä arvo kyseisen propertyn arvoksi. Eli käytännössä haetaan luokan kaikki yläluokat ontologiassa ja verrataan niitä sitten propertyn rangeihin. private Vector findrootclasses(mdeclass mdeclass) Tämä metodi on checkclassmetodin apumetodi, joka hakee kaikki luokan yläluokat ja panee niiden URIt Vectoriin.
54 49 private Vector findrootclasses(vector roots, Vector superclasses) Tämä metodi on samannimisen metodin rekursiivinen alimetodi. public static String cuturi(string URI) Tämä metodi on staattinen apumetodi, joka leikkaa Stringistä pois #-merkkiä edeltävän osan. Käytetään siis jotta saataisiin URIsta luokan nimi DynlistElement Tämä bean kuvaa yhtä riviä dynaamisessa hierarkkisessa listassa, mutta sisältää myös hiukan ylimääräistä tietoa tallessa sisällään, josta se otetaan esiin tarvittaessa. Muuttujat private int depth tämän elementin syvyys listassa private String name tämän elementin nimi private String URI tämän elementin URI private boolean isinstance kertoo onko tämä elementti instanssi vai luokka private boolean hassubclasses kertoo onko tällä elementillä aluluokkia ontologiassa private boolean visiblesubclasses kertoo onko tällä elementillä näkyviä aluluokkia hierarkkisessa dynaamisessa listassa private boolean haschoseninstance kertoo onko elementin instanssi valittu piirrettäväksi käyttöliittymään private MDEClass instance mikäli tämä rivi dynaamisessa hierarkkisessa listassa kuvaa instanssia, on instanssi-olio tässä
55 50 Konstruktorit public DynlistElement(String name,string URI,int depth) konstruktori jolla voi antaa osan muuttujien arvoista parametrinä. public DynlistElement (String name,string URI,int depth, boolean isinstance, boolean hassubclasses) konstruktori jolla voi antaa osan muuttujien arvoista parametrinä. public DynlistElement(MDEClass instance,int depth) instanssikonstruktori, jonka tiedot otetaan parametrina annetusta MDEClass-oliosta StringBean StringBean on bean jonka avulla voidaan käsitellä Stringejä JSP-sivuilla beanmaisesti. Periaatteessa tätä käytetään kuvaamaan tiedostoja FilesAndCards- JSP:lle, mutta sen lisäksi sitä käytetään myös yleisenä Stringin wrapperina. Muuttujat private String string täällä on tallessa merkkijono private boolean open kertoo onko tiedosto auki Konstruktorit public StringBean() luo uuden beanin public StringBean(String string) luo uuden beanin jonka string-arvo on string XmlCardIdentifier XmlCardIdentifier-olioita käytetään käyttöliittymässä beaneina, mutta ne sisältävät myös muuta tietoa. XmlCardIdentifier-olioista löytyy enemmän tietoa luvus-
56 51 sa Tiedostonkäsittelijä. 7.7 Tagikirjasto Meedio Tässä kuvataan Meedio-tagikirjaston tagit. Koska tagien toimintalogiikka on näissä tageissa hyvin samantyyppinen, niitä ei kuvata samalla tarkkuudella kuin muita java-luokkia, vaan niistä kuvataan niiden tehtävä ja miten tagi sen toteuttaa FileIteratorTag FileIteratorTag toteuttaa iteratefiles-tagin, joka käy läpi MDEControllerilta saadut tiedostonimet ja tiedostojen tilat, ja antaa ne yksi kerrallaan JSP-sivun käyttöön CardIteratorTag CardIteratorTag toteuttaa iteratecards-tagin, joka käy läpi CardStatesta saadut XmlCardIdentifier-oliot, ja antaa ne yksi kerrallaan JSP-sivun käyttöön RDFElementIteratorTag RDFElementIteratorTag toteuttaa iteraterdfelements-tagin, joka käy läpi RDFelementeistä tehdyt oliot. Kun tag ajetaan, päivitetään aluksi CardState-olion rdfbeansmuuttujan tila, ja sen jälkeen annetaan oliot yksi kerrallaan JSP-sivun käyttöön.
57 OntologyIteratorTag OntologyIteratorTag toteuttaa iteratedynlist-tagin, joka käy läpi hierarkkisen dynaamisen listan, ja antaa ne yksi kerrallaan JSP-sivun käyttöön SetCardStateTag SetCardStateTag toteuttaa setcardstate-tagin, jossa laitetaan CardState- muuttuja kuntoon. Jos muuttujaa ei ole, se luodaan, jos se on, ei tehdä mitään. 8 Jatkokehittelymahdollisuudet Koska metadataeditorin perustoiminnallisuus osoittautui niin työlääksi, jäi monta hyvää ideaa ajanpuutteen vuoksi toteuttamatta. Tässä luvussa kuvataan sekä jokunen itse huomaamamme puute, ja ajatuksia niiden korjaamisesta tulevaisuudessa, että muita jatkokehitysideoita. 8.1 Multirange - eli monen rangen propertyt Koska RDFS-määrittelyissä sallitaan monen rangen laittaminen yhdelle propertylle, pyrimme toteuttamaan ohjelman niin, että tällaisetkin tapaukset toimisivat. Ajan loppuessa emme ehtineet lisätä JSP-sivuille sellaista haaraa, missä käsiteltäisiin monen rangen tapaukset, joten tällä hetkellä se ei toimi. Tästä huolimatta MDEPropertyn range-muuttuja on vektori, jossa voi siis olla monia arvoja, ja MDEPropertyistä RDFElementBeaneja luotaessa laitetaan RDFElement- Beaniin tieto siitä, onko kyseinen property multirange. Myös RDFElementBeanin dynaamisen hierarkkisen listan alustus ottaa huomioon sen, että multirangetapauksissa tulee listan juuriksi oikeat luokat. Jos JSP-sivuille lisättäisiin multirangea koskevat tapaukset, voisi mahdollistaa esimerkiksi sen, että jos käyttäjä kirjoittaa tekstikenttään jotain mutta sitä ei löy-
58 53 dy ontologiasta Hae-nappia painettaessa, arvo voisi silloin mennä literaaliarvoksi MDEPropertyyn. Sellainen tapaus jossa olisi sekä class-range että instanssirange voisi tuottaa hieman päänvaivaa, koska dynaamiseen hierarkkiseen listaan joudutaan piirtämään kaikki luokat, ja näin ei välttämättä tiedettäisi, haluaako käyttäjä lisätä instanssirangeen kuuluvan luokan instanssin, vai ainoastaan sen luokan. Nämä ongelmat lienevät kuitenkin ratkaistavissa JSP-sivulla tavalla tai toisella. 8.2 Instanssien nimeäminen järkevämmin kuin sen URIn perusteella Tällä hetkellä dynaamiseen hierarkkiseen listaan lisättävät instanssit piirretään listaan URInsa loppuosalla, koska ei ole mahdollista tietää minkä alipropertyn arvo olisi tähän järkevää laittaa täysin geneerisessä järjestelmässä, jossa propertyt vaihtelevat. Olisi kuitenkin mahdollista kehittää järjestelmä joka vastaisi ohjelmassamme jo toteutettua liitoskäytäntöä jossain määrin, eli tehtäisiin erillinen tiedosto jossa sidottaisiin tietty luokan URI tiettyyn sen luokan propertyyn, niin että sen luokan instanssien kohdalla piirrettäisiinkin URIn sijasta tämän määritellyn propertyn arvo. Jos tällaista tietoa ei löytyisi, piirrettäisiin sitten se URI. 8.3 Kortin otsikon liittäminen sen id:n ohelle Tällä hetkellä korteista piirretään FilesAndCards.jsp:hen sekä InstanceCard3.jsp:n taulukon ekalle riville ainoastaan id-numero. Se ei ole kovin kuvaavaa, ja voisi olla viisasta liittää myös kortin otsikkotieto näihin paikkoihin, mikäli sellainen on konfiguraatiotiedostossa xml-skeemalle määritelty.näin saataisiin lisää selkeyttä, kun epämääräisen numeron ohella olisi myös jotain kuvaavampaa tietoa(vrt. edellinen kohta).
59 RDF:n tallentaminen suoraan tietokantaan Tulevaisuudessa metadataeditorin ollessa käytössä paikallisesti eri puolilla Suomea tulee pakosti vastaan datan monistuminen. Koska kaikki tieto ei ole tietokannassa, eikä sieltä näin ollen voida tarkastaa tiedon mahdollista olemassaoloa ennen sen luontia, syntyy duplikaatteja. Tämä taas aiheuttaa päänvaivaa niille jotka yrittävät pitää tietokannan tiedot yksiselitteisinä. Siksi olisi viisasta pitää ohjelmaa vain yhdessä paikassa, josta tiedot myös suoraan talletettaisiin tietokantaan, ja paikallisilla koneilla olisi vain käyttöliittymä. Tämä malli vaatisi tietoliikennemoduulin lisäämistä, niin että käyttöliittymä kutsuisi verkon yli MEEDIOpalvelimen ohjainta, joka taas lähettäisi tiedot takaisin. Kaikki tiedot talletettaisiin suoraan tietokantaan, ja näin tiedot olisivat koko ajan ajan tasalla. 8.5 Hakuominaisuuksien monipuolistaminen Tällä hetkellä Hae-nappi hakee HashMapista URIa käyttäjän teksti avaimenaan, eli sen hyöty aloittelevalle käyttäjälle joka ei tunne ontologiaa on hyvin vähäinen. Jos teksti ei ole tarkalleen identtinen, ei tulosta saada. Älykkyyttä olisi mukava saada lisää, joten HashMapin sijasta ontologian URIt voisi tallentaa esimerkiksi AVL-puuhun nimensä perusteella, jolloin jo luokan nimen alun kirjoittaminen voisi riittää, mikäli se olisi yksiselitteinen, eli AVL-puussa voitaisiin haun lopussa tarkastaa, täsmääkö käyttäjän merkkijono solmun avaimen alkuun, ja jos näin on, se olisi ainut mahdollinen luokka ja näin ollen luultavasti käyttäjän tarkoittama. Jos käyttäjän merkkijono täsmäisi useampaan solmuun, voitaisiin tietysti jotenkin antaa lista vaihtoehdoista käyttäjälle. AVL-puu-tekniikan lisäksi voitaisiin varmasti myös käyttää jonkinlaista SubStringhakua, jolloin useampien vaihtoehtojen näyttäminen pitäisi myös jotenkin ratkaista käyttöliittymässä. Eli haulla Koira löytyisi myös Koiranruoka ja Saksanpaimenkoira. Tällainen vaatisi kuitenkin luultavasti merkkijonon vertaamista kaikkiin ontologian luokkiin, ja olisi näin ollen huomattavasti hitaampi kuin HashMap tai AVL-puu.
60 Tietokantahakujen monipuolistaminen Samalla lailla kuin Hae-napin toiminnallisuutta voitaisiin parantaa, olisi myös tietokantahaussa älykkyyden lisäämisen varaa. Jos käyttäjälle sattuu kirjoitusvirhe, ei oikeaa instanssia löydetä, ja kirjoitusasun pitää muutenkin olla identtinen isoja ja pieniä kirjaimia myöten. Ongelma on tietysti pitkälti RDQL:ssä, mutta mikäli monimutkaisemmat kyselyt saataisiin toteutettua, tulisi järjestelmästä paljon käytettävämpi. 8.7 Luokkien ja xml-arvojen sitominen toisiinsa Edelleen voitaisiin järjestelmän älykkyyttä lisätä sitomalla tiettyjä xml-arvoissa esiintyviä sanoja tiettyihin luokkiin, niin että esimerkiksi jos xml:stä löytyisi vaikka tagi <tyyppi>, niin sen arvo voitaisiin tarkastaa, ja jos siinä esiintyisi merkkijono kirves, voitaisiin automaattisesti valita kentän arvoksi Kirves-luokka, tai ainkin ehdottaa sitä käyttäjälle. Tämä helpottaisi luokittelijan työtä huomattavasti tapauksissa jossa luokitellaan hyvin samantyyppisiä esineitä suurissa määrin. 8.8 Uusien skriptien lisääminen käyttöliittymään Tällä hetkellä käyttäjä joutuu klikkailemaan paljon nappeja käyttäessään käyttöliittymää. Voisi olla hyvä, jos esimerkiksi Hae-nappi korvattaisiin skriptille joka tekee saman asian kun hiiri siirretään kyseisen taulukon solun päältä pois. Myös instanssien hakeminen tietokannasta on nyt hieman epäkäytännöllistä, ja museohenkilö ei välttämättä edes muista käyttää koko ominaisuutta, joka entisestään lisää duplikaattien määrää tietokannassa. Paras vaihtoehto olisi varmaan synkronoitu tietokantakysely joka käyttäjän valintojen mukaan hakee aina tiedot tietokannasta, ja kun käyttäjä lisää tietoa, tarkentuisi samalla dynaamisen hierarkkisen listan instanssivaihtoehtojen määrä. Tällainen saattaa tosin käytänössä olla hyvin vaikea toteuttaa. Näiden skriptien lisäksi voisi myös olla viisasta toteuttaa tallennusskripti, joka oli tarkoitus alunperin tehdä, mutta lopulta päädyimme kiireessä Tallenna-nappiin,
61 56 joka on sinänsä helppokäyttöinen, mutta lisää kuitenkin käyttäjän klikkailua ja mahdollistaa tietojen häviämisen kun käyttäjä ei muista tallentaa. Jos tallennus tapahtuisi automaattisesti aina kun korttia vaihdetaan, ei tätä riskiä olisi. 8.9 CSS-tiedoston tekeminen Tällä hetkellä ohjelmamme ulkoasun viilailuun jäi hyvin vähän aikaa, ja CSStekniikalla voisi saada järjestelmän ulkoasua paranneltua. Ulkoasua voi tietysti parannella myös ilman CSS-tekniikkaa, mutta CSS olisi yksi hyvä vaihtoehto Luokkien pathin näyttäminen Tästä ominaisuudesta oli puhetta joissain käyttöliittymäpalavereissa, mutta jäi lopulta toteuttamatta. Kaikki luokan pathit saisi kuitenkin varmasti esiin käyttämällä hyväksi RDFELementBean-luokan checkclass-metodin alimetodia findrootclasses, joka hakee kaikki luokan yläluokat. Tämän rekursion sisällä voisi varmaan jotenkin myös tehdä stringejä poluista luokasta juureen, jotka sitten voisi laittaa esimerkiksi linkin title-attribuutiksi, jolloin ainakin IE ja Mozilla osaisivat näyttää pathit luokkanimen päällä tooltippinä. Asian voi varmasti hoitaa toisinkin, mutta tässä yksi vaihtoehto XML-tietojen näyttäminen Tällä hetkellä ohjelma hakee xml-elementeistä ensimmäisen elementin arvon, jos samannimisiä elementtejä on monta. Jatkossa voisi laittaa sulkuihin käyttöliittymässä vaikka kaikki arvot peräkkäin, mikäli ei haluta minkään tiedon jäävän pois luokittelijalta.
62 9 Viittaukset lähteisiin (P.P.) 57 Tässä luvussa kuvataan dokumentissa esiintyvät viittaukset eri tekniikoihin. - XML (Extensible Markup Language), lisätietoa: - XML-Skeema, lisätietoa: - RDF (Resource Description Framework), lisätietoa: - Java Server Pages, lisätietoa: - JSP+tag libraries, lisätietoa: - Jakarta Tomcat, lisätietoa: - Sax (Simple API for XML), lisätietoa: - Apchen Xerces, lisätietoa: - Dom (Document object model), lisätietoa: - Jena, lisätietoa: - HTML (Hypertext Markup Language), lisätietoja: - CSS (Cascading Style Sheets), lisätietoja: - Java Applet, lisätietoja: - Java Servlet, lisätietoja:
Semantic Web - Metadata Editor
Semantic Web - Metadata Editor Ohjelmistotuotantoprojekti Ohjelmistotuotantoryhmä 1, Meedio Mikko Apiola (M.A) Ari Inkovaara (A.I) Miikka Junnila (M.J) Justus Karekallas (J.K) Pekko Parikka (P.P) Helsinki
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja
JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen [email protected] Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
16. Javan omat luokat 16.1
16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat
15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
Olio-ohjelmointi Javalla
1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi
Javan perusteita. Janne Käki
Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).
Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki
Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin
Mikä yhteyssuhde on?
1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String
Taulukot. Jukka Harju, Jukka Juslin 2006 1
Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti
Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:
Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int
Ylläpitodokumentti. Boa Open Access. Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Ylläpitodokumentti Boa Open Access Helsinki 2.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari
812341A Olio-ohjelmointi Peruskäsitteet jatkoa
812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää
Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006
TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa
4. Luokan testaus ja käyttö olion kautta 4.1
4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään
Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma
1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja
9. Periytyminen Javassa 9.1
9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.
Tietokannat II -kurssin harjoitustyö
Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), [email protected] Azad Hajipour (72187), [email protected] 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.
11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen
Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Testausraportti Orava Helsinki 5.5.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Juhani Bergström Peter
Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys
Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty
Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti
Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi
Java-API, rajapinnat, poikkeukset, UML,...
Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)
Hakemistojen sisällöt säilötään linkitetyille listalle.
Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi Java-kielellä komentoikkunaa (komentotulkkia, komentoriviä) simuloiva olioperustainen ohjelma. Hakemistojen sisällöt säilötään linkitetyille listalle. Työ
Ontologiat merkitysten mallintamisessa: OWL. Eeva Ahonen
Ontologiat merkitysten mallintamisessa: OWL Eeva Ahonen 1.11.2004 Semanttinen tieto käsitemallit ihmisillä sisäiset mallit maailmantieto tarvitaan tekstin tulkitsemiseen tietokoneelle esim. sanat vain
Java kahdessa tunnissa. Jyry Suvilehto
Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,
Rajapinta (interface)
1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä
Sisällys. 11. Rajapinnat. Johdanto. Johdanto
Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.
Käyttöohje. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Käyttöohje Boa Open Access Helsinki 5.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari Heikkinen
Luokat ja oliot. Ville Sundberg
Luokat ja oliot Ville Sundberg 12.9.2007 Maailma on täynnä olioita Myös tietokoneohjelmat koostuvat olioista Σ Ο ω Μ ς υ φ Ϊ Φ Θ ψ Љ Є Ύ χ Й Mikä on olio? Tietokoneohjelman rakennuspalikka Oliolla on kaksi
Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();
Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio
Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla
Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,
Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)
Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely
Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely 1 Ominaisuudet Kun tutkimme työasemapohjaisia sovelluksiamme, tarvitaan joskus tietoa: mikä on käyttöjärjestelmä mikä on käytössä oleva
Sisältö. 22. Taulukot. Yleistä. Yleistä
Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä
TIETORAKENTEET JA ALGORITMIT
TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle
Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista
Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma
Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä
Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.
SÄHKE-hanke. Tekninen mallintamisen Siirtotiedoston metatietokuvaukset
04.02.2005 1 (15) SÄHKE-hanke Tekninen mallintamisen Versio ja pvm Laatinut Tarkpvm Tarkastanut Hyvpvm Hyväksynyt 2.0 / 04.02.2005 Anneli Rantanen 15.02.2005 Markus Merenmies 18.02.2005 Ohjausryhmä 04.02.2005
Sisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
1. Omat operaatiot 1.1
1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma
Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.
Arkkitehtuurikuvaus Käytössä olevat java-luokat: Kansio: /WEB_INF/classes/ - käännetyt luokat Kansio: /WEB_INF/src/ - lähdekoodi custom_pojos: Kurssi.java Java-luokka, jonka sisältö vastaa tietokannassa
Luento 12: XML ja metatieto
Luento 12: XML ja metatieto AS-0.110 XML-kuvauskielten perusteet Janne Kalliola XML ja metatieto Metatieto rakenne sanasto Resource Description Framework graafikuvaus XML Semanttinen Web agentit 2 1 Metatieto
Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä
Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely
18. Abstraktit tietotyypit 18.1
18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
7. Oliot ja viitteet 7.1
7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin
8. Näppäimistöltä lukeminen 8.1
8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)
Listarakenne (ArrayList-luokka)
Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle
Metodien tekeminen Javalla
1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi
Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.
Harjoitustyö 1 Harjoitustyö Tehtävä: ohjelmoi olioperustainen sokkeloseikkailu peli Javakielellä. Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen
Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:
1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri
Ohjelmointikielet ja -paradigmat 5op. Markus Norrena
Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja
6 XML-työkalut 1. 6 XML-työkalut
6 XML-työkalut 1 6 XML-työkalut XML:n periaatteiden tutustumisen jälkeen on helpompi tutustua XML-dokumenttien käsittelyyn ja katseluun suunniteltuja työkaiuja. XML:n yleistymisen pahin pullonkaula on
Tietokannat II -kurssin harjoitustyö
Tietokannat II -kurssin harjoitustyö Olli Opiskelija (123), [email protected] Maija Mallioppilas (321), [email protected] 13.3. 2007 1 Sisältö 1 Tietokannan kuvaus 3 1.1 Tietokannan rakenne..................................
Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie
Ylläpitodokumentti Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Helsinki 16.7.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti
Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito
Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito Henri Kinnunen, Seppo Tompuri, Tero Malkki, Matti Heiskanen, Tommi Rönkönharju, Tuomas Valkeapää Sisällysluettelo 1. Alkusanat.2 2. Asennusohje..2 3.
Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto
Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
9. Periytyminen Javassa 9.1
9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat
2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)
2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi
T Henkilökohtainen harjoitus: FASTAXON
T-76.115 Henkilökohtainen harjoitus: FASTAXON Suunnittelumallit Group: Muuntaja Pentti Vänskä 52572W 2 1. Toteutus Tämä henkilökohtainen harjoitustyö käsitteli suunnittelumallien (Design Patterns) käyttöä
812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton
2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.
on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä
LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen
CSV - XML ohjelman käyttöohje
CSV - XML ohjelman käyttöohje Käynnistä ohjelma CSC_Virta_Julkaisut_ToXMLConverter.exe CSV-XML muunnos tapahtuu etenemällä ohjelmassa järjestyksessä 1. -> 6. ylhäältä oikealle: Perustoimintoja voi suorittaa
Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä
Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat
Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet
Metodit Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin return; -lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua Metodi voi palauttaa alkeistyypin tai olion Tällöin
Ohjelmointi 2 / 2010 Välikoe / 26.3
Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään
Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa
Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1 Oliot ja luokat Javaohjelmoinnissa Vesa Laakso 22.9.2012 Sisällysluettelo Sisällysluettelo... 1 Johdanto... 2 1. Luokka... 2 2. Olio... 2 3. Luokan
XML prosessori. XML prosessointi. XML:n kirjoittaminen. Validoiva jäsennin. Tapahtumaohjattu käsittely. Tapahtumaohjattu käsittely.
XML prosessointi Miten XML dokumentteja luetaan ja kirjoitetaan XML prosessori lukee ja välittää XML dokumentin sovellukselle. Se sisältää entieettikäsittelijän (mahdollisesti) XML jäsentimen Sovellus
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka
Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3
Uutisjärjestelmä Vaatimusmäärittely Versio 1.3 Sisällys 1 Muutoshistoria... 4 2 Viitteet... 4 3 Sanasto... 4 3.1 Lyhenteet... 4 3.2 Määritelmät... 4 4 Johdanto...5 4.1 Järjestelmän yleiskuvaus... 5 4.2
Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.
1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).
14. Poikkeukset 14.1
14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.
T2V2 Vaaratilanneilmoitussanomakuvaus
Versio: 0.3 Muokattu: 23.6.2008 2(10) SISÄLLYS 1 Tarkoitus...3 1.1 Rajaus...3 1.2 Dokumentaatio...3 2 Tietojen esitystavat...3 2.1 Numeerinen tieto...3 2.2 Päivämäärät ja kellonajat...3 2.3 Totuusarvot...4
ITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.
Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.
TIETOKANTA MERIKOTKIEN SEURANTAAN Käyttöohje Versiohistoria: Versio Päivämäärä Kuvaus Tekijä 1.0 11.12.2007 Ensimmäinen luonnos Janne Piippo 2.0 13.12.2007 Virallinen verio Janne Piippo HELSINGIN YLIOPISTO
A274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
M. Merikanto 2012 XML. Merkkauskieli, osa 2
XML Merkkauskieli, osa 2 Esimerkki: XML-dokumentti resepti maitokaakao
Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang
Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman
Salasanojen turvallinen tallentaminen KeePass ohjelmalla
Salasanojen turvallinen tallentaminen KeePass ohjelmalla KeePass on vapaasti saatavilla oleva, avoimen lähdekoodin ohjelma, jonka tarkoituksena on auttaa salasanojen hallinnassa. Tämä KeePass ohje on päivitetty
