Introduktion til XML Schema

DTD'er, Document Type Definition, har indtil videre været måden at definere XML-data på. I maj måned færdiggjorde World Wide Web-konsortiet den færdige specifikation for XML Schema, som vi gennemgår i denne artikel.

XML-følgeteknologier

XML har en mængde følgeteknologier, som standardiserer løsninger på ofte forekommende problemer i forbindelse med anvendelsen af XML. De vigtigste af disse teknologier er XSLT, der definerer transformering af XML-dokumenter til nye XML-dokumenter, og teknologierne XPath, som beskriver hvorledes man kan navigere rundt i XML-dokumentets træ, XPointer og XLink som beskriver hyperreferencer i XML-dokumenter, og XML Namespaces som beskriver, hvorledes forskellige XML-vokabularier kan indlejres imellem hinanden i samme dokument.

Fælles for alle disse teknologier er, at de er defineret som XML, hvilket jo er ret oplagt. Men når man skal definere et XML-dokuments syntaks og semantik har man indtil i sommers været henvist til DTD'er - Document Type Definitions. DTD'er benytter en ganske anden formulering end XML, og derfor har der naturligt nok været efterspurgt en XML-teknologi, der kan definere XML-sprog.

Hvorfor DTD
Der er to krav til XML-dokumenter: De skal være velformede (well-formed), og de skal være gyldige (valid). Ved velformethed forstås, at syntaksen opfylder reglerne for XML. Det er regler som følgende: XML-mærker må ikke overlappe, XML-mærkernes navne er case-sensitive (store og små bogstaver er signifikante), enkelt-stående mærker skal afsluttes med en skråstreg sidst i mærket. Disse regler gælder for alle XML-dokumenter, uanset hvilket vokabularium de benytter.

Derudover skal et XML-dokument også være gyldigt: Det skal overholde de regler, som det konkrete vokabularium kræver. Det er ting som mærkernes navne, hvor mange gange de kan optræde, i hvilken sammenhæng de kan optræde med mere.

Formålet med DTD'er

Formålet med DTD'er og XML Schemas er oplagt. De definerer, hvorledes et XML-sprog er opbygget, og dermed kan man sikre sig, at data er repræsenteret på den rigtige facon. På den måde ved man, at XML-data passer ind i en underliggende applikation. Mere konkret specificerer DTD'er og XML Schema to ting: Dokumentets struktur og elementernes datatype.

En meget simpel DTD-definition kan for eksempel se sådan ud:

