Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: stewe 23. 05. 2011, 20:22:43

Název: XML a XSLT web technologie
Přispěvatel: stewe 23. 05. 2011, 20:22:43
Zdravim,

moj dotaz je trochu obsirnejsi. Chcel by som spravit stranku, ktora bude nejakym sposobom vyuzivat xml (napr. ako popis nejakeho objektu a jeho vlastnosti) a bude sa to zobrazovat na stranke. Ta stranka bude xslt template kde sa bude to xmlko "parsovat".

Aby som bol konkretnejsi nieco taketo:
http://www.anyexample.com/programming/php/making_xml_xslt_driven_site_using_php.xml

Ako vidite, nad tym je este jedna "vrstva", samotne php, ktore sa o vsetko stara, parsnutie xml a xslt transfomacia.

Uz takto mi to pride ako dost zverina pisat. Mne to pripada ako pekny salat. To si este neviem predstavit, kam by som mal dat take nacitanie tych dat co su v xmlku z databazy alebo robit ukony ako upravovat to xmlko samotne (a nasledne ulozenie do databazy naspat)

Dostat xml z a do databazy je hotova magia, jasne, su rozne "parsery" a "kniznice" (dom, sax) ale pripada mi to ako totalny gulas.

Ake technologie pouzivate vy? Videl som moduly v perle na xml, aj v php ...

Aku kombinaciu na horeuvedene poziadavky pouzit?

Ta stranka co som vam dal priklad dokopy nerobi uplne nic a len sa na to pozriem a chce sa mi plakat.

Potreboval by som vseobecne nejako navigovat ako take "pokrocile" xml-xslt-sql-{php,perl,java} veci pouzivat a ake vlastne a ich vyhody, nevyhody.

diky za rady
Název: Re: XML a XSLT web technologie
Přispěvatel: alefo 23. 05. 2011, 23:49:02
Ja celkom nerozumiem zadaniu a mám pocit, že to XSLT je tam len preto, aby tam bolo. (,,nejakým spôsobom používať XML" mi príde ako vyslovene vymyslený problém).

V Jave sa kedysi používali riešenia, kde sa XML využívalo na reprezentáciu obsahu stránky, XSLT na definíciu výzoru stránky a servlet zobral XML s obsahom, stransformoval ho pomocou XSLT do XHTML a výsledok poslal prehliadaču. Toto robí tvoj príklad v PHP: používateľ napíše stránky v nejakom XML markupe (buď vlastnom alebo v DocBooku alebo čomkoľvek) a tie sa stransformujú do HTML poslaného klientovi.

Napr. Apache Cocoon bol projekt, ktorý fungoval vyslovene na tom, že vytiahol relačné dáta z tabuľky, vyrobil z nich XML, to poslal do rúry, na ktorej boli XSLT transformácie, až na konci vypadlo XHTML, ale nasadenie projektu na mňa pôsobilo mnohokrát ako strašný overengineering.

Klasicky sa robili zveriny, že celé XML bolo uložené v databáze ako BLOB/VARCHAR a žiadna štruktúra sa neriešila. Veľké databázové systémy (Oracle, DB2) majú priamo zabudovanú podporu pre ukladanie XML a dopytovanie.

Táto tendencia v Jave odišla na okraj: XSLT je v prípade komplexných šablón obvykle neudržovateľná polievka tagov, navyše jeho funkcionálnoidnú filozofiu treba pochopiť, čo vyžaduje čas. Jeho rolu na strane servera vedia mnohokrát zastúpiť šablónovacie stroje (template engines) ako Apache Velocity či Freemarker, kde šablóna vyzerá omnoho jednoduchšie. Tam je to potom naozaj o tom, že vytiahnem dáta z SQL, napchám ich do modelu, ten zmergenem so šablónou a výsledný text pošlem klientovi.

Název: Re: XML a XSLT web technologie
Přispěvatel: stewe 24. 05. 2011, 01:30:50
dakujem ti za prispevok, taketo nieco som chcel pocut
Název: Re: XML a XSLT web technologie
Přispěvatel: Franta 24. 05. 2011, 07:49:59
Dostat XML z databáze není žádná magie :-) viz https://sql-vyuka.cz/d/node/30
Zkusím napsat ještě něco víc, zatím koukni na tohle.
Název: Re: XML a XSLT web technologie
Přispěvatel: Cpt.Nemo 24. 05. 2011, 13:35:09
Vysledek dotazu se fakt do XML prevadi velice slozite:) Je to vyriznuty a upraveny kod z funkcniho projektu ...

PHP
Kód: [Vybrat]
private function loadNecoDB2XML(){
        $con = SpojeniNaDB;
        $SQLText = "SELECT coPotrebuju FROM nejakaNabulka";
        $stm = $con->execute($SQLText);
        $result = $stm->fetchAll(PDO::FETCH_ASSOC);//PDO::FETCH_ASSOC je dulezite
        $this->nejakyobjekt = $this->transformDB2XML($result,"rootelement");
    }
   
    private function transformDB2XML($inputData,$rootElement){
        $doc = new DOMDocument("1.0","UTF-8");
        $doc->formatOutput = true;
        $root =  $doc->createElement($rootElement);
        $doc->appendChild($root);
        foreach ($inputData as $row) {
            $line = $root->appendChild($doc->createElement("row"));
            foreach ($row as $colKey => $colValue) {
              $col = $line->appendChild($doc->createElement($colKey));
              $col->appendChild($doc->createTextNode($colValue));
            }
        }
        return $doc;
    }
