Tässä dokumentissa käsitellään HTML:n ja XHTML:n välisiä eroja käytännön tasolla, XHTML 1.0 -dokumenttien laatijoiden kannalta.
Käytännössä XML-ilmoitus on aina pakollinen, jollei käytetä UTF-8 tai UTF-16 -koodausta. Kätevintä on sisällyttää XML-ilmoitus valmiiksi mallidokumenttiin, välittömästi dokumentin ensimmäiseksi tiedoksi:
<?xml version="1.0" encoding="ISO-8859-1"?>
Jossa, XML-version lisäksi, ilmoitetaan käytettävän hyvin tuettua latinalaisaakkosto 1 -merkistöä, joka on suunniteltu kattamaan länsi- ja pohjoiseurooppalaiset kielet.
XML-ilmoituksen lisäksi merkistö kannattaa yhteensopivuussyistä ilmoittaa myös META-elementillä:
<meta
http-equiv="Content-Type"
content="text/html; charset=iso-8859-1" />
Lisätietoja XHTML 1.0 -spesifikaatiosta:
Yleisiä lisätietoja merkeistä, merkistöistä, niiden koodauksesta ja problematiikasta löytyy Datatekniikka ja viestintä -sivuston Merkit ja koodaukset -osasta, osoitteesta: http://www.cs.tut.fi/~jkorpela/merkit/index.html
XML-dokumenteissa isot- ja pienaakkoset ovat eri merkkejä, joten esim. <HTML> ja <html> ovat kaksi eri elementtiä ja vain jälkimmäinen kuuluu XHTML 1:een. Myös kaikki attribuutit ja niiden arvot, sekä yleensäkin kaikki mikä HTML:ssä voidaan merkitä merkistöriippumattomasti (isoilla, pienillä, sekalaisilla) merkitään XHTML:ssä pienaakkosilla.
HTML-dokumenteissa HTML-, HEAD- ja BODY-elementit voitiin jättää merkkaamatta. XHTML:ssä näiden merkkaamatta jättäminen ei ole sallittua. HTML-dokumenttien taulukoissa myös TBODY-elementti oli implisiittisesti mukana, vaikkei sitä olisi merkattukaan. XHTML:ssä taas TBODY on valinnainen elementti, eli se on mukana taulukon rakenteessa ainoastaan merkattuna.
XML-syntaksisääntöjen vuoksi kaikki elementit on merkattava päättyviksi. Konteinereiden kohdalla (esim. P, LI, TD) lopputagia ei saa jättää pois. Myös tyhjät elementit (ei-konteinerit) on päätettävä. Yhteensopivuussyistä tämä kannattaa tehdä " />" -notaatiolla (esim. <hr />, <br />) erottaen elementin nimen ja kauttaviivan välilyönnillä.
Attribuuttien minimointi ei ole sallittua. Esim. HTML:n minimoitu <input checked ... on maksimoitava muotoon:
<input checked="checked" ...
Kaikki attribuuttien arvot tulevat lainausmerkkien sisälle. Yhdenmukaisuus- ja yhteensopivuussyistä kannattaa käyttää kaksihipsuisia lainausmerkkejä, sekä välttää turhaa tyhjää tilaa arvojen sisällä.
Elementtien kielimerkinnät ilmoitetaan, sekä HTML:n LANG-, että XML:n XML:LANG -attribuuteilla, esim.:
<span title="Englanninkielinen esimerkki">
<i lang="en" xml:lang="en">English example</i></span>
XML-sääntöjen mukaan elementteihin viitataan ID-tunnisteattribuutilla, mutta yhteensopivuussyistä myös HTML:n NAME-attribuutti on edelleen sallittu. Käytä viittauksissasi kumpaakin, esim.:
<form name="lomake1" id="lomake1" ...>
PRE- SCRIPT- ja STYLE-elementteihin voidaan yhdistää preserve-arvolla varustettu XML:SPACE-attribuutti pyytämään XML-sovelluksia säilyttämään elementtien sisällön tyhjä tila, kuten rivinvaihdot ja muut tekstimuotoilut. Kts. esimerkkiä alempana SCRIPT-elementin yhteydessä.
Pienempi kuin -merkki (<) ja et-merkki (&) tulkitaan aina merkkauksen aluksi, joten ne eivät saa esiintyä sellaisenaan dokumentin merkkidatana. Nämä merkit eivät myöskään ole sallittuja upotetuissa scripteissä ja tyyleissä (SCRIPT- ja STYLE-elementtien sisältönä). Muualla kuin merkkauksessa esiintyvät kontrollimerkit tulee merkata kirjain- tai numeromerkkiviittauksilla. Dokumenttiin upotetut skriptit ja tyylit taas voidaan merkitä CDATA-notaatiolla, esim. seuraavasti:
<script type="text/javascript" xml:space="preserve">
//<![CDATA[
/* koodi tulee scriptitulkilta kommentoitujen
CDATA-merkintöjen väliin */
//]]>
</script>
Toinen ja kaikenkaikkiaan parempikin vaihtoehto on ulkoistaa scriptit ja tyyliohjeet erillisiksi tiedostoiksi. Lisätietoja koodin tuonnista SCRIPT-elementillä ja tyylien yhdistämisestä dokumenttiin.
Lisätietoja englanniksi XHTML 1.0 spesifikaatiosta: Differences with HTML 4 ja HTML Compatibility Guidelines, sekä yleisemmällä tasolla HTML and XHTML Frequently Answered Questions.