XML

XML KOULUTUSTA VUONNA 2008

Kysy myös tuotekohtaisia koulutuksia, kuten Altova XMLSpy tai Cladonia Exchanger.

Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi !
IT-koulutuksen asiantuntijasi, Koulutus- ja konsultointipalvelu KK Mediat

 

Esimerkki case: online luettelo pt.4

XML skeema tietokannan rakenteesta

Tietokannan rakenteen kuvaamiseksi XML-datan avulla joudumme hahmottamaan säännöt, joiden avulla sovellus toimii/viestii. Esimerkiksi:

Sääntö 1: XML-datan avulla kuvattavia tietokantoja on täsmälleen yksi kappale.
Teknisesti on mahdollista, että saman XML-dokumentin kautta kuvattaisiin useita eri tietokantoja, mutta tässä tapauksessa rajoitumme tasan yhteen kappaleeseen. Mikäli XML-datassa pyritään kuvaamaan nolla tai enemmän kuin yksi tietokanta, rikkoo se skeemassa määriteltyä sääntöä ja XML data ei ole enää validia.

Sääntö 2: XML-datan avulla kuvattavia taulukoita voi olla nollasta äärettömään lukumäärän
Tämä kuvastaa hyvin pitkälti tietokantojen toimintamallia. Useimmissa tietokannoissa on olemassa rajoitus taulukoiden lukumäärälle, mutta käytännössä tämä raja on niin korkea että vain erittäin harvat sovellukset sitä voivat saavuttaa.

Sääntö 3: XML-datan avulla kuvattavia taulukon kenttiä on oltava vähintään yksi, yläraja on ääretön.
Tämä kuvastaa hyvin pitkälti tietokantojen sisäistä toimintamallia. Useimmissa tietokannoissa taulukossa on oltava vähintään yksi kenttä, kenttien lukumäärä on rajattu mutta rajoitus on niin korkea että vain erittäin harvat sovellukset voivat sitä saavuttaa.

Sääntö 4: Elementtien ilmenemisjärjestys on pakotettu.
Tämä kuvastaa hyvin pitkälti tietokantojen sisäistä toimintamallia, eli tietokanta sisältää taulukoita, jotka sisältävät kenttiä. Sen sijaan kenttä-dataa ei saa sijoittaa esim. taulukoiden ulkopuolelle.

Sääntö 5: Kuinka asiat kuvataan XML-datassa.
Elementteinä vai attribuutteina, vai sekä että ? Tässä tapauksessa käytämme elementtejä kuvaamaan kannan erilaisia elementtejä, sekä attribuutteja kuvaamaan elementtien erinäisiä ominaisuuksia. Elementtejä ovat siis tietokanta (db), taulu(table) ja kentät (columns), ominaisuudet name (nimi), datatype (tietotyyppi), length (kentän pituus), pk (primary key, avainkenttä), unique (pitääkö olla yksilöllinen), default (oletusarvo), nulls (sallitaanko null-arvot), autoidentidy (kasvaako kentän arvo, siis laskuri), ja description (kuvaus) merkitään attribuuteilla tarvittaviin kohtiin. Elementeillä db ja table voi olla vain ja ainoastaan attibuutti name. Kunkin attribuutin ilmemenisen pakollisuudesta voimme tehdä tarvittavat säännöt erikseen.

Yo. suunnitteluvaiheen jälkeen vuorossa on tietenkin sääntöjen käytäntöönpano skeemakuvauksen avulla. Koska skeemojen kuvaamisessa käytettävä XSD-kieli on oma erillinen kokonaisuutensa josta voisi kirjoittaa kymmeniä sivuja, käydään asia tässä lävitse ao. koodiin upotettujen kommenttien avulla. Lisätietoa XSD-kielestä löytyy W3C:n sivuilta.

 <?xml version="1.0" encoding="UTF-8" ?>
 <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"  elementFormDefault="qualified">

  <!-- xsd:annotation mahdollistaa scheman kommentoinnin -->

  <xsd:annotation>
 <xsd:documentation>
