HTML

HTML určite pozná každý užívateľ internetu. Keď ako nič iné, tak aspoň ako príponu na konci internetových adries. Občas používané označenie „jazyk internetu“ je síce dosť nadsadené, o významnosti jeho úlohy pri masovom rozšírení internetu však nemožno pochybovať.

HTML (HyperText Markup Language) je formátom pre zápis údajov v čistom texte. Základnou myšlienkou je doplnenie samotného textu o takzvané tagy (tags), ktoré sú na rozdiel od XML pevne určené. Spočiatku popisovali formátovanie (napríklad hrubé, naklonené, väčšie/menšie písmo), neskôr aj obsah. Taktiež umožňujú doplniť do textu iné objekty, najčastejšie obrázky. Najvýznamnejšou novinkou, ktorú HTML prinieslo, boli takzvané „linky“ (links). To sú tie zvýraznené časti textu alebo obrázky, na ktoré keď kliknete, zobrazia inú stránku (určenú práve linkom). Vďaka tejto vlastnosti sa všetky stránky internetu dokopy nazývajú World Wide Web (WWW), čiže celosvetová pavučina.

Jednoduchá stránka v HTML môže vyzerať napríklad takto:
 <html>
    <head>
        <title>Názov stránky</title>
    </head>
    <body>
        <h1>Nadpis článku</h1>
        <p>Prvý odsek textu.</p>
    </body>
</html>

Komplikovanejšie HTML si môžete pozrieť, ak si dáte zobraziť zdrojový kód nejakej stránky, ktorú máte otvorenú v prehliadači. Netscape/Mozilla ho aj pekne farebne zvýraznia.

HTML malo hlavne zo začiatku veľmi „voľné“ pravidlá, mnohé tagy nemali ani presne definované správanie. Neskôr sa autor štandardu, skupina W3C, snažila túto chybu napraviť, ale už bolo neskoro. Autori oboch najznámejších prehliadačov HTML - Netscape Navigator a Internet Explorer - navyše pridali do HTML rôzne neštandardné tagy, ktoré sa značne rozšírili. Tak sa stalo, že v súčasnosti sú dosť bežné stránky „optimalizované pre prehliadač XY“, hoci to odporuje základnej myšlienke HTML: byť univerzálnym otvoreným formátom, ktorý umožňuje prezentovať údaje spôsobom prehliadateľným na ľubovoľnej platforme.

Práve tento fakt je hlavným dôvodom, prečo sa aktuálny štandard HTML, nazývaný aj XHTML, stále viac mení na XML. Cieľom je dosiahnuť stav, keď HTML (respektíve XML) bude popisovať iba údaje a na ich grafickú reprezentáciu sa budú používať štýly (viď ďalej).

HTML pôvodne nebolo určené na presné umiestňovanie grafiky, ale s príchodom komerčných stránok sa stále viac začalo používať aj na tento účel. „Zneužívali“ sa na to tagy, ktoré na tento účel neboli určené (najmä tabuľky), čo ešte viac prispelo k vzájomnej nekompatibilite prehliadačov. Najmä na pomoc v tomto prípade vznikol štandard pre takzvané štýly (styles), nazývaný Cascaded Style Sheets (CSS). Tie umožňujú presné umiestňovanie grafických a textových prvkov na stránke. Ešte nádejnejší je nový štandard XSL:FO.

Hoci nikto nemôže HTML uprieť zásluhu na rozšírení internetu a vzniku WWW, v dnešnej dobe je už zastaralým formátom. Aj keď si na to určite ešte nejaký čas počkáme, postupne ho nahradí XML. XHTML je len krokom na tejto ceste.

Najzávažnejším negatívom HTML je jednoznačne jeho vzájomne nekompatibilná podpora v rôznych prehliadačoch (viď vyššie). Aj keď to nie je priamo chyba samotného formátu, veľmi ho to ovplyvňuje.

V aktuálnej verzii je navyše už príliš komplikované a obsahuje viacero vlastností, ktoré sú zobraziteľné iba v grafických prehliadačoch. Hoci to na prvý pohľad nemusí vyzerať tak hrozne, stačí spomenúť ľudí s poruchami zraku alebo maličké obrazovky vreckových počítačov a mobilov...

Vytvárať internetový systém s HTML výstupom je už v dnešnej dobe dosť nerozumné. Kto chce byť pripravený na budúcnosť, mal by už teraz ako výstupný formát používať XML a z neho generovať HTML (čo je väčšinou dosť jednoduché). V budúcnosti bude potrebné len odstrániť ten posledný krok...

