Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web development, networking and server security. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Zašto koristiti XSLT

Zašto koristiti XSLT u okvirima veb servera kod generickog oznacavanja?

Pregled

Ovaj sadržaj sledi predhodni postavljeni sadržaj o nacinu na koji se markiranje nekada vrši.

U predhodnom postavljenom sadržaju, brinuo sam se za neke veb okvire kao na primer apstraktne mrežne okvire, samim tim ublažavajuci (ili cineci možda još težim) veb progremerima kreiranje onoga što oni žele - nejasna apstrakcija.

Ovaj sadržaj istražuje jedan od nacina da se to prevazidje korišcenjem XSTL.

Pošto je ovde postavljen veliki sadržaj, evo kljucnih tacaka:

  • Stvaranje dobro naznacenog kvaliteta je veoma bitno iz više razloga (brze stranice za prebacivanje, sposobnost unakrsnog pretraživaca, pristupacnost, itd).
  • Neke usputne strane okvira mogu dovesti do generisanja loše naznacenog kvaliteta ili korišcenje templata servera koji su specificni za taj okvir.
  • Korišcenje XSLT za generisanje autputa može prevazici ova ogranicenja, dok vam omogucavaju potpunu kontrolu oznacenog dela koji bi trebalo da kreirate.
  • Oznaciti generisanje pomocu XSLT može biti jednostavnije po jedinici testiranja a kao deo programerskog radnog dana, što možda nije slucaj (ili nije neophodno) u drugim sistemima templata.
  • Ako ste platform agnostic, XSLT može biti efektivni deo Pogleda i kod MVC oznaka i može se primeniti na razlicite okvire i platforme, smanjujuci rast troškova na dugorocnom planu.
  • XSLT možda nije uvek adekvatan u svim prilikama, i mnogi su zapanjeni njegovim nepravilnostima ili odredjenim limitima, ali možda je potrebno još jednom zagledati?

(Neki naredni postavljeni sadržaji dace neke primere koda, narocito jedinicno testiranje XSLT i kako se može uklopiti u MVC, i takodje kako može biti napisan na nacin da može ponovo biti napisan).

Loš kvalitet oznacavanja sa stanovišta servera.

Prethodni sadržaj WYSIWYG editora opisuje kako autput kvalitet od izdavaca koji kriju sadržaj oznacenog generisanja može rezultirati oznacavanjem koje je lošeg kvaliteta, teško za održavanje/ispravljanje/promene, i dovodi do prekoracenja, itd.

Neke tehnike servera, alati, i okviri mogu da doprinesu ovom lošem markiranju. To se može desiti zbog brojnih razloga. Na primer:

  • Populari IDEs može podstaknuti korišcenje WYSIWYG editora koji prevlace i okolišaju sa HTML kontrolom (ili grupe njih). Kao što smo raspravljali u prethodnom postu, WYSIWYG kao paradigma HTML može biti neadekvatan, (ukoliko ne tretirate WYSIWYG kao WYSIWYG- kada se css ne može obezbediti).
  • Popularni okviri se mogu odvratiti pažnju od kreiranja HTML, i da to sami uradite. ASP.NET i GWT su takvi primeri. Ali, kao što smo raspravljali pre, takve apstrakcije su retke.
  • Neke popularne kodirane okoline su takode podstakle špageti kod (miksovano markiranje, prezentaciju, i poslovnu logiku, na primer).

Tako da se može posmatrati da postoji jaz izmedju standarda i autputa na strani generacije servera koji je je standardan za prijatelje na vebu.

Okviri veb aplikacija veoma pomažu

Razliciti okviri su bili uobicajeni vec duže vremena. Ovo pomaže da se separatiše prezentacija, poslovna i logika pristupa podataka.

Vecina okvira nisu samo o markiranju generisanja (ako je uopšte to njihov prioritet). Okviri su bili važni za obracanje velikom broju važnih pitanja kao što je pristup podacima, skaliranje, performanse, mendžment transakcija, objektno orijentisano mapiranje, održavanje koda, i td.

Ovo je od važnosti i obicno je veoma korisno pošto postoje citavo timovi koji su od koristi za korišcenje posto postoje citavi timovi koji su tome predani. U najboljem slucaju, oni daju znacaj okvirima (programeri i dizajneri, na primer). Ipak, na drugoj strani, neki okviri mogu da odvuku neke svari predaleko, tako onemogucavajuci snagu korisnicima tih okvira.

Neki okviri još uvek imaju loš kvalitet markiranja

Vi koji ste koristili ASP.NET 1.x znate kakvah haos njegova kontrolna tabla stvara u smislu autputa markiranja ( ASP.NET 2 je daleko bolji, ali takode može da dode do lošeg markiranja ili zackljolica kod potpune kontrole, u vecoj meri nego što bi trebalo)

Dok uporedno programiranje koristi .NET okvir, nsu veoma sbažni, kada dolazi do stvaranja veb sajtova, ta snaga se koristi da bi se sprecilo loše generisanje (iako može biti održivo!).

Neki od njih funkcionišu samo na osnovu cinjenice da iako pokušavaju da sakriju kreiranje markiranja, ASP.NET je loša apstrakcija. (To nije samo problem sa ASP.NET, ali skoro sve što pokušava da napravi markiranja jeste mracna, skrivena kreacija)

Apstrakcija: dobra ideja, ali ne u potpunosti

Apstrakcija i loše zbiranje jesu veoma važni, narocito izmedju slojeva kao što je pristup podacima.Razumljivo, prikazano, poslovna/osrednja logika i pristup podacima. To je uobicajeni pristup kada se pišu softveri.

Razumljivo, programeri vole apstrakciju i apstraktan nacin markiranja i stvaranja autputa, takodje. ASP.NET na primer, možete da programirate jednostavan sajt, a da uopšte ne ne napišete nikakav HTML. Umesto toga, vi insistirate/deklarišete kontrolu kao što je asp: Label, asp: Panel itd .Net da bi s napravilo markiranje za vas(!).

Interesantni pokušaji su dostupni tako da ne morate da pišete JavaScript i dobijate alat podrške u IDEs za .NET i Java. Na primer, Script# omogucava programerima da napišu kod u C# (ili bilo kom .NET jeziku) i tako da postanu kompatibilni sa JavaScript. Google je takodje radio slicnu stavar sa Google Web Toolkit (GWT) za Java. Takve ideje su veoma interesantne i zanimljive.