<!DOCTYPE  [
  <!ELEMENT Bogliste (Bog)+>
  <!ELEMENT Bog (Titel, Forfatter, ISBN)>
  <!ELEMENT Titel (#PCDATA)>
  <!ELEMENT Forfatter (#PCDATA)>
  <!ELEMENT ISBN (#PCDATA)>
]>

Ovenstående DTD definerer et XML-sprog, hvis rod-element er Bogliste, som består af en eller flere Bog-elementer. Hver enkelt Bog-mærke består så af et Titel-mærke, et Forfatter-mærke og et ISBN-mærke. De enkelte mærker består af #PCDATA, som betyder Parsed Character Data, hvilket blot betyder tekststrenge. Et XML-dokument defineret ved ovenstående DTD kunne for eksempel se sådan ud:

<Bogliste>
  <Bog>
    <Titel>Homepage Usability</Titel>
    <Forfatter>Jakob Nielsen</Forfatter>
    <ISBN>0-7357-1102-X</ISBN>
  </Bog>
  <Bog>
    <Titel>XML i praksis</Titel>
    <Forfatter>Jakob Kristiansen</Forfatter>
    <ISBN>87-7843-424-6</ISBN>
  </Bog>
</Bogliste>

XML Schema: Derfor
DTD'er har nogle svagheder. For det første er der ikke nogen grund til at benytte et selvstændigt sprog med egne regler til at definere XML-sprog. XML er mindst lige så velegnet til formålet, og så behøver man ikke to sprog.

Derudover mangler DTD'er en god understøttelse af datatyper. Man kan for eksempel ikke definere, at et givet element må indeholde heltal mellem 1 og 10. I XML Schemas er der 44 datatyper som udgangspunkt, og derudover kan man definere sine egne datatyper.

XML namespaces

XML namespaces
En anden fordel ved XML Schemas er, at de sammenkobler dokumenterne med deres definition. Et XML Schema definerer ikke bare hvorledes XML-dokumentet skal se ud, men definerer også et navnerum, XML namespace. Det kan benyttes til at blande forskellige forskellige vokabularier. Herunder er et eksempel, hvor navnerummet RDF, som specificerer metadata, er blandet med navnerummet dc, som definerer enkelte, kontekst-specifikke metadata.

<rdf:RDF
  xmlns:rdf="http://www.w3.org/TR/WD-rdf-syntax#"
  xmlns:dc="http://purl.org/dc/elements/1.0/">
  <rdf:Description
  about="http://www.pcworld.dk/Default.asp
  ?ArtikelID=2705">
   <dc:Title>Metadata giver
   masser af mening</dc:Title>
   <dc:Creator>Tania Andersen</dc:Creator>
  </rdf:Description>
</rdf:RDF>

I rod-mærket defineres de to navnerum med en URI, en generaliseret webadresse, som peger på det sted på nettet, som definerer navnerummet. Navnerum er en særdeles stærk funktion i XML, da man ellers skulle definere et nyt Schema eller DTD, hver gang man ønsker at blande mærker fra forskellige sprog. Det lægger også op til genbrug af andres løsninger, så hjulet ikke skal genopfindes hver gang, behovet opstår.

Ved hjælp af XML Schemas kan man skabe en formel sammenhæng i mellem navnerum og dokument.

Fra DTD til Schema

Fra DTD til Schema
De flere muligheder i XML Schema betyder også, at definitionerne bliver lidt mere fyldige. Vores simple Bogliste-DTD fra før kunne repræsenteres således i XML Schema:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               targetNamespace="http://www.boglister.dk"
               xmlns="http://www.boglister.dk"
               elementFormDefault="qualified">
   <xsd:element name="Bogliste">
      <xsd:complexType>
        <xsd:sequence>
           <xsd:element ref="Bog" minOccurs="1"
           maxOccurs="unbounded"/>
        </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <xsd:element name="Bog">
      <xsd:complexType>
        <xsd:sequence>
           <xsd:element ref="Titel" minOccurs="1"
           maxOccurs="1"/>
           <xsd:element ref="Forfatter" minOccurs="1"
           maxOccurs="1"/>
           <xsd:element ref="ISBN" minOccurs="1"
           maxOccurs="1"/>
        </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <xsd:element name="Titel" type="xsd:string"/>
   <xsd:element name="Forfatter" type="xsd:string"/>
   <xsd:element name="ISBN" type="xsd:string"/>
</xsd:schema>

Schemaet er væsentligt mere omfangsrigt end DTD'en, men også mærkbart mere læsevenligt. Det første mærke, der defineres, er bogliste. Det er af typen complexType, som er mærker, der indeholder indlejrede børne-mærker. Af definitionen læses, at mærket <Bogliste> består af mindst et <Bog>-mærke. Dette angives med attributterne minOccurs og maxOccurs. Ved at læse videre ses, at et <Bog>-mærke også er af typen complexType, altså indeholder børne-mærker. Det ses af et <Bog>-mærke består af de tre mærker <Titel>, <Forfatter> og <ISBN>, der hver skal optræde netop én gang inden i et <Bog>-mærke.

De tre vigtigste mærker i XML Schema er <element>, som definerer et enkeltstående mærke. Dernæst er der mærket <complexType> som angiver et mærke med indlejrede børne-mærker. Det tredie mærke <simpleType>, som ikke optræder i eksemplet herover, definerer en type ud fra en af de indbyggede typer, som XML Schema tilbyder. I eksemplet herover benyttes string-typen nederst i schema-definitionen, hvor de tre mærker Titel, Forfatter og ISBN defineres.

Læs videre
Websitet Xfront.com har en glimrende, omfangsrig PowerPoint-introduktion med masser af eksempler, og den kan i parentes bemærket også læses i StarOffice.

XML Schema hører hjemme hos World Wide Web-konsortiet, og der kan man finde specifikationen og mange links til ressourcer vedrørende XML Schema.

Læses lige nu

    Annonce

    Forsvarsministeriets Materiel- og Indkøbsstyrelse

    Cyberdivisionen søger en IT-supporterelev til lokal IT på Flådestation Frederikshavn

    Nordjylland

    Patent- og Varemærkestyrelsen

    Infrastrukturspecialist - byg bro mellem cloud og datacenter

    Københavnsområdet

    Politiets Efterretningstjeneste

    Sektionsleder til IT Porteføljestyring i PET

    Københavnsområdet

    Netcompany A/S

    Microsoft Operations Engineer

    Københavnsområdet

    Computerworld Events

    Vi samler hvert år mere end 6.000 deltagere på mere end 70 events for it-professionelle.

    Ekspertindsigt – Lyt til førende specialister og virksomheder, der deler viden om den nyeste teknologi og de bedste løsninger.
    Netværk – Mød beslutningstagere, kolleger og samarbejdspartnere på tværs af brancher.
    Praktisk viden – Få konkrete cases, værktøjer og inspiration, som du kan tage direkte med hjem i organisationen.
    Aktuelle tendenser – Bliv opdateret på de vigtigste dagsordener inden for cloud, sikkerhed, data, AI og digital forretning.

    Digital transformation | Frederiksberg

    Roundtable: AI i drift – fra eksperimenter til ansvar, værdi og kontrol

    AI-initiativerne breder sig hurtigt, men skaleringen halter. Kun hver fjerde virksomhed har flyttet en større del af sine AI-eksperimenter i produktion. Computerworld samler en udvalgt kreds af CIO’er og digitale beslutningstagere til et...

    Sikkerhed | Online

    Det du glemmer i Azure - men aldrig on-prem: Sådan genfinder du kontrollen

    Undgå dyre fejl i Azure. Få styr på udfasede services, skjulte omkostninger og governance. Lær, hvordan Reserved Instances, Azure Hybrid Benefit og de rette styringsmekanismer giver mere værdi, lavere omkostninger og en mere robust Azure-platform....

    Se alle vores events inden for it

    Navnenyt fra it-Danmark

    Martin Grooss Carpentier, Software Architect hos Kamstrup, har pr. 29. juni 2026 fuldført uddannelsen Master i it, linjen i softwarekonstruktion på Aarhus Universitet via It-vest-samarbejdet. Færdiggjort uddannelse
    Elbek & Vejrup A/S har pr. 15. august 2026 ansat Anne-Sofie Andreasen som Project Manager i Projekt & Service. Hun skal især beskæftige sig med ledelse og koordinering af projekter og serviceopgaver. Hun kommer fra en stilling som konsulent med fokus på digitale løsninger hos XFLow. Hun er uddannet cand.it. i IT, Kommunikation og Organisation. Hun har tidligere beskæftiget sig med analyse, udvikling, test og implementering af løsninger samt udarbejdelse af brugervejledninger. Nyt job

    Anne-Sofie Andreasen

    Elbek & Vejrup A/S

    Norriq Danmark A/S har pr. 1. juni 2026 ansat Nikolaj Henrik Pieter Jansen som Junior Consultant. Han skal især beskæftige sig med at understøtte vores konsulenter med praktiske og analytiske opgaver på diverse kundeprojekter. Han kommer fra en stilling som Digital Advisor & Account Manager hos Twentyfour. Han er uddannet hos IT-Universitetet i København. Han har tidligere beskæftiget sig med salg og projektstyring. Nyt job

    Nikolaj Henrik Pieter Jansen

    Norriq Danmark A/S

    Norriq Danmark A/S har pr. 2. marts 2026 ansat Sarah Strøyer Hove som Consultant ERP. Hun skal især beskæftige sig med de nyeste teknologiske muligheder sammen med forretningsprocesserne. Hun kommer fra en stilling som Business Controller hos NGI A/S. Hun er uddannet hos Professionshøjskolen UCN som markedsføringsøkonom og International Handel og Markedsføring. Hun har tidligere beskæftiget sig med lager og logistik. Nyt job

    Sarah Strøyer Hove

    Norriq Danmark A/S