XHTML - Etendebla Hiperteksta Marklingvo

3. Diferencoj kompare kun HTML 4

Devigaj markoj

Komencaj kaj finaj markoj por la elementoj <head> kaj <body> estas devigaj. En HTML oni povis ilin, laux certaj reguloj, subkompreni, sed tio ne eblas en XHTML.

Minusklaj markoj kaj atributoj

Cxiuj nomoj de elementoj kaj atributoj havas minusklan formon, kaj devas esti gxuste tiel skribataj. Antauxe eblis mem elekti lauxplacxe la usklecon, sed XML postulas distingadon inter minuskloj kaj majuskloj. Do, nepre <body>, ne <BODY> nek <Body> aux simile, nepre <p>, ne <P>, nepre <td rowspan="2">, ne <TD ROWSPAN="2"> nek <td ROWSPAN="2">, k.t.p.

Oni notu, ke ankaux stilfolio (ekz. CSS), kiu indikas la stilon de XHTML-dokumento, lauxe uzu minusklajn nomojn por nomi la stiligatajn elementojn.

Elementoj ne povas interplektigxi

Komencmarkoj kaj finmarkoj de elementoj devas aperi en logika ordo. Se ekz. <strong>-elemento trovigxas ene de <em>-elemento, kaj la komencmarko <strong>, kaj la finmarko </strong> devas esti ene de la <em>-elemento.

Malgxusta Gxusta
<em>teksto <strong>teksto teksto</em></strong> <em>teksto <strong>teksto teksto</strong></em>
<a>vorto <em>vorto</a> vorto</em> <a>vorto <em>vorto</em></a> <em>vorto</em>

Efektive misinterplektigxo estis erara jam en HTML, sed estis tamen praktike tolerata de multaj TTT-legiloj. Sed XHTML estos uzata en multaj programoj kaj aparatoj, kiuj simple ne akceptos tiajn erarojn.

Devigaj finmarkoj

Cxiuj elementoj, kiuj povas havi enhavon, devas havi finmarkon, kiu fermas la elementon. En HTML tiaj finmarkoj estis libervolaj por pluraj elementoj, sed jam en HTML estis konsilinde fermi ankaux tiajn elementojn por eviti problemojn en iuj legiloj.

Malgxusta en XHTML Cxiam gxusta
<p>Unua alineo <p>Unua alineo</p>
<p>Dua alineo <p>Dua alineo</p>

Multaj alkutimigxis rigardi <p>-markojn kvazaux dividilojn inter alineoj. Fakte <p> neniam estis tia dividilo, sed markilo por komenco de alineo.

Fermo de malplenaj elementoj

Iuj elementoj estas malplenaj. Ekz. <br> (en HTML) markas finon de linio, sed post <br> ne sekvas teksto aux io alia, kiu estas parto de la <br>-elemento. La <br>-marko mem konsistigas la tutan elementon. Simile estas pri <img>, <meta> kaj kelkaj aliaj elementoj. En XHTML ankaux tiaj malplenaj elementoj devas esti eksplicite fermataj. Tio povas okazi aux per finmarko tuj post la komencmarko (ekz. <br></br>) aux per / antaux la fina > de la komencmarko laux XML-reguloj (<br />):

HTML XHTML
<hr> <hr />
<br> <br />
<meta ...> <meta ... />
<input ...> <input ... />
<param ...> <param ... />
<img src="bela.jpg"> <img src="bela.jpg" />

Rimarku 1: Cxi-antauxe estas spaceto antaux cxiu finanta /. Tia spaceto tute ne estas necesa laux la reguloj de XHTML kaj XML. Antauxe tia aldona spaceto estis rekomendinda por ke ankaux tre malnovaj TTT-legiloj komprenu la kodon. Sed nun praktike cxiuj tiuj malnovaj TTT-legiloj estas formortintaj, kaj sekve tiaj aldonaj spacetoj estas nuntempe tute superfluaj.