Iako je naoko veoma zanimljiv (cak šta više krajnjim programerima) webdeveloper može veoma da izgubi sposobnost kontrolisanja kako se autput stavara.

Ucenje sticanja kontrole za kreiranje output-a

Zašto je to važno?

Ako znate da kontrolišete autput onda vam on uzvraca sa krajnjom kreativnošcu, narocito kada morate da napravite fleksibilni, bogati, ipak po malo lenj UI veb baziran.

Korišcejem veb standarda i takvog pristupa (npr.prateci W3C preporuke) da biste postigli neke stvari efikasnije je prevazidjeno tokom godina.

I isto tako kao što programeri hvale kvalitet i citljivost njihovog server oda, isto tako tako se hvale i raznim veb aplikacijama koje su napravili koristeci taj kod.

Ljudi sa svih strana mogu lako da vide vaše markiranje; manje njih ce videti kod vašeg servera (iako to nije izgovor da biste napisali loš server kod!).

Iako ovo ne mora biti razlog ili jedini faktor, kada nekog zapošljavamo mi cemo sigurno pogledati sajtove koje su kandidati naveli u svojim rezimeima (ili cete traziti primere da vam se pokažu da se uverite šta je njihovo) i pokušacete da razumete kako su ga oni kodirali.

Neki okviri vam daju potpunu kontrolu ali mogu kristiti neke zasebne template

Jezik templata koji prati mnoge ljude na vebu i u toku veb razvoja okvira popularnih koji mogu biti otvoreni, koristi mehanizam specifican za taj posebni okvir.

Ali postoje neke prednosti ovog pristupa, takodje (inace ne bi bili tako uobicajeni).

Na primer, templati bazirani na HTML, kombinovani sa jezikom tog templata (na primer Python, ili Ruby, idli C#, it.) znace da postoji neka familijarnost za programere da nastave sa zapocetim zadatkom.

Konsultanti i tvorci izmedu okvira

Ako radite kao konsultant ili kreator za veci broj klijenata, možete se zateci kako idete sa projekta na pojekat, i da morate da naucite razlicite jezike templata, neke sa više ogranicenja nego druge.

U nekim slucajevima moracete da se ogranicite na samo savetovanje ili markiranje, ili da samo obezbedjujete XHTML/CSS/JavaScript template fajlove, koje onda drugi programeri moraju da reproduktuju.

Pricao sam sa mnogima koji su bili frustrirani u toku ovog procesa, narocito sa .NET, koji se cini, kao veoma fin i validan, sa lako pristupnim markiranjem koje nekada može, ipak, postati potpuno neprepoznatljivo, kadag ASP.NET krene svojim putem! Neophodne razmene tada nastupaju.

Trenutno na poslu zapošljavamo i stalnog i povremenog veb programera da uglavnom rade na .NET platformama. Teško nam je pronaci ljude sa izuzetnim sposobnostima na pocetku i na kraju .NET. Trudimo se da pronadjemo ili dobrog programera za prednji ili za zadnji deo (PHP, Java, itd.) ili dobrog ASP.NET sa malo ili nimalo znanja o prednjem delu.

U nekom trenutku, ovo nije problem, ali nekada je bolje da imate .NET i dobre propratne karakteristike klijenata.

XSLT kao mehanizam templata moze verovatno pmoci da se se dobije najbolje od oba sveta:

XSLT — otvoren standard

XSLTe da pomogne da se dostignu obe i apstrakcija i potpuna kontrola markiranja.

XSLT je jezik templata za transformisanje XML dokumenata u drugi format (u neki drugi XML dokumenat ili neki drugi potpuno format).

Za veb programera ovo može biti koristan autput da postignete tacno šta želite i samim tim da dodjete do potpune kontrole cele jedne autput generacije.

Možete ponovo koristiti vaš XSLT, i cak napraviti hijerahiju za XSLT, koja prati Metodu teplata i dizajnerskog obrasca, slicnog klasnoj hijrahiji u Objektno orijentisanom programiranju, gde baza XSLT je ekvivalentna sa apstraktnom bazom , i drugi XSLT koji unose bazu koju neko može d previdi zbog drugih tempalta. (sledeca stavka ce to pokazati)

Takodje se mora pretpostaviti da vi lako možete (ili bez mnogo cenkanja) da dobijete vaš XML format podataka, tako da možete da ga transformišete.

XSLT kod MVC

Veb programeri su upoznati sa podelom brige (semantika HTML jeste markiranje za dobru strukturu dokumenta, CSS za stil/postavku, JavaScript za ponašanje) i progresivno oponašanje (ili dostojna degradacija).

Softveri zadnjeg ili srednjeg reda su takodje upoznati sa podelom odgovornosti (n-tier architektura, pojedinacna odgovornost po casu, MCV, itd)

Model pogleda na kontrolu (MVC) tj obrazac za razvoj korisnickog interfejsa je bio u primeni neko vreme. Toje pravilan pristup da se vidi reprezentacija prezentacije, i kontrolisanje njihovog povezivanja).

Može se posmatrati i na vecem nivou (tipicna n-tier arhitektura) takodje se koristi i sa prezentacijom tiera (model može da ima interakciju sa rednjim tirom, kontrolori ce biti deo prezentacije koja prenosi podatke (model) i da se prikaže kod na displeju).

To je vec dokazan obrazac graficke/desktop aplikacije i koristi se uspešno i primenjiva je na mnogim veb baziranim okvirima danas.

MVC takodje može da pomogne da se poboljša testiranj. Npr, testiranje celine nekada može biti i pogled na model, i konrolu sepracije.

Znam da je Microsoft bjavio MVC model za ASP.NET razvoj. Zam da je jedan od mnogo drajvera jediica za testiranje.

Kada se ovako pogleda, sve zvuci dobo. Podstice bolju separciju. Zanimljivo je da takode izgleda da ne podstice njihov poslednji model koji je ugradjen u sve njihove kontrole. Zato mi sada nije jasno da i to znaci da pišete više HTML ( što može dovesti do toga da dobijte HTML koji nije odgovarajuci ili težak za kontrolisanje).

