Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

Naszło mnie niedawno na przyswojenie sobie podstawowych informacji o XForms. Tyle się o tym teraz mówi, nowoczesne przeglądarki wymieniają wsparcie dla tej technologii w changelogach swoich najnowszych wersji, należałoby więc nadrobić i conieco poczytać. Specyfikacja jest za trudna jak na początek, więc rozpocząłem szukanie. Znalazłem jedynie materiały angielskie:

Przyznam szczerze, że ebook i parę artykułów później wreszcie zrozumiałem ideę kryjącą się za XForms i naciski jego zwolenników na producentów oprogramowania.

Okazuje się bowiem, że ten cały Ajax to oczywiście sposób na polepszenie user-experience i procesu wymiany danych z serwerem, ale także - kompatybilny z większością przeglądarek krok w kierunku tego co prezentuje XForms. Innymi słowy - globalny sukces Ajax-a przesądza o przyszłym sukcesie XForms - standardzie, którego Ajax jest nazwijmy, młodszym bratem.

Zwyczajne formularze są oparte na elementach <form> - wszystkie widgety muszą znaleźć się w środku takiego znacznika. XForms jest inne - w <head/> deklarujesz model formularza za pomocą określonych <xf:instance> - struktury XML podlinkowanej w src="" albo stworzonej wewnątrz elementu. Następnie w dokumencie wstawiasz gdzie chcesz „pola formularza” odwołując się do zadeklarowanego modelu - można sobie tylko wyobrazić jakie zaawansowane formularze będzie można budować. Widgety są podłączone do elementów XML-a za pomocą XPath - bardzo wydajnej metody stosowanej między innymi podczas trawersowania drzewa dokumentu w DOM Level 3.

Dostajemy o wiele bardziej kompleksowy zestaw widgetów - i mimo że renderowanie zależne jest od możliwości agenta (inaczej może przedstawiać telefon komórkowy a inaczej przeglądarka), to wreszcie można odstawić JavaScript aby uzyskać slider, tooltip albo wypisać błąd w formularzu. Wreszcie - XForms daje nam możliwości walidacyjne oraz możliwość korzystania z wyrażeń regularnych oraz masek wpisywanych znaków (kod pocztowy, adres email).

XForms udostępniają możliwość chowania tych elementów formularza, które aktualnie nie są potrzebne albo nie są ważne. Teraz należy to robić za pomocą JavaScriptu. Służy do tego <switch> - za jego pomocą także można symulować stronicowanie formularza.

Widgety formularza są nastawione na to co chcemy przekazać do serwera, a nie jak. Jeśli tylko mamy odpowiednie urządzenia, nic nie stoi na przeszkodzie, żeby nagrać głos, podpisać się odręcznie albo zrobić zdjęcie tęczówki i od razu takie dane wysłać. Teraz musiałby być to wcześniej zarejestrowany / stworzony plik. Nie sposób tego zrobić w jakimś terminalu na poczcie albo lotnisku.

Dane wypełnionego formularza są zapisywane jako XML. Jako, że XForms jest cały czas „podłączone” do odpowiedniej struktury XML, wystarczy zmienić zawartość jej drzewa, aby odpowiednie pola zostały automatycznie wypełnione - na przykład zapamiętywanie wpisanych danych albo automatyka w wypełnianiu zeznań podatkowych. Wszystko on the fly.

Działa to także na odwrót. Wszystko co teraz przyprawia nas o wypieki - asynchroniczne zapytania, dynamiczne fragmenty stron - są niejako standardem w XForms. Każda zmiana zapytania będzie uaktualniała to co wyświetla się na stronie - za pomocą <xf:output>. Wpisujesz w pole tekstowe komentarz na blogu, a niżej na żywo możesz mieć podgląd, bez krzytyny skryptowania. Co więcej - w bloku <xf:repeat> pokażą się na żywo wszystkie wyniki wyszukiwania - cały czas odpowiadające ilości elementów w wybranym XML-u, tak!.

Wynikiem formularza XForms jest struktura XML, którą można zapisać od razu do bazy danych albo przetwarzać dalej na kolejnych szczeblach. XML jest łatwy do zarządzania, ponownego wykorzystania. No i łatwo go debugować.

Najlepiej o zaletach XForms mówią dema. Aby udało się otworzyć stronę z tymi nowoczesnymi formularzami, należy zaopatrzyć się w narzędzia:

Obydwa narzędzia mają na swoich stronach odpowiednie demonstracje. Polecam zwłaszcza Amazon Search na formsPlayer. Wydaje się to niepozorne, bo znamy (bloggerzy) już potęgę Ajax-a - Live Search. Ale gdy zrozumieć, że nie ma tam ani grama JSa, to moim zdaniem robi się ciekawie. ;) Polecam pooglądać różne dema i przykłady - są bardzo przyjemne i w miarę przystępny sposób wyjaśniają zawiłości tej nowej technologii.

Notka: Nie jestem ekspertem od XML-a i oczywiście mogę się mylić - dopiero co liznąłem tych informacji. Tak czy inaczej zachęcam do skomentowania, wytknięcia błędów i rozwinięcia tematu albo podrzucenia paru ciekawych linków.

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

Informacje o wpisie

Napisał riddle 16 maja 2006 o 05:29

