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.

KMD A/S

DevOps Engineer

Nordjylland

Aller Media A/S

Developer

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.

It-løsninger | Nordhavn

SAP Excellence Day 2026

Få konkrete erfaringer med S/4HANA, automatisering og AI i praksis. Hør hvordan danske virksomheder realiserer gevinster og etablerer effektive SAP-løsninger. Vælg fysisk deltagelse hos SAP eller deltag digitalt.

Infrastruktur | København

Datacenterstrategi 2026

Denne konference bidrager med viden om, hvordan du balancerer cloud, on-premise og hybrid infrastruktur med fokus på kontrol, compliance og forretning.

Sikkerhed | Aarhus C

Identity Festival 2026 - Aarhus

Er du klar til en dag, der udfordrer din forståelse af, hvad Identity & Access Management kan gøre for din organisation? En dag fyldt med indsigt, inspiration og løsninger, der sætter kursen for, hvordan vi arbejder med IAM i de kommende år.

Se alle vores events inden for it

Navnenyt fra it-Danmark

ChangeGroup ApS har pr. 12. januar 2026 ansat Morten Benn som Administrerende direktør. Han kommer fra en stilling som Partner hos Nosco. Nyt job

Morten Benn

ChangeGroup ApS

Forte Advice har pr. 19. januar 2026 ansat Karoline Lotz Jonassen som Head of Business Design. Karoline skal især beskæftige sig med business design, og hvordan kunder strategisk innoverer eller arbejder med nye forretningsområder. Karoline kommer fra en stilling som Future Commerce Lead hos IMPACT Commerce. Nyt job

Karoline Lotz Jonassen

Forte Advice

Simple Agency Group A/S har pr. 1. januar 2026 ansat Allan Bo Christiansen, 38 år,  som CCO. Han skal især beskæftige sig med kommercielle partnerskaber og digitalisering af koncernens aktiviteter. Han kommer fra en stilling som Director for eCommerce & Customer Platforms hos Atea A/S. Han er uddannet MSc in economics and business administration, Strategy, Organisation and Leadership. Han har tidligere beskæftiget sig med drift og udvikling af større eCommece teams med fokus på kundeoplevelsen. Nyt job

Allan Bo Christiansen

Simple Agency Group A/S

Idura har pr. 1. januar 2026 ansat Martin Ingolf Broberg, 43 år,  som webmaster. Han skal især beskæftige sig med at få idura.eu til at spille på alle digitale tangenter og sikre, at siden genererer nye leads. Han kommer fra en stilling som team lead hos Danmarks Radio. Han har tidligere beskæftiget sig med blandt andet at stifte og lede et analyseteam i DR med fokus på web og lyd. Nyt job