XML
XML KOULUTUSTA VUONNA 2025
Kysy myös tuotekohtaisia koulutuksia, kuten Altova XMLSpy. Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.
XML:n rakenteen määrittely: DTD ja skeemat (XSD)
DTD ja XML-skeemat ovat formaatteja, joiden avulla määritellään XML-datan rakenne ja XML-dokumentissa käytettävissä olevat elementit ja attribuutit. DTD on vanhempi ja yksinkertaisempi legacy-teknologia, joka on ollut käytössä vuodesta 1986. XML-skeemat (XSD, schemat) tarjoavat nykyaikaisemman, joustavamman ja monipuolisemman tavan rakenteiden, tietotyyppien ja nimiavaruuksien määrittelyyn.
DTD
DTD (Document Type Definition) on historiallinen ratkaisu XML-dokumenttien rakenteen ja syntaksin kuvaamiseen. Se kehitettiin alun perin SGML-kielen ja varhaisten EDI-sovellusten tarpeisiin jo ennen XML:n yleistymistä. Tästä syystä sen soveltuvuus moderniin XML-kehitykseen on rajoittunut.
DTD:n avulla voidaan määritellä, millaisia elementtejä ja attribuutteja dokumentti saa sisältää, missä järjestyksessä ne esiintyvät ja miten ne liittyvät toisiinsa. Sen sijaan arvojen validointimahdollisuudet ovat hyvin rajalliset DTD:ssä. Elementtien merkitykset kuvataan usein erikseen luonnollisella kielellä, esimerkiksi kommentteina DTD-tiedostossa.
DTD soveltuu hyvin yksinkertaisiin XML-dokumentteihin ja tilanteisiin, joissa on tärkeää varmistaa yhteensopivuus vanhempien järjestelmien kanssa.
XML Skeemat
XML-skeema toimii samalla periaatteella kuin DTD, mutta tarjoaa huomattavasti monipuolisemmat kuvausmahdollisuudet. Skeemat ovat itsessään XML-muotoisia tiedostoja, joilla kuvataan toisen XML-datan rakennetta.
Skeemat tarjoavat tehokkaan tavan määritellä monimutkaisia tietotyyppejä, suorittaa yksityiskohtaista arvojen validointia ja periyttää tietorakenteita. Tämä mahdollistaa uusien, erikoistuneiden tietotyyppien luomisen ja niiden hyödyntämisen XML-sovelluksissa.
Esimerkki: XML-datan esittäminen selaimessa ja DTD:n käyttö
Seuraava esimerkki havainnollistaa, miten XML-dokumentin rakenne määritellään DTD:n avulla, ja kuinka tiedot voidaan esittää selaimessa CSS-tyylien tuella.
XML-tiedosto (projekti.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE artikkelidata SYSTEM "projekti.dtd">
<?xml-stylesheet type="text/css" href="projekti.css"?>
<artikkelidata>
<dokumentti otsikko="testi" kirjoittaja="Keijo Kortelainen" pvm="17.6.2000" tyyppi="webbisivu">
<kappale>Ensimmäinen kappale, jossa on jotain riittävän pitkää tekstiä...</kappale>
<kappale>Toinen kappale, jossa on jatkoa tekstille...</kappale>
<muistiinpanot>Dokumenttia päivitetään noin kerran kuussa.</muistiinpanot>
</dokumentti>
</artikkelidata>
DTD-määrittely (projekti.dtd):
<!ELEMENT artikkelidata (dokumentti)+>
<!ELEMENT dokumentti (kappale, muistiinpanot)>
<!ATTLIST dokumentti kirjoittaja CDATA #REQUIRED>
<!ATTLIST dokumentti pvm CDATA #IMPLIED>
<!ATTLIST dokumentti tyyppi CDATA #IMPLIED>
<!ELEMENT kappale (#PCDATA)>
<!ELEMENT muistiinpanot (#PCDATA)>
CSS-tyylit (projekti.css):
dokumentti {
display: block;
border: 4px solid black;
width: 50%;
font-family: Verdana;
}
kappale {
display: block;
margin: 0.5em;
}
muistiinpanot {
display: block;
background-color: red;
color: yellow;
margin: 1em;
font-weight: bold;
}
XML Schema -versio samasta esimerkistä
XML-dokumentti (projekti-schema.xml):
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="projekti.css"?>
<artikkelidata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="projekti.xsd">
<dokumentti otsikko="testi" kirjoittaja="Keijo Kortelainen" pvm="2000-06-17" tyyppi="webbisivu">
<kappale>Ensimmäinen kappale, jossa on jotain riittävän pitkää tekstiä...</kappale>
<kappale>Toinen kappale, jossa on jatkoa tekstille...</kappale>
<muistiinpanot>Dokumenttia päivitetään noin kerran kuussa.</muistiinpanot>
</dokumentti>
</artikkelidata>
XML Schema (projekti.xsd):
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="artikkelidata">
<xs:complexType>
<xs:sequence>
<xs:element name="dokumentti" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="kappale" type="xs:string" maxOccurs="unbounded"/>
<xs:element name="muistiinpanot" type="xs:string"/>
</xs:sequence>
<xs:attribute name="otsikko" type="xs:string" use="required"/>
<xs:attribute name="kirjoittaja" type="xs:string" use="required"/>
<xs:attribute name="pvm" type="xs:date" use="optional"/>
<xs:attribute name="tyyppi" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>