Ali Microsoft malo zaostaje sa MVC u veb dizajnu ( ali to može znaciti i da su naucili iz predhodnog iskustva). Drugi popularni okviri su postojali neko vreme dok odrade šta treba na mreži kao što je Ruby on Rails, Django, CakePHP, i mnogi drugi. Sasvim sam oduševljen sa Python-based Django, na primer iako sam imao samo kratko iskustvo sa njim - i ja licno više volim kovrdžavi oblik programskog jezika!)

Iako svi oni imaju svoje mere , svi imaju i razlicite nacine pravljenja markiranja.

XSLT, dakle, može biti deo pogleda jednog MVC okvira. (Ne bi trebalo da je to jedini nacin pravljen apogleda, naravno.) Na primer,

  • Kontrolor može da izazove Model da podatke sortira na nacin na koji želi
  • Kontrolor može da Model prebaci na Pogled
  • Pogled može da licno seriliše taj podatak u XML i transformiše ga sa XSLT pogledom.

Na ovaj nacin, generacija markiranja je i dalje malo apstraktna, ali unutar toga, imate potpunu kontrolu onoga što trebate da stavite u autput.

Prednosti/beneficije pogleda baziranog na XSLT

Ovde sam dao nekoliko detaljnijih primera kako XSLT može biti koristan (iako, naravno, neki od tih razloga nisu naravno samo svojstveni XSLT baziranom pristupu).

XSLT je otvoren Standard

Ljudi cesto govore o beneficijama korišcenja otvoreng standarda sa veb klijentima pored ostalih stvari (“veb standardi”, na primer). Dakle zašto ne i na strani servera?

XSLT 1.0 ima odgovornu univerzalnu podršku. (Universal 2.0 bi bila cak bolja, iako nismo još dotle stigli, nažalost.)

Bolja podela Pogleda od Modela i Kontrolora u MVC-u

Sledeci blog ce pokazati ovo u PHP, dozvoljenom vremenu, Mono/ASP.NET.

Jedinica za testiranje

Mnogi okviri templata su veoma zahtevni, nije nemoguce, da se u potpunosti testira jedinica u izolaciji od drugih slojeva i zavisnih sistema.

ASP.NET’s novi MVC model koji sam ranije pomenuo ima testiranje jedinice i odeljenje za razvoj testiranja za ovakav pristup, ali to je daleko od onga štop ja razumem, dakle dok kontolore i modele cini podležnim testiranju , poglede i dalje ne (molim vas naglasite ako sam nešto propustio!).

Ono što sam video kod drugih temlata pogleda u okviru drugih okvira, verujem da postoji neka konstanta (ali opet recite mi ako sam nešto propustio).

XSLT, ipak, zahteva uglavnom XML input (i verovatno arumente koji su pragmataicno preneseni), i zato može lakže da testira pogled u jedinici, sa izolacijom servera koji je u toku rada, podataka itd. Na taj nacin je lakše integrisati se u proces kodiranja baze podataka.

Testiranje jedinica bazirano na XSLT ne zahteva citav niz izvršavanja server setapa. takvo testiranje jedinica, koje su brojne po svojoj prirodi, lako je pokrenuti u toku razvoja. To je važno naglasiti kada prihvatate testiranje jedinica, da ne bi njihovo pokretanje izgledalo kao sušenje farbe posle skaog redizajniranja!

Naredni postavljeni blog ce pokušati da to demonstrira.

Dodite do potpune kontrole generisanog markiranja

Kao što je gore objašnjeno, markiranje je važno. XSLT vam daje mogucnost da uradite markiranje koje želite, dok postoji malo ili ni malo trgovine. (Neki drugi okviri ovo dozvoljavaju, tako da ovo nije jedinstvena karakteristika, ni u kom slucaju.)

Platformski i okvirni agnostik

Dok sugestija korišcenja XSLT može dovesti do neke druge tehnologije, takode može dovesti i do standardizacije osobina putem platforme. Ovo bi bilo korisno za npr veb programere koji moraju da rade na više projekata, za razlicite klijente i da koriste razlicitu tehnologiju.

Ovo dovodi do pretpostavke da XSLT ce biti prihvacen. Kada bi to bilo tako, onda migracija do željenog okvira gde je pogled negde samo kao XSLT ne bi bila tako zahtevna kao što jeste (iako je još potrebno dosta vremena za srednje stenje i slojeve podataka).

Ja sam, na primer, migrirao XSLT sajt baziran na “klasicnom” ASP, u PHP XSLT, koristeci isti obrazac, ali gde je XSLT teško uopšte promenjiv, što cuva dosta vremena.

Za vecinu klijenata, njihov veliki promet .NET 1.1 veb site (sada se pomera na.NET 2.0) napravljen je da napravi bajpas za .NET kontrole, da bi izbegli gore naznacene probleme, a mi smo transformisali XML sa XSLT.

