home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2001 November / MICD2001_11_NR1.iso / Www / WebArea / index.php@id=194 < prev    next >
Text File  |  2001-09-26  |  38KB  |  894 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4//PL">
  2. <html>
  3. <head>
  4. <title>WEB-AREA.org - serwis webmaster≤w</title>
  5. <link href="style.css" rel="stylesheet" type="text/css">
  6. <LINK REL="SHORTCUT ICON" HREF="favicon.ico"> 
  7. <meta http-equiv="Creation-date" content="28.08.2001">
  8. <meta http-equiv="Reply-to" content="web-area@web-area.org">
  9. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
  10. <meta name="author" content="Jakub & Jan Filipowscy">
  11. <meta name="description" content="Serwis webmasterow. Znajdziesz tu kilka kursow popularnych internetowych jezykow programowania takich jak: HTML, CSS, WML, SGML, XML, PHP, Perl i Java. Zamiescilismy tu rowniez wiele skryptow JavaScript, PHP i CGI. Przeczytac mozna kilka artykulow i sciagnac kilka szablonow. Dla poczatkujacych jest dzial BeginnerZone. ">
  12. <meta http-equiv="keywords" content="WEB-AREA, web-area, web area, web, area, WEB-AREA.org, web-area.org, webara.org,strefa webmastera, strefa, webmastera, webmaster, WEBMASTER, Webmaster, tworzenie stron www, www, strona www, internet, world wide web, design, designerswo, designer, programowanie, jΩzyki, jΩzyk programowania, php, cgi, html, java, javascript, sgml, wml, PHP, CGI, HTML, Java, JavaScript, SGML, WML, wap, standarty, skrypty php, skrypty cgi, applety java, aplety, aplety java, aplety javy, applety javy, javascripty, JavaScripty, skrypty javy, publikowanie witryny, witryna, tworzenie witryn, tworzenie sklep≤w internetowych, edytory html, tekstowe edytory html, projekt syf, szablony, Szablony, free, darmowe, zadarmo, subskrypcja, lista mailingowa, mailing list, lista subskrypcyjna, bannery, formularze, liczniki, ksiΩgi go╢ci, linki, fora, pliki i operacje na nich, statystyki, wyszukiwarki, rankingi, darmowe skrypty, Jakub Filipowski, Jan Filipowski, katalog, Katalog stron zwi▒zanych z tematyk▒ webmasterstwa, webmasterswo, magazyn www, style, CSS, XML, ASP, jΩzyki skryptowe, generatory, anarchizm">
  13. </head>
  14. <body>
  15.  
  16.  
  17. <div align="left">
  18. <table border="0" cellpadding="0" cellspacing="0" width="770">
  19. <tr>
  20. <td width="770" valign="top" colspan="3">
  21.  
  22.     <table border="0" cellpadding="0" cellspacing="0" width="770">
  23.     <tr>
  24.     <td width="166" valign="top"><a href="index.php"><img src="img/logo.gif" border="0" width="166" height="70" alt="WEB-AREA.org - serwis webmaster≤w"></a></td>
  25.     <td width="604" height="70" background="img/gora.gif" align="right"><iframe src="banner.php" MARGINWIDTH="0" MARGINHEIGHT="0" HSPACE="0" VSPACE="0" FRAMEBORDER="0" SCROLLING="NO" WIDTH="468" HEIGHT="60">
  26. </iframe></td>
  27.     </tr></table>
  28.  
  29. </td>
  30. </tr><tr>
  31. <td width="770" valign="top" colspan="3">
  32.     <table border="0" cellpadding="1" cellspacing="0" width="770">
  33.         <tr><form method="post" action="szukaj.php">
  34.         <td width="260">    <input type="text" name="zapytanie" size="15"> <input type="submit" value="SZUKAJ"> <span class="m"><a href="index.php@url=redakcja_2Fszukaj">Jak szukaµ?</a></span></td></form>
  35.         <td width="510">
  36.         
  37.         <p align="center">
  38.         <a href="index.php@id=206" class="gora">Konkurs</a>   
  39.         <a href="subskrypcja/nowa.php" class="gora">Za│≤┐ subskrypcjΩ</a>    
  40.         <a href="index.php@id=128" class="gora">Katalog</a>    
  41.         <a href="forum.php" class="gora">Forum</a>    
  42.         <a href="index.php@id=15" class="gora">BeginnerZone</a>
  43.         
  44.         </td>
  45.     </tr></table>
  46. </td>
  47. </tr>
  48. <tr>
  49. <td width="142" valign="top">
  50.     
  51.     <br>
  52.     <table border="0" cellpadding="0" cellspacing="0" width="142">
  53.     <tr>
  54.     <td width="142" valign="top"><img src="img/menu.gif" border="0" width="142" height="13" alt="MENU"></td>
  55.     </tr>
  56.     <tr>
  57.     <td width="142" valign="top" background="img/okno1.gif">
  58.     <img src="img/s.gif" width="9" height="8"><b class="menu1">KURSY</b><br>
  59.       - <a href="index.php@id=50" class="menu">HTML</a><br>
  60.       - <a href="index.php@id=40" class="menu">CSS</a><br>
  61.       - <a href="index.php@id=62" class="menu">Java</a><br>
  62.       - <a href="index.php@id=145" class="menu">PHP</a><br>
  63.       - <a href="index.php@id=39" class="menu">CGI</a><br>
  64.       - <a href="index.php@id=5" class="menu">ASP</a><br>
  65.       - <a href="index.php@id=182" class="menu">WML</a><br>
  66.       - <a href="index.php@id=190" class="menu">XML</a><br>
  67.       - <a href="index.php@id=159" class="menu">SGML</a><br>
  68.  
  69.     <img src="img/s.gif" width="9" height="8"><b class="menu1">SKRYPTY</b><br>
  70.       - <a href="index.php@id=78" class="menu">JavaScript</a><br>
  71.       - <a href="index.php@id=135" class="menu">PHP</a><br>
  72.       - <a href="index.php@id=30" class="menu">CGI</a><br>
  73.  
  74.     <img src="img/s.gif" width="9" height="8"><b class="menu1">INNE</b><br>
  75.       - <a href="index.php@id=59" class="menu">Szablony</a><br>
  76.       - <a href="forum.php" class="menu">Forum</a><br>
  77.       - <a href="index.php@id=61" class="menu">Webmasterska lista</a><br>
  78.       - <a href="index.php@id=128" class="menu">Katalog</a><br>
  79.       - <a href="index.php@id=15" class="menu">BeginnerZone</a><br>
  80.       - <a href="index.php@id=206" class="menu">Konkurs</a><br>
  81.     
  82.     <img src="img/s.gif" width="9" height="8"><b class="menu1">SUBSKRYPCJA</b><br>
  83.       - <a href="subskrypcja/nowa.php" class="menu">Za│≤┐</a><br>
  84.       - <a href="subskrypcja/admin.php" class="menu">Administracja</a><br>
  85.  
  86.     <img src="img/s.gif" width="9" height="8"><b class="menu1">REDAKCJA</b><br>
  87.       - <a href="index.php@id=156" class="menu">Sk│ad</a><br>
  88.       - <a href="index.php@id=157" class="menu">Wsp≤│praca</a><br>
  89.       - <a href="index.php@id=158" class="menu">Reklama</a></td>
  90.     </tr>
  91.     <tr>
  92.     <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  93.     </tr></table>
  94.  
  95. </td>
  96. <td width="486" valign="top"><br>
  97.     <div align="center">
  98.     <table border="0" cellpadding="0" cellspacing="0" width="460">
  99.     <tr>
  100.     <td width="460" valign="top"><table border="0" cellpadding="0" cellspacing="0" width="460">
  101.         <tr>
  102.         <td width="460" valign="top"><img src="img/zobacz.gif" border="0" width="460" height="13" alt="ZOBACZ JESZCZE"></td>
  103.         </tr>
  104.         <tr>
  105.         <td width="460" valign="top" background="img/okno11.gif"><div align="center">
  106.                 <table border="0" cellpadding="0" cellspacing="0" width="450"><tr><td width="450"><a class="menu" href="index.php@id=191">Dlaczego XML wart jest uwagi?</a>
  107.  <a class="menu" href="index.php@id=192">Pierwszy dokument XML</a>
  108.  <a class="menu" href="index.php@id=193">Sprawa ogonkowa, czyli Unicode</a>
  109.  <a class="menu" href="index.php@id=195">NarzΩdzia</a>
  110.  <a class="menu" href="index.php@id=196">Zasoby online</a> </td></tr></table></div></td>
  111.         </tr>
  112.         <tr>
  113.         <td width="460" valign="top"><img src="img/okno21.gif" border="0" width="460" height="10"></td>
  114.         </tr></table><span class="nag">Kurs XML</span>
  115.  
  116. <h2>Przekszta│canie i ogl▒danie danych XML</h2>
  117.  
  118. <p align="justify">    JΩzyk XSL (kt≤ry sam jest aplikacj▒ XML) pozwala
  119. przekszta│caµ dane XML na podstawie czego╢ w rodzaju szablonu.
  120. Korzystaj▒c z tego narzΩdzia mo┐esz dane przegrupowywaµ i
  121. wybieraµ. Mo┐esz je tak┐e przygotowaµ do wizualnego
  122. przegl▒dania.</p>
  123.  
  124. <h3>Arkusze XSLT, czy mo┐e XSL?</h3>
  125.  
  126. <p align="justify">    Na standard XSL sk│ada siΩ jΩzyk samych
  127. przekszta│ce± (XSLT) i jΩzyk opisu graficznego. Poniewa┐ opis
  128. graficzny XSL nie jest przez ┐adn▒ z powszechnie u┐ywanych
  129. przegl▒darek internetowych obs│ugiwany, do prezentacji danych
  130. u┐ywa siΩ HTML'a, lub jego m│odszego brata - XHTML'a. Ca│a
  131. rzecz opiera siΩ na automatycznym poumieszczaniu danych
  132. pobranych z dokumentu XML, w wynikowym pliku HTML. Taki plik HTML
  133. s│u┐y do prezentacji wybranych w trakcie przekszta│ce± XSLT
  134. danych. Ta technika nadaje siΩ wy╢mienicie do prezentowania
  135. danych w Internecie. Z jednej strony umo┐liwiamy programom
  136. pobranie samych danych, z drugiej serwujemy czytelnikowi │adnie
  137. graficznie przygotowane dane. Co wiΩcej, dane te mo┐na tak┐e
  138. zmusiµ do interakcji z u┐ytkownikiem. Ca│y czas mo┐emy
  139. przecie┐ mieµ do nich dostΩp.</p>
  140.  
  141. <h3>Arkusz i dane</h3>
  142.  
  143. <p align="justify">    Arkusze styl≤w XSL mog▒ byµ osobnymi plikami, kt≤re
  144. za pomoc▒ odpowiedniej deklaracji w prologu przypisuje siΩ
  145. dokumentom z danymi. Oczywi╢cie jednego arkusza styl≤w mo┐na
  146. u┐ywaµ do przekszta│ce± wielu plik≤w z danymi tworz▒cymi
  147. tΩ sam▒ strukturΩ. Tak naprawdΩ, korzystaj▒c z tego, ┐e
  148. arkusze styl≤w s▒ äzorientowaneö na elementy i inne äwΩz│yö
  149. dokumentu XML, mo┐na wybi≤rczo przekszta│caµ poszczeg≤lne
  150. äwΩz│yö z danymi. Oczywi╢cie najczΩ╢ciej jest nim po
  151. prostu korze± dokumentu.</p>
  152.  
  153. <p align="justify"><i>Wa┐ne jest, aby korze± nie zosta│ pomylony z
  154. g│≤wnym elementem. Korze± zawiera ca│y dokument. Nie tylko
  155. element g│≤wny, ale tak┐e prolog. W hierarchii znajduje siΩ
  156. wiΩc najwy┐ej.</i></p>
  157.  
  158. <p align="justify">    Oto, jak powinna wygl▒daµ deklaracja do│▒czaj▒ca
  159. arkusz XSL. Umieszczana oczywi╢cie w prologu dokumentu z danymi:</p>
  160.  
  161. <?xml-stylesheet type="text/xml" href="default.xsl"?>
  162.  
  163. <p align="justify">    Gdzie ädefault.xslö jest nazw▒ pliku z arkuszem
  164. XSL.</p>
  165.  
  166. <p align="justify">    To jest najprostszy spos≤b powi▒zania XML z XSL.
  167. Je╢li otworzymy plik XML z tak▒ deklaracj▒ i oczywi╢cie
  168. danymi, to przegl▒darka wczyta arkusz styl≤w, przetworzy dane a
  169. efekty wy╢wietli tak samo, jak wy╢wietla pliki HTML.</p>
  170.  
  171. <p align="justify"><i>Je┐eli u┐ywasz przegl▒darki Internet Explorer
  172. 5, czyli jedynej, kt≤ra potrafi korzystaµ z XSL, powiniene╢
  173. zamieniµ w powy┐szej deklaracji warto╢µ parametru ätypeö
  174. z ätext/xmlö na ätext/xslö. W przeciwnym wypadku nie
  175. bΩdzie ona wiedzia│a, ┐e chodzi o arkusz XSL. Wersja 6.0
  176. powinna ju┐ zachowywaµ siΩ poprawnie, bez takich äzachcianekö.</i></p>
  177.  
  178. <p align="justify">    Niestety, z Internet Explorerem 5 jest jeszcze trochΩ
  179. podobnych, jak opisany w ramce, problem≤w. W zwi▒zku z tym
  180. nΩc▒c▒ alternatyw▒ jest u┐ycie jednego z samodzielnych
  181. procesor≤w XSL, kt≤re podobnych komplikacji nie stwarzaj▒.
  182. Oczywi╢cie traci siΩ wtedy sporo, bo uzyskiwany jest äzwyk│yö
  183. dokument HTML. Na razie zapraszam do korzystania z Internet
  184. Explorera i do│▒czanych, zewnΩtrznych arkuszy styl≤w, mo┐liwo╢ci
  185. wcale nie s▒ ma│e.</p>
  186.  
  187. <h3>Zupe│nie nieciekawe uwagi: a co na to wszystko style CSS?</h3>
  188.  
  189. <p align="justify">    Znane z jΩzyka HTML Kaskadowe Arkusze Styl≤w (CSS)
  190. mog▒ byµ wykorzystywane tak┐e razem z XML'em. Arkusze CSS
  191. sk│adaj▒ siΩ ze zbioru regu│ opisuj▒cych wygl▒d poszczeg≤lnych
  192. element≤w w przegl▒darce. I to ca│a filozofia CSS. Nie ma
  193. wiΩc tu mowy o wybieraniu poszczeg≤lnych danych, czy choµby o
  194. wy╢wietlaniu warto╢ci atrybut≤w. W zamian, otrzymujesz mo┐liwo╢µ
  195. ogl▒dania twoich dokument≤w zar≤wno w przegl▒darce Internet
  196. Explorer 5, jak i Netscape 6.</p>
  197.  
  198. <p align="justify">    Je┐eli jeste╢ zainteresowany u┐yciem CSS, mo┐esz
  199. skorzystaµ z dostΩpnych w polskim Internecie bardzo dobrych
  200. materia│≤w. Ich spis znajdziesz w rozdziale äZasobyö. Teraz
  201. zaprezentujΩ tylko przyk│adowe po│▒czenie arkusza CSS i
  202. dokumentu XML, wraz z wynikiem w przegl▒darce.</p>
  203.  
  204. <?xml-stylesheet type="text/css" href="arkusz.css"?>
  205. <dokument>
  206.   <h>Zaawansowane aspekty optymalizacji pracy</h>
  207.   <par>W tym rozdziale postaram siΩ opisaµ, jak pod│▒czyµ mysz do portu 
  208. klawiatury.</par>
  209. </dokument>
  210.  
  211. <p align="justify">    Zwr≤µ uwagΩ na pierwszy wiersz. Zawiera on
  212. deklaracjΩ do│▒czaj▒ca arkusz CSS. R≤┐nica miΩdzy
  213. deklaracj▒ arkusza XSL, polega na r≤┐nej warto╢ci parametru
  214. ätypeö.</p>
  215.  
  216. <p align="justify">    Oto arkusz CSS zawieraj▒cy zbiory regu│ dla trzech
  217. element≤w dokumentu:</p>
  218.  
  219. dokument {
  220.     font-family: "MS Sans Serif", sans-serif;
  221. }
  222. h {
  223.     display: block;
  224.     font-size: 16pt;
  225.     font-weight: bold;
  226.     padding: 10px;
  227. }
  228. par {
  229.     display: block;
  230.     font-size: 10pt;
  231.     padding: 10px;
  232. }
  233.  
  234. <p align="justify">    Tak to razem wygl▒da w przegl▒darce:</p>
  235.  
  236. <table border="0">
  237. <TBODY>    <tr>
  238.         <td><img src="xml/cssns.gif" alt="[9274 bajt≤w]"
  239.         width="420" height="268"
  240.         tppabs="http://www.wckp.lodz.pl/~pabloware/xml/_img/cssns.gif"></td>
  241.     </tr>
  242.     <tr>
  243.         <td>    Przegl▒darka Netscape/Mozilla 6 i plik
  244.         produktywnosc.xml</td>
  245.     </tr>
  246. </TBODY></table>
  247.  
  248. <p align="justify">    Wr≤µmy jednak do XSL. Mo┐e jest trochΩ bardziej
  249. skomplikowany, ale ma znacznie wiΩksze mo┐liwo╢ci.</p>
  250.  
  251. <h3>Struktura arkusza XSL</h3>
  252.  
  253. <p align="justify">    G│≤wny element ka┐dego arkusza XSL to äxsl:stylesheetö.
  254. Jego podstawowym, wymaganym w zale┐no╢ci od parsera atrybutem
  255. jest äversionö - aktualnie ä1.0ö. Ma on tak┐e atrybut
  256. xmlns:xsl, kt≤ry odpowiada za lokalizacjΩ dokumentu z
  257. przestrzeni▒ nazw dla XSLT. Co to takiego przestrze± nazw,
  258. dowiesz siΩ w nastΩpnym rozdziale. Wa┐ne jest teraz, ┐e w
  259. zwi▒zku z konieczno╢ci▒ identyfikacji polece± XSLT, musz▒
  260. byµ one poprzedzane jakim╢ przedrostkiem. NajczΩ╢ciej jest
  261. nim po prostu äxsl:ö.</p>
  262.  
  263. <p align="justify">    Arkusz XSL musi zawieraµ regu│y, kt≤re bΩd▒
  264. pasowa│y do wΩz│≤w elementu ╝r≤d│owego. Musisz zawsze
  265. pamiΩtaµ, ┐e dokument ╝r≤d│owy jest traktowany jako drzewo
  266. element≤w, atrybut≤w i innych wΩz│≤w. Ale skupmy siΩ na
  267. samym arkuszu. Wewn▒trz jego g│≤wnego elementu äxsl:stylesheetö
  268. mog▒ znajdowaµ siΩ podelementy - sekcje äxsl:templateö.
  269. Wybieraj▒ one okre╢lone przez atrybut ämatchö wΩz│y
  270. przetwarzanego dokumentu ╝r≤d│owego. Z wyselekcjonowanych w
  271. ten spos≤b wΩz│≤w ju┐ mo┐na pobraµ (i wstawiµ do wyniku)
  272. dane, mo┐na je tak┐e skierowaµ do dalszego przetwarzania,
  273. poprzez umieszczenie dyrektywy äxsl:apply-templatesö. Po jej
  274. spotkaniu parser zatrzyma obs│ugΩ bie┐▒cej sekcji äxsl:templateö
  275. i zacznie szukaµ nowej, odpowiadaj▒cej wΩz│om-dzieciom
  276. bie┐▒cego taga. Kiedy wsztkie wΩz│y-dzieci ju┐ przetworzy,
  277. to wr≤ci do pierwotnej sekcji äxsl:templateö. Oczywi╢cie
  278. wΩz│y-dzieci mog▒ zawieraµ w│asne wΩz│y-dzieci, kt≤re
  279. r≤wnie┐ maj▒ w│asne sekcje äxsl:templateö. Oto
  280. przyk│adowy, bardzo prosty kod:</p>
  281.  
  282. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  283.  
  284.   <xsl:template match="/">
  285.   
  286.     <html>
  287.     
  288.       <xsl:apply-templates/>
  289.   
  290.     </html>
  291.     
  292.   </xsl:template>
  293.   
  294. </xsl:stylesheet>
  295.  
  296. <p align="justify"><i>Je╢li w sekcji äxsl:templateö nie
  297. zastosujesz polecenia äxsl:apply-templatesö, to ┐adne nie
  298. przekszta│cone dotychczas podelementy bie┐▒cego elementu nie
  299. zostan▒ przekszta│cone, nawet je╢li s▒ odpowiadaj▒ce im inne
  300. sekcje äxsl:templateö.</i></p>
  301.  
  302. <p align="justify">    Ten dokument zawiera dok│adnie jedn▒ sekcjΩ äxsl:templateö.
  303. Warto╢ci▒ jej parametru ämatchö jest ä/ö, co oznacza
  304. korze± dokumentu (tak, korze± te┐ jest wΩz│em). Oczywi╢cie
  305. procesor XSL zawsze przejdzie do takiej sekcji äxsl:stylesheetö
  306. i to na samym pocz▒tku przetwarzania ka┐dego dokumentu XML.
  307. Jest tak dlatego, ┐e w strukturze dokumentu XML zawsze najwy┐ej
  308. znajduje siΩ korze±. Jak widaµ, wprawdzie w tej sekcji äxsl:templateö
  309. jest instrukcja äxsl:apply-templatesö, ale mog│o by jej tam
  310. w og≤le nie byµ. Dlaczego? Procesor i tak nie znajdzie innych
  311. sekcji äxsl:templateö, bo ich po prostu nie ma. Je╢li
  312. u┐yjemy takiego prostego arkusza styl≤w, to wynikem przekszta│ce±
  313. absolutnie ka┐dego poprawnie sformatowanego dokumentu XML
  314. bΩdzie:</p>
  315.  
  316. <html>
  317.  
  318. </html>
  319.  
  320. <p align="justify">    Jak widaµ, tagi nie poprzedzone prefiksem äxsl:ö,
  321. zostan▒ po prostu umieszczone w dokumencie wynikowym. Wa┐ne
  322. jest, ┐e nawet je╢li przeprowadzasz tranformacje do HTML,
  323. musisz pamiΩtaµ o zachowaniu sk│adni XML (w uproszczeniu
  324. mo┐na wiΩc przyj▒µ, ┐e zamiast HTML'a bΩdziesz u┐ywaµ
  325. XHTML'a).</p>
  326.  
  327. <p align="justify"><i>Je╢li do przekszta│ce± chcesz u┐yµ Internet
  328. Explorera 5 (plik XML chcesz wy╢wietlaµ bezpo╢rednio), to
  329. zamie± warto╢µ parametru äxmlns:xslö na ähttp://www.w3.org/TR/WD-xslö.
  330. W przeciwnym razie przegl▒darka nie zrozumie polece± XSL.
  331. Internet Explorer 6 ma ju┐ zachowywaµ siΩ poprawnie.</i></p>
  332.  
  333. <p align="justify">    Spr≤bujmy teraz przeprowadziµ transformacjΩ
  334. konkretnego dokumentu:</p>
  335.  
  336. <dokument tytu│="Zaawansowane aspekty optymalizacji pracy">
  337.   <par>W tym rozdziale postaram siΩ opisaµ, jak pod│▒czyµ mysz do 
  338. portu klawiatury.</par>
  339.   <par>My╢lΩ, ┐e warto to przeczytaµ.</par>
  340. </dokument>
  341.  
  342. <p align="justify">    WystΩpuj▒ w nim nastΩpuj▒ce wΩz│y: korze±,
  343. element ädokumentö, jego parametr ätytu│ö oraz dwa
  344. elementy äparö. Wszystkie interesuj▒ce nas dane nale┐▒ do
  345. elementu ädokumentö, wiΩc to on bΩdzie pierwszym celem
  346. instrukcji äxsl:templateö:</p>
  347.  
  348. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  349.   <xsl:template match="dokument">
  350.     <html>
  351.       <body>
  352.         <xsl:apply-templates/>
  353.       </body>
  354.     </html>
  355.   </xsl:template>
  356. </xsl:stylesheet>
  357.  
  358. <p align="justify">    Jak widzisz, w atrybucie ämatchö umie╢ci│em po
  359. prostu nazwΩ szukanego elemnetu ädokumentö. Po jego
  360. odnalezieniu do wyniku zostanie wstawione trochΩ kodu HTML (dwa
  361. otwieraj▒ce znaczniki), nastΩpnie procesor XSL wykona
  362. instrukcjΩ äxsl:apply-templatesö, czyli bΩdzie pr≤bowa│
  363. przetwarzaµ elementy potomne i na koniec ponownie wstawi trochΩ
  364. kodu HTML (tym razem dwa zamykaj▒ce znaczniki).</p>
  365.  
  366. <p align="justify">    Teraz zajmiemy siΩ äwyci▒gniΩciemö z dokumentu
  367. wszelkich mo┐liwych danych. Za pobieranie rozmaitych warto╢ci
  368. odpowiada instrukcja äxsl:value-ofö, kt≤ra posiada jeden
  369. parametr - äselectö. Okre╢la on, co ma zostaµ pobrane.
  370. Bie┐▒cy wΩze│ oznacza tutaj ä.ö. Aby wstawiµ zawarto╢µ
  371. jakiego╢ podelementu, po prostu wpisz do parametru äselectö
  372. jego nazwΩ. Je╢li chcesz wstawiµ warto╢µ atrybutu, podaj
  373. jego nazwΩ, poprzedzon▒ znakiem äma│pyö. Kiedy ╢cie┐ka
  374. zawiera wiΩcej ni┐ jeden element (czy np. atrybut i
  375. podelement), oddzielaj wszystko znakami ä/ö.</p>
  376.  
  377. <p align="justify"><i>W przypadku pobierania warto╢ci bie┐▒cego
  378. wΩz│a, w zale┐no╢ci od specyfikacji oraz procesora XSL,
  379. bΩdziesz m≤g│ parametr äselectö pomin▒µ. Nie jest to
  380. jednak zalecane, bo ogranicza przeno╢no╢µ twojego kodu.</i></p>
  381.  
  382. <p align="justify">    Oto uzupe│niony arkusz XSL. Zwr≤µ uwagΩ na
  383. instrukcje äxsl:value-ofö:</p>
  384.  
  385. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  386.  
  387.   <xsl:template match="dokument">
  388.     <html>
  389.       <head>
  390.         <title> <xsl:value-of select="@tytu│"/> </title>
  391.       </head>
  392.       <body>
  393.         <h1> <xsl:value-of select="@tytu│"/> </h1>
  394.         <xsl:apply-templates/>
  395.       </body>
  396.     </html>
  397.   </xsl:template>
  398.   
  399.   <xsl:template match="par">
  400.     <p> <xsl:value-of select="."/> </p>
  401.   </xsl:template>
  402.   
  403. </xsl:stylesheet>
  404.  
  405. <p align="justify">    Oczywi╢cie po odczytaniu polecenia äxsl:apply-templatesö,
  406. procesor XSL przejdzie do pierwszej odpowiadaj▒cej elementowi
  407. äparö (bo to kolejny element w dokumencie ╝r≤d│owym)
  408. sekcji äxsl:templateö (tutaj: druga sekcja tego typu). Oto
  409. kod wynikowy:</p>
  410.  
  411. <html>
  412.   <head>
  413.     <title>Zaawansowane aspekty optymalizacji pracy</title>
  414.   </head>
  415.   <body>
  416.     <h1>Zaawansowane aspekty optymalizacji pracy</h1>
  417.     <p>W tym rozdziale postaram siΩ opisaµ, jak pod│▒czyµ mysz do 
  418. portu klawiatury.</p>
  419.     <p>My╢lΩ, ┐e warto to przeczytaµ.</p>
  420.   </body>
  421. </html>
  422.  
  423. <p align="justify">    àw przegl▒darce:</p>
  424.  
  425. <table border="0">
  426. <TBODY>    <tr>
  427.         <td><img src="xml/xslie.gif" alt="[9940 bajt≤w]"
  428.         width="420" height="276"
  429.         tppabs="http://www.wckp.lodz.pl/~pabloware/xml/_img/xslie.gif"></td>
  430.     </tr>
  431.     <tr>
  432.         <td>    Przegl▒darka Internet Explorer i wczytany z
  433.         pliku HTML wynik przekszta│ce± </td>
  434.     </tr>
  435. </TBODY></table>
  436.  
  437. <p align="justify">    Tyle wystarczy, je╢li przekszta│casz dokument za
  438. pomoc▒ jednego z zewnΩtrznych, zgodnych ze specyfikacj▒ parser≤w.
  439. Je╢li za╢ korzystasz z przekszta│ce± äw locieö Internet
  440. Explorera 5 i byµ mo┐e jeszcze innych, bardziej wymagaj▒cych
  441. procesor≤w, to zawsze musisz uwzglΩdniµ korze± dokumentu.
  442. WiΩc aby arkusz dzia│a│ tak┐e z t▒ przegl▒dark▒,
  443. powiniene╢ dodaµ na samym jego pocz▒tku sekcjΩ äxsl:templateö
  444. z atrybutem ämatchö r≤wnym ä/ö (jak pamiΩtasz, oznacza
  445. to korze±), kt≤ra zawiera instrukcjΩ äxsl:apply-templatesö.
  446. Oto ostateczny, bardziej uniwersalny arkusz:</p>
  447.  
  448. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  449.  
  450.   <xsl:template match="/">
  451.     <xsl:apply-templates/>
  452.   </xsl:template>
  453.  
  454.   <xsl:template match="dokument">
  455.     <html>
  456.       <head>
  457.         <title> <xsl:value-of select="@tytu│"/> </title>
  458.       </head>
  459.       <body>
  460.         <h1> <xsl:value-of select="@tytu│"/> </h1>
  461.         <xsl:apply-templates/>
  462.       </body>
  463.     </html>
  464.   </xsl:template>
  465.   
  466.   <xsl:template match="par">
  467.     <p> <xsl:value-of select="."/> </p>
  468.   </xsl:template>
  469.   
  470. </xsl:stylesheet>
  471.  
  472. <p align="justify">    Warto w tym miejscu przypomnieµ, ┐e arkusz bΩdzie
  473. dzia│a│ z przegl▒dark▒ Internet Explorer 5 tylko wtedy, gdy
  474. zastosujesz odpowiedni▒ warto╢µ parametru xmlns:xsl,
  475. wskazuj▒c na szkic roboczy, a nie wersjΩ finaln▒ XSLT (patrz:
  476. druga ramka, w tym podrozdziale).</p>
  477.  
  478. <h3>xsl:for-each i inne dziwactwa</h3>
  479.  
  480. <p align="justify">    Je╢li chcesz po kolei przekszta│caµ wszystkie
  481. elementy spe│niaj▒ce dany warunek, mo┐esz u┐yµ polecenia äxsl:for-eachö.
  482. Posiada ono atrybut äselectö, kt≤ry okre╢la, co ma zostaµ
  483. przekszta│cone. Dla przyk│adu:</p>
  484.  
  485. <xsl:template match="dokument">
  486.   <xsl:for-each select="par">
  487.     <p> <xsl:value-of select="."/> </p>    
  488.   </xsl:for-each>
  489. </xsl:template>
  490.  
  491. <p align="justify">    Kod z wydruku powy┐ej pobierze po kolei wszystkie
  492. zawarto╢ci znajduj▒cych siΩ wewn▒trz elementu ädokumentö
  493. element≤w äparö i umie╢ci je miΩdzy znacznikami äpö.</p>
  494.  
  495. <p align="justify">    Podczas wyboru wΩz│≤w do przekszta│ce± dostΩpne
  496. s▒ wieloznaczniki. Pozwalaj▒ one tworzyµ regu│y domy╢lne, kt≤rych
  497. stosowanie daje gwarancjΩ, ┐e ┐aden element z dokumentu ╝r≤d│owego
  498. nie zostanie pominiΩty. Bez znaczenia, jakie on zajmuje miejsce
  499. w strukturze. Podstawowym symbolem wieloznacznym jest ä*ö.
  500. Mo┐na go oczywi╢cie u┐yµ w atrybucie ämatchö sekcji äxsl:templateö.
  501. Je╢li chcesz aby regu│a dzia│a│a tak┐e dla korzenia, mo┐esz
  502. u┐yµ symbolu ä/ö:</p>
  503.  
  504. <xsl:template match="*|/">
  505.   <xsl:apply-templates/>
  506. </xsl:template>
  507.  
  508. <p align="justify">    Podobne äczaryö mo┐na wyczyniaµ dla wΩz│≤w z
  509. samymi danymi - dla zawarto╢ci tekstowych nale┐y zastosowaµ
  510. ätext()ö, a dla atrybut≤w ä*ö poprzedzon▒ znakiem äma│pyö.
  511. Razem daje to ätext()|@*ö. Je╢li rzecz dodatkowo uzupe│nimy
  512. o automatyczne wstawianie bie┐▒cych warto╢ci, to otrzymamy:</p>
  513.  
  514. <xsl:template match="text()|@*">
  515.   <xsl:value-of select="."/>
  516. </xsl:template>
  517.  
  518. <h3>Jeszcze jeden fascynuj▒cy przyk│ad!</h3>
  519.  
  520. <p align="justify">    Zbudujmy przyk│adowy arkusz pokazuj▒cy dane z
  521. prezentowanego w drugim rozdziale pliku äludzie.xmlö:</p>
  522.  
  523. <ludzie>
  524.   <cz│owiek dane="poprawne">
  525.     <imie>Pawe│</imie>
  526.     <nazwisko>Stroi±ski</nazwisko>
  527.     <poczta>pawel@pabloware.w.pl</poczta>
  528.     <web>http://www.pabloware.w.pl/</web>
  529.   </cz│owiek>
  530.   <cz│owiek dane="fikcyjne">
  531.     <imie>Jan</imie>
  532.     <nazwisko>Kowalski</nazwisko>
  533.     <poczta>webmaster@kowalski.net</poczta>
  534.     <web>http://www.kowalski.net</web>
  535.   </cz│owiek>
  536. </ludzie>
  537.  
  538. <p align="justify">    Tym razem zaczniemy od uwzglΩdnienia korzenia, a w
  539. obs│udze elementu äludzieö dodamy trochΩ kodu HTML:</p>
  540.  
  541. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  542.  
  543.   <xsl:template match="/">
  544.     <xsl:apply-templates/>
  545.   </xsl:template>
  546.  
  547.   <xsl:template match="ludzie">
  548.     <html>
  549.       <body>
  550.         <table border="1">
  551.           <tr>
  552.             <td><b>Dane</b></td><td><b>ImiΩ</b></td><td><b>Nazwisko</b></td>
  553.             <td><b>Poczta</b></td><td><b>Web</b></td>
  554.           </tr>
  555.           <xsl:apply-templates/>
  556.         </table>
  557.       </body>
  558.     </html>
  559.   </xsl:template>
  560.   
  561. </xsl:stylesheet>
  562.  
  563. <p align="justify">    Pora na w│a╢ciwe dane - element äcz│owiekö.
  564. Mo┐na zastosowaµ proste przej╢cie do obs│ugi element≤w
  565. potomnych (kt≤re i tak p≤╝niej trzeba obs│u┐yµ):</p>
  566.  
  567. <xsl:template match="cz│owiek">
  568.   <tr>
  569.     <xsl:apply-templates/>
  570.   </tr>
  571. </xsl:template>
  572.  
  573. <p align="justify">    Ale nie ma takiej potrzeby. Wszystko mo┐na wykonaµ w
  574. jednej sekcji, pos│uguj▒c siΩ tylko instrukcj▒ äxsl:value-ofö.
  575. Oto uzupe│niony kod:</p>
  576.  
  577. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  578.  
  579.   <xsl:template match="/">
  580.     <xsl:apply-templates/>
  581.   </xsl:template>
  582.  
  583.   <xsl:template match="ludzie">
  584.     <html>
  585.       <body>
  586.         <table border="1">
  587.           <tr>
  588.             <td><b>Dane</b></td><td><b>ImiΩ</b></td><td><b>Nazwisko</b></td>
  589.             <td><b>Poczta</b></td><td><b>Web</b></td>
  590.           </tr>
  591.           <xsl:apply-templates/>
  592.         </table>
  593.       </body>
  594.     </html>
  595.   </xsl:template>
  596.  
  597.   <xsl:template match="cz│owiek">
  598.     <tr>
  599.       <td><xsl:value-of select="@dane"/></td>
  600.       <td><xsl:value-of select="imie"/></td>
  601.       <td><xsl:value-of select="nazwisko"/></td>
  602.       <td><xsl:value-of select="poczta"/></td>
  603.       <td><xsl:value-of select="web"/></td>
  604.     </tr>
  605.   </xsl:template>
  606.  
  607. </xsl:stylesheet>
  608.  
  609. <p align="justify">    I wynik jego dzia│ania:</p>
  610.  
  611. <table border="0">
  612. <TBODY>    <tr>
  613.         <td><img src="xml/xslie2.gif" alt="[8140 bajt≤w]"
  614.         width="420" height="220"
  615.         tppabs="http://www.wckp.lodz.pl/~pabloware/xml/_img/xslie2.gif"></td>
  616.     </tr>
  617.     <tr>
  618.         <td>    Przegl▒darka Internet Explorer i plik
  619.         ludzie.xml</td>
  620.     </tr>
  621. </TBODY></table>
  622.  
  623. <p align="justify">    W│a╢ciwie wszystko by│oby w porz▒dku, gdyby nie
  624. fakt, ┐e adresy z dw≤ch ostatnich kom≤rek nie s▒ aktywne. Jak
  625. je uaktywniµ? Oczywi╢cie umieszczaj▒c wewn▒trz HTML'owego
  626. odsy│acza - elementu äAö. Pojawia siΩ jednak problem.
  627. Jedyn▒ instrukcj▒ umo┐liwiaj▒c▒ pobranie danych z dokumentu
  628. ╝r≤d│owego jest äxsl:value-ofö. »eby odsy│acz dzia│a│,
  629. musimy tΩ instrukcjΩ wstawiµ w jego parametrze ährefö
  630. (cel). Ale jak? Przecie┐ wewn▒trz atrybut≤w nie mo┐na
  631. umieszczaµ znacznik≤w. Rozwi▒zaniem s▒ zmienne (a czΩsto to
  632. w│a╢ciwie sta│e) XSL, deklarowane poprzez äxsl:variableö:</p>
  633.  
  634. <xsl:variable name="poczta.url">
  635.   mailto:<xsl:value-of select="poczta"/>
  636. </xsl:variable>
  637.  
  638.  
  639. <p align="justify"><i>Zmienne XSL nie s▒ poprawnie interpretowane
  640. przez przegl▒darkΩ Internet Explorer 5. Na szczΩ╢cie parser
  641. MSXML4 (z IE6) ju┐ je bez problem≤w obs│uguje. Pozostaje wiΩc
  642. u┐ywaµ jednego z äautonomicznychö procesor≤w XSL i czekaµ
  643. na upowszechnienie siΩ Internet Explorera 6.</i></p>
  644.  
  645. <p align="justify">    Widoczny powy┐ej kod przypisuje zmiennej äpoczta.urlö
  646. warto╢µ podelementu o nazwie äpocztaö, poprzedzon▒
  647. prefiksem ämailto:ö. Aby teraz wstawiµ do atrybutu warto╢µ
  648. zmiennej äpoczta.urlö, nale┐y u┐yµ formu│y ä{$poczta.url}ö.
  649. Natomiast aby umie╢ciµ warto╢µ zmiennej w tekstowej
  650. zawarto╢ci znacznika, nale┐y skorzystaµ ze äzwyk│egoö
  651. polecenia äxsl:value-ofö. W jego parametrze äselectö
  652. trzeba wpisaµ poprzedzon▒ znakiem dolara nazwΩ zmiennej. Oto
  653. nowa sekcja obs│ugi elementu äcz│owiekö:</p>
  654.  
  655. <xsl:template match="cz│owiek">
  656.   <tr>
  657.   
  658.     <td><xsl:value-of select="@dane"/></td>
  659.     
  660.     <td><xsl:value-of select="imie"/></td>
  661.     
  662.     <td><xsl:value-of select="nazwisko"/></td>
  663.     
  664.     <xsl:variable name="poczta">
  665.       <xsl:value-of select="poczta"/>
  666.     </xsl:variable>
  667.     <td><a href="mailto:{$poczta}"><xsl:value-of select="$poczta"/></a></td>
  668.     
  669.     <xsl:variable name="web">
  670.       <xsl:value-of select="web"/>
  671.     </xsl:variable>
  672.     <td><a href="{$web}"><xsl:value-of select="$web"/></a></td>
  673.   
  674.   </tr>
  675. </xsl:template>
  676.  
  677.  
  678. <p align="justify"><i>Wyj╢ciem z sytuacji jest tak┐e u┐ycie äxsl:attributeö.
  679. Zmienne XSL s▒ tu jednak o tyle lepsze, ┐e pozwalaj▒ na
  680. wielokrotne wstawienie warto╢ci bez wielokrotnego jej
  681. odczytywania. [Adres musi byµ tutaj wstawiany po dwa dwa razy
  682. - raz do zawarto╢ci znacznika äAö i raz do jego paramtru
  683. ährefö.] O instrukcji äxsl:attributeö bΩdzie mowa
  684. jeszcze w tym podrozdziale.</i></p>
  685.  
  686. <p align="justify">    Hmà, przyda│oby siΩ jeszcze wyr≤┐niµ jako╢
  687. rekordy zawieraj▒ce fikcyjne dane. Powiedzmy, zmieniµ dla nich
  688. kolor t│a na szary. Aby procesor XSL wiedzia│ co jest rekordem
  689. z fikcyjnymi danymi, musimy u┐yµ instrukcji wyboru.</p>
  690.  
  691. <p align="justify">    W XSL'u dostΩpne s▒ dwie takie instrukcje. Pierwsza
  692. - prostsza - to äxsl:ifö. W jej atrybucie ätestö
  693. umieszcza siΩ warunek, a wewn▒trz kod wstawiony do wyniku w
  694. przypadku, gdy warunek przeszed│ test pomy╢lnie. DostΩpna jest
  695. tak┐e odrobinΩ bardziej skomplikowana instrukcja äxsl:chooseö.
  696. Pozwala ona dokonaµ wyboru spo╢r≤d kilku mo┐liwo╢ci (jej
  697. podelementy äxsl:whenö), a tak┐e wykonaµ dzia│ania, gdy
  698. ┐aden warunek nie zostanie spe│niony (podelement äxsl:otherwiseö),
  699. np.:</p>
  700.  
  701. <xsl:choose>
  702.   <xsl:when test="xf/requiem722@scenariusz='rewelacyjny'">
  703.     c≤┐, mo┐na tak powiedzieµ
  704.   </xsl:when>
  705.   <xsl:otherwise>
  706.     nie mo┐liwe
  707.   </xsl:otherwise>
  708. </xsl:choose>
  709.  
  710. <p align="justify"><i>Je╢li wiΩcej ni┐ jeden warunek jest
  711. spe│niony, to i tak wstawiona zostanie zawarto╢µ tylko
  712. pierwszej instrukcji äxsl:whenö z prawdziw▒ warto╢ci▒
  713. atrybutu ätestö.</i></p>
  714.  
  715. <p align="justify">    Nam jednak wystarczy prostsza intrukcja äxsl:ifö.
  716. U┐yjemy tak┐e, wspomnianej ju┐, specjalnej instrukcji do
  717. tworzenia atrybut≤w - äxsl:attributeö. Umieszcza siΩ j▒
  718. wewn▒trz elementu, kt≤ry ma zawieraµ atrybut. Oto przyk│ad
  719. u┐ycia do tworzenia parametru äsrcö HTML'owego znacznika äIMGö
  720. (wstawianie grafiki):</p>
  721.  
  722. <xsl:template match="grafika">
  723.   <img><xsl:attribute name="src">
  724.     <xsl:value-of select="@╝r≤d│o"/>.gif
  725.   </xsl:attribute></img>
  726. </xsl:template>
  727.  
  728. <p align="justify">    Jak widaµ, parametr änameö instrukcji äxsl:attributeö
  729. zawiera nazwΩ tworzonego atrybutu. Natomiast tre╢µ parametru
  730. znajduje siΩ w zawarto╢ci tej instrukcji. Oto kod
  731. sprawdzaj▒cy, czy atrybut ädaneö ma warto╢µ äfikcyjneö.
  732. Je╢li tak, to do elementu ätrö zostanie dodany parametr
  733. zmieniaj▒cy kolor t│a:</p>
  734.  
  735. <tr>
  736.   <xsl:if test="@dane='fikcyjne'">
  737.     <xsl:attribute name="style">background-color: #EAEAEA</xsl:attribute>  
  738.   </xsl:if>
  739. </tr>
  740.  
  741.  
  742. <p align="justify"><i>Kod ten nie zadzia│a w Internet Explorerze.
  743. Przyczyn▒ s▒ problemy w obs│udze zapytania z parametru ätestö.
  744. Niestety nawet najnowsza wersja pasera Microsoft'u (MSXML4) nie
  745. jest w stanie tego zinterpretowaµ.</i></p>
  746.  
  747. <p align="justify">    Tak oto bΩdzie wiΩc wygl▒daµ udoskonalona sekcja
  748. obs│ugi elementu äcz│owiekö:</p>
  749.  
  750. <xsl:template match="cz│owiek">
  751.   <tr>
  752.   
  753.     <xsl:if test="@dane='fikcyjne'">
  754.       <xsl:attribute name="style">background-color: #EAEAEA</xsl:attribute>  
  755.     </xsl:if>
  756.  
  757.     <td><xsl:value-of select="@dane"/></td>
  758.     
  759.     <td><xsl:value-of select="imie"/></td>
  760.     
  761.     <td><xsl:value-of select="nazwisko"/></td>
  762.     
  763.     <xsl:variable name="poczta">
  764.       <xsl:value-of select="poczta"/>
  765.     </xsl:variable>
  766.     <td><a href="mailto:{$poczta}"><xsl:value-of select="$poczta"/></a></td>
  767.     
  768.     <xsl:variable name="web">
  769.       <xsl:value-of select="web"/>
  770.     </xsl:variable>
  771.     <td><a href="{$web}"><xsl:value-of select="$web"/></a></td>
  772.   
  773.   </tr>
  774. </xsl:template>
  775.  
  776.  
  777. <p align="justify">    Podgl▒d wygenerowanego pliku HTML:</p>
  778. <table border="0">
  779.     <tr>
  780.         <td><img src="xml/xslattif.gif" alt="[8111 bajt≤w]"
  781.         width="420" height="196"
  782.         tppabs="http://www.wckp.lodz.pl/~pabloware/xml/_img/xslattif.gif"></td>
  783.     </tr>
  784.     <tr>
  785.         <td>    Opera i wczytany z pliku HTML wynik przekszta│ce±</td>
  786.     </tr>
  787. </table><br></td>
  788.     </tr></table>
  789.     </div>
  790. </td>
  791. <td width="142" valign="top">
  792.  
  793.         <br>
  794.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  795.         <tr>
  796.         <td width="142" valign="top"><img src="img/login.gif" border="0" width="142" height="13" alt="LOGIN"></td>
  797.         </tr>
  798.         <tr>
  799.         <td width="142" valign="top" background="img/okno1.gif">
  800.         
  801.             
  802.             <div align="center">
  803.             <table cellpadding="0" cellspacing="2" border="0" width="98%">
  804.             <form method="post" action="subskrypcja/login.php">
  805.             <tr><td width="30%"><span class="t">Login:</span></td><td width="68%"><input type="text" name="login" size="15" class="login"></td></tr>
  806.             <tr><td width="30%"><span class="t">Has│o:</span></td><td width="68%"><input type="password" name="haslo" size="15" class="login"></td></tr>
  807.             
  808.             <tr><td colspan="2"><center><input type="image" src="img/ok.gif"></td></tr>
  809.             </form></table></div>
  810.         
  811.         </td>
  812.         </tr>
  813.         <tr>
  814.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  815.         </tr></table>
  816.  
  817.         <br>
  818.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  819.         <tr>
  820.         <td width="142" valign="top"><img src="img/art.gif" border="0" width="142" height="13" alt="ARTYKULY"></td>
  821.         </tr>
  822.         <tr>
  823.         <td width="142" valign="top" background="img/okno1.gif">
  824.         
  825.         <span class="m">
  826.         
  827.          -<a href="index.php@id=1" class="menu">"Edytory HTML'a"</a><br>
  828.          -<a href="index.php@id=2" class="menu">"Publikowanie witryny"</a><br>
  829.          -<a href="index.php@id=3" class="menu">"PHP w domu"</a><br>
  830.          -<a href="index.php@id=4" class="menu">"Przeszukiwanie stron"</a><br>
  831.          -<a href="index.php@id=204" class="menu">"Wprowadzenie do Javy"</a><br>
  832.          -<a href="index.php@id=210" class="menu">"Grafika w PHP"</a>
  833.         </span>
  834.         
  835.         </td>
  836.         </tr>
  837.         <tr>
  838.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  839.         </tr></table>
  840.         
  841.         <br>
  842.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  843.         <tr>
  844.         <td width="142" valign="top"><img src="img/stat.gif" border="0" width="142" height="13" alt="ARTYKULY"></td>
  845.         </tr>
  846.         <tr>
  847.         <td width="142" valign="top" background="img/okno1.gif"><div align="left"><table border="0" cellpadding="0" cellspacing="0" width="138"><tr><td width="138"><ol><li><a href="index.php@id=135" class="stat">PHP - przyk│adowe skrypty</a> <span class="maleczarne">(1491)</span><br><li><a href="index.php@id=59" class="stat">Szablony 1</a> <span class="maleczarne">(833)</span><br><li><a href="index.php@id=145" class="stat">Kurs PHP</a> <span class="maleczarne">(817)</span><br><br><span class="maleczarne">ú▒cznie: 24108</span>        </ol>
  848.         <center><a href="http://stat.webmedia.pl/cgi-bin/anal?webarea" target="_blank">
  849. <img border=0 src="http://stat.webmedia.pl/cgi-bin/stat?webarea&stat4ur" alt="stat4u" width="40" height="10"></a></center>
  850.         </td></tr></table></div>
  851.         </td>
  852.         </tr>
  853.         <tr>
  854.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  855.         </tr></table>
  856.         
  857.         <br>
  858.         <table border="0" cellpadding="0" cellspacing="0" width="142">
  859.         <tr>
  860.         <td width="142" valign="top"><img src="img/sponsor.gif" border="0" width="142" height="13" alt="SPONSOR"></td>
  861.         </tr>
  862.         <tr>
  863.         <td width="142" valign="top" background="img/okno1.gif"><br>
  864.         <center><EMBED src="img/beep2.swf" quality=high bgcolor=#000000 WIDTH=120 HEIGHT=30></center>                            
  865.         </td>
  866.         </tr>
  867.         <tr>
  868.         <td width="142" valign="top"><img src="img/okno2.gif" border="0" width="142" height="10"></td>
  869.         </tr></table>
  870.  
  871.         <br>
  872.             <div align="center"><table border="0" cellpadding="2" cellspacing="0" width="120">
  873.             <tr>
  874.             <td width="120"><a href="button.php@id=1" target="_blank"><img src="img/cgi.gif" border="0"></a></td>
  875.             </tr>
  876.             <tr>
  877.             <td width="120"><a href="button.php@id=2" target="_blank"><img src="img/ygreg.gif" border="0"></a></td>
  878.             </tr>
  879.             <tr>
  880.             <td width="120"></td>
  881.             </tr>
  882.             </table>
  883.             </div>
  884.         
  885.  
  886. </td>
  887. </tr>
  888. <tr>
  889. <td width="770" valign="top" colspan="3" align="right"><br><br><span class="m">All rights reserved by <a href="mailto:web-area@web-area.org">J&J Filipowscy Design & Code</a></td>
  890. </tr></table></div>
  891.  
  892.  
  893. </body>
  894. </html>