Subsections


2 Technologie

W tym rozdziale znajduje się opis podstawowych technik wykorzystywanych przez LSP oraz alternatywne środowiska o podobnej funkcjonalności, jak również krótkie porównanie tychże produktów. Lista ta nie jest kompletnym opracowaniem technologii związanych z programowaniem usług sieciowych, ma jedynie na celu bardzo pobieżne przedstawienie poruszanych tematów. Pojęcia i terminy tu opisane będą często wykorzystywane w dalszych częściach pracy.


1 XML

XML, czyli Extensible Markup Language (Rozszerzalny Język Znaczników) jest to metajęzyk służący do reprezentacji dokumentów ustandaryzowany przez World Wide Web Consortium (w skrócie W3C)[*], czyli Konsorcjum WWW ([xml00]). Celem standardu jest unifikacja sposobu zapisu dowolnych dokumentów, umożliwienie prostego ich odczytywania oraz przetwarzania na wszystkich komputerach. Dokumenty XML składają się z tekstu, znaczników obejmujących fragmenty tekstu o specjalnym znaczeniu (definiujących strukturę dokumentu) oraz atrybutów przypisanych do znaczników (określających własności fragmentów ujętych w odpowiedni znacznik). Jest to meta-język, mogący służyć do reprezentacji dowolnego rodzaju dokumentu. Każdy typ dokumentu wymaga właściwej dla siebie specyfikacji języka, zgodnej z XML i określającej specyficzne zasady konstrukcji dokumentu (zbiór znaczników, ich atrybutów oraz ograniczenia na ich wykorzystywanie).

Język definiujący własny zestaw znaczników (zgodny z XML) oraz program przetwarzający dokumenty w tym języku określa się jako zastosowanie XML.

Wykorzystanie XML jako języka zapisu dokumentu, programów czy też struktur danych ma wiele zalet i jednocześnie kilka wad (por. p. 2.1.1), przy czym zarówno wady, jak i zalety są dość niezależne od zastosowania. Do zalet należy zaliczyć to, iż XML ma ścisłą składnię (wyrażalną w postaci gramatyki bezkontekstowej; definicja znajduje się w [xml00]). Dzięki temu do wczytywania i przetwarzania takich dokumentów nie są potrzebne wyrafinowane parsery. Co więcej, dowolny parser XML może być wykorzystany do wczytywania dowolnych dokumentów. Kolejną zaletą jest to, że dokumenty takie są czytelne dla człowieka. Istnieje olbrzymia liczba narzędzi służących do przetwarzania dokumentów XML na inne formaty. Przede wszystkim warto wspomnieć o procesorach XSLT (por. p. 2.1.3), pozwalających zdefiniować przekształcenia w postaci dokumentu XML.


1 Parsery XML

Niewątpliwą wadą XML jest rozmiar dokumentów, ponieważ wszystkie informacje strukturalne zapisane są w formie tekstowej. Dzięki temu jednak pliki XML dość dobrze się kompresuje, co częściowo niweluje tę wadę. Pokrewnym problemem jest prędkość działania i zużycie pamięci. Programy operujące na dokumentach XML wymagają dodatkowego czasu na przetworzenie informacji z formatu XML do własnej reprezentacji, a ponadto w standardowych zastosowaniach konieczne jest wczytanie całego dokumentu do pamięci oraz przechowywanie całego dotychczasowego wyniku działania. To wszystko zależy od wybranego sposobu przetwarzania XML; w kolejnych akapitach opisuję najpopularniejsze z nich.


1 DOM

Document Object Model, w skrócie DOM jest to obiektowa reprezentacja dokumentu XML, również zdefiniowana przez World Wide Web Consortium ([dom98]). Jest to jedno z najczęściej stosowanych rozwiązań, pomimo tego, że to właśnie w tym modelu wręcz niemożliwe jest zwolnienie pamięci zajmowanej przez dokument do czasu zakończenia jego przetwarzania. Konieczne jest też przechowywanie w pamięci całego dokumentu wyjściowego (nie można zwolnić tej pamięci usuwając fragmenty już gotowe). Technika ta jest szczególnie popularna w językach obiektowych (Java, C++), ponieważ strukturę dokumentu XML można w naturalny sposób przedstawić w postaci drzewa obiektów odpowiadających węzłom.


2 SAX