Radeci ovo došli smo do mnogo beneficija odjednom:

  1. Dobili smo cist - i pristupacan - autput koji je neophodan
  2. “Objektno-orijentisan” XSLT-baziran pristup takode nam dozvoljava da napravimo hijerahiju templata koji se mogu ponovo koristiti
  3. Klijenti su takode zahtevali višebrojne pod sajtove koji se cuvaju uz malo potrebne snage ili lako dupliraju kod, dok dozvoljavaju svakom od pod sajtova da se preuredi kako želi, ne samo CSS ili baza podataka sa razlikama, ali ipak nivo templata se menja kao što se slojevi i markiranje menja. (Da smo ovo probali sa ASP.NET, morali bi da napravimo Server Kontrole sa mnogo konfiguracije i onda bi u svakom pod sajtu sve to trebali iznova da radimo, što bi dovelo do dosta ponavljanja)
  4. U jednom slucaju, samo su želeli odvojene pod sajtove , ali i potpuno odvojene sajt/aplikacije (javne, kiosk nacin, i verziju sajta koja se može koristiti uz podršku klijenata). Sve ovo se odvijalo u skoro istom XSLT-u sa manjim izmenama u nasledenom XSLT-u za svaki veb sajt ponaosob.
  5. Migracija u .NET 2 ne ukljucuje XSLT promene (samo C# promene da bi se iskoristile stvari kao što je generisanje, poboljšan XSLT procesor, itd)

A sajt prima nekoliko hiljada naredbi na svakih sat vremena ili slicno (dok stvarno izvodjenje je vece pitanje arhitekture, poenta ovde je da XSLT nije hindrans performansi kao što su neki mislili - pogledajte dalje za više informacija).

Prenosive osobine

Pošto je i agnostik platforme i okvira to ga cini prenosivom osobinom. Naravno, XSLT nije limitiran samo na veb bazirane seniore, iako je to veoma dobra osobina.

Ponovljiv

Kao OO tehnika i obrazac dizajna koji pomažu prilikom ponavljanja razlicitih konteksta ili samo u prihvatanju veb standarda ili CSS slojeva to pomaže da se stvori ponovljiv obrazac koji se može primenjivati kod bilo kog sajta koga želite da promenite, a korišcenjem XSLT pristupa on se može cak primeniti na mnoge projekte i razlicite okvire.

Razvojna produktivnost; Pomoc da se ubace glavne osobine tokom objedinjavanja jednog projekta

Konsultovao sam se sa nekoliko kompanija, i citao/cuo druge kako komentarišu slicne scenarije, dok se strucni klijenti ogranicavaju da obezbede template koje onda prebacuju ka programerima koji nisu cesto veb programeri.

Ovo cesto može da rezltira da je potrebno mnogo više vremena da se neko markiranje odradi ili da se markiranje objasni programeru. Ovo je potrebno, doduše, kada želimo da dodjemo do više alternativa (nepotrebno trgovanje) zbog ogranicavanja izbora okvira, ili zbogmarkiranja koji izlaze taman iz procesa razvoja (ASP.NET, vas posmatra!).

Ove predhodne godine na poslu, mi smo ocajno bili u potrebi za nekim na mestu veb programera, tražeci mix jakog veb standrada, i servera programiranja putem .NET. Videli smo da je veoma teško da zaposlimo kandidate koji su izuzetni na vecini mesta (mnogi dobri veb programeri, izbegavaju .NET kao što mnogi izbegavaju ASP.NET cije eksperte na netu je veoma teško naci).

Ali nije nam uvek potrebno da neko ima sve te osobine, jer zbog XSLT mi možemo da zaposlimo jake, spsobne ljude koji imaju deo ovih sposobnosti, tj koji imaju pojedinacne sposobnosti iz svih oblasti, sa programiranjem zadnjeg reda kao užom specijalnošcu.

Takvi programeri se zato ne iskljucuju iz razvojnog procesa.

Unošenje glavnih karakteristika u tekst postalo je kljucni zadatak u razvojnom procesu

  • Veca produktivnost i prihvatljivost: kao što se potrebe razvojne menjaju u toku procesa, zato jer se zateva još znanja i iskustva, strucnjaci za sve oblasti po malo se u ovakvim slucajevima mogu veoma isplatiti. (osobe koje su uopštene mogu biti od velike koristi, a da toga nisu ni svesne!)
  • Uporedni razvoj. Vidimo koliko je jako kada je veza izmedju programera i klijenta toliko jaka i kako se iz ovoga može povuci paralela. Neki od naših prednjih programera koji nemaju iskustva sa c# i ASP.NET nije da nisu spremni da doprinesu procesu razvoja, i sam projekat ima neke koristi od njihovog produbljenog znanja.

Podsticaj Programera prednjeg i zadnjeg dela da sarduju zajedno

Toko dana 1 od @media AJAX, interfejs dizajner Mike Stenhouse održao je govor sa tacke gledišta Dizajnera/dela da dizajner mora da zna više o razvoju, morace više da se ukljuci u sam tok razvitka, cak i razvitka koje se rulkovodi ponašanjem.

Dizajneri koji se više razumeju u razvojni proces softvera, ako se ukljuce - ne samo da prebacuju template preko ograde - pomoci ce komunikaciji izmedju “niskog” kilenta i tehnologije.

U isto vreme, srednji programeri dobijaju šansu da se izjasne o zabrinutosti za arhitekturu, OO, obrasce, okvire, itd. Uobicajeno je da razumemo, iako ne moramo da budemo eksperti jeste da su oni produktivniji na nekim drugim oblastima.

Naravno Mike Stenhouse i njegova tacka gledišta je jedinstvena po pitanju XSLT-baziranog pristupa (zapravo, mislim da je govorio o Java ili PHP). Jedna od mogucih prednosti XSLT-baziranog pristupa koje imamo ovde je možda mogucnost naginjanja (kontravezna izjava,možda!) više nego kod drugih templata programskih jezika kao što su Java, C#, PHP, itd. Kada je to slucaj, XSLT može biti veoma koristan za premošcavanje jaza.

Kodirana produktivnost

Korišcenje necega kao što je ASP.NET kontroliše cak i najmanji pad na platno što se cini veoma produktivnim isprva. Veoma sam bio uzbudjen tokom 2000/2001 kada su se pojavile informacije o ASP.NET. Secam se da sam bio veoma uzbudjen oko kontrole podataka kojoj je ASP.NET pretio godinama unazad! Kakav vremenski server - ili se tako bar cinilo.

Ipak, ako ste neki faktor u vremenu vi onda morate da dodjete do markiranja autputa, da cinite stvari dostupnim, CSS domacinski, itd, i da tokom vremena, što se ne vidi po mom iskustvu (u nekim slucajevima je gore, u nekim bolje) XSLT bude glavni pristup.

Ako poznajete autput koji želite da kreirate, smatram da je pisanje XSLT m,nogo liberalnije ako imate potpunu kontrolu nad sudbinom vašeg autputa!

Prebacivanje koje sam ranije objasnio sa ASP baziranog XSLT-sajta na PHP baziran XSLT je takode i prebacivanje sa Windows/IIS na Linux/Apache (dosadile su mi njegove IIS’s limitirane konfiguracije u neprijateljskom okruženju).

Za samo sve nedelje sajt sa 700 stranica je bio konvertovan, potpuno testiran, i ponovo pokrenut kao nova domacinska kompanija. Nema zapravo nikakve XSLT promene niti dizajna obrasca (neka vrsta kontrolora stranice koji lako mogu promeniti u MVC ako imam dovoljno vremena) je samo ponovo primenjen kao PHP. PHP 5 objektno orijentisana kompatibilnost što podrazumeva dalju redukciju koda srvera. (kada razmislite o tome, nije bilo dve nedelje - bilo je mnogo manje, samo slobodno vreme tokom veceri.)

Što se tice posla, za vecinu naših klijenata (jedan od njih je najveci u istoriji) dovoljno je korišcenje .NET. Mi cesto zaobilazimo ASP.NET kontrole i koristimo XSLT da bi generisali autput. C#/.NET se takode koristi sa strane servera iako je .NET sam pos ebi veoma jak.

Za generacije UI, XSLT pre nas je dozvoljeno bilo da kreiraju višebrojne veb sajtove istovremeno, jer se svaki XSLT može ponovo koristiti. Dok je kreiranje pod sajta u prošlim vremenima odvlacilo 6 meseci posla, dok je pomaranje u XSLT oduzimalo samo delic vre,mena (i ukljucivalo SEO, pristupacnost, veb standard, itd).

Još jedan skorašnji primer: za vecinu trenutnih projekata kolega (odlican progarmer, iako ne odlicno strucan za veb programiranje, još uvek) je kreirao funkcionalno bogatu i snažnu stranicu kao deo aplikacije koju razvijamo. Postoji kompleksna stavka tabularnih podataka, sa tipom pretraživaca kao folder/drvo sa mnogo dinamicnih stvari koje su moguce na toj stranici. Neke kontrole koje je prodavac kreirao u ASP.NET 2.0 se takode koriste. Iako su funcionalno bogate, stranica ima samo 1mb autputa!!!

Autput tih kontrola prenosi se sa velikom kolicinom razlicitosti i nepotrebnim rasporedom na tabeli (tabele za tabularne podatke su takode veoma fine). Stiliranje nekih karakteristicnik odlika je takode veoma komplikovano (jer stvoreno markiranje nije toliko dobro i ne može se promeniti).

Kao dodatak, putem nekog osecaja, kolicina C# koja se koristi da bi se pripremili podaci deluje preterana. U autputu ima mnogo nepotrebnih (i zapanjujucih) JavaScript se mora za to postarati.

Ovo takode je (ternutno) pokrenuto kao pas na IE 6 jer su smešni svi JavaScript i HTML! Proveo sam celih petnaest dana dana pokušavajuci da dodem do kontola deljenja/odredivanja velicine koje ce to razdeliti kako treb koristeci JavaScript (da budem iskren, tokom tog vremena lketos otkrio sam odlican jQuery, koji mi je uštedeo mnogo truda ali sam još uvek koristio jQuery u velikim kolicinama)!

Po mom sopstvenom mišljenju, lakše je celu stvar napisati u XSLT i i da se pritom koriste komponente visokog kvaliteta kao što su jQuery, YUI, Dojo, itd. Tabularni i drvo podaci su sasvim lepo podešeni uz pomoc XSLT procesuiranja. Da budem iskren, osoba koja je pisala tu stranicvu nema mnogo iksustva sa XSLT/veb razvojem vec je iskusni GUI programer zato pristup kontoli ima apsolutno smisla za njega i zato sam taj pristup još više cenio nego pre. (Još uvek smatram da je kolicina koda prevelika i dosadašnje iskustvo je podspešilo moj pogled da dok ASP.NET jeste snažan sa strane servera, ja više volim da koristim XSLT da bih odradio markiranje, kada je to moguce.)

Nedostaci (ili uoceni nedostaci) XSLT pristupa

XSLT svakako nije svakome po ukusu. Pravi alat nije na pravom mestu u obožavanom IDE, ili cak može izgledati prevuše cudno za neke ljude (više je kao deo funkcionalnog programiranja nago proceduralnog ili objektno orijentisanog, tako da je potrebno vreme da se covek naviken).Evo su mane XSLT kojih mogu da se setim i nacin na koji se mogu prevazici probelmi.

Ne voli svako XSLT!

Mnogi koji su navikli na OO ili na proceduralno programiranje mogu misliti da je ovaj funkcionalni jezik cudan ili cak nezgrapan za korišcenje. Kodiranje sa zagradama pod uglom nije baš po svacijem ukusu. A ove licne karakteristike mogu biti od presudnog znacaja za tim/projekat.Takode ga ne smatram intuitivnim, ali posle nekoliko dana sa njim prirastao je za mene.

(Takode ne zauzimam stav da neko mora samo korstiti XSLT. Razliciti ljudi vole razlicite tehnologije, i takode ih mogu slobodno korstitii.)

Još jedna tehnologija za ucenje

Nekako volim ovu zabrinutost, ali i na neki nacin ne. Npr, XQuery, ili mnogo snažniji LINQ od Microsoft, uzbuduje mnogo programera i spremni su da to nauce ako je neophodno. Ljudi ce uložiti vreme da nauce o CSS, JavaScript, itd.

Dakle, možda da kao svaka druga tehnologija, kada bi XSLT bio odlucan da bude odgovrajuci, onda se i to može, takode, nauciti.

XSLT 1.0 je Verbose i Slabo kucan

Neke jednostavne stvari u XSLT 1.0 su malo cudne za kodiranje ( XSLT 1.0 može cesto biti napisan mnogo cistije nego što to vecina ljudi cini).

XSLT (i XPath) su slabi na kucanju - najmanje 1.0 imajuci i vidu vrstu i namenu XSLT to je preveliki faktor limitiranja kao što to ne bi bio slucaj kada bi ovo bio potpun jezik. (Neki veoma popularni veb jezici su takode slabi na kuacanju, npr, PHP i JavaScript i neko “ograniceno” kucanje može dovesti do mnogih onesposobljavanja, zavisno od upotrebe.)

XSLT 2.0 i XPath 2.0 su snažniji i orevazilaze mnoge od tih ogranjicenja, imajuci još snažnije karakteristike, dozvoljavajuci ucenje koda i poboljšane performanse.

Ipak, iako je XSLT 2.0 otvoren standard, mnogi ga nisu podržali. (Microsoft, npr, ima lepu prezentaciju XSLT 1.0 u .NET — i MSXML — ali je i nabacio da XSLT 2.0 nije prioritet za.NET u trenutku — pogledajte diskusiju za više podataka.)

XSLT je ogranicen jezik

Na neki nacin, ako se uporedi sa drugim jezicima sa više namena kao što su Java C#, XSLT (narocito1.0) on je veoma ogranicen.

To može biti presudna stvar u odluci korišcenja.

Ipak, (korišcenje produžetaka objekata, itd), jednostavnost jezika se takode može smatrati kao prednost njegova, to može poboljšati odvajanje podataka i korišcenje logike. Ja nemam nikakvu zamerku za njegova ogranicenja.

Loša podrška alata u uporedenju sa drugim jezicim?

Podrška alata za XSLT ne deluje tako dobra kao ona za npr C# ili Java.

Sa C#, oba Visual Studio ugradena reflektovanja JetBrain odlican Resharper cini refaktorisanje mnogo lakšim. Jedni sa Eclipse a drugi kao npr IDEs za Java i mnoge druge jezike.

Potrebno vam je da preimenujte klasu koju koristite u vašem masovnom projektu? Nema problema samo kliknite desnim klikom na definiciju i drugacije je naslovite; IDE ce uredno apdejtovati sve za vas. Želite da dodate implementaciju koja vam fali u interfejsu? Opet samo kliknite denim klikom i dopunite implementaciju koja vam nedostaje. Želite da pomerite blok kodova u posenu metodu?Prevucite željeno, desni klik i izaberite funkciju izbacivanje metode. Želite da nadete sva mesta koja koriste doticnu metodu? Desni klik i oznacite pronadi sve destinacije. Itd.

Kao dodatak. mnogi IDE i dodaci za kod asistencija ide iza “intelisense”, savetovanje dobre prakse kodiranja, itd. Ovo je veoma snažno, narocito kada želite da osnujete tim, standarde.

Dok XSLT, ipak, nivo sofistikacije nije visok, kao što sam razumeo. Npr. pronalaženje željenog dela gde je dati XSLT template korišcen ograniceno. najbolji editor na koga sam naleteo za ovu svrhu je oXygen (recite mi ako ste na bolji naišli!). Ima razlicita refakturisanja i sposobnosti pronalaženja, ali pronalaženja ne podržavaju potragu za XSLT template modom. (Korišcenje modilarih templata jegeneralno cistiji nacin kodranja mnogih XSLT.)

Programer je samim tim ogranicen na globalno pronalaženje editora teksta po žlji. da budem iskren, ja ne mislim da je ovo problem, ali znam da neki programeri narocito kada koriste alat kao što je JetBrain odlican alat za rfelektovanje, misliti da je ovo unazadivanje i ne krivim ih!

Mnogi prodavci IDE, kao što je Microsoft, nemaju prioritet za XSLT. Ovo je donekle razumljivo, ne doprinosi situaciji jaje-kokoška:

  • IDE alati nisu dobri kao što su XSLT;
  • XSLT se ne razvija u toj oblasti programiranja;
  • IDE alati ostaju limitirani za XSLT;
  • XSLT razvoj se smatra unazadnim u odnosu na IDE/alat pdršku na koju se obicno ne obraca pažnja.

Što se tice IDEs/alati/editori ovo je korisno:

  • Mnogi ljudi na poslu vole da koriste XML Spy za XSLT razvoj, iako ne volim ovaj teks editor.
  • Ja uglavnom koristim jEdit, koji je Java-baziran IDE, tako da sam ga koristio na Linux, PC i Mac, veoma lepo (teško je kada ga na pocetku posmatrate, i mnogo sam vremena proveo dok sam se privikao! To cu objasniti u nekom drugom postavljenom blogu!).
  • Eclipse i Aptana plugin-ovi izgledaju veoma korisno, i ja cu to pregledati detaljnije.
  • Mnogo ljudi se kune u oXygen, tako da ga sa vecom pažnjom posmatram.
  • Ali, za moj trenutni projekat, proteklih godina, na poslu sam bio zadovoljan sa korišcenjem Visual Studio 2005 (i sada 2008) za XSLT. ImaXSLT debager (i od skoro profajler) ali nisam morao da koristim XSLT debager kjoš uvek, tako da ga ne mogu komantarisati.

Ako znate za još neki koristan XSLT alat, samo kažite!

Refaktorsanje u okruženju miksovanih jezika može biti problem

Recimo da imate XSLT koji transformiše XML koji dolazi od Java ili C# serijskih objekata.

Ako modifikujete taj objekat na neki jednostavni nacin (preimenujete klasu ili javnog clana) u IDE kao što je Visual Studio i Eclipse, možete veoma brzo da apdejtujete korišcenje vaše klase/metodekroz projekat ili test jedinice i vi ste završili.

Ali, zamislite da preimenujete clana klase koji je serijski na takav nacin da je ime klase us tvari ime elementa/atributa kod XML reprezentacije. IDE nece lako znati da cete vi rucno da podešavate XSLT.

XSLT koji je testiran preko jedinica može pomoci do odredenih granica oko toga gde je potrebno uraditi promene, a može biti još posla nego samo raditi na C# ili Java.

Skupljanje podataka na nacin kako se to radi u XML može biti neprakticno

Korišcenje XSLT podrazumeva da lako možete (ili jeftino) dobiti svoj XML format, tako da ga možete transformisati. Ovo ne mora da može biti moguce u vecini slucajeva.

U mnogim slucajevima, sa ugradenim XML serijskim sposobnostima, trošak je sveden na minimum. (Cesto vam dobro ide ako je vaš najveci problem arhitektura sistema!)

Cak i ako serilizacija nije moguca, XSLT performanse mogu da imaju koristi od dobro strukturisanog XML. Da li je lako da kreirate tu strukturu sa objekta vašeg objektnog modela? zavisi od projekta koji je u toku.

Uocene performanse koje zabrinjavaju

Uobicajeno pitanje koje mi postavljaju na seminarima o XSLT jeste o zabrinutosti za performanse.

XSLT performanse, izmedju ostalih stvari, su pod uticajem:

  • XML se transformiše u sve strukture, oblike, itd.
  • Efikasnost XPath izražavanja (npr. korišcenje ‘//’ ili provociranje dinamickog kodiranog jezika iz XSLT može biti ubica za performanse).
  • XSLT sam po sebi (npr. loadovanje, izvršavanje XSLT opšteno, nezavisno da li ili ne XSLT Procesor je kompajliran/keširan/ponovno korišcen itd.)

Kao što se obracamo XML i XPath zabrinuto, XSLT zabrinutost o performansama se može preispitati na nekoliko nacina.

Korišcenjem uhvatljivog XSLT Procesor implementacija može biti dramatican proboj. (Kao vrsta XSLT koji se kompajlira u prirodnom kodu, kao što je Java bajtkod ili NET IL itd, a zatim njihovo hvatanje u memorijsku sesiju, za onovnu upotrebu). Koristili smo ovaj pristup na jednom od najprofitabilnijih i najvecih veb sajtova u Velikoj Britaniji, na primer.

Takode kao jezik na visokom nivoz, XSLT ima potencijal da se još više optimizira na nivou implementacije što ce rezultirati boljim performansama bez promen koje su nepohodne za sam XSLT.

(Produžavanje kroz XSLT produžetke može ponuditi neke perfoemanse ako pišete objekte za produžetke na kompajliranom jeziku kao što je Java ili C#. Može doci do rizika da cete izgubiti na prenosivosti - ipak koliko je to rizik zavisi od okolnosti)

Fragmentno keširanje je naporno

Kao dodatak proboju performansi zbog korišcenja keširanog XSLT Procesora, poslednja strategija keširanja je bila u stanju da kešira celu stranicu autputa. Zatim potraživanja za tu istu stranicu zahtevaju vrlo malo sredstava.

Ipak, ponekada, ako ceo autput ili neki njegov deo nije lako kširati, onda samo fragmenti autputa mogu. Primer je stranica sa licnim podacima kombinovana sa uopštenim podacima koji se mogu keširati.

XSLT u pogledu je korišcen da generiše ceo autput, tako da fragmentno keširanje u ovom pogledu je potpuno strano. To može da podrazumeva i implementiranje strategije keširanja u Model (što se verovatno isplati), kada se autput jedne transformacije hrani autputom druge transformacije u XSLT kada je keširanje dozvoljeno i sam proces se može sacuvati privremeno u toku procesa.

U tom slucaju, odredeni jezici templata kao što je Django, ASP.NET itd, mogu ponuditi bolje karakteristike. XSLT 2.0 može imati nekog udela u ovoj oblasti (bolje podržava višeslojni XML documente,npr). Ako XSLT ikada postane cak popularniji nego što je sada, onda smtram da ce biti više napredtka u ovoj oblasti.

To podrazumeva XML-bazirane template otporne na pogreške

Razmislite o brizi za Django dizajnersku filozofiju iza sistema tempata:

XMLne bi trebalo da bude korišcen kao jezik templata

Korišcenja XML mašine za parsiranje templata uvodi ceo novi svet ljudskih grešaka u editovanje templata - i podstie to do nevorovatnih razmera.

Filozofije dizajna, Django, poslednji pristup Januar 4, 2008.godine

Iako ovo nije odredeno generisano ka XSLT, ljudska greška se dovodi u pitanje sa XML-baziranim templatima, ili XSLT autoritetom.

Ta greška, ako dolazi u vreme kreiranja templata, se hvata uglavnom u vreme razvoja/debaginga/ciklusa testiranja, kao loše formirani XML koji vec ima grešku.

Naravno, ako sadržaj dode iz spoljašnjeg izvora (generisan od strane korisnika, koji je treca strana) dobro formirani XML se ne može garantovati. Ipak, to nije uobicajeno u okviru samih templata. Može se, ili možda ne mogu ocistiti takvi podaci, zavisno od projekta.

U nastavku, kao što je napomenuto ranije, ne verujem da je prekoracivanje u programiranju templata štetno. Keširani XSLT procesorsi, kao i druge strategije keširanja mogu pomoci, na primer.

Moj kolega je pronašao ASP.NET data kontrolu kojoj treba nekih 2 minuta da se veže i napravi standardni .NET set podataka. On je to promenio u XSLT transformaciju umesto tako da se sada podaci transformišu za nekih 20 sekundi - jasno izuzetak kada se uporede druge potrebe na netu (2minuta ili 20 sekundi podrazumevaju mnogo podataka), ali XSLT nije automatski spor.

Kao dodatak, zavisno od aplikacije, generisanje XML može se postici kroz serilizaciju objekata, sa jezicima kao što su Java ili .NET (nisam siguran zapython, što je Django) koji su veoma brzi.

U trenutnom projektu ja sam serilisao veoma veliki objekart (oko 200K kada se sacuva kao XML) i transformisao ga u HTML. HTML ije veoma kompleksan sa skoro 300 formalnih polja! (Ne bojte se, mi koristimo interfejs koji je kao tab i mnoge druge tehnike da bi ih grupisali!) Korišcenje keširanog XSLT Procesora u toku razvoja, transformacija traje samo 5-10 milisekundi. Verca cena je dovesti podatak iz baze podataka na prvom mestu (oko 50 do 120 milisekundi, ali je u razvojnoj bazi podataka u istoj kutiji kao i ostatak šteka). Serilizacija traje oko 5 milisekundi. Cak i kada XSLT procesor nije keširan, transformacija vremenski je veoma kratka (mislim da traje oko 150-300 milisekundi zavisno od podataka).

Ista politika dizajna je sledeca tacka o kojoj cemo govoriti

Pretpostavite dizajnersku strucnost

Sistem templata ne bi trebalo da je dizajniran tako da su templati pod pobavezno lepšo izloženi u WYSIWYG editorijalima kao što je Dreamweaver. To je veoma jako ogranicavanje i nece dozvoliti sintaksi da bude tako fina. Django ocekuje tempalte i autore koji se ne boje da direktno rade editing HTML.

Dizajnerske filozofije, Django, poslednji pristup January 4, 2008.godine

Pokušacu da se složim sa malo dizajnerske odgovornosti, i to je razlog što ja smatram XML fk ao tempalt nije toliko loš koliko vam se cini.

Kao što sam ranije pomenuo, po mom iskustvu, kada pokušavate da zapolite prednjeg dizajnera, vidimo da li je on potpuno spreman da usvoji XSLT.

Ne da je Django loš po mojoj sopstvenoj proceni; Siguran sam da ima mnogih za koje ce XML-baziran templatr biti neodgovarajuci. Moj cilj ovde je da naglasim da ima mnogo njih koji ce reci da je XSLT sasvim odgovarajuci, takode.

(I to nije kritika Django, nimalo. Samo sam pogledao i zavirio u njega sasvim kratko, i vec sam oduševljen!)

Smatra se da je kodiranje loše; Rucno pisanje svih kodova je neefikasno

Onbo što uobicajeno cujem jeste briga (obicno od programera srednjeg dela koji žele da izbegnu pisanje HTML) da je neefikasno rucno napisati ceo kod. Mogu da razumem tu brigu, i ja sam se nekada tako osecao kada sam više radio srednji deo nego krajnji deo.

Ipak, ja samtram da je cak suprotnost ono pravo. Nakon što sam ga mnogo godina koristio, nekoliko mojih kolega i ja samo došli do zakljuckada je mnogo produktivnije na ovaj nacin napraviti veb sajt, jer mi znamo šta da stavimo u autput, i ne bakcemo se mnogo sa alatom koji bi trebalo da genriše HTML tili da ih natera da rade stvari koje inace ne žele. Mi takode pomažemo da se minimizira, ili potpuno izbegne prenapadan bloat koji poseduju mnogi alati.

Kao dodatak, prošlo iskustvo sugeriše da je mnogo projekata sa manjee kodova nego mšto je potrebno kod npr C#/ASP.NET templata (kao drvo/tabela primer koji smo ranije pokazali).

Nema šanse da ce neko kupiti sve ako je izgubio interesovanje na drugoj strani

Možda ce kupovina biti ogranicena ako nema naslenog efektau zakljucavanju kupca.

To je miks. Uzmite na primer .NET. Microsoft nece popustiti sa svojom kontrolom i pristupom i dovešce do samo pojacanog targetiranja razvoja. To takode smanjuje zavisnost od Microsoft!

Smatram da ako ova XSLT ideja bude u velikoj meri, onda ce je otvoreni izvori/platforme pre prihvatiti, iako se to nbe može nikako predvideti.

XSLT za veb baziran Pogled koji još nije preuzet tako da je to možda loš izbor

IMislim da ovaj stav mora imati svoju granicu. Ipak takodje smatram da ima mnogo drugih razloga zato XSLT to nije preuteo.

Na primer, nije možda uljudno da se prebaci XSLT alat jer nije dovoljno zreo- dok je alat XSLT sazrevao druge tehnologije su naišle.

Kao dodatak, nijedan podatak nije lako predstaviti, ili ga konvertovati, XML, mi drugi alati koji su kasnije ugradivani nisu ni postojali u prošlosti.

Ali scenario jaja-kokošpka koji smo gore pomenuli IDEs koji ne podržava XSLT iako XSLT nema mnogo trakcije u ovoj oblasti, što takode može biti jedan od razloga. I, kao što smo gore naglasili, neki prodavci naravno promoivišu stvari koje rade na svoj sopstveni nacin kao što su utvoreni standardi što nekome predstavlja teškucu da prede na drugu platformu, ako je to neophodno.

Naravno,programeri, koji ne vole dati jezik mogu dsa naprave problem. (Java svet se cini tako velikim, onako kako ga ja vidim iako ja nemam mnoge dodirtne tacke sa tim ili bilo kakvo iskustvo sa Java ovih dana, ako neko zna nešto više nak mi slobodno kaže!)

Koristili smo ovaj XSLT pristup veoma uspešno kod velikog broja projekata, od kojih je jedan od najpoznatijih i najviše hvaljenih veb sajtova u Velikoj Britaniji, ako ne i u svetu. Nismo imali prilike da o njemu pišemo. Možda ima nekih (mnogih?) koji nisu imali prilike da pišu o slicnim pristupima? BBC kako sam shavtio od nekih prijatelja/kolega radio je na tome u prošlosti ali je to vec poznat scenario za pregenerisanje odredjenih veb stranica/podstranica. Tako da ne može sve biti loše!

Kao dodatak, validan (nevalidan) razlog da se nešto odbaci u prošlosti ne mora direktno implicirati da se ta ista stvar ne može u buducnosti koristiti narocito zahvaljujuci tempu razvoja i dinamickim okruženjima kao što je Internet. Vremena i tehnologije se menjaju, tako da je ovo možda poslednje revalidizacija (koja se naravno slepo ne prihvata!).

Zakljucak

Uprkos zabrinutosti, ili prividnim brigama, vidim potencijalne prednosti koje bi trebalo da se razmotre.

Postoje okviri koji su bazirani na XSLT- iako nisu toliko popularni. ( Apache’s Cocoon projecka mi pada na pamet, na primer.)

Smatram da su advokati veb standarda jako gurali da bi bi se otvoreni standardi prihvatili sa strane klijenata na vebu, tako da ima i slucajeva kada XSLT ona strani servera da bi pomogao u odredenim situacijama.

Ali mnogo stvari zavisi od liicnosti, i odredenih zahteva. Neki ljudi stvarno ne vole stavri bazirane na XML, što je u redu jer ponekad postoji i pravi razlog za to.

Neki nisu ubedeni idejom kontrolisanog markiranjasmatrajuci da je to nevažno ili da ce njihov prodavac sve to za njih sortirati!

Ne zalažem se za stranu da bi XSLT trebalo da bude jedini nacin kako se stvari rade. Ali smatram da može biti koristan u mnogim situacijama i ja smatram da mi je mnogo pomogao. Ako pratimo nideju da koristimo veb standard na strani klijenta, korišcenje XSLT je onda na strani servera (makar za generaciju autputa) što mi se svida. Ono cemu se ja nadam da cu uraditi kod sledecih postova jeste da prikažem neke mogucnosti.

Primeri

Da bismo još istražili, jer je ovaj post vec sasvim prevelik, sledecih dana ili nedelja (kada god nadem vremena!) dodacu još postova da sve ovo demonstriram

  • korišcenje testiranog XSLT
  • “Objektno-orijentisani” XSLT
  • XSLT kao deo Pogleda za MVC, ili deo obrasca Stranice Kontrolora.

[[Vi možete se, s pravom, pitati zašto je ovo stranica WordPress bloga, a ne nešto što sam napisao koristeci npr PHP sa XSLT! U pravu ste, ali nedostatak vremena je glavna stvar: Onda bi mi trebalo najmanje dve godine da samo zapocnem da pišem ovaj blog! Jednog dana cu sve to prebaciti, samo da mi vreme dozvoli!]

U meduvremenu ako ste dovde vec došli hvala vam što ste me trpeli!

Da li imate slicne brige, da li se salžete ili ne?

Fotografije

“XSL Transformers” sa dozvolom od NaGraDim iz flickr. Pogledajte fotografiju u originalu na http://www.flickr.com/photos/nagradim/750087828/.

Published (Last edited): 06-11-2012 , source: http://www.onenaught.com/posts/8/xslt-in-server-side-web-frameworks