Tämä schema määrittelee tietokantojen kuvauksessa  käytettävän perusrakenteen.</xsd:documentation>
 </xsd:annotation>

  <!-- Käyttämällä simpleType määrittelyä voimme luoda omia tietotyyppejä, joita  voimme periyttää -->

  <xsd:simpleType name="dataType">
 <xsd:annotation>
 <xsd:documentation>
Tyyppi dataType sisältää mahdolliset tietotyypit  kentille</xsd:documentation>
 </xsd:annotation>

  <!-- Käyttämällä restriction määrittelyä voimme määrätä tiettyjä reunaehtoja,  kuten tietotyypin, sallitut arvot jne -->

  <xsd:restriction base="xsd:NMTOKEN">
 <xsd:enumeration value="integer"/>
 <xsd:enumeration value="varchar"/>
 <xsd:enumeration value="datetime"/>
 <xsd:enumeration value="bit"/>
 <xsd:enumeration value="float"/>
 </xsd:restriction>

 </xsd:simpleType>

   <xsd:simpleType name="dataLength">
 <xsd:annotation>
 <xsd:documentation>
Tyyppi dataLength määrittelee kentän pituuden.  </xsd:documentation>
 </xsd:annotation>
 <xsd:restriction base="xsd:integer"/>
 </xsd:simpleType>



    <!-- Sitten alkaa varsinainen rakenteen kuvaus. Huomaa, että olemme joissain  elementeissä perittyäneet tyypin SimpleTypesta -->

   <xsd:element name="db">

   <xsd:complexType>
 <xsd:sequence>
 <xsd:element name="table" maxOccurs="unbounded">

  <xsd:complexType>
 <xsd:sequence>
 <xsd:annotation>
 <xsd:documentation>
Kenttä voi sisältää seuraavat attribuutit, name,  datatype, length, pk, description, fk, unique, autoidentity ja description.  Näistä kaikki muut paitsi autoid. ovat pakollisia. </xsd:documentation>
 </xsd:annotation>

  <xsd:element name="column" maxOccurs="unbounded">
 <xsd:complexType>
 <xsd:attribute name="name" type="xsd:string" use="required"/>
 <xsd:attribute name="datatype" type="dataType" use="required"/>
 <xsd:attribute name="length" type="dataLength" use="required"/>
 <xsd:attribute name="pk" type="xsd:boolean" use="required"/>
 <xsd:attribute name="description" type="xsd:string" use="required"/>
 <xsd:attribute name="default" type="xsd:string" use="required"/>
 <xsd:attribute name="fk" type="xsd:string" use="required"/>
 <xsd:attribute name="unique" type="xsd:boolean" use="required"/>
 <xsd:attribute name="nulls" type="xsd:boolean" use="required"/>
 <xsd:attribute name="autoidentidy" type="xsd:boolean" use="optional"/>

  </xsd:complexType>

  </xsd:element>
 </xsd:sequence>

  <xsd:attribute name="name" type="xsd:string" use="required"/>

  </xsd:complexType>
 </xsd:element>

  </xsd:sequence>

  <xsd:attribute name="name" type="xsd:string" use="required"/>

  </xsd:complexType>
 </xsd:element>

  </xsd:schema>

       

