Strukturen på ett XML-dokument

Välutformade dokument

Konceptet "välutformade dokument" kommer från matematik. Det går att skriva matematiska uttryck som till exempel 3 (+) = 4 + + - 5, men är detta uttrycket matematik? Nej. För att ett matematiskt uttryck ska ha något värde måste det vara välutformat, annars är det helt meningslöst.

XML-specifikationen introducerade begreppet välutformade dokument (well formed). (Förmodligen blev man riktigt trött på alla miljontals dåligt utformade HTML-dokument). Därför får inte ett dokument, eller textobjekt som det egentligen heter, betecknas som XML-dokument om det är inte välutformat. Man ställer även hårda krav på tillverkarna av www-klienter och kräver att deras applikationer endast bör tolka välutformade dokument.

Felutformat dokument, (saknar </title>): Välutformat dokument:

<meta-info>
<titel>De olika markeringsspråken
<skribent>Eva von Pepel</skribent>
</meta-info>

<meta-info>
<titel>De olika markeringsspråken</titel>
<skribent>Eva von Pepel</skribent>
</meta-info>

Felutformat dokument - exempel

Internet Explorer verkar tillämpa dessa regler någorlunda bra. Den har inbyggd en XML-tolk som "läser av " om dokumentet är välutformat och visar inte dokument som är felaktigt utformade.

Exemplet saknar sluttaggen </title>.

Felet påpekas och dokumentet visas inte.

Välutformade dokument är sådana dokument som följer XML-syntaxen så att en XML-behandlare kan förstå den (syntaxen). Välutformade dokument är behandlingsbara dokument. Ett välutformat dokument följer specifikationen. Trots det måste ett välutformat dokument vara giltigt. För att ett välutformat dokument ska vara giltigt måste det även följa DTDn.

XML-behandlare

XML-behandlare (parser, processor, tolkare, analyserare) är en programvara som bearbetar XML-syntaxen. Den separerar markord från data (text) och vidarebefordrar den till sin "samarbetspartner". Samarbetspartern är en annan programvara, en applikation, vars uppgift är att visa det färdigbehandlade dokumentet. XML-parsern talar om för applikationen, t ex Internet Explorer; hur syntaxen ska tydas.

Det finns två typer av XML-behandlare:

  1. en icke validerande XML-behandlare och
  2. en validerande XML-behandlare

En icke validerande parser analyserar enbart dokumentets syntax, dvs om dataobjektet motsvarar de kriteria som specificeras i begreppet "XML-dokument". (XML-dokument definieras som ett välutformat dataobjekt. Vad som är ett välutformat dataobjekt beskrivs i avsnittet "Regler för välutformade dokument").

Icke validerande parser
icke validerande parser

Även en validerande parser analyserar om dokumentet är välutformat - det är ju en förutsättning för att ett dataobjekt ska kunna kallas XML-dokument. Utöver detta analyserar den (validerar) om dokumentets grammatik överensstämmer med den i dokumenttyps-deklarationen uppgivna DTDn, m.a.o. den kontrollerar om dokumentet är strukturerat enligt de gällande reglerna eller, som man säger, kontrollerar dokumentets giltighet.

Validerande parser
validerande parser

artikel.xml måste struktureras enligt regler uppgivna i artikel.dtd för att vara giltigt.

Validering

Validering av XML- (och alla andra Webb-) dokument kan jämföras med stavningskontroll av vanliga ordbehandlingsdokument. Ordbehandlingsdokumentens grammatik och stavning kontrolleras (jämförs) med det språk och till det tillhörande lexikon som man uppger att dokumentet är skrivet på.

På samma sätt jämförs XML-dokument men terminologin är lite annorlunda. Grammatik- och stavningskontroll heter validation, lexikon heter DTD och applikationen som utför kontrollen heter validator. Att validera ett dokument betyder alltså att jämföra dess struktur med de i DTDn samlade reglerna. Man brukar säga att dokumentet validerar om det överensstämmer med den uppgivna DTDn. Om det däremot inte överensstämmer med reglerna i DTDn validerar det inte och är därmed ogiltigt. Man får då en lista med alla fel som måste rättas till. Ofta orsakar ett fel många efterföljande fel - som en kedjereaktion. Därför bör alltid det första felet rättas till först och sedan en ny validation utföras. Om felen finns kvar (nu bör listan vara märkbart kortare) rättas åter igen första felet ur den nya listan osv.