SAX czyli Simple API for XML to metoda przetwarzania dokumentu jako strumienia elementów (tekst, początkowe i końcowe znaczniki węzłów, znaczniki kontrolne itd.). Parser SAX zazwyczaj sprawdza poprawność dokumentu przed rozpoczęciem przetwarzania, ale w miarę przetwarzania może zwalniać pamięć. Można też stworzyć (istnieją takie implementacje) parser, który sprawdza błędy na bieżąco i dzięki temu może działać bez zużywania dużych ilości pamięci.

Aplikacje korzystające z SAX muszą same stworzyć strukturę dokumentu na podstawie informacji dostarczanych przez parser. Część istniejących implementacji DOM bazuje na takich parserach, zajmując się jedynie tworzeniem drzewa obiektów.


3 TWIG

TWIG jest modelem przetwarzania XML spotykanym tylko w programach w Perlu. Podobnie jak DOM dokument przedstawia się w nim (dość naturalnie) jako drzewo węzłów, tyle że jest ono reprezentowane przez specyficzne dla Perla tablice mieszające (ang. hash tables).

Podstawowym założeniem tej metody jest utrzymywanie w pamięci tylko tej części drzewa dokumentu, która aktualnie musi być przetwarzana. W połączeniu z odpowiednim parserem SAX (który jest wymagany jako niższa warstwa przetwarzania), technika ta umożliwia wczytywanie i tworzenie dokumentów XML bez zużywania olbrzymich ilości pamięci. Jest to dość istotne, bo kilkudziesięciomegabajtowy dokument po przekształceniu na DOM może wymagać kilku gigabajtów pamięci, co dość znacznie wpływa na koszt systemu i czas działania aplikacji.


2 XPath

XPath (pełna nazwa to XML Path Language) to język służący do określania fragmentów dokumentów XML poprzez podanie ścieżki. Ścieżka nie jest zapisywana w formie XML, tylko w formie ściśle określonych, prostych wyrażeń. Standard XPpath został opracowany przez W3C i opublikowany w [xpath99].


3 XSLT

XSL Transformations, w skrócie XSLT, to język pozwalający wyrazić w XML przekształcenia pomiędzy różnymi formatami dokumentów -- na przykład z formatu aplikacji do HTML, plików tekstowych lub też po prostu do formatu innej aplikacji.

XSLT został opracowany przez W3C w [xslt99], w ramach prac nad językiem formatowania i przetwarzania tekstów. Część zajmująca się formatowaniem to Extensible Stylesheet Language, w skrócie XSL ([xsl01]).


2 Struktura serwisów sieciowych

W tej części pracy przedstawiam ogólnie przyjętą architekturę serwisu sieciowego. Będę się do niej odwoływać w dalszych podrozdziałach, dotyczących konkretnych technologii.


1 Warstwa danych

Dane mogą pochodzić z dowolnych źródeł. Źródłem może być baza danych, pliki tekstowe, pliki XML, dane w postaci binarnej. W przypadku statycznych stron HTML warstwa danych może być połączona z warstwą prezentacji i w ogóle nie zawierać warstwy logiki. W przypadku niektórych zastosowań, warstwa danych może być nieistotna, jakkolwiek w większości przypadków języki tworzenia serwisów sieciowych zapewniają bardzo rozbudowane możliwości pobierania danych z różnych źródeł.


2 Warstwa logiki

Warstwa logiki to główna część aplikacji, odpowiedzialna za pobieranie z zewnątrz parametrów wykonania, pobieranie danych z warstwy danych oraz tworzenie treści. Treść ta może być w generowana w postaci ogólnej, np. dokumentu XML, lub też w postaci wyjściowej, czyli np. dokumentu w formacie PDF[*]. W tym drugim przypadku ma miejsce połączenie warstwy prezentacji i warstwy logiki.


3 Warstwa prezentacji

Ostatnim elementem serwisu jest prezentacja, czyli przekształcanie treści w celu przedstawienia jej na urządzeniu odbiorcy. Zależnie od używanych technologii, od warstwy tej może zależeć np. jedynie wystrój strony i krój czcionek, jak to ma miejsce w przypadku arkuszy stylów dla HTML. Może też od niej zależeć format dokumentu wynikowego, w sytuacji gdy treść tworzona w warstwie logiki jest dostarczana w formie dokumentu XML, a w warstwie prezentacji dokonywane są na nim przekształcenia XSLT.


