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>