En validerande parser kan bl.a. laddas ner från http://www.alphaworks.ibm.com/tech/xml4j. På http://www.oasis-open.org/cover/xml.html#xmlSoftware finns en lista på tillgängliga parsrar, samt andra XML-redskap. Det går även bra att validera sina dokument på Webben. En lista på validerande parsrar som utför denna service finns på http://www.oasis-open.org/cover/check-xml.html.

Validering
http://www.stg.brown.edu/service/xmlvalid/

*

STG XML Validation kontrollerar om dokument är välutformat och om det validerar. Dokument kan finnas på nätet eller på det egna systemet. Observera att validatorn inte kan resolvera relativa länkar och därför måste hela sökvägen till DTDn uppges, dvs den måste börja med http:// eller C:\\\ - om dokumentet finns på partitionen C:.

Med denna validator kan även dokumentsdelar kontrolleras. Det är bara att kopiera och klistra.

Regler för välutformade dokument

Reglerna som beskrivs nedan, förutom regel nr 1 och 2, gäller även i HTML. Tyvärr respekteras de väldigt sällan av varken HTML-avläsare eller Webb-skapare. Till dessa regler bör även prologen som börjar ett välutformat dokument läggas till. Observera att det inte finns något krav på att inkludera den - under förutsättning att standardattributvärden gäller, dvs att det inte finns något behov att till exempel följa en viss teckenuppsättning - man förespråkar dock dess inklusion.

En annan regel som bör påminnas om är att det måste finnas ett och enbart ett rotelement från vilket alla andra element härstammar.

Regel 1

XML åtskiljer stora bokstäver från små, är case sensitive. <P> och <p> till exempel är starttaggar för två olika element.

Starttagg och sluttagg måste matcha varandra. <P> och </p>, till exempel, öppnar och stänger två olika element.

Rätt
<p>...</p>
Fel
<P> ... </p>
<Titel>...</TITEL>

Regel 2

I XML måste varje öppnat element, inklusive tomma element (se nästa regel), stängas med korresponderande sluttagg.

Taggar som är valfria i SGML/HTML, t ex </p> eller </li> är inte valfria i XML.

Rätt
<stycke>..</stycke>
<p>...</p>
<li>...</li>
<td>...</td>
Fel
<p>, <li>, <td>

Regel 3

XML kräver att även tomma element, element som historiskt (i SGML) saknar en sluttagg överhuvudtaget, stängs.

Tomma element är element som saknar innehåll, t ex br eller img. Br markerar det ställe där radbrytningen ska infogas. Img markerar det ställe där bilden ska infogas. Men inget av dem innehåller radbrytningen eller bilden - i sig själv.

Elementen stängs antingen som behållare, eller genom att man inkluderar "sluttaggen" i själva taggen. En tagg som används för uppmärkning av tomma element kallas tomelementstagg i XML. Observera mellanslaget före snedstrecket.

Rätt
<br></br> eller
<br />
<img ... />
<meta ... />
Fel
<br><img><meta>

Regel 4

Elementen måste vara korrekt nästlagda. Barn måste följa sina föräldrar men aldrig tvärtom. Om DTDn säger att font-element är barn till p-element kan inte font innehålla p.

I logiska språk är det lätt att även gissa sig till vilka element som är barn och vilka som är föräldrar. Ett stycke kan ju innehålla en font, t ex typsnitt, medan det är både logiskt och även praktiskt omöjligt för en font att innehålla ett stycke.(Just med denna regel slarvas det enormt i HTML.)

Rätt
<p><font></font></p>
Fel
<font><p></p></font>

Regel 5

Under inga omständigheter får taggarna överlappa varandra. Det element som börjar strängen stängs sist, det element som är näst sist i raden stängs näst sist osv.

<element1><element2></element2></element1>

(Även denna regel har fallit i glömska i HTML. Det kan man kanske tacka våra populära HTML-läsare för som med sin hjälpsamhet skapade en praxis "Ser det bra ut så är det bra".)

Rätt
<font><em></em></font><em><font></font></em>
Fel
<font><em></font></em>

Regel 6