Pbatenghyngvbaf Lbh ner n bofreinag jro unpxre Vs Lbh jnag n wbo va bhe pbzcnal cyrnfr znvy gb gbhtuthl ng ci2p qbg fx Unir n avpr qnl
Work like hell, tell everyone everything you know, close a deal with
a handshake, and have fun.
		-- Harold "Doc" Edgerton, summing up his life's philosophy,
		   shortly before dying at the age of 86.
    function perr($msg, $level)
    {
        echo $msg;
    }

    function readcsv_get_entity($fh, $sep = ';')
    {
        $entity = array();
        $attr = '';
        $eoe = false;

        while((! feof($fh)) && (! $eoe))
        {
            $ch = fgetc($fh);
            switch($ch)
            {
                case "\r":
                    break;
                case "\n":
                    $eoe = true;
                case $sep:
                    array_push($entity, $attr);
                    $attr = '';
                    break;
                case '"':
                    $ch = '';
                    while((! feof($fh)) && $ch != '"')
                    {
                        $ch = fgetc($fh);
                        $attr .= $ch;
                    }
                    $attr = rtrim($attr, '"');
                    break;
                default:
                    $attr .= $ch;
            }
        }

        if(feof($fh) && ($entity || $attr))
        {
            array_push($entity, $attr);
        }
        elseif(feof($fh))
        {
            $entity = false;
        }

        return $entity;
    }

    function readcsv_parsecsv($filename)
    {
        $ret = false;
        $sep = ';';
        $line = '';
        $line_num = 0;
        $cells = array();
        $names = array();

        $fh = fopen($filename, 'r');
        if(! $fh)
        {
            perr('Failed to open file \''
                . $file . "'\n", 8);
        }
        else
        {
        $line = '';
        while(! feof($fh))
        {
        $entity = readcsv_get_entity($fh, $sep);

        if($entity)
        {
        if($line_num == 0)
        {
        foreach($entity as $name)
        {
            array_push($names, trim($name, '"'));
        }
        }
        else
        {
        foreach($entity as $index => $val)
        {
        if(isset($names[$index]))
        {
            $cells[$line_num][$names[$index]]
                = trim($val, '"');
        }
        else
        {
            array_push($cells[$line_num],
                trim($val, '"'));
        }                            
        }
        }
        $line_num ++;
        }
        }
        fclose($fh);
        }

        return $ret;
    }
        
    function perr($msg, $level)
    {
        echo $msg;
    }

    function readcsv_get_entity($fh, $sep = ';')
    {
        $entity = array();
        $attr = '';
        $eoe = false;

        while((! feof($fh)) && (! $eoe))
        {
            $ch = fgetc($fh);
            switch($ch)
            {
                case "\r":
                    break;
                case "\n":
                    $eoe = true;
                case $sep:
                    array_push($entity, $attr);
                    $attr = '';
                    break;
                case '"':
                    $ch = '';
                    while((! feof($fh)) && $ch != '"')
                    {
                        $ch = fgetc($fh);
                        $attr .= $ch;
                    }
                    $attr = rtrim($attr, '"');
                    break;
                default:
                    $attr .= $ch;
            }
        }

        if(feof($fh) && ($entity || $attr))
        {
            array_push($entity, $attr);
        }
        elseif(feof($fh))
        {
            $entity = false;
        }

        return $entity;
    }

    function readcsv_parsecsv($filename)
    {
        $ret = false;
        $sep = ';';
        $line = '';
        $line_num = 0;
        $cells = array();
        $names = array();

        $fh = fopen($filename, 'r');
        if(! $fh)
        {
            perr('Failed to open file \''
                . $file . "'\n", 8);
        }
        else
        {
        $line = '';
        while(! feof($fh))
        {
        $entity = readcsv_get_entity($fh, $sep);

        if($entity)
        {
        if($line_num == 0)
        {
        foreach($entity as $name)
        {
            array_push($names, trim($name, '"'));
        }
        }
        else
        {
        foreach($entity as $index => $val)
        {
        if(isset($names[$index]))
        {
            $cells[$line_num][$names[$index]]
                = trim($val, '"');
        }
        else
        {
            array_push($cells[$line_num],
                trim($val, '"'));
        }                            
        }
        }
        $line_num ++;
        }
        }
        fclose($fh);
        }

        return $ret;
    }