Tag v HTML, XML a v iných jazykoch typu *ML

S pojmom „tag“ sa určite stretnete vždy, keď sa hovorí o jazykoch typu „Markup Language“. Spoznáte ich podľa toho, že ich skratka takmer vždy končí písmenami „ML“. Typickými príkladmi sú HTML a XML. Tagy sú ich základnou črtou, možno ich nazvať aj príkazmi týchto jazykov. S trochou nadsázky sa dá povedať, že akýkoľvek jazyk tohto typu je len čistý text, do ktorého boli pridané tagy.

Tag je časť textu, ohraničená znakmi „<“ a „>“. Ak potrebujete tieto znaky použiť v texte priamo, musíte ich zapísať špeciálnym spôsobom „&lt;“ respektíve „&gt;“. Tagy môžu obsahovať aj parametre vo forme názov parametra, znak „=“ a hodnota. Tag neobsahujúci znak „/“ je otvárací, tag vo forme „</...>“ zatvárací a „<.../>“ uzavretý. (Pre pochopenie viď príklady.)

Jednoduchý tag, ktorý v HTML spôsobí, že text sa zobrazí hrubým písmom:
 V tejto vete budú <b>tieto tri slová</b> hrubým písmom. 
Na základe parametra „align“ (zarovnanie) nastaveného na „right“ (vpravo), by tento kód v HTML zobrazil túto vetu zarovnanú na pravý okraj:
 <p align="right">Tento text bude zarovnaný doprava.</p> 
Na mieste tagu „br“ by sa v HTML vytvoril nový riadok. Keďže uzatvárací pri „br“ nemá význam (lebo nemá účinok od-do, ako napríklad hrubé písmo), je priamo uzavretý. Takéto niečo v klasickom HTML nie je potrebné, ale XML (a teda aj XHTML) to už vyžaduje.
 Toto bude na prvom riadku<br/>a toto už na druhom. 

Pre použitie tagov netreba veľa pravidiel, väčšina z nich je viditeľná už z uvedených príkladov. Hlavne si treba dávať pozor, aby ste nepoužili znaky „<“ a „>“ - tie treba v texte i v atribútoch tagov nahradiť takzvanými entitami, konkrétne „&lt;“ respektíve „&gt;“.

V HTML sa neraz môžete stretnúť so zápisom atribútov bez úvodzoviek (napríklad „<font color=white size=5>“). Aj keď to aktuálny štandard HTML ešte dovoľuje, veľmi sa odporúča tento zápis nepoužívať. Jednak môžete ľahko spraviť chybu a jednak XML (a teda ani XHTML) už takýto zápis nedovoľujú - hodnota každého atribútu, dokonca aj keď je číselná, musí byť uzavretá v úvodzovkách.

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
                                   Tábor

                             Pohádečka malúčká

     Když jsme byli dětmi, poslouchali jsme s utajeným dechem o skrytých
pokladech. Představ si jen, milý čtenáři, že na Tvé denní procházce po
táborských ulicích by se před Tebou otevřela stěna a že bys videl haldy
rubínů, démantů apod., a že by Ti třpytem a jasem až přecházel zrak. Nikdo
by Ti to nevěřil. Vždyť se známe. Náš všední život už je takový, že
závistí, pomluvami a láskou bychom se snědli. Kde pak poklad! --
     A vidíte, je! Já ho náhodou našel. V stmělé uličce. Z rozjařených
oken vtékala do tmy hudba plné svěží mladosti a ptačích trilků.
Neodolal jsem. Vešel jsem.
     Ve dvorance hudební školy sedělo na desítky ptáčků, kteří jásali,
zpívali, zurčeli. Safíry, smaragdy, opály doužkovaly nad těmi dětmi,
které rozezpívávaly kolem sebe rozkošnou poesii. V jiném světle se octl
najednou člověk, prost všedního rmutu a do očí se drala vlahá vlna. Tolik
krásna a štěstí proudilo z nadšení těch mladých, že člověk věří, že bude
jednou lépe. Když takhle mladá srdéčka dovedou klečet před branou Umění,
snad jednou uteče před dobrem a krásou lidské sobectví. -- -- ...
                                         -- Týdeník Tábor, 1918
    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;
    }