Uttrycket välutformat dokument indtroducerades i XML och beskrivs i paragraf 2.1 i XML-rekommendationen ( http://www.w3.org/TR/REC-xml ). Det är välkänt att en stor majoritet av dokument som publiceras på Webben är en obscen korruption genererad av lika korrumperade redskap som i sin tur är skapade av folk vars kunskaper baserar sig på faktaböcker skrivna av författare som inte har de tillräckliga kunskaperna i ämnet. XML ställer detta till rätta. Dokument, eller texttrogna objekt eller databojekt som de heter, måste struktureras enligt fastställda kriteria. Dessa säger att ett databjekt måste vara välutformat för att klassas som XML-dokument. Man kräver att även www-klienter följer dessa regler och endast tolkar dokument som är välutformade.
Ett välutformat dokument följer till punkt och pricka de i DTDn fastställda reglerna. För att ett HTML-dokument ska överensstämma med XHTML som i sin tur är en applikation av XML måste struktur i HTML-dokumentet följa regler fastställda i XHML-specifikationen.
Följande regler gäller för välformulerade XHTML-dokument:
XHTML strict, XHTML transitional, XHTML frameset
. En validering kan göras på http://validator.w3.org/HTML
(såsom i HTML-dokument)HTML
bör innehålla attributet xmlns
vars värde som är en URI-referens som pekar till dokumentet innehållande listan på element och attribut namn, s.k. namnrymd XML- namespace. Ett sådant dokument finns på http://www.w3.org/1999/xhtmlXHTML 1.0 Strict, XHTML 1.0 Transitional
eller XHTML 1.0 Frameset.
UTF-8
eller UTF-16
XML-namnrymd - En metod att namnge element och attribut namn. Till exempel vilka tecken de får innehålla, hur många tecken de får innehålla och hur de ska markeras för att kunna åtskilja dem från den övriga texten.
URI Universal Resource Identifier identifierar källan, t ex ett specifikt dokument på en specifik adress. Det finns två typer av
URI
:URL
(Universl Resource Locator) ochURN
(Universal Resource Name).
Ett välformulerat XHTML 1.0-dokument börjar alltså:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="sv">
Observera:
XML-deklaration (första raden): används annan teckenuppsättning än den som är uppgiven ska attributvärdet UTF-8
ändras till en relevant teckenuppsättning eller del av den. Deklarationen rekommenderas, är dock frivillig.
Dokumenttyp-deklaration (andra raden): struktureras dokumentet enligt DTDn för XHTML 1.0 Transitional
ska deklarationen ändras till:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
struktureras dokumentet enligt XHTML 1.0 Frameset
ska deklarationen
ändras till
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"DTD/xhtml1-frameset.dtd">
HTML-elementet (tredje raden): attributeten lang
(language - språk) och xml:lang
är inte obligatoriska. Det är dock brukligt att uppge på vilket språk innehåll och attributvärden är skrivna. Är dokumentet skrivet på ett annat språk än det ovan uppgivna svenska, t ex engelska, ska attributvärdet
sv
ändras till en
(eller den språkkod som används).
Värden ska helst vara språkkoder som defineras i standarden ISO-639 (IANA - Internet Assigned Numbers Authority). Listan med språkkoder kan hittas på ( http://www.oasis-open.org/cover/iso639a.html ).
Observera att språkkod och landskod är inta samma kod. Sveriges landskod är se
.
Teckenuppsättningar - Numera använder man
UNICODE
(efterföljare tillASCII
).UNICODE
definierar mer än 40 000 tecken och är uppdelad i olika uppsättningar, bl aUTF-8
ochUTF-16
. Dessa två är standard och kommer att användas om attributet encoding utesluts.Om en annan uppsättning används måste attributet som definerar den vara, t ex:
encoding="iso-8879"
.Genom att skriva numeriska tecken-entiteter kan man få tillgång till hela uppsättningen. Entiteter bildas av tecknen
&
och # följd av en teckenkod och avslutas med ett semikolon, t ex ett svensktö
skrivsö
.Attributet
xmlns
- Resource Name (källa). Detta är ett standart XML-attribut för att identifiera XMLs namnrymd (se ovan).
Numera ställer man även krav på tillverkarna av www-klienter och kräver att deras produkter följer XHTML 1.0 rekommendationen och därmed tolkar samt validerar XHTML-dokument för dess välutformade struktur och överensstämmelse med den angivna DTDn. WWW-klienter får inte längre tillåta, till exempel, överlappande element. För trots att sådana element är förbjudna i SGML är de alltför ofta förekommande pga tolerans i dagens www-klienter mot felstrukturerade dokument.
Utöver de ovannämnda deklarationerna samt krav på xmlns-attributet tilldelat elementet HTML ska själva dokumentinstansen struktureras enligt angivna regler.
För att HTML-dokument ska överensstämma med XHTML-dokument måste de vara välutformade. Därför ska följande ändringar göras i dem.
Felfria dokument, dvs dokument som validerar mot den uppgivna DTDn kräver väldigt få ändringar. Andra måste först städas upp enligt följande regler:
I HTML är starttaggar på element vars början kan impliceras valfria, t ex <html>
, <head>
,
<body>
. Likaså är sluttaggar på element vars
termination underförstås valfria (minimization), t ex
</p>
, </td>
eller </li>
.
XHTML tillåter inga valfria taggar. Varje element måste börja med en starttagg och sluta med en korresponderande sluttagg.
<p>Fel
<p>...
<li>...
<td>...
<p>Rätt
<p>...</p>
<li>...</li>
<td>...</td>
I HTML saknar tomma element, t ex <img>
eller
<br>
en sluttagg. I XML och därmed XHTML måste alla
element avslutas. Element ska antingen avslutas med en korresponderande
sluttagg, t ex <br>
</br>
, eller ska
starttaggen avslutas med />
, t ex <br />
.
För närvarande, pga ojämnt support, rekommenderas den senare
metoden. Observera att även ett mellanslag innan snedstrecken bör
inkluderas - av samma orsak.
Fel
<link>
<img>
<hr>
Rätt
<link />
<img />
<hr />
HTML gör ingen skillnad på små eller stora bokstäver i
element- och attributnamn. Båda två, separat eller blandning av
dem, accepteras. I denna respekt är HTML case insensitive. XML
däremot och därmed XHTML är case sensitive.
<P>
och <p>
, till exempel, är två
olika taggar. Därför ska alla element- och attributnamn ändras
till små bokstäver
Fel
<P>...</p>
ALIGN
Rätt
<p>...</p>
align
HTML kräver att enbart attributvärden av typ string
literal (som det står), t ex +2
eller 50%
måste citeras. Värden av typ nametoken (som bara får innehålla namntecken), t ex 5
eller
align
är valfria att citera. I XML och därmed XHTML
måste alla värden citeras.
Fel
align=center
Rätt
align="center"
I HTML kan värden som är lika med attribut, s.k. boolska attribut,
uteslutas. I stället för att t ex skriva <OPTION
SELECTED=selected>
kan man enbart skriva <OPTION
SELECTED>
. I XML och därmed XHTML måste alla attribut,
inklusive boolska attribut tilldelas ett tillhörande värde.
Värdet ska citeras (se ovan).
Fel
<hr noshade>
Rätt
<hr noshade="noshade">
Samma regel gäller i HTML. Dessvärre tillåter dagens www-klienter överlappning. Denna tolknings tolerans är inte längre möjligt i varken XHTML eller XML. Det element som börjar elementsträngen måste även avsluta den, nästa i raden stängs näst sist, osv.
<element1><element2></element2></element1>
Inte heller får förälderelement, t ex p
, förekomma i sina barn, t ex font
.
Fel
<p><a><i> ...
</a></i></p>
<font><p> ...
</p></font>
Rätt
<p><a><i> ... </i></a></p>
<p><font> ... </font></p>
name
bör ersättas med
id
I HTML kan både attributet name
och id
användas för att definiera en s.k. fragment identifier, dvs identifierare av ett element eller dess del. I XML kan endast attributet id
användas. För bakåtkompatibilitets skull tillåter XHTML båda, attributet name är dock nedskrivet (garanteras ej i framtida versioner av XHTML). Under övergångsperioden kan båda dessa attribut användas. Till exempel
exempel <a href="..." id="foo"
name="foo">
...</a>
.
Observera att bara ett id
-attribut är tillåtet per elementtyp och dokument.
Nedskrivet
<a name="foo">...</a>
Rätt
<a id="foo">
eller
<a id="foo" name="foo">
script
och style
Innehåll av element style
och script
brukar
man skriva som kommentar för att gömma det i äldre www-klienter,
dvs mellan <!--
-och -->
eller mellan och-tecknet, &
. I XHTML och XML betraktas dessa tecknen som början av ett markord. Dessutom kan XML-parser ta bort kommentarens innehåll. Därför rekommenderar man att antingen använda externa skript och stilmallar eller gömma innehållet på det sätt som visas till höger och inte enligt den gamla modellen:
Använd externa stilmallar
<link rel="stylesheet" type="text/css" href="..." />
Eller göm
<style type="text/css">
<![CDATA[
... stildeklarationer ...
]]>
</style>
Multipla mellanslag och radbrytningar i attributvärden kan tolkas på olika sätt i olika www-klienter. Därför bör de undvikas.
Fel
type="text/
css"
Rätt
type="text/css"
&
-tecknet i attributvärden ska ersättas med
&
Och-tecknet i attributvärden, t ex i adresser som pekar till ett
skript ska ersättas med dess referensentitet &
.
Fel
user=eva&script
Rätt
user=eva&script
Allt det ovannämnda och lite till kan utföras på nolltid med olika redskap, bl a HTML Tidy. Programmet är gratis och kan nedladdas från http://www.w3.org/People/Raggett/tidy/.
HTML Tidy är inbygd i editorn HomeSite (http://www.allaire.com/). Observera dock att
programmet är äldre än specifikation och därför pekar till fel URI-referens. Denna referens ska bytas ut mot den ovan beskrivna, nämligen: xmlns="http://www.w3.org/1999/xhtml"
Validering av Webb-dokument kan jämföras med stavningskontrol av ordbehandlignsdokument. Ordbehandlingsdokumentens grammatik och stavning kontrolleras (jämförs) med det språk och till det korresponderade lexikon som man uppger att dokumentet var skrivet på.
På samma sätt jämförs Webb-dokument men terminologin är lite annorlunda. Grammatik- och stavningskontroll heter validation, lexikon heter DTD och applikation 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 dokument validerar om det är felfritt. Om det däremot inte överensstämmer med reglerna i DTDn validerar det inte. Man får då en lista på alla fel som måste rättas till.
Ofta orsakar ett fel många efterföljande fel - som 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.
Om dokumentet är felfritt, dvs det validerar, kan man "utmärka" det med denna ikon. Observera att samma ikon gäller för XHTML Strict, Transitional och Frameset.
W3C har en gratis Validation Service på ( http://validator.w3.org ).