XHTML
informasjon
oppdatert: 3. april 2012
XHTML
XHTML (eXtensible HyperText Markup Language) er formelt sett bare en oversettelse/omskrivning av HTML 4.01 spesikasjonen. HTML 4.01 er formelt beskrevet i SGML, men XHTML 1.0 er formelt beskrevet i XML. Dette betyr at et velformulert XHTML-dokument dermed tilfredstiller kravene til et XML-dokument. For at et HTML-dokument skal være et lovlig XML-dokument må det tilfedstille bestemte tilleggskrav som er summert i 11 punkter lenger ned i dette kapittelet. At XHTML er en XML-applikasjon innebærer at XML-moduler som SGV, XLink, XForm, XML Events, XFrames, MathML, XHTML Modularization etc, etterhvert ville helt eller delvis blitte en del av XHTML standarden. Flere av disse modulene er lite kompatible med HTML 4.1. W3C stoppet arbeidet med XHTML 2.0 i juli 2009 og bestemte i stedet å fokusere på utvikling av HTML5.

XHTML 1.0 definerer 3 ulike klasser av XHTML-dokumenter: Transitional, Strict og Framset. Det som skiller disse tre klassene er hvilke elementer og atributter som er lovlig å benytte innenfor dokumentet.

  • Transitional dokumenter kan innholde alle de noe over 90 elementene som er definert HTML 4.01.
  • Strict documenter innholder ikke elementer eller atributter som beskriver utsende, f.eks <font color="red">. CSS må benyttes til å beskrive hvordan elementene skal presenteres.
  • Frameset dokumenter innholder kun HTML 4.01 elementer som beskriver frameset.
I versjon XHTML 1.1 er alle elementer som er markert som "deprecated" i HTML 4.01 fjernet, se liste over HTML 4.01 elementer og hvilke som er markert "deprecated". Omforming av HTML-dokumenter til XHML Strict-dokument kan sammenfattes i følgende regler.

  1. Elementer må korrekt omslutte hverandre.
    • KORREKT:  <p<dette er en uthevet <em>paragraf</em></p>
    • FEIL:  <p<dette er en uthevet <em>paragraf</p></em>
  2. Alle navn på HTML elementer og atributter må skrives må små bokstaver.
  3. For ikke tomme elementer er slutt tagg påkrevet. F.eks:
    • KORREKT:  <p<paragraf</p><p<neste paragraf</p>
    • FEIL:  <p<paragraf<p<neste paragraf
  4. Atributt verdier må alltid skrives i anførsel tegn. Det valgfritt om en ønsker å benytte doble eller enkle ansførseltegn.
  5. Ikke lov å slå sammen verdi og atributt. F.eks:
    • KORREKT:  <option selected="selected" value="mitt valg"<mitt valg</option>
    • FEIL:  <option selected value="mitt valg"<mitt valg</option>
  6. Tomme elementer må enten ha slutt tagg eller elementet må avsluttes med />. F.eks <br />
  7. Blank tegn i begynnelsen og slutten av atributt verdier fjernes av parseren. Blanke tegn inne i atributt verdier bli komprimert til et blank tegn.
  8. script- og style-element er deklarert til å innholde #PCDATA. Dette medfører at < og & vil bli betraktet som start på tagger og referanse til entiteter. Ved å omslutte innholdet i CDATA vil medføre at innholdet ikke blir parsert. F.eks:
    • <script>
    • <![CDATA[
    • ...selve scriptet
    • ]]>
    • </script>
  9. Selv om det ikke går fram av XML beskrivelsen av XHTML så gjelder de samme begrensingene, som i HTML 4.01, med hensyn hvilke elementer som kan nestes inne i hverandre. F.eks kan ikke a-elementer innholder andre a-elementer. form-elementer kan ikke innholde andre form-elementer.
  10. Atributtet id kan inkluderes i alle XML-elementer. Dette har en helt spesiell betydning og kan benyttes til å referer til elementer. Hver element kan kun innholde et id-atributt. I HTML har name-atributtet blitt brukt i bl.a. i a- og input-elementer. I XHTML må name-atributtet erstattes av id-attributtet a-elementer og der det benyttes som pekere til deler av dokumentet. name-atributtet utgår i fremtidige XHTML-versjoner.
  11. Dokumentet må starte med XML versjonsdirektiv. Rot-elementet må innholde atributtet xmlns="http://www.23.org/199/xhtml". Det må være en DOCTYPE deklarasjon før rot elementet som referere til korrekt klasse dokumentet tilhører. I henhold til XHTML 1.0 er følgende DOCTYPE elementer lovlig:
    • <!DOCTYPE html PUBLIC "-//W#C/DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
    • <!DOCTYPE html PUBLIC "-//W#C/DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-transitional.dtd">
    • <!DOCTYPE html PUBLIC "-//W#C/DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-framset.dtd">
    Se webside om XML for generell forklaring av direktivene.