Rimarku 2: Kiel menciigxis cxi-antauxe, ankaux eblas uzi plenajn finmarkojn por malplenaj elementoj (ekz. <hr></hr>). Nunaj TTT-legiloj tamen ne bone komprenas tiun varianton, kaj se oni volas konservi kongruon kun HTML-legiloj, oni do evitu tion preferante <hr /> k.t.p.

Rimarku 3: Se elemento, kiu povas havi enhavon (ekz. <p>) okaze estas malplena, oni povas en XHTML kaj XML gxin skribi per unu memfermigxanta marko, ekz. <p/> aux <p />. Tio tamen ne funkcias en malnovaj TTT-legiloj, kaj oni do skribu ekz. <p></p>, se oni deziras kongruon kun tiuj legiloj.

Neripetado de atributoj

En XHTML oni ne rajtas ripeti atributojn ene de elemento.

Malbona Bona
<p class="io" class="ioalia"> <p class="io">

(Se oni volas doni plurajn klasnomojn al unu elemento, oni skribu cxiujn nomojn ene de unu sama “class”-atributo. Ekz.: <span class="io ioalia">. Estu tiam spacetoj inter la klas-nomoj. Oni tamen sciu, ke iuj malnovaj TTT-legiloj malbone komprenas tiajn indikojn pri pluraj klasnomoj.)

Bonformeco

“Bonformeco” estas grava baza nocio en XML. La cxefaj kondicxoj, por ke dokumento estu bonforma, estas la jxus klarigitaj reguloj kontraux erara interplektigxo de markoj, pri gxusta fermado de elementoj, kaj pri neripetado de atributoj.

XHTML-dokumento devas antaux cxio esti bonforma. En iuj kuntekstoj bonformeco estas suficxa kondicxo por ke la dokumento povu esti traktata. Ankaux aliaj reguloj gravas, sed la reguloj pri bonformeco estas la plej bazaj kaj plej obeendaj. La bonformecoreguloj estas komunaj al cxiuj formoj de XML. Aliaj XHTML-reguloj estas proprajxoj de XHTML. Efektive bonformeco estas sekvinda ankaux en ordinaraj HTML-pagxoj, cxar iuj TTT-legiloj tiam pli gxuste kaj pli facile komprenas la kodon.

Devigaj citiloj

Valoroj de atributoj devas skribigxi kun citiloj. En HTML iuj tiaj valoroj devis esti citataj, aliaj povis aperi sen citiloj. En XHTML la regulo estas pli simpla: Cxiuj valoroj estu citataj. Oni povas lauxplacxe uzi citilojn duoblajn ("...") aux unuoblajn ('...'):

HTML XHTML (kaj HTML)
<img ... border=0> <img ... border="0" />

Minimumigitaj atributoj ne eblas

En HTML oni povis uzi simpligitan, “minimumigitan”, formon de iuj atributoj, kies valoroj estas nomataj “buleaj”. En XHTML oni povas uzi nur la plenan formon de tiaj atributoj.

Cxiuj koncerncaj atributoj estas tiaj, kiuj povas havi nur unu solan valoron, kiu krome estas identa al la nomo de la atributo mem. Temas ekz. pri la atributo "selected" (de <option>-elementoj). La sola valoro por "selected" estas "selected"! La plena formo estas do selected="selected", kaj la simpligita formo estas selected (sen egalsigno kaj sen citiloj).

HTML XHTML (kaj HTML)
<option ... selected> <option ... selected="selected">
<input type="checkbox" ... checked> <input type="checkbox" ... checked="checked" />
<ul compact> <ul compact="compact">

La enhavo de <script> kaj <style>

Ene de la elementoj <script> kaj <style> oni devas en XHTML eviti tiajn signojn, kiuj havas specialan signifon en HTML kaj XHTML, nome la signojn "<" kaj "&". Laux la principoj de XML oni povas tiujn signojn uzi ene de <script> kaj <style> nur se oni aldonas komence kaj fine de la elementenhavo specialajn indikilojn, kiuj montras, ke la enhavo ne interpretigxu laux HTML-reguloj (komenca “<![CDATA[” kaj fina “]]>”). Ekz.:

<script type="text/javascript">
  <![CDATA[
    document.write("<b>Jen misinterpretebla teksto.</b>");
  ]]>
</script>

Tiujn specialajn indikilojn tamen apenaux komprenas malnovaj TTT-legiloj, kaj tial necesas anstatauxe elturnigxi per aliaj rimedoj, se oni volas, ke ankaux tiaj legiloj komprenu. La plej simpla rimedo estas meti la enhavon de tiaj elementoj en eksterajn dosierojn, ekz. js-dosierojn por Javaskripta kodo, kaj css-dosierojn por kaskadaj stilfolioj. Gxenerale tio estas bona uzo cxiuokaze. Ekz.:

<script type="text/javascript" src="javaskripto.js"></script>

<link rel="stylesheet" type="text/css" href="stilfolio.css" />

id anstataux name

En HTML oni povis uzi la atributon name por nomi dokumentopartojn, kiujn oni volis referenci en ligiloj (per #-simbolo). Oni povis ankaux uzi id por tiu celo. En XHTML oni tamen uzu nur id por tiaj referencoj.

HTML XHTML (kaj HTML)
<a name="loko">...</a> <a id="loko" name="loko">...</a>
<a href="#loko">...</a> <a href="#loko">...</a>

Rimarku, ke la valoro de id-atributo devas esti unika ene de unu dokumento. Ne povas esti du elementoj kun la sama valoro por id en unu dokumento.

Numeraj signoreferencoj

En HTML oni povis skribi numerajn signoreferencojn kaj dekume, ekz. &#229;, kaj deksesume, ekz. &#xe5;, &#XE5;. En la deksesuma formo oni povis uzi komencan “x” (minusklan) aux “X” (majusklan) egale (gxi indikas, ke temas pri deksesuma numero). En XHTML oni uzu nepre nur minusklan “x”. Oni do skribu nur &#xe5; aux &#xE5;. Deksesumajn ciferojn literformajn (A, B, C, D, E, F) oni povas plu skribi minuskle aux majuskle lauxplacxe. Estas cxiuokaze rekomendinde resti cxe la dekuma skribo de tiaj signoreferencoj, cxar iuj malnovaj legiloj ne komprenas la deksesuman skribon. Sed se oni servas XHTML-on kiel veran XML-on, oni ja povas uzi la deksesuman skribon, cxar tiajn pagxojn komprenas cxiuokaze nur modernaj legiloj.

Indikado de lingvo

En HTML oni povis indiki la uzatan lingvon (homan lingvon) de tuta dokumento aux de unuopaj elementoj. Tion oni faris per la atributo lang, ekz. <body lang="eo"> (indikas Esperanton). En XHTML oni tamen uzu xml:lang por la sama celo. Por kongruo kun malnovaj legiloj, oni uzu ambaux atributojn samtempe, ekz. <body xml:lang="eo" lang="eo">.

MIME-tipoj «

Kiam servilo sendas HTML-an dokumenton al legilo, gxi cxiam anoncas antauxe, per t.n. “HTTP-cxapo”, kiaspecan dokumenton gxi sendas, per indikado de t.n. MIME-tipo. Por montri, ke temas pri HTML-dokumento, servilo sendas la jenon:

Content-type: text/html

La servilo samtempe povas anonci ankaux la signokodon uzatan en la dokumento, ekzemple:

Content-type: text/html; charset=UTF-8

Content-type: text/html; charset=iso-8859-1

Se la dokumento estas verkita laux XHTML 1.0, kaj se gxi estas verkita por kongruo kun malnova HTML (laux la konsiloj cxi tie), oni povas gxin servi tute same (kun la sama HTTP-cxapo). Tio funkcias tre bone.

Oni povos servi XHTML-ajn dokumentojn al programoj, kiuj ne bezonas tian kongruon kun la pasintaj formoj de HTML. Oni povos servi XHTML-on kiel XML-on - eble ecx enmiksante en la XHTML-an kodon aliajn specojn de XML (ekz. MathML por matematikaj formuloj). Se oni elektas servi XHTML-on kiel veran XML-on, oni uzu jenan indikon en la HTTP-cxapo:

Content-type: application/xhtml+xml

Eblas tiamaniere servi XHTML-dokumentojn al cxiuj modernaj TTT-legiloj. Tio signifas praktike al cxiuj legiloj krom versioj 5 - 8 de Esplorilo (nur ekde versio 9 Esplorilo kapablas trakti tiajn pagxojn.

Ekzistas nun ankaux pli nova versio de XHTML: versio 1.1. En tiu versio oni plene forlasis la kongruon kun malnova HTML, kaj la afero ruligxu plene XML-e. Se oni elektas uzi XHTML-on 1.1, oni devas servi siajn pagxojn kiel application/xhtml+xml (aux kiel application/xml).

Dosiersufiksoj «

Estas kutimo doni al HTML-dosieroj la nomsufikson .html (aux la mallongan formon .htm). Principe oni rajtas uzi cxian ajn sufikson, sed multaj serviloj estas agorditaj por rekoni la MIME-tipon laux la dosiersufikso. Plej ofte ili auxtomate anoncas text/html, se la sendota dosiero havas la sufikson .html aux .htm. Tial, se oni volas servi XHTML-dokumentojn kiel ordinaran HTML-on, oni normale plu uzu la kutimajn sufiksojn. Tre multaj tamen supozas, ke oni devas sxangxi al .xhtml. Plej multaj serviloj tamen tute ne scias, kion signifas la sufikso .xhtml, nek kian MIME-tipon ili anoncu por tia dosiero. Ili tiam eble sendas ian gxeneralan tipon, ekz. text/plain (= plata teksto), kaj la TTT-legiloj tiam ecx ne provas trakti la dokumenton kiel HTML-on, sed simple montras la nudan kodon. (Iuj legiloj tamen provas mem diveni, ke temas pri HTML, sed tio principe estas miskonduto. Ili sekvu la anoncitan MIME-tipon.)

Do, se oni mem povas agordi, kiel la servilo traktu diversajn dosiersufiksojn, oni povas arangxi la aferon lauxplacxe, ekz. ekuzante la sufikson .xhtml, sed normale oni simple restu cxe la tradiciaj sufiksoj .html kaj .htm. Se oni estonte volos ekservi la dokumentojn kiel application/xhtml+xml, oni devos versxajne mem iel agordi la servilon, ke gxi tiun MIME-tipon anoncu.

Rimarku, ke en la reto estas uzataj plej diversaj sufiksoj cxe TTT-dokumentoj, ekz. .php, .js, .cgi, .asp... Normale ili cxiuj tamen servigxas kun la MIME-tipo text/html, cxar la koncernaj serviloj estas agorditaj por tion fari. La uzata sufikso mem ne gravas. Gravas nur la MIME-tipo, kiun la servilo anoncas.

Tamen, se oni havas (X)HTML-dokumenton en sia propra komputilo, kaj gxin legas rekte de la disko, sen interveno de servilo, tiam la uzata nomsufikso povas esti grava. En tiaj okazoj la operacisistemo ofte uzas la nomsufikson por rekoni, cxu temas pri (X)HTML aux pri alia speco de dokumento. Se la operacisistemo ne rekonas la dokumenton kiel (X)HTML-on, oni eble devas mem aux sxangxi al alia sufikso, aux instrui al la operacisistemo la signifon de la uzata sufikso. Pri tio ne ekzistas gxeneralaj reguloj aux principoj. Cxiu operacisistemo havas siajn proprajn metodojn kaj tradiciojn.