XML a XSLT web technologie

stewe

XML a XSLT web technologie
« kdy: 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
« Poslední změna: 23. 05. 2011, 22:34:00 od Petr Krčmář »


alefo

Re: XML a XSLT web technologie
« Odpověď #1 kdy: 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.


stewe

Re: XML a XSLT web technologie
« Odpověď #2 kdy: 24. 05. 2011, 01:30:50 »
dakujem ti za prispevok, taketo nieco som chcel pocut

Franta

Re: XML a XSLT web technologie
« Odpověď #3 kdy: 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.

Cpt.Nemo

Re: XML a XSLT web technologie
« Odpověď #4 kdy: 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;
    }


Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: XML a XSLT web technologie
« Odpověď #5 kdy: 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ší. :-)

stewe

Re: XML a XSLT web technologie
« Odpověď #6 kdy: 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"?

Cpt.Nemo

Re: XML a XSLT web technologie
« Odpověď #7 kdy: 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/, SSLkovany ... Takze je to i vcelku bezpecny ...

Logik

  • *****
  • 1 049
    • Zobrazit profil
    • E-mail
Re: XML a XSLT web technologie
« Odpověď #8 kdy: 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.

Cpt.Nemo

Re: XML a XSLT web technologie
« Odpověď #9 kdy: 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 ...

aj

Re: XML a XSLT web technologie
« Odpověď #10 kdy: 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/ Napojení do programovacích jazyků je bez problému a xquery je jako dotazovací jazyk taky celkem dobře stravitelné.

chix

Re: XML a XSLT web technologie
« Odpověď #11 kdy: 24. 05. 2011, 19:36:55 »

Kit

Re: XML a XSLT web technologie
« Odpověď #12 kdy: 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ší.