Når en jobber med XML-dokumenter er det to begreper som ofte dukker opp "velformulert" og "gyldig". Et velformulert XML-dokument tilfredstiller syntaksreglene til et XML-dokument. XML syntaks framkommer av 11 punktene ovenfor. Et gyldig (valid) XML-dokument kontrolleres i tillegg mot at det kun innholder bestemte forhåndsdefinerte elementer og atributter. I tillegg kan det være begrensninger med hensyn til hvilke verdier disse disse elementer og atributter kan tilordnes. Hvilke elementer,atributter, verdier samt deres syntaksregler kan beskrives ved hjelp av DTD eller XMLSchema, se vår webside om XML.

Det er mulig å foreta online validering av HTML- og XHTML-dokumenter på http://validator.w3.org. Teste gjerne XHTML-dokumentet i eksemplene under som har URL http://servlets.no/xhtml/a1.html og http://servlets.no/xhtml/b1.html, la både "Character Encoding" og "Document Type" på web-siden ha verdien "detect automatically".

For detaljer rundt XHML se standardene XHTML 1.0 og standardene XHTML 1.1. Arbeidet med XHMTL 2.0 ble stoppet i juli 2009 og istedet ble det bestemt at fremtiden webstandard skal være HTML5.

Nedenfor har vi oppdatert våre to eksempler fra kapittelet om CSS. HTML-koden er omskrevet til XHTML, i henhold til de 11 reglene over. Dokumenteten er nå gyldig i henhold til klassen Strict.

Eksempel: Form to mail
"Form to mail"-begrepet betyr at kundens bestilling mottas i en HTML-form og sendes pr. mail til leverandøren. I dette forenklete eksemplet fyller du kun inn din e-postadresse og en mail sendes til denne adressen. Skjemaet består av to sider. På side en fyller du inn din e-postadressen. Side to bekrefter hvor e-posten er sendt, trykk her for å teste (ingen data lagres hos oss).

Nedenfor er XHTML-koden til sidene 1. Side 2 innholder PHP-skript for utsendelse av mail og for dynamisk oppdatering av innholdet med oppgitt e-postadresse, trykk her for å se kode til side 2

PS: I henhold til XML-spesifikasjonen skal id-atributter erstatte name-atributter (se regel 10 nederst på siden) men for at flest mulig nettlesere skal kunne teste skjemaet er dette ikke utført.

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testskjema</title>
<link rel="stylesheet" type="text/css" href="/dokumentasjon/klient/xhtml/demo.css" media="screen" />
</head>

<body>
<form method="post" action="http://servlets.no/php/a2.php">
<p>
<span class="tekstAdvarsel">(demo)</span><br />
<span class="tekstOverskrift">Registreringsskjema side 1</span>
</p>

<table border="0" cellspacing="0" cellpadding="1" class="feltVerdi">
<tr>
<td class="feltLeder">
<span class="tekstLeder"> Din e-postadressse: </span>
</td>
<td>
<input type="text" size="30" name="epost" />
</td>
<td>
<input type="submit" value="registrer" name="send" />
</td>
</tr>
</table>

<p>
<span class="tekstAdvarsel">(demo)</span>
</p>

</form>
</body>
</html>

Eksempel: SQL-form
I dette eksemplet mottas også bestilling fra kunden i en XHTML-form, men nå plasseres orderen i en MySQL database. I dette forenklete eksemplet består ordreskjemaet av kun en side. Skjemaet har to knapper. En for å legge legge inn en ordrelinjer og en for å slette aller ordrelinjer i tabellen. Skjemaet er implementert i følgende serverprogrammerings-språk og og tilhørende skjema kan testes som følger:
Kode Testskjema
PHP trykk her for å teste