Alla attribut måste tilldelas ett attributvärde.

<element attribut="attributvärde">

Värdet på ett antal SGML-attribut är lika med attributet själv. Värdet är då en boolsk variabel. Om attributet finns tolkas dess värde som sant, om det uteblir tolkas värdet som falskt. Till exempel:

<option selected> - attributet finns, värdet är sant, denna option är vald (selected) och tolkas som <option selected=selected>

<option> - attributet finns inte, värdet är falskt, denna option är ej vald

Då närvaro av själva attributet antyder att värdet är sant kan det uteslutas i SGML-dokument, dvs minimeras. Detta är ej tillåtet i XML.

Rätt
<option selected="selected">
Fel
<option selected><option selected=selected>

Regel 7

Alla attributvärden måste skrivas inom citattecken. Både dubbla och enkla citattecken kan användas.

(I HTML måste litterala atributvärden citeras, t ex <table width="100%"> medan citattecken i attributvärden som innehåller namntecken (nametoken) kan uteslutas. Detta är inte tillåtet i XML).

Rätt
<div align="center">
<div align='center'>
Fel
<div align=center>

Regel 8

XML tolkar och-tecknet, &, som indikation till en entitets-referens. Därför ska tecknet ersättas med sin symboliska eller numeriska referens om det används i andra sammanhang, dvs om det inte indikerar början av entitetsreferens.

(Tecknet får endast förekomma i markorden, kommentarer, processinstruktioner, CDATA-sektioner och i entitetsvärde i en intern entitetsdeklaration).

& ersätts med &amp; eller med &#38;

Regel 9

XML tolkar vänster vinkelparantes, <, som början av en tagg. Därför ska tecknet ersättas med sin symboliska eller numeriska referens om det används i andra sammanhang, dvs om det inte börjar en tagg.

(Tecknet får endast förekomma i markorden, kommentarer, processinstruktioner, CDATA-sektioner och i entitetsvärde i en intern entitetsdeklaration).

< ersätts med &lt; eller med &#60;

För att ett dataobjekt ska kunna kallas ett XML-dokument måste det vara strukturerat enligt alla ovannämnda regler. Inga slarv- eller andra fel är tillåtna. Dokument som inte överensstämmer med dessa regler är helt enkelt inte XML-dokument och ska inte läsas av XML-applikationen.

XML-dokument (enligt ovan) kan vara giltiga eller ogiltiga.

Giltiga XML-dokument är sådana dokument som validerar enligt en i dokumenttypsdeklarationen uppgiven DTD.

Ogiltiga XML-dokument är sådana dokument som inte validerar enligt en i dokumenttypensdeklarationen uppgiven DTD eller saknar en DTD överhuvudtaget - är DTD-löst.

Giltiga och ogiltiga dokument

Observera att ett giltigt dokument även måste vara välutformat. Ett dokument som enbart är välutformat behöver däremot inte nödvändigtvis vara giltigt.

När man säger "XML-dokument" menar man ingenting annat än ett välutformat dataobjekt. Endast dataobjekt som är välutformade kan betecknas som XML-dokument.

Dokument som är inte välutformade är heller inte XML-dokument, även om man inleder dem med en XML-deklaration.

Ett XML-dokument, dvs ett välutformat dataobjekt, kan vara giltigt. Dokumentet är giltigt endast om det överensstämmer med de regler som definieras i DTDn.

Ett XML-dokument, dvs ett välutformat dataobjekt, kan även vara ogiltigt. Dokumentet är ogiltigt om det inte överensstämmer med de regler som definieras i DTDn.

XML-dokument = Ett välutformat dataobjekt
Ej XML-dokument = Ett icke välutformat dataobjekt

Giltigt XML-dokument =Ett välutformat dataobjekt som dessutom validerar mot den angivna DTDn
Ogiltigt XML-dokument =Ett välutformat dataobjekt som ej validerar mot den angivna DTDn

För att ett dokument ska kunna kallas XML-dokument måste det alltså vara välutformat. Då det inte behöver vara giltigt behöver det inte heller överensstämma med en DTD. Om det inte behöver överensstämma med en DTD behövs det inte heller en sådan. Eller? Ändå spelar DTD en mycket väsentlig roll i XML och bör alltid användas.

Valid HTML 4.0!