Välformulerade dokument

Välformulerade XML-dokument

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.

Välformulerade XHTML-dokument

Följande regler gäller för välformulerade XHTML-dokument:

  1. Dokumenten måste överensstämma med (validera mot) en utav de tre bifogade dokumenttypdefinitionerna (DTD), XHTML strict, XHTML transitional, XHTML frameset. En validering kan göras på http://validator.w3.org/
  2. Rotelementet måste vara HTML (såsom i HTML-dokument)
  3. Rotelementet 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/xhtml
  4. ü Varje dokument bör innehålla en dokumenttypsdeklaration som pekar till en av de tre definitionerna, XHTML 1.0 Strict, XHTML 1.0 Transitional eller XHTML 1.0 Frameset.
  5. Det rekommenderas att varje XHTML-dokument även innehåller XML- dokumenttypsdeklaration (OBS! En sådan deklaration är frivillig i XML-dokument) men krävs då XML-dokumentet använder andra än standardteckenuppsättning 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) och URN (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:

Teckenuppsättningar - Numera använder man UNICODE (efterföljare till ASCII). UNICODE definierar mer än 40 000 tecken och är uppdelad i olika uppsättningar, bl a UTF-8 och UTF-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 &amp; och # följd av en teckenkod och avslutas med ett semikolon, t ex ett svenskt ö skrivs &#246;.

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.

Konvertering av HTML-dokument till XHTML-dokument

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:

Varje element måste börja med en starttagg och sluta med en korresponderande sluttagg.

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>

Även tomma element avslutas

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 />

Element- och attributnamn skrivs med små bokstäver

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

Alla attributvärden citeras

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"

Attributförkortningar (minimization) är ej tillåtna

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">

Element får absolut inte överlappa varandra.

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>

Attributet 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">

Elementen 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>

Undvik multipla mellanslag och radbrytningar i attributvärden

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 &amp;

Och-tecknet i attributvärden, t ex i adresser som pekar till ett skript ska ersättas med dess referensentitet &amp;.

Fel
user=eva&script

Rätt
user=eva&amp;script

Städredskap

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 dokument

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.

Valid XHTML 1.0 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 ).

Valid XHTML
1.0