Kategorie: XML, XSL, XUL...

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

  1. Nie ma wątpliwości, że XFroms to przyszłość, tylko jestem ciekawy, kiedy przyszłość stanie się teraźniejszością.

  2. dokładnie, Radzio. W sumie patrząc jak się "rozwija" IE to niestety XForms chyba szybko standardem sie nie stanie (póki Microsoft jeszcze posiada większość rynku), a wymóg posiadania jakiejś przeglądarki czy ActiveX'a nie jest za wygodnym sposobem. Póki co pozostaje nam się nauczyć XForma, a z tego co piszesz to warto, i grzecznie czekać kiedy stanie się standardem ;-)

  3. Hmm... a co z WebForms 2.0? To podobne jest i jest już w Operze 9.

    Są dla WF przygotowane skrypty js tak aby działały formularze bez problemu w IE. Coś takiego jak IE7 od Deana Edwardsa...

    Dla IE to będzie JS a dla normalnych przeglądarek coś normalnego. (nie wiem jak FF).

  4. W FF jakiś maniak napisze plugina i tyle.

  5. Ancestor 5 16 maja 2006, 19:40

    Jeśli chodzi o Gecko, to prace nad implementacją trwają już od dłuższego czasu. _Przypuszczam_, że zostanie ona zawarta w Gecko 1.9 (pierwsza połowa 2007, oparty na nim będzie Firefox 3).

    Obecna implementacja jest dostępna w (nomen-omen) formie rozszerzenia https://addons.mozilla.org/firefox/824/

    Tutaj jest strona projektu, w dziale Sample forms jest kilka ciekawych przykładów, m.in. XForms "ubrane" w skina SVG. http://www.mozilla.org/projects/xforms/

  6. http://olav.dk/wf2/demo/ - demo Wf2 - działa w Operze 9 i IE6 (niemożliwe... nie działa w FF ;)

    Znaczy działa w FF, ale tak nieciekawie... Znaczy jak normalne formularze.

  7. Adas:
    1. Napisz tak jak jest czyli ta strona działa pod IE nie dla tego, że IE obsługuje WF2 tylko dlatego, że na stronie dołączony został HTC. A ponieważ w FF jest obsluga XBL-a (przypominam, że Opera nie obsługuje ani HTC ani XBL) to dana strona może działać na identyczniej zasadzie pod FF, jeśli tylko dołączony będzie odpowiedni XBL. Dlatego zdecyfuj się i napisz, że FF i IE nie obsługują WF2 (jesli za "obsługę" uważasz obsługę natywną) albo napisz, że i w IE działa i w FF działa.
    2. Jakbyś nie zayważył wpis jest o XForms a nie o WF2, więc trzymaj się tematu.

  8. Przyglądnąłem się swego czasu krótko XFormsom (puryści językowi: sio!) i idea wydaje się świetna, aczkolwiek dostrzegam jedną wadę. Obawiam się mianowicie, że cała idea walidacji client-side jest zdziebko bez sensu, a to z tego względu, że w ostatecznej postaci i tak musi to polecieć do serwera, i tak. Co mam na myśli? Otóż to, że serwer i tak musi zwalidować dostarczone dane (niech to będzie XML, konkretne zmienne POST czy co tam), coby user (chakier ;-) ) nie mógł strzelić SQL injectiona albo innej bidy. Obawiam się tym samym, że walidacja w XForms może dawać poczucie złudnego bezpieczeństwa. Temat walidacji client-side/server-side jest zresztą skrajnie ciekawy, chętnie usłyszałbym komentarze innych na ten temat, ale już kończę off-topować.

  9. @Void, a co powiesz na generatory XForms z modelu danych? Albo wręcz na odwrót, czyli generowanie walidacji server-side z Xforms. W końcu to XML – język opisu… wszystkiego.
    Jestem programistą PHP, w tym momencie korzystam z frameworka Agavi i powiem Tobie, że prościutkie byłoby podłączenie Xfroms pod istniejący tam system walidacji.

    Żyć nie umierać.

    Pozdrawiam, Alan

  10. @LBO: bardzo ciekawy pomysł, zwłaszcza że ostatnio siedzę w Zend Framework i tamtejszy mechanizm walidacji pozostawia sporo do życzenia (aczkolwiek sam framework jest z mojego punktu widzenia wyśmienity). Twój pomysł jest bardzo dobry i jeśli tylko znajdę chwilę czasu na research rozważę go :-). Swoją drogą, korzystałeś z ZF? Jeśli tak, jak wypada porównanie ZF-Agavi? Odpisz proszę na joggerze u mnie — coby nie spamować wątku już :-)

  11. Dwa lata minęły a XForm jak nie było tak nie ma...

  12. Co ja mówie 4 lata

  13. Jeśli nie liczyć xsltforms i plugina xforms dla FF to faktycznie nie ma nic ciekawego. Jest oczywiście orbeon i chiba, ale to wymaga większych zasobów od serwera a do tego nadal trzeba się komunikować AJAXem. To co jest wyśmienite np. w pluginie do FF, to fakt, że wszystkie akcje odbywają się po stronie klienta: walidacja, przełączanie widoków, itd. Zobaczcie jak wiele razy komunikuje się z serwerem formularz wystawiony na chibie.