uXML

uXML je aplikačný server zameraný primárne na tvorbu aplikácií pre internet a intranet.

Aplikačný server je program (alebo skupina programov), ktorý sa používa ako vrstva medzi dátami a samotnou aplikáciou. Poskytuje funkcie, ktoré väčšina aplikácií používa viac-menej rovnako a nemá význam ich zakaždým programovať odznovu. Sú to hlavne rôzne spôsoby prístupu k dátam (načítavanie súborov v rôznych formátoch, prístup do databáz, atď.), ale napríklad aj formátovanie výstupu, rôzne konverzie dát, často používane matematické operácie a mnoho ďalších vecí.

Možnosti uXML

  • Kompletná dátová abstrakcia - jednotné rozhranie pre akékoľvek zdroje (databázy, súbory, vyhľadávače, a pod.), ktoré poskytujú iné moduly. Nie je problém tento zdroj kedykoľvek zmeniť (napríklad nejaké údaje uložené v súbore sa môžu presunúť do databázy) bez nutnosti upravovania aplikácie.
  • Ľubovoľný formát výstupu - výstupom aplikačného servera je XML, ktoré možno transformovať do takmer ľubovoľného formátu (väčšinou sa pochopiteľne používa HTML pre internet/intranet).
  • Možnosť jedného výstupu vo viacerých dizajnoch - napríklad pre HTML môžete mať niekoľko „tém“, ktoré sa dajú pridávať a meniť bez zmeny samotného systému.
  • Podpora viacjazyčného výstupu - všetky texty sú uložené v konfiguračných súboroch, ktoré sa dajú preložiť do ľubovoľného množstva jazykov a prepínať „za behu“.
  • Výstup aj vstup v ľubovoľnom kódovaní - celý systém vnútorne pracuje v UTF-8 (ale môže aj v inom kódovaní), pri vstupe i výstupe sa používajú potrebné konverzie.

Moduly

Príklady niektorých rozširujúcich modulov, ktoré už máme vytvorené a môžeme ich okamžite použiť:

  • Full-textový vyhľadávací systém pre XML - Grid - poskytuje takmer všetky služby moderných vyhľadávacích systémov, navyše je prispôsobený pre ne-anglické jazyky a umožňuje kontextové vyhľadávanie (vďaka XML).
  • Modul správy používateľov, prístupov a práv - umožňuje obmedziť prístup k častiam aplikácie iba pre používateľov, ktorí majú potrebné práva. Každý používateľ môže patriť do jednej alebo viacerých skupín, ktoré majú príslušné práva pridelené. Pri prihlasovaní môže byť používateľ autentifikovaný rôznymi metódami (a ich kombináciami), od klasického hesla až po zvolený okruh IP adries. Podporované sú tiež používateľské účty s časovo obmedzenou platnosťou.
  • Modul správy dokumentov - optimalizovaný na prácu s hotovými a externými dokumentami (neposkytuje nástroje na tvorbu ani overovanie dokumentov). Umožňuje triediť dokumenty do ľubovoľného množstva domén a kategórií, priradiť anotácie a filtrovať dokumenty podľa rôznych kritérií.
  • Modul pre konverzie dokumentov - umožňuje inteligentnú konverziu takmer ľubovoľného formátu do XML. V súčasnej dobe je prepracovaná hlavne konverzia z HTML a DOC formátu Microsoft Wordu.
  • Množstvo ďalších, ktoré poskytujú rôzne užitočné funkcie; napríklad: formátovanie tabuľkového výstupu, dynamické vytváranie a načítavanie XML súborov, posielanie e-mailov, import dokumentov a dát z rôznych zdrojov (vrátane databáz), načítavanie súborov z internetu.

V prípade potreby nie je problém vytvoriť nový modul, poskytujúci prakticky ľubovoľné služby.

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
Kto chce - ten môže. Vždy!
		-- Fast
    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;
    }