3 Systemy szablonów

Systemy szablonów to środowiska służące do tworzenia serwisów sieciowych łączące język programowania z językiem prezentacji (głównie HTML). Taki połączony dokument, czyli szablon, jest przetwarzany w chwili pobierania przez użytkownika, elementy języka są wykonywane, a reszta dokumentu jest traktowana jako instrukcje wypisywania tekstu.

Podejście takie ma równie wiele zalet, co i wad -- pierwsze wynikają głównie z prostoty tego rozwiązania, drugie zaś z konieczności przeplatania dwóch różnych języków. Poważnym ograniczeniem tego typu technik jest to, że logika aplikacji jest bardzo silnie związana z warstwą prezentacji.


1 PHP

Język PHP jest najpopularniejszym obecnie środowiskiem do tworzenia serwisów sieciowych. Jego największe zalety to prostota, cena (jest to produkt darmowy) oraz spora wbudowana funkcjonalność. W PHP brakuje niestety możliwości rozszerzania systemu w prosty sposób (nie można łatwo dodawać nowych możliwości z 'zewnątrz', wymaga to modyfikacji kodu i rekompilacji systemu). Kod pisany w PHP, ze względu na tendencję do przeplatania programu z dokumentem, trudno się czyta i jest on bardzo podatny na błędy.

PHP nie był projektowany z myślą o XML i (przynajmniej na razie) wykorzystywanie technologii XML w programach napisanych w tym języku nie jest wygodne, wymaga zrezygnowania z prostego modelu tworzenia dokumentów wynikowych, czyli z podstawowej zalety PHP.

Niezależnie od stosowania XML lub nie, pozostają jeszcze ograniczenia wynikające z braku ujednoliconego interfejsu do baz danych oraz nieprzenośności samych programów w PHP, ponieważ jego wersje na różne systemy mają różne możliwości.


2 ASP, JSP

ASP (Active Server Pages) oraz emphJSP (Java Server Pages) to techniki o podobnej zasadzie działania co PHP, lansowane przez, odpowiednio, firmy Microsoft oraz Sun. W pierwszej z nich językiem zapisu aplikacji jest VisualBasic, w drugiej Java. W porównaniu z PHP oferują one mniejsze możliwości, mniejszą przenośność (w szczególności ASP), a jednocześnie posiadają te same wady.

Obecnie technologie te w oryginalnej postaci są wykorzystywane coraz rzadziej, za to powstały ich nowe wersje: ASP.NET to rozszerzenie ASP o możliwości zawarte w środowisku .NET, JSP zaś zostało zastąpione przez XSP, stanowiące część projektu Cocoon, opisywanego w p. 2.4, poświęconym serwerom aplikacji XML.


3 Embperl

Embperl to środowisko działające bardzo podobnie do PHP, wykorzystujące Perl jako język logiki aplikacji. Rozwiązanie to jest niezbyt popularne, głównie ze względu na to, że Perl jest trudniejszy od PHP. Z drugiej strony Perl jest łatwo rozszerzalny, posiada zunifikowany system dostępu do baz danych, działa na wielu platformach, a na dodatek w sieci dostępne są setki darmowych bibliotek -- i wszystko to można wykorzystać w Embperl.

Przy tym wszystkim należy pamiętać o wadach -- w Perlu łatwo pisze się błędne programy, a dobre równie trudno co w PHP. Znacznie trudniej się go nauczyć, więc trudno polecać ten język projektantom stron chcących pisać aplikacje internetowe.


4 Serwery aplikacyjne oparte na XML

Serwery aplikacji XML to środowiska o podobnej zasadzie działania co systemy szablonów, wykorzystujące język XML zamiast HTML do zapisu treści generowanych dokumentów. Instrukcje są wplatane w przetwarzany dokument, najczęściej przy użyciu specjalnych znaczników (tylko do przechowywania instrukcji, sam kod jest zapisywany w tradycyjnym języku programowania).

Poza używaniem XML do zapisu treści, najważniejszą różnicą jest przejrzyste rozdzielenie warstwy prezentacji i warstwy logiki -- do tworzenia dokumentów wyjściowych zazwyczaj wykorzystuje się XSLT.


1 CocoonSP

