plik


ÿþBudowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java, technologii WebMacro i Topic Maps Jakub GaBski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski Instytut Informatyki Politechniki PoznaDskiej Piotrowo 3A, 60-965 PoznaD Zbyszko.Krolikowski@cs.put.poznan.pl Streszczenie. W pracy zostan przedstawione zastosowania jzyka Java i technologii z nim zwizanych jako uniwersalnych narzdzi do budowania aplikacji internetowych w kontek[cie klasycznej trójwarstwowej architektury dla tego typu aplikacji. Omówione zostan nastpujce technologie: JDBC jako uniwersalne lcze do baz danych, Java Servlets w polczeniu z technologi WebMacro jako warstwa [rodkowa (tzw. business application logic), XML jako forma przechowywania dokumentów w bazie danych oraz TopicMaps jako metoda definiowania powizaD midzy danymi. W artykule zamieszczona zostanie próba porównania tych technologii z innymi dostpnymi rozwizaniami. Wymienione technologie omówione zostan w oparciu o do[wiadczenia zdobyte przez autorów podczas realizacji projektu portalu internetowego w Niemczech.. 1. Wprowadzenie Sie Internet wczoraj to sie projektowana i budowana dla naukowców. Nowe czasy to równie| nowe wymagania. Spowodowaly one, |e równie| Internet musial si zmieni. Dzisiejszy Internet to sie zorientowana na zastosowania naukowe, ale tak|e na biznes. Firmy internetowe stymuluj obecnie rozwój gospodarczy wielu krajów i nale|y si z nimi liczy. Takie upowszechnienie si Internetu wymusilo powstanie wielu nowych technologii, które ulatwiaj (przyspieszaj) budow aplikacji internetowych. Powstaly tak|e liczne technologie i narzdzia do integracji istniejcych ju| systemów z nowymi. Niniejsza praca jest po[wicona przegldowi tych technologii. W pracy postaramy si przedstawi znane i powszechnie u|ywane technologie, a tak|e technologie nowatorskie. Dokonamy próby ich porównania, poka|emy ich zalety i wady, szanse rozwoju oraz jak mo|na je wykorzysta przy budowie nowoczesnych aplikacji (portali) internetowych. 2. Przegld dostpnych dotychczas technologii budowy aplikacji internetowych Pocztki Internetu to wielo[ protokolów (Veronica, Gopher, X.500...). Ich rozwój zostal w znacznym stopniu zahamowany przez pojawienie si WWW (World Wide Web). Pocztki WWW to HTML i strony statyczne. Kolejny krok to graficzne przegldarki WWW (Netscape, Mosaic). Jednak i to szybko stalo si nie wystarczajce. Naturalnym, a zarazem najprostszym sposobem usunicia sygnalizowanych niedogodno[ci stalo si rozwizanie polegajce na polczeniu technologii baz danych i stron WWW. Informacje s przechowywane w bazie danych systemu informacyjnego, a nastpnie przez mechanizmy po[redniczce przetwarzane na kod stron jzyka HTML. Przyjrzyjmy si najpierw technologii CGI (ang. Common Gateway Interface). Polega ona na uruchamianiu osobnych procesów w [rodowisku uruchomieniowym serwera WWW. Program mo|e by napisany w dowolnym jzyku, którego kompilator lub interpreter jest dostpny na serwerze. Mo|e by to zarówno interpretowany jzyk skryptowy, na przyklad Perl, jak i jzyk kompilowany C lub Pascal. Program w CGI mo|e komunikowa si, na przyklad z baz danych, za pomoc standardu ODBC (ang. Open Database Connectivity), a rezultaty w postaci sformatowanego HTML-a s kierowane bezpo[rednio do przegldarki. Jednak CGI ma sporo wad. Po pierwsze, 138 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski ka|de |danie powoduje ponowne uruchomienie programu CGI. Drug wad jest trudno[ przenoszenia programów na inne platformy sprztowo-programowe. Inn technologi jest PHP. PHP jest specjalnym jzykiem skryptowym, który jest umieszczony w kodzie stron HTML-owych na serwerze WWW. Podczas pobierania takich stron skrypt jest wykonywany generujc odpowiedni rezultat. Zaletami PHP jest latwa integracja z bazami danych, dostpno[ wielu funkcji i prostota. PHP jest obecnie szeroko u|ywan technologi nawet przy tworzeniu du|ych portali. Równie| du|e firmy takie jak: Netscape czy Oracle przedstawily swoje rozwizania do tworzenia portali internetowych. Netscape oferuje bezpo[redni interfejs do swoich serwerów Web- owych  NSAPI (ang. Netscape Server API). NSAPI jest zbiorem funkcji rozszerzajcych funkcjonalno[ serwera Web-u. NSAPI jest rozwizaniem o wiele szybszym od CGI  oferuje wiele funkcji zarówno do polczeD bazo-danowych i autoryzacji u|ytkowników. Szybko[ dzialania wynika z lepszej integracji z serwerem. Aplikacje NSAPI mog by uruchamiane jako proces serwera, mog wspóldzieli dane i zasoby z serwerem. Kolejn platform zaoferowala firma Oracle. Jest to Oracle Web Application Server (OWAS) + PL/SQL Cartridge. OWAS jest serwerem WWW rozszerzonym o mo|liwo[ generowania stron HTML kierowanych do przegldarki. Funkcjonalno[ serwera rozszerzona jest o PL/SQL Cartridge, który pozwala tworzy i przechowywa na serwerze procedury napisane w jzyku PL/SQL, slu|ce do generowania stron w HTML-u. Zyskujemy dziki temu doskonal dostpno[ do danych (poziom PL/SQL-a) za cen umieszczania kodu jzyka PL/SQL i HTML razem. Z naszych do[wiadczeD wynika, |e takie podej[cie przy du|ych projektach zmniejsza przejrzysto[ kodu, utrudnia zmiany i zarzdzanie projektem. Wad tej technologii jest tak|e stosunkowo wysoka cena. http://www.adres.com.pl/proc1 APPLICATION SERVER PRZEGLDARKA PL/SQL cartrige strona w HTML-u wywoBanie procedury create procedure proc1 HTML is begin ORACLE 8I .... .... PROCEDURY W PL/SQL end proc1; Rys. 1. Architektura Oracle Web Application Server i PL/SQL Cartridge Wszystkie sygnalizowane powy|ej technologie maj swoje zalety i wady. Wykorzystywanie CGI oznacza mal elastyczno[ (uzale|nienie si od jzyka i platformy systemowej), stosunkowo Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 139 nisk szybko[ dzialania (ka|de |danie powoduje uruchomienie nowej instancji programu). PHP pomimo wielu swoich zalet (latwy dostp do baz danych, szybko[, dobre wsparcie techniczne) ma tak|e wady. Na przyklad, w du|ych projektach umieszczanie skryptów napisanych w PHP naprzemiennie z HTML-em zmniejsza jego czytelno[ i utrudnia dokonywanie zmian. Stosujc NSAPI zyskujemy du| szybko[ dzialania za cen calkowitego uzale|nienia si od platformy firmy Netscape. Rozwizanie firmy Oracle jest wydajne i otwarte na rozwój, ma jednak pewne mankamenty [1]. Zostalo to przez autorów niniejszego artykulu zaobserwowane podczas realizacji projektu internetowego informatora turystycznego dla gminy Krokowa [1, 2]. Cz[ stron informatora byly to strony statyczne, natomiast reszta byla generowana dynamicznie z bazy danych przy pomocy Oracle PL/SQL Cartridge. Skladowane na serwerze procedury, napisane w jzyku PL/SQL generowaly na podstawie zapytaD do bazy danych kod w HTML-u. Rozwizanie mialo jedn wad, podobnie jak w PHP kod PL/SQL-a przeplatal si z HTML-em. Utrudnialo to w znacznym stopniu zarzdzanie logik jak i samym wygldem strony. Wpierw nale|alo wygenerowa strony przy u|yciu generatorów HTML-a, aby nastpnie zamienia je na cig instrukcji PL/SQL-a wy[wietlajcych skonstruowane strony. Tym samym wykonywana byla ta sama praca dwa razy. Architektur takiego rozwizania przedstawiono na rysunku 1. 3. Jzyk Java i technologie z nim zwizane jako uniwersalne narzdzia budowy aplikacji internetowych 3.1. Charakterystyka ogólna technologii jzyka Java Ten powstaly kilka lat temu jzyk programowania w znaczcy sposób zmienil pojcie projektowania i budowania o[rodków webowych. Java zawiera elementy programowania zarówno strukturalnego jak i obiektowego, zdarzeniowego i wspólbie|nego. Java jest zarazem bardzo bezpiecznym [rodowiskiem pisania programów. Wokól Javy rozwinlo si bardzo wiele technologii, takich jak: Java Servlets, JDBC (ang. Java Database Connectivity'), JSP (ang. Java Server Pages), RMI (ang. Remote Method Invocation), WebMacro. Klasy Javy standardowo dostarczaj funkcje kryptograficzne niezbdne podczas tworzenia aplikacji e-biznesowych. Java wspomaga tak|e proces parsingu jzyka XML. WEB SERVER JAVA PRZEGLDARKA ORACLE 8I WEBMACRO PRZEGLDARKA STRONY |danie JDBC TOPIC MAPS Rys. 2. Architektura nowoczesnego portalu internetowego oparta na technologii jzyka Java 140 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski Przedstawimy obecnie jak przy zastosowaniu jzyka Java i technologii z nim zwizanych oraz baz danych mo|na zbudowa nowoczesny portal internetowy, charakteryzujcy si du| wydajno[ci pracy, elastyczno[ci i otwarto[ci rozwizaD. Rysunek 2 przedstawia ogóln architektur takiego systemu. Najni|sz warstw (rys. 3) stanowi serwer bazy danych, np. Oracle 8i. Na nim przechowywane s dane w postaci XML-a. Przechowywane dokumenty s w postaci tak zwanych Topic Maps. Topic Maps s zbiorem dokumentów w SGML-u lub jak w naszym przypadku w XML-u. Topic Maps wykorzystywane s do definiowania zale|no[ci i zwizków pomidzy tak zwanymi topikami. Topic Maps zostan bli|ej przedstawione w dalszej cz[ci artykulu. ORACLE 8I DANE W XML TOPICMAPS (RESOURCES) Rys. 3. Najni|sza warstwa architektury systemu wykorzystuj cego technologi Java Warstw [rodkow stanowi serwer WWW, na przyklad Netscape Enterprise Server 4.0. Na serwerze znajduje si zbiór stron statycznych oraz zbiór tak zwanych servletów napisanych w jzyku Java wykorzystujcych technologi WebMacro oraz interfejs JDBC do lczenia si z baz danych. Servlety s programami wykonywanymi po stronie serwera WWW jako wtki wirtualnej maszyny Javy - JVM (ang. Java Virtual Machine). Servlet mo|e zosta uruchomiony wraz z przekazanymi doD parametrami, na przyklad z formularza. Poniewa| servlet jest programem napisanym w Javie, mo|na w nim korzysta z calego dostpnego interfejsu Java API - w tym z mechanizmów dostpu do baz danych (JDBC), zdalnych wywolaD metod (RMI) oraz interfejsu CORBA. Parametry pobrane ze strony mo|na przekazywa do nastpnego servletu, tworzc w ten sposób kaskad, w której ka|dy servlet odpowiedzialny jest za fragment witryny. Na wyj[ciu servlet generuje stron w HTML-u. Do uruchomienia servletów konieczne jest funkcjonowanie serwera WWW z zaimplementowanym modulem Javy. Najpopularniejszym z nich jest obecnie Apache z dodatkowym modulem jServe. Jednak takie podej[cie niewiele ró|niloby si od CGI, czy Oracle Web Application Server z PL/SQL Cartridge. Zyskujemy nowoczesny jzyk programowania, latwy dostp do baz daych, programowanie rozproszone za cen umieszczania kodu HTML wewntrz programu w Javie. Aby temu zapobiec mo|na zastosowa nowatorsk technologi WebMacro. Czym jest WebMacro ? WebMacro to zbiór klas Javy rozszerzajcy funkcjonalno[ servletów o mo|liwo[ odizolowania logiki servletów od projektowania wygldu stron przez nie generowanych. Takie podej[cie w du|ym stopniu ulatwia zarzdzania prac programistów i projektantów stron podczas realizacji du|ego projektu. Technologia WebMacro zostanie omówiona dokladnie w dalszej cz[ci pracy. Servlety napisane w Javie do lczenia si z baz danych wykorzystuj interfejs JDBC. Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 141 Trzeci wartstw stanowi przegldarka WWW. Tutaj wykonywane s skrypty napisane w jzyku JavaScript, oraz aplety napisane w Javie. Przy pomocy przegldarki zachodzi równie| interakcja z portalem. W dalszej cz[ci przedstawimy bli|ej wspomniane technologie tj. WebMacro, Topic Maps, XML, JDBC wykorzystywane podczas budowy du|ych portali internetowych. 3.2. Servlety Servlety s rozszerzeniami serwerów webowych  klasa Javy mo|e zosta zaladowana dynamicznie w celu rozszerzenia funkcjonalno[ci serwera. Servlety s podobne do firmowych rozszerzeD serwera poza tym, |e dzialaj w [rodowisku Java Virtual Machine, przez co s bezpieczne i przenaszalne. W przeciwieDstwie do CGI i FastCGI, które u|ywaj wielu procesów w celu obslu|enia osobnych |daD, servlety s w calo[ci wykonywane w odseparowanych wtkach procesu glównego serwera. Kolejn zalet servletów jest to, |e s one przenaszalne w dwóch aspektach: w stosunku do systemu operacyjnego (JVM) oraz serwera WWW. Servlety ze wzgldu na swoj natur pozostaj w silnym zwizku z serwerem, na przyklad servlet mo|e u|y serwera w celu translacji [cie|ek dostpu do plików, wykonywa logowanie, przeprowadza proces autoryzacji, wykonywa mapowanie typów MIME (ang. Multipurpose Internet Mail Extensions). Servlety cechuj si tak|e bezpieczeDstwem wynikajcym wprost z jzyka Java (np. [cisla kontrola typów, obsluga bldów poprzez wyjtki, mo|liwo[ u|ycia Java Security Manager). Na rysunku 4 przedstawiono ogólny schemat |ycia servletu. Web serwer z servletami Proces gBówny JVM wtek {danie dla Servlet1 JVM 1. wtek {danie dla Servlet2 Servlet2 wtek {danie dla Servlet1 Rys. 4. Cykl |ycia servletu 3.3. WebMacro WebMacro to zbiór klas rozszerzajcych funkcjonalno[ standardowych servletów o mo|liwo[ korzystania z szablonów. Tym samym umo|liwiaj one rozdzielenie i zrównoleglenie pracy projektantów stron i pracy programistów. WebMacro jest rozpowszechniane z licencj GPL, lcznie 142 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski ze zródlami. Jak na razie dostpna jest tylko wersja pre-release, jest ona jednak bardzo dobrze przetestowana i nie sprawia najmniejszych problemów. Programista piszc servlet, korzystajc z WebMacro tworzy klas dziedziczc z klasy WMServlet, w której musi oprogramowa metod handle(). To wla[nie ta metoda  analogicznie do metod doGet() i doPost() w klasycznych servletach - jest wykonywana aby obslu|y nadchodzce |danie HTTP. Nastpnie musi tylko wyznaczy warto[ci zmiennych jakie maj by dostpne podczas przetwarzania szablonu (ang. template) oraz oczywi[cie okre[li, którego szablonu WebMacro ma u|y do wygenerowania dokumentu. Wszystkie zmienne, które maj by widoczne podczas przetwarzania szablonu programista umieszcza w specjalnym obiekcie zwanym kontekstem. W kontek[cie mo|na umieszcza dowolnego typu obiekty a tak|e kolekcje obiektów (np. tablice). Zadaniem projektanta stron jest stworzenia potrzebnych szablonów, które niewiele ró|ni si od standardowych dokumentów HTML. Zawieraj one tylko kilka dodatkowych dyrektyw umo|liwiajcych dostp do danych udostpnianych przez programist. Szablon jest poddawany procesowi parsingu przez WebMacro i przetwarzany do wewntrznej reprezentacji (dla wikszej efektywno[ci). Szablon analizowany jest raz, natomiast wykonywany wiele razy (za ka|dym razem z inn zawarto[ci kontekstu). 3.3.1. Jzyk u|ywany w szablonach Jzyk dostpny w szablonach nie nale|y traktowa jako jzyk skryptowy. Zalo|eniem twórców WebMacro bylo rozdzielenie logiki aplikacji od jej wygldu i dlatego jest to jzyk bardzo prosty i w du|ym stopniu intuicyjny. Poni|ej przedstawimy jak w tym jzyku mo|na uzyska dostp do zmiennych, jak nawigowa po kolekcjach obiektów, nadawa warto[ci zmiennym oraz korzysta z instrukcji warunkowych. Zmienne Zmienne to najprostszy sposób na dostp do informacji dostpnych w kontek[cie. Zmienne w szablonach poprzedzone s znakiem $ (podobnie jak w jzyku Perl), na przyklad: $Title $Customer.Name $Customer.Products.findProduct( window ).PartNo Ka|da ze zmiennych wskazuje na jaki[ obiekt w kontek[cie. Zadaniem WebMacro jest znalezienie poprawnej warto[ci w kontek[cie, natomiast programista musi zadba oto by ta warto[ si tam znalazla. Obiekt Customer ma wlasno[ (pole lub odpowiedni metod) Name. Do wydobycia poszczególnych wlasno[ci slu|y operator  kropka . Operatora tego mo|na u|ywa wielokrotnie aby dosta si do |danej warto[ci. Trzeci przyklad zawiera wywolanie metody findProduct() z parametrem. Oczywi[cie w wikszo[ci przypadków wystarczy proste odwolywanie si do pól w obiektach, ale czasami mo|e by konieczne wywolanie metody na rzecz jakiego[ obiektu w kontek[cie  co WebMacro tak|e umo|liwia. StaBe StaBe w WebMacro mog by jednym z sze[ciu typów: slowo, liczba, warto[ logiczna, kolekcja, wskaznik na zmienn, laDcuch znaków. SBowo to cig liter i cyfr, na przyklad: hello1. S dwa specjalne slowa: true i false, które reprezentuj warto[ci logiczne. Liczba to cig cyfr, na przyklad: #set $a = 10 jest równowa|ne umieszczeniu w kontek[cie obiektu Integer(10). Mo|emy wymusi na WebMacro potraktowanie liczby jako typu Long przez dodanie sufiksu l lub L na przyklad: 10L. Jak na razie WebMacro nie wspiera liczb typu Float i Double. W razie potrzeby WebMacro mo|e przeksztalci obiekt typu Integer (Long) na warto[ prost int (long), mo|na wic tych stalych u|ywa jako parametry wywolania funkcji, które oczekuj warto[ci typu int lub long. Warto[ logiczna w szablonie reprezentowana jest przez slowa: true i false. S one odpowiednikami stalych jzyka JAVA: Boolean.TRUE i Boolean.FALSE. Mo|na ich tak|e u|ywa jako parametr wywolania funkcji, które oczekuj warto[ci logicznej. Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 143 Kolekcja to uporzdkowana lista stalych na przyklad: #set myList = [ one, two, 3, $variable]. Mo|liwe jest dowolne zagnie|d|anie kolekcji na przyklad: #set myList = [ [ one, one ], [two, two, 2], [three] ] AaDcuch znaków to dowolny cig znaków umieszczony w cudzyslowie. Poniewa| cig znaków mo|e zawiera w sobie wskaznik na zmienn, aby wprowadzi do znak  $ trzeba go poprzedzi znakiem  \ (ta sama zasada odnosi si do inych znaków specjalnych), na przyklad: #set $b =  to jest ciag znakow: \$a, a to wskaznik na zmienna $a Wskaznik na zmienn  zapisujemy go identycznie jak zmienn i mo|emy wykorzystywa jako parametr wywolania funkcji, na przyklad: $order.findProduct($Product1).Prize Dyrektywy Dyrektywy poprzedzone s znakiem # i musz wystpi w nowej linii (mog by poprzedzone znakami spacji). Wiele dyrektyw operuje na bloku. Ka|dy blok rozpoczyna si znakiem  { i koDczy znakiem  } . Bloki, a tym samym dyrektywy, mo|na zagnie|d|a. ## komentarz Dwa lub wicej znaków # tworzy komentarz  reszta linii zostanie zignorowana. #foreach $element in $kolekcja {...} Dyrektywa pozwala przejrze wszystkie obiekty w kolekcji. Blok zostanie wykonany tyle razy ile jest obiektów w kolekcji, za ka|dym razem zmienna $element bdzie przyjmowa warto[ kolejnego obiektu, na przyklad: <ul> #foreach $customer in $list { <li>$customer.name lives at $customer.address } </ul> #if(warunek) {...} #else {...} Jest to standardowa dyrektywa warunkowa spotykana w wikszo[ci jzyków programowania. Druga cz[ dyrektywy, to znaczy  #else {} jest opcjonalna. W warunku dyrektywy #if mo|na u|ywa nastpujcych operatorów: && - and (binarny), || - or (binarny), ! - negacja (unarny), == - równy (binarny), != - ró|ny (binarny). W przypadku dwóch ostatnich operatorów nale|y mie na uwadze, |e bazuj one tylko na metodzie Object.equals(). Zmienna traktowana jest jako false je|eli nie zostala znaleziona w kontek[cie, jest null, bdz jest typu Boolean i ma warto[ Boolean.FALSE. W przeciwnym wypadku traktowana jest jako true. Wyra|enia skladajce si na warunek mo|na dowolnie grupowa przy u|yciu nawiasów okrglych, na przyklad: #if ( $Customer.owesMoney() && ($Customer.Name != "Fred") ) { Pay up, or else! } #else { Thank you for your patronage. } #include plik  powoduje wczytanie zewntrznego pliku  WebMacro nie bdzie wykonywa operacji analizy (parsingu). 144 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski #parse plik  powoduje wczytanie zewntrznego pliku  WebMacro potraktuje go jako cz[ szablonu i go przeanalizuje. #set $zmienna = warto[ Do zmiennych w kontek[cie mo|na si odwolywa, ale tak|e podstawia pod nie warto[ci, na przyklad: #set $name= Jan Kowalski name WebMacro potrafi tak|e dokonywa zmian na bardziej skomplikowanych obiektach wykorzystujc mechanizm introspekcji. #set $customer.Name= Jan Kowalski #set $order.findProduct($Product1).Prize = $newPrize #use  parser until znacznik-konca Powy|sza dyrektywa nakazuje WebMacro u|ywanie innego parsera dla wskazanego bloku tekstu. Obecnie dostpny jest tylko parser  text , który nie robi nic. Jest on jednak bardzo potrzebny poniewa| znaki {}, które mog wystpowa w JavaScript bardzo czsto przeszkadzaj w poprawnej interpretacji szablonu, na przyklad: #use  text until  -end- parser -end- Ponad to w kontek[cie umieszczane s zawsze nastpujce obiekty: " $CGI umo|liwiajcy dostp do zmiennych jakie spotykane s w CGI, " $Form umo|liwiajcy dostp do zmiennych z formy, " $Config umo|liwiajcy dostp do zmiennych zdefiniowanych w pliku WebMacro.properties, " $Cookie umo|liwiajcy odczytywanie i zmienianie Cookies, " $Session umo|liwiajcy dostp do API sesji z JSDK, " $Request to obiekt HTTP request (HttpServletRequest). " $Response to obiekt HTTP response (HttpServletResponse) 3.3.2. Introspekcja  wyznaczanie warto[ci zmiennych W WebMacro zastosowano introspekcj do wyznaczania warto[ci zmiennych. Dziki temu programista mo|e umieszcza w kontek[cie obiekty dowolnego typu. Introspekcja, w skrócie polega na tym, |e WebMacro aby wyznaczy warto[ zmiennej bdzie interpretowa zapis w szablonie na kilka sposobów  poszukujc pól i metod w obiekcie o danej nazwie. Najlepiej rozpatrzy to na przykladzie. Zaló|my, |e w szablonie znajduje si zapis: $Order.Customer.Fred WebMacro starajc si wyznaczy warto[ tej zmiennej podejmie nastpujce próby (dokladnie w takiej kolejno[ci): 1. sprawdzi czy obiekt Order ma publiczne pole Customer, 2. sprawdzi czy obiekt Order ma publiczn metod getCustomer(), 3. sprawdzi czy obiekt Order ma publiczn metod getCustomer( Fred ), 4. sprawdzi czy obiekt Order ma publiczn metod get( Customer ). Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 145 Gdy zajdzie przypadek trzeci to dla tego przykladu zakoDczy to wyznaczanie warto[ci. W pozostalych wypadkach na rzecz wyznaczonego obiektu, WebMacro zastosuje identyczn procedur by wyznaczy wlasno[ Fred. W przypadku nadawania warto[ci (przy korzystaniu z dyrektywy #set) WebMacro zastosuje analogiczn procedur, przy czym zamiast poszukiwa odpowiednich metod get bdzie poszukiwa metod set. Kolekcje Dla WebMacro obiekt bdzie kolekcj, a tym samym mo|e by przegldany za pomoc dyrektywy #foreach, je|eli: " obiekt jest tablic, " obiekt implementuje interfejs Iterator, " obiekt implementuje interfejs Enumeration, " ma publiczn metod "Iterator iterator()", " ma publiczn metod "Enumeration elements()". 3.3.3. Pisanie servletów z wykorzystaniem WebMacro Najprostszym sposobem napisania servletu korzystajcego z WebMacro jest stworzenie klasy dziedziczcej z WMServlet. W klasie tej musimy zdefiniowa metod handle(), która posiada jeden parametr typu WebContext (jest to wspomniany ju| kontekst) i zwraca obiekt typu Template. Poprzez kontekst programista ma dostp do wszystkich obiektów dostpnych standardowo w servletach (tj. Cookies, Session API, HttpServletRequest, HttpServletResponse). Dostp do podstawowych operacji jak: pobieranie danych z formy i operacje na Cookies zostal uproszczony poprzez dodanie kilku metod dostpnych bezpo[rednio w obiekcie WebContext. Glównym zadaniem programisty jest wyznaczenie wszystkich potrzebnych zmiennych i umieszczenie ich w kontek[cie. Zmienne w kontek[cie s przechowywane za pomoc tablicy haszowej. Programista umieszcza wic w kontek[cie obiekty lub kolekcj obiektów pod odpowiednim kluczem (laDcuchem znaków, który bdzie stanowil pierwszy czlon w nazwie zmiennej w szablonie). Rozwa|my nastpujcy przyklad: public Template handle(WebContext context){ context.put( counter , new Integer(10)); Vector v = new Vector(); v.addElement( Ala ); v.addElement( Ola ); v.addElement( Ewa ); context.put( vector ,v); } W szablonie mo|emy odwola si do tych zmiennych przez $counter<br> #foreach $i in $vector { $i<br> } Dokument wygenerowany przez ten fragment kodu bdzie wygldal nastpujco: 10<br> Ala<br> Ola<br> 146 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski Ewa<br> Poniewa| mamy do czynienia z tablic haszow ponowne u|ycie tego samego klucza spowoduje nadpisanie poprzedniego obiektu. Uwaga ta tak|e dotyczy dyrektywy #set bowiem operuje ona na tym samym kontek[cie (#set $a = 10 w szablonie jest równowa|ne z wykonaniem context.put ( a ,new Integer(10)) w kodzie servletu). Trzeba tak|e uwa|a wybierajc nazw dla zmiennej $element w dyrektywie  #foreach $element in $kolekcja , gdy| ona tak|e jest przechowywana w kontek[cie. Metoda handle() musi zwróci obiekt typu Template. Za dostarczanie tego obiektu w WebMacro odpowiedzialny jest specjalny modul tzw. TemplateProvider. Z modulu tego korzysta metoda  Template getTemplate(String) , któr programista mo|e wykorzysta do okre[lenia szablonu jaki ma by u|yty do wygenerowania strony. Standardowy TemplateProvider wyszukuje szablony w katalogach (wskazanych w pliku konfiguracyjnym) na dysku (ka|dy szablon jest plikiem). Dostpne s tak|e inne wersje tego modulu umo|liwiajce pobieranie szablonów przez protokól HTTP, bdz z bazy danych. WebMacro ze wzgldów efektywno[ciowych ma zaimplementowany mechanizm buforowania szablonów (czas po jakim szablony musz by ponownie pobrane mo|na ustawi w pliku konfiguracyjnym). Dodatkowo programista mo|e zaimplementowa metody start() i stop(), które s wykonywane dokladnie raz, odpowiednio przy starcie servletu i przy jego zatrzymywaniu. 3.3.4. Konfiguracja Aby móc korzysta z WebMacro nale|y wykona nastpujce kroki: 1. doda plik webmacro.jar do CLASSPATH w konfiguracji serwera WWW, 2. skopiowa plik WebMacro.properties do katalogu, który jest wymieniony w CLASSPATH, 3. w pliku WebMacro.properties zmieni warto[ parametru TemplatePath (parametr ten okre[la katalogi, w których bd wyszukiwane szablony), 4. dodatkowo mo|na w pliku WebMacro.properties zmieni warto[ci innych po|ytecznych parametrów zgodnie z zalczonymi w tym pliku instrukcjami (np.: TemplateExpireTime  czas buforowania szablonów, LogFile  nazwa pliku, do którego bd trafia informacje przydatne przy debugowaniu servletów). 3.3.5. Dlaczego warto u|ywa WebMacro? WebMacro jest pot|nym i wydajnym narzdziem, które doskonale wspiera tworzenie aplikacji internetowych. Rozdzielenie pracy programisty i projektanta stron jest bardzo wa|ne przy tworzeniu du|ych i skomplikowanych systemów. Dziki temu zyskuje si na przejrzysto[ci kodu aplikacji, która nie jest  za[miecana przez kod HTML i vice versa. Przejrzysto[ kodu wplywa na zmniejszenie ilo[ci bldów w aplikacji. Mo|liwe jest zrównoleglenie pracy programistów i projektantów stron. Proste poprawki edytorskie sprowadzaj si tylko do poprawienia szablonu  nie ma potrzeby ponownej rekompilacji aplikacji. Poniewa| korzysta si z szablonów nic nie stoi na przeszkodzie by t sam aplikacj przystosowa do innych technologii, na przyklad WAP  wystarczy tylko u|y innych szablonów. 3.4. JDBC JDBC jest interfejsem API jzyka Java pozwalajcym na wykonywanie zapytaD SQL (zbiór klas oraz interfejsów). Wykorzystanie tego standardu pozwala na napisanie uniwersalnego programu który bdzie mo|na u|y wielokrotnie do lczenia si z ró|nymi bazami danych. W skrócie JDBC pozwala na: " nawizanie polczenia z baz danych, " wysylanie zapytaD SQL, " przetwarzanie wyników. Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 147 Poni|szy przyklad stanowi ilustracj tych mo|liwo[ci. Connection con = DriverManager.getConnection ( "jdbc:oracle:thin:@host:port:sid", "login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM tabelka1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } Aby móc skorzysta z tego standardu nale|y si zaopatrzy w sterownik, który jest implementacj interfejsów  odpowiedni dla danego producenta bazy danych. JDBC nie naklada |adnych restrykcji na polecenia SQL, gwarantuje du| elastyczno[, pozwalajc na u|ycie specyficznej dla danego producenta skladni SQL. JDBC wymaga aby sterownik dostarczyl przynajmniej mo|liwo[ci ANSI SQL-2. Oznacza to, |e u|ytkownik mo|e liczy na podstawowy poziom funkcjonalno[ci. W JDBC wyró|niamy nastpujce interfejsy podstawowe: Connection, DriverManager, Statement, ResultSet, PreparedStatement, CallableStatement. " Connection Obiekt Connection reprezentuje polczenie z baz danych. Sesja polczenia zawiera polecenia SQL, które s wykonywane a wyniki zwracane przez polczenie. Pojedyncza aplikacja mo|e mie jedno lub wiele polczeD z dan baz danych lub polczenia z ró|nymi bazami. Pracujc z bazami czsto implementuje si pul polczeD, która znacznie przyspiesza prac ze wzgldu na fakt, |e czas tworzenia nowego polczenia jest stosunkowo du|y. Fakt ten uwzgldniono w JDBC 2.0, który dostarcza odpowiednich interfejsów. " DriverManager Klasa DriverManager jest warstw zarzdzajc, pracujc midzy u|ytkownikiem a sterownikiem. Klasa ta steruje procesem nawizywania polczenia midzy baz danych a odpowiednim sterownikiem. " Statement Klasa Statement jest tworzona przez wywolanie metody createStatement() na rzecz obiektu Connection. U|ywana jest w celu prostego wyslania zapytania do bazy danych. Obiekty tej klasy mog zawiera zapytania SQL, które mog u|ywa SQL escape syntax. Escape syntax sygnalizuje, |e kod zawarty midzy znacznikami powinien by ró|nie obslugiwany. Sterownik JDBC wyszukuje w pytaniu escape syntax i zamienia go na kod zrozumialy dla danej bazy danych. Pozwala to na zadawanie zapytaD niezale|nych od implementacji ró|nych systemów zarzdzania baz danych, na przyklad: stmt.executeQuery("SELECT * FROM pracownicy WHERE pracuje_od ={ts `2000-01-01 12:0:0.0 '}; " Resultset ResultSet zawiera wszystkie krotki relacji spelniajce warunki zapytania oraz umo|liwia dostp do tych krotek poprzez okre[lony zbiór metod getXXX(). Obiekt ResultSet pozostawia w bazie kursor, który jest otwarty do momentu zamknicia obiektu. " PreparedStatement 148 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski Obiekt PreparedStatement u|ywany jest do wykonywania prekompilowanych poleceD SQL zawierajcych jedno lub wicej pól parametrów (oznaczanych znakiem "?"  s tak zwane parametry IN). Parametrom wej[ciowym nale|y nastpnie przypisa po|dane warto[ci poprzez u|ycie odpowiednich metod setXXX(). Poniewa| obiekty PreparedStatement s prekompilowane ich wykonanie mo|e by szybsze ni| obiektów Statement. Zapytania SQL wykonywane wielokrotnie (w ptli) s tworzone ze wzgldów wydajno[ciowych z wykorzystaniem PreparedStatement. PreparedStatement pstmt = con.prepareStatement( "UPDATE table4 SET m = ? WHERE x = ?"); pstmt.setLong (1, 123456789); pstmt.setString(2, "qwerty"); int rowCount = pstmt.executeUpdate(); " CallableStatement Obiekt CallableStatement jest wykorzystywany do stworzenia odwolania do przechowywanych w bazie danych procedur i budowany z wykorzystaniem metody prepareCall na rzecz obiektu Connection, na przyklad: CallableStatement cstmt = con.prepareCall( "{call getTestData(?, ?)}"); Parametry oznaczone  ? mog by wej[ciowe, wyj[ciowe lub wej[ciowo-wyj[ciowe np.: CallableStatement cstmt = conn.prepareCall("{? = CALL balance(?)}"); cstmt.registerOutParameter(1, Types.FLOAT); cstmt.setInt(2, 13); cstmt.executeUpdate(); float acctBal = cstmt.getFloat(1); Dla potrzeb pracy z baz danych za pomoc jzyka SQL istotne jest odwzorowanie typów danych Java->JDBC->SQL->DBMS. JDBC 2.0 API jest zgodny z SQL-2, a co wicej udostpnia typy danych zgodne z propozycj standardu SQL-3 (na przyklad, typ danych BLOB). Teoretycznie konstruktor oprogramowania bazy danych powinien traktowa typy danych z baz danych, tak jakby to byly typy danych SQL. 3.5. TOPIC MAPS 3.5.1. XML XML jest idealnym formatem do przechowywania strukturalizowanych informacji, umo|liwiajcym przy tym wielokrotne u|ywanie danego zbioru informacji przy u|yciu ró|nych aplikacji. XML jako taki nie jest jednak wystarczajcy, gdy ilo[ informacji, które otrzymuje u|ytkownik koDcowy jest rzdu megabajtów pomimo, |e s one [ci[le strukturalizowane. Potrzebny jest mechanizm umo|liwiajcy otrzymywanie |danych wyników szybko, precyzyjnie i zgodnie z aktualnym kontekstem. Jednym z rozwizaD spelniajcych te wymagania s TOPIC MAPS® . 3.5.2. Czym s TOPIC MAPS ? TOPIC MAPS jest usystematyzowan notacj u|ywan do reprezentacji wiedzy. Pozwala ona na definiowanie poj  nazywanych tutaj topikami i zale|no[ci midzy nimi. Fizycznie jest to zbiór dokumentów (zawierajcych informacje) polczonych zale|no[ciami, które u|ywaj notacji zgodnej ze standardem (ISO/IEC FCD 13250). TOPIC MAPS strukturalizuj zbiór informacji, poprzez budowanie sieci semantycznej  nad zasobami. Sie ta umo|liwia latw nawigacj i selekcj otrzymywanych informacji. Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 149 3.5.3. Model TOPIC MAPS Podstawowym jzykiem, który umo|liwia definiowanie TOPIC MAPS jest jzyk XML. TOPIC MAPS to dokument XML-wy w którym znajduj si elementy ró|nych typów wywiedzione ze zbioru podstawowych form architektury TOPIC MAPS. U|ywane one s do definiowania: topików, wystpieD topików (ang. occurences of topics), i powizaD midzy topikami (ang. associations between topics). Podstawowymi elementami modelu s: " Topic  reprezentuje dowolne pojcie: osob, jednostk, koncepcj, ide bez wzgldu czy ona istnieje i jak ma charakterystyk. Ka|dy z topików mo|e mie jeden lub wiele typów (ang. topic types). Zale|no[ midzy topikiem a jego typem jest tym samym co zale|no[ klasa  instancja klasy. Na przyklad, topiki: Polska, Wielkopolska, PoznaD, Infosystem 2000 oraz typy topików: kraj, województwo, miasto, konferencja. " Topic name  sklada si z trzech cz[ci: base name (nazwa podstawowa), display name (nazwa wy[wietlana), sort name (nazwa dla sortowania). Na przyklad: (base/display/sort): Poznan/PoznaD/poznan. " Topic occurence (wystpienie topiku) i occurence role type (rola wystpienia)  wystpienie jest referencj do konkretnego zasobu zwizanego z danym topikiem. Ka|de wystpienie ma okre[lony typ, wyra|ony jako typ wystpienia (occurence role type) i zakres wystpienia (occurence scope). Typ wystpienia jest te| sam w sobie topikiem. Na przyklad, wystpienie (occurence): wykres_1.xls, wojna.doc, killer.mpg, hey_Joe.mp3 oraz typ wystpienia (occurence role types): wykres, artykul, video, plik muzyczny. " Topic association (powizanie topiku) i association type (typ powizania)  powizanie okre[la relacj midzy dwoma lub wiksz ilo[ci topików. Ka|de powizanie jest okre[lonego typu. Ka|dy powizany topik pelni okre[lon rol w zwizku (ang. association role type) Zarówno typ powizania topików jak i rola jak pelni ten typ powizania s tak|e same w sobie topikami. Na przyklad, powizanie: Wielkopolska znajduje si w Polsce, PoznaD znajduje si w Wielkopolsce, Infosystem odbywa si w Poznaniu, natomiast typ powizania: znajduje si w, odbywa si w oraz rola powizania: województwo/paDstwo, miasto/województwo, konferencja/miasto. " Scope (zakres): dowolny przydzial (nazw, wystpieD, powizaD) dla okre[lonego topiku jest uwa|any jako poprawny (sensowny) w okre[lonych granicach, które mog ale nie musz by wyraznie wyspecyfikowane. Ta granica wa|no[ci danego przydzialu jest nazywana zakresem (scope). Na przyklad, zakresy (scopes): aby zachowa rozró|nienie midzy: miastem  Paris we Francji, miastem  Paris w Texasie i bohaterem mitologicznym o imieniu  Paris musimy powiza poszczególne topiki z zakresami wa|no[ci dla ka|dego z nich. I tak dla tych przypadków zakresami mog by :  Francja ,  USA ,  Mitologia Grecka . 150 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski znajduje si w znajduje si w odbywa si POZNA WIELKOPOLSKA POLSKA INFOSYSTEM Ocurrences role types (typy wystpieD): artykuB wykres video Occurences (wystpienia) Topic Types (typy topików) Association types (typy powizaD) Rys. 5. PrzykBadowa mapa topików 3.5.4. Zastosowania TOPIC MAPS mog znalez zastosowanie w: " kwalifikowaniu zawarto[ci obiektów przechowujcych informacje oraz aby ulatwi nawigacj przy u|yciu odpowiednich metod, takich jak: indeksy, systemy slownikowe, systemy przeszukiwania cytatów, systemów tworzenia dokumentacji technicznych dla przedsibiorstw, " filtrowaniu zbiorów informacji dla ograniczenia zakresu danych widocznych dla okre[lonego u|ytkownika systemu lub konkretnego zastosowania. Filtrowanie mo|e by pomocne w zarzdzaniu wielojzycznymi dokumentami, zarzdzaniu trybami dostpu w zale|no[ci do polityki ochrony informacji danej instytucji, dostarczaniu cz[ciowego dostpu do informacji w zale|no[ci od profilu u|ytkownika, dziedziny wiedzy itd., Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 151 " strukturalizacji niestrukturalizowanej informacji, dla ulatwienia tworzenia interfejsów u|ytkownika jako map topików umo|liwiajcych latwe i szybkie nawigowanie w[ród informacji. TOPIC MAPS mog by rozumiane jako  rozszerzony mechanizm znaczników dlatego, |e u|ycie ich polega na nalo|eniu okre[lonej struktury na konkretny zbiór informacji bez wprowadzania zmian w samych danych i ich formie. 3.5.5. Nawigacja w strukturze TOPIC MAPS Istniej dwa sposoby u|ycia TOPIC MAPS: nawigacja przy u|yciu  linków oraz odpytywanie wzlów (rys. 6). " Nawigacja przy u|yciu linków mo|e zosta zaimplementowana jako graf lub jako struktura oparta na drzewie. INTERNET BOOKMARK 1.6. 1.7. H BROWSER BROWSER HTTP 1.3. CO BOOKMARK HTML INTERNET COOKIE HYPERTEXT 1.2. M 1.4. HYP EMAIL 1.5. EM MODEM Rys. 6. Drzewo nawigacji i graf nawigacji Mapa topików mo|e zawiera miliony wzlów i linków dlatego odpowiednio jasna reprezentacja graficzna tej struktury ma ogromne znaczenie dla u|ytkownika. " Odpytywanie wzlów wymaga zastosowania jzyka zapytaD zgodnego z koncepcj TOPIC MAPS. U|ytkownik definiujcy zapytania potrzebuje w tym przypadku dodatkowego wsparcia ze strony aplikacji, na przyklad rozwijalne listy, menu wy[wietlajce informacje dostpne na mapie. 3.5.6. Projektowanie, tworzenie i utrzymywanie map topików (procedury, narzdzia, algorytm, doradztwo) Projektowanie mapy topików to proces przyrostowy. Definiowanie typów, ról ich nadklas i podklas musi odbywa si pod kontrol narzdzi wspomagajcych projektowanie. Bardzo wa|ne jest zapewnienie spójno[ci mapy. Pierwszym etapem projektowania jest wygenerowanie wszystkich topików, powizaD i wystpieD. W du|ych aplikacjach mog ich by tysice, a nawet miliony. Narzdzie do projektowania powinno umo|liwia latwy dostp do wszystkich tych obiektów oraz mie mo|liwo[ sprawdzania spójno[ci powstajcej mapy. Granica midzy projektowaniem a tworzeniem mapy topików jest plynna. Tylko w pocztkowej fazie mo|na rozró|ni etap definiowania typów i ról z jednej strony i definiowania topików, wystpieD, powizaD z drugiej. Podczas rozwijania mapy obie te czynno[ci mog by wykonywane równolegle przez ró|ne grupy specjalistów. 152 Jakub Galski, Karol Foremski, Arkadiusz Bigos, Krzysztof Kawa, Zbyszko Królikowski Automatyczna generacja map topików Dostpne informacje do automatycznego generowania map s nastpujce: " wzorzec mapy topików (ang. topic map template) ze zdefiniowanymi typami topików, typami wystpieD, typami asocjacji, " adresy zasobów informacyjnych w systemie plików, bazie danych, Internecie, " metadane o zasobach informacyjnych (nazwa, format, klasyfikacja), " struktura zasobów informacji dostpna jako instancje XML. Automatyczna generacja jest kontrolowana przez zbiór regul zgromadzonych w skrypcie. Program przetwarzajcy interpretuje skrypt, pobiera dostpne informacje jako parametry wej[ciowe. Wynikiem jest mapa topików zgodna ze standardem. REPOZYTORIUM SZABLON MAPY ZBIÓR REGUA GENERATOR MAPY TOPIKÓW MAPA TOPIKÓW Rys. 7. Schemat automatycznego generowania map topików Identyfikacja topików i wystpieD Pierwsz faz automatycznej generacji jest identyfikacja w[ród zasobów informacji kandydatów na topiki okre[lonego typu. Je|eli zasoby zostan odnalezione tworzony jest topik i u|ywany jest algorytm wyszukujcy nazw dla topiku z zasobów lub metainformacji. Potem tworzone jest powizanie topiku z zasobem fizycznym (ang. occurence). Przykladowa regula wyszukujca topiki w zbiorze zasobów mo|e by nastpujca: if resource fulfills metadata <condition> and/or contains structure <element> in <context> containing <content> then create topic of <type> with name derived from metadata <field> or name derived from <element> in <context> and create occurence to resource with <role> Identyfikacja powizaD Drug faz automatycznej generacji jest tworzenie powizaD pomidzy topikami stworzonymi w pierwszej fazie. Jest to bardzo zlo|one zadanie, poniewa| uzyskiwanie struktur wiedzy z istniejcych danych odbywa si przy u|yciu algorytmów sztucznej inteligencji. Budowa nowoczesnych aplikacji internetowych z wykorzystaniem jzyka Java... 153 3.5.7. Dostpne aplikacje tworzce mapy topików Norma ISO 13250 zostala opublikowana w styczniu 2000. Aplikacje slu|ce do tworzenia map topików s jeszcze w trakcie rozwoju. Przodujc firm w zakresie tworzenia oprogramowania wspomagajcego TOPIC MAPS jest firma InfoLoom. Dostarcza ona oprogramowanie Topic Map Loom® rozwijane od 5 lat. 3.5.8. Dlaczego pojawienie si TOPIC MAPS jest wa|nym wydarzeniem ? " TOPIC MAPS daje mo|liwo[ uniwersalnego lczenia wiedzy w formie sieci informacji tworzcych baz wiedzy, " TOPIC MAPS maj ogromne mo|liwo[ci przy zachowaniu prostoty i elastyczno[ci, " TOPIC MAPS s krokiem w rozwoju idei XML, ukierunkowujc systemy przechowujce informacje na Internet, " TOPIC MAPS mog by tworzone nad ró|nymi zródlami informacji (HTML, SGML, XML, ASCII, MSWORD, PDF, EMAIL, a nawet nad bazami danych). Bibliografia 1. Z. Królikowski, M. Zakrzewicz, Zrodowisko rozwoju aplikacji internetowych Oracle Web Application Server + Pl/SQL Cartridge, w: PC Kurier, Nr 4/2000, str. 80-86, 2000. 2. Z. Królikowski, M. Zakrzewicz, Charakterystyka platform rozwoju aplikacji internetowych, Informatyka, Nr.5, str. 23-30, 2000 r. 3. http://php.zone.pl/. 4. www.webmacro.org. 5. www.netscape.com. 6. http://technet.oracle.com/. 7. http://java.sun.com/. 8. Jason Hunter, William Crawford, "JAVA Servlet Programming", O'REILLY, 1998. 9. Seth White, Maydane Fisher, Rick Cattel, Graham Hamilton, Mark Hapner, "JDBCTM API Tutorial and Reeference, Second Edition" , Sun Microsystems, 1999. 10. Dokument ISO/IEC-FCD 13250:1999-Topic Maps, 11. Hans Holger Rath, "Technical Issues on Topic Maps". 12. Hans Holger Rath, Steve Pepper, "Topic Maps at work". 13. www.infoloom.com. 14. www.step.pl. 15. www.cogsci.princeton.edu/~wn/ (implementacja Topic Maps). 16. www.quid.fr (implementacja Topic Maps). 17. www.wissen.de (implementacja Topic Maps).

Wyszukiwarka

Podobne podstrony:
Skalowalne witryny internetowe Budowa, skalowanie i optymalizacja aplikacji internetowych nowej gene
AJAX i PHP Tworzenie interaktywnych aplikacji internetowych
Testowanie?zpieczenstwa aplikacji internetowych Receptury tebeap
Magia interfejsu Praktyczne metody projektowania aplikacji internetowych magint
Oracle Database Tworzenie aplikacji internetowych w AJAX i PHP(1)
2006 01 Analiza bezpieczeństwa komunikatora internetowego z wykorzystaniem platformy Linux [Bezpiecz
Ajax dla tworcow aplikacji internetowych
Analiza porownawcza srodowisk rozwoju aplikacji internetowyc
zasady obsługi aplikacji internetowej AON
Splatana siec Przewodnik po?zpieczenstwie nowoczesnych aplikacji WWW splasi
ASP NET 2 0 Tworzenie witryn internetowych z wykorzystaniem C i Visual?sica aspntw

więcej podobnych podstron