Koska me nyt tiedämme millainen rakenne on sallittu, voimme rakentaa XML- kuvauksen tietokannan rakenteesta:

 <?xml version="1.0" encoding="UTF-8"?> 

 <db name="dbStamps" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">  

 <table name="hammaste"> 

 <column name="h_id" datatype="integer" length="" pk="true" unique="true"  default="max + 1" nulls="false" autoidentidy="true" fk="" description="1"/>  

 <column name="h_vaaka" datatype="varchar" length="5" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Vaakahammaste,  esim.15"/> 

 <column name="h_pysty" datatype="varchar" length="5" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Pystyhammaste,  esim.15"/> 

 </table> 


  <table name="tyyppi"> 

 <column name="t_id" datatype="integer" length="" pk="true" unique="true"  default="max + 1" nulls="false" autoidentidy="true" fk="" description="123"/>  

 <column name="t_tyyppi" datatype="varchar" length="25" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk=""  description="Tyypin nimi, esim. juhlamerkki"/> 

 </table> 


  <table name="valuutta"> 

 <column name="va_id" datatype="integer" length="" pk="true" unique="true"  default="max + 1" nulls="false" autoidentidy="true" fk="" description="123"/>  

 <column name="va_yksikko" datatype="varchar" length="5" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk=""  description="Merkin valuutta, esim. mk"/> 

 </table> 


  <table name="varit"> 

 <column name="v_id" datatype="integer" length="" pk="true" unique="true"  default="max + 1" nulls="false" autoidentidy="true" fk="" description="123"/>  

 <column name="v_vari" datatype="varchar" length="25" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Julkaisun  vari, esim. lila"/> 

 </table> 


  <table name="julkaisut"> 

 <column name="j_id" datatype="integer" length="" pk="true" unique="true"  default="max + 1" nulls="false" autoidentidy="true" fk="" description="123"/>  

 <column name="j_vuosi" datatype="integer" length="" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="1975"/>  

 <column name="j_luettelonro" datatype="integer" length="" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk=""  description="990"/> 

 <column name="j_tyyppi" datatype="integer" length="" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="t_id" description="2"/>  

 <column name="j_vaakahammaste" datatype="integer" length="" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk="h_id"  description="5"/> 

 <column name="j_pystyhammaste" datatype="integer" length="" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk="h_id"  description="5"/> 

 <column name="j_aihe" datatype="varchar" length="50" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Julkaisun  nimi; esim. Hiihdon MM-kisat"/> 

 <column name="j_kuvaus" datatype="varchar" length="250" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk=""  description="Merkin kuva-aiheen lyhyt kuvaus"/> 

 <column name="j_nimellisarvo" datatype="varchar" length="10" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk=""  description="Merkin nimellisarvo, esim. 0,40 + 5"/> 

 <column name="j_valuutta" datatype="integer" length="" pk="false"  unique="false" default="" nulls="false" autoidentidy="false" fk="va_id"  description="Merkin valuutta, esim. 3"/> 

 <column name="j_vari" datatype="integer" length="" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="v_id" description="Merkin  väri(t)"/> 

 <column name="j_painos" datatype="integer" length="" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Julkaisun  painos"/> 

 <column name="j_ensipaiva" datatype="date" length="" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Ensipäivä,  esim. 15.5.1940"/> 

 <column name="j_arvopt" datatype="float" length="" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Arvo  postituoreena, esim. 2,50"/> 

 <column name="j_arvole" datatype="float" length="" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Arvo  leimattuna, esim. 2,50"/> 

 <column name="j_kuva" datatype="varchar" length="50" pk="false" unique="false"  default="" nulls="false" autoidentidy="false" fk="" description="Merkin kuvan  nimi / polku"/> 

 </table> 

  </db> 

    

Seuraavaksi tutustumme kuinka tietokantaan tallennettu data saadaan ulos XML-muodossa.

Tutustu artikkelin muihin osiin:
»»» XML »»»Projekticase (osa 1) : yleisesittely
»»» XML »»»Projekticase (osa 2): Tietokantakuvaus
»»» XML »»»Projekticase (osa 3): XML-kuvaus tietokannan rakenteesta
»»» XML »»»Projekticase (osa 4): XML skeema tietokannan rakenteesta
»»» XML »»»Projekticase (osa 5): Datan konvertoiminen tietokannasta XML-muotoon
»»» XML »»»Projekticase (osa 6): XML-skeema datalle
»»» XML »»»Projekticase (osa 7): XSL/XSLT-muunnos datalle

Tallenna tämä sivu kirjanmerkkeihin!

 

2kmediat.com, ©2000-2008 Koulutus- ja konsultointipalvelu KK Mediat.
Tekijänoikeuksia koskeva tiedonanto | Tietosuojalausunto | Sivukartta