Cocoon to XML Application Server napisany w Javie. Wspiera on tzw. XML Server Pages (w skrócie XSP), czyli aplikacje WWW napisane w XML, wykorzystujące Javę jako język logiki. Podobnie jak w PHP, programy stworzone przy użyciu tej techniki zawierają niezależne elementy napisane w XML oraz w Javie.

Niewątpliwą zaletą tego środowiska jest jego duża przenośność, da się je uruchomić wszędzie tam, gdzie może działać Java. Z drugiej strony, rozwiązanie to wymaga bardzo dużych ilości pamięci, co jest standardowym problemem każdego programu napisanego w Javie.

W porównaniu z PHP, programy napisane w XSP (i w Javie) są bardziej czytelne i mniej podatne na błędy. Nadal jednak język logiki jest inny niż język zapisu treści i problemy te pozostają, jedynie częściowo rozwiązane przez zastosowanie Javy.


2 Apache AxKitSP

AxKit to także XML Application Server, przeznaczony dla serwera WWW Apache. W odróżnieniu od Cocoon, jest napisany w Perlu, można go rozszerzać pisząc kolejne moduły w Perlu (podobnie jak Cocoon, wspiera XSP, z Perlem jako językiem logiki). Aplikacje działające w środowisku XSP są automatycznie tłumaczone na kod w Perlu i kompilowane, co w rezultacie zapewnia bardzo dobrą szybkość działania.

Tak samo jak w Cocoon, logika programu nie jest zapisywana w XML, lecz w innym języku, co wprowadza problem kilku struktur dokumentu, podobnie jak ma to miejsce w PHP, JSP, ASP czy też Embperl. Na dodatek, Perl jest znacznie mniej przejrzysty niż Java, a tym samym wykorzystując tą wersję XSP znacznie łatwiej popełnić błąd niż przy użyciu Cocoon.

Środowisko to może działać tylko i wyłącznie jako moduł serwera Apache z modułem mod_perl, co powoduje, że na niektórych platformach niestety nie będzie można go uruchomić.

5 Podsumowanie

1 Pozostałe technologie

Analiza wszystkich produktów o podobnym zastosowaniu, czy choćby ich kategorii, przekracza znacznie zakres tej pracy. W bibliografii (pozycje [rpb02], [rpb01]) znaleźć można bardzo ciekawe, dość obszerne i często aktualizowane publikacje poświęcone najważniejszym technologiom z dziedziny XML w zastosowaniach bazodanowych. Warto także zapoznać się z zawartością portali informacyjnych poświęconych oprogramowaniu XML
(http:www.xmlsoftware.com/, http:www.application-servers.com/).

2 Wnioski

Rozwiązania najbliższe celom LSP to serwery aplikacji XML oparte na XSP (por. p. 2.4). Niestety żadne z popularnych rozwiązań nie umożliwia zapisu logiki programu w XML, a jedynie (w najlepszym przypadku) traktuje XML jako opakowanie innego języka programowania, wykorzystując go do zdefiniowania struktury dokumentu wyjściowego.

Część z omówionych technologii to w pełni rozbudowane języki programowania, nawet jeżeli ich głównym celem jest generowanie stron WWW. Daje to co prawda duże możliwości, ale z drugiej strony niepotrzebnie przenosi do języka logiki serwisu sieciowego niskopoziomowe funkcje tam nie przynależące.

Większość popularnych środowisk tworzenia serwisów sieciowych pozwala na przenoszenie oprogramowania pomiędzy różnymi systemami. W przypadku PHP bardziej zaawansowane funkcje są co prawda nieprzenośne, ale sam język jest. Tak więc, bardzo ważne jest, aby aplikacje napisane w LSP również posiadały tę cechę.

Nowsze środowiska pozwalają na wykorzystywanie technologii związanych z XML, przede wszystkim wspierając przetwarzanie dokumentów za pomocą XSLT. Dzięki używaniu wspólnych standardów, takich jak właśnie XSLT, odpowiednie fragmenty aplikacji, napisane w danym języku, można wykorzystywać wielokrotnie, również w innych środowiskach.



Footnotes

...W3C)[*]
W3C - Organizacja zajmująca się standaryzacją technologii internetowych związanych z WWW, zob. http:www.w3.org/.
...PDF[*]
PDF - Portable Document Format, format zapisu dokumentów stworzony przez firmę Adobe, zapewniający (w teorii) pełną przenośność, tj. identyczną prezentację na dowolnym systemie.