Název: Re: XML a XSLT web technologie
Přispěvatel: Logik 24. 05. 2011, 13:51:33
To sice jo, ale pak je otázka, proč tam to XML vůbec je. Aby to bylo COOL?

Xml má smysl v případě, pokud se to XML nějak reálně používá - např. pokud se pomocí něj komunikuje s okolím, nebo pokud zdrojová data jsou v XML. Násilně vytvářet xml data aby se hned zase pomocí XSL převáděly dál mi přijde trochu na palici. Na to jsou template enginy vhodnější a srozumitelnější - a v neposlední řadě je napíše každej trouba a proto i levnější. :-)
Název: Re: XML a XSLT web technologie
Přispěvatel: stewe 24. 05. 2011, 13:59:32
asi sa mylim, ale ja chapem xml-ko ako nieco, co mi popise nejaky objekt.

Zoberme si, ze mam 100 veci v nejakem obchode, a kazdy ma ine parametre alebo atributy a ja dopredu neviem ake a kolko. A chcem to mat ulozene v databazi.

Databaza so svojimi tabulkami a jej atributmi je dopredu odsudena na to, ze som viazany na ich fixny alebo tie objekty vobec nie su kompatibilne. Ja nechcem mat 100 tabuliek, kazdu na iny druh tovaru, kde ho budem mat napr. len po jednom ...

Nezaobera sa tymto napr. couchedb? ze by bolo xml uplne "odveci"?
Název: Re: XML a XSLT web technologie
Přispěvatel: Cpt.Nemo 24. 05. 2011, 14:09:55
To sice jo, ale pak je otázka, proč tam to XML vůbec je. Aby to bylo COOL?

Mno jestli je to na me, tak proto, ze potrebuju davat proti sobe data z DB a XML gtw. A jelikoz se me fakt nechce do DB posilat desetitisice dotazu a psat obsluzne funkce pro vyhledavani nad polema/objekty, tak si dam data do XML a pomoci xPath litam po stromech jak potrebuju a modifikuji data v cilove DB ... z 18 minut mam necelych 6, takze asi tak ... Traffic mezi serverama je taky mensi, pac SOAP requesty se krasne kompresi atd. ... XMLka jsou podepsany http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/ (http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/), SSLkovany ... Takze je to i vcelku bezpecny ...
Název: Re: XML a XSLT web technologie
Přispěvatel: Logik 24. 05. 2011, 14:46:25
No, sice nevěřim, že by při vhodný struktuře databáze byly dotazy nad ní pomalejší než XPath, ale to je vedlejší :-) Jinak samozřejmě, když jedna strana pomocí XML komunikuje, tak ano - to ale není případ tazatele.

stewe: když si uděláš vhodnou strukturu (key-value), tak to do databáze dáš krásně (síla XML je hlavně ve stromovejch strukturách, nikoli v anonymních datech). NoSQL použiješ, ale klasická databáze Ti dá navíc transakce (pro inet obchod velmi vhodný, když chceš zabránit, aby dva lidi koupili poslední kus zboží), fulltext atd.
Název: Re: XML a XSLT web technologie
Přispěvatel: Cpt.Nemo 24. 05. 2011, 15:13:01
No, sice nevěřim, že by při vhodný struktuře databáze byly dotazy nad ní pomalejší než XPath, ale to je vedlejší :-) Jinak samozřejmě, když jedna strana pomocí XML komunikuje, tak ano - to ale není případ tazatele.

Stačí používat Doctrine :( A je po rychlosti ... A dělat to na WANu ...
Název: Re: XML a XSLT web technologie
Přispěvatel: aj 24. 05. 2011, 15:43:54
Pokud chceš ukládat XML do databáze, tak můžeš zkusit použít XML DB. Např. http://exist.sourceforge.net/ (http://exist.sourceforge.net/) Napojení do programovacích jazyků je bez problému a xquery je jako dotazovací jazyk taky celkem dobře stravitelné.
Název: Re: XML a XSLT web technologie
Přispěvatel: chix 24. 05. 2011, 19:36:55
pripadne http://basex.org/ (http://basex.org/)
Název: Re: XML a XSLT web technologie
Přispěvatel: Kit 25. 05. 2011, 08:25:15
Cocoon je IMHO dotažen do absurdity, ale XML na webu smysl má. Ve chvíli, kdy mi databázový stroj (SQL či NoSQL) je schopen poskytnout XML data, tak je na generování výstupu rozhodně lepší použít XSLT, než šaškovat s různými šablonovacími systémy napsanými v PHP.

Vytvořit SQL dotaz tak, aby mi poskytl třeba účetní výkaz plný různých mezisoučtů, je docela náročné. Pokud se tento úkon vhodně rozdělí mezi SQL a XSLT, tak je to nejen přehlednější, ale často i rychlejší.