*————————-*
Hinar ógurlegu xhtml villur
Jæja, þá er vefþjóðin búin að taka við sér XHTML væðingin er í hámarki, allir vilja vera með. Þangað til að validateinu kemur, alls konar óskiljanlegar villur og andvökunætur eru nóg til þess að hrekja meðalamanninn í burt. <p>Nei, nei. En það hafa margir verið að spyrja spurninga í sambandi við XHTML validation. Og var ég beðin um að skrifa grein um þetta efni hér á huga, og ákvað ég að taka þeirri áskorun, safnaði saman algengustu villunum og reyni að útskýra hvernig má forðast þær eftir bestu getu.</p><p>Hér kemur svo listinn, hann er ekki tæmandi, og ef það er eitthvað sem ég gleymi, þá ef ég þekki ykkur, dissið þið mig fyrir það!</p><p>Þessi listi er yfir villur sem <a href="http://validator.w3.org“ target=”_blank">http://validator.w3.org</a> kemur með við að validata XHTML 1.0 strict.</p><p><br> <b>Fatal Error: no document type declaration; will parse without validation </b><br> Í XHTML verður að skilgreina af hvaða tegund skjalið er, hvort það sé HTML eða XHTML, hvaða version og af hvaða "styrkleika".<br> Þessu er bætt við í fyrstu línuna í skjalinu, á undan <html>.<br> "Strangt": <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><br> "Venjulegt" : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br> Ef notað er frameset: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"></p><p>Fólk verður bara að ákveða fyrir sjálft sig hvað það vill nota, sjálf nota ég strict, það er aðeins meira vesen, en þegar maður kemst upp á lag með það er það lítið mál. Svo er líka gott, ef maður er að fara validatea síðu sem er skrifuð í HTML 3.2, eða 4 að byrja á að validatea hana í transitional, og færa sig svo yfir í strict þegar maður er komin upp á lag með þetta allt saman.<br></p><p><b>Warning: No Character Encoding detected! To assure correct validation, processing, and display, it is important that the character encoding is properly labeled.</b><br> Það er betra að skilgreina hvaða stafasett er notað. Hið vestræna stafasett (sem við notumst við) heitir iso-8859-1.<br> Þessu er semsagt bætt við skjalið, í línuna eftir <!DOCTYPE><br> <?xml version="1.0" encoding="iso-8859-1" ?><br></p><p><b>Error: element "foo" not allowed here; check which elements this element may be contained within <br> </b>Tög verða að vera nestuð rétt, þ.e. <b><i>Foo</b></i> er ólöglegt, það verður að vera <b><i>Foo</i></b>, semsagt tögin verða að lokast í sömu röð og þau voru opnuð. <br> <br> Oft kemur þessi villa þegar verið er að vinna með töflur og form. Það var ákveðið "shitmix" að setja <form> tagið einhverstaðar inn í miðja töfluna til þess að fela marginið sem formið tekur með sér, það má sem sagt ekki. Það verður að opna <form> á undan töflunni, og loka því á eftir henni. Nú fer fólk að velta fyrir sér þessu blessaða margini sem er svo mikið hatað, en "Where there's will, there's a way" og eins og svo margt annað, þá er þessu reddað með CSS: <form style:"0px, 0px, 0px, 0px"> og vola, því vandamáli reddað.<br> Ef það er verið að vinna með mörg form á sömu síðunni verður að hafa hvert form inn í <td> og byrja þar nýja töflu ef maður vill.<br> Algeng tög sem maður óvart nestar vitlaust eru: form, td, tr, table, li, ul.</p><p> Ábending, ef maður indentar kóðan sinn vel (ég nota tvö space svo hann sjáist alltaf eins) þá verður mun einfaldara að finna svona vitleysur og koma í veg fyrir fleiri.<br></p><p><b>Error: end tag for "tr" omitted; end tags are required in XML for non-empty elements; empty elements require an end tag or the start tag must end with "/>" </b><br> Það verður að loka ÖLLUM tögum í XHTML, líka þeim sem taka ekkert með sér. Ef tög taka einhvað með sér, t.d umkringja texta þá er notuð þessi aðferð: <div>Texti</div>. Ef tögin taka aftur á móti ekkert með sér, t.d <br> þá er notuð þessi aðferð: <br />. Bilið á undan / er sett til þess að netscape skilji hvað maður er að gera, en er algjörlega samtkvæmt staðlinum.<br> Algengt er að fólk hafi tamið sér að loka ekki eftirfarandi tögum:<br> br, input, img, meta, option, li. Þar sem síðustu tvö taka eitthvað með sér en hefur ekki verið nauðsynlegt að loka hingað til.<br></p><p><b>Error: there is no attribute "language" for this element (in this HTML version)</b><br> Eftir að CSS kom til sögunar urðu mörg attribute óþörf í HTML og voru rudd úr vegi fyrir hið nýja og guðdómlega CSS. Í XHTML var þeim einfaldlega hent, og notkun þeirra bönnuð.<br></p><table border=“0” cellspacing=“0” cellpadding=“0” width=“438”> <tr> <td>Bannað attribute</td> <td>(mín) Lausn </td> </tr> <tr> <td>fyrir <b><body></b></td> <td> </td> </tr> <tr> <td>bgcolor</td> <td>endur skilgreina body í css.</td> </tr> <tr> <td>text</td> <td>endur skilgreina body í css.</td> </tr> <tr> <td>link</td> <td>nota css selector.</td> </tr> <tr> <td>vlink</td> <td>nota css selector.</td> </tr> <tr> <td>alink</td> <td>nota css selector.</td> </tr> <tr> <td>leftmargin</td> <td>endur skilgreina body í css.</td> </tr> <tr> <td>topmargin</td> <td>endur skilgreina body í css.</td> </tr> <tr> <td>marginwidth</td> <td>endur skilgreina body í css.</td> </tr> <tr> <td>marginheight</td> <td>endur skilgreina body í css.</td> </tr> <tr> <td>fyrir <b><td></b></td> <td> </td> </tr> <tr> <td>width</td> <td>nota myndir til þess að teyja á cellum.</td> </tr> <tr> <td>height</td> <td>nota myndir til þess að teyja á cellum.</td> </tr> <tr> <td>bgcolor</td> <td>nota class í css.</td> </tr> <tr> <td><img></td> <td> </td> </tr> <tr> <td>border</td> <td> endurskilgreina img í css.</td> </tr> <tr> <td>align</td> <td>nota töflur til þess að staðsetja myndir, eða layera.</td> </tr> <tr> <td>fyrir <b><form></b></td> <td> </td> </tr> <tr> <td>name</td> <td>er orðið að id, sjá hér að neðan.</td> </tr> <tr> <td>fyrir <b><script> </b></td> <td> </td> </tr> <tr> <td>language</td> <td>í staðinn fyrir language notar maður type.</td> </tr></table><p> Svo voru önnur sem var skipt um nafn á, s.s attributið "name" sem mikið var notað fyrir <form>,<a>,<div> of fleira, var skipt út fyrir "id", allir browserar skilja "id" (held ég allavegna) þannig að ykkur er óhætt að fara bara og replacea allt "name" fyrir "id".<br></p><p><b>Error: attribute values must be quoted in XML <br> Error: an attribute value must be quoted if it contains any character other than letters (A-Za-z), digits, hyphens, and periods; use quotes if in doubt </b><br> Öll attribute verða að vera innan gæsalappa.<br></p><p><b>Error: element "foo" not defined in this HTML version</b><br> Þegar XHTML staðalinn var þróaður, var ákveðið að taka svolítið til í HTMLinu, sem var orðið skuggalega yfirgripsmikið. Þá var ákveðnum tögum hennt út, fyrir sum komu ný, önnur voru tekin út fyrir CSS. Þetta eru tög sem sjást sjaldan í kóða þessa dagana, en ég hef heimilidir fyrir því að hugi.is stelist til þess að nota þau af og til. Þetta er vondur ávani, og sparar lítinn tíma til framtíðar. Ég hvet ykkur því að hætta að skrifa þessi löngu útdauðu tög, og fara að gera það sem er rétt og gott í staðinn.</p><p>Meðal þessara taga eru:<br> <font><br> <center><br> <isindex><br> <u></u></p><p>Önnur ástæða fyrir þessari villu getur verið að tögin séu skrifuð í hástöfum, sem er bannað samkvæmt XHTML staðlinum. Öll tög og attribute eiga að vera skrifup með í lágstöfum.<br></p><p><b>Error: end tag for element "foo" which is not open; try removing the end tag or check for improper nesting of elements <br> </b>Þetta segir nú eiginlega allt sem segja þarf. Þessi villa kemur þegar tagi er lokað sem hefur ekki verið opnað. Eða tögin eru vitlaust nestuð. Nú er bara að fara og lesa vel yfir kóðan, til þess að finna vitleysuna.<br></p><p><b>Error: required attribute "foo" not specified<br> </b>Sum tög hafa ákveðin grunn attribute sem verða að vera skilgreind. <br> <img>: tekur alltaf með sér alt. Þetta er gert fyrir tal-browsera, og fólk sem af einhverri ástæðu getur ekki séð myndir. Ef þið viljið ekki hafa alt, þá getið þið haft það tómt. alt="". <img> tekur líka með sér width and height, þetta er góð regla að temja sér til þess að gera síðurnar auðloadanlegri. Ef það er eitthvað vesen með þetta, og þið eruð að nota php (veit ekki hvort þetta er til í asp, og jsp) þá er til function sem hetir getImageSize("mynd.png") og skilar arrayi, í þriðja keyinu í arrayinu er svo geymdur textinn width="breidd myndarinnar" height="hæð myndarinnar".<br> <form>: tekur alltaf með sér action. þegar þið viljið ekki action, þá getið þið bara sett urlið á sjálfri síðunni í action, gerir sama hlutinn, jafnvel betur.<br> <script> og <style>: tekur alltaf með sér type.<br></p><p><b>Error: unknown entity "foo" <br> Error: reference not terminated by refc delimiter</b><br> Þegar XHTML rekst á & í texta býst hann við special character, eins og &nbsp;. Þegar við erum aftur á móti að nota & í urlum (?nafn=eg&simi=5556666) þá kemur villa, hún reynir að þýða special characterinn &simi og getur það náttúrulega ekki, einnig kemur villa því það vantar ; eftir special characternum. Þetta er leyst með því að í staðinn fyrir að sktifa & þá skrifum við special characterinn &amp; og allt rennur eins og skildi.<br></p><p><b>Error: missing a required sub-element of "foo" </b><br> Sum tög taka alltaf með sér undir tög, s.s <table> tekur með sér <tr> sem tekur með sér <td> og <select> tekur með sér <option>. Ef þessi villa kemur upp þá vantar undir tagið. <br></p><p><b>Error: value of attribute "foo" cannot be "foobaric"; must be one of "foobar", "foobarian", "tralli"<br> </b>Þessi villa kemur oftast þegar maður ruglar saman align og valign. Þetta er semsagt ekki rétt gildi á attributi fyrir tag :)<br> Svona til þess að sýna þetta þá má:<br> align fá "left", "center", "right", "justify", "char" og<br> valign fá "top", "middle", "bottom", "baseline".<br></p><p><b>Error: duplicate specification of attribute "foo"<br> </b>Að sjálfsögðu má ekki tvítaka attribute, þetta skeður samt af og til þegar maður er með mikið af attributum, eina leiðin til þess að leysa þetta er bara að ákveða hvað maður vill hafa og henda hinu út.</p><p></p><p></p><p></p><p>Vonandi hjálpar þetta eitthvað. Ég tók eftir því við þessi skrif mín hvað vantar íslensk orð fyrir þennan iðnað. Spurning um að einhver máljöfurinn setjist niður og finni íslensk orð fyrir: tag, attribute, special character o.s.frv.</p