Documente Academic
Documente Profesional
Documente Cultură
T e hnolog ii We b
MATRIXROM
2001
Tehnologii Web
O.
Preambul
A.
i
1.
2.
Metodologii
3.
4.
5.
A- 1
A- 2
A- 7
A - 24
A - 27
A - 36
B.
2.
B- 1
B- 2
C.
B - 18
C- 1
1.
2.
3.
C- 2
C - 10
D.
C - 27
D- 1
1.
2.
HTML Compact
3.
4.
Foi de stiluri
D- 2
D - 20
D - 24
D - 31
E.
1.
Introducere !i caracterizare
2.
Interfe"e !i implement#ri
3.
4.
5.
DOM nivelul 2
6.
7.
Concluzii
E- 2
E- 4
E- 5
E - 12
E - 14
E - 20
E - 48
F.
1.
Modele !i metodologii
2.
3.
F- 2
F - 12
F - 27
II
Tehnologii Web
4.
G.
2.
3.
4.
Cookie-uri
5.
Concluzii
G- 1
G- 3
G - 21
G - 54
G - 73
G - 83
H.
1.
Istoric !i fundamente
2.
Caracterizare
3.
4.
Concluzii
H- 2
H- 5
H - 15
I.
H - 53
I- 1
1.
Istoric !i caracterizare
2.
Applet-uri
3.
4.
5.
Prezent !i viitor
I- 2
I- 8
I - 36
I - 41
J.
I - 42
Ingineria Web
J- 1
1.
2.
Robo"ii Web
3.
Motoarele de c#utare
4.
J- 2
J - 11
J - 21
J - 37
K.
Realitatea virtual#
K- 1
1.
Introducere n VRML
2.
3.
4.
K- 3
K - 48
K - 52
Studiu de caz: o aplica"ie VRML pentru vizualizarea
5.
tridimensional# a interiorului unei cl#diri
K - 60
K - 63
6.
Viitor
K - 67
III
Tehnologii Web
L.
Anexe
L- 1
1.
2.
Elementele HTML 4
3.
Atributele HTML 4
4.
Entit#"ile HTML
5.
Propriet#"ile CSS2
6.
7.
Nodurile VRML97
L- 2
L- 5
L- 8
L - 18
L - 21
L - 28
M.
Glosar de termeni
N.
Resurse bibliografice
O.
Cuprins
L - 35
M- 1
N- 1
I
IV
Tehnologii Web
Tehnologii Web
Indubitabil, tehnologiile Web reprezint! "i vor reprezenta cel mai dinamic "i fascinant
domeniu al informaticii actuale "i viitoare. Evident, ele au fost cele care n mai pu#in de un
deceniu au modificat complet globul p!mntesc "i mentalit!#ile.
Scopul acestei c!r#i este s! surprind!, ntr-un instantaneu suficient de detaliat evolu#ia
plin! de neprev!zut "i de vivacitate a spa#iului World-Wide Web. Astfel, vom ilustra, la un
nivel profesionist, cele mai interesante, utile "i vii aspecte ale Web-ului, att din punct de
vedere teoretic, dar mai cu seam! aplicativ, axndu-ne n principal pe una dintre
direc#iile cele mai efervescente ale acestuia: meta-limbajul XML. O mare parte a variantelor
preliminare ale acestui material a reprezentat suportul pentru cursul de "Tehnologii avansate n
informatic!" ("Tehnologii Web") predat de autor studen#ilor de la Facultatea de Informatic#,
Universitatea "Alexandru Ioan Cuza" din Ia!i, ncepnd cu anul universitar
1999/2000, pe baza unei experien#e de peste patru ani n domeniul Internetului "i
al Web-ului.
Structur# general#
Am structurat cartea n 11 p!r#i "i 7 anexe, urmate de o list! cuprinz!toare de referin#e
bibliografice.
Dup! un scurt istoric, n prima parte putem urm!ri dou! dintre filosofiile de baz! ale
Web-ului: hipertextul "i modelul client/server de transfer al informa#iilor prin intermediul
protocolului HTTP, al!turi de localizarea resurselor prin intermediul URI-urilor.
Partea secund! realizeaz! o introspec#ie detaliat! n mecanismele meta-limbajului SGML "i
ale familiei XML (reprezentat! de spa"ii de nume, XLink, XSL, XML Schema etc.), utilizate
pentru marcarea informa#iilor, n special pentru WWW. Meta-limbajul XML a devenit n
ultimii ani favoritul cercet!torilor n domeniul Web-ului, avnd deja asigurat un viitor
str!lucit n direc#ia reprezent!rii "i model!rii semantice a informa#iilor. XML are deja o
multitudine de aplica#ii, existnd peste o sut! de limbaje bazate pe acesta. n partea a treia
se vor prezenta MathML, RDF "i XUL. Normal, Web-ul a avut o dezvoltare exponen#ial!
datorit! limbajului HTML, major! aplica#ie a SGML-ului. O trecere n revist! a
caracteristicilor HTML-ului, plus o prezentare a rescrierii HTML n termenii XML "i o
detaliere a foilor de stiluri CSS vom face n partea a patra. Pentru a procesa ntr-un mod
eficient, elegant "i independent de platform! documentele XML "i HTML vom avea nevoie
de un model obiectual, reprezentat de DOM, pe care l vom descrie n partea a cincea a
c!r#ii, al!turi de alternativele SAX "i JDOM. Un alt limbaj bazat pe XML este SMIL, care
va avea cu siguran#! multe de spus n domeniul prezent!rilor multimedia sincronizate pe
Web. Despre el "i despre solu#iile de a integra hipermedia n paginile HTML vom discuta n
cea de-a "asea parte a acestui material. Desigur, pentru a asigura "i exploata interactivitatea
spa#iului WWW trebuie s! proiect!m "i s! implement!m aplica#ii destinate Web-ului.
n partea a "aptea vom detalia mai multe modalit!#i de concepere a acestor aplica#ii, pe
partea server: standardul CGI, serverele de aplica#ii PHP "i ASP, cookie-urile. Pe partea client,
JavaScript reprezint! standardul de facto. Cititorul va putea parcurge cele mai interesante "i
dinamice aspecte ale acestuia n cea de-a opta parte. O rud! mai serioas! a JavaScript-ului
este tn!rul limbaj Java. Cum vom putea programa applet-uri "i servlet-uri Java vom vedea n
a noua parte a volumului. Web-ul se consider! a fi un adev!rat depozit gigantic de
informa#ii, compus din milioane de documente. Cum l organiz!m, att local, ct "i global,
care este arhitectura robo"ilor "i a motoarelor de c!utare, cum proiect!m site-urile, vom descrie n
partea a zecea. Una dintre cele mai de viitor direc#ii ale spa#iului WWW o reprezint!
realitatea virtual!. Dup! o ilustrare a principalelor elemente "i tendin#e ale limbajului VRML,
vom prezenta mediile virtuale distribuite. Pe toate acestea, cititorul le va putea reg!si n ultima
parte a c!r#ii.
ii
Tehnologii Web
Punem la dispozi#ie celor interesa#i o serie de anexe, descriind printre altele sintaxa
general! a URL-urilor, elementele "i atributele HTML, propriet!#ile CSS nivelul 2
"i nodurile VRML, plus un glosar de termeni referitori la tehnologiile Web.
L!s!m pl!cerea cititorului s! descopere "i alte surprize, sper!m pl!cute, "i s!
experimenteze sursele din prezentul volum. A"tept!m reac#iile, remarcile "i semnalarea
posibilelor gre"eli survenite pe parcurs la adresa busaco@infoiasi.ro. De asemeni,
actualiz!ri "i alte am!nunte privind acest material se vor putea g!si pe Web, n cadrul paginii
personale a autorului: http://www.infoiasi.ro/~busaco.
Cum a fost scris acest material
nainte de a fi preg!tit pentru tip!rire, textul prezentei c!r#i a fost integral tehnoredactat
de c!tre autor, conform standardului HTML 4, utilizndu-se foi de stiluri CSS1 "i CSS2,
fiind testat pe navigatoarele Netscape Communicator 4.1, 4.6, 4.7x "i 6.0 (pentru Linux "i
Windows), Mozilla 5.0/M16 (pentru Windows), M17 (pentru Linux) "i M18 - SeaMonkey
(pentru Linux "i Windows), Internet Explorer 4.0, 5.0 "i 5.5, Lynx 2.8.3 (pentru Linux),
Amaya 3.1 "i 4.0 (pentru Windows) "i Opera 4.0 "i 5.0 (pentru Windows "i Linux), pe
sistemele de operare Linux RedHat 6.2, Linux RedHat 7.0, Windows 95, Windows 98, Windows
NT 4.0 Server "i Windows Me. Fi"ierele HTML au fost post-procesate "i verificate folosind
aplica#ia HTML Tidy (pentru Linux). Documentele SMIL prezentate n lucrare au fost
validate "i vizualizate cu GRiNS 1.0 "i 1.5 (pentru Windows). Exemplele HTML+TIME 2.0
au fost rulate sub Internet Explorer 5.5. Pentru testarea lumilor VRML s-a folosit
vizualizatorul World View 2.0.
Script-urile CGI au fost concepute n limbajele C - standardul ANSI (folosindu-se
compilatorul EGCS 1.1.2), Bourne Again Shell (bash 1.14.7) "i Perl (prin utilizarea
interpretorului Perl 5.0), fiind executate sub Linux RedHat. Programele PHP s-au testat pe
serverul Apache 1.3.12 cu interpretorul PHP 3.0.15 "i 4.0.2 sub Linux. Script-urile JavaScript
au fost rulate pe navigatoarele precizate mai sus.
Applet-urile "i aplica#iile Java prezentate au fost testate "i executate sub mediul de
dezvoltare Java 2 SDK Standard Edition 1.3 pentru Windows.
Acolo unde nu se precizeaz! alt autor, exemplele de cod surs!, ilustra#iile "i figurile sunt
concepute de Sabin Corneliu Buraga. Nu ne facem r!spunz!tori pentru acurate#ea
con#inutului aflat la adresele Web furnizate pe parcursul acestei c!r#i sau n cadrul
referin#elor bibliografice.
Mul"umiri
Dorim s! transmitem graditudinea noastr! tuturor colegilor, colaboratorilor "i
prietenilor, f!r! suportul c!rora aceast! carte n-ar fi reu"it s! prind! forma actual!. Suntem
profund recunosc!tori profesorilor no"tri prof.dr. Toader Jucan, prof.dr. Dumitru
Todoroi, conf.dr. Gabriel Ciobanu, conf.dr. Dan Cristea, conf.dr. Dorel Lucanu "i
lect. Valentin Clocotici.
Mul#umim pentru sprijinul venit din partea domnului Mircea Srbu de la revista
NET Report care a f!cut posibil! publicarea unor articole referitoare la tehnologiile Web
actuale, c!r!mizi pe baza c!rora s-a construit edificiul prezentului material.
Prezentul volum cuprinde un num!r minim (sper!m nul) de gre"eli "i datorit! atentelor
remarci venite din partea lect.dr. %tefan Andrei, ing. Drago! Acost#chioaie,
cercet. Octavian Buzatu "i studen#ilor C#t#lin Mitrofan "i Iulian V#ideanu.
iii
Tehnologii Web
iv
Tehnologii Web
Tehnologii Web
A-2
Tehnologii Web
considerat! a fi multimedia, dac! ea con#ine m!car o media continu! (video, de pild!) "i una
discret! (cum ar fi textul).
Pentru a n#elege no#iunea de hipermedia, trebuie s! n#elegem ce nseamn! hipertextul.
n anul 1965, Ted Nelson inventeaz! termenul hipertext (text non-linear), definindu-l drept
"material scris sau grafic interconectat ntr-o manier! complex! care n mod conven#ional
nu poate fi reprezentat pe hrtie. El poate con#ine cuprinsuri ale propriului s!u con#inut "i
rela#iile dintre diverse p!r#i componente; poate de asemeni con#ine adnot!ri, ad!ugiri "i
note de subsol pentru cei care doresc s!-l examineze".
Defini#iile hipertextului sunt diverse. De exemplu, iat! dou! dintre ele.
Conform cu J.Smith "i S.Weiss, hipertextul reprezint!:
1.
A-3
Tehnologii Web
un sistem care s! con#in! ntreaga literatur! universal!, plus alte informa#ii, ntr-un singur
depozit de date.
Prototipul lui Xanadu exist! ntr-o versiune dezvoltat! de Autodesk (niciodat! f!cut!
public!, n ciuda numeroaselor anun#uri a unor variante de test) "i n 1991 permitea:
Desigur, n prezent, Xanadu a fost dep!"it de ceea ce nseamn! Web-ul, dar multe dintre
ideile de pionerat ale lui Nelson se reg!sesc n cadrul WWW "i a altor sisteme hipermedia
actuale.
n cadrul Laboratorului Media de la MIT, ncepnd cu anii '70, s-au dezvoltat o serie de
sisteme multimedia clasice, surse de inspira#ie pentru aplica#iile actuale. Dintre acestea se
pot men#iona: Spa#ial Data Management System, Aspen Movie Map, Project Athena, care
definesc "i o parte dintre domeniile de interes ale hipermediei: simul!ri interactive,
colabor!ri "tiin#ifice la distan#!, nv!#!mnt.
Ast!zi se estimeaz! c! num!rul serverelor WWW a dep!"it un milion. n ultimii
trei-patru ani, Web-ul s-a dezvoltat exploziv "i a dobndit un nou aspect, devenind
domeniu public "i extinzndu-se foarte mult n lumea afacerilor. Astfel, Web-ul poate fi
considerat segmentul Internet cu cea mai rapid! dezvoltare: dac! Internetul se dubleaz! la
fiecare 100 de zile, spa#iul WWW num!r! deja peste un miliard de pagini.
Istoricul WWW-ului decurge n paralel cu istoricul HTML-ului, limbaj de marcare a
documentelor hipermedia disponibile pe Web pe care l vom prezenta n unul dintre
capitolele urm!toare.
A-4
Tehnologii Web
Tim Berners-Lee scrie de asemeni prima aplica#ie Web, un pachet de server Web rulnd
pe calculatoare NeXT. n noiembrie 1990, Nicola Pellow ncepe s! conceap! un navigator
(browser) text care la sfr"itul aceluia"i an era disponibil n cadrul CERN.
n mai 1991, CERN prezint! WWW la seminarul anual "i browserele n mod linie pentru
platforme ca VAX, RS6000 "i SUN sunt disponibile pe grupurile de "tiri
alt.hypertext, comp.sys.net, comp.text.sgml "i comp.mail.multi-media
(august 1991).
Dan Connolly se al!tur! proiectului Web, iar experien#a sa n utilitare de documentare online "i sisteme formale l ajut! s! dezvolte specifica#ia pentru HTML. Pe data de 15 ianuarie
1992 apare pentru prima dat!, disponibil prin FTP anonim, un browser text conceput de
CERN, interpretnd noul limbaj HTML, prezentat "i la AIHEP'92 - La Londe.
Proiectului Web i se al!tur! Jean-Francois Groff "i Carl Barker.
n 1993, navigatorul grafic, numit Mosaic, rulnd sub X Window este proiectat de Marc
Andreesen "i f!cut public de NCSA (luna februarie). Mosaic reprezint! primul browser grafic
care utilizeaz! standardul HTML. n aprilie 1993, dup! aproape un an "i jum!tate de la
introducerea Web-ului, existau deja 60 de servere WWW.
Urmeaz! ulterior prezentarea standardului HTML 2.0 (IETF RFC 1866) care include
abilit!#i de afi"are mai precis! a imaginilor, utilizarea de formulare, tabele, tipuri de leg!turi
etc. HTML 2.0 permite dezvoltarea masiv! a Web-ului "i toate browserele WWW moderne
l suport! f!r! restric#ii. n fapt, standardul HTML 2.0 doar pune n ordine anumite facilit!#i
practice ap!rute ncepnd cu anul 1994. Netscape extinde o parte dintre specifica#iile
HTML 2.0 n 1996 ad!ugnd o serie de tag-uri utile n versiunea, foarte popular!,
Netscape Navigator 2.0.
HTML+ se dorea a fi o ncercare de a extinde HTML-ul, prima dat! publicat! de
Dave Raggett n 1993 "i prezentat! la prima conferin#! Web n 1994.
O extensie a HTML+ a fost HTML 3.0 care nu a fost niciodat! standardizat!. Ea a fost
propus! de tn!rul pe atunci Consor"iu Web (W3C), format n 1994 de c!tre CERN "i MIT
cu scopul de a alc!tui un standard viabil al limbajului HTML "i de a ghida conceperea
de pagini Web. Acest consor#iu este cel care propune, certific! "i urm!re"te ntreaga
dezvoltare a spa#iului WWW, n prezent avnd n componen#! institu#ii academice de
renume, companii importante "i persoane implicate n organizarea Web-ului.
n luna iulie 1996, Consor#iul Web anun#! oficial standardul HTML 3.2 adaugnd
specifica#ii pentru tabele, imagini, applet-uri, perfect compatibil cu HTML 2.0.
n ianuarie 1997, standardul a fost aprobat "i toate navigatoarele l suport!.
Proiectan#ii de navigatoare (ca Netscape "i, mai nou, Microsoft) au implementat diferite
facilit!#i care nu apar definite de nici un standard HTML. De exemplu, Netscape Navigator
3.0 oferea la data lans!rii posibilit!#i de ad!ugare de elemente multimedia direct n paginile
Web, fundaluri reprezentate de imagini, cadre (frames) etc. care nu ap!ruser! nc! n
specifica#iile HTML, plus suport pentru script-uri JavaScript interpretate direct de c!tre
client.
Urm!toarea versiune a HTML-ului dezvoltat! de Consor#iul Web, denumit! Cougar,
este standardul HTML 4.0, ap!rut n anul 1997, care ofer! suport pentru accesibilitatea
paginilor Web din partea persoanelor cu handicap, foi de stiluri interne, suport lingvistic "i
pentru formule matematice, evenimente etc. Dup! cum stipuleaz! inventatorul Web-ului "i
directorul W3C, Tim Berners-Lee:
"Cu HTML 4.0, orice aplica#ie Web va fi independent! de navigator."
A-5
Tehnologii Web
Versiunile actuale ale celor mai cunoscute navigatoare (Netscape Communicator, Internet
Explorer "i Opera) suport! standardul HTML 4.
Pentru a asigura fiabilitatea "i corectitudinea comunica#iilor pe WWW, Consor#iul Web
a introdus HTML Validation Service (aflat la adresa http://validator.w3.org/) care
verific! dac! un anumit document se conformeaz! standardului HTML 4.0.
Tim Berners-Lee declar! c! HTML 4.0 n-a fost conceput pentru navigatoare, ci pentru
aplica#ii viitoare "i produse Web.
Ultima direc#ie de standardizare a Consor#iului WWW este cea a rescrierii HTML-ului
n termenii meta-limbajului extensibil XML, pentru a cre"te flexibilitatea "i a oferi
proiectan#ilor de aplica#ii Web o mai mare adaptabilitate. Astfel, HTML 4.0 este urmat de
XHTML $.0, standardizat relativ recent, n luna ianuarie 2000.
A-6
Tehnologii Web
2. Metodologii
2.1 Hipertextul
Conceptul esen#ial prezent n cadrul hipertextului este cel al leg!turilor (care apar n
cadrul aceluia"i document "i/sau ntre documente diferite). Aceast! caracteristic! de legare
permite organizarea non-linear! a informa#iilor.
O parte dintre avantajele hipertextului fa#! de textul tip!rit sunt:
A-7
Tehnologii Web
Leg!turile sunt conexiuni ntre noduri (sau concepte) dependente unul de altul, putnd fi
bidirec"ionale sau doar unidirec"ionale. %i leg!turilor li se pot asocia tipuri
(leg!tura de specificare, de elaborare, leg!tura membru, leg!tura de opozi#ie etc.), definind
natura rela#iei dintre noduri. Dup! Conklin, leg!turile pot fi referen"iale (non-ierarhice, utile
pentru realizarea referin#elor ncruci"ate, ele fiind cele care deosebesc cel mai bine
hipermedia de celelalte forme de stocare a informa#iei) sau organiza"ionale (denumite
ierarhice sau structurale, ilustrnd rela#iile p!rinte-copil dintre noduri, folosite la organizarea
nodurilor n manier! ierarhic! ntr-o structur! strict!). Leg!turile organiza#ionale sunt
esen#iale pentru liniarizarea hipertextului "i permit autorilor s! verifice coeren#a structurii
hipertext.
A-8
Tehnologii Web
antice ale reprezent!rii hipertextului. Un alt exemplu concludent este Biblia. Dic#ionarele "i
enciclopediile tip!rite pot fi considerate vechi forme de hipertext, fiind v!zute ca re#ele de
noduri-text unite de leg!turi-referin#e.
obiect hipertext
nod
structur!
nod-secven#ial
cale linear!
cale alternativ!
cale condi#ionat!
nod de explorare
con#inut
atomic
surs! intern!
surs! extern!
nod compus
leg!tur!
structur!
leg!tur! secven#ial!
leg!tur! de explorare
con#inut
A-9
Tehnologii Web
Partea de con"inut
Nodurile "i leg!turile pot fi considerate drept obiecte proiectate, pentru asigurarea
coeren#ei putndu-le fi asociate propriet!#i (semantici). Partea de con#inut stocheaz! obiecte
purt!toare de informa#ie, acestea fiind noduri con#inut care memoreaz! date "i leg!turi de
tip con#inut care conecteaz! nodurile con#inut pe baza unor rela#ii semantice.
Nodurile con#inut pot fi atomice sau pot fi compuse din alte noduri (m!rimea unui nod
este determinat! de autor). Preciznd natura semantic! a rela#iilor dintre noduri,
leg!turile sunt clasificate pe mai multe nivele dup! cum urmeaz!:
A - 10
Tehnologii Web
Nodurile de structur! organizeaz! nodurile con#inut "i leg!turile ntr-o manier! specific!,
fiecare nod de structur! avnd un nume "i un nod de start. Acestea pot fi de dou! tipuri:
1. noduri de secven#! care permit autorului s! defineasc! secven#a de citire a
con#inutului hipertextului (cititorul poate fi constrns s! urmeze secven#a de noduri
indicat! de autor);
2. noduri de explorare care ofer! utilizatorului posibilit!#i de explorare a
re#elei hipertext.
Leg!turile de structur! se pot clasifica astfel:
1. leg!turi de secven#! asociate con#inutului fiec!rui nod de secven#! care
posed! o secven#! de prezentare (se utilizeaz! pentru a defini ordinea de parcurgere:
liniar!, arborescent! etc.);
2.
A - 11
Tehnologii Web
Exist! mai multe abord!ri pentru realizarea unei structuri hipermedia valide "i
u"or de parcurs.
Cea mai uzual! se bazeaz! pe metafora c!r"ii tip!rite, structura linear! putnd
acompania un alt tip de structur!, folosindu-se leg!turi organiza#ionale ntre
nodurile hiperdocumentelor. Alte leg!turi pot fi utilizate pentru a oferi ceea ce se
nume"te "capabilitatea non-liniar! controlat!" de a parcurge hipertextul
(leg!turi c!tre cuprins, referin#e, note de subsol, glosar de termeni etc. pot apare cu
succes pentru a mbun!t!#i structura documentelor). Structurile liniare pot ajuta la
realizarea a ceea ce se nume"te tour-guide al unui sistem, fiind preg!tite n prealabil de
c!tre exper#i pentru a ghida un novice printr-o re#ea de noduri hipertext.
Se ofer! suport pentru traversarea unui text liniar n cadrul unui sistem
hipermedia, dar aceast! abordare "i dovede"te sl!biciunea atunci cnd lu!m n
considerare explorarea hiperdocumentelor liniare de dimensiuni considerabile.
A doua manier! de realizare este structura liniar! cu salturi, adoptat! de Apple
n cadrul sistemului HyperCard, constnd dintr-o structur! arborescent! n care
utilizatorii pot s! traverseze nodurile n oricare direc#ie urmnd o cale liniar!,
dar de asemeni sunt capabili s! fac! salturi de la orice nod la un nod principal
denumit nodul acas! ("home"). Nodul acas! poate fi o bibliotec! avnd n
componen#! diverse documente liniare (e.g. c!r#i electronice).
A - 12
Tehnologii Web
A - 13
Tehnologii Web
2.5 Modele
Pentru a realiza sisteme hipermedia deschise, cu func#ionalit!#i integrate, s-au propus
diverse modele, pe o parte dintre ele le vom trece n revist! n continuare.
Hypertext Abstract Machine (HAM)
Una dintre primele ncerc!ri de a propune un model de implementare hipertext a fost
Hypertext Abstract Machine (HAM), un sistem general multi-utilizator pentru stocarea
hipertextului, bazat pe tranzac#ii, ap!rut n 1988. Modelul este structurat pe nivele,
constnd din:
aplica#ia - aplica#ia curent! care poate rula pe aceea"i ma"in! sau pe o ma"in!
diferit! de cea pe care ruleaz! HAM;
grafuri - re#ele de noduri "i leg!turi con#innd unul sau mai multe contexte;
2.
3.
noduri;
4.
leg!turi;
5.
Asupra obiectelor HAM se pot realiza opera#ii de creare, "tergere, distrugere, modificare,
filtrare, interogare "i altele. Arhitectura HAM ofer! un sistem de control al versiunilor,
securitatea "i filtrarea datelor.
A - 14
Tehnologii Web
Storage - este cel mai important nivel, modelnd o baz! de date care este
compus! dintr-o ierarhie de componente con#innd date interconectate prin
leg!turi rela#ionale. Componentele posed! identificatori unici "i leg!turile pot fi
identificate de un set de doi sau mai mul#i identificatori. Componentele corespund
no#iunii generale de noduri "i pot con#ine text, imagini statice, audio, video etc.
Componentele sunt tratate ca "i containere generice de date "i modelul nu specific!
nici o structur! a acestora (astfel, componentele text nu sunt diferen#iate de
componentele audio, de exemplu).
A - 15
Tehnologii Web
Modelul Trellis
Richard Furuta "i David Stotts dezvolt! un sistem hipertext, bazat pe re#ele Petri,
denumit Trellis, n care implementeaz! modelul Trellis. Din acest model ei au dedus un
meta-model de referin#!, abreviat r-model. Modelul este structurat pe cinci nivele logice, n
fiecare nivel putndu-se reg!si una sau mai multe reprezent!ri a unei p!r#i ori a ntregului
hipertext. Prin contrast cu modelul HAM sau alte abord!ri, nivelele reprezint! nivele de
abstractizare "i nu componentele sistemului.
Nivelele pot fi grupate n trei categorii: abstracte, concrete "i vizibile. Anumite aspecte
ale hipertextului au fost deliberat excluse din cadrul modelului Trellis: semantica navig!rii,
comportamentul dinamic, caracteristicile con#inutului, descrierile de la nivelul fizic,
interfe#ele cu utilizatorul.
Astfel, modelul nu este indicat pentru modelarea unei aplica#ii de genul unei c!r#i
electronice hipermedia.
Modelul Tower
Majoritatea modelelor hipertext au n vedere specificarea unor caracteristici ale
sistemelor actuale "i mai pu#in ale celor viitoare. Cercet!torul Paul De Bra "i echipa sa
propun un nou model hipertext, orientat-obiect "i extensibil, prezentndu-l la cea de-a
patra Conferin#! a Hipertextului, organizat! de ACM (Association for Computing
Machinery).
Modelul, denumit Tower (turn), con#ine elemente structurale de baz! ca noduri, leg!turi
"i ancore, obiecte de tip turn "i obiecte de tip ora". Obiectele turn sunt utilizate s! modeleze
diverse descrieri ale unui obiect (fiind similare, oarecum, nivelelor modelului Dexter). Tipul,
modalit!#ile de stocare, modalit!#ile de vizualizare etc. reprezint! nivele ale obiectului turn.
Ora"ele constau din mul#imi de vizualizare peste obiectele turn.
Modelul permite fiec!rui tip de obiect s! fie obiect virtual (i.e. rezultatul unei func#ii sau
algoritm), operatorii pentru definirea structurilor virtuale fiind Apply-to-All, Filter,
Enumeration "i Abstraction, utili pentru prelucrarea informa#iilor hipertext.
Semantica navig!rii este descris! prin intermediul re#elelor Petri.
A - 16
Tehnologii Web
Modelul Tower
Tehnologii Web
O ancor! de baz! reprezint! loca#ia destina#ie a unei leg!turi, putnd fi de tip uzual,
ca pozi#ia n cadrul unui nod text, sau o loca#ie dependent! de aplica#ie n cadrul unui nod
complex, ca de exemplu o coordonat! tridimensional! a unui corp 3D.
O leg!tur! de baz! este o rela#ie simpl! dintre dou! ancore de baz! (e.g. o leg!tur! dintre
dou! noduri). Valorile leg!turii sunt alese n func#ie de aplica#ie.
Turnurile
Func#ionalitatea obiectelor dintr-un hiperdocument este una multi-dimensional! "i astfel
descrierea complet! a unui obiect const! din diferite nivele. De exemplu, un nod posed!:
o dimensiune structural! constnd din con#inutul lui (e.g. text) "i opera#iile
de manipulare a acestui con#inut (e.g. editarea textului folosind un editor de text);
un nivel semantic definind rela#ia dintre turnul surs! "i turnul destina#ie
al leg!turii.
Num!rul "i natura nivelelor obiectelor turn sunt complet arbitrare, n func#ie
de necesit!#i.
Ora!ele
Un obiect al unui hiperdocument poate fi vizualizat din diverse perspective, depinznd
de modul cum este accesat de c!tre utilizator.
Nodurile de tip ora" sunt folosite pentru a vizualiza obiectele turn din diferite astfel de
perspective. Elementele unui ora" sunt denumite vizualiz!ri (views), fiecare vizualizare
constnd dintr-un turn care descrie obiectul dintr-o perspectiv! particular!. Aceste
vizualiz!ri modularizeaz! informa#ia n conformitate cu diverse modalit!#i de accesare
a datelor.
A - 18
Tehnologii Web
2.6 Standarde
Fa#! de documentele clasice, statice "i structurate, documentele hipermedia sunt
nestructurate "i pot fi dinamice. Astfel, standardele curente referitoare la documente nu
surprind complet caracterul structurii hipertext. O ierarhie arborescent! este relevant!, dar
nu este suficient! pentru hipertext, iar formele actuale de SGML sau ODA nu ofer! toate
capabilit!#ile dorite pentru reprezentarea "i interschimbarea hipertextului. Un unic standard
nu poate acoperi diversitatea formatelor "i ac#iunilor ce pot fi executate asupra
hiperdocumentelor. A"adar, au fost propuse o serie de standarde hipermedia dintre care
vom men#iona HyTime "i MHEG.
HyTime
HyTime (Hypermedia/Time-based Structuring Language) reprezint! un standard
interna#ional pentru reprezentarea leg!turilor hipertext "i sincronizarea informa#iilor
con#inute de documentele multimedia. Bazat pe SGML, n conformitate cu ISO 8879,
HyTime a fost standardizat n cadrul grupului special SIGLINK al ACM n 1992 "i ofer! o
multitudine de extensii precum posibilitatea folosirii de pointeri sau scheme de adresare n
vederea localiz!rii datelor, independen#a de nota#iile de con#inut a nodurilor, de tipurile
leg!turilor, de modalit!#ile de procesare, prezentare "i semanticile utilizate. HyTime suport!
adresarea prin nume, dup! pozi#ia nodului n cadrul documentului "i dup! construc#ia
semantic! asociat! acelui nod. HyTime permite combinarea oric!ror tipuri de tehnologii
multimedia "i hipertext (proprietare sau nu), dar nu are n vedere standardizarea prezent!rii,
interfe#ei cu utilizatorul sau limbajelor de interogare.
HyTime a fost creat pentru a fi utilizat ca infrastructur! a aplica#iilor multimedia
sincronizate sau nesincronizate, permi#nd schimbul de informa#ii hipertext independent de
platforma hardware sau software folosit!.
MHEG
Scopul standardului MHEG (Multimedia and Hypermedia Information Coding
Expert Group) este de a defini reprezentarea "i codificarea informa#iilor multimedia "i
hipermedia pentru a facilita serviciile de interschimb de hiperdocumente n orice context
(dispozitive de stocare, re#ele de telecomunica#ii sau re#ele de difuzare audio-vizual!).
MHEG ofer!:
abstractiz!ri pentru prezent!ri n timp-real incluznd sincronizarea "i
interactivitatea informa#iilor multimedia;
A - 19
Tehnologii Web
2.7 Aplicaii
Tehnicile hipertext (hipermedia) pot fi utilizate n diverse aplica#ii precum c!r#i
electronice, enciclopedii, sisteme de help on-line, sisteme de nv!#are asistat! de calculator
(CAL - Computer-Aided Learning), scriere colaborativ! de documente, chio"curi
informa#ionale interactive, sisteme decizionale etc.
n prezent exist! o serie de sisteme hipertext opera#ionale dintre care se pot aminti
Hyperwave, Microcosm, Storyspace, Webthing "i, desigur, World Wide Web.
Hyperwave
Vom descrie n continuare un sistem hipermedia avansat - Hyperwave (ini#ial denumit
Hyper-G) - dezvoltat la Universitatea tehnic! din Graz, Austria, de H.Havrer "i F.Kappe.
Hyperwave ofer!:
consisten#a documentelor.
Serverul Hyperwave
Hyperwave a fost conceput s! stocheze resurse hipermedia numeroase care pot fi
reg!site pe diferite servere. Dezvoltarea "i administrarea pe termen lung a bazelor de date
distribuite devin cruciale atunci cnd dimensiunea acestora cre"te foarte mult.
Pentru aceasta, Hyperwave impune o structurare a documentelor memorate.
Fiecare document este membru al uneia sau mai multor colec#ii, aceste colec#ii formnd
o ierarhie.
n afar! de a suporta diverse facilit!#i ca asignarea unor atribute obiectelor multimedia
sau indexarea "i c!utarea lor, serverul Hyperwave men#ine o ierarhie a utilizatorilor
organiza#i n grupuri.
Unui document i se pot asocia diverse atribute, dintre care amintim:
cuvinte-cheie de c!utare;
propriet!#i de afi"are;
o durat! de accesibilitate;
costul vizualiz!rii;
Aceste atribute sunt memorate ntr-o baz! de date separat!, pentru facilitarea
opera#iunilor de extragere "i manipulare.
A - 20
Tehnologii Web
Documentele
Un server Hyperwave poate con#ine diverse tipuri de documente:
documente Postscript;
Este posibil! definirea de leg!turi spre o serie de documente sau p!r#i ale lor.
Se pot insera "i pseudo-documente speciale de c!tre script-uri care vor fi executate de
server la cererea clien#ilor. Folosind acest mecanism, con#inutul poate fi creat "din zbor" "i
prezentat utilizatorului (sunt suportate script-uri CGI, HGI sau cod SQL).
Aceasta faciliteaz! "i opera#iunile de c!utare sau de indexare.
Astfel, Hyperwave se poate considera a fi un veritabil sistem hipermedia.
Virtual Shakespeare
n cele ce urmeaz!, vom prezenta un proiect de vizualizare tridimensional! a unor mari
cantit!#i de text, cum sunt piesele de teatru ale lui William Shakespeare, proiect bazat pe
diverse metodologii hipertext "i pe tehnici vizuale de filtrare a informa#iei.
De cele mai multe ori se dore"te ca parcurgerea unor documente de dimensiuni
considerabile s! se realizeze simplu, rapid "i natural. Cercet!torii de la laboratorul Visible
Language Workshop (MIT), condu"i de profesorul Muriel Cooper, au propus n anul 1996 n
cadrul proiectului Virtual Shakespeare o metod! de vizualizare tridimensional! a
con#inutului textual al pieselor lui Shakespeare, prin intermediul unei camere virtuale care
poate naviga liber! prin hiperdocumente.
A - 21
Tehnologii Web
Un filtru vizual aplicat pentru replicile Titaniei, regina znelor din "Visul unei nop"i de var#"
ntr-un alt plan, se pot parcurge indica"iile regizorale referitoare la personajele scenei
Tehnologii Web
A - 23
Tehnologii Web
"ftp"
pentru
ftp://ftp.is.co.za/rfc/rfc2396.txt
news:comp.infosystems.www.servers.unix
telnet://delta.ac.tuiasi.ro:7777
schem!
"news"
A - 24
schem!
"telnet"
pentru
Tehnologii Web
Existnd mai multe metode de a accesa resursele, vor fi mai multe scheme pentru
a le identifica:
schema = alpha (alpha | digit | "+" | "-" | ".")*
= server | reg_name
= (unreserved | escaped | "$" | "," | ";" | ":" |
"@" | "&" | "=" | "+")+
server
= [ [ userinfo "@" ] hostport ]
userinfo
= (unreserved | escaped | ";" | ":" | "&" | "=" |
"+" | "$" | ",")+
hostport
= host [ ":" port ]
host
= hostname | IPv4addr
hostname
= (domainlabel ".")* toplabel ["."]
domainlabel = alphanum | alphanum (alphanum | "-")* alphanum
toplabel
= alpha | alpha (alphanum | "-")* alphanum
IPv4addr
= digit+ "." digit+ "." digit+ "." digit+
port
= digit+
=
=
=
=
=
[ abs_path | opaque_path ]
segment ( "/" segment )*
pchar* ( ";" param)*
pchar*
unreserved | escaped | ":" | "@" | "&" |
"=" | "+" | "$" | ","
Calea poate con#ine secven#e de segmente de cale separate prin "/". n cadrul unui
segment, caracterele "/", ";", "=" "i "?" sunt rezervate. Fiecare segment poate include o
secven#! de parametri, dup! delimitatorul ";".
Componenta de interogare este un "ir de informa#ii interpretate de resurs!:
A - 25
Tehnologii Web
query
= uric*
n cadrul componentei de interogare, caracterele ";", "/", "?", ":", "@", "&", "=", "+",
"," "i "$" sunt rezervate.
Sintaxa unui URI relativ este o form! prescurtat! a unui URI absolut, n care unele
componente lipsesc "i anumite componente de cale ("." "i "..") au un n#eles special
(vezi mai jos).
Atunci cnd o referin#! URI este utilizat! s! realizeze o ac#iune de accesare a unei
resurse, se poate folosi un identificator de fragmentare constnd din anumite informa#ii care vor
fi interpretate de agentul utilizator dup! ce opera#ia de transfer a resursei s-a finalizat
cu succes.
fragment
= uric*
Anumite scheme URI nu permit sintaxa ierarhic!, deci nu pot utiliza referin#e relative.
A - 26
Tehnologii Web
4. Protocolul de transfer al
hipertextului: HTTP
4.1 Introducere
Protocolul de transfer al hipertextului HTTP (HyperText Transfer Protocol)
reprezint! un protocol bazat pe TCP/IP destinat sistemelor hipermedia conlucrnd n
medii distribuite. HTTP a nceput s! fie proiectat "i utilizat din anul 1990, dezvoltndu-se
mpreun! cu spa#iul WWW.
Prima versiune, referit! HTTP/0.9, a reprezentat un simplu protocol de transfer de date
prin Internet. Urm!toarea versiune HTTP/1.0, definit! de RFC 1945, a mbun!t!#it
transferul de mesaje, permi#ndu-se mesaje n format MIME (Multipurpose Internet
Mail Extensions), con#innd meta-informa#ii despre datele transmise "i despre semantica
dialogului cererilor "i r!spunsurilor dintre clien#ii "i serverele Web.
A urmat HTTP/1.1 care ofer! mai multe func#ionalit!#i suplimentare, precum
mecanisme de c!utare, adnotare "i actualizare, avnd suport pentru URI
(Uniform Resource Identifier), specificnd adresele ca loca#ie (prin URL) sau prin nume
(via URN). HTTP de asemeni este utilizat ca protocol generic pentru comunicarea ntre
agen#ii utilizator "i por#ile (gateways) c!tre alte sisteme Internet, incluznd suport pentru
protocoale ca SMTP (Simple Mail Transfer Protocol), NNTP (Network News Transfer
Protocol), FTP (File Transfer Protocol), Gopher. n acest mod, HTTP permite accesul
hipermedia la resurse disponibile din diverse aplica#ii.
Protocolul HTTP este un protocol sigur, de tip cerere/r!spuns, comunica#iile decurgnd
peste conexiunile TCP/IP, portul standard de acces fiind portul 80. HTTP nu posed! nici
un mecanism pentru a men#ine starea conexiunilor, fiind n acest sens independent de
context. Cererile sunt individuale, iar serverul Web nu poate distinge implicit apartenen#a
conexiunilor efectuate de clien#i.
4.2 Terminologie
Vom folosi n cele ce urmeaz! urm!torii termeni:
conexiune
Un circuit virtual la nivelul transport stabilit ntre dou! programe care
doresc s! comunice.
mesaj
Unitatea de baz! a unei comunica#ii HTTP, constnd dintr-o secven#!
structurat! de octe#i, transmis! printr-o conexiune.
cerere
Un mesaj de cerere HTTP (vezi mai jos).
A - 27
Tehnologii Web
r!spuns
Un mesaj de r!spuns HTTP.
resurs!
Un obiect de date sau serviciu care poate fi identificat de un URI. Resursele
pot avea reprezent!ri multiple (e.g. formate, m!rimi, rezolu#ii etc.).
entitate
Informa#ia transferat! ntr-o opera#ie de cerere sau de r!spuns. O entitate
cuprinde att meta-informa#ii, ct "i con#inutul propriu-zis.
reprezentare
O entitate inclus! ntr-un r!spuns care reprezint! o negociere ntre
client "i server.
negociere
Mecanism de selectare a reprezent!rii potrivite a unei date solicitate.
client
Un program care stabile"te conexiuni cu scopul de a trimite cereri.
agent-utilizator
Clientul care ini#iaz! o cerere (navigator, editor, robot de traversare Web).
Navigatoarele cele mai cunoscute sunt Netscape Navigator, Internet Explorer,
Opera, Arena, Mosaic, Lynx "i Links (ultimele dou! rulnd n mod text).
server
O aplica#ie care accept! conexiuni, r!spunznd la anumite cereri transmise
de clien#i. Un program poate juca rol att de server, ct "i de client.
Un server se poate comporta ca server ini#ial, poart!, tunel sau proxy Web n
func#ie de natura cererii. Cele mai cunoscute servere Web sunt: Apache,
Netscape Enterprise Server, Microsoft Internet Information Server (IIS), Sun Web Server,
Stronghold, MacHTTP, WebSite.
proxy (intermediar)
Un program intermediar care ruleaz! ca server, ct "i drept client pentru a
transmite cereri altor servere. Cererile trimise unui proxy pot fi rezolvate
intern sau transmise mai departe, c!tre alte servere (posibil translatate).
Un proxy trebuie s! implementeze cerin#ele de server "i de client ale
specifica#iei HTTP.
poart!
Un server care lucreaz! ca intermediar pentru alte servere, n mod
transparent, fiind "i un translator de protocoale.
tunel
Un program intermediar func#ionnd ca mijlocitor ntre dou! conexiuni.
A - 28
Tehnologii Web
cache
Structura
Orice mesaj HTTP trebuie s! debuteze cu un cmp indicnd versiunea protocolului n
prima linie a mesajului:
HTTP-Version ::= "HTTP-Version" ":" "HTTP" "/" digit "." digit
n prezent este opera#ional protocolul 1.1 deci toate mesajele de cerere "i de r!spuns vor
ncepe cu linia HTTP/1.1 sau o versiune inferioar!.
Mesajele pot fi codificate conform IANA (Internet Assigned Numbers Authority) fiind
permise codific!rile:
gzip (GNU zip) este un cod Lempel-Ziv (LZ77) cu suma de control pe
32 de bi#i;
A - 29
Tehnologii Web
Descriere
Exemple
application/postscript
application/octetstream
audio
audio/basic
audio/aiff
audio/mid
image
image/gif
image/jpeg
image/png
text
text/plain
text/html
text/xml
video
video/mpeg
video/quicktime
application
multipart
multipart/mixed
multipart/alternative
message
message/partial
message/rfc822
Tipurile sau subtipurile MIME nestandardizate nc! vor fi prefixate de caracterele "x-".
Astfel, putem ntlni application/x-cdf (defini#ie de canal de date activ),
image/x-targa (format grafic Targa) sau x-world/x-vrml (lume virtual! modelat! n
VRML; acest tip MIME este acum nlocuit cu model/vrml).
Cmpul Accept dintr-un mesaj de cerere poate specifica mul#imea de tipuri de date
returnat! de server ca r!spuns:
Accept
media-range
accept-params
accept-extension
type
subtype
qvalue
::=
::=
::=
::=
::=
::=
::=
A - 30
Tehnologii Web
Pot fi specifica#i unul sau mai mul#i factori de calitate relativ!. De pild!, cererea
Accept: audio/*; q=0.2, audio/basic este interpretat! astfel: "se prefer! tipul
audio/basic, dar serverul va trebui s! trimit! toate tipurile audio avnd calitatea de cel pu"in 80%".
De exemplu: http://www.infoiasi.ro/~busaco/egon/http.html.
Dac! portul nu apare, se ia prin defini#ie portul 80, rezervat protocolului HTTP.
Adresele host vor fi tratate indiferent de scrierea cu caractere majuscule sau nu
(case-insensitive), dar calea de directoare abs_path este tratat! case-sensitive. Dac! abs_path
nu apare, se va considera "/", iar caracterele rezervate vor fi echivalente cu codul lor n
hexa, precedat de "%" (n forma "% hex hex").
De exemplu, aceste trei URI sunt echivalente:
http://www.infoiasi.ro:80/~busaco/poems.html
http://www.infoiasi.ro/%7Ebusaco/poems.html
http://WWW.InfoIasi.Ro/%7ebusaco/poems.html
Corpul mesajului va con#ine informa#iile propriu-zise ale unei cereri sau r!spuns,
specificate de o entitate. O entitate-corp difer! de corpul mesajului numai dac! sunt aplicate
codific!ri.
Serverul va returna codul 405 (Method Not Allowed) sau 501 (Not Implemented)
dac! se va trimite numele unei metode inexistente.
Descrierea metodelor permise urmeaz! mai jos:
OPTIONS
GET
A - 31
Tehnologii Web
HEAD
POST
PUT
DELETE
TRACE
4.5
4. 5 Coduri de stare
Pentru fiecare cerere a unui client, serverul HTTP r!spunde cu o serie de coduri de stare
a opera#iei solicitate, dintre care men#ion!m:
a. Coduri de informare ($xx)
Acestea dau informa#ii despre o anumit! ac#iune:
A - 32
Tehnologii Web
301 Moved Permanently - resursa cerut! a fost asignat! unui URI nou "i
orice referin#! viitoare la ea trebuie s! se realizeze prin acest URI returnat;
303 See Other - r!spunsul la cerere poate fi g!sit la o alt! loca#ie URI
"i trebuie accesat folosind o metod! GET;
A - 33
Tehnologii Web
Pot fi transmise "i coduri de avertisment, cu valori cuprinse ntre 0 "i 99.
A - 34
Tehnologii Web
Exemplu
Urmeaz! un exemplu de cerere HTTP pentru accesarea unui document HTML. Liniile
subliniate reprezint! cererea din partea unui client, urmat! de replica serverului Web
(modelul client/server HTTP):
GET /index.html HTTP/1.1
Host: www.infoiasi.ro
HTTP/1.1 200 OK
Date: Thu, 23 Sep 1999 07:18:22 GMT
Server: Apache/1.3.12 (Unix) (Red Hat/Linux)
Last-Modified: Fri, 28 Aug 1998 07:03:53 GMT
ETag: "35028-181-35e65659"
Accept-Ranges: bytes
Content-Length: 385
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META http-equiv="refresh" content="0;
url=http://www.infoiasi.ro/~busaco/fcs">
<TITLE>Faculty of Computer Science</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"
LINK="#0000FF" VLINK="#000080" ALINK="#FF0000">
...
A - 35
Tehnologii Web
2.
3.
4.
n cadrul nivelului 1., pentru realizarea cript!rii comunica#iilor dintre server "i clien#ii
Web se pot lua n considerare mai multe abord!ri:
criptarea leg!turii
Se cripteaz! pachetele IP (via routere sau firewall-uri).
criptarea documentelor
Documentele stocate pe serverele Web pot fi criptate folosindu-se un
sistem precum PGP (Pretty Good Privacy), la nivelul clientului trebuind
decriptate.
Pentru nivelul 2., s-au propus dou! standarde menite a securiza tranzac#iile HTTP:
Pentru nivelul 4., n prezent limbajul Java ridic! o serie de probleme de securitate ca:
Astfel, s-a constituit o bibliotec! criptografic! API Java Security care include clase pentru
semn!turi digitale, interfe#e pentru gestiunea cheilor "i a certificatelor "i controlul accesului.
Produsele-software destinate pentru dezvoltarea de aplica#ii Java sigure sunt deja
numeroase, putnd fi amintite J/CRYPTO sau J/SSL.
A - 36
Tehnologii Web
n continuare ne vom ocupa de nivelul 3., cel mai important din punctul nostru
de vedere.
Din p!cate, solu#iile utilizate n mod curent nu pot rezolva toate problemele "i, deseori,
sunt contradictorii. De exemplu, pentru reducerea riscurilor de interceptare, multe
organiza#ii achizi#ioneaz! servere Web considerate sigure, implementnd o pleiad! de
protocoale de criptare, dar aceste servere necesit! certificate de autentificare semnate digital
care trebuiesc actualizate periodic.
Furniz!m n continuare o serie de sfaturi pentru cre"terea nivelului de securitate a unui
server Web:
1. Pe ct posibil, un server Web nu trebuie s! ruleze alte servicii "i s! nu
accepte conexiuni de la distan#!; preferabil ar fi ca daemonul de po"t! electronic!
s! nu fie opera#ional;
2. Serverul Web nu trebuie s! ruleze sub auspicii de superutilizator
(root n Unix). La fel, scripturile CGI nu trebuie executate ca root.
3. Fi"ierele de configurare "i modulele serverului nu trebuie stocate pe o
parti#ie care poate fi exportat!.
4. Permisiunile ata"ate fi"ierelor serverului Web trebuie setate "i monitorizate
cu aten#ie.
5.
Se va limita sau chiar inhiba execu#ia directivelor Server Side Includes (SSI).
6. Scripturile CGI trebuie plasate ntr-un singur director (de obicei cgi-bin)
"i modific!rile lor trebuie monitorizate.
7. n cadrul directorului cgi-bin nu se permite accesul nelimitat. Utilizatorii
locali nu trebuie s! poat! instala, edita, "terge sau chiar vizualiza scripturi sau fi"iere
de configurare.
8. Autorii scripturilor (CGI, PHP sau ASP) nu trebuie s! fac! publice sursele
programelor lor, mai ales dac! nu sunt n variante finale, deoarece ele pot con#ine
puncte vulnerabile neb!nuite sau bug-uri periculoase.
A - 37
Tehnologii Web
9. Scripturile nu trebuie s! poat! fi preluate prin FTP anonim "i nici fi"ierele
de configurare ale serverului FTP nu trebuie accesate via WWW.
10. Se va interzice plasarea de la distan#! pe serverul Web a fi"ierelor de
configurare (e.g. .htaccess n cazul Apache).
11. Fi"ierele jurnal (log-urile) - pentru Apache de obicei stocate n directorul
/var/log/httpd - nu trebuie s! poat! fi accesate de utilizatorii ordinari sau de
intru"i. Hackerii pot altera sau distruge informa#iile din aceste fi"iere, mai ales din
fi"ierul access_log care nregistreaz! toate acces!rile paginilor de pe serverul
Web. Un fragment din acest fi"ier este prezentat n continuare:
netcache.surfree.net.il - - [05/Feb/2001:11:13:57 +0200]
"GET /~busaco/teach/docs/sag/node112.html HTTP/1.0" 304 gw-campus.tuiasi.ro - - [05/Feb/2001:11:10:58 +0200]
"GET /~web/despre.html HTTP/1.0" 200 4666
netcache.surfree.net.il - - [05/Feb/2001:11:10:48 +0200]
"GET /~busaco/teach/docs/sag/node55.html HTTP/1.0" 304 212.3.192.245 - - [05/Feb/2001:11:10:17 +0200]
"GET /~hilcif HTTP/1.1" 404 273
gw-campus.tuiasi.ro - - [05/Feb/2001:11:09:01 +0200]
"GET /~web/web-logo-title.jpg HTTP/1.0" 304 gw-campus.tuiasi.ro - - [05/Feb/2001:11:09:01 +0200]
"GET /~web/tutoriale.html HTTP/1.0" 304 gw-campus.tuiasi.ro - - [05/Feb/2001:11:08:54 +0200]
"GET /~busaco/web-group/wg.css HTTP/1.0" 200 1022
gw-campus.tuiasi.ro - - [05/Feb/2001:11:08:54 +0200]
"GET /~busaco/web-group/index.html HTTP/1.0" 200 14323
gw-campus.tuiasi.ro - - [05/Feb/2001:11:08:39 +0200]
"GET /~web/index.html HTTP/1.0" 304 gw-campus.tuiasi.ro - - [05/Feb/2001:11:08:38 +0200]
"GET /~web/web-bullet.gif HTTP/1.0" 304 gw-campus.tuiasi.ro - - [05/Feb/2001:11:08:34 +0200]
"GET /~web/web-logo-title.jpg HTTP/1.0" 304 gw-campus.tuiasi.ro - - [05/Feb/2001:11:08:34 +0200]
"GET /~web/teme.html HTTP/1.0" 304 netcache.surfree.net.il - - [05/Feb/2001:11:07:45 +0200]
"GET /~busaco/teach/docs/sag/node56.html HTTP/1.0" 304 sinterom.ro - - [05/Feb/2001:11:05:09 +0200]
"GET /~papp/_derived/links.htm HTTP/1.0" 304 -
Pe fiecare linie, sunt stocate informa#ii despre adresa simbolic! sau IP ale
calculatorului client care a formulat o cerere HTTP, numele de login de la distan#!
(dac! nu a fost furnizat se nlocuie"te cu "-"), numele utilizatorului (dac! nu este
disponibil este substituit de "-"), momentul cnd a fost efectuat transferul de date
(ziua, luna, anul, ora, minutul, secunda "i diferen#a de fus orar), comanda HTTP
executat!, codul de stare returnat de server, num!rul de octe#i transfera#i (sau "-").
Formatul acestor informa#ii poate fi modificat de administratorul serverului Web
prin intermediul fi"ierului de configurare (e.g. httpd.conf).
12. Alte m!suri, mai extreme, pot fi:
A - 38
Tehnologii Web
Aceast! linie ne permite s! asign!m sau s! modific!m parola unui utilizator, parola fiind
solicitat! de la intrarea standard.
Configurarea serverului se poate realiza fie prin fi"ierul httpd.conf, fie prin
.htaccess, indicnd o zon! protejat!, de obicei n func#ie de directoarele dorite a fi
accesate pe baz! de autentificare. Fi"ierul .htaccess va fi stocat n directorul asupra
c!ruia dorim s! modific!m comportamentul implicit al serverului Web (plasarea lui ntr-un
anumit director va avea efect asupra tuturor subdirectoarelor acestuia).
nainte de a modifica maniera de autentificare prin fi"ierul .htaccess, administratorul
serverului Web (n cazul nostru Apache) va specifica n httpd.conf (reg!sit, de cele mai
multe ori, n directorul /etc/httpd/conf) ca autentific!rile s! se realizeze via
.htaccess. Pentru aceasta, vom insera directiva AllowOverride AuthConfig,
iar fi"ierul .htaccess poate avea liniile de mai jos:
A - 39
Tehnologii Web
AuthName specific! zona dorit! a fi protejat! "i oricare resurs! din aceast!
zon! va fi accesat! prin intermediul unui nume de utilizator permis "i o parol!
(putem crea mai multe zone partajnd acelea"i nume "i parole).
AuthType desemneaz! metoda de autentificare folosit! de protocolul
HTTP (n prezent se accept! doar Basic, dar n viitor se va standardiza "i metoda,
mai sigur!, Digest; serverul Apache suport! metoda Digest prin ad!ugarea unui
modul special).
AuthUserFile indic! fi"ierul de autentificare generat de htpasswd.
Atunci cnd un utilizator va dori s! viziteze o pagin! stocat! n acel director, va trebui s!
furnizeze un nume "i o parol! de acces (dac! numele sau parola nu coincid cu cele din
fi"ierul /etc/httpd/users, autentificarea va e"ua).
A - 40
Tehnologii Web
A - 41
Tehnologii Web
Se va permite accesul oricarui utilizator din grupul webgroup sau admin ori
utilizatorului cu numele webadmin.
Un fi"ier de grup const! din linii desemnnd grupurile "i membrii acestora,
sintaxa general! fiind:
grup: utiliz1 utiliz2 ... utilizN
Dac! se furnizeaz! numele unui utilizator care exist! n cadrul unui grup, dar c!ruia nu i
s-a asociat nici o parol! n fi"ierul de autentificare a utilizatorilor, atunci acel utilizator nu
va avea acces n zona restrictiv!.
n situa#ia n care num!rul de utilizatori cre"te destul de mult, se pot utiliza metode
complementare, precum stocarea informa#iilor de autentificare n baze de date: fi"iere DBM
(modulul mod_auth_dbm), DB (mod_auth_db), mSQL (prin mod_auth_msql) etc.
Autentific!rile se pot realiza via Kerberos prin utilizarea unor module adi#ionale n cadrul
serverului Apache.
Limitarea accesului
Putem restric#iona folosirea metodelor de interogare HTTP prin intermediul sec#iunii
<Limit>:
<Limit GET POST PUT>
require valid-user
</Limit>
A - 42
Tehnologii Web
Numai utilizatorii elis, stanasa sau socrate vor putea realiza o cerere prin metoda
POST, al#i utilizatori (neautentifica#i) vor utiliza alte metode (i.e. GET). Aceast! manier!
poate fi adoptat! la restric#ionarea accesului la un script CGI (se permite metoda GET,
dar numai anumi#i utilizatori pot folosi POST).
Restric"ionarea pe baza adresei clientului
Accesul la resurse (directoare sau fi"iere) se poate face pe baza adresei IP sau a
domeniului clientului care a formulat cererea de acces. n acest caz, se poate include ntre
<Limit> "i </Limit> (n .htaccess sau n fi"ierul de configura#ie a serverului Web)
marja de valori ale adreselor IP permise. Cererile de la alte adrese vor fi rejectate.
Un exemplu:
<Limit GET POST PUT>
order deny, allow
deny from all
allow from 193.231.30.0/24 192.168.0.0/16
</Limit>
Restric"ionarea combinat#
Dup! cum am v!zut mai sus, accesul poate fi restric#ionat "i pe baza adresei IP sau
domeniului calculatorului client. Putem utiliza, n mod combinat, ambele metode.
Dac! dorim ca accesul s! se realizeze fie pe baza domeniilor permise, fie folosind
autentificarea prin nume "i parol!, vom include directiva Satisfy any n fi"ierul
.htaccess sau n sec#iunile <Directory>, <Location> ori <Files> ale fi"ierului de
configurare. Dac! apar ambele metode de restric#ionare (pe baza adreselor clien#ilor "i pe
baza autentific!rii), n mod implicit serverul Web impune s! fie ndeplinite amndou!.
A - 43
Tehnologii Web
Redirect#ri
n unele cazuri ar fi dorit ca, la apari#ia unor erori HTTP, vizitatorii s! fie redirecta#i spre
anumite documente particulare. Implicit, la o eroare, serverul Web va transmite
navigatorului o pagin! descriind codul "i mesajul de eroare. Putem specifica s! fie transmise
alte documente clientului, atunci cnd survin erori de genul 401 ("Unauthorized"),
403 ("Forbidden"), 404 ("Not found") sau 500 ("Server Error"). Pentru aceasta,
se pot include n .htaccess liniile de mai jos:
ErrorDocument 401 /Web/not_auth.html
ErrorDocument 404 /Web/not_found.html
Astfel, atunci cnd un anumit utilizator va cere o resurs! inexistent!, serverul va trimite
documentul not_found.html din directorul /Web.
Putem folosi, n locul unui document local, un anumit URI spre care s! fie redirectat
navigatorul. Aceasta ne permite s! redirect!m automat browserul atunci cnd am mutat
definitiv o resurs! la alt URI (sau n alt director, aflat pe acela"i server). Va trebui s!
introducem n vechiul director un fi"ier .htaccess care s! cuprind! urm!toarele:
<Limit GET POST>
deny from all
ErrorDocument 403 /un_alt_director/index.html
</Limit>
A - 44
Tehnologii Web
Tehnologii Web
B-2
Tehnologii Web
B-3
Tehnologii Web
B-4
Tehnologii Web
elementului respectiv n cadrul unui text (similar utiliz!rii diferitelor tipuri de paranteze ori
semne de punctua#ie; de exemplu, n Pascal comentariile sunt specificate ntre acolade {},
n Fortran indicii de tablouri sunt insera#i ntre (), n C sec#iunile de nceput "i de sfr"it de
bloc de instruc#iuni se scriu ntre {}, iar n limbajul natural folosim ghilimelele pentru a
delimita un citat). n SGML se utilizeaz! <element> pentru a specifica un tag de nceput
"i </element> pentru un tag de sfr"it, unde element este numele unui element
oarecare.
Exemplu:
<p>
Cum zice "i fratele nostru Che Guevara
n nsemn!rile sale ce
acuma cetesc la opai#:
<quote>Pantofarul musai pantofi s! fac!,
iar revolu#ionarul, revolu#ii</quote>.
</p>
(Mircea C#rt#rescu - "Levantul")
unde <p> "i <quote> denot! nceput de paragraf, respectiv de citat, iar </p> "i
</quote> semnaleaz! sfr"itul unui paragraf, respectiv citat.
Modele
Un element poate fi vid (nu con#ine nimic ntre tag-urile de nceput "i sfr"it) sau poate
con#ine un text ori alte elemente. Mai multe elemente de acela"i tip pot fi imbricate
(a"a cum am v!zut mai sus).
Astfel, rela#iile dintre elementele SGML pot fi v!zute n termeni de:
secven#!
apari#ie
ierarhie
grupare
incluziune
Pentru a ilustra mai detaliat acest aspect, consider!m un model structural foarte simplu.
Presupunem c! dorim s! identific!m o antologie printr-o succesiune de poeme, titlurile lor,
versurile din care sunt compuse. n termenii SGML, antologie reprezint! un tip de
document "i este compus! dintr-o serie de poeme. Fiecare poem ncapsuleaz! un element
titlu (unic) "i cteva apari#ii de elemente strof!, fiecare strof! con#innd un num!r de
elemente vers. Astfel avem:
B-5
Tehnologii Web
<antologie>
<poem><titlu>...
<strof!>
<vers>...
<vers>...
...
</strof!>
<poem>
...
<!-- mai multe poeme... (acesta e un comentariu) -->
</antologie>
B-6
Tehnologii Web
antologie
poem
titlu
strof!
vers
0
0
0
(poem+)>
(titlu?, strof!+)>
(#PCDATA)>
(vers+)>
(#PCDATA)>
semnul asterisc ("*") elementul poate apare de zero, unu sau mai multe ori;
B-7
Tehnologii Web
Conectori
Un model-con#inut poate cuprinde mai multe componente ntr-o anumit! ordine dictat!
de un conector. n exemplul nostru s-a utilizat virgula. Conectorii pot fi:
virgula (",") componentele trebuie s! apar! obligatoriu n ordinea
specificat!;
Dac! la definirea elementului poem am fi pus "&" n loc de virgul!, atunci titlul ar fi
putut fi scris la sfr"itul poeziei, dup! strofe.
Observa"ii
1.
antologie (simbol de start) care are ca fiu poem, iar poem are drept fii
elementele titlu "i strof! "i a"a mai departe.
Un catren este compus din patru versuri, fiecare vers con#innd oricare "ir de
caractere (clauza #PCDATA).
Mai complex, s! presupunem c! n cadrul unui poem apare "i un refren care
poate fi prezent doar la nceputul unui poem ori ca o ad!ugire op#ional! dup!
fiecare strof!:
<!ELEMENT refren
<!ELEMENT poem
- - (#PCDATA | vers+)>
- 0 (titlu?,
((vers+) | (refren?, (strof!, refren?)+)))>
Excep"ii
SGML permite ca orice model-con#inut s! fie modificat prin intermediul unei liste de
excep"ii. Excep#iile pot fi:
includeri
excluderi
fi
B-8
incluse
cadrul
modelului
curent
Tehnologii Web
Cnd includerile "i excluderile privesc acela"i element, excluderile sunt prioritare
(conform standardului ISO 8879).
Revenind la tipul de document program, n corpul unui program nu pot apare declara#ii
de constante sau de variabile:
<!ELEMENT (vardecl|constdecl) - - (#PCDATA)>
<!ELEMENT prog
- (titlu?, ((vardecl? | constdecl? | procdecl?), corp)>
- - (#PCDATA)>
- - (instruc#iune*) - (vardecl | constdecl)>
Corpul poate con#ine mai multe instruc#iuni (posibil nici una), dar nu poate include
declara#ii de variabile sau de constante.
Structuri concurente
Toate structurile discutate pn! acum au avut o ierarhie simpl!, la fiecare nivel al
arborelui fiecare nod apar#innd unui nod p!rinte.
Urm!rim n continuare s! pagin!m antologiile create. Declararea unei pagini este simpl!:
<!ELEMENT pag
- - ((titlu?, vers+)+)>
Totu"i, o inserare a elementului pag n ierarhia definit! pn! n prezent nu este chiar att
de facil!. Anumite poeme pot fi mai lungi dect o singur! pagin! (s! ne gndim la
"Luceaf!rul" eminescian), pe cnd alte pagini pot con#ine mai multe poeme. De asemeni,
nu putem insera <pag> ntre <antologie> "i <poem> "i nici ntre <poem> "i
<strof!>. Este necesar! o facilitate de a putea defini o ierarhie separat!, cu acelea"i
elemente la baza ei (strofe, versuri "i titluri), dar combinate ntr-o suprastructur! diferit!.
Pentru fiecare arbore de ierarhie vom scrie o defini#ie DTD diferit!:
<!DOCTYPE
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
]>
antologie [
antologie
poem
strof!
(titlu|vers)
0
0
(poem+)>
(titlu?, strof!+)>
(vers+)>
(#PCDATA)>
antologpag [
antologpag
pag
(titlu|vers)
- - (pag+)>
- - ((titlu?, vers+)+)>
- 0 (#PCDATA)>
Avem astfel dou! metode diferite de a explora acela"i text de baz! (fie consider!m
grupuri de strofe "i poeme, fie grupuri de versuri sau titluri). Acela"i text este vizibil din
ambele direc#ii, difer! doar aranjamentul.
B-9
Tehnologii Web
Este necesar s! indic!m c!rei ierarhii apar#ine fiecare element. Aceasta se realizeaz!
incluznd numele tipului de document ntre paranteze imediat nainte de un identificator,
n cadrul tag-urilor de nceput "i de sfr"it: paginile vizibile doar n documente de tip
antologpag trebuie marcate cu <(antologpag)pag> "i </(antologpag)pag>.
Similar, poemele "i strofele apar doar n tipul antologie, deci avem construc#ii ca:
<(antologie)poem> sau <(antologie)strof!>.
n prezent, concuren#a este op#ional! "i nu toate analizoarele SGML sunt obligate
s! o suporte.
Atribute
n contextul SGML, un atribut este utilizat cu scopul de a descrie o anumit! proprietate
a unei apari#ii specifice (particulare) a unui element. De exemplu, un paragraf poate accepta
ca atribut op#ional modul de aliniere (la stnga, la dreapta sau centrat), iar alinierea nu se
realizeaz! dect pentru paragraful n cauz! "i nu are efect la celelalte paragrafe
(context local).
Atributele vor apare doar n cadrul tag-ului de start "i nu n tag-ul de sfr"it
(ar fi redundant).
Un exemplu:
<prog id=P1 stare="n_lucru" versiune="1.0">
...
</prog>
Elementul <prog> are definite trei atribute: un identificator, o stare "i o versiune.
Un procesor SGML poate folosi valorile atributelor pentru anumite ac#iuni specifice.
De pild!, un compilator nu va compila dect programele care au versiunea mai mare de 2.0
"i va activa depanatorul dac! stare are valoarea "depanare" sau va realiza optimiz!ri de
cod n cazul n care stare="definitiv". Identificatorul este folosit uzual pentru o
identificare unic! a fiec!rui element definit n SGML.
Ca "i elementele, atributele se declar! n DTD, folosindu-se o sintax! similar!. Pentru
exemplul de mai sus avem:
<!ATTLIST prog
id
ID
#IMPLIED
stare
(n_lucru|depanare|definitiv) n_lucru
>
CDATA orice "ir de caractere valide (pot fi incluse "i tag-uri, dar ele nu vor
fi recunoscute de parserul SGML)
B - 10
Tehnologii Web
A treia parte a defini#iei unui atribut specific! modul de interpretare a absen#ei atributului
respectiv. Pot fi utilizate "i aici o serie de cuvinte cheie predefinite:
Entit#"i
SGML posed! o metod! flexibil! "i facil! de codificare "i referen#iere a diferitelor p!r#i
ale con#inutului unui document, ntr-un mod portabil. Cuvntul entitate are un sens
special: nseamn! o parte de text care are asignat un nume (o entitate poate fi un "ir de
caractere ori con#inutul unui fi"ier text).
<!ENTITY pg "Pagina Facult!#ii de Informatic!">
Se define"te o entitate cu numele pg "i a c!rei valoare este "irul "Pagina Faculta#ii de
Informatic!".
O entitate sistem se declar! astfel:
<!ENTITY CapDoi SYSTEM "sgml.txt">
Tehnologii Web
entit!#ile parametru sunt delimitate de caracterele "%" "i ";" n loc de "&" "i
SGML;
";".
Declararea entit!#ilor parametru are aceea"i form! ca "i cea a entit!#ilor generale, dar
ntre cuvntul cheie ENTITY, procent "i numele entit!#ii trebuie s! apar! obligatoriu spa#ii
albe.
Exemple:
<!ENTITY % doc.prose 'INCLUDE'>
<!ENTITY % doc.extens SYSTEM 'doc.dtd'>
<!ENTITY % bloc "deal | ora" | fluviu">
<!ELEMENT (%bloc;) - O (#PCDATA)>
<!ATTLIST (%bloc;)
tip
CDATA
#REQUIRED
>
Anumite entit!#i pot fi publice, n general nregistrate de ISO sau alte organiza#ii:
<!ENTITY %ISOpub PUBLIC "ISO 8879-1986//ENTITIES Publishing//EN">
<!ENTITY %IBMchars PUBLIC "+//IBM//ENTITIES IBM PC Character Set//EN">
Marca "+//" semnific! faptul c! entitatea sau resursa folosit! este nregistrat!.
Entit!#ile nenregistrate au "-//" n componen#!.
Sec"iuni de marcare
Ocazional, anumite p!r#i ale documentului necesit! un tratament special din partea
parserului SGML, prin intermediul cuvintelor cheie de mai jos:
INCLUDE sec#iunea marcat! cu acest specificator va fi inclus! n
document "i procesat! normal;
Un exemplu:
n anumite cazuri, procentul de calculatoare performante
poate ajunge pn! la 90%.
<![ IGNORE [
n anii 1990, situa#ia s-a schimbat.
]]>
B - 12
Tehnologii Web
elementelor);
CAPACITY
SCOPE
SYNTAX
SGMLREF
TOTALCAP
GRPCAP
ENTCAP
150000
150000
150000
DOCUMENT
BASESET
"ISO 646IRV:1991//CHARSET
B - 13
Tehnologii Web
DESCSET
FUNCTION
RE
RS
SPACE
TAB SEPCHAR
NAMING
DELIM
NAMES
13
10
32
9
LCNMSTRT
UCNMSTRT
LCNMCHAR
UCNMCHAR
NAMECASE
""
""
".-_:"
".-_:"
GENERAL YES
ENTITY NO
GENERAL SGMLREF
SHORTREF SGMLREF
SGMLREF
FEATURES
MINIMIZE
DATATAG NO
OMITTAG YES
RANK
NO
SHORTTAG YES
LINK
SIMPLE
NO
IMPLICIT NO
EXPLICIT NO
OTHER
CONCUR
NO
SUBDOC
NO
FORMAL
YES
APPINFO NONE
>
B - 14
Tehnologii Web
ELVIS Sehgeschedigte
Elektronisches
Literaturverzeichnis-Informatik
OpenTag Initiative
fr
B - 15
Tehnologii Web
B. Aplica"ii
Analizoare
SP: James Clark's New SGML Parser Toolkit (disponibil
pentru DOS "i Windows)
Editoare/vizualizatoare
SGML
Convertoare SGML
Utilitare de formatare
format - pachet de formatare a documentelor SGML n
LaTeX, scris de Thomas Gordon
B - 16
Tehnologii Web
B - 17
Tehnologii Web
conceput
pentru
descrierea
leg!turilor
dintre
B - 18
Tehnologii Web
2.
3.
Metalimbaj
portabilitate
poate
Documentele pot s! se conformeze specifica#iei, dar nu trebuie s! se
comporte conform descrierii ac#iunii din specifica#ie.
trebuie
Documentele trebuie s! se comporte conform descrierii altfel se va semnala
eroare.
B - 19
Tehnologii Web
eroare
O nc!lcare a unor reguli din specifica#ie. Un procesor XML poate ignora
aceste erori.
eroare fatal#
O violare a unor reguli din specifica#ie. Dup! ntlnirea unei astfel de erori,
procesorul poate continua c!utarea unor astfel de erori "i poate s! le raporteze
aplica#iei. Dup! descoperirea unei erori fatale este recomandat ca procesorul
s! nu mai continue procesarea normal!.
constrngere de validitate
O regul! care se aplic! tuturor documentelor XML valide. nc!lcarea
acestor constrngeri de validitate reprezint! eroare "i trebuie, la cererea
utilizatorului, s! fie raportate de c!tre procesoarele XML care realizeaz!
valid!ri.
potrivire
Dou! "iruri de numere care sunt comparate trebuie s! fie identice.
La cererea utilizatorului, procesoarele pot normaliza anumite caractere la
anumite forme canonice.
pentru compatibilitate
O facilitate XML inclus! doar pentru a asigura faptul c! XML-ul r!mne
compatibil cu SGML-ul.
pentru interoperabilitate
O recomandare inclus! pentru a cre"te "ansele ca documentele XML
s! poat! fi procesate de procesoarele SGML existente.
Reprezentarea documentelor
Un document XML este format din marcaje "i date caracter. Un marcaj este un "ir de
caractere delimitat de caracterul "<" la nceput "i de caracterul ">" la sfr"it. Modul de
definire a marcajelor n XML este asem!n!tor celui din SGML.
n XML marcajele nu sunt folosite pentru afi"area textelor "i imaginilor sau a altor
elemente, ci sunt utilizate pentru a pune n eviden#! (semi-)structura anumitor date.
Astfel, un fragment de document XML valid poate fi:
<ecua#ie>
<titlu>Ecua#ia de gradul 1</titlu>
<coeficient grad = "1">7</coeficient>
<coeficient grad = "0">4</coeficient>
</ecua#ie>
B - 20
Tehnologii Web
Sec"iunile CDATA
Sec#iunile CDATA pot fi scrise oriunde pot apare "i datele de tip caracter (n exemplul de
mai sus "Ecua#ia de gradul 1"). Ele sunt utilizate pentru a include blocuri de text con#innd
caractere care altfel ar fi recunoscute ca marcaje. Sec#iunile CDATA ncep cu "irul
"<![CDATA[" "i se termin! cu simbolurile "]]>".
n interiorul sec#iunilor CDATA nu trebuie s! apar! "irul "]]" f!r! s! fie urmat de ">".
Sec#iunile CDATA nu pot fi incluse unele n altele.
Exemple corecte:
<![CDATA[
Aceasta este o sec#iune CDATA
]]>
<![CDATA[
<marcaj>text</marcaj>
]]>
Exemple gre"ite:
<![CDATA[[
text text
]]
text
]]>
<![CDATA[[
text
<![CDATA[
text
]]>
text
]]>
Declara"ia XML
Documentele XML pot "i ar trebui s! nceap! cu o declara#ie XML care specific!
versiunea limbajului XML utilizat. Declara#ia XML ncepe cu "<?xml" "i se termin! cu
caracterele "?>". n cazul n care exist! n document declara#ia XML, aceasta trebuie s! fie
primul element al documentului. Declara#ia nu poate fi precedat! de nici un alt element "i
trebuie s! fie unic!. Exist! trei atribute care pot apare n declara#ia XML:
version
Reprezint! una dintre versiunile curente ale XML. Versiunea actual! 1.0 este
singura de pn! acum "i deci declara#ia trebuie s! arate astfel:
<?xml version="1.0" ?>.
Orice alt! versiune specificat! nu exist! "i folosirea ei genereaz! eroare.
n XML este interzis! utilizarea unuia sau mai multor spa#ii ntre caracterul de
nceput al tag-ului "i numele tag-ului.
Documentele n a c!ror declara#ie exist! specificat! versiunea trebuie s! se
conformeze acestei versiuni, altfel procesoarele XML vor genera eroare.
Conformarea cu versiunea specificat! nseamn! utilizarea construc#iilor
B - 21
Tehnologii Web
definite n acea versiune sau n versiunile precedente, dar numai n cazul cnd
este specificat acest lucru.
encoding
n XML num!rul de spa#ii dintre atribute sau diferite date caracter nu are
nici o importan#!, spa#iile fiind eviden#iate doar n cazul unei specifica#ii
speciale a utilizatorului.
standalone
Atributul poate lua valorile "yes" sau "no". n documentele XML pot exista
anumite referin#e spre alte documente care s! con#in! defini#ii ale unor
marcaje, atribute sau entit!#i din document. Cnd valoarea este "yes" atunci nu
trebuie s! existe referin#e spre alte documente. Dac! valoarea este "no" atunci
este posibil s! existe referin#e spre alte documente, dar dac! nu exist! atunci
folosirea atributului nu are sens. Implicit se consider! c! un document n a
c!rui declara#ie nu este specificat atributul standalone nu con#ine referin#e
externe.
Definirea tipului de document
Ca "i n cazul SGML, tipul unui document XML reprezint! modul n care vor fi
specificate informa#iile n acel document. Acest lucru se realizeaz! prin intermediul DTDului (Document Type Definition), iar acest DTD poate fi intern sau extern.
Documentele XML pot avea un DTD sau DTD-ul poate lipsi. Dac! exist! un DTD
intern sau extern, atunci autorul documentului trebuie s! se conformeze acestui DTD,
iar n cazul n care lipsesc ambele, atunci utilizatorul poate construi documente respectnd
un num!r minim de constrngeri.
DTD-ul intern se declar! imediat dup! declara#ia XML sau, dac! aceast! declara#ie nu
exist!, el va fi primul element exceptnd comentariile, spa#iile sau instruc#iunile de
procesare. DTD-ul intern se declar! utiliznd cuvntul cheie DOCTYPE n modul urm!tor:
<!DOCTYPE element_r!d!cin! [
declara#ie de elemente
declara#ie de atribute
declara#ie de entit!#i
declara#ie de instruc#iuni de procesare
declara#ie de nota#ii
]>
B - 22
Tehnologii Web
La fel ca la SGML, elementul r!d!cin! reprezint! primul tag din mul#imea tagurilor
definite de utilizator. El poate apare o singur! dat! n document "i nu trebuie s! se afle n
interiorul altui tag. El trebuie s! existe indiferent dac! exist! specificat un DTD sau nu.
Altfel spus, orice document trebuie s! con#in! un element r!d!cin! care satisface
constrngerile de mai sus.
DTD-ul extern este definit ntr-un alt fi"ier text care trebuie s! se afle la o adres!
specificat!. Declara#ia este asem!n!toare, dar intervin cuvintele cheie SYSTEM sau PUBLIC:
<!DOCTYPE cursuri
SYSTEM "http://www.infoiasi.ro/cursuri.dtd">
<!DOCTYPE cursuri
PUBLIC "cursuri" "http://www.infoiasi.ro/cursuri.dtd">
Elementele
n XML (ca "i n SGML) elementele se definesc folosind construc#ia <!ELEMENT.
Este interzis! apari#ia a unuia sau mai multor spa#ii ntre delimitatorul "<!" "i cuvntul
cheie ELEMENT. Prin marcaj vom n#elege acela"i lucru ca "i prin element.
n XML fiecare marcaj trebuie s! fie urmat de un marcaj de sfr"it. Dac! nu se ntmpl!
acest lucru, atunci se semnaleaz! eroare "i documentul nu va fi afi"at. Textul care urmeaz!
unui marcaj nu trebuie s! con#in! caracterele "<" "i ">" deoarece acestea sunt rezervate.
Un element n XML poate fi definit n mai multe maniere:
Elemente vide
Definirea elementului vid se realizeaz! utiliznd cuvntul cheie EMPTY:
B - 23
Tehnologii Web
<img></img>
<img />
Elemente ANY
Elementele ANY sunt elemente care pot avea orice con#inut:
Acest mod de definire este util atunci cnd scriem DTD-ul unui document
"i nc! nu cunoa"tem care va fi con#inutul acelui element. Un element definit
astfel poate poseda oricte atribute, poate fi de tip #PCDATA sau poate
fi element vid. Acest element este asem!n!tor unei clase abstracte care va fi
ulterior definit!.
Tehnologii Web
Dac! un element con#ine n defini#ia sa copii, atunci trebuie defini#i "i copiii
(ace"ti copii pot fi de orice tip). Num!rul spa#iilor din defini#ie poate fi orict
de mare, dar procesoarele nu vor recunoa"te dect unul singur, exact ca la
HTML. n cazul n care un copil este urmat de unul dintre caracterele
"?", "*" sau "+", atunci ntre copil "i caracter nu poate fi folosit spa#iul.
Atributele
n XML (ca "i n SGML) atributele unui element se declar! utiliznd cuvntul cheie
ATTLIST. Nu trebuie s! existe spa#ii ntre <! "i ATTLIST. Dac! exist! dou! declara#ii ale
aceluia"i atribut, atunci prima declara#ie este luat! n considerare, iar celelalte sunt ignorate.
Mul#imea tipurilor de atributele n XML este aceea"i cu cea din SGML, iar pentru
specificarea modului de apari#ie a atributelor se folosesc cuvintele cheie #REQUIRED
(apari#ie obligatorie), #IMPLIED (apari#ie op#ional!), #FIXED (apari#ie op#ional!,
dar atunci cnd apare, valoarea atributului trebuie s! fie cea specificat! n cadrul DTD-ului).
Exist! predefinite o serie de atribute pentru a specifica regulile spa#iilor albe "i identificarea
limbii n care se scrie un anumit document sau fragment de document XML.
Regula spa"iilor albe
n editarea documentelor, este uneori necesar! apari#ia "spa#iilor albe" (spa#ii, tab-uri,
linii vide). Anumite spa#ii albe nu trebuie incluse n versiunea final! a documentului,
pe cnd altele sunt obligatorii (de exemplu, n codul surs! sau n cazul produc#iilor lirice).
Un atribut special xml:space poate fi inserat n documente pentru a specifica faptul c!,
n cadrul elementului n care apare acest atribut, spa#iile albe s! fie tratate n mod
semnificativ. Valorile acestuia pot fi "default" sau "preserve".
<!ATTLIST poem xml:space (default|preserve) 'preserve'>
Identificarea limbajului
Atributul special xml:lang poate fi inclus n documente pentru a defini limbajul utilizat
n con#inutul elementelor "i valorilor atributelor unui element. Un exemplu:
B - 25
Tehnologii Web
Entit#"i
Entit!#ile sunt utilizate pentru scrierea unor documente de lungimi mai scurte "i pentru
rapiditatea redact!rii documentelor. Entit!#ile se clasific! n dou! tipuri: entit!#i generale "i
entit!#i cu parametri. Entit!#ile generale se mpart la rndul lor n entit!#i interne analizate,
entit!#i externe analizate "i entit!#i externe neanalizate.
Ca "i n SGML, entit!#ile sunt definite prin construc#ia <!ENTITY.
B - 26
Tehnologii Web
Entit!"i predefinite
n XML exist! anumite caractere care nu trebuie s! apar! n forma lor
normal! n anumite locuri din text. Totu"i, pentru a le putea specifica se
folosesc entit!#ile predefinite din XML care refer! aceste caractere.
Aceste entit!#i sunt similare entit!#ilor predefinite din SGML.
Nota"ii
Nota#iile se utilizeaz! pentru a identifica formatul entit!#ilor neanalizate, a elementelor n
care apar referin#e spre nota#ii sau pentru a specifica anumite instruc#iuni de procesare.
Modurile de definire a nota#iilor sunt urm!toarele :
<!NOTATION nume SYSTEM "adres!">
<!NOTATION nume PUBLIC "generare">
<!NOTATION nume PUBLIC "generare" "adres!">
Nota#iile trebuie s! con#in! n defini#ie unul dintre cuvintele cheie SYSTEM sau PUBLIC.
Sensul lor este acela"i cu cel al entit!#ii lor "i genereaz! acelea"i lucruri. "adres!"
reprezint! adresa la care se afl! defini#ia nota#iei sau efectiv valoarea nota#iei. "generare"
specific! un fi"ier care va fi generat "i care va con#ine defini#ia nota#iei.
Utilizarea elementelor XML
Un document XML poate con#ine o declara#ie XML, o declara#ie a tipului de document
"i o mul#ime de marcaje care au fost definite n DTD.
B - 27
Tehnologii Web
Iat! un exemplu gre"it (elementul carte trebuie s! con#in! "i tag-ul de sfr"it al
elementului capitol):
<carte>
<capitol>Un capitol de carte
</carte>
</capitol>
Dac! documentul con#ine DTD-ul, atunci elementele se vor conforma descrierii formale
din DTD. Elementele definite n DTD pot avea atribute noi, nedefinite, care pot fi de orice
tip, dar cele definite trebuie s! respecte defini#ia. De asemeni, pot apare, f!r! a fi definite,
elemente noi cu atributele lor aferente. Celelalte constrngeri au fost eviden#iate n
sec#iunile dedicate elementelor, atributelor, entit!#ilor "i nota#iilor.
Astfel, structura general! a unui document XML poate fi urm!rit! n urm!toarea figur!:
B - 28
Tehnologii Web
Prolog
Comentarii
Instruc#iuni de procesare
Comentarii
Instruc#iuni de procesare
Declara#ii
Elemente
Atribute
Entit!#i
Nota#ii
Element r!d!cin!
Comentarii
Instruc#iuni de procesare
Elemente
Atribute
PCDATA
Referin#e la entit!#i
Referin#e la entit!#i
Sec#iuni CDATA
Analizoarele XML actuale (Expat, XJParser, IBM XML Parser for Java, Netscape 6 sau
ulterior, Internet Explorer 5 sau ulterior etc.), pot descoperi cele mai frecvente gre"eli
sintactice, conform specificatiei XML 1.0. n figura urm!toare se poate observa semnalarea
unei erori de definire a unui element, n urma analizei unui document folosind aplica#ia
vizuala XML Editor scris! de absolventul Eduard Schmidt.
B - 29
Tehnologii Web
ntr-un alt document XML se vor memora persoanele care au mprumutat anumite c!r#i:
<student>
<!-- Date despre student -->
<name>%tefan Tanas!</name>
<year>4</year>
B - 30
Tehnologii Web
Pentru un cititor uman este clar faptul c! elementul <year> din primul document se
refer! la anul apari#iei c!r#ii, iar <year> din cel de-al doilea document semnific! anul de
studiu n care se afl! studentul care a mprumutat c!r#i de la bibliotec!.
n vederea evit!rii ambiguit!#ilor de procesare, se asociaz! un vocabular, denumit
spa"iu de nume (namespace), pentru elementele n cauz!.
Astfel anii acum pot fi scri"i n modul urm!tor:
<BookInfo:year>1998</BookInfo:year>
<!-- Apar#ine spa#iului de nume "BookInfo" -->
<StudInfo:year>4</StudInfo:year>
<!-- Apar#ine spa#iului de nume "StudInfo" -->
Aceasta permite ca n cadrul aceluia"i document XML s! apar! ambele informa#ii (anul
apari#iei "i anul de studiu) f!r! a se na"te ambiguit!#i, iar validarea se poate realiza
f!r! probleme.
Declararea spa"iilor de nume
Spa#iile de nume se declar! fie implicit (un spa#iu de nume pentru toate elementele
domeniului lui de vizibilitate) sau explicit (ca prefix ori substitut pentru numele complet al
unui spa#iu de nume).
Un exemplu de declarare implicit!:
<library>
<!-- Lista c!r#ilor din bibliotec! -->
<book xmlns="urn:infoiasi.ro:BookInfo" ident="1">
<title>...</title>
<year>...</year>
...
</book>
...
<!-- Totalul general -->
<total>107400</total>
</library>
Elementele <book>, <title> "i <year> "i atributul ident fac parte din spa#iul de
nume "BookInfo" accesibil la adresa dat! de URN-ul (Uniform Resourse Name)
infoiasi.ro. Atributul xmlns este cuvnt-cheie XML "i specific! un spa#iu de nume
care n cazul nostru va fi vizibil pn! la tag-ul de sfr"it </book>. To#i descenden#ii
necalifica#i ai lui <book> se consider! apar#innd spa#iului de nume "BookInfo".
Elementul <total> nu face parte din spa#iul de nume "BookInfo".
n urm!torul exemplu se declar! "b" ca abreviere pentru numele complet al spa#iului de
nume "BookInfo". Toate elementele "i atributele prefixate cu "b" vor fi considerate ca
apar#innd spa#iului de nume "BookInfo".
B - 31
Tehnologii Web
Sunt declarate mai multe spa#ii de nume. Elementul <name> de"i nu este calificat,
apar#ine lui "s" deoarece se afl! n domeniul de vizibilitate al acestuia, iar "b" nu con#ine
vreun element cu acest nume. Elementele <h2> "i <i> apar#in spa#iului de nume specificat
de Consortiul Web n recomandarea HTML 4.0 "i pot fi utilizate la formatarea descrierii
c!r#ii respective.
B - 32
Tehnologii Web
XLink
define"te
un
spa#iu
de
nume
special
dat
de
URI-ul
acestui spa#iu de nume, utilizatorul de fapt realiznd o instan#iere a unor elemente "i
atribute XLink, similar tehnicilor din programarea obiectual!.
No#iunile folosite n cadrul acestei sec#iuni sunt:
Traversarea nseamn! utilizarea sau urmarea unei leg!turi, implicnd
ntotdeauna o pereche de resurse sau fragmente de resurse.
Caracterizare
n XLink se pot specifica urm!toarele dou! tipuri de leg!turi:
O leg!tur! extins! poate con#ine o mixtur! de tipuri de elemente XLink, n orice ordine,
dintre cele descrise n continuare:
leg!turii;
descrie leg!tura);
leg!turii.
Interdependen#a dintre tipurile de elemente XLink este ilustrat! n tabelul de mai jos:
Tip element p#rinte Tipuri de elemente copil care pot apare
simple
extended
locator
title
arc
title
resource
title
B - 33
Tehnologii Web
Exemplu
Presupunem c! printr-o leg!tur! extins! vom "lega" diferite resurse con#innd
informa#iile despre cursurile urmate de un anumit student, profesorii care predau aceste
cursuri, despre datele personale ale studentului etc.
Astfel, putem scrie urm!torul DTD:
<!-- cursurile urmate de un student -->
<!ELEMENT courses ((desc | pers | crs | gr | go)*)>
<!ATTLIST courses
-- atributele cursurilor -xmlns:xlink
CDATA
#FIXED "http://www.w3.org/1999/xlink"
-- obligatoriu -xlink:type
(extended)
#FIXED "extended"
-- leg!tur! extins! -xlink:role
CDATA
#IMPLIED
xlink:title
CDATA
#IMPLIED
>
<!-- descrierea cursurilor -->
<!ELEMENT desc
ANY>
<!ATTLIST desc
xlink:type
(title)
#FIXED "title"
xml:lang CDATA
#IMPLIED
>
<!-- informa#ii despre o persoan! (student, profesor) -->
<!ELEMENT pers
EMPTY>
<!ATTLIST pers
xlink:type
(locator)
#FIXED" "locator"
xlink:href
CDATA
#REQUIRED -- URI-ul resursei -xlink:role
CDATA
#IMPLIED
xlink:title
CDATA
#IMPLIED
xlink:label
NMTOKEN
#IMPLIED -- eticheta resursei ->
<!-- informa#ii despre un curs -->
<!ELEMENT crs
EMPTY>
<!ATTLIST crs
xlink:type
(locator)
#FIXED" "locator"
xlink:href
CDATA
#REQUIRED -- URI-ul resursei -xlink:role
CDATA
#FIXED
"http://www.infoiasi.ro/link/courses"
xlink:title
CDATA
#IMPLIED
xlink:label
NMTOKEN
#IMPLIED -- eticheta resursei ->
<!-- informa#ii despre o grup! de studiu -->
<!ELEMENT gr EMPTY>
<!ATTLIST gr
xlink:type
(locator)
#FIXED" "locator"
xlink:href
CDATA
#REQUIRED -- URI-ul resursei -xlink:role
CDATA
#FIXED "http://www.infoiasi.ro/link/years"
xlink:title
CDATA
#IMPLIED
xlink:label
NMTOKEN
#IMPLIED -- eticheta resursei ->
<!-- element de traversare a leg!turii -->
<!ELEMENT go EMPTY>
<!ATTLIST go
xlink:type
(arc)
#FIXED" "arc"
xlink:arcrole CDATA
#IMPLIED
xlink:title
CDATA
#IMPLIED
B - 34
Tehnologii Web
xlink:show
( new -- modul de afi"are a resursei -| replace
| embed
| other
| none)
#IMPLIED
xlink:actuate ( onLoad
| onRequest
| other
| none)
#IMPLIED
-- evenimentul activ!rii leg. -xlink:from
NMTOKEN
#IMPLIED -- sursa -xlink:to
NMTOKEN
#IMPLIED -- destina#ia ->
B - 35
Tehnologii Web
type
Identific! tipul elementelor XLink "i este obligatoriu, valorile permise fiind
"simple", "extended", "locator", "arc", "resource", "title" sau
"none".
De exemplu, o leg!tur! simpl! va fi definit! n maniera:
<!ATTLIST xlink:simple
xlink:type (simple)
>
#FIXED "simple"
href
Leg#turi simple
O leg!tur! simpl! poate fi reprezentat! prin intermediul unei leg!turi extinse, combinnd
func#iile de baz! ale elementelor de tip extended, locator, arc "i resource.
Iat! un exemplu:
B - 36
Tehnologii Web
<studentlink xlink:type="extended">
<resource xlink:type="resource" xlink:label="local">
%tefan Tanas!
</resource>
<locator xlink:type="locator"
xlink:href="http://students.infoiasi.ro/~stanasa"
xlink:label="remote"
xlink:role="..."
xlink:title="Studentul" />
<go xlink:type="arc"
xlink:from="local"
xlink:to="remote"
xlink:arcrole="..."
xlink:show="replace"
xlink:actuate="onRequest" />
</studentlink>
Dac! pentru atributul show aveam valoarea "new", atunci n HTML foloseam:
<a href="http://students.infoiasi.ro/~stanasa"
target="_blank">
%tefan T!nas!
</a>
B - 37
Tehnologii Web
XSL se bazeaz! pe DSSSL (Document Style Semantics and Specification Language), standard
interna#ional pentru definirea foilor de stiluri (ISO/IEC 10179:1996). XSL ofer!
urm!toarele:
Fiecare foaie de stiluri XSL const!, simplist vorbind, din reguli compuse dintr-un model
(pattern) "i o ac"iune, modelul identificnd un element sau grup de elemente XML asupra
c!ruia se va aplica ac#iunea. Modelul poate specifica toate elementele de un anumit tip,
toate elementele dintr-un subarbore de noduri XML, toate elementele avnd un anume
atribut specificat etc. Expresiile modelului sunt scrise ntr-un limbaj derivat din XML,
denumit XPath, iar ac#iunile (transform!rile efectuate asupra elementelor documentului)
sunt specificate n XSLT (XSL Transformations), ambele recomand!ri ale Consor#iului Web
ncepnd cu sfr"itul anului 1999. Expresiile vehiculate n cadrul XSL sunt inspirate din
ECMAScript, limbaj script standardizat de Asocia#ia European! a Produc!torilor de
Calculatoare care va fi prezentat n unul dintre capitolele viitoare ale acestui text.
Principiile de proiectare a limbajului XSL au fost cele legate de suportul pentru aplica#iile
de navigare, listare "i editare interactiv!, pentru prezent!ri vizuale "i non-vizuale de date,
de posibilitatea de extindere cu noi elemente "i declara#ii, de u"urin#a de parcurgere att din
punctul de vedere computa#ional, ct "i din punctul de vedere uman.
Desigur, specifica#ia XSLT este mult mai complex!, putndu-se realiza combinarea "i
includerea mai multor foi de stiluri pentru un acela"i document, conceperea unor "abloane
de reguli, procesarea condi#ionat! a elementelor XML, totul bazndu-se pe DOM
(Document Object Model), model obiectual descris ntr-unul dintre capitolele acestui material.
Procesorul XSL va aplica n mod recursiv transform!ri asupra tuturor nodurilor care
satisfac modelul sau "abloanele de reguli.
Pentru a putea observa flexibilitatea "i puterea XSL-ului, vom realiza pentru nceput o
foaie de stiluri XSL care dintr-un document XML (specificnd o lucrare "tiin#ific! sau un
articol) construie"te un document XHTML con#innd cuprinsul acestuia (n cuprins vor
apare doar numele capitolelor lucr!rii). A"adar, documentul XML ini#ial va avea forma:
<article>
<meta>
<title>Documente XML active</title>
<author email="busaco@infoiasi.ro">
Sabin-Corneliu Buraga
</author>
</meta>
<body>
<intro>...</intro>
<chapter>
<title>Documente active</title>
...
</chapter>
B - 38
Tehnologii Web
<chapter>
<title>Displet-uri</title>
...
</chapter>
<chapter>
<title>Concluzii</title>
...
</chapter>
</body>
</article>
Tag-ului <a> i se va ata"a atributul href a c!rui valoare va fi dat! de expresia XPath
article/meta/author/@email (se porne"te de la elementul r!d!cin! article pn!
se ntlne"te un nod descendent author "i se selecteaz! valoarea atributului email).
La fel, ntre <a> "i </a> se va include numele autorului.
Cuprinsul propriu-zis va fi o list! construit! astfel:
<ol id="cuprins">
<xsl:for-each select="article/body/chapter">
<li>
<h5 style="color:green">
<xsl:value-of select="title" />
</h5>
</li>
</xsl:for-each>
</ol>
Tehnologii Web
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
...
</xsl:stylesheet>
Cele mai uzuale elemente care pot compune o foaie de stiluri sunt cele din tabelul
de mai jos:
Element
Descriere
xsl:stylesheet
xsl:template
xsl:apply-templates
xsl:comment
xsl:pi
B - 40
Tehnologii Web
xsl:element
xsl:attribute
xsl:value-of
xsl:for-each
xsl:if
xsl:choose
xsl:otherwise
xsl:copy
Modele
Modelele folosite n cadrul foilor XSL vor fi specificate n limbajul XPath "i ele vor fi
contextuale, potrivirile de elemente sau atribute XML realizndu-se n func#ie de plasarea n
cadrul ierarhiei arborelui de noduri asociat unui document XML (mai multe am!nunte
despre arborii de noduri vom putea g!si n capitolul dedicat modelului DOM).
Sintaxa XPath este una declarativ!, putnd fi folosi#i operatorii descri"i n continuare:
Operator
Nume
Descriere
Exemplu
Descendent
Utilizat s! defineasc! o
ierarhie de elemente (o cale de
parcurgere a nodurilor din
arborele asociat documentului)
/
/article/meta
chapter/title
wildcard
/article/*
body/*/title
B - 41
Tehnologii Web
//
traversare
recursiv!
atribut
spa#iu de
nume
filtru/index
[]
Traverseaz! n adncime
//article
ntreg sub-arborele unui anumit //body
element
Utilizat s! specifice un anumit author/@email
table/@*
atribut particular
Folosit s! separe elementele
bazate pe spa#iul lor de nume
xsl:*
//namespace:*
table[tr]
author[@email="..."]
Aplic! un filtru sau localizeaz!
book[@title="Web"]/
elementele pe baza unui index
author[@age="33"]
ul/li[1]
selecteaz!
to#i
descenden#ii
(nodurile copil) care sunt elemente <paragraph> avnd valoarea "center"
pentru atributul align.
//rdf:* selecteaz! toate elementele apar#innd spa#iului de nume rdf din
Pentru filtre pot fi folosi#i operatorii logici, rela#ionali "i referitori la manipularea
mul#imilor de elemente, prezen#i n limbajele de programare obi"nuite (i.e. and, or, not, =,
!=, <, >, <=, >, $all$, $any$, | etc.).
Alte cteva exemple:
table/tr[@align="center" or @valign="top"]/* va selecta
elementele dintr-un <tr> avnd specificate atributele align="center" sau
valign="top" din cadrul unui <table>.
B - 42
Tehnologii Web
library/book
|
library/magazine
(echivalent!
cu
library/(book | magazine) va furniza toate elementele <book> "i
<magazine>, descenden#i ai elementului <library>.
Modelele utilizate de foile de stiluri pot fi informative (referitoare la tipul, numele "i
valoarea unui element/atribut, putnd fi folosite metode precum nodeName, nodeType,
index, end ori number) sau de grupare (returneaz! colec#ii de noduri de tipuri particulare:
text, textNode, element, attribute, comment etc.).
Obiecte de formatare
Formatarea diferitelor elemente n XSL urmeaz! modelul foilor de stiluri CSS, existnd o
multitudine de obiecte de formatare, fiecare dintre ele avnd o serie cuprinz!toare de
propriet!#i pentru a oferi proiectan#ilor un grad foarte mare de flexibilitate. Lista tuturor
propriet!#ilor poate fi consultat! n specifica#ia pentru XSL a Consor#iului Web.
Compara#ia cu foile de stiluri CSS - nivelele 1 "i 2 se poate parcurge n urm!toarea tabel!:
Caracteristica
XSL CSS
Comentarii
Utilizare cu HTML
nu
da
Suport pentru
scripting
da
da
Sintaxa bazat! pe
XML
da
nu
Afi"area de
informa#ii XML
da
da
da
Suport al
navigatoarelor
Transform!ri de
structur!
par#ial
da
B - 43
Tehnologii Web
Transform!ri
asupra con#inutului
Manipularea
datelor XML (c!utare,
filtrare, sortare)
da
da
B - 44
Tehnologii Web
n acest exemplu, elementul <author> va putea con#ine trei descenden#i: <phone> sau
<email> (nu pot apare ambele), apoi <firstname> "i <lastname>, n aceast! ordine.
Atributele se definesc asem!n!tor elementelor, dar nu pot con#ine sub-elemente "i
nu pot apare ntr-o anumit! ordine n componen#a unui marcator.
Ca "i la DTD, un atribut poate fi obligatoriu (required="yes" ntr-un
<AttributeType>) sau nu (required="no"). Valoarea implicit! se specific! prin
default (e.g. default="33").
Pentru definirea tipului de date se utilizeaz! fie tipurile primitive din specifica#ia XML
(de exemplu ID, NMTOKEN etc.), fie un spa#iu de nume definind tipurile de date permise.
n implementarea IE 5, n cadrul elementului <Schema> putem include atributele
xmlns="urn:schemas-microsoft-com:xml-data"
"i
xmlns:dt="urn:schemas-microsoft-com:datatypes" pentru a accesa o serie de
B - 45
Tehnologii Web
tipuri de baz!. Se observ! faptul c! lipsa lui xmlns="urn:schemas-microsoftcom:xml-data" duce la imposibilitatea valid!rii documentului de c!tre analizorul XML
inclus n IE 5.
Aceste tipuri de date pot fi specificate ntr-un <ElementType> sau
<AttributeType> n dou! moduri: prin atributul dt:type ori utiliznd elementul
<datatype>.
Astfel, linia urm!toare:
<ElementType name="figures" dt:type="int" />
ntre <year> "i </year> nu vor fi permise dect valorile "1", "2", "3" sau "4".
Astfel, construc#ia <year>7</year> va fi considerat! eronat!.
Pentru fiecare element se pot stabili, de asemeni, num!rul minim "i maxim de apari#ii ale
acestuia prin intermediul atributelor minOccurs "i maxOccurs, respectiv. Valorile valide
ale lui MaxOccurs pot fi numerele "i semnul "*" (semnific! orice cantitate, f!r! restric#ii).
n mod obi"nuit, valoarea implicit! a lui maxOccurs este 1, cu excep#ia cazului n care
content="mixed" cnd va fi 0. Aceste atribute se utilizeaz! n declara#iile <element>
"i <group>.
Putem fixa "i lungimea n caractere a valorilor con#inute de un atribut de tip "number",
"int" sau "string", prin minLength "i maxLength:
<AttributeType name="password"
xmlns="urn:schemas-microsoft-com:datatypes"
dt:type="string"
dt:minLength="5" dt:maxLength="8" />
B - 46
Tehnologii Web
Utilizarea schemelor
O schem! XML poate fi folosit! via declara#ia unui spa#iu de nume prin includerea URIului la care este definit! acea schem!. Acest lucru se realizeaz! cu ajutorul atributului
xmlns, prefixnd URI-ul schemei cu "irul x-schema.
Vom utiliza schema definit! n exemplul de mai sus pentru validarea urm!torului
document:
<book xmlns="x-schema:http://www.infoiasi.ro/schemas/book-schema.xml"
isbn="973-97706-3-0">
<title>Re#ele de calculatoare</title>
<author>Andrew S.Tanenbaum</author>
<description>Un best-seller clasic</description>
</book>
Dac! sunt specificate dou! scheme cu acela"i nume, prima schem! va fi utilizat! pentru
validarea documentului. Acest lucru ns! depinde de analizorul XML folosit.
n cadrul unui document pot apare construc#ii de elemente "i atribute care vor fi validate
utilizndu-se scheme multiple, identificarea schemelor realizndu-se de cele mai multe ori
prin spa#iile de nume.
Extinderea schemelor
Spre deosebire de DTD-uri, n XML Schema se pot extinde schemele n func#ie de
necesit!#ile proiectan#ilor documentelor XML care pot ad!uga propriile lor elemente "i
atribute. Am definit n unul dintre exemplele precedente elementul <figures> de tip
"int" stabilind num!rul de figuri (ilustra#ii) care apar ntr-o carte. Putem s! impunem ca
B - 47
Tehnologii Web
acest num!r s! nu dep!"easc! 50. Astfel, extindem schema BookSchema n maniera de mai
jos:
<ElementType name="figures" xmlns="urn:infoiasi.ro:ext-book-schema">
<datatype dt:type="int" />
<extb:max>50</extb:max>
</ElementType>
v.
Datorit! folosirii sintaxei XML, schemele pot fi mai u"or create, validate "i
procesate, prin intermediul modelului DOM.
Exemple de procesare !i validare a schemelor
1. Pentru definirea multipl! a unui element ntr-o schem! vom primi
urm!torul mesaj de eroare din partea analizorului XML inclus n browserul Internet
Explorer:
B - 48
Tehnologii Web
B - 49
Tehnologii Web
B - 50
Tehnologii Web
B - 51
Tehnologii Web
B - 52
Tehnologii Web
CanonXML
element
Stag
Etag
Pi
::=
::=
::=
::=
::=
[5] Atts
[6] Datachar
::=
::=
|
|
::=
::=
::=
[7] Name
[8] Char
[9] S
Regula [0] indic! faptul c! un document XML canonic poate ncepe "i se poate sf!r"i cu
un num!r de zero, una sau mai multe directive de procesare (Pi) "i poate con#ine m!car un
element, compus dintr-un tag de nceput "i dintr-un tag de sfr"it. ntre aceste tag-uri pot
exista date de tip caracter, alte directive de procesare sau elemente (regula [1]). Un tag de
nceput este prefixat de caracterul "<" urmat de un nume "i de o mul#ime (posibil vid!) de
atribute (conform regulilor [2] "i [5]). Un tag de sfr"it este prefixat de "/", urmat de numele
elementului "i de caracterul ">" (regula [3]). Instruc#iunile de procesare sunt specificate de
regula [4], iar atributele de regula [5]. Datele de tip caracter urmeaz! regula [6],
iar neterminalii Name, Char "i S sunt aceea"i din specifica#ia XML 1.0.
2.9 Viitor
Limbajul XML ofer! o metod! de comunicare inter-uman!, nu de interschimb de date
ntre ma"ini, realiznd rela#ii ntre creatori "i beneficiarii documentelor acestora.
XML mo"tene"te neutralitatea platformei, limbajului "i libertatea formatelor de date
prezente n SGML, dar prin XML Schema c"tig! n flexibilitatea specific!rii formale
a tipurilor "i modului de apari#ie a elementelor "i atributelor.
Nivelele XML
B - 53
Tehnologii Web
Toate aceste remarci ne dau certitudinea c! XML ofer! utilizatorilor un standard deschis
de marcare a informa#iilor, f!r! limite n ceea ce prive"te tehnicile de adnotare
(extensibilitate asigurat!), u"or de folosit (putnd conferi suport pentru baze de cuno"tin#e),
facil de implementat.
Viitorul XML nu va avea implica#ii doar asupra informaticienilor, ci "i asupra lumii
economice "i politice. Combina#ia XML cu XSL poate nlocui toate formatele de procesare
de texte "i publicare existente n prezent:
XML ofer! suport pentru c!utarea inteligent! "i eficient! a datelor pe Web;
Succesul XML poate fi ntrev!zut mai ales n lumea spa#iului Web, permi#nd crearea
de aplica#ii hipermedia complexe, dar "i n procesarea informa#iilor n general.
B - 54
Tehnologii Web
"Lucrurile nu sunt grele de f#cut, ceea ce este greu este s# fim n stare s# le facem."
(Constantin Brncu!i)
Tehnologii Web
C-2
Tehnologii Web
Toate elementele sunt de tip prezentare sau con#inut, exceptnd elementul <math> care
joac! rol de element de cel mai nalt nivel (r!d!cin!), fiind element de interfa"!. Scopul acestuia
este s! trimit! c!tre procesorul MathML parametrii care vor afecta ntreaga expresie "i
s! comunice vizualizatorului MathML cum s! afi"eze expresia.
<mrow>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>x</mi>
</mrow>
<mo>+</mo>
<mn>7</mn>
</mrow>
<mo>=</mo>
<mn>0</mn>
</mrow>
C-3
Tehnologii Web
<mo>±</mo>
<msqrt>
<mrow>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>-</mo>
<mrow>
<mn>4</mn>
<mo>⁢</mo>
<mi>a</mi>
<mo>⁢</mo>
<mi>c</mi>
</mrow>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢</mo>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
Se observ! c! s-a folosit o nou! entitate, PlusMinus, care refer! nota#ia uzual!
din matematic!.
Urm!torul exemplu va specifica o matrice patr!tic! de ordinul doi:
<mrow>
<mi>A</mi>
<mo>=</mo>
<mfenced open="[" close="]">
<mtable>
<mtr>
<mtd>
<mi>x</mi>
</mtd>
<mtd>
<mi>y</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mi>z</mi>
</mtd>
<mtd>
<mi>w</mi>
</mtd>
</mtr>
</mtable>
</mfenced>
</mrow>
C-4
Tehnologii Web
Acest mod de descriere este apropiat celui din limbajele de programare declarative
(folosind nota#ia polonez!) "i este mult mai u"or de procesat "i de analizat dect varianta
scris! cu ajutorul elementelor de prezentare. Se observ! c! nu este dificil s! descriem nota#ii
matematice utiliznd marcajele predefinite. Dup! cum era de a"teptat, elementele <ci> "i
<cn> sunt similare elementelor de prezentare <mi> "i <mn>, respectiv. Rolul marcatorului
<mo> este preluat de elementele de con#inut desemnnd operatorii matematici
(e.g. <plus>, <minus> sau <times>).
Pentru specificarea r!d!cinilor ecua#iei de gradul al doilea vom scrie urm!torul cod
MathML:
<reln>
<eq />
<ci>x</ci>
<apply>
<over />
<apply>
<fn occurrence="infix">
<mo>±</mo>
</fn>
<apply>
<minus />
<ci>b</ci>
</apply>
C-5
Tehnologii Web
<apply>
<root />
<apply>
<minus />
<apply>
<power />
<ci>b</ci>
<cn>2</cn>
</apply>
<apply>
<times />
<cn>4</cn>
<ci>a</ci>
<ci>c</ci>
<apply>
</apply>
<cn>2</cn>
</apply>
</apply>
<apply>
<times />
<cn>2</cn>
<ci>a</ci>
</apply>
</apply>
</apply>
</reln>
C-6
Tehnologii Web
<math xmlns="http://www.w3.org/1998/Math/MathML">
...
</math>
Dac! navigatoarele Web vor putea procesa HTML con#innd coduri MathML, atunci va
deveni posibil! "i procesarea invers!. De"i acest lucru este mai dificil, el constituie unul
dintre principalele subiecte de discu#ie n cadrul Consor#iului Web.
n prezent, exist! un singur navigator disponibil pentru realizarea "i vizualizarea de
expresii matematice folosind marcaje MathML - Amaya, care se conformeaz! standardului
MathML 1.0 "i variantelor de lucru ale MathML 2.0. Elementele de con#inut nu sunt nc!
suportate, putnd fi folosite doar elemente MathML de prezentare.
n plus, se pot asocia fragmentelor de expresii matematice leg!turi simple spre alte
resurse Web prin intermediul limbajului XLink:
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi>y</mi>
<mo>=</mo>
<mi></mi>
<mfrac xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="http://www.infoiasi.ro/">
<mi>x</mi>
<msqrt>
<mrow>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msqrt>
</mfrac>
</mrow>
</math>
C-7
Tehnologii Web
Amaya mai ofer! suport pentru documente XHTML "i ilustra#ii SVG (Scalable Vector
Graphics), plus pentru adnot!ri colaborative (folosind RDF, XLink "i XPointer),
prin intermediul proiectului-aplica#ie Annotea.
C-8
Tehnologii Web
De asemeni, se poate utiliza pachetul WebEQ pentru editarea "i includerea marcajelor
MathML n cadrul paginilor Web. Formulele concepute n MathML vor fi afi"ate prin
intermediul unui applet Java. Se pune la dispozi#ie "i un convertor automat al expresiilor
scrise ntr-un dialect TeX n documente MathML. Un alt translator TeX-MathML este
programul Omega elaborat de John Plaice.
O alternativ! la MathML este GELLMU (Generalized Extensible Latex-Like Markup),
limbaj de marcare propus de William Hammond foarte asem!n!tor LaTeX-ului destinat
reprezent!rii formulelor matematice pe Web. Aplica#iile suportnd GELLMU sunt
a"teptate s! apar! n cursul anului 2001.
C-9
Tehnologii Web
securitate personal! sau general! a datelor (oferind suport pentru semn!turi digitale
utile n comer#ul electronic, tranzac#ii economice "i juridice etc.).
RDF folose"te limbajul XML pentru reprezentarea sintactic! a metadatelor. Unul dintre
scopurile cadrului este de a face posibil! specificarea semantic! a datelor, bazat! pe XML,
printr-o metod! standardizat!, independent! de ma"in!, extensibil!. RDF "i XML sunt
complementare n acest sens.
n primul rnd, RDF trebuie s! defineasc! un mecanism de descriere a resurselor
independent de domeniul de folosire a datelor, f!r! a specifica a priori vreo semantic!.
Definirea acestui mecanism trebuie s! r!mn! neutr!, dar general!, dup! cum vom vedea
mai jos.
Pentru a facilita definirea datelor RDF, va fi necesar un sistem de clase similar celui din
programarea orientat!-obiect. O colec#ie de clase (dezvoltat! pentru un anumit scop
specific) se nume"te schem#. Clasele sunt organizate ierarhic oferind extensibilitatea prin
rafinarea subclaselor. Astfel, pentru crearea unei noi scheme putem s! ne baz!m pe o
schem! de baz! (un fel de clas! abstract! n termenii program!rii obiectuale). Se asigur! n
acest mod "i reutilizarea defini#iilor de metadate. Datorit! caracterului extensibil, agen#ii
care proceseaz! metadatele vor fi capabili de versatilitate n manipularea schemelor.
Mo"tenirea multipl! permite exploatarea n mai multe metode a acelea"i informa#ii.
Este posibil s! cre!m instan#e de date RDF bazate pe multiple scheme din diverse surse.
C - 10
Tehnologii Web
resurse
Datele descrise de expresiile RDF sunt denumite resurse. O resurs! poate
fi o pagin! Web complet! (de exemplu un document HTML desemnat
printr-un
localizator
uniform
de
resurse
(URL)
precum
http://www.infoiasi.ro/~busaco/index.html), o parte a unei
pagini Web (un element specific HTML sau XML prezent n sursa
documentului, de pild! o imagine) sau un obiect care nu este direct accesibil
via Web (e.g. o carte tiparit!). Resursele sunt specificate de URI-uri plus un
identificator de leg!tur!, op#ional. A"a cum am v!zut, un URI poate
specifica orice.
propriet#"i
O proprietate reprezint! un aspect specific, o caracteristic!, un atribut sau
o rela#ie pentru a descrie o resurs!. Fiecare proprietate posed! o semantic!, un
set de valori permise, o mul#ime de tipuri de resurse pe care le descrie "i un set
de rela#ii (interdependente) cu alte propriet!#i.
declara"ii
O anumit! resurs! mpreun! cu o proprietate a sa avnd asignat! o valoare
formeaz! o declara"ie. Putem privi declara#ia ca un 3-uplu: {subiect,
predicat, obiect}. Obiectul declara#iei (valoarea propriet!#ii) poate desemna o
alt! resurs! (specificat! de un URI) sau un literal (tip primitiv de dat! sau "ir de
caractere, conform specifica#iilor XML). n modelul RDF, un literal poate
con#ine marcaje XML care ns! nu vor fi evaluate (analizate) de
procesorul RDF.
graf orientat: nodurile sunt fie subiecte fie obiecte, iar arcele semnific! un
predicat;
C - 11
Tehnologii Web
n acest caz, obiectul nu va fi un "ir de caractere, ci o colec#ie format! din trei literali:
"individ", "Sabin Corneliu Buraga", "busaco@infoiasi.ro". Vom vedea
2.4 Sintax
Sintaxa
a de baza RDF
Vom da descrierile sintactice n nota#ia EBNF (Extended Backus-Naur Form).
Toate facilit!#ile sintactice din XML (regulile spa#iilor albe, diferen#ele dintre apostrof "i
ghilimele, senzitivitatea caracterelor, modurile de adnotare) sunt suportate.
Mai multe defini#ii pentru o anumit! resurs! pot fi grupate n cadrul elementului
Description (suport pentru ncapsulare).
RDF
descript
rdf reprezentat cu italice este utilizat pentru a reprezenta un prefix al spa#iului de nume,
util pentru imbricarea exact! a tag-urilor de nceput "i de sfr"it.
Pentru exemplul de mai sus, avem:
<rdf:RDF>
<rdf:Description about="http://www.infoiasi.ro/~busaco/odix">
<s:Creator>Sabin Corneliu Buraga</s:Creator>
</rdf:Description>
</rdf:RDF>
Aici prefixul 's' se refer! la un prefix specific ales de autorul expresiei RDF "i definit
ntr-o declara#ie a spa#iului de nume XML, conform unei scheme de forma:
xmlns:s="http://description.org/schema/".
C - 12
Tehnologii Web
C - 13
Tehnologii Web
Clase fundamentale
rdfs:Resource define"te clasa resurselor, corespunznd conceptului de
schem! define"te o nou! clas!, resursa reprezentnd acea clas! trebuie s! aib! o
proprietate rdfs:type a c!rei valoare este resursa rdfs:Class. Clasele RDF
pot specifica, de exemplu, pagini Web, tipuri de documente, baze de date,
persoane etc.
Propriet#"i fundamentale
Fiecare model RDF care utilizeaz! un mecanism de scheme include, n mod implicit,
propriet!#ile de mai jos, instan#e ale clasei rdf:Property, oferind o modalitate de a
exprima rela#iile dintre clase "i instan#ele lor sau supraclase.
rdf:type
Indic! faptul c! o resurs! este membr! a unei clase. Atunci cnd o resurs!
are o proprietate rdf:type a c!rei valoare reprezint! o anumit! clas!, vom
spune c! resursa este o instan"# a acelei clase. Valoarea lui rdf:type
pentru o resurs! este o alt! resurs!, instan#! a lui rdfs:Class. Clasele
individuale ntotdeauna vor avea rdf:type asignat! cu valoarea
rdfs:Class (ori o sub-clas! a lui rdfs:Class). O resurs! poate fi
instan#! a mai multor clase, desigur.
rfds:subClassOf
C - 14
Tehnologii Web
rdfs:subPropertyOf
O proprietate poate avea zero, una sau mai multe propriet!#i, specializ!ri
ale ei. Dac! o anumit! proprietate P1 este o subproprietate a unei proprieta#i
mai generale P2 "i dac! o resurs! A are proprietatea P2 avnd asignat!
valoarea B, atunci aceasta implic! faptul c! resursa A are de asemeni
proprietatea P1 cu valoarea B.
Restric"ii
O schem! poate declara anumite restric#ii asociate claselor "i propriet!#ilor. n jargonul
RDF, vor fi folosite conceptele de domeniu (domain) "i interval (range).
Restric"iile n RDF
Un model care nu respect! o restric#ie este un model inconsistent. Diverse aplica#ii pot avea
comportamente eronate n cadrul unui model inconsistent.
Exemple de restric#ii:
C - 15
Tehnologii Web
Restric"ii fundamentale
rdfs:ConstraintResource
define"te
o
sub-clas!
a
lui
rdfs:Resource ale c!rei instan#e sunt construc#ii de scheme implicate n
interval este A va fi constrns! s! fie instan#! a clasei A. Putem avea cel mult
o proprietate range.
bag - list! neordonat! de resurse sau literali, valorile duplicate fiind permise;
secven"# - list! ordonat! de resurse sau literali. Ca mai sus, valorile pot fi
duplicate;
contain
::=
seq
::=
bag
::=
alt
::=
member
::=
referItem ::=
inlineItem::=
Colec#iile pot apare oriunde este permis un element Description, deci regulile
sintactice se modific! astfel:
[1a]
[8a]
[23]
RDF
::= '<rdf:RDF>' obj* '</rdf:RDF>'
value ::= obj | string
obj
::= descript | contain
C - 16
Tehnologii Web
Exemple:
a.
b.
C - 17
Tehnologii Web
exprim!m faptul c! 'Sabin Corneliu Buraga' este creatorul colec#iei de pagini 'pages'.
Referentul elementului Description este o colec#ie (de tip bag), nu membrii ei. Pentru a
specifica faptul c! 'Sabin Corneliu Buraga' este creatorul fiec!rei pagini, se folose"te un alt
tip de referire, dat de atributul aboutEach, acest tip de referent fiind numit
referent distributiv.
<rdf:Description aboutEach="#pages">
<s:Creator>Sabin Corneliu Buraga</s:Creator>
</rdf:Description>
Atributul aboutEachPrefix declar! o colec#ie ale c!rei membri sunt toate resursele
corespunz!toare identificatorilor care ncep cu "irul de caractere al valorii atributului.
Un exemplu:
Pentru toate paginile Web prezente pe serverul Facult!#ii de Informatic! putem seta
o proprietate de copyright scriind:
<rdf:Description aboutEachPrefix="http://www.infoiasi.ro">
<s:Copyright>1997-2001,
Sabin Corneliu Buraga</s:Copyright>
</rdf:Description>
C - 18
Tehnologii Web
subiect
identific! resursa descris! de declara#ia modelat!; valoarea subiectului este
resursa specificat! n declara#ia ini#ial! (n exemplul nostru
http://www.infoiasi.ro);
predicat
identific! proprietatea original! (reprezentnd n cazul nostru creatorul);
obiect
specific! valoarea propriet!#ii declara#iei modelate (aici Sabin Corneliu
Buraga);
tip
descrie tipul noii resurse. Toate declara#iile reificate sunt instan#e ale lui
RDF:Statement. Astfel, ele au o proprietate type al c!rei obiect este
RDF:Statement. Proprietatea type se poate folosi pentru declararea
sau
s are proprietatea p avnd asignat! valoarea o
C - 19
Tehnologii Web
De exemplu, afirma#ia:
Sabin Corneliu Buraga este creatorul resursei http://www.infoiasi.ro.
n care am notat [I] resursa identificat! prin URI-ul I, iar ghilimelele ncadreaz! un literal.
Utiliznd 3-uple, putem specific! reificarea declara#iilor. Dat! declara#ia (d) de mai sus,
exprim!m reificarea acesteia ca o nou! resurs! X dup! cum urmeaz!:
{type,
{predicate,
{subject,
{object,
[X],
[X],
[X],
[X],
[RDF:Statement]}
[creator]}
[http://www.infoiasi.ro]}
"Sabin Corneliu Buraga"}
denumite
6. Reificarea unui 3-uplu {pred, sub, obj} din Declara#ii const! dintr-un
element r apar#innd mul#imii Resurse "i din elementele s1, s2, s3, s4 ale mul#imii
Declara#ii avnd forma:
C - 20
Tehnologii Web
Pentru a crea o colec#ie c, vom considera un 3-uplu {RDF:type, c, t}, unde t este
unul din cele trei tipuri (RDF:Seq, RDF:Bag sau RDF:Alt). Fiecare membru rn al colec#iei
c este definit de {RDF:_i, c, ri}, cu i=1,n.
2.12 Aplicaii
Exist! deja definite, avnd ca suport cadrul de descriere a resurselor Internet prezentat
aici, diverse metadate utilizate n aplica#iile Web. n continuare ne vom ocupa numai de o
modalitate de a descoperi resursele electronice ntr-o manier! similar! celei de consultare a
unui catalog de bibliotec!: Dublin Core Metadata, folosind vocabulare definite de
Dublin Core Initiative.
Se specific! spa#iile de nume: dc (Dublin Core) disponibil la adresa
http://purl.org/metadata/dublin_core "i dcq (Dublin Core Qualifiers) la
adresa http://purl.org/metadata/dublin_core_qualifiers. n fapt, Dublin
Core Metadata define"te o schem! avnd 15 propriet!#i de baz! utile pentru descrierea
oric!rei resurse Web, n special pentru activit!#i de c!utare "i pentru constituirea
bibliotecilor digitale.
Prezent!m un exemplu de descriere inteligent! a unei publica#ii electronice disponibile
pe Web.
<rdf:RDF
xmlns:rdf="http://www.w3.org/TR/1999/PR-rdf-syntax#"
xmlns:dc="http://purl.org/metadata/dublin_core#"
xmlns:dcq="http://purl.org/metadata/dublin_core_qualifiers#">
<rdf:Description about="http://www.infoiasi.ro/circles">
<dc:Title>Circles - an electronic magazine</dc:Title>
<dc:Description>Circles este o revist!
electronic! independent! care
a ap!rut regulat n perioada
februarie 1997 - mai 2000, mbinnd "tiri
din lumea informaticii cu aspecte
culturale "i artistice.
</dc:Description>
<dc:Contributor rdf:parseType="Resource">
<dcq:AgentType
rdf:resource=
"http://purl.org/metadata/dublin_core_qualifiers#Editor"
/>
<rdf:value>Sabin Corneliu Buraga</rdf:value>
</dc:Contributor>
<dc:Publisher>Faculty of Computer Science</dc:Publisher>
<dc:Date>1997-17-02</dc:Date>
<dc:Type>electronic magazine</dc:Type>
<!-- subiectul abordat (colec#ie) -->
<dc:Subject>
<rdf:Bag>
<rdf:li>computer science</rdf:li>
<rdf:li>literature and art</rdf:li>
<rdf:li>other different topics</rdf:li>
</rdf:Bag>
</dc:Subject>
<!-- formatul revistei: cmpuri MIME -->
<dc:Format>
<rdf:Bag>
<rdf:li>text/html</rdf:li>
C - 21
Tehnologii Web
<rdf:li>image/jpeg</rdf:li>
<rdf:li>image/gif</rdf:li>
</rdf:Bag>
</dc:Bag>
<!-- rela#ia cu serverul infoiasi.ro -->
<dc:Relation rdf:parseType="Resource">
<dcq:RelationType
rdf:resource=
"http://purl.org/metadata/dublin_core_qualifiers#IsPartOf" />
<rdf:value resource="http://www.infoiasi.ro" />
</dcf:RelationType>
</dc:Relation>
</rdf:Description>
</rdf:RDF>
C - 22
Tehnologii Web
n urma analizei, s-au generat urm!toarele 3-uple ale modelului de date RDF:
triple('http://www.w3.org/1999/02/22-rdf-syntax-ns#type',
'#genid3',
'http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag').
triple('http://www.w3.org/1999/02/22-rdf-syntax-ns#_1',
'#genid3',
'http://www3.infoiasi.ro/~Cristina').
triple('http://www.w3.org/1999/02/22-rdf-syntax-ns#_2',
'#genid3',
'http://www3.infoiasi.ro/~Mihaela').
triple('http://www.w3.org/1999/02/22-rdf-syntax-ns#_3',
'#genid3',
'http://www3.infoiasi.ro/~Cosmin').
triple('Students',
'http://www.infoiasi.ro/courses/nlp',
'#genid3').
C - 23
Tehnologii Web
n acest mod pot fi validate "i studiate, ntr-o manier! facil!, orice documente RDF,
introduse fie prin intermediul unui formular, fie indicnd URL-ul unde au fost stocate
pe Web.
C - 24
Tehnologii Web
Pentru accesarea datelor din bookmark-ul navigatorului putem utiliza urm!torul cod:
// utilizeaz! managerul de componente
var bookmarks =
Components.
classes["component://netscape/rdf/datasource?name=bookmarks"].
getService(Components.interfaces.nsIRDFDataSource);
// prelucreaz! intr!rile din bookmark
if (bookmarks.HasAssertion(
RDF.GetResource("http://home.netscape.com/NC-rdf#BookmarksRoot"),
RDF.GetResource("http://home.netscape.com/NC-rdf#child"),
RDF.GetResource("http://home.netscape.com/NCrdf#PersonalToolbarFolder"),
true) {
/* prelucreaz! datele */
}
C - 25
Tehnologii Web
<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<!-- list all the packages being supplied by this jar -->
<RDF:Seq about="urn:mozilla:package:root">
<RDF:li resource="urn:mozilla:package:editor"/>
<RDF:li resource="urn:mozilla:package:communicator"/>
<RDF:li resource="urn:mozilla:package:navigator"/>
</RDF:Seq>
<!-- package information -->
<RDF:Description about="urn:mozilla:package:editor"
chrome:displayName="Editor"
chrome:author="mozilla.org"
chrome:name="editor">
</RDF:Description>
<RDF:Description about="urn:mozilla:package:communicator"
chrome:displayName="Mozilla Core"
chrome:author="mozilla.org"
chrome:name="communicator">
</RDF:Description>
<RDF:Description about="urn:mozilla:package:navigator"
chrome:displayName="Navigator"
chrome:author="mozilla.org"
chrome:name="navigator">
</RDF:Description>
</RDF:RDF>
C - 26
Tehnologii Web
C - 27
Tehnologii Web
r!d!cin!. Acest element poate con#ine diferite widget-uri (controale) facilitnd interac#iunea
cu utilizatorul:
<window title="O interfa#! XUL" id="main_win">
<menubar id="main_menu">
<menu value="File" id="file_menu"/>
<menupopup>
<menuitem value="New"
onclick="CreateNewDoc()" />
<menuitem value="Open"
onclick="OpenDoc()" />
<menuitem value="Close"
onclick="CloseDoc()" />
</menupopup>
<menu value="Edit" />
<menu value="Help" />
</menubar>
<box style="background-color:lightgreen;"
id="main_box">
<browser />
</box>
</window>
Dup! cum se remarc!, o interfa#! poate fi compus! din diferite tipuri de widget-uri
grupate n urm!toarele categorii:
<window>
cutii de vizualizare
<box>, <titledbox>, <text>, <textfield>
tabulatoare
<tabcontrol>, <tabbox>, <tabpanel>, <tab>
butoane
<radiogroup>, <radio>, <button>, <checkbox>
bare de defilare
<scrollbar>, <scrollbarbutton>, <slider>
C - 28
Tehnologii Web
<treecol>,
<treerow>,
3.2 Exemple
a. Generarea unei cutii de vizualizare avnd titlu, grupnd n interiorul ei
dou! butoane:
<!-- ncarc! un stil de afi"are a interfe#ei (aici 'chrome') -->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!-- define"te fereastra de afi"are -->
<window id="new-menu"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/
gatekeeper/there.is.only.xul">
<titledbox style="background-color: lightblue;" orient="vertical">
<title>Nice Buttons</title>
<button value="Click Me" />
<button value="Push Me" />
</titledbox>
</window>
C - 29
Tehnologii Web
b. Pentru fiecare buton, se pot preciza propriet!#i "i ac#iuni pentru diferite
pseudo-clase de stiluri CSS (hover "i active) "i evenimente (e.g. onCommand),
utile pentru exploatarea interfe#ei. Astfel, putem avea:
<style>
button.bookmarkbutton {
margin: 0px;
max-width: 8em;
font: inherit;
font-size: smaller;
color: #99CCCC;
border: none;
padding: 1px;
background-image: none;
}
button.bookmarkbutton:hover {
color: #CCFFFF;
}
button.bookmarkbutton:active {
color: #CCFFFF;
padding-left: 2px;
padding-top: 2px;
padding-right: 0px;
padding-bottom: 0px;
}
</style>
<button class="bookmarkbuttom"
value="&TOC.label;"
onCommand="GetDoc('bookmarks.html')" />
c.
<tabcontrol align="vertical">
<tabbox align="horizontal">
<tab value="Tab One" />
<tab value="Tab Two" />
<tab value="Tab Three" />
</tabbox>
<tabpanel flex="100%">
<button value="View One" />
<button value="View Two" />
<button value="View Three" />
</tabpanel>
</tabcontrol>
C - 30
Tehnologii Web
C - 31
Tehnologii Web
C - 32
Tehnologii Web
Interfa"a navigatorului Mozilla (versiunea Milestone $6) utilizind un chrome construit n XUL
Tehnologii Web
Tehnologii Web
prelucr!rii documentelor XUL. Astfel, prin intermediul AOM putem referi diferite
widget-uri ca ierarhii de colec#ii de controale ale interfe#elor.
C - 35
Tehnologii Web
n acest mod, nucleul poate fi folosit de mai multe navigatoare sau aplica#ii, n diferite
circumstan#e "i rulnd pe diverse platforme, interfa#a cu acesta putnd fi aleas! de utilizator,
beneficiind de flexibilitatea oferit! de XUL.
C - 36
Tehnologii Web
C - 37
Tehnologii Web
Tehnologii Web
1.1 Format
Formatul se specific! prin HTML, limbaj care conformndu-se principiilor SGML,
accept! un num!r de elemente (tag-uri) pentru formatarea documentului. Ca "i n SGML,
acestea se ncadreaz! ntre delimitatorii "<" "i ">", putnd exista tag-uri de nceput "i de
sfr"it. Fi"ierele HTML sunt fi"iere ASCII obi"nuite avnd extensia .html (sau .htm) "i
sunt divizate n dou! p!r#i: antetul (head) "i corpul (body).
Astfel, o pagin! Web marcat! cu tag-uri HTML are forma general!:
D-2
Tehnologii Web
<html>
<head>
...
</head>
<body>
...
</body>
</html>
corespunznd celor trei variante de DTD-uri stabilite de Consor#iul Web: strict! (f!r! a
con#ine elemente "i atribute considerate demodate), tranzi"ional! (putnd apare "i elemente
sau atribute demodate) "i cu cadre (suport pentru cadre), respectiv. Pentru varianta
suportnd cadre, corpul documentului va fi nlocuit cu mul#imea de frame-uri din care va fi
compus! pagina Web prin intermediul construc#iei <frameset>...</frameset>
(vezi mai jos).
Documentele HTML respect! DTD-ul stabilit de Consor#iul WWW care nu trebuie
inclus n cadrul sursei paginii Web.
n cadrul antetului, printre altele, poate apare titlul documentului (al paginii Web)
specificat de tag-ul <title>. De exemplu:
<title>Faculty of Computer Science</title>
De obicei ntre <head> "i </head> apar defini#ii de rutine scrise n limbaje script
(precum JavaScript), defini#ii de stiluri CSS ori meta-elemente pentru a fi siguri c! sunt
analizate "i memorate de navigator (antetul este procesat primul).
stil de afi!are
<b> (ngro"at), <i> (nclinat), <u> (subliniat), <strong> (intensificat),
<big> (mai mare), <small> (mai mic), <sub> (indice), <sup> (exponent),
<font> (dimensiune, culoare "i familie de font), <pre> (text preformatat),
<code> (cod surs!), <center> (centrat)
titluri
<h1> ... <h6> ("ase tipuri)
sec"iuni
<div> (diviziune), <p>
<br> (trecere la linie nou!)
D-3
(paragraf),
<hr>
(linie
orizontal!),
Tehnologii Web
liste
<ul>
<ol>
(list!
nenumerotat!),
(list!
numerotat!),
<li> (element de list!), <dir> (list! de directoare), <menu> (meniu)
imagini
<img>
tabele
<table> (nceput de tabel), <tr> (linie de tabel), <td> (defini#ie de
celul!), <th> (celul! de antet), <thead> (sec#iune de antet de tabel),
<tbody> (sec#iune de corp de tabel)
leg#turi (ancore)
<a>, <link>
formulare
<form> (defini#ie), <input> (cmp de interogare), <select> (list! de
selec#ie), <option> (op#iune)
cadre (frame-uri)
<frameset> (definire), <frame> (cadru), <noframes> (alternativ! de
suport multimedia
<embed> (extensie Netscape), <bgsound> (extensie Internet Explorer)
extensii
<meta> (meta-elemente)
entit#"i speciale
< > & © etc.
Lista tuturor elementelor HTML 4.0 poate fi consultat! n anexa 2, iar n anexa 3 se
g!sesc toate atributele permise n HTML. Entit!#ile care se folosesc n HTML se pot
parcurge n anexa 4.
D-4
Tehnologii Web
Corpul documentului
<!-<!-<!-<!-<!--
culoare
culoare
culoare
culoare
culoare
fundal -->
caractere -->
leg!turi -->
leg!turi vizitate -->
leg!turi active -->
Sec"iuni
Liste
(%text)*>
%flow;>
Stil de
numere
litere
litere
litere
litere
num!rare
arabe
mici
mari
romane mici
romane mari
1, 2, 3, ...
a, b, c, ...
a, B, C, ...
i, ii, iii, ...
I, II, III, ...
-->
D-5
Tehnologii Web
<DIR>
<DIR COMPACT>
<MENU>
<MENU COMPACT>
List! de directoare
Ca mai sus, compactat
List! de meniuri
Ca mai sus, compactat
-->
-->
-->
-->
Tabele
D-6
Tehnologii Web
Imagini
D-7
Tehnologii Web
CGI (Common Gateway Interface), PHP (PHP: Hypertext Preprocessor) sau ASP (Active
Server Pages) care vor fi prezentate ulterior n cadrul acestui material.
Formularele pot varia de la o simpl! caset! de text, pentru introducerea unui "ir de
caractere pe post de expresie de interogare, folosit! de exemplu de un motor de c!utare pe
Web, pn! la o structur! complex!, cu multiple op#iuni, oferind facilit!#i puternice de
transmisie a datelor.
Exist! dou! modalit!#i prin care informa#iile dintr-un formular pot fi transmise de la
clientul Web la serverul situat undeva n Internet. Atunci cnd se transmit informa#iile
cuprinse ntr-un formular "i URL-ul de destina#ie include datele introduse, avem de-a face
cu metoda numit! "GET" sau cu un formular de tip "get" (se utilizeaz! metoda GET a
protocolului HTTP prezentat n unul dintre capitolele anterioare). Alternativa este aceea n
care atunci cnd se transmit informa#iile dintr-un formular, URL-ul destina#ie arat! perfect
normal, f!r! alte elemente suplimentare ad!ugate la sfr"itul adresei Web. n aceast! a doua
situa#ie avem o metod! "POST" sau un formular de tip "post" (utilizndu-se metoda POST
a protocolului de transmisie HTTP).
Elementul FORM
Un formular HTML apare inclus n pagina Web prin intermediul elementului <form>,
care are atributele obligatorii action=url "i method=metoda. URL-ul indic! fi"ierul sau
aplica#ia aflat! pe serverul Web care urmeaz! s! prelucreze informa#iile din formular, iar
metoda poate fi GET sau POST. n unele cazuri poate apare "i atributul enctype
specificnd modul de codificare MIME a datelor dintr-un formular (se folose"te de obicei
pentru realizarea ac#iunii de upload, mpreun! cu method="POST").
n cadrul marcajului <form> se pot insera "i alte tag-uri HTML uzuale, plus diverse
elemente indicnd modalit!#i de introducere a datelor n cadrul formularului. n cea mai
mare parte, toate cmpurile unui formular, destinate introducerii datelor, se specific! prin
intermediul elementului <input> utilizndu-se diferite atribute.
Atributele uzuale ale unui element <input> sunt urm!toarele:
checked indic! pentru un buton de selec#ie dac! acea op#iune este selectat!
D-8
Tehnologii Web
Dac! se dore"te introducerea unor informa#ii text pe mai multe linii, se poate utiliza
elementul <textarea>. Pentru casete de validare (avnd butoane sau op#iuni multiple)
se folose"te elementul <select>.
Navigatoarele Web curente permit lucrul cu diverse tipuri de cmpuri de intrare, fiecare
dintre acestea determinnd un format diferit de ie"ire. Tipurile de intr!ri (dialoguri) care pot
fi specificate sunt:
a. TEXT este tipul prestabilit, cu atributul size utilizat pentru a specifica
m!rimea prestabilit! a cmpului de dialog care se creeaz!. Urm!torul cod HTML
va genera un astfel de dialog text (n acest exemplu, cmpul text este complet inutil,
fiindc! nu va fi prelucrat de nici un program):
<form>
<input type="text" size="30"
value="Text ini#ial" name="un_text">
</form>
Text ini!ial
D-9
Tehnologii Web
D - 10
Tehnologii Web
<br>
<br>
<input type="reset" value="%terge formularul" size="25">
</center>
</form>
Numele:
Vrsta:
%
$
#
"
Sunte#i genial: !
Trimite formularul
"terge formularul
D - 11
Tehnologii Web
n cadrul unui <select> putem specifica, de asemeni, atributul size prin care se
indic! num!rul op#iunilor din meniu care vor fi afi"ate la un moment dat "i atributul
boolean multiple care specific! dreptul utilizatorilor de a selecta mai mult de o op#iune
(mai multe op#iuni se pot selecta f!cnd click simultan cu ap!sarea tastei Ctrl). Dac! exist! o
valoare prestabilit!, trebuie s! ad!ug!m atributul selected (op#iune selectat! implicit) la
un tag <option>. n cadrul unui <option> mai poate apare atributul disabled
indicnd o op#iune care nu poate fi folosit! n acel moment.
D - 12
Tehnologii Web
Iat! un exemplu:
<form name="formular">
<p>A" vrea s! ajung:
<select name="meserii" size="1">
<option value="nimic" selected>-- nimic? --</option>
<option value="M!celar">M!celar</option>
<option value="Librar">Librar</option>
<option value="Profesor">Profesor</option>
<option value="Gde">Gde</option>
<option value="Ministru">Ministru</option>
<option value="T!ietor">T!ietor de frunze</option>
<option value="Pensionar">Pensionar</option>
</select>
</form>
-- nimic? --
D - 13
Tehnologii Web
Un exemplu concret
Urm!torul exemplu de formular (conceput de absolven#ii D!nu" Silion "i Tudor Boutiuc)
include cteva elemente eterogene de introducere a datelor: un grup de butoane radio "i un
meniu derulant, specificate cu ajutorul elementelor <select>, al!turi de cmpuri de tip
text. Figura de mai jos ilustreaz! modul n care formularul este afi"at pe ecran de c!tre
navigatorul Web. Remarc!m faptul c! meniul derulant prezint! o singur! valoare: execu#ia
unui click pe aceast! valoare determin! afi"area tuturor op#iunilor posibile; deplasarea
cursorului permite vizitatorului paginii s! selecteze valoarea particular! pe care o consider!
cea mai bun!.
D - 14
Tehnologii Web
D - 15
Tehnologii Web
Alocarea de spa#iu prin rows sau cols pentru fiecare element al structurii de cadre de
cele mai multe ori va fi valabil! numai pentru afi"area ini#ial! a cadrelor, utilizatorul putnd
ulterior modifica acest aranjament.
Autorii de pagini Web pot partaja date ntre cadrele definite prin intermediul tag-ului
<object>, dup! cum se poate observa n exemplul de mai jos:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html40/frameset.dtd">
<html>
<head>
<title>O structura de cadre folosind "object"</title>
<!-- obiectul nu va fi afi"at -->
<object id="myobject" data="data.bar"></object>
</head>
<frameset>
<frame src="showobj.html" name="showobj">
</frameset>
</html>
<!-- showobj.html -->
<html>
<head>
<title>Afi"eaz! obiectul</title>
</head>
<body>
...
<p>
<!-- accesare obiect prin JavaScript -->
<script type="text/javascript">
parent.myobject.myproperty
</script>
D - 16
Tehnologii Web
...
</body>
</html>
#int!
unei
ancore,
ntr-o
construc#ie
HTML
de
forma
Un exemplu:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html40/frameset.dtd">
<html>
<head>
<title>Exemplu</title>
</head>
<frameset rows="20%,*,2*">
<frameset cols="*,200">
<frame src="web-cuprins.html" name="cuprins">
<frame src="web.jpg"
scrolling="no" noresize
marginwidth="0" marginheight="0">
</frameset>
<frame src="web2.html" frameborder="0">
<frame src="web3.html" frameborder="0"
name="afisare" >
</frameset>
</html>
D - 17
Tehnologii Web
Astfel, con#inutul unui cadru se va putea schimba, de"i structura general! a cadrelor de pe
ecran va r!mne aceea"i.
De
exemplu,
oricare cadru (va avea acela"i efect ca "i _self, n cazul n care cadrul nu are nici
un <frameset> p!rinte).
Setarea unui cadru implicit pentru toate leg!turile dintr-un document se poate realiza
prin intermediul marcatorului <base> inclus n antetul paginii Web:
<base href="http://www.infoiasi.ro/~busaco/teach/"
target="afisare">
D - 18
Tehnologii Web
Anumite browsere (cele text sau unele mai vechi) nu vor suporta cadrele, n acest caz
putndu-se furniza un con#inut alternativ prin intermediul construc#iei
<noframes>...</noframes>:
<html>
<head>
<title>Pagina mea</title>
</head>
<frameset cols="133,*">
<frame src="menu.html" name="menu" noresize>
<frame src="salut.html" name="afisare">
<noframes>
<p>Acest navigator nu suport! cadre...</p>
<p>Versiunea f!r! cadre
este <a href="menu.html">aici</a>.</p>
</noframes>
</frameset>
</html>
Cadre interne
n anumite situa#ii este de dorit s! se insereze un cadru n interiorul unui document
HTML, ntr-un mod asem!n!tor introducerii de obiecte cu <object>. Un cadru intern
nu-"i va putea modifica dimensiunile "i va fi inclus prin marcatorul <iframe>.
Atributele "i valorile lor sunt identice celor de la <frame>, exceptnd noresize care
nu mai poate fi utilizat. n plus, apar atributele width specificnd l!#imea "i height
semnificnd n!l#imea unui cadru intern.
Astfel, avem posibilitatea de a ncorpora ntr-o pagin! Web alt document HTML sau
oricare alt! resurs! dorit!.
D - 19
Tehnologii Web
Pentru captura de ecran de mai sus, sursa paginii Web este urm!toarea:
<html>
<head>
<title>Exemplu</title>
</head>
<body bgcolor="#EEEEEE" text="black">
<h2 align="center">Salut!ri!</h2>
<iframe src="web-cuprins.html"
width="500" height="300"
frameborder="0" align="center">
Navigatorul nu suport! cadre interne...
</iframe>
<hr size="1">
</body>
</html>
D - 20
Tehnologii Web
2. HTML Compact
HTML Compact este un subset al recomand!rilor HTML 2.0, HTML 3.2 "i HTML
4.0, dezvoltat pentru dispozitive informa#ionale mici. HTML define"te un format flexibil,
portabil "i facil al documentelor Internet, o direc#ie de dezvoltare a limbajului fiind extensia
lui la hipermedia. Versiunea HTML 4, dupa cum am v!zut, introduce noi facilit!#i ca stiluri,
suport pentru interna#ionalizarea, tratarea evenimentelor. O alt! direc#ie ar fi adaptarea
HTML-ului la dispozitive informa#ionale diverse care au ns! unele restric#ii hardware:
memorie "i putere a procesorului sc!zute, display miniaturizat, monocrom, metode limitate
de introducere a datelor.
HTML Compact este conceput pentru astfel de situa#ii, putnd fi implementat n medii
de lucru restrictive.
2.1 Cerine
Pentru a realiza func#ii de navigare WWW pentru dispozitive miniaturizate
(e.g. PalmBook, PocketPC), trebuie realizat! o restrngere a mul#imii de elemente din
HTML la un subset potrivit la restric#ii hardware ca:
D - 21
Tehnologii Web
butoane:
Cursor
nainte,
Cursor
napoi,
Selectare
napoi/Stop. Imaginile senzitive "i h!r#ile de imagini sunt excluse.
"i
imagini JPEG;
tabele;
h!r#i de imagini;
cadre;
foi de stiluri.
Sunt recomandate limite ale buffer-elor de intrare pentru INPUT (maxim 512 bytes) "i
SELECT (maxim 4096 bytes).
atribute suportate
name, href
BASE
href
BLOCKQUOTE
BODY
BR
clear
CENTER
DD
DIR
DIV
align
DL
DT
FORM
HEAD
Hx, x=1,6
align
HR
HTML
version="C-HTML 1.0"
D - 22
Tehnologii Web
IMG
INPUT
LI
MENU
META
http-equiv="refresh"
OL
OPTION
selected
align
PRE
SELECT
TEXTAREA
TITLE
UL
2.5 Concluzii
Recomandarea HTML Compact poate fi utilizat! drept ghid pentru servicii "i navigare
HTML pentru dispozitive mobile mici, f!r! fir. n viitorul apropiat, datorit! dezvolt!rii
Internetului, HTML Compact ar trebui s! ofere suport pentru comunica#ii video, pentru
extensii multimedia "i scripturi etc.
D - 23
Tehnologii Web
Extensibilitatea
Modularizarea
D - 24
Tehnologii Web
4.
Transformarea marcajelor
3.2 XHTML
XHTML (pn! la nceputul anului 1999 cunoscut sub denumirea de Voyager) este
numele de cod al HTML reformulat ca aplica#ie a XML-ului, definind profilele
documentelor ca spa#ii de nume, avnd fiecare propria sa adres! (dat! de un URI).
Documentele XHTML pot fi etichetate att "text/html", ct "i "text/xml",
elementul r!d!cin! fiind <html>. Spa#iile de nume XHTML sunt definite la adresa
http://www.w3.org/1999/xhtml "i vor putea fi incluse n documentele XHTML
prin atributul xmlns.
Declararea tipului de documente XHTML se va realiza prin intermediul construc#iei
DOCTYPE, ca n SGML, existnd trei tipuri de defini#ii de documente conform specifica#iei
HTML 4.01: tipul strict, tranzi"ional "i pentru cadre (frames), dup! cum se poate remarca din
exemplul urm!tor:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
Documentele XHTML vor avea toate elementele "i atributele scrise cu litere mici,
deoarece XML este case-sensitive, dup! cum am v!zut. O alt! restric#ie este aceea c! toate
tag-urile de sfr"it sunt obligatorii, iar tag-urile vide trebuie s! se termine cu "/>".
Elementul <title> trebuie plasat imediat dup! <head> "i poate fi urmat de <base>,
dac! exist!.
Pentru a permite procesoarelor XML s! recunoasc! leg!turile hipertext, tag-ul <a>
trebuie declarat cu atributul xml:link astfel:
<!ATTLIST a xml:link CDATA #FIXED "simple">
D - 25
Tehnologii Web
2.
validare op#ional!;
modulul de baz#
Specific! tipurile de date "i modele de baz! XHTML, mpreun! cu setul
minimal de elemente pentru scrierea unui document HTML: html, head,
title, base, meta, link, body, h1-h6, p, br, a, span, div.
modulul tranzi"ional
Specific! acele elemente din HTML 4.01 - Profilul Tranzi#ional, dar excluse
din profilul strict al HTML: basefont, font, center, s, u, con#innd "i
defini#iile unor atribute ca border, align, noshade.
modulul de stiluri
Ofer! elementul style, atributul style "i define"te utilizarea
elementului link.
modulul script
Specific! elementele script "i noscript.
modulul de fonturi
Define"te elementele relative la fonturi existente n HTML 4.01 - varianta
strict!: tt, b, i, big, small.
D - 26
Tehnologii Web
modulul de frazare
Define"te elementele care ofer! informa#ii despre anumite adnot!ri ale
autorului, n cadrul frazei: abbr, acronym, address, blockquote, q,
cite, code, dfn, kbd, samp "i var.
modulul de inflexiune
Specific! elemente care nu ofer! informa#ii referitoare la un domeniu,
ci doar o indica#ie despre inten#ia autorului: em, pre, strong, sub, sup, hr.
modulul de editare
Ofer! elemente referitoare la editarea documentelor, ca del "i ins.
modulul liste
Con#ine elementele dl, dt, dd, ul, ol, li.
modulul de formulare
Specific! elementele referitoare la scrierea formularelor: form, input,
textarea, select, optgroup, option, label, button, fieldset,
legend, isindex.
modulul de tabele
Con#ine elementele table, caption, col, colgroup, thead, tbody,
tr, th "i td.
modulul applet-uri
Con#ine applet "i param pentru suportul applet-urilor Java.
modulul obiecte
Specific! elemente ca object "i param.
modulul cadre
Define"te elementele referitoare la utilizarea cadrelor: frameset, frame,
iframe, noframes.
Tehnologii Web
nu) atributul name. n XHTML 1.0 este definit atributul id de tip ID pentru acest scop "i
name va fi nlocuit n viitor cu atributul id. Pentru compatibilitate cu HTML 4.01 se vor
folosi ambele atribute:
<a id="top" name="top"></a>
...
<h6>
<a href="#top">La nceputul paginii</a>
</h6>
O alt! diferen#! fa#! de HTML 4.01 este aceea c! elementele nevide trebuie s! aib!
tag-uri de sfr"it. n SGML anumite elemente pot avea tag-uri de sfr"it op#ionale. n XML,
pentru a elimina ambiguit!#i de analiz!, elementele trebuie s! aib! tag-uri de sfr"it
obligatorii. Astfel, paragrafele marcate prin intermediul lui <p> vor avea "i tag-ul de sfr"it
</p>. Elementele declarate cu con#inut vid, precum <hr> sau <br>, fie vor fi urmate de
tag-ul de sfr"it, fie vor fi scrise <hr /> ori, respectiv, <br />. ns! este interzis s! avem
<li /> din moment ce acest element nu este declarat ca vid (prin EMPTY).
De"i navigatoarele treceau cu vederea imbricarea eronat! a tag-urilor, specifica#ia
XHTML este mai riguroas!. Elementele trebuie s! aib! deci tag-uri de nceput "i de sfr"it
scrise corect. Construc#ii precum <h4>XHTML este <i>exact.</h4></i> sunt
prohibite.
De"i n XML nu pot fi specificate incluziuni "i excluziuni n cadrul defini#iilor formale de
elemente, a"a cum se ntmpl! n SGML, se impun urm!toarele restric#ii:
Elementele a, form, label nu pot con#ine alte elemente a, form, label,
respectiv.
Elementul pre nu poate con#ine img, object, big, small, sub "i sup.
Designerii trebuie s! utilizeze foi de stiluri sau programe script externe dac! acestea
cuprind simbolurile "<" sau "&" sau "]]>" sau "--", din cauza modelului nou de procesare
XML a documentelor XHTML. Pentru script-urile CGI (Common Gateway Interface)
parametrii transmi"i vor trebui s! aib! caracterul ampersand nlocuit de entitatea &.
D - 28
Tehnologii Web
Astfel, linia:
http://www.infoiasi.ro/cgi-bin/search.pl?name=Sabin&
value=Buraga va trebui nlocuit! cu:
http://www.infoiasi.ro/cgibin/search.pl?name=Sabin&
value=Buraga.
Pentru a verifica dac! o pagin! Web este conform! standardului XHTML 1.0, putem
utiliza Netscape 6 sau Internet Explorer 5, modificnd extensia fi"ierului din .html n
.xml, insernd la nceputul documentului <?xml version="1.0"?> "i ad!ugnd
tag-ului <html> atributul xmlns pentru a fi folosit spa#iul de nume XHTML. Astfel,
pagina va fi considerat! de analizor ncorporat n navigator ca fiind document XML "i
browserul va raporta erorile sintactice n cazul n care nu este conform! recomand!rilor
XHTML.
De exemplu, pentru documentul:
<?xml version="1.0"?>
<html xmlns:html="http://www.w3.org/1999/xhtml">
<table width=600 align=center>
</table>
vom ob#ine mesajul de eroare din capturile-ecran de mai jos (Internet Explorer ofer! mai
multe explica#ii):
D - 29
Tehnologii Web
D - 30
Tehnologii Web
4. Foi de stiluri
4.1 Caracteristici generale
Foile de stiluri (Cascading Style Sheets - CSS) sunt grupuri de propriet!#i care
definesc modul de apari#ie a elementelor HTML n cadrul unui navigator Web.
Consor#iul Web a conceput "i standardizat dou! nivele ale foilor de stiluri:
Limbajul CSS1 este u"or de n#eles "i de folosit de c!tre designerii Web "i
exprim! stilurile conform terminologiei edit!rii computerizate. CSS1 este o
recomandare a Consor#iului WWW din decembrie 1996.
balan"a autor/cititor: att autorul unei pagini Web, ct "i cititorul ei, i pot
influen#a prezentarea, browserele moderne permi#nd folosirea unor stiluri
personale ale cititorului.
Conflictele care pot apare se rezolv! prin ponderile ata"ate stilurilor. Implicit, ponderile
cititorului sunt mai mici dect ponderile regulilor stabilite de autor. Att ponderile
autorului, ct "i ponderile cititorului sunt mai importante dect cele implicite,
ale navigatorului.
Stilurile importate sunt n cascad! cu celelalte stiluri importate, n ordinea n care sunt
importate. Orice regul! explicit!, dat! n interiorul documentului, are pondere mai mare
dect regulile din stilurile importate (aceasta se aplic! "i recursiv, dac! este cazul). n CSS1
este recomandat ca stilurile importate s! fie naintea celorlalte defini#ii de stiluri, tocmai
pentru a ar!ta ordinea de cascad! men#ionat! mai sus.
O regul! de stil poate s!-"i m!reasc! ponderea n cazul n care este nso#it! de declara#ia
!important. Iat! un exemplu:
h2 { font-size:14pt!important; color: green }
D - 31
Tehnologii Web
Astfel, elementele cu display setat pe block deschid o nou! box! de afi"are, aceasta
fiind pozi#ionat! relativ la boxele adiacente conform modelului de formatare CSS.
Exemple tipice de elemente de acest gen sunt <h1>, <p> sau <div>.
Elementele avnd display: list-item sunt similare celor la nivel de bloc,
exceptnd faptul c! este ad!ugat un marcaj de element de list!. Ca exemplu, n HTML este
elementul <li>.
Elementele cu display setat pe inline vor fi incluse ntr-o box! de afi"are de tip
inline, pe aceeasi linie cu con#inutul precedent din document. Boxa este dimensionat!
potrivit m!rimii formatate a con#inutului boxei. Dac! elementul con#ine text, acesta poate
D - 32
Tehnologii Web
s! apar! pe mai multe rnduri "i va produce o box! de afi"are pe fiecare rnd n parte.
Propriet!#ile referitoare la margine sau chenar se aplic! elementelor inline, dar nu au efect la
ruperea liniilor.
Pentru elementele cu display avnd valoarea none, browserul va anula afi"area lor
(inclusiv a elementelor copii "i a boxei nconjur!toare).
Pentru mai multe am!nunte, consulta#i specifica#iile CSS1 "i CSS2.
<html>
<head>
<title>Foi de stil</title>
<style type="text/css">
h2 {
font-family: Arial;
font-style: italic;
color: green
}
</style>
</head>
<body>
<h2>Este verde, italic "i Arial.</h2>
<p>
<h2>%i acesta este la fel...</h2>
</body>
</html>
Aceste defini#ii de stil vor fi plasate ntotdeauna n antetul unei pagini Web,
atributul type fiind obligatoriu.
<html>
<head>
</head>
<body>
<h2 style="font-family: Arial;
font-style: italic; color: green">
Acesta este un titlu verde, italic "i Arial...</h2>
<p>
<h2>Pe cnd acesta nu este!</h2>
</body>
</html>
D - 33
Tehnologii Web
n cele mai multe cazuri aceasta este metoda de a modifica stilurile globale
definite.
<html>
<head>
<link rel="stylesheet" type="text/css"
href="foaie.css"
title="foaie de stiluri">
</head>
<body>
<h2>Un titlu verde, italic "i Arial...</h2>
<p>
<h2>Altul, la fel.</h2>
</body>
</html>
<html>
<head>
<style text="text/css">
<!-@import url("foaie.css")
-->
</style>
</head>
...
</html>
Se recomand! ca ultima alternativ! s! fie ct mai general! (n acest caz, familia de fonturi
Sans Serif). Dac! navigatorul nu g!se"te nici o potrivire, se vor considera valorile implicite.
D - 34
Tehnologii Web
Clase !i identificatori
Orice tag HTML poate fi selector, dar uneori dorim s! utiliz!m defini#iile de stiluri ntr-o
manier! mai general!.
Din momentul definirii unei clase sau a unui identificator, putem s! ata"!m defini#ia
oric!rui tag.
Textul se va colora n albastru doar dac! n interiorul tag-ului <p> se va afla <em>:
<p>Un paragraf care este albastru doar
<em>aici</em>...</p>
<em>Acesta este italic "i att!</em>
Sec"iuni de grupare
Selectorii se pot grupa pentru a reduce m!rimea "i redundan#a unei foi de stil,
separndu-i prin virgule:
h1, h2, a, td {
font-family: Arial;
font-size:
16pt;
color:
green;
}
Marcatorii <h1>, <h2>, <a> "i <td> vor avea acela"i stil de formatare. Dac! se
dore"te s! se adauge unui tag particular alte modalit!#i de formatare, putem scrie nc!
o defini#ie:
h1 { font-style: italic }
D - 35
Tehnologii Web
Sunt definite familiile generice: serif (e.g. Times), sans-serif (e.g. Helvetica),
cursive (e.g. Chancery), fantasy (e.g. Western), monospace (e.g. Courier).
Din cauza taxonomiei diferite a fonturilor, se ncurajeaz! folosirea familiilor
generice.
absolut! (x-small, medium, large etc. ori 10pt, 16pt etc.) sau relativ! (larger,
smaller) ori n procente (50%, -25%).
Un exemplu:
p, div {
font-size:
medium;
font-family: Verdana, Tahoma, Syntax, sans-serif;
font-weight: 600;
}
D - 36
Tehnologii Web
fi fix! sau va defila odat! cu con#inutul paginii. Valorile permise sunt fixed
sau scroll.
background-position determin! pozi#ia imaginii de fundal
background-position: 70% 0%
sau
de
exemplu:
background-position: top center).
(ca
nc! o exemplificare:
h2 {
background-image:
background-repeat:
background-position:
background-attachment:
}
url(bg.gif);
no-repeat;
center left;
fixed;
a { text-decoration: none }
p { text-decoration: overline underline }
de pozi#ia elementului p!rinte sau relativ la linia formatat! din care face
parte.
(capitalize, uppercase, lowercase, none).
D - 37
Tehnologii Web
p { text-indent: 2cm }
h1 { text-indent: -10% }
Pot fi specificate "i modul de curgere a textului (float) "i pe care laturi a unei boxe
nu se permite curgerea (clear):
img.icon { float: left; margin-left: 0; clear: right }
5. propriet!"i de clasificare
white-space declar! cum sunt manipulate spa#iile albe din cadrul
ul { list-style-image: url(triunghi.jpg) }
D - 38
Tehnologii Web
D - 39
Tehnologii Web
Exemple
a. Un efect 3D prin folosirea propriet!#ilor de pozi#ionare (position) "i
de stabilire a ordinii de afi"are (z-index), constituind a"a-numitul CSSP
(CSS Positioning):
<html>
<head>
<style type="text/css">
.over {
position: absolute;
top: 165px;
left: 20px;
z-index: 2;
background-color: green;
}
.under {
position: absolute;
top: 175px;
left: 20px;
z-index: 1;
background-color: blue;
}
</style>
</head>
<body>
<span class="over">
Acest text e pozi#ionat la 20 pixeli fa#! de
marginea stng! "i la 165 pixeli fa#!
de marginea superioar! a ferestrei.
</span>
<span class="under">
Acest text este afi"at sub textul precedent,
din cauza ordinii de afi"are dictat! de
proprietatea z-index.
</span>
</body>
</html>
b.
@media aural {
h1, h2, h3 {
stress: 20;
richness: 90
}
pre {
speak-punctuation: code;
}
}
D - 40
Tehnologii Web
elemente care urmeaz! imediat dupa altele "i fac parte din aceea"i
ierarhie de elemente:
h1 + h2 { margin-top: -5mm }
Se va reduce distan#a dintre <h1> "i <h2> numai dac! <h2> va urma
imediat dup! un element <h1>.
Acest tip de selectori are o preceden#! mai mare dect selectorii de tip
atribut.
d. Exemplul de mai jos seteaz! modul de afi"are a ghilimelelor n func#ie
de limb!, att pentru document n general, ct "i pentru elementul <q>:
HTML:lang(fr)
HTML:lang(de)
:lang(fr) > Q
:lang(de) > Q
{
{
{
{
quotes:
quotes:
quotes:
quotes:
D - 41
Tehnologii Web
print {
{ font-size: 10pt }
screen {
{ font-size: 12pt; background-image: url(bg.gif) }
screen, print {
{ line-height: 1.2 }
Dintre tipurile de medii permise se pot enumera: aural (sonore), braille (destinate
orbilor), handheld (dispozitive miniaturizate), print (pentru imprimant!),
projection (pentru proiectoare), screen (ecranul calculatorului), tty (terminale text),
tv (destinate reprezent!rii pe ecranele TV).
Specifica#ia CSS2 mparte mediile n mai multe grupuri dintre care amintim:
{
{
{
{
{
{
{
{
{
display:
display:
display:
display:
display:
display:
display:
display:
display:
table }
table-row }
table-header-group }
table-row-group }
table-footer-group }
table-column }
table-column-group }
table-cell }
table-caption }
D - 42
Tehnologii Web
col
{ border-style: none solid }
table { border-style: hidden }
col.totals { background: blue; width: 300px }
legendei tabelului:
caption {
caption-side: left;
margin-left: -8em;
width: 80%;
text-align: right;
vertical-align: top;
}
Valorile valide pentru caption-side sunt top, bottom, left sau right.
Pentru alinierea vertical! pot fi precizate valorile baseline (1) "i (2), top (3),
bottom (4), middle (5), sub, super, text-top ori text-bottom (vezi figura de mai jos).
Tehnologii Web
Vom utiliza mai nti CSS - nivelul 1, scriind foaia de stiluri style.css pentru a
formata documentul XML:
/* style.css (stiluri CSS1)
Utilizat pentru formatarea fi"ierelor XML */
students {
display: block;
border: solid thin navy;
background-color: white;
margin: 3em;
padding: 5px;
}
student {
display: block;
font-family: Verdana, Tahoma, sans-serif;
line-height: 1.2;
}
D - 44
Tehnologii Web
year {
display: inline;
text-align: center;
width: 50px;
border-right: solid thin red;
border-left: solid thin red;
}
name {
display: inline;
width: 300px;
font-weight: bold;
}
name:first-letter {
color: red;
font-size: 110%;
}
Formatarea unui document XML folosind CSS$, n Netscape 6 !i Internet Explorer 5.5
Mai mult, dorim ca informa#iile despre fiecare student s! apar! ntr-un tabel, iar rndul
corespunznd studentei cu num!rul matricol 4533 s! aib! o alt! culoare de fundal.
Numele vor fi afi"ate ngro"at.
D - 45
Tehnologii Web
Pentru aceasta vom folosi modelul de formatare "i mecanismul de selectare din
CSS - nivelul 2.
/* style.css (stiluri CSS2)
Utilizat pentru formatarea fi"ierelor XML */
students {
display: table;
border: solid thin navy;
background-color: white;
margin: 3em;
}
student {
display: table-row;
font-family: Verdana, Tahoma, sans-serif;
}
student[matr="4533"] {
background-color: pink;
}
name, year {
display: table-cell;
width: 200px;
border-right: solid thin blue;
border-top: solid thin blue;
margin: 1em;
text-align: center;
}
name {
font-weight: bold;
}
name:first-letter {
color: red;
font-size: 110%;
}
Dup! cum se poate remarca, stabilim pentru fiecare element XML modelul de
reprezentare a datelor, aici n format tabelar. De asemeni, ne slujim de mecanismul de
selectare din CSS2 pentru a specifica o culoare de fundalul diferit! n cazul elementului
<student>
avnd atributul matr="4533". Se permite "i specificarea
pseudo-elementelor.
Modul de afi"are a documentului XML utiliznd aceast! foaie de stiluri este ilustrat mai
jos (se observ! formatarea eronat! produs! de IE):
D - 46
Tehnologii Web
Formatarea unui document XML folosind CSS2, n Netscape 6 !i Internet Explorer 5.5
4.6 Viitor
Viit or
n prezent, navigatoarele Web nu suport! dect un set (mai mult sau mai pu#in) restrns
din toate propriet!#ile specificate de recomand!rile CSS1 "i CSS2, cu fiecare nou! versiune
de browser fiind implementate altele noi. De"i nu att de flexibile "i de bogate n facilit!#i,
foile de stiluri CSS pot fi utilizate "i pentru formatarea documentelor XML.
Actualmente, cercet!torii de la Consor#iul Web preg!tesc al treilea nivel - CSS3, cea mai
recent! propunere publicndu-se n luna ianuarie 2001.
D - 47
Tehnologii Web
Tehnologii Web
1. Introducere i caracterizare
Modelul orientat-obiect pentru documente (DOM) reprezint! o interfa#! de
programare a aplica#iilor destinate s! prelucreze documentele HTML "i XML,
independent! de platform! "i de limbaj, definind structura logic! a documentelor "i
modalit!#ile de accesare "i de modificare a lor.
Aceast! structur! logic! este una arborescent!, obiectual!: documentele sunt modelate
utiliznd obiecte, iar modelul nu ofer! doar o vizualizare structurat! a documentului, ci "i o
manier! de specificare a comportamentului lui "i a obiectelor componente. Fiecare element
al unui document poate fi privit, deci, ca un obiect, fiecare obiect avnd identitate "i
propriile sale func#ii. Exact ca "i n modelul obiect din cadrul metodologiei orientate-obiect,
DOM identific!:
lor);
Structura documentelor SGML era n mod tradi#ional reprezentat! de un model de date
abstracte, nu printr-unul orientat-obiect. Astfel, modelul vechi era centrat asupra datelor,
pe cnd n modelul obiect datele sunt ncapsulate n obiecte, ascunse "i/sau protejate de
prelucrarea extern! direct!. Func#iile (metodele) asociate acestor obiecte determin! modul
n care obiectele pot fi prelucrate.
Modelul avut n discu#ie n continuare const! din dou! p!r#i:
E-2
Tehnologii Web
DOM reprezint! un model obiectual care specific! interfe#e "i nu este un set de structuri
de date (abstracte). De asemeni, nu define"te semantica detaliat! pentru HTML sau XML.
Tehnologia COM, ca "i CORBA, reprezint! o modalitate, independent! de limbaj,
de a specifica interfe#e "i obiecte, iar DOM are vedere numai documentele HTML "i XML,
putnd fi implementat, fie folosind COM sau CORBA, fie limbaje precum Java sau
ECMAScript.
E-3
Tehnologii Web
2. Interfee i implementri
n cadrul modelului sunt specificate interfe"e care pot fi ulterior utilizate n prelucrarea
documentelor XML/HTML. Aceste interfe#e sunt abstractiz!ri, similare claselor abstracte
de baz! din limbajul C++, oferind o modalitate de accesare "i de modificare a reprezent!rii
interne a unui document n cadrul unei aplica#ii. Interfe#ele nu implic! o implementare
concret!, particular!, a func#iilor pe care le definesc, fiecare aplica#ie DOM putnd stoca
documentele n oricare reprezentare intern! convenabil!, atta timp ct interfe#ele DOM
sunt suportate. DOM este conceput s! evite dependen#a de implementare.
n cadrul nivelului 1 al modelului s-au limitat inten#ionat anumite func#ionalit!#i. Nivelele
ulterioare, bazate pe DOM Core, vor oferi:
controlul reprezent!rii documentelor prin foi de stiluri (CSS, XSL sau alt
limbaj de specificare a stilurilor);
controlul accesului;
siguran#a n execu#ie;
evenimente.
E-4
Tehnologii Web
3.1 Structura
DOM reprezint! documentele ca o ierarhie de obiecte-nod care la rndul lor pot
implementa alte interfe#e, eventual mai specializate. Anumite tipuri de noduri pot avea
noduri copii (descenden#i) de diverse tipuri, desigur. Altele pot fi noduri frunz!, lipsite de
descenden#i.
Tipurile fundamentale ale nodurilor DOM sunt cele din urm!torul tabel:
Tip
Descenden"i
Document
DocumentFragment
DocumentType
EntityReference
Element
Attr
Text, EntityReference
ProcessingInstruction
Comment
Text
CDATASection
Notation
Entity
n plus, DOM specific! o interfa#! numit! NodeList pentru a procesa liste ordonate de
noduri (precum descenden#i ai unui nod sau elemente returnate de metoda
Element.getElementByTagName()) "i o interfa#! NamedNodeMap pentru liste
neordonate de noduri referite de nume de atribute (numele de atribute sunt numele
E-5
Tehnologii Web
atributelor unui element (marcator) HTML sau XML; e.g. align este atribut al
tag-ului <p>).
n cadrul modelului, NodeList "i NamedNodeMap sunt dinamice, n sensul c! orice
modificare a structurii unui document implic! automat "i reactualizarea tuturor instan#elor
NodeList "i NamedNodeMap, respectiv. Orice schimb!ri ale unui nod al arborelui de
noduri sunt reflectate n toate referin#ele la acel nod n obiectele NodeList "i
MapNodeMap asociate.
E-6
Tehnologii Web
Semnifica"ie
Valoare de index invalid!
INDEX_SIZE_ERR
DOMSTRING_SIZE_ERR
HIERARCHY_REQUEST_ERR
WRONG_DOCUMENT_ERR
INVALID_CHARACTER_ERR
NOT_FOUND_ERR
NOT_SUPPORTED_ERR
E-7
Tehnologii Web
(astfel se pot insera noi tag-uri ntr-un document HTML, a"a cum se
permite n JavaScript de exemplu);
Section(),
createProcessingInstruction() vor genera
Tehnologii Web
Un exemplu:
Presupunem c! avem documentul HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head></head>
<body>
<ul>
<li>Sec#iunea 1</li>
<li>Sec#iunea 2</li>
<li>Sec#iunea 3</li>
</ul>
<hr>
<!-- Sfr"it -->
</body>
</html>
getElementByTagName("*")
arborelui, n preordine.
E-9
va
furniza
toate
nodurile
Tehnologii Web
E - 10
Tehnologii Web
Tipuri DTD
Tipuri DOM
CDATA
DOMString
List! de valori
DOMString
(left|right|center)
Valoare unic!
(noshade)
boolean
Num!r
long int
j. Element este o interfa#! derivnd din Node care ofer! metode de accesare
a obiectelor Attr, prin nume sau prin valoare: getAttribute(),
setAttribute(),
removeAttribute(),
getAttributeNode(),
setAttributeNode(), removeAttributeNode().
E - 11
Tehnologii Web
Interfa"# DOM
HTML
HTMLDocument
HEAD
HTMLHeadElement
META
HTMLMetaElement
BODY
HTMLBodyElement
FORM
HTMLFormElement
UL
HTMLUListElement
OL
HTMLOListElement
DIV
HTMLDivElement
...
...
: Element {
id;
title;
lang;
dir;
className;
E - 12
Tehnologii Web
E - 13
Tehnologii Web
5. DOM nivelul 2
5.1 DOM Core pentru nivelul 2
Nivelul al doilea al modelului de baz! define"te extensii ale interfe#elor nivelului 1,
oferind func#ionalit!#i noi ca posibilitatea de a crea un obiect Document sau de a copia un
nod dintr-un document ntr-altul.
O serie dintre interfe#ele noi propuse n cadrul specifica#iilor preliminare sunt:
a. DOMImplementation2 este extins! cu metodele necesare pentru crearea
unei instan#e a unui document XML:
interface DOMImplementation2 : DOMImplementation {
DocumentType createDocumentType(in DOMString name,
in DOMString publicID,
in DOMString systemID)
raises(DOMException);
Document createDocument(in DOMString name,
in DocumentType doctype)
raises(DOMException);
};
Nodul returnat nu are p!rinte (parentNode este vid). Se creeaz! un obiect nod
apar#innd documentului care l import! cu valorile atributelor identice cu cele ale
nodurilor surs! nodeName "i nodeType. Nodul surs! nu va fi alterat. Nodurile de
tip Entity, Document, DocumentType "i Notation nu pot fi importate.
Parametrul importedNode desemneaz! nodul de importat, iar dac! deep este
true se import! n mod recursiv subarborele avnd ca nod r!d!cin! nodul importat.
DOM Core - nivelul 2 ofer! "i suport pentru spa#iile de nume XML, prin ad!ugarea unor
metode noi la anumite interfe#e. Astfel, Document pune la dispozi#ie
createElementNS(), createAttributeNS() "i getElementsByTagNameNS(),
iar interfa#a Node are ca membri atributele namespaceURI "i prefix. Interfa#a
NamedNodeMap furnizeaz! metodele getNamedItemNS(), setNamedItemNS() "i
removeNamedItemNS() pentru manipularea listelor de noduri pe baza spa#iilor de nume.
De asemeni, Element posed! ca membri metodele getAttributeNS(),
setAttributeNS(),
removeAttributeNS(),
getAttributeNodeNS() "i
setAttributeNodeNS(), plus atributul hasAttributeNS.
E - 14
Tehnologii Web
b.
{
DOMString
boolean
Node
StyleSheet
DOMString
DOMString
MediaList
type;
disabled;
ownerNode;
parentStyleSheet;
href;
title;
media;
interface StyleSheetList {
readonly attribute unsigned long length;
StyleSheet item(in unsigned long index);
};
5.3 Evenimente
Scopurile modelului sunt urm!toarele:
i.
Proiectarea unui sistem generic de evenimente care s! permit!: definirea
activit!#ilor ce vor fi executate la apari#ia unui eveniment, descrierea fluxului de
evenimente printr-o structur! arborescent! "i oferirea unor informa#ii contextuale
E - 15
Tehnologii Web
pentru fiecare eveniment n parte. n plus se doresc: conceperea unui set standard
de evenimente pentru controlul interfe#ei cu utilizatorul "i notificarea modific!rilor
(de structur!) ale documentelor.
ii.
Oferirea unui subset comun al evenimentelor utilizate de navigatoarele
actuale.
Cerin#ele de proiectare:
fluxul de evenimente
Modelul trebuie s! suporte mai multe proceduri de detectare a
evenimentelor asociate unui nod "i s! poat! recep#iona evenimente nainte "i
dup! ce o implementare DOM a procesat un eveniment.
informarea contextual!
Este necesar s! se specifice un mecanism de accesare a informa#iilor
contextuale referitoare la orice eveniment survenit.
tipuri de evenimente
Modelul trebuie s! permit! crearea unor mul#imi de evenimente, diferite de
cele specificate n cadrul DOM. Modelul trebuie n plus s! suporte evenimente
ale interfe#ei cu utilizatorul "i s! defineasc! un set de evenimente privind
modificarea de structur! sau de stil a unui document.
mousedown,
mouseup,
mouseover,
mousemove,
keypress, keydown, keyup, resize, scroll.
mouseout,
interface EventTarget {
void addEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture);
void removeEventListener(in DOMString type,
in EventListener listener,
in boolean useCapture);
};
E - 16
Tehnologii Web
b. EventListener
evenimentelor:
reprezint!
mecanismul
primar
de
manipulare
interface EventListener {
void handleEvent(in Event event);
};
Atributul whatToShow stabile"te tipul de noduri care vor fi returnate de iterator: toate
nodurile
(SHOW_ALL),
elementele
(SHOW_ELEMENT),
texte
(SHOW_TEXT),
noduri-document (SHOW_DOCUMENT) etc.
Filtre
Fiecare filtru con#ine o func#ie scris! de utilizator care determin! ca un nod s! fie filtrat
(disponibil) sau nu. Un filtru este utilizat de un iterator care aplic! filtrul fiec!rui nod.
Dac! filtrul respinge nodul, iteratorul l ignor!, trecnd la urm!torul nod. Filtrele sunt u"or
E - 17
Tehnologii Web
de scris din moment ce nu este necesar a se cunoa"te structura de date asupra c!rora vor
opera. Filtrele pot fi refolosite cu succes "i n cadrul altor interatori.
interface NodeFilter {
// Constante returnate de
const short FILTER_ACCEPT
const short FILTER_REJECT
const short FILTER_SKIP
acceptNode()
= 1;
= 2;
= 3;
Pentru folosirea filtrului, utilizatorul va trebui s!-l instan#ieze "i s! creeze un iterator:
NamedAnchorFilter myFilter;
NodeIterator
iterator = document.createNodeIterator(node,
SHOW_ELEMENT, myFilter);
Interfa"a TreeWalker
Complementar! interfe#ei Iterator, TreeWalker ofer! o prezentare arborescent! a
nodurilor dintr-un subarbore. Navigarea prin nodurile unui document folosind metode
interfe#ei TreeWalker poate utiliza filtre.
interface TreeWalker {
readonly attribute long whatToShow;
readonly attribute NodeFilter filter;
Node current();
Node parentNode();
Node firstChild();
Node lastChild();
E - 18
Tehnologii Web
DOM nivelul 2 define"te "i interfa#a DocumentIF con#innd metode pentru crearea
iteratorilor meni#i s! traverseze - prin metoda depth first search (DFS), pre-ordine - nodurile
unui document XML/HTML.
interface DocumentIF {
short createNodeIterator(in Node root,
in short whatToShow,
in NodeFilter filter);
};
E - 19
Tehnologii Web
E - 20
Tehnologii Web
clase
demonstrative
capabilit!#ilor
SAX,
fapt
aplica#ii
Java:
SystemIdDemo,
ByteStreamDemo,
CharacterStreamDemo
"i
DemoHandler. Aceaste clase nu fac parte din specifica#iile de baz! ale SAX "i pot
E - 21
Tehnologii Web
SAX n C
O implementare gratuit! n limbajul C pentru SAX este cea reprezentat! de libxml
(denumit! "i gnome-xml), o bibliotec! de procesare a documentelor XML conceput! de
Daniel Veillard de la Consor#iul Web, fiind inclus! "i n mediul de dezvoltare GNOME
(GNU Network Object Model Environment) din distribu#ia de Linux RedHat 6 sau
ulterioar!. n fapt, libxml implementeaz! ntreg modelul DOM pentru procesarea
documentelor XML.
Interfa#a cu programatorul se concretizeaz! n existen#a a dou! func#ii C utilizate la
analiza unui document XML (aflat n memorie sau nc!rcat de pe disc):
#include <parser.h>
xmlDocPtr xmlParseMemory(char *buffer, int size);
xmlDocPtr xmlParseFile(const char *filename);
/* documentul XML */
/* arborele asociat */
/* subarbore */
Arborele creat mai sus poate fi salvat pe disc (o func#ie de salvare fiind
void xmlDocDump(FILE *f, xmlDocPtr doc);), eventual compresat n format
gzip. Aceast! manier! este folosit! de aplica#ia gnumeric din GNOME care poate
salva/nc!rca fi"ierele n format XML compresat cu GNUzip.
E - 22
Tehnologii Web
Un exemplu complet
Fie un document XML utilizat pentru stocarea datelor despre aplica#iile de laborator "i
despre studen#i la disciplina "Tehnologii Web":
<?xml version="1.0"?>
<projects year="1999/2000">
<application name="WebTools n XML" id="2">
<category>software</category>
<status>
<update>Mon, 25 Oct 1999 12:27:45</update>
<version>0.23</version>
</status>
<authors>
<person>
<name>Ionu# Gavril!</name>
<email>giangu@infoiasi.ro</email>
<wpage></wpage>
<address></address>
<year>master</year>
</person>
<person>
...
</person>
</authors>
</application>
...
</projects>
E - 23
Tehnologii Web
Implementarea DOM din IE 5 este departe de a fi perfect! "i nici m!car nu se alineaz!
100% recomand!rilor comitetului DOM din cadrul Consor#iului Web, replica Microsoft la
aceasta rezumndu-se la urm!torul proverb: "O c!mil! este un cal proiectat de un comitet"
(Anonim). Microsoft adaug! o serie de extensii care nu sunt prev!zute n specifica#iile
recomand!rii DOM: o modalitate de nc!rcare a documentelor XML, un mecanism de
E - 24
Tehnologii Web
stocare persistent! a arborilor DOM ca fi"iere XML, suportul pentru tipuri de date pentru
elemente "i atribute, transform!ri de foi de stiluri realizate prin intermediul script-urilor,
identificarea erorilor de analiza XML "i capabilit!#i de nc!rcare asincron! a documentelor.
De unde putem "ti c! IE 5 n#elege documente XML? Pur "i simplu putem ncerca s!
nc!rc!m un document XML "i s! vedem dac! l putem vizualiza. Iat! cum arat! un fi"ier
XML n IE 5 (observa#i formatarea diferit! a elementelor XML n compara#ie cu
vizualizarea aceluia"i document n Notepad):
E - 25
Tehnologii Web
Insulele de date vor putea fi identificate prin intermediul atributului id, n cadrul unui
document HTML putnd exista mai multe elemente <xml>. n acest mod, folosind
limbajul JavaScript, putem accesa diverse noduri ale documentului XML, dup! cum se
poate observa n urm!torul exemplu:
<html>
<body>
<xml id="bookxml">
<book vers="draft" author="Sabin-Corneliu Buraga">
<intro>...</intro>
<cap1>
<intro>...</intro>
<continut>...</continut>
<concluzii>...</concluzii>
</cap1>
<cap2>
<intro>...</intro>
<continut>...</continut>
<concluzii>...</concluzii>
</cap2>
E - 26
Tehnologii Web
Dup! cum se remarc!, putem accesa numele, valoarea "i descenden#ii fiec!rui nod al
arborelui asociat unui document XML. Nodurile cu numele speciale #comment "i #text
sunt noduri de tip comentariu "i, respectiv, text.
nlocuind childNodes cu attributes putem consulta atributele corespunz!toare
elementelor unui document.
Folosind metodele definite de interfe#ele DOM putem concepe un exemplu mai
"complex". Dorim s! sort!m o list! de c!r#i, n func#ie de autorii lor. Aceast! list! o vom
considera inclus! ntr-un tabel HTML (putnd la fel de bine fiind stocat! "i pe disc,
ntr-un document XML extern). Codul JavaScript folosit pentru ordonare este urm!torul:
E - 27
Tehnologii Web
E - 28
Tehnologii Web
Dup! ordonarea numelor de autori vom observa cele de mai jos. Ultima coloan! a unui
rnd de tabel nu a fost sortat!, ci doar primele dou!.
L!s!m cititorului sarcina de a vedea de ce.
E - 29
Tehnologii Web
Un exemplu de traversare DFS a ntregului arbore de noduri este cel de mai jos:
<html>
<body onload="start_visit()">
<xml id="bookxml">
<book vers="draft" author="Sabin-Corneliu Buraga">
<intro>...</intro>
<cap1>
<intro>...</intro>
<continut>...</continut>
<concluzii>...</concluzii>
</cap1>
<cap2>
<intro>...</intro>
<continut>...</continut>
<concluzii>...</concluzii>
</cap2>
<!-- mai multe capitole aici -->
<cap9>
<!-- intro, con#inut, concluzii -->
</cap9>
Sfr"it?
</book>
</xml>
E - 30
Tehnologii Web
<script language="JavaScript">
result = "";
// func#ie recursiv! de traversare a tuturor nodurilor
function visit(node)
{
if (node.nodeType == 1) // nodul este un nod Element?
{
result += "<" + node.nodeName + ">";
}
// determin!m num!rul de noduri-copil ale nodului curent
var lenchd = node.childNodes.length;
if (lenchd > 0)
// exist! descenden#i?
{
var i;
for (i = 0; i < lenchd; i++)
{
// apel!m recursiv pentru descenden#i
visit(node.childNodes.item(i));
}
}
}
// func#ia apelat! la nc!rcarea documentului
function start_visit()
{
visit(bookxml.documentElement);
alert(result);
}
</script>
</body>
</html>
Pn! acum ne-am ocupat de prelucrarea arborilor de elemente XML incluse n cadrul
paginilor Web. De cele mai multe ori ns! documentele XML vor fi stocate extern.
Implementarea DOM n Internet Explorer permite nc!rcarea documentelor XML ca
obiecte ActiveX, ntr-o manier! sincron! sau asincron!.
Urm!torul exemplu invoc! analizorul XML al navigatorului pentru a valida un document
aflat pe disc:
<script language="JavaScript">
// instan#iaz! analizorul XML (obiect ActiveX)
var xml = new ActiveXObject("microsoft.xmldom");
// inhib! nc!rcarea asincron!
xml.async = false;
// ncarc! datele XML de pe server
E - 31
Tehnologii Web
xml.load("http://www.infoiasi.ro/xml/students.xml");
// verific! dac! analiza s-a desf!"urat cu succes
if (xml.parseError.reason != "")
alert("EROARE: " + xml.parseError.reason);
else
alert("Elementul r!d!cin! este: " + xml.documentElement.nodeName);
</script>
Dac! dorim ca nc!rcarea documentului s! se realizeze n mod asincron, atunci vom seta
proprietatea async ca true "i vom putea determina gradul de nc!rcare prin intermediul
evenimentului onreadystatechange, scripturile noastre putndu-"i continua activitatea
n timpul nc!rc!rii documentului XML. St!rile procesului de nc!rcare sunt furnizate de
proprietatea readyState "i au valorile:
Valoarea
readyState
Stare
Descriere
UNINITIATED
LOADING
LOADED
COMPLETED
Se poate folosi "i metoda loadXML() pentru a "nc!rca" n maniera inline pentru
procesare a unui fragment de document XML:
<script language="JavaScript">
xmldoc.loadXML("<student name='Anca Avram'><year>4</year></student>");
...
</script>
...
<xml id="xmldoc"></xml>
E - 32
Tehnologii Web
Pentru salvarea unui arbore de noduri DOM ca fi"ier XML sau ca obiect (de exemplu un
obiect Response n ASP), se va utiliza metoda save().
Alte extensii Microsoft la modelul DOM, dar care nu sunt conforme cu recomandarea
Consor#iului Web, sunt cele legate de:
de
<script language="JavaScript">
function query_xml(query)
{
// execut! interogarea
var result = studXML.selectNodes(".//name");
// afi"eaz! fiecare nume de student
for (i = 0; i < result.length; i++)
alert(result.item(i).childNodes.item(0).nodeValue);
}
</script>
de
tip
E - 33
Tehnologii Web
E - 34
Tehnologii Web
Prelucr!rile de documente prezentate mai sus pot fi realizate "i pe partea de server, de
exemplu folosind CGI ori ASP sau utiliznd servlet-uri Java.
Folosind DOM, putem de asemeni s! realiz!m prin intermediul unor script-uri
JavaScript transform!ri XSL, utiliznd foi de stiluri externe ata"ate documentelor XML.
n exemplul de mai jos vom transforma urm!torul document XML ntr-un tabel XHTML
cu date despre studen#i:
E - 35
Tehnologii Web
<students>
<student matr="4533">
<name>Anca Avram</name>
<year>4</year>
</student>
<student matr="4574">
<name>%tefan T!nas!</name>
<year>4</year>
</student>
<student matr="3740">
<name>Radu Filip</name>
<year>3</year>
</student>
</students>
E - 36
Tehnologii Web
Folosind metodele definite de interfe#ele DOM se pot imagina diverse aplica#ii pentru
prelucrarea documentelor XML "i HTML n cadrul paginilor WWW, n manier!
dinamic!, on-line.
Un exemplu complet
Vom construi, pe baza unei foi de stiluri XSL, ntreg documentul HTML incluznd
codul JavaScript pentru prelucrarea datelor, pornind de la un document XML. Lu!m ca
situa#ie concret! managementul informa#iilor dintr-o bibliotec! electronic!. Acest! aplica#ie
Web, utiliznd transform!ri XSL "i manipularea via DOM a datelor XML, a fost conceput!
n mare parte de c!tre studenta Diana B!lan.
Informa#iile referitoare la c!r#ile bibliotecii sunt stocate ntr-un fi"ier XML descris
de urm!toarea schem!:
E - 37
Tehnologii Web
<?xml version="1.0"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="data" dt:type="dateTime"/>
<ElementType
<ElementType
<ElementType
<ElementType
<ElementType
name="titlu" content="textOnly"/>
name="autor" content="textOnly"/>
name="editura" content="textOnly"/>
name="exemplare" content="textOnly"/>
name="stil" content="textOnly"/>
E - 38
Tehnologii Web
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<!-- antetul paginii -->
<head>
<!-- stiluri utilizate -->
<style type="text/css">
BODY { margin:0 }
.bg {
font:8pt Verdana;
background-color:white;
color:black
}
H1 {
font:bold 14pt Verdana;
width:100%;
margin-top:1em
}
.row {
font:8pt Verdana;
border-bottom:1px solid #CC88CC
}
.header {
font:bold 9pt Verdana;
cursor:hand;
padding:2px;
border:2px outset gray
}
.p {font:8pt Verdana}
.roman { background: #DDFFDD;}
.teatru {background: #FFDDDD;}
.stiintifica {background: #FFFFCC;}
.poezii {background: #FFCCFF;}
</style>
</head>
<!-- scriptul sortnd coloanele tabelului
(s-a inclus ntr-un nod comentariu;
pentru a nu avea probleme de procesare XML,
se scrie ca sec#iune CDATA) -->
<script>
<xsl:comment><![CDATA[
function sort(field)
{
sortField.value = field;
// sortare bazat! pe XSL (apel DOM)
listing.innerHTML =
source.documentElement.transformNode(stylesheet);
}
]]>
</xsl:comment>
</script>
<script for="window" event="onload">
<xsl:comment><![CDATA[
stylesheet = document.XSLDocument;
source = document.XMLDocument;
// cmpul dup! care se sorteaz!
sortField =
document.XSLDocument.selectSingleNode("//@order-by");
]]>
E - 39
Tehnologii Web
</xsl:comment>
</script>
<!-- corpul paginii -->
<body>
<table width="100%" cellspacing="0">
<tr>
<!-- omitem o parte din codul HTML -->
<td>
<div id="listing">
<!-- se aplic! "ablonul XSL -->
<xsl:apply-templates match="biblioteca"/>
</div>
<!-- num!rul de c!r#i -->
<div class="p">Nr carti:
<b><xsl:eval>count(this)</xsl:eval></b>
</div>
</td>
</tr>
</table>
<!-- final de pagin! -->
</body>
</html>
</xsl:template>
<!-- "ablonul de afi"are a c!r#ilor -->
<xsl:template match="biblioteca">
<table style="background-color:white">
<!-- antet de tabel -->
<thead>
<td width="200">
<div class="header" onClick="sort('titlu')">
Titlu
</div>
</td>
<td width="200">
<div class="header" onClick="sort('autor')">
Autor(i)
</div>
</td>
<td width="80">
<div class="header" onClick="sort('editura')">
Editura
</div>
</td>
<td width="80">
<div class="header" onClick="sort('exemplare')">
Exemplare
</div>
</td>
<td width="80">
<div class="header" onClick="sort('stil')">
Stil
</div>
</td>
</thead>
<!-- pentru fiecare carte,
ordonat dup! nr. de exemplare -->
<xsl:for-each select="carte" order-by="exemplare">
<tr>
E - 40
Tehnologii Web
E - 41
Tehnologii Web
source.documentElement.transformNode(stylesheet);
}
function count(node)
{
total = 0;
// selecteaz! elementele <carte> folosind DOM
elem = node.selectNodes("/biblioteca/carte");
for (p = elem.nextNode(); p; p = elem.nextNode())
total++;
return formatNumber(total, "#");
}
]]></xsl:script>
</xsl:stylesheet>
ntr-o manier! asem!n!toare putem stoca "i prelucra informa#iile despre clien#ii
bibliotecii. n figura urm!toare se poate vedea lista cititorilor (sorta#i dup! nume),
cu afi"area diferen#iat! a celor care au c!r#i mprumutate.
E - 42
Tehnologii Web
6.3 JDOM
Pentru cei care doresc s! proceseze documentele XML benecifiind de puterea limbajului
Java, Jason Hunter "i Brett McLaughlin au dezvoltat JDOM, interfa#! de programare special
construit! pentru Java. JDOM ofer! interoperabilitatea cu standardele SAX "i DOM, dar
spre deosebire de alte implement!ri exploateaz! facilit!#ile Java (vezi "i capitolul dedicat
applet-urilor "i servlet-urilor Java).
JDOM const! din patru pachete Java:
org.jdom (pachetul principal) define"te clasele pentru reprezentarea
(pentru SAX);
E - 43
Tehnologii Web
Metoda addContent() poate permite inserarea unui grup de elemente XML. Pentru
aceasta vom concepe o clas! derivat! din clasa predefinit! Element cu ajutorul c!reia vom
construi un fragment de document pe care l vom insera ulterior oriunde dorim.
De exemplu, dac! fiecare document XML necesit! prezen#a unui antet con#innd
metadate (proprietar, drepturi de autor etc.) am putea implementa clasa AntetElement
astfel:
public class AntetElement extends Element {
public AntetElement() { // constructor
super("antet");
addContent("proprietar").setText("FCS");
addContent("copyright").setText("1997-2001");
}
}
Pentru a-l ad!uga documentului XML dorit vom scrie (doc fiind o instan#! de
document):
doc.addContent(new AntetElement());
E - 44
Tehnologii Web
Putem astfel folosi apoi metodele lui List pentru manipularea elementelor XML:
// adaug! un element
copii.add(new Element("limbaj");
// adaug! la o anumit! pozi#ie
copii.add(1, new Element("platforma");
// "terge elementul al doilea
copii.remove(2);
// "terge to#i descenden#ii lui <antet>
copii.removeAll(element.getChildren("antet"));
E - 45
Tehnologii Web
De exemplu, pentru a afi"a la ie"irea standard un document XML, fiecare element fiind
indentat cu un spa#iu "i ap!rnd pe o linie distinct! de text, vom putea recurge la codul
de mai jos (doc este o instan#! a clasei Document):
XMLOutputter xmlOut = new XMLOutputter(" ", true);
xmlOut.output(doc, System.out);
Primul parametru al constructorului stabile"te caracterul folosit pentru indentare, iar cel
de-al doilea activeaz! sau dezactiveaz! trecerea la linie nou! dup! fiecare element XML.
Suportul pentru spa"iile de nume
Clasa org.jdom.Namespace este responsabil! pentru reprezentarea "i procesarea
spa#iilor de nume XML.
Pentru ob#inerea unui spa#iu de nume se va folosi getNamespace():
Namespace xlink = Namespace.getNamespace("xlink",
"http://www.w3.org/1999/xlink");
Pentru a insera un element apar#innd unui spa#iu de nume particular putem utiliza
constructor supranc!rcat Element().
Element elLeg = new Element("traversare", xlink);
E - 46
Tehnologii Web
De exemplu, inserarea unei instruc#iuni de procesare PHP (n fapt cod PHP) ntr-un
document XML se realizeaz! astfel:
String codPHP = new String("phpinfo();");
ProcessingInstruction instr =
new ProcessingInstruction("php", codPHP);
doc.addContent(instr);
Acest lucru permite s! introducem n documentele XML sau XHTML script-uri PHP
care ulterior vor putea fi rulate pe serverul Web.
E - 47
Tehnologii Web
7. Concluzii
n luna noiembrie 2000, s-a dat publicit!#ii recomandarea DOM 2 Core, care n viitor va
fi adoptat! de comunitatea de programatori "i designeri Web. DOM nivelul 1 este
implementat deja de navigatoarele Web actuale, ca "i de o serie de analizatoare XML
elaborate n limbajele C, C++ "i Java. n plus, s-a dezvoltat un model DOM destinat
prelucr!rii documentelor SMIL.
Recomand!rile DOM ofer! n ntregime interfe#ele standard proiectate n Java "i
ECMAScript, independente de platformele hardware "i software, fiind utile programatorilor
de aplica#ii destinate proces!rii avansate a documentelor XML sau HTML.
Avnd n vedere dezvoltarea pronun#at! a tehnologiilor bazate pe XML, modelul DOM
devine, cu att mai mult, atractiv pentru dezvoltatorii de aplica#ii Internet. O implementare
de viitor este JDOM, un model de procesare a documentelor XML special conceput pentru
programatorii n limbajul Java.
E - 48
Tehnologii Web
"A nv#"a s# comunici cu calculatorul poate schimba modul n care nve"i alte lucruri."
(Seymour Papert)
Tehnologii Web
1. Modele i metodologii
Cre"terea masiv! a num!rului de servicii "i produse Web este dat! de utilizarea unui tot
mai bogat con#inut informa#ional: imagini, video "i sunet.
Combinarea "i integrarea acestor medii formeaz! multimedia, utilizat! pe scar! larg! n
reprezentarea "i interschimbarea informa#iilor. Diverse obiecte/documente multimedia
incluznd hiperleg!turi definesc conceptul de hipermedia.
Hipermedia "i g!se"te utiliz!ri n variate domenii ca:
F-2
Tehnologii Web
Cele 7 rela#ii se numesc: before, meets, overlaps, during, starts, finishes, equals.
F-3
Tehnologii Web
Se poate utiliza "i modelul cu rela#ii bazate pe instantanee de timp. Date dou! momente
de timp, exist! 3 rela#ii mutual exclusive: nainte de - before (<), simultan cu - simultaneous to (=)
"i dup! - after (>).
Exist! "i modelul hibrid, bazat pe ambele abord!ri de mai sus: obiectele sunt modelate ca
intervale temporale (continue), iar momentele de timp de nceput/sfr"it ale obiectelor sunt
considerate punctuale.
Rela"ii bazate pe punctele de sfr!it
Rela#iile lui Allen acoper! toate posibilele rela#ii dintre dou! intervale de timp, putnd
descrie ce s-a ntmplat ntre dou! intervale temporale n trecut (dup! ce execu#ia celor
dou! obiecte corespunz!toare intervalelor de timp s-a ncheiat). Dezavantajul este c! aceste
rela#ii nu pot specifica n viitor ceea ce s-ar putea ntmpla. De exemplu, n rela#ia pa overlaps
pb, pb nu poate ncepe n cadrul intervalului pa dac! punctul de sfr"it al lui pa este
necunoscut.
Modelul care trebuie luat n considera#ie trebuie s! foloseasc! "i valori discrete de timp.
Exist! 12 rela#ii ntre 4 puncte (start "i end) ale dou! intervale temporale. De observat c!
avem dou! rela#ii implicite care sunt ndeplinite ntotdeauna: a.start<a.end "i
b.start<b.end.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
a.end<b.start
a.end=b.start
a.end>b.start
a.start<b.end
a.start=b.end
a.start>b.end
a.start<b.start
a.start=b.start
a.start>b.start
a.end<b.end
a.end=b.end
a.end>b.end
Putem restrnge rela#iile de mai sus, considernd doar zece dintre ele. Astfel avem:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
a.end<=b.start
a.end>b.start
a.start<b.end
a.start=b.end
a.start<b.start
a.start=b.start
a.start>b.start
a.end<b.end
a.end=b.end
a.end>b.end
De notat c! rela#iile nu sunt mutual exclusive, cum erau rela#iile lui Allen. Tabelul de
implica#ii ale acestora este urm!torul:
F-4
Tehnologii Web
Pentru (a
numesc perechi.
StartSync
b) "i (a
F-5
EndSync
b), a "i b se
Tehnologii Web
(b SerialLink a) == a.start=b.end
noduri de tip end care con#in unul/mai multe puncte de end ale vrfurilor
din MRG.
F-6
Tehnologii Web
b.
c.
d.
pentru a ad!uga (a
de la ae la be "i de la be la ae.
EndSync
F-7
Tehnologii Web
obiect m#rginit
Timpii de nceput "i de sfr"it ai evolu#iei obiectului sunt cunoscu#i. De
exemplu, texte sau imagini avnd atributul ttl specificat, resurse video sau
audio pre-nregistrate etc. Vom denumi obiectele audio/video continue,
iar obiectele text/imagine discrete.
obiect neterminat
Timpul de start al unui obiect este cunoscut, dar timpul de sfr"it nu.
obiect nepredictibil
Obiect care poate fi nceput de o hiper-leg!tur! "i terminat de alta.
F-8
Tehnologii Web
Dac! timpul de via#! a unui obiect expir! nainte de sfr"itul lui natural, obiectul va
trebui oprit. Ce se ntmpl! cu obiectul n tranzi#ia dintre starea de terminare "i cea de
dezactivare? n cazul unui obiect discret, r!mne pe ecran pn! la dezactivare. Pentru un
obiect video, ultimul cadru persist! pe ecran, iar n cazul unui obiect audio, "i p!streaz!
componentele vizuale (e.g. controlul volumului), dac! exist!, vizibile. Acest comportament
este, ns!, dependent de implementare.
Activarea unui obiect a este guvernat! de regulile:
1. p!rin#ii lui a "i p!rin#ii perechilor EndSync sunt dezactiva#i "i pentru fiecare
b, cu (a StartSync b), p!rin#ii lui b "i to#i p!rin#ii perechilor EndSync sunt
dezactiva#i.
2. a "i toate perechile sale StartSync intr! n starea activat, dac! regula 1. este
satisf!cut!.
Dezactivarea unui obiect a respect! regulile:
1.
F-9
Tehnologii Web
F - 10
Tehnologii Web
Modelul prezentat se preteaz! pentru realizarea unui sistem de proiectare "i prezentare
multimedia, folosind un limbaj de marcare care s! permit! sincronizarea. Modelul formal
bazat pe rela#ii temporale poate fi utilizat "i n cadrul procesului de planificare a prezent!rii.
F - 11
Tehnologii Web
F - 12
Tehnologii Web
n dou! zone de pe ecran vor fi afi"ate dou! resurse: un film nc!rcat de pe un server
aflat la distan#! (care va dura 2 minute "i va fi repetat de dou! ori) "i un film luat de pe
serverul local (cu o durat! de 30 de secunde).
Tag-ul <layout> poate con#ine defini#ii ale mai multor regiuni de ecran
(prin <region>) sau a unui aranjament general, utilizat de toate celelalte elemente
(folosind <root-layout>).
O regiune de document poate avea fixat un fundal (cu atributul background-color),
o zon! de ecran, n pixeli (atributele top, left, height, width), un identificator
unic (atributul obligatoriu id), o manier! de ncadrare a obiectului multimedia pe care l va
con#ine: scalare, decupare, derulare (atributul fit).
F - 13
Tehnologii Web
<par>
<audio id="a" begin="6s" src="audio/music.rm" />
</par>
sincronizare soft (fiecare copil al tag-ului <par> are propriul lui ceas,
care ruleaz! independent de ceasurile altor copii prezen#i n acela"i tag <par>).
Intervalul de timp poate fi specificat astfel: 03:40:10 (3 ore, 40 de minute "i 10 secunde),
01:33 (o or! "i 33 de minute), 15min, 39s, 5ms, 0.05s etc.
Pornirea, oprirea sau evolu#ia unei prezent!ri pot fi influen#ate de un eveniment ca
"begin", "end" sau "valoare de timp".
Astfel, putem specifica urm!toarele:
<par>
<audio id="voice" begin="6s" src="voce.rm" />
<video begin="id(voice)(15s)" src="interviu.rm" />
</par>
F - 14
Tehnologii Web
Pot fi folosite pentru ambele elemente <par> "i <seq> atribute ca:
obiect,
Aceste atribute se pot reg!si "i n cadrul tag-urilor de specificare a fiec!rei resurse
multimedia incluse n documentul SMIL.
Desigur, elementele <seq> "i <par> pot fi imbricate, conducnd la prezent!ri
multimedia cu sincroniz!ri complexe.
Un exemplu de repetare a unui fi"ier audio "i a unei imagini afi"ate n paralel:
<par repeat="4">
<audio src="tada.wav" />
<img src="logo.jpg" />
</par>
Modelul sincroniz#rii
Pentru fiecare element implicat n sincronizare se definesc ni"te valori de timp de
nceput, sfr"it "i durat! a rul!rii unui obiect multimedia:
1.
2. fiecare element poate avea asignat un timp de nceput explicit (explicit begin)
prin atributul begin. Se consider! eroare dac! timpul de nceput explicit este mai
mic dect cel implicit.
3.
Tehnologii Web
10. durata efectiv! este calculat! f!cnd diferen#a dintre timpul de sfr"it efectiv
"i cel de nceput efectiv.
n specifica#ia SMIL se prezint! in extenso cum sunt calcula#i to#i ace"ti timpi.
system-bitrate
system-captions
system-language
system-overdub-or-caption
system-screen-size
system-screen-depth
F - 16
Tehnologii Web
Exemple:
<switch>
<audio src="pinkfloyd/thewall-better_quality"
system-bitrate="16000" />
<audio src="pinkfloyd/thewall-poor_quality"
system-bitrate="8000" />
</switch>
<switch>
<video src="conference/opening_fr"
system-language="fr, en, it" />
<audio src="conference/opening_ro"
system-language="ro" />
</switch>
<par>
<audio src="vangelis/spiral.rm" />
<switch>
<par system-screen-size="1280X1024"
system-screen-depth="16">
<video src="vangelis_hires/" />
<img src="vangelis_hires.jpg" begin="10s" />
</par>
<par system-screen-size="640X480"
system-screen-depth="8">
<img src="vangelis_lores.jpg" />
</par>
</switch>
</par>
F - 17
Tehnologii Web
"new"
Prezentarea resursei destina#ie ncepe ntr-un nou context (de exemplu ntr-o nou!
fereastr!), f!r! a afecta prezentarea curent! (ambele se desf!"oar! independent);
"pause"
Prezentarea curent! este oprit! "i prezentarea destina#ie (nou nc!rcat!) este
nceput! ntr-un nou context. La terminarea acesteia din urm!, prezentarea ini#ial! "i
va continua rularea.
Un exemplu:
Prezentarea A
<a href="http://www.undeva.ro/prezentareaB#next">
<video src="video.rm" />
</a>
Prezentarea B (aflat! la adresa http://www.undeva.ro/prezentareaB)
<seq>
<video src="video.rm" />
<par>
<video src="videos/1" region="window1" />
<video src="videos/2" region="window2" id="next" />
<a href="http://www.altundeva.ro" show="pause">
<text src="title.html" region="titles" />
</a>
</par>
</seq>
divizarea n cuante de timp a unui obiect, folosind atributele begin "i end
(valorile acestora sunt relative la nceputul obiectului respectiv).
Un exemplu n care durata unui film este mp!r#it! n dou! subintervale de timp, cte o
leg!tur! diferit! fiind asociat! fiec!rui subinterval:
<video src="http://www.infoiasi.ro/fct99/opening">
<anchor href="http://www.infoiasi.ro/fct99/text/discurs.txt"
begin="0s" end="50s" />
<anchor href="http://www.infoiasi.ro/fct99/text/traducere.txt"
begin="51s" end="2min" />
</video>
F - 18
Tehnologii Web
Utiliznd aceast! facilitate, pot fi create imagini senzitive (ca h!r#ile de coordonate
din HTML) "i leg!turi temporale (dinamice).
O alt! exemplificare este urm!toarea:
<par>
<img src="fcs-logo.jpg" dur="12s">
<anchor href="salut.jpg" begin="0s" end="5s" />
<anchor href="pa.jpg" begin="5s" end="9s" />
</img>
<text src="welcome.txt" dur="10s" begin="1s" />
</par>
F - 19
Tehnologii Web
2.6 Implementri
Cu toate c! SMIL este un limbaj de specificare tn!r "i n continu! dezvoltare, deja exist!
implementate unelte de creare a documentelor SMIL: GRiNS, TAG Editor 2.0, VEON,
plus agen#i utilizator (navigatoare): GRiNS, Helio Barbizon, HPAS, Real G2, Works Lp player
etc. Validarea unui document SMIL se poate realiza cu Validator. De asemeni sunt
disponibile "i o serie de biblioteci de procesare a documentelor SMIL, dintre care poate fi
amintit! PerlySMIL, o colec#ie de module Perl.
Din p!cate player-erele actuale nu suport! n ntregime specifica#iile SMIL "i de cele mai
multe ori sunt incompatibile ntre ele, autorii trebuind s!-"i testeze prezent!rile multimedia
pe mai multe platforme.
F - 20
Tehnologii Web
F - 21
Tehnologii Web
Dup! cum se observ!, fi"ierul surs! SMIL va fi reprezentat asemeni unui arbore de
noduri, utilizatorul avnd posibilitatea inser!rii sau "tergerii de elemente SMIL, fie prin
intermediul unui meniu contextual activat la ap!sarea butonului drept al mouse-ului, fie din
meniul principal al programului. De asemeni, propriet!#ile (atributele) elementelor SMIL
pot fi consultate sau modificate folosind o alt! fereastr!.
F - 22
Tehnologii Web
F - 23
Tehnologii Web
F - 24
Tehnologii Web
F - 25
Tehnologii Web
F - 26
Tehnologii Web
beginWith
(start sincronizat);
permite
temporizarea
relativ!
dintre
elemente
Prezent!rile paralele vor avea loc n cadrul noului marcator par care se comport! similar
celui din SMIL. Pentru prezent!ri secven#iale exist! seq.
F - 27
Tehnologii Web
Prezentarea celor trei imagini va dura la infinit, fiecare imagine fiind vizibil! timp
de 2 secunde.
b.
Avem dou! prezent!ri, prima compus! dintr-un text "i o imagine, durnd 10
secunde, a doua compus! din dou! paragrafe text, ncepnd cu 2 secunde mai trziu
dect prima.
F - 28
Tehnologii Web
4. Efecte multimedia n
Internet Explorer 5.5
Ap!rut recent, navigatorul Internet Explorer 5.5 aduce cteva facilit!#i interesante pentru
dezvoltatorii de pagini WWW, dintre care pot fi enumerate ata"area de filtre vizuale,
realizarea de prezent!ri multimedia sincronizate sau crearea de componente hipertext cu
semantici stabilite de programatorii Web, suportul pentru foile de stiluri XSL "i schemele
XML "i altele. Despre o parte dintre acestea vom discuta n continuare.
Fiind introduse prin propriet!#i CSS, filtrele vor putea fi ata"ate unui grup de elemente,
folosind mecanismul foilor de stiluri, dar ele nu vor putea fi utilizate pentru palete cu mai
pu#in de 256 de culori "i pentru tag-urile <embed>, <applet>, <object>, <option>,
<select> sau pentru elementele de tabel (i.e. <table> ori <tr>). De asemeni, filtrele
vor fi ignorate dac! apar specificate pentru elemente pozi#ionate aflate n cadrul unor
elemente nepozi#ionate. Astfel, vom specifica inutil o proprietate filter pentru tag-ul
<span> n cadrul unei construc#ii de genul:
<div>
...
<span style="top: 30; left: 60">
...
</span>
...
</div>
A"adar, filtrele vor putea fi aplicate numai elementelor posednd o form! de afi"are - un
layout de afi"are creat, de exemplu, prin specificarea atributelor de n!l#ime (height) "i de
l!#ime (width) ori avnd pozi#ionare absolut! n cadrul ferestrei navigatorului.
Iat! pentru nceput setarea gradului de opacitate pentru o imagine, folosind filtrul Alpha:
F - 29
Tehnologii Web
<div align="center">
<img src="the-wall.jpg" />
<h5>Imaginea originala</h5>
<img src="the-wall.jpg"
style=
"filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20)"
/>
<h5>Imaginea opac!</h5>
</div>
Efectul acestui filtru este prezentat mai jos (desigur, vizualizat cu Internet Explorer 5.5
sau o versiune superioar!):
ncerca#i acest exemplu, nlocuind filtrul Alpha cu Blur care determin! nce#o"area
par#ial! a imaginii:
<img src="the-wall.jpg"
style=
"filter:progid:DXImageTransform.Microsoft.Blur(strength=10)"
/>
Pentru a transforma (a desatura) o imagine color ntr-una pe tonuri de gri vom putea
folosi filtrul BasicImage cu parametrul grayscale=1. Acest filtru este responsabil "i pentru
realizarea efectului de negativ asupra unei fotografii, dup! cum se poate observa din
exemplul urm!tor:
<img src="the-wall.jpg"
style=
"filter:progid:DXImageTransform.Microsoft.BasicImage(invert=1)"
/>
F - 30
Tehnologii Web
F - 31
Tehnologii Web
Utilizarea unor grade diferite de transparen"# asupra unor elemente HTML suprapuse
Pentru efectuarea de prelucr!ri precum rotiri sau afi"!ri n oglind! putem utiliza filtrul
BasicImage mpreun! cu propriet!#ile rotation "i mirror, respectiv. Iat! un exemplu de
folosire pentru un text "i pentru o figur!:
<div style="height:100; width:100;
font-size:40pt; font-family: sans-serif;
filter:
progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"
>
Rotind textul...
</div>
<img src="the-wall.jpg" align="right"
style="filter:
progid:DXImageTransform.Microsoft.BasicImage(mirror=1)"
/>
F - 32
Tehnologii Web
Desigur, mai pot fi folosite filtrele Wave, DropShadow, Glow, Chroma, Light, familiare
tuturor utilizatorilor aplica#iilor de prelucrare grafic!.
Iat! un exemplu mai complex, constnd din aplicarea mai multor filtre asupra acelea"i
imagini:
<img src="the-wall.jpg"
style="filter:
progid:DXImageTransform.Microsoft.Wave(strength=74)
progid:DXImageTransform.Microsoft.MotionBlur(speed=10)
progid:DXImageTransform.Microsoft.BasicImage(invert=1)"
/>
F - 33
Tehnologii Web
F - 34
Tehnologii Web
Fiecare obiect filter are o serie de propriet!#i "i metode comune tuturor filtrelor:
tranzi#ia;
Din acest exemplu, putem remarca utilizarea filtrelor "i pentru text "i folosirea altei
categorii de filtre, a"a-numitele filtre de tranzi#ie sau de anima#ie. Aceast! categorie include
CheckerBoard, Blinds, Iris, Barn, Strips, RandomBars "i RandomDissolve.
Toate aceste tranzi#ii pot fi utilizate n conjunc#ie cu filtrele vizuale, static sau dinamic.
Colec#iile de filtre pot fi manipulate prin intermediul propriet!#ii filter, astfel putnd
ad!uga noi filtre la cele vechi:
<div id="odiv" style="height:150; width:250;
filter:
progid:DXImageTransform.Microsoft.Wave(strength=100)"
>Formidabili?</div>
...
<script type="text/javascript">
...
odiv.style.filter +=
"progid:DXImageTransform.Microsoft.Iris
(irisstyle='STAR',duration=4)"
...
</script>
Atunci cnd modific!m colec#ia de filtre pentru un anumit element, este recomandabil ca
nainte de aceast! ac#iune s! dezactiv!m filtrele prin setarea propriet!#ii enabled ca
false, iar apoi s! le reactiv!m.
mpreun! cu filtrele, poate fi utilizat! "i proprietatea CSS zoom care seteaz! modul de
afi"are a unor elemente HTML. Astfel, putem modifica maniera de afi"are a unor grupuri
de tag-uri prin:
F - 35
Tehnologii Web
<img src="the-wall.jpg"
onMouseOver="this.style.zoom='50%';
this.style.filter=
'progid:DXImageTransform.Microsoft.BasicImage(invert=1)'"
onMouseOut="this.style.zoom='normal';
this.style.filter=
'progid:DXImageTransform.Microsoft.BasicImage(invert=0)'"
/>
Filtrele, mai ales cele de tranzi#ie, pot fi utilizate pentru efectuarea de anima#ii similare
tranzi#iilor de slide-uri PowerPoint, a"a cum se poate remarca n exemplul de mai jos:
<html>
<head><title>Animatii</title>
<script language="JavaScript" type="text/javascript">
var fRunning = 0
function startTrans()
{
if (fRunning == 0) // dac! filtrul nu ruleaz!, se va lansa...
{
fRunning = 1;
imgID.filters.item(0).apply();
imgID.src = "final-cut.jpg";
imgID.filters.item(0).play();
}
}
</script>
<script for="imgID" event="onFilterChange">
fRunning = 0
</script>
</head>
<body bgcolor="white" text="black">
<img id="imgID" src="the-wall.jpg"
style="filter:progid:DXImageTransform.Microsoft.Fade(duration=5)"
onclick="startTrans()" />
<h4>Ap!sa#i imaginea pentru a ncepe anima#ia...
</body>
</html>
Un filtru atunci cnd "i ncheie activitatea sau cnd tranzi#ia se termin! va genera
evenimentul onFilterChange. Captnd acest eveniment putem aplica secven#ial mai
multe filtre asupra aceluia"i tag HTML. Astfel, putem cicla la diferite momente de timp o
serie de filtre, iar la cerere sau automat s! oprim tranzi#ia prin intermediul
metodei stop().
Pute#i experimenta alte tipuri de tranzi#ii, substituind de exemplu Fade cu Blinds "i setnd
parametrul Duration=3.3.
Aceste tranzi#ii pot fi utilizate nu neap!rat n cadrul scripturilor, ci pentru a realiza
diverse efecte ntre nc!rc!rile unor pagini Web diferite n fereastra navigatorului. Pentru
aceasta, n antetul documentului HTML putem include ntr-un element <meta>
urm!toarele:
<meta http-equiv="Page-Enter"
content="progid:DXImageTransform.Microsoft.Blinds(Duration=3)"
/>
F - 36
Tehnologii Web
<meta http-equiv="Page-Exit"
content="progid:DXImageTransform.Microsoft.Barn
(orientation='horizontal', motion='in')") />
Prima construc#ie va realiza aplicarea filtrului Blinds la nc!rcarea paginii (la apari#ia
evenimentului Load), iar a doua va cauza rularea filtrului Barn atunci cnd utilizatorul va
p!r!si pagina (la evenimentul Unload). n loc de "Page-Enter" "i "Page-Exit" pot fi
utilizate valorile "Site-Enter" "i, respectiv, "Site-Exit".
Nu ntotdeauna ns! aceste filtre vor func#iona corespunz!tor, probabil datorit! unei
scame a navigatorului.
Probleme de utilizare a filtrelor
Anumite filtre (e.g. Shadow, Compositor, DropShadow, Glow sau Mask) vor func#iona adecvat
numai dac! sunt aplicate asupra unor elemente transparente. Textul f!r! culoare sau
imagine de fundal se consider! a fi transparent. Imaginile trebuie s! fie n formatul GIF89a
avnd setat! o culoare de transparen#!.
Trebuie s! avem n vedere faptul c! aplicnd repetat filtre sau folosind un num!r mare
de filtre n cadrul paginilor Web, asupra unor imagini de dimensiuni mari, vom ncetini
procesul de afi"are a con#inutului acelor documente. Este inutil s! modific!m o serie de
propriet!#i ale unui filtru dup! ce elementul avnd ata"at acel filtru a fost deja afi"at de
navigator, deoarece schimb!rile nu vor putea fi observate dect renc!rcnd sau
remprosp!tnd con#inutul acelei pagini.
Filtrele de tranzi#ie ruleaz! asincron, deci proiectan#ii de pagini Web trebuie s!
urm!reasc! fiecare stare a tranzi#iilor din cadrul documentului prin intermediul
evenimentului onFilterChange pentru a determina terminarea unei tranzi#ii particulare.
nc!rcarea imaginilor con#inute de o pagin! Web se realizeaz! tot n mod asincron, deci
starea vizual! final! a acestora nu se va putea reactualiza dect atunci cnd ele vor fi
nc!rcate complet. Filtrele de tranzi#ie pot urma oric!rui filtru static n cadrul "irului de filtre
desemnat de proprietatea filter. Dac! se dore"te ca tranzi#ia s! fie aplicat! global asupra
mai multor obiecte, este mai bine ca acestea s! fie grupate ntr-un element de tip <span>
sau <div> "i filtrele s! fie ata"ate acestuia.
Filtrele prezentate mai sus sunt n fapt controale DirectX ncorporate n Internet
Explorer 5.5, iar programatorii "i pot ad!uga propriile filtre urmnd indica#iile DirectX
Media SDK. Utilizarea unor filtre particulare se va face n maniera urm!toare:
<element style="filter:
progid:Companie.tip_filtru.nume_filtru
(propriet!#i)"
>
F - 37
Tehnologii Web
Exemple
a.
<html xmlns:t="urn:schemas-microsoft-com:time">
<head>
<style type="text/css">
.time { behavior: url(#default#time2); }
</style>
<?IMPORT namespace="t" implementation="#default#time2" ?>
</head>
<body>
<p>Vor urma cteva linii mai jos...</p>
<!-- Imaginea va fi afi"at! dup! 2 secunde -->
F - 38
Tehnologii Web
F - 39
Tehnologii Web
F - 40
Tehnologii Web
Exemplu
Urm!torul exemplu, rulnd sub Internet Explorer 5 sau superior, ilustreaz! ad!ugarea
unui comportament la un tag definit de utilizator pentru realizarea efectului de clipire a
elementului <blink> prezent n Netscape Communicator.
Vom defini o component! stocat! n fi"ierul blink.htc a c!rei ac#iune va fi realizarea
efectului de clipire:
<public:component name="blink">
<public:property name="speed" />
<public:method name="doBlink" />
<public:attach event="oncontentready" handler="Init" />
<script type="text/javascript">
// codul JavaScript pentru clipire
// adaptat dup! InsideHTML.com
// metoda de clipire
function doBlink() {
this.style.visibility = this.style.visibility == "" ? "hidden" : ""
}
// func#ia de ini#ializare apelat! la apari#ia
// evenimentului oncontentready
function Init() {
// dac! nu este specificat! viteza de clipire...
if (!speed)
speed = 1000 // atunci va clipi din secund! n secund!
setInterval(uniqueID + ".doBlink()", speed)
}
</script>
</public:component>
F - 41
Tehnologii Web
Putem specifica, prin atributul speed, "i viteza de clipire definit! n cadrul componentei
ca proprietate. Astfel, n corpul paginii, vom scrie:
<blink speed="2000">
Acest text clipe"te cu viteza de 2 secunde...
</blink>
n acest mod putem defini propriile noastre elemente pe care s! le folosim ulterior n
cadrul paginilor Web.
Dac! n Internet Explorer 5.0, componentele hipertext erau convertite n documente
HTML interne care apoi erau procesate de navigator, conducnd la diminuarea vitezei de
nc!rcare, n Internet Explorer 5.5 acestea pot fi declarate "u"oare", navigatorul opernd o
serie de optimiz!ri interne n vederea proces!rii mai rapide. La fel se ntmpl! "i cu
mecanismul de cadre (frames) care a fost rescris n ntregime.
F - 42
Tehnologii Web
4.4 Concluzii
Am putut vedea n cele de mai sus o serie dintre nout!#ile aduse de Internet Explorer
5.5, mai ales n domeniul hipermediei, utile pentru designerii Web care pot beneficia, de
acum ncolo, de facilit!#i care pn! acum erau posibile doar utiliznd aplica#ii externe
(e.g. Macromedia Flash) sau script-uri sofisticate.
F - 43
Tehnologii Web
Tehnologii Web
Trebuie f!cut!, de la nceput, distinc#ia clar! dintre un script "i o aplica#ie Web.
Un script, n oricare limbaj ar fi scris, reprezint! numai un mic utilitar, f!r! a fi "con"tient"
de existen#a altor scripturi n sistem sau de contextul rul!rii. O aplica"ie, n cazul nostru Web,
este conceput! pentru a executa o serie de activit!#i (ac#iuni) avansate, interac#ionnd cu
utilizatorul "i, de cele mai multe ori, con#innd un set complex de scripturi.
Pentru a u"ura munca dezvoltatorului de aplica#ii complexe, exist! disponibile o serie de
servere de aplica#ii Web, dintre care vom descrie, n cadrul acestui capitol, PHP "i ASP.
G-2
Tehnologii Web
Cele mai multe script-uri CGI sunt concepute pentru a procesa datele introduse n
formulare. Un formular se define"te n HTML folosindu-se tag-uri specifice pentru afi"area
con#inutului "i introducerea datelor de c!tre client (a"a cum am v!zut n capitolul dedicat
limbajului HTML), iar script-ul CGI, executat de server, va prelua con#inutul acelui
formular "i-l va prelucra, returnnd, eventual, rezultatele.
Antetul trimis serverului de c!tre programul CGI va respecta specifica#iile MIME,
con#innd de exemplu Content-type: text/html (document HTML) sau
Content-type: image/jpeg (imagine JPEG) ori Content-type: text/plain
(text obi"nuit).
Programului CGI i se vor transmite n diverse variabile de mediu sau de la intrarea
standard informa#ii referitoare la datele de procesat sau la clientul care a ini#iat cererea (de
exemplu, SERVER_PORT, REQUEST_METHOD, SCRIPT_NAME, QUERY_STRING,
REMOTE_HOST etc.) n func#ie de metoda de transfer utilizat!.
G-3
Tehnologii Web
Variabile de mediu specifice cererilor care vor fi transmise spre programul CGI:
SERVER_PROTOCOL d! numele "i versiunea protocolului de
din URL-ul care refer! scriptul CGI, informa#ii care vor trebui decodificate
de acel script.
autentificarea utilizatorilor.
REMOTE_IDENT furnizeaz! identitatea clientului care a formulat
de client.
Suplimentar, liniile antet (dac! exist!) recep#ionate de la client prin intermediul
protocolului HTTP vor fi plasate n variabile de mediu avnd numele prefixate de HTTP_.
Serverul poate exclude liniile antet deja procesate, precum Authorization,
Content-type sau Content-length.
G-4
Tehnologii Web
formulat
Urm!torul script Perl va afi"a toate variabilele de mediu la care are acces prin intermediul
interfe#ei CGI:
#!/usr/bin/perl
# Afi"eaz! mediul
print "Content-type: text/plain\n\n";
print "Environment:\n\n";
foreach $key (keys %ENV) {
printf "%16s = %s\n", $key, $ENV{$key};
}
Variabila predefinit! ENV este un tablou asociativ con#innd perechile (nume de variabila
de mediu, valoarea variabilei).
Un script CGI similar, elaborat n bash (Bourne Again Shell) este:
#!/bin/bash
# Afi"eaz! mediul
echo "Content-type: text/plain"
echo
set
G-5
Tehnologii Web
Un alt exemplu, de script bash folosit pentru nregistrarea ntr-un fi"ier a participan#ilor
la Colocviul studen#esc de informatic! InfoJunior, program conceput de Mirela Petrea
(am omis prezentarea formularului HTML):
#!/bin/bash
# Se
echo
echo
# Se
echo
echo
echo
echo
echo
echo
G-6
Tehnologii Web
De exemplu, introducnd numerele 7 "i 4 "i ac#ionnd butonul etichetat "Afl! maximul",
vom primi o pagin! Web care va afi"a textul "Maximul dintre 7 "i 4 este num!rul 7"
(vezi figurile de mai jos n care localhost reprezint! serverul www.infoiasi.ro).
G-7
Tehnologii Web
G-8
Tehnologii Web
G-9
Tehnologii Web
G - 10
Tehnologii Web
/* antetul HTML */
printf("<html>\n<head><title>Rezultat</title></head>\n");
/* corpul documentului */
printf("<body bgcolor=\"white\" text=\"black\">\n");
/* proceseaz! datele */
data = getenv("QUERY_STRING");
if (data == NULL)
printf("<p>Eroare la procesarea datelor!\n");
else
if(sscanf(data, "nr1=%ld&nr2=%ld", &nr1, &nr2) != 2)
printf("<p>Eroare! Datele trebuie s! fie numerice!\n");
else
printf("<p>Maximul dintre %ld "i %ld este num!rul %ld.\n",
nr1, nr2, (nr1 < nr2) ? nr2 : nr1);
/* terminare */
printf("</body>\n</html>\n");
return 0;
}
Obligatoriu, nainte de a fi expediate alte informa#ii spre client, scriptul CGI va trebui
s! trimit! linia Content-type n care se va specifica, folosindu-se tipurile MIME, ce tip de date
va primi navigatorul Web (un CGI poate trimite nu numai documente sau fragmente de
documente HTML, ci orice altceva: imagini GIF sau JPEG, text obi"nuit, arhive ZIP etc).
Conform protocolului HTTP, ntre cmpul Content-type "i restul informa#iilor trebuie l!sat!
o linie vid!, de aceea am introdus dou! caractere "\n".
Programul, dup! compilare, va trebui plasat (n cele mai multe situatii) n directorul
cgi-bin al serverului Web. Pentru a putea fi accesat, va fi necesar s! poate fi executat de
proprietar (de obicei utilizatorul special nobody n Unix), de grup "i de al#ii (drepturile 755
n Unix).
Dup! instalarea scriptului, orice utilizator din Internet (dac! nu sunt impuse restric#ii de
c!tre administratorul Web) l va putea accesa "i executa prin intermediul unui formular
HTML. Astfel, scriptul va trebui s! fie capabil s! proceseze orice tip de dat! "i s! semnaleze
posibilele erori. De asemeni, orice script CGI va trebui s! nu permit! accesarea de date
confiden#iale de pe ma"ina pe care ruleaz!, administratorul Web trebuind s! ia m!surile
necesare de securitate.
Procesarea unui formular prin metoda POST
S! presupunem c! avem situa#ia urm!toare: este necesar ca prin intermediul unui
formular s! prelu!m de la utilizator o linie de text care va fi trimis! unui script CGI s! o
adauge la sfr"itul unui fi"ier stocat pe server. Acest fi"ier va putea fi modificat doar de
c!tre autorul formularului "i de c!tre script "i va putea fi citit de c!tre oricine altcineva prin
intermediul unui alt script.
Dac! n exemplul anterior realiz!m numai o simpl! prelucrare care nu afecta n nici un
fel starea serverului (nu se modific! nici un fi"ier de pe server) "i cererea de aflare a
maximului celor dou! numere putea fi trimis! de oricte ori doream f!r! a genera probleme
(exceptnd poate consumul unor resurse), n acest caz prin intermediul scriptului se va
schimba con#inutul fi"ierului vizat, deci "i starea serverului. Pentru aceasta vom folosi
metoda POST. Ca "i la metoda GET, un program CGI are acces la ntreg mediul sistemului
de operare pe care ruleaz!. Metoda POST este util! n situa#iile n care avem de trimis
script-ului CGI spre prelucrare un volum mai mare de date (de exemplu, con#inutul unei
G - 11
Tehnologii Web
scrisori ori al unui fi"ier) sau informa#ii confiden#iale (e.g. parole) care nu trebuie s! apar! n
componen#a URI-ului transmis serverului Web.
Pentru formularele utiliznd metoda POST, datele pasate scriptului vor putea fi accesate
de la intrarea standard (stdin), iar lungimea, n octe#i, a datelor trimise va fi disponibil! n
variabila de mediu CONTENT_LENGTH.
De"i citirea de la intrarea standard ar putea fi considerat! mai simpl! dect citirea dintr-o
variabil! de mediu, exist! urm!toarele aspecte pe care trebuie s! le lu!m n considerare:
serverul nu garanteaz! c! va trimite toate datele c!tre scriptul CGI, deci vor trebui citite
attea caractere cte indic! variabila de mediu CONTENT_LENGTH, nu mai multe.
Formularul prin care se va solicita linia care va fi ad!ugat! la fi"ier este:
<form action="http://www.infoiasi.ro/cgi-bin/addproj.cgi"
method="POST">
<p>Introduce#i titlul proiectului:
<input name="data" size="50" maxlength="80">
<input type="submit" value="Trimite">
</form>
G - 12
Tehnologii Web
/* func#ia principal! */
int main(void)
{
char *lenstr;
char input[MAXINPUT], data[MAXINPUT];
long len;
/* scrie Content-type, urmat de setul de caractere (op#ional),
n acest caz ISO-8859-2 (folosim diacritice) */
printf("%s%c%c\n",
"Content-type: text/html;charset=iso-8859-2", 13, 10);
/* scrie antetul documentului HTML generat */
printf("<html>\n<head><title>R!spuns</title></head>\n");
/* ia num!rul de caractere transmise */
lenstr = getenv("CONTENT_LENGTH");
/* num!rul de caractere este corect? */
if (lenstr == NULL ||
sscanf(lenstr, "%ld", &len) != 1 ||
len > MAXLEN)
printf("<p>Eroare - formular incorect?\n");
else
{
FILE *f;
/* cite"te de la intrarea standard datele */
fgets(input, len + 1, stdin);
/* decodific! linia */
unencode(input + EXTRA, input + len, data);
/* adaug! n fi"ier */
f = fopen(DATAFILE, "a");
if (f == NULL)
printf("<p>Eroare la ad!ugarea n fi"ier...");
else
fputs(data, f);
fclose(f);
printf("<p>Mul#umim! Linia <b>%s</b> a fost ad!ugat! n fi"ier\n",
data);
}
/* sfr"itul documentului */
printf("</body>\n</html>\n");
return 0;
}
G - 13
Tehnologii Web
#include <stdio.h>
#include <stdlib.h>
/* numele fi"ierului (cale relativ!) */
#define DATAFILE "../proj/proj.txt"
/* func#ia principal! */
int main(void)
{
/* deschide fi"ierul */
FILE *f = fopen(DATAFILE, "r");
int ch;
if (f == NULL)
{
/* trimite cod HTML n caz de eroare */
printf("%s%c%c\n",
"Content-type: text/html", 13, 10);
printf("<html><head>\n");
printf("<title>Eroare</title>\n");
printf("</head>\n");
/* scrie corpul */
printf("<body>\n");
printf("<p><b>Fi"ierul nu poate fi deschis!</i>\n");
/* scrie sfr"itul documentului */
printf("</body>\n</html>\n");
}
else
{
/* afi"eaz! fi"ierul ca text obi"nuit */
printf("%s%c%c\n",
"Content-type: text/plain", 13, 10);
while ((ch = getc(f)) != EOF)
putchar(ch);
/* nchide fi"ierul */
fclose(f);
}
return 0;
}
De multe ori este util ca ntr-un script CGI s! detect!m metoda de transfer pentru a
prelua datele n mod corespunz!tor. Pentru aceasta va trebui s! test!m valoarea variabilei
de mediu REQUEST_METHOD.
n limbajul C, acest lucru se poate realiza astfel:
G - 14
Tehnologii Web
char *request_method;
request_method = getenv("REQUEST_METHOD");
if (request_method == NULL)
{
/* eroare */
}
else
if (stricmp(request_method,"GET") == 0)
{
/* metoda GET
pentru preluarea datelor se va folosi
variabila de mediu QUERY_STRING
*/
}
else
if (stricmp(request_method,"POST") == 0)
{
/* metoda POST
pentru preluarea datelor se vor citi
de la 'stdin' maxim CONTENT_LENGTH bytes
*/
}
else
{
/* eroare */
}
Astfel, acela#i script CGI poate fi utilizat indiferent de metoda de transfer a datelor setat!
prin atributul method al unui <form> dintr-o pagin! Web.
G - 15
Tehnologii Web
echo
Cu ajutorul lui echo pot fi afi"ate diverse informa#ii preluate din variabilele
de mediu, precum data "i timpul curent, adresa IP a clientului care vizualizeaz!
pagina, tipul de navigator folosit etc. Iat! cteva exemple:
<p>Data "i timpul sunt
<!--#echo var="DATE_LOCAL" -->
<p>Leg!tura prin care s-a ajuns aici este
<!--#echo var="HTTP_REFERER" -->
<p>Adresa IP de la care se acceseaz! pagina este
<!--#echo var="REMOTE_ADDR" -->
<p>Numele acestui document este
<!--#echo var="DOCUMENT_NAME" -->
<p>Browserul "i sistemul pe care ruleaz! sunt
<!--#echo var="HTTP_USER_AGENT" -->
G - 16
Tehnologii Web
Folosind aceast! facilitate, putem crea pentru fiecare pagin! dorit! un buton
napoi (Back) care s! trimit! utilizatorul la adresa din care s-a accesat acea
pagin!:
<a href="<!--#echo var="HTTP_REFERER" -->">napoi</a>
fsize
flastmod
Va returna data "i timpul celei mai recente modific!ri a unui fi"ier specificat.
Ultima actualizare a avut loc la
<!--#flastmod file="web6.html" -->
config
exec
Probabil cea mai folosit! comand! SSI, va rula un program CGI pe server,
iar rezultatul va fi plasat n locul invoc!rii lui exec. Programul CGI va trebui
s! aib! setate permisiunile de execu#ie.
Un exemplu
n cadrul unei pagini Web dorim ca la fiecare nc!rcare s! apar! un citat
celebru la nceputul ei, citatele fiind stocate pe server ntr-un fi"ier
quotes.txt.
Scriptul CGI care afi"eaz! citatul este conceput n Perl "i va fi numit
quotes.pl, fiind executat printr-o comand! SSI din pagina Web:
<html>
<head><title>Pagina lui Georgic!</title></head>
<body>
<h5 align="right">
<!--#exec cgi="quotes.pl" -->
</h5>
<hr />
G - 17
Tehnologii Web
include
Aceast! comand! permite includerea unui fi"ier (de orice tip, n mod uzual
text ori con#innd marcatori HTML) n cadrul unei pagini Web, fiind util!
pentru generarea de antete "i note de subsol f!r! a folosi scripturi CGI ori
putnd fi folosit! ca alternativ! la exec, n cazul n care exec nu este permis!
din ra#iuni de securitate.
<blockquote>A"a cum se afirma n cuvntul de deschidere:
<!--#include file="discurs.txt" -->
</blockquote>
G - 18
Tehnologii Web
Serverul Apache, versiunea 1.2 sau una ulterioar! permite utilizarea comenzilor
suplimentare:
printenv
set
Pot fi utilizate "i set!ri mai complexe, n maniera shell-ului Unix, dup! cum
se poate observa din liniile de mai jos:
<!--#set var="doc"
value="${DOCUMENT_URI}_${LAST_MODIFIED}" -->
<p>Informa#ii despre document: <!--#echo var="doc" -->
Directive condi"ionale
Serverul Apache permite folosirea directivelor condi#ionale if, else, elseif "i endif
(similare celor ale preprocesorului C) care pot controla procesarea documentelor Web n
func#ie de valorile unor variabile de mediu sau definite de programator.
Un exemplu care va trimite clientului un anumit fragment de cod HTML pe baza
informa#iilor despre limb!, testndu-se valoarea unei variabile-utilizator:
<p>Set!m variabila limba="ro".</p>
<!--#set var="limba" value="ro" -->
<!--#if expr="\"$limba\" = \"ro\"" -->
<p>Salut!</p>
...
<!--#else -->
<p>Hello!</p>
...
<!--endif -->
G - 19
Tehnologii Web
adev!rate;
este adev!rat!.
De asemeni, sunt permise parantezele "i operatorul nega#ie (desemnat de caracterul "!").
Mai multe am!nunte pot fi ob#inute din documenta#ia original! a serverului Apache.
G - 20
Tehnologii Web
G - 21
Tehnologii Web
2.1 Caracterizare
Scripturile PHP pot fi incluse n paginile Web n diferite moduri, a"a cum arat! exemplul
de mai jos:
1.
2.
3.
<script language="php">
echo ("anumite editoare nu accept! tag-uri necunoscute");
</script>
4.
G - 22
Tehnologii Web
<html>
<head>
<title>Impresii</title>
</head>
<body text="blue" bgcolor="white">
<form action="add.php" method="POST" name="Form">
<table align="center" cellpadding="4">
<tr>
<td>
<p>Numele "i prenumele:</p>
</td>
<td>
<input type="text" name="nume">
</td>
</tr>
<tr>
<td>
<p>Ocupa#ia:</p>
</td>
<td>
<select name="ocupa#ia" size="1">
<option selected>Student</option>
<option>Elev</option>
<option>Cadru didactic</option>
<option>Altceva</option>
</select>
</td>
</tr>
<tr>
<td>
<p>Vrsta:</p>
</td>
<td>
<p>
<input type="radio" value="sub 18"
name="virsta">sub 18 |
<input type="radio" value="18-25"
name="virsta" checked>18-25 |
<input type="radio" value="25-35"
name="virsta">25-35 |
<input type="radio" value="35-60"
name="virsta">35-60 |
<input type="radio" value="peste 60"
name="virsta">peste 60
</td>
</tr>
<tr>
<td>
<p>Adresa e-mail:</p>
</td>
<td>
<input type="text" name="email">
</td>
</tr>
<tr>
<td>
<p>Impresiile d-voastr!:</p>
</td>
<td>
G - 23
Tehnologii Web
O posibil! completare a acestui formular este cea ilustrat! de figura de mai jos:
Se cer utilizatorului numele, ocupa#ia, vrsta, adresa de e-mail "i impresiile care vor fi
procesate de programul (scriptul) PHP con#inut n fi"ierul add.php. Acesta ar putea
cuprinde urm!toarele:
<html>
<body text="blue" bgcolor="white">
<?
if(!$nume || !$email) { // nu s-au introdus numele sau adresa
?>
<h4 style="color: red" align="center">
Eroare: nu a#i specificat numele sau adresa!
G - 24
Tehnologii Web
</h4>"
<p align="center">Corecta#i
<a href="javascript:history.go(-1)">
formularul</a></p>
<?
}
else {
?>
<h4 style="color: green" align="center">
Formularul introdus
</h4>
<hr size="1" width="75%">
<?
// creaz! un mesaj pentru a fi expediat "i prin e-mail
$mesaj = "";
// data curent!
$mesaj .= "<impresie data=\"" . date("d M Y, G:i");
$mesaj .= "\" client=\"" . $REMOTE_HOST
. "(" . $REMOTE_ADDR . ")\">\n";
// concateneaz! numele, adresa, ocupa#ia "i impresiile
$mesaj .= "<nume email=\"" . $email . "\">" .
$nume . "</nume>\n";
$mesaj .= "<ocupatia>" . $ocupa#ia . "</ocupa#ia>\n";
$mesaj .= "<virsta>" . $virsta . "</virsta>\n";
// exist! impresii?
if ($impresii)
$mesaj .= "<text>\n" . $impresii .
"\n</text>\n</impresie>\n";
// trimite e-mailul (adresa, subiect, corp-mesaj, destinatar)
mail("busaco@infoiasi.ro", "Impresii",
$mesaj, "From: " . $email);
// scrie "i ntr-un fi"ier
$f = fopen("impresii.xml", "a");
if (!$f)
echo ("<p>Eroare la deschiderea fi"ierului!</p>");
else {
fputs($f, $mesaj);
fclose($f);
}
// scrie "i n pagin! (convertind NL cu <br>),
// dar tag-urile XML nu vor fi recunoscute de navigator
$mesaj_html = nl2br($mesaj);
echo ("<center>$mesaj_html</center>");
}
?>
<!-- final de pagin! -->
<hr size="1" width="75%">
</body>
</html>
Scriptul PHP va expedia prin po"ta electronic!, unui anumit utilizator, datele introduse
n formular, prin intermediul func#iei predefinite mail(), "i va genera un fi"ier
impresii.xml cuprinznd impresiile enun#ate de vizitatorii paginii. Un exemplu dintr-un
astfel de fi"ier XML este dat mai jos:
G - 25
Tehnologii Web
...
<impresie data="01 Nov 2000, 11:33"
client="fenrir.infoiasi.ro (193.231.30.197)">
<nume email="socrate@tuiasi.ro">Radu Filip</nume>
<ocupatia>Student</ocupatia>
<virsta>18-25</virsta>
<text>
Salut!...
Ce mai faci?
</text>
</impresie>
<impresie data="02 Nov 2000, 18:42"
client="localhost (127.0.0.1)">
<nume email="luminish@infoiasi.ro">Lumini#a Chiran</nume>
<ocupa#ia>Cadru didactic</ocupa#ia>
<virsta>25-35</virsta>
<text>
mi place, ns! cred c! ar fi trebuit s! pui "i ceva
referitor la adnotarea lingvistic! (e.g. TEI).
Lumini#a
</text>
</impresie>
...
Dup! cum se observ!, PHP ofer! un limbaj script puternic "i simplu, accesul la
cmpurile formularului realizndu-se prin intermediul unor variabile create automat.
n cazul cmpurilor checkbox ale unui formular, nu se creeaz! variabile dect pentru
cmpurile bifate. Dac! nu apare atributul value pentru un buton checkbox atunci valoarea
variabilei corespunz!toare lui va fi setat! automat pe "on".
Pentru a fi preprocesate de analizorul PHP, script-urile PHP pot avea extensia .php (sau
.phtml la PHP/FI sau .php3 la versiunea PHP 3.0), serverul Web (n cazul nostru
Apache) trebuind s! fie configurat astfel:
AddType application/x-httpd-php .php
matematice;
de conversie;
de prelucrare a tablourilor;
pentru accesarea fi"ierelor avnd tipuri speciale: PDF, GIF, XML etc.;
generale.
G - 26
Tehnologii Web
2.2 Programare
Programare orientatorientat- obiect n PHP
Limbajul PHP, mai ales de la versiunea 4, ofer! implementarea unora dintre cele mai
importante aspecte ale program!rii obiectuale: ncapsularea datelor, mo"tenirea,
polimorfismul. Astfel, PHP d! posibilitatea programatorului s! exprime distinc#ia dintre
propriet!#ile generale "i cele specifice ale obiectelor cu care lucreaz!. Vom ilustra aceste
caracteristici prin cteva exemple concludente.
ncapsularea
ncapsularea datelor reprezint! un mecanism de protec#ie a membrilor de tip dat!,
accesul la ei realizndu-se exclusiv prin intermediul unor metode specifice "i nu n mod
direct. Acest lucru se realizeaz! prin intermediul claselor, dup! cum se poate remarca din
fragmentul de cod PHP de mai jos:
<?php
class Student {
// date-membru
var $year;
var $age;
var $name;
// an
// vrsta
// nume
// metode
function setYear($y) {
$this->year = $y;
}
function getYear() {
return $this->year;
}
...
}
?>
Datele-membru se definesc utiliznd var, putnd avea orice tip (ntreg, tablou sau chiar
obiect). Metodele se specific! prin declaratii de func#ii care prelucreaz! membrii clasei.
Pentru a accesa datele clasei, metodele vor trebui s! se foloseasc! de construc#ia
$this->variabila, altfel variabila se consider! a fi local! n cadrul acelei metode.
G - 27
Tehnologii Web
Din p!cate, membrii dat! ai clasei pot fi accesa#i direct, neputndu-i declara priva#i. La
fel, metodele nu pot fi specificate private sau protejate, a"a cum se ntmpl! la C++. Astfel,
PHP ofer! doar suport pentru ncapsulare, dar nu o poate impune.
Pentru func#iile membru, n loc de construc#ia sintactic! "->", n PHP 4 se permite
"::". Astfel, codul de mai sus este echivalent cu:
$student_year = $stud::getYear();
Mo!tenirea
Mo"tenirea reprezint! posibilitatea folosirii datelor sau metodelor definite n prealabil de
o anumit! clas! n cadrul unei clase derivate din prima. Rela#ia de derivare se specific! prin
cuvntul-cheie extends:
<?php
class GoodStudent extends Student {
// date-membru
var $prizes;
// premii
// metode
function setPrizes($p) {
$this->prizes = $p;
}
function getPrizes() {
return $this->prizes;
}
}
?>
Putem ns! redefini o metod! n clasa derivat!. n PHP 3, dac! declar!m un membru-dat!
n clasa derivat! avnd acela"i nume ca un membru-dat! al clasei de baz!, atunci nu mai
putem accesa membrul-dat! din clasa de baz!, el fiind "ascuns" de membrul-dat! al clasei
derivate. n PHP 4, pentru a accesa membri ai clasei p!rinte ne vom folosi de construc#ia
"::" (exact ca "i n C++).
G - 28
Tehnologii Web
Constructori
PHP permite specificarea constructorilor, ei fiind metode cu acela"i nume al clasei din
care apar#in, fiind apela#i automat atunci cnd instan#iem un obiect al clasei respective.
Putem avea de exemplu:
<?php
class Student {
// date-membru
var $year;
var $age;
var $name;
// an
// vrsta
// nume
// constructor
function Student($y, $a, $n) {
$this->year = $y;
$this->age = $a;
$this->name = $n;
}
// metode
function setYear($y) {
$this->year = $y;
}
function getYear() {
return $this->year;
}
...
}
?>
Constructorii "i metodele, fiind func#ii PHP obi"nuite, pot avea specificate valori
implicite pentru argumente (ca n C++):
function Student($y = "4", $a = "22", $n = "")
Dac! scriem n acest mod constructorul, atunci n urm!toarele cazuri vom avea:
// year
$stud =
// year
$stud =
// year
$stud =
Atunci cnd un obiect al unei clase derivate este creat, numai constructorul lui propriu va
fi apelat, constructorul clasei de baz! nefiind apelat implicit. Dac! dorim ca "i constructorul
clasei p!rinte s! fie apelat, o vom face ntr-o manier! explicit!:
<?php
function GoodStudent {
$this->prizes = 3;
// apel explicit al constructorului clasei de baz!
$this->Student();
}
?>
G - 29
Tehnologii Web
Dac! n PHP 3, constructorii puteau avea drept orice tip de parametri, ncepnd cu
versiunea 4, tipurile permise pentru parametrii unui constructor sunt doar cele simple
(ntregi, "iruri de caractere), deci nu vor putea fi executate transmiteri de tablouri sau de
obiecte.
Dac! o clas! derivat! nu posed! propriul ei constructor, va fi apelat implicit
constructorul clasei p!rinte.
Mecanismul obiectual n PHP nu permite declararea destructorilor "i nici specificarea de
clase abstracte (de"i se pot imagina metode mai mult sau mai pu#in sofisticate pentru a le
simula).
Supranc#rcarea
Supranc!rcarea (asocierea de semantici diferite unei acelea"i func#ii pe baza tipurilor
parametrilor specifica#i) nu este suportat! nici ea. Putem ns! supranc!rca, indirect,
constructorii prin crearea de obiecte diferite n func#ie de num!rul de
argumente specificate:
<?php
class Student {
...
function Student() {
// contruim un "ir de apel
$method_name = "Student" . func_num_args();
$this->$method_name();
}
function Student1($x) {
// cod
}
function Student2($x, $y) {
// cod
}
...
}
?>
Pentru a pasa un num!r variabil de parametri unei func#ii "i a-i folosi ulterior putem s!
ne slujim de func#iile predefinite func_get_args(), func_num_args() "i
func_get_arg().
Astfel, func#ia Student() de mai sus va putea afi"a to#i parametrii transmi"i prin
codul urm!tor:
function Student()
{
$args_array = func_get_args();
for ($i = 0; $i < count($args_array); $i++)
print ($i => $argument_array [$i]);
}
G - 30
Tehnologii Web
Polimorfismul
Polimorfismul reprezint! abilitatea unui obiect de a determina care metod! trebuie
invocat! pentru un obiect pasat ca argument n momentul rul!rii "i acest lucru se realizeaz!
foarte u"or n limbaje interpretate precum PHP.
Vom ilustra acest concept "i implementarea lui n PHP presupunnd c! avem o clas!
Figure desemnnd o figur! geometric! n care se defineste metoda draw() "i clasele
derivate Circle "i Square unde vom rescrie metoda draw() n func#ie de figura dorit! a
fi desenat!:
<?php
...
function drawing($obj) {
$obj->draw();
}
// coordonate
$circle = new
// coordonate
$square = new
Serializarea
PHP nu suport! obiecte serializate (care "i p!streaz! starea "i func#ionalitatea de-a lungul
mai multor invoc!ri ale aplica#iei, prin intermediul stocarii ntr-un fi"ier/baz! de date "i
nc!rcarea lor ulterioar!). n PHP prin serializare (func#iile serialize() "i
unserialize()) se vor salva numai membrii-dat!, nu "i metodele, ns! putem serializa
tablouri asociative sau indexate, ceea ce reprezint! totu"i un avantaj.
Func"ii utile pentru manipularea obiectelor
ncepnd cu PHP 4, se pun la dispozi#ia programatorului o serie de func#ii folositoare:
anumit obiect;
specificat;
Tehnologii Web
{
0; // identif. leg!turii cu o baz! de date
0; // identif. interog!rii active
0; // starea de eroare
// metode
function connect() { ... }
function query()
{ ... }
function next_record() { ... }
function num_rows() { ... }
}
Metoda query() verific! existen#a unui $Link_ID valid care s! pointeze spre o baz!
de date activ!. Dac! nu exist!, query() va apela connect() pentru a stabili o leg!tur! cu
serverul SQL. Execu#ia metodei query() va actualiza variabila $Query_ID "i metoda
next_record() va putea furniza nregistrarile g!site n urma invoc!rii interog!rii SQL.
Metoda num_rows() va returna num!rul total de rnduri ale tabelei.
Accesnd bazele de date prin clase, ne vine mult mai u"or s! realiz!m, de exemplu, dou!
interog!ri concurente asupra acelea"i tabele, prin instan#ierea obiectelor de mai jos:
$db1 = new DataBase_SQL;
$db2 = new DataBase_SQL;
Folosind cele de mai sus, putem concepe o clas! care s! ne faciliteze accesarea unei baze
de date MySQL. Astfel, vom defini clasa derivat!:
class DataBase_MySQL extends DataBase_SQL {
// date-membru
var $Host
= ""; // adresa serverului MySQL
var $DataBase = ""; // numele bazei de date de pe server
var $User
= ""; // numele utilizatorului
var $Password = ""; // parola utilizatorului
var $Link_ID
= 0; // rezultatul lui mysql_connect()
// rezultatul celei mai recente mysql_query()
var $Query_ID = 0;
// rezultatul curent al lui mysql_fetch_array()
var $Record
= array();
var $Row;
// num!rul rndului curent
var $Errno
var $Error
// metode
...
}
G - 32
Tehnologii Web
Pentru nceput trebuie s! scriem codul care stabile"te conexiunea cu serverul de baze de
date MySQL. n caz de e"ec, va trebui s! semnal!m acest lucru programului care
manipuleaz! o instan#! a clasei noastre. Vom furniza n continuare metoda connect()
care va utiliza func#ia auxiliar! halt():
// opre"te execu#ia n caz de eroare fatal!
function halt($msg) {
printf("<p>Database error: %s\n", $msg);
printf("<p>MySQL error: <b>%s (%s)</b>\n",
$this->Errno, $this->Error);
die("Session halted.");
}
// conectarea la baza de date
function connect() {
if ($this->Link_ID == 0) { // nc! nu exist! o conexiune
$this->Link_ID = mysql_connect($this->Host,
$this->User, $this->Password);
// succes sau e"ec?
if (!$this->Link_ID)
$this->halt("Connect failed");
// deschide baza de date
if (!mysql_query(sprintf("use %s", $this->DataBase), $this>Link_ID))
$this->halt("Cannot use database" . $this->DataBase);
}
}
G - 33
Tehnologii Web
n acest moment putem s! realiz!m o interogare particular! asupra unei baze de date
MySQL con#innd informa#ii despre studen#i. Pentru aceasta trebuie s! complet!m
cmpurile $Host, $DataBase, $User "i Password. Vom utiliza o clas! derivat!
DataBase_Stud astfel:
class
var
var
var
var
}
Codul PHP pentru afi"area numelui "i vrstei tuturor studen#ilor din anul IV este
urm!torul:
<?php
// instan#ierea obiectului
$db = new DataBase_Stud;
// conectarea la serverul MySQL
$db->connect();
// formuleaz! interogarea
$query = "select name, age from students where year = 4";
$db->query($query);
?>
<html>
<body text="blue" bgcolor="white">
<h3 align="center">Studen#ii anului IV</h3>
<hr>
<!-- parcurgem toate nregistr!rile g!site -->
<?php while($db->next_record()) { ?>
<!-- Numele ngro"at -->
<p><b><?php print $db->Record["name"] ?></b></p>
<!-- Vrsta cu italice -->
<p><i><?php print $db->Record["age"] ?></i></p>
<hr>
<?php } ?>
</body>
</html>
G - 34
Tehnologii Web
Firesc, nainte de a utiliza acest script, trebuie s! cre!m o baz! de date MySQL pe care o
vom numi stud, iar n cadrul acesteia vom genera o tabel! students con#innd
informa#ii despre studen#i (omitem r!spunsurile sistemului dup! execu#ia fiec!rei
comenzi SQL):
$ mysql -h localhost -u busaco -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.20a-log
Type 'help' for help.
mysql> create database stud;
mysql> use stud;
mysql> create table students(
-> year int(1),
-> name char(50),
-> age int(2),
-> id
char(4),
-> pic char(80)
-> );
mysql> create unique index stud_idx on students ( id );
Ultima linie construie"te un index pe baza cmpului de identificare a unui student (id),
index denumit stud_idx.
Deoarece sistemul de gestiune a bazelor de date lucreaz! n context multi-utilizator, va
trebui s! acord!m dreptul de acces asupra unei baze de date (de exemplu, pentru selec#ia,
inserarea "i "tergerea de nregistr!ri) prin intermediul comenzii SQL grant. Pentru ca
utilizatorul busaco s! se poat! conecta la baza de date de pe sistemul local "i s! poat!
executa comenzile SQL select, insert "i delete vom scrie:
mysql> grant usage on stud.* to busaco@localhost;
mysql> grant select, insert, delete on stud.* to busaco@localhost;
n figura de mai jos putem observa opera#iunile efectuate n cadrul unei tranzac#ii de date
ntre navigator "i serverul Web, utilizndu-se "i un server MySQL:
G - 35
Tehnologii Web
2.
3.
4.
Se pot imagina, de asemeni, clase similare "i pentru alte sisteme de management al
bazelor de date (e.g. PostgreSQL, Oracle, ODBC).
G - 36
Tehnologii Web
o instan#! a sa;
xml_set_object() stabile"te adresele func#iilor care vor fi utilizate de
xml_get_error_code()
codul
de
eroare
urma
e"ecului proces!rii.
Pot fi amintite, de asemeni, func#iile dnd mai multe am!nunte despre erorile survenite
n timpul analizei: xml_error_string() "i xml_get_current_line_number().
Func#ia xml_parse() returneaz!, n caz de e"ec, o serie de coduri de eroare ale c!ror
constante simbolice predefinite pot fi consultate n manualul PHP.
Vom defini o clas! pe care o vom folosi ulterior la procesarea documentelor XML
(vom salva acest cod n fi"ierul parseXML.php).
<?php
// o clas! pentru prelucrarea documentelor XML
class parseXML {
var $xml_parser; /* instan#a analizorului XML */
var $xml_file;
/* numele fi"ierului XML */
var $html_code; /* codul HTML generat */
var $open_tags; /* mul#imea tag-urilor de nceput */
var $close_tags; /* mul#imea tag-urilor de sfr"it */
// constructor
function parseXML() {
$this->xml_parser = "";
$this->xml_file = "";
$this->html_code = "";
$this->open_tags = array();
$this->close_tags = array();
}
// destructor
function destroy() {
if ($this->xml_parser)
xml_parser_free($this->xml_parser);
}
// metode
// seteaz! tag-urile de nceput
function set_open_tags($tags) {
$this->open_tags = $tags;
}
// seteaz! tag-urile de sfr"it
function set_close_tags($tags) {
$this->close_tags = $tags;
}
// seteaz! numele fi"ierului XML
function set_xml_file($file) {
$this->xml_file = $file;
}
G - 37
Tehnologii Web
G - 38
Tehnologii Web
}
} /* while */
} /* parse() */
} /* class */
?>
Folosind aceast! clas!, putem transforma un document XML n cod HTML, dup! cum
se poate remarca din exemplul de mai jos, unde va fi prelucrat fi"ierul cu impresii despre un
anumit site Web (vezi exemplul de la nceputul sub-capitolului) "i va fi generat un tabel
HTML:
<?php
// necesit! prezen#a clasei definite mai sus
require("parseXML.php");
// substitu#ia tag-urilor XML cu cod HTML
// se folosesc dou! tablouri asociative
$open_tags = array(
"impresii" => "\n<!-- generat de parseXML -->\n" .
"<table cellpadding=\"5\" align=\"center\" border=\"1\">",
"impresie" => "<tr align=\"center\">",
"nume" => "<td><h4>",
"ocupatia" => "<td><p style=\"color: blue\">",
"virsta" => "<td><p><i>",
"text" => "<td bgcolor=\"#EEEEEE\"><p align=\"justify\">");
$close_tags = array(
"impresii" => "</table>\n" .
"<!-- sfr"itul gener!rii parseXML -->\n",
"impresie" => "</tr>",
"nume" => "</h4></td>",
"ocupatia" => "</p></td>",
"virsta" => "</i></p></td>",
"text" => "</p></td>");
// instan#iaz! "i ini#ializeaz! analizorul
$parser = new parseXML();
$parser->set_xml_file("impresii.xml");
$parser->set_open_tags($open_tags);
$parser->set_close_tags($close_tags);
// ruleaz! analizorul
$parser->parse();
// afi"eaz! rezultatul
echo $parser->get_html_code();
// distruge obiectul
$parser->destroy();
?>
Clasa definit! este suficient de general! pentru a putea fi utilizat! pentru orice tip de
document XML. Tag-urile netratate de programul nostru vor fi ignorate.
De multe ori ns! ar fi de dorit s! realiz!m anumite prelucr!ri asupra datelor stocate de
fi"ierele XML. Putem nc! s! ne slujim de parseXML. De exemplu, am dori ca utilizatorul
(sau autorul site-ului) s! poat! trimite mesaje celor care "i-au l!sat impresiile. Pentru aceasta
vom defini o clas! derivat! din clasa parseXML "i vom redefini func#iile
start_element() "i end_element():
G - 39
Tehnologii Web
<?php
require("parseXML.php");
// folosirea mo"tenirii pentru a defini
// un alt comportament
class parseXML2 extends parseXML {
// indic! dac! exist! atributul "email"
var $is_email = 0;
// redefinirea metodelor
function start_element($parser, $name, $attrs) {
// apeleaz! metoda din clasa de baz!
parseXML::start_element($parser, $name, $attrs);
// pune "i link spre adresa e-mail
if (!strcmp($name, "nume")) {
if ($attrs["email"]) {
$format = "<a title=\"Trimite mesaj la " .
$attrs["email"] .
"\" href=\"mailto:" . $attrs["email"] . "\">";
$this->html_code .= $format;
$this->is_email = 1;
}
else
$this->is_email = 0;
}
}
function end_element($parser, $name) {
// nchide
if (!strcmp($name, "nume")) {
if ($this->is_email) {
$format = "";
$this->html_code .= $format;
}
}
// apeleaz! metoda din clasa de baz!
parseXML::end_element($parser, $name);
}
}
?>
Noul membru de tip dat! is_email este folosit pentru a putea nchide corect tag-urile
elementului <a> (se poate ntmpla ca atributul email s! nu apar!). Restul codului r!mne
acela"i, n loc de $parser = new parseXML() trebuind fi scris! linia
$parser = new parseXML2().
O posibil! rulare a scriptului PHP de mai sus poate avea ca efect urm!toarea
pagin! Web:
G - 40
Tehnologii Web
Desigur, dac! facem numai prelucr!ri asupra documentelor XML, ne putem dispensa de
definirea celor dou! tablouri asociative open_tags[] "i close_tags[], iar n func#iile
startElement() "i endElement() putem insera orice cod dorim.
Utiliznd tehnicile descrise mai sus, studen#ii Constantin Gheorghi"!, Valentin P!sc!reanu "i
Dan %orin au realizat o aplica#ie Web bazat! pe PHP pentru managementul lucr!rilor de
licen#! la Facultatea de Informatic!. Varianta curent! este opera#ional! la adresa
http://students.infoiasi.ro/~licenta. Datele referitoare la licen#! sunt stocate ntr-un
fi"ier XML avnd formatul de mai jos (l!s!m cititorului pl!cerea de a construi DTD-ul
pentru validarea acestui document):
<database>
<record>
<!-- Numele "i contul studentului -->
<stud cont="..."> ... </stud>
<!-- Numele "i contul coordonatorului -->
<prof cont="..."> ... </prof>
<!-- Tema lucr!rii de licen#! -->
<tema> ... </tema>
<!-- Descrierea (op#ional!) a temei -->
<desc> ... </desc>
<!-- Leg!turi (URI-uri) relevante -->
<link> ... </link>
...
</record>
</database>
G - 41
Tehnologii Web
PHP !i libxml
PHP 4.0 include analizorul libxml elaborat de Daniel Veillard "i integrat n motorul
PHP de Uwe Steinman (vezi "i capitolul referitor la DOM). PHP func#ioneaz! cu
libxml-2.0.0 sau o versiune superioar!.
Arborele abstract asociat unui document XML va putea fi creat de una dintre func#iile:
new_xmldoc();
dtd() - returneaz! un obiect apar#innd clasei DTD, care nu posed!
metode, ci numai membrii-dat! name (numele elementului r!d!cin! al
documentului XML), sysid (con#ine un identificator sistem al DTD-ului asociat
documentului, e.g. impresii.dtd) "i extid (reprezint! un identificator extern);
arborelui DOM.
Un script PHP care va genera documentul XML:
<?xml version="1.0" ?>
<nume>Sabin-Corneliu Buraga</nume>
va fi urm!torul:
// un nou arbore DOM
$doc = new_xmldoc("1.0");
// insereaz! nodul-r!d!cin!
$root = $doc->add_root("nume");
// adaug! nodului un con#inut
$root->content = "Sabin-Corneliu Buraga";
// afi"eaz! documentul XML generat
print (htmlspecialchars($doc->dumpmem()));
Dup! cum se poate remarca, putem foarte u"or construi prin program documente sau
fragmente de documente XML, ceea ce nu se putea cu expat.
Dup! cum am v!zut, n cadrul modelului DOM orice component! a unui document
XML va fi reprezentat! prin intermediul unui nod al arborelui asociat. Un obiect de tip nod
va avea metodele:
G - 42
Tehnologii Web
Valoare
XML_ELEMENT_NODE
XML_ATTRIBUTE_NODE
XML_TEXT_NODE
XML_CDATA_SECTION_NODE
XML_ENTITY_REF_NODE
XML_ENTITY_NODE
XML_PI_NODE
XML_COMMENT_NODE
XML_DOCUMENT_NODE
XML_DOCUMENT_TYPE_NODE
10
XML_DOCUMENT_FRAG_NODE
11
XML_NOTATION_NODE
12
Pentru a parcurge ntreg arborele de noduri sau numai p!r#i din el ne putem folosi de
xmltree(), func#ie care va analiza documentul XML dat ca parametru (sub form! de "ir
de caractere) "i va returna o structur! de obiecte PHP reprezentnd acel document. Aceast!
structur! nu va putea fi ns! modificat!.
Ca alternativ! la metodele descrise mai sus, exist! solu#ia oferit! de Apache Cocoon, suit!
de servlet-uri Java care realizeaz! transform!ri XSL asupra documentelor XML.
G - 43
Tehnologii Web
2.5 Exemple
n continuare, vom ilustra o serie dintre facilit!#ile puse la dispozi#ie de serverul de
aplica#ii PHP prin intermediul exemplific!rilor de mai jos:
a. Vizualizarea unei colec#ii de imagini. Utilizatorul are la dispozi#ie imaginile la
rezolu#ie sc!zut! (thumbnails) "i poate opta s! vizualizeze imaginea dorit! la rezolu#ie
nalt!. Scriptul PHP, preluat din colec#iile PEAR, este urm!torul:
<?
// vom avea dou! directoare cu imagini
// unul cu imaginile la rezolu#ie sc!zut! (GIF-uri)
// THUMBNAIL DIRECTORY
$path = "thumbnails";
// altul cu imaginile la rezolu#ie nalt! (JPEG-uri)
// IMAGE DIRECTORY
$path2 = "images";
// num!rul de imagini pe un rnd
$clm = "9";
// l!#imea unui thumbnail
$t_w = "48";
// n!l#imea unui thumbnail
$t_h = "43";
// num!rul de imagini pe o linie de tabel
$count = 1;
$break = $clm;
?>
<!-- se includ imaginile ntr-un tabel -->
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<?
// se caut! n directorul "path" imaginile GIF...
$d = dir("$path");
while ($entry = $d->read()) {
/* cite"te intr!rile din director */
if ($entry == ".")
{
echo ""; /* directorul curent, nu este imagine */
}
elseif ($entry == "..")
{
echo ""; /* directorul p!rinte */
}
else
{
ClearStatCache();
/* furnizeaz! dimensiunile imaginii */
$size = GetImageSize("$path2/$entry");
$width = $size[0] + 10;
$height = $size[1] + 20;
/* furnizeaz! dimensiunea fi"ierului */
$file_size = fileSize("$path2/$entry");
G - 44
Tehnologii Web
G - 45
Tehnologii Web
<html>
<head>
<title>Lista c!r#ilor</title>
</head>
<frameset rows="60, *" border="0">
<frame src="sus.html" name="sus" />
<frame src="cartilist.php" name="jos" />
</frameset>
</html>
Codul PHP pentru citirea datelor din fi"ier "i realizarea ordon!rilor este
urm!torul:
<html>
<head>
<?php
// func#iile de sortare
function titsort($a, $b) {
return strcmp($a->Titlu, $b->Titlu);
}
function autsort($a, $b) {
return strcmp($a->Autor, $b->Autor);
}
function edisort($a, $b) {
return strcmp($a->Editura, $b->Editura);
}
function isbsort($a, $b) {
G - 46
Tehnologii Web
G - 47
Tehnologii Web
G - 48
Tehnologii Web
$userfile_name
urma transferului;
care a fost transmis;
reprezint!
numele
original
al
fi"ierului
G - 49
Tehnologii Web
<?php
if ($submit) {
// conectare la serverul MySQL
$db = mysql_connect("localhost","busaco","");
// deschide baza de date
mysql_select_db("students",$db);
// execut! SQL
$sql = "INSERT INTO students (year, name, age, id, pic) "
. "VALUES ('$year, $name, $age, $id, $pic')";
// copie fi"ierul primit (se execut! o comand! Unix)
exec("cp $pic /home/busaco/html/images/$pic_name");
// afi"eaz! datele
echo "Anul: $year<br>\n";
echo "Numele: $name<br>\n";
echo "Matricol: $id<br>\n";
echo "Fi"ierul temporar: $pic<br>\n";
echo "Numele imaginii: $pic_name<br>\n";
echo "Lungimea imaginii: $pic_size<br>\n";
echo "Tipul: $pic_type<br>\n";
echo "<br><br>\n";
echo "<img src=\"images/$pic_name\" alt=\"$name\"><br>\n";
}
?>
pic_size[],
pic_type[]
G - 50
Tehnologii Web
/* dimensiunea */
echo " - $filestat[7] bytes ";
/* data, convertit! din timpul Unix n elemente
ale tabloului asociativ 'filedate' */
$filedate = getdate($filestat[9]);
/* folosim func#ia de formatare a datei "i timpului */
printf("<i>%02d-%02d-%d %02d:%02d:%02d</i>",
$filedate["mday"], $filedate["mon"], $filedate["year"],
$filedate["hours"], $filedate["minutes"],
$filedate["seconds"]);
/* se extrag toate <meta> din fi"ier */
$metatags = get_meta_tags($file);
/* se verific! dac! exist! <meta name="author" ...> */
if (isset($metatags["author"])) {
/* afi"!m "i autorul */
echo "<ul>Author: ";
echo $metatags["author"];
echo "</ul>";
}
}
}
/* se nchide directorul */
closedir($dir);
?>
</ul>
G - 51
Tehnologii Web
Site-ul students.infoiasi.ro
G - 52
Tehnologii Web
G - 53
Tehnologii Web
ASP poate oferi medii de scriptare "i pentru alte limbaje, ca REXX sau Perl.
Comenzile script "i expresiile de ie"ire n ASP sunt delimitate de "<%" "i "%>"
(n PHP aveam <?...?>). Scripturile pot fi ncorporate n fi"iere ASP sau pot fi stocate n
fi"iere externe care vor fi nc!rcate "i rulate pe server:
<html>
<body>
<!-- apel VBScript al unei func#ii JScript -->
<% Call hello_world %>
</body>
</html>
<script runat="server" language="JScript">
function hello_world() {
Response.Write("Hello, world!\n");
}
</script>
G - 54
Tehnologii Web
ASP ofer! suport par#ial pentru SSI (Server Side Includes) prin implementarea doar a
directivei de preprocesare #include menit! s! includ! ntr-un fi"ier .asp con#inutul
altuia:
<!--#include virtual="nume_fi#ier"-->
<!--#include file="nume_fi#ier"-->
Este recomandabil ca fi"ierele incluse s! aib! extensia .inc, de"i sunt acceptate orice
nume valide de fi"iere. Cuvntul cheie virtual specific! faptul c! fi"ierul este stocat
ntr-un director virtual, iar dac! se folose"te file atunci fi"ierul este memorat ntr-un
director relativ la directorul curent.
Includerea fi"ierelor se realizeaz! nainte de execu#ia scripturilor din fi"ierul ASP. Astfel,
nu se pot concepe scripturi care s! genereze dinamic numele unui fi"ier ce va fi inclus
ulterior prin #include. Comenzile script "i func#iile/procedurile trebuie s! fie con#inute
complet ntre "<%" "i "%>" sau tag-urile <script> "i </script> ori <object> "i
</object>. Nu se poate deschide un delimitator de script ntr-un fi"ier ASP care include
un fi"ier unde se nchide acel delimitator.
Urm!torul exemplu este gre"it:
<%
for (i = 1 ; i < 10 ; i++)
{
/* instruc#iuni */
<!--#include file="antet.inc" -->
}
%>
ASP poate fi utilizat pentru modificarea unui script destinat a fi rulat pe partea client de
c!tre un script executat pe server:
<script language="JScript">
<!-- // ascundere cod de navigatoarele vechi
/* script client */
<% script server %>
/* script client */
<% script server %>
...
// -->
</script>
Tehnologii Web
De asemeni pot fi definite "i tag-uri noi care vor fi procesate de c!tre motorul ASP.
serverul Web),
autentificare).
Exemple
i.
Presupunem c! n urma complet!rii unui formular se trimite serverului
urm!torul URI: welcome.asp?name=Sabin+Buraga&age=27. n fi"ierul
welcome.asp ar putea exista urm!torul cod pentru afi"area datelor din formular:
<p align="center">
Welcome, <i><%= Request.QueryString("name") %></i>.
Your age is <%= Request.QueryString("age") %>.
</p>
Tehnologii Web
Exemplu
Pentru a fi siguri c! utilizatorii vor vizita o anumit! pagin! (chiar "i f!r! voia lor), putem
s! ne slujim de urm!torul cod de redirectare:
<%
if (!Session("home_page"))
Response.Redirect("homepage.asp");
%>
ii.
Codul VBScript de mai jos va lista limbajele script suportate de
navigatorul Web:
<%
Set myBrowsCap = Server.CreateObject("MSWC.BrowserType")
%>
<p>Navigatorul este:
'<%=myBrowsCap.browser%>', versiunea '<%=myBrowsCap.version%>'.
<br>
Limbajele suportate sunt:
<ul>
<%If myBrowsCap.javascript Then%>
G - 57
Tehnologii Web
<li>JavaScript</li>
<% End If %>
<%If myBrowsCap.VBScript Then%>
<li>VBScript</li>
<% End If %>
</ul>
iii.
Urm!torul exemplu scris n VBScript cite"te dintr-un fi"ier text o list! de
leg!turi spre anumite pagini "i construie"te o pagin! Web cu aceste leg!turi:
<%
Set links = Server.CreateObject("MSVC.NextLink")
count = links.GetListCount("/links/list.txt")
%>
<ul>
<% For i = 1 to count %>
<li>
<a href="<%= links.GetNthUrl("/links/list.txt", i) %>">
<%= links.GetNthDescription("/links/list.txt", i) %>
</a>
</li>
<% Next %>
</ul>
obicei).
G - 58
Tehnologii Web
Sesiuni ASP
Dup! cum am v!zut, atunci cnd un utilizator viziteaz! o pagina Web a unei aplica#ii
ASP, se genereaz! o a"a-numit! sesiune care diferen#iaz! acel utilizator de al#ii. Informa#iile
de#inute de o sesiune pot fi accesate "i manipulate de programele ASP, fiind utile n cazul
aplica#iilor necesitnd autentificarea sau stabilirea unor preferin#e specifice utilizatorului
respectiv.
De men#ionat faptul c! o sesiune este terminat! automat de server dac! utilizatorul nu
mai acceseaz! o pagin! a aplica#iei pentru o perioad! anumit! de timp (e.g. 20 de minute).
Explicit, o sesiune poate fi terminat! executnd metoda Session.Abandon. O aplica#ie
se termin! atunci cnd serverul Web este oprit.
O sesiune poate ncepe n urm!toarele trei maniere:
un utilizator nou face o cerere a unui URL corespunz!tor unui fi"ier .asp
al unei aplica#ii;
Informa#iile vehiculate n cadrul unei sesiuni pot fi f!cute private, fiind accesibile teoretic
numai n acea sesiune.
Fiecare sesiune posed! un identificator unic, denumit SessionID, care este trimis
clientului pentru a se creea un cookie nepersistent corespunz!tor sesiunii n cauz!. n cadrul
acestui cookie vor fi memorate diverse informa#ii (private) despre sesiune. De fiecare dat!
cnd serverul ASP recep#ioneaz! o cerere, se va verifica n antetul HTTP existen#a
cookie-ului corespunz!tor identificatorului SessionID. Despre cookie-uri vom discuta n
detaliu n urm!torul subcapitol.
n cadrul unui astfel de cookie pot fi re#inute anumite preferin#e ale utilizatorului, valori
ale cmpurilor formularelor, date despre browser etc.
Stocarea variabilelor ntr-un obiect Session se realizeaz! n modul urm!tor:
<%
Session("Initiated") = Now
Session("Color") = "Green"
Set Session("vrmlobj") = Server.CreateObject("MSVRML2C")
%>
G - 59
Tehnologii Web
Urm!torul exemplu de script ASP scris n VBScript num!r! cte cifre "0" "i cte cifre
"1" au fost generate aleatoriu la fiecare accesare a paginii Web:
<%
Response.Write "Generez o cifr!...<br>"
randomize
randomnum = int(rnd * 2) + 1
If randomnum = 1 Then
Session("zero") = Session("zero") + 1
Else
Session("unu") = Session("unu") + 1
End If
Response.Write "Nr. de 0 = " & Session("zero") & "<br>"
Response.Write "Nr. de 1 = " & Session("unu") & "<br>"
%>
Fiecare utilizator care acceseaz! documentul va avea o sesiune privat!, cu propriile sale
variabile-contor. Datele sesiunii sunt ntotdeauna stocate pe server, iar fiecare sesiune are
un identificator propriu, memorat ntr-un cookie pe ma"ina client. Operatorul ampersand
(desemnat de "&") realizeaz! concatenarea "irurilor de caractere.
Aplica"ii ASP
Cu ajutorul obiectului Application putem seta propriet!#i care vor fi accesate de to#i
utilizatorii aplica#iei respective. Astfel, prin intermediul diverselor variabile stocate de
obiectul Application putem afi"a un text tuturor utilizatorilor aplica#iei, putem
contoriza num!rul de acces!ri, putem asigna diverse execu#ii de scripturi la apari#ia unor
evenimente etc.
ntr-un obiect Application nu se pot memora ns! obiectele ASP predefinite.
Exemplul de mai jos va genera o eroare:
<%
Set Application("sesiune") = Session
Set Application("cerere") = Request
Set Application("raspuns") = Response
%>
G - 60
Tehnologii Web
la nivelul aplica"iei
Componenta este instan#iat! o singur! dat! la momentul ini#ializ!rii
aplica#iei "i este disponibil! tuturor cererilor provenite de la orice client.
la nivelul sesiunii
Se creeaz! o instan#! a componentei pentru fiecare sesiune n parte "i se
distruge la terminarea acelei sesiuni. O sesiune activ! va avea o unic! instan#! a
unei componente particulare.
la nivelul paginii
Componenta se instan#iaz! pentru procesarea unei pagini de c!tre un
anumit client.
3.7 Utilizarea
Utiliza rea documentelor XML pe un server ASP
Motorul XML (msxml.dll sau msxml3.dll) ncorporat n Internet Explorer 5 sau
ulterior poate fi rulat "i pe server, constnd din analizorul XML, procesoarele XSL "i XML
Schema "i alte componente.
G - 61
Tehnologii Web
Acest obiect, denumit "xmlObj" este un obiect DOM vid, care va con#ine un arbore de
elemente XML creat prin program sau nc!rcat de pe disc (vezi exemplele de mai jos).
Pentru accesarea obiectelor XML, n diferite fire de execu#ie, n loc de
Microsoft.XMLDOM vom utiliza Microsoft.FreeThreadedXMLDOM.
Exemple
1. nc!rcarea
metoda load():
documentului
XML
dintr-un
fi"ier
se
realizeaz!
cu
<%
xmldoc = Server.CreateObject("Microsoft.XMLDOM");
xmldoc.Load(Server.MapPath("produse.xml"));
%>
G - 62
Tehnologii Web
3. Pentru salvarea unui document XML ntr-un fi"ier sau ntr-un alt obiect,
se poate folosi urm!torul script ASP:
<%
Dim xmldoc
Set xmldoc = Server.CreateObject("Msxml2.XMLDOM")
xmldoc.async = false
xmldoc.load(Request)
xmldoc.save(Server.MapPath("studenti.xml"))
%>
G - 63
Tehnologii Web
Cmpurile afi"ate se pot sorta dup! oricare coloan!, ap!snd pe butonul care reprezint!
numele coloanei respective.
Conectarea la baza de date Access se realizeaz! prin intermediul codului VBScript
de mai jos:
<%
' stabile"te calea spre baza de date
myMelodiiPath = Server.MapPath("melodii.mdb")
myConnString = "DBQ=" & myMelodiiPath &
";Driver={Microsoft Access Driver (*.mdb)}" &
";DriverID=25;FIL=MS Access;"
' realizeaz! contectarea
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open myConnString
%>
G - 64
Tehnologii Web
qryOrder = "ID"
qryOrderAsc = "ASC"
Else
myRecordsToDisplay = cdbl(Request("myRecordsToDisplay"))
myFirstRecord = cdbl(Request("myFirstRecord"))
myLastRecord = cdbl(Request("myLastRecord"))
qryOrder = trim(cstr(Request("qryOrder")))
qryOrderAsc = trim(Request("qryOrderAsc"))
strQrySelected = trim(Request("strQrySelected"))
End If
' partea de navigare prin baza de date
myNavigate = Request("myNavigate")
tmpFirst = myFirstRecord
tmpLast = myLastRecord
Select Case myNavigate
' pagina anterioar!
Case "Page Prev"
If myFirstRecord > myRecordsToDisplay Then
myLastRecord = tmpFirst - 1
myFirstRecord = myLastRecord - myRecordsToDisplay + 1
Else
myFirstRecord = 1
myLastRecord = myRecordsToDisplay
End If
' pagina urm!toare
Case "Page Next"
myFirstRecord = tmpLast + 1
myLastRecord = myFirstRecord + myRecordsToDisplay - 1
Case Else
j = 0
' traduce ID-ul din englez! n romn!
Select Case myNavigate
Case "ID"
myNavigate = "ID"
Case "Path"
myNavigate = "Cale"
Case "Artist"
myNavigate = "Artist"
Case "Title"
myNavigate = "Titlu"
Case "Observations"
myNavigate = "Observatii"
Case Else
myNavigate = "ID"
qryOrderAsc = "DESC"
End Select
' stabile"te ordinea de afi"are
If myNavigate = trim(qryOrder) Then
If qryOrderAsc = "ASC" Then
qryOrderAsc = "DESC"
Else
qryOrderAsc = "ASC"
End If
Else
qryOrderAsc = "ASC"
End If
qryOrder = myNavigate
myFirstRecord = 1
myLastRecord = myRecordsToDisplay
G - 65
Tehnologii Web
End Select
Set myRs = Server.CreateObject("ADODB.Recordset")
myRs.Open strQryOrder & qryOrder & " " &
qryOrderAsc, myConn, adOpenDynamic
' num!rul de nregistr!ri g!site
myRsFieldCount = myRs.Fields.Count
Response.Flush
' sare peste myFirstRecord nregistr!ri
myRs.MoveFirst
i = 1
Do While ((not myRs.EOF) and (i < myFirstRecord))
i = i + 1
myRs.MoveNext
Loop
If myRs.EOF Then
myLastRecord = i
myFirstRecord = i - myRecordsToDisplay
myRs.MoveFirst
i = 1
Do While ((i < myFirstRecord) and (not myRs.EOF))
i = i + 1
myRs.MoveNext
Loop
End If
%>
<!-- tabelul de listare a datelor -->
<form action="melodii.asp" method="post" id="myFormList">
<!-- cmpuri ascunse
(interogare "i ordine de afi"are) -->
<input type="hidden" name="strQrySelected">
<input type="hidden" name="qryOrder"
value="<% =qryOrder %>">
<input type="hidden" name="qryOrderAsc"
value="<% =qryOrderAsc %>">
<table border="0" align="center"
cellpadding="3" cellspacing="0">
<tr>
<td>Display</td>
<td>
<input name="myRecordsToDisplay"
value="<% =myRecordsToDisplay %>">
</td>
<td>records</td>
<td>from</td>
<td>
<input name="myFirstRecord"
value="<% =myFirstRecord %>"
</td>
<td>to</td>
<td>
<input name="myLastRecord"
value="<% =myLastRecord %>">
</td>
</tr>
</table>
G - 66
Tehnologii Web
G - 67
Tehnologii Web
Din moment ce un utilizator a fost autentificat, el va putea ad!uga, actualiza sau "terge
nregistr!ri din baza de date Access. n figura de mai jos se poate urm!ri pagina de "tergere
a datelor:
G - 68
Tehnologii Web
G - 69
Tehnologii Web
3.9 Viitor
Noua genera#ie ASP este denumit! ASP+, menit! a fi rulat! pe platforma
Windows.NET, reg!sit! "i sub numele mai vechi de NGWS (Next Generation Windows
Services). ASP+ suport! nativ, pe lng! VBScript "i JScript, "i limbajul C# (C sharp), proasp!t
ap!rut n lumea limbajelor de programare, inspirat din C "i C++. n loc de a fi interpretate,
scripturile ASP+ vor fi compilate, c"tigndu-se astfel n viteza de procesare. O parte dintre
facilit!#ile oferite de ASP+ se apropie mult de cele implementate n PHP 4, dar nc! sunt
tributare sistemului de operare, rulnd numai pe Windows NT/2000. Aplica#iile ASP+ pot
coexista cu aplica#iile ASP. Astfel, fi"ierele cu scripturi ASP+ vor avea extensia .aspx,
existnd de asemeni "i posibilitatea de concepere de fi"iere Global.asax pentru fiecare
aplica#ie Web n parte.
O facilitate important! o reprezint! formularele Web ASP+ (ASP+ Web Forms), model
scalabil de programare la nivelul serverului pentru generarea n manier! dinamic! a
paginilor Web con#innd formulare electronice, ca de exemplu o serie de abilit!#i de a crea
controale reutilizabile pentru interac#iunea cu utilizatorul. Aceast! abordare separ! logica
prelucr!rii formularelor de modul de vizualizare "i interac#iune cu utilizatorii.
Configurarea motorului ASP+ se realizeaz! ntr-un mod ierarhic, bazat pe fi"iere n
format ASCII, foarte asem!n!toare modului de configurare din Unix, f!r! a mai necesita
modificarea plin! de riscuri din registry-uri.
n plus, ASP+ ofer! o palet! larg! de controale ActiveX predefinite "i d! posibilitatea
administratorilor s! extind! capabilita#ile ini#iale ale serverului prin includerea de noi
componente "i procesoare de limbaje.
Exemplu
Urm!torul script conceput n C# realizeaz! o interogare SQL a unei baze de date "i
afiseaz! lista nregistr!rilor g!site, n func#ie de informa#iile furnizate de utilizator:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>
<html>
<head></head>
<!-- Partea de script care ruleaz! pe server -->
<script language="C#" runat="server">
/* func#ie care se execut! la ap!sarea butonului 'submit' */
void SubmitBtn_Click(Object sender, EventArgs e) {
/* instan#iaz! o conexiune SQL la baza de date,
cu autentificarea utilizatorului */
SQLConnection myConnection =
new SQLConnection("server=sql2.bitsonthewire.com;
uid=joeuser; pwd=joeuser; database=pubs");
/* instan#iaz! o comand! SQL */
SQLDataSetCommand myCommand =
new SQLDataSetCommand("select * from Titles where type='" +
Category.SelectedItem.Value + "'", myConnection);
/* execut! comanda, pentru tabela 'Titles' */
DataSet ds = new DataSet();
myCommand.FillDataSet(ds, "Titles");
MyList.DataSource = ds.Tables["Titles"].DefaultView;
MyList.DataBind();
G - 70
Tehnologii Web
}
</script>
<!-- Corpul paginii Web -->
<body>
<center>
<!-- Formularul electronic prelucrat de 'intro.aspx' pe server -->
<form action="intro.aspx" method="post" runat="server">
<!-- controalele sunt definite n spa#iul de nume 'asp' -->
<h3> Name: <asp:textbox id="Name" runat="server"/>
Category: <asp:dropdownlist id="Category" runat="server">
<asp:listitem >psychology</asp:listitem>
<asp:listitem >business</asp:listitem>
<asp:listitem >popular_comp</asp:listitem>
</asp:dropdownlist>
<asp:button type=submit text="Lookup"
OnClick="SubmitBtn_Click" runat="server"/>
<p>
<!-- Afi"eaz! datele returnate n urma execu#iei func#iei C# -->
<asp:datalist id="MyList" layout="flow"
showfooter="true" borderwidth="0" runat="server">
<!-- %abloane de date -->
<template name="headertemplate">
<table cellpadding="1" cellspacing="0">
<tr>
<td colspan="4">
<b>Product Listing</b>
</td>
</tr>
<tr>
<td colspan="4" height="5" bgcolor="000000"></td>
</tr>
</template>
<template name="itemtemplate">
<tr>
<td colspan="3" style="font-size:10pt">
<b>
<%# DataBinder.Eval(
Container.DataItem, "title_id") %>
</b>
<span>
<%# DataBinder.Eval(
Container.DataItem, "title") %>
</span>
</td>
<td align="right" style="font-size:10pt">
<b>
<%# DataBinder.Eval(Container.DataItem,
"price", "${0}") %>
</b>
</td>
</tr>
</template>
<template name="separatortemplate">
<tr>
<td colspan="4" height="1" bgcolor="000000"></td>
</tr>
</template>
<template name="footertemplate">
<tr>
G - 71
Tehnologii Web
G - 72
Tehnologii Web
4. Cookie-uri
4.1 Prezentare general
Cookie-urile reprezint! un mecanism standard care permite ca un server (site) Web s!
trimit! anumite informa#ii pe calculatorul unui client (utilizator), prin intermediul
browserului, s! cear! clientului s! stocheze aceste informa#ii pentru ca, ulterior, n diferite
circumstan#e, navigatorul s! returneze informa#iile spre serverul WWW. Cookie-urile pot fi
privite a"adar ca un mijloc persistent de stocare a datelor pe ma"ina clientului Web cu
scopul de a fi accesate ulterior de pe server, fiind utilizate la memorarea preferin#elor
utilizatorilor, la diverse tranzac#ii n comer#ul electronic, la completarea automat! a
formularelor, la stocarea informa#iilor de autentificare etc.
n cadrul unei tranzac#ii HTTP, serverul Web nu memoreaz! nici o informa#ie despre
aceasta, datorit! modului de concepere a protocolului de transfer a datelor hipertext. n
anumite cazuri, este ns! util ca informa#iile de stare ale unei conexiuni (sesiunii) HTTP s!
fie stocate pentru a fi folosite n cadrul altei tranzac#ii de date. Astfel, a ap!rut necesitatea
implement!rii cookie-urilor n cadrul navigatoarelor Web ca entit!#i purt!toare de date ntre
servere "i clien#i.
Termenul de cookie a fost introdus de Lou Montulli, unul dintre autorii specifica#iei tehnice
a browserului Netscape, care n versiunea 1.1 avea implementat n premier! mecanismul de
cookie-uri.
Contrar temerilor celor mai mul#i utilizatori ai Internetului, cookie-urile nu sunt
periculoase pentru calculatoarele gazd!, neavnd drept con#inut dect cteva linii de text,
neputnd accesa programe de pe disc sau extrage informa#ii confiden#iale despre utilizator
pentru a fi trimise napoi la un server Web. Datele de#inute de un cookie sunt datele pe care
le ofer!, din proprie ini#iativ!, utilizatorul sau cele returnate n cadrul antetului HTTP la o
tranzac#ie de date ntre client "i server. Un alt server diferit de serverul care a creat un cookie
nu-l poate accesa.
De altfel, fiecare navigator Web ofer! posibilitatea reject!rii cookie-urilor ori interog!rii
utilizatorilor dac! s! fie acceptate sau nu. Programatorul poate seta un cookie s! fie
persistent (nu va fi distrus la nchiderea navigatorului, ci va fi memorat ntr-un fi"ier, dup!
cum vom vedea mai jos, perioada lui de via#! fiind stabilit! de creator) sau nu.
G - 73
Tehnologii Web
4.2 Atrib
Atributele
utele unui cookie
Un cookie const! n principal dintr-o pereche nume=valoare asem!n!toare parametrilor
vehicula#i de scripturile CGI. Valoarea este un "ir de caractere care trebuie codificat n
maniera URL-urilor. Datele referitoare la un cookie vor fi recep#ionate de browser care
men#ine o list! de cookie-uri apar#innd serverului care le-a trimis. Perechile (nume, valoare)
ale cookie-urilor prezente n memoria navigatorului vor fi returnate spre procesare serverului
care le-a creat, la cererea acestuia.
Mecanismul de setare a cookie-urilor pe calculatorul client "i de retrimitere a lor spre
server se bazeaz! pe cmpurile din antetul unei tranzac#ii de date HTTP.
Astfel, un cookie este trimis unui client incluznd un parametru-antet Set-Cookie
ntr-un r!spuns HTTP, forma lui general! fiind: Set-Cookie: nume=valoare;
expires=data; path=cale; domain=domeniu; secure.
Observ!m c! pot fi specificate atributele op#ionale:
expires
Reprezint! data "i timpul (n formatul Wdy, DD-Mon-YYYY HH:MM:SS
GMT) cnd cookie-ul va expira "i va fi "ters de pe disc. Dac! nu este dat nici un
G - 74
Tehnologii Web
domain
va
primi
de
la
client,
antetul
HTTP,
linie
de
forma:
HTTP;
de"i un cookie nu a atins timpul de expirare, el poate fi "ters fie de navigator,
fie de utilizator;
G - 75
Tehnologii Web
dup! cum am descris mai sus, serverul IIS incluznd ASP va seta un cookie
implicit denumit ASPSESSIONID pentru fiecare sesiune a unui utilizator. Acest
cookie poate fi consultat asemeni unui cookie obi"nuit. De asemeni, mecanismul de
memorare a sesiunilor utilizator n PHP apeleaz! tot la cookie-uri.
3.
Set-Cookie: alta_culoare=albastra;path=/
5.
Clientul va primi:
Set-Cookie: count=3;path=/doc
Tehnologii Web
directorul
cookie-urile pe disc, atunci ele vor fi stocate n directorul home al utilizatorului n fi"ierul
.lynx_cookies. Acest fi"ier (al c!rui nume se poate modifica prin intermediul unei
directive incluse n fi&3351;ierul de configurare lynx.cfg) are acela"i format ca "i fi"ierul
cookies generat de Netscape.
Un exemplu de con#inut al unui fi"ier cookies Netscape este cel de mai jos:
localhost FALSE /
FALSE
localhost FALSE /
FALSE
.uaic.ro
FALSE /
TRUE
.uaic.ro
FALSE /doc FALSE
.yahoo.com FALSE
FALSE
http%3A//www.yahoo.com/
966862979
966782841
966862979
969367226
966862979
culoare
verde
alta_culoare albastra
secure Secure%20communications
count
3
path
indicator de
acces
cale
indicator de
securitate
timpul de
expirare
Descriere
Domeniul care a creat "i care poate
(atributul domain dintr-un antet Set-Cookie).
valoare
cazul
cookie-ul
Este TRUE dac! toate ma"inile din domeniul dat pot accesa cookie-ul.
Aceast! valoare este setat! automat de browser n urma compara#iei de
sufixe de domenii.
nume
consulta
lui
Internet
Explorer,
fi"ierul
de
G - 77
cookie-uri
denumit
unui cookie de la
Tehnologii Web
AnEFromrel_client
www.elsevier.com/
0
3415826816
29364629
4113724112
29364628
*
G - 78
Tehnologii Web
G - 79
Tehnologii Web
n PHP se poate folosi func#ia predefinit! setcookie() dup! cum se poate observa
din figura urm!toare (sintaxa acestei func#ii este similar! func#iei JavaScript de mai sus):
G - 80
Tehnologii Web
Accesarea cookie-urilor
Pentru a vedea ce valoare are un cookie, putem consulta antetul HTTP Cookie. Cel mai
lejer este s! prelu!m valoarea variabilei de mediu HTTP_COOKIE setat! de serverul Web n
cadrul unui script CGI scris, de exemplu, n Perl:
@envpairs = split(/;/, $ENV{'HTTP_COOKIE'});
foreach $pair (@envpairs) {
($name, $value) = split(/=/, $pair);
$cookie{$name} = $value;
}
G - 81
Tehnologii Web
n PHP, fiecare cookie este disponibil ca variabil! predefinit!, valoarea unui cookie fiind
accesibil! prin construc#ia $nume_cookie.
Pentru ASP se poate folosi Request.Cookies n maniera de mai jos:
<p>Culoarea preferat! este <%= Request.Cookies("culoare") %>.</p>
G - 82
Tehnologii Web
5. Concluzii
Este dificil de afirmat care dintre tehnologiile "i tehnicile prezentate n cadrul acestui
capitol este cea optim!, totul depinznd de specificul site-ului, de platforma pe care trebuie
s! lucreze aplica#ia Web dorit! a fi implementat! "i de cuno"tin#ele programatorului sau
programatorilor acesteia.
Att CGI, PHP, ct "i ASP, ofer! solu#ii orientate server pentru execu#ia programelor
concepute n limbaje de tip script consacrate - Perl, Tcl, Python - (a"a cum se ntmpl! n
cazul CGI), fie n limbaje specifice (cazul PHP) ori n limbaje script utilizate mai ales pe
partea client, dar oferind func#ionalit!#i "i pe partea server - VBScript sau JavaScript
(n ASP).
Solu#ia oferit! de CGI d! "i posibilitatea de a utiliza programe compilate, concepute n
C/C++. n cadrul ASP pot fi instan#iate controale ActiveX scrise n limbaje precum C++,
Delphi sau Visual Basic, fiind ns! dependente de sistemul de operare. Numai Internet
Explorer suport! in extenso ntreaga tehnologie ActiveX. ASP ofer! o conectivitate bun! cu
sistemele de gestiune a bazelor de date ca Access ori Microsoft SQL, via
ODBC (Open DataBase Connectivity).
Solu#ia pentru viitorul mai ndelungat se ntrevede n combina#ia Apache, server Web
gratuit "i independent de platform!, care poate interpreta scripturi Perl sau Python
(interpretoare pentru aceste limbaje existnd pentru diverse medii) ori poate rula motorul
PHP. O alternativ! viabil! poate fi reprezentat! de JSP (Java Server Pages), bazat! pe
limbajul Java, deja existnd proiectul Apache-Java: JServ sau Servlet Express de la IBM.
De cele mai multe ori, conectivitatea cu bazele de date rela#ionale se realizeaz! printr-un
server oferit gratuit, precum MySQL sau PostgreSQL.
Pentru cei care doresc s! nve#e un alt limbaj script exist! Zope - un alt preprocesor de
script-uri rulate pe serverul Web, care ofer! propriul limbaj DTML (Dynamic Template
Markup Language) coexistnd cu marcatorii HTML, conexiuni cu baze de date "i metode
SQL parametrizate prin ZSQL "i o interfa#! de programare spre Python.
De asemeni, exist! o serie de servere comerciare pentru realizarea de aplica#ii Web,
dintre care putem men#iona Alliare ColdFusion sau IBM WebSphere.
G - 83
Tehnologii Web
Tehnologii Web
1. Istoric i fundamente
1.1 Scurt istoric
Compania Netscape ofer! odat! cu navigatorul Netscape 2.0 un mediu complet,
orientat-obiect, destinat arhitec#ilor de pagini WWW f!r! mult! experien#! n programare.
Acest mediu este JavaScript. Fermecat de tehnologia Java de la Sun, Mark Andreesen de la
Netscape cump!r! licen#a Java "i ofer! un limbaj de tip script bazat pe aceasta, denumit
LiveScript. Ulterior, n luna decembrie 1996, Sun "i Netscape "i-au unit eforturile n
dezvoltarea a celui ce avea s! fie JavaScript, interpretat de Netscape Navigator. Prima
specifica#ie a limbajului JavaScript apare odat! cu lansarea navigatorului Netscape 2.0. n
cadrul versiunilor 3 ale Netscape-ului sunt oferite noi facilit!#i, astfel fiind lansat JavaScript
1.1. Foarte rapid, JavaScript s-a bucurat de succes, n prezent ajungnd la versiunea 1.5
(ap!rut! in noiembrie 2000, fiind implementat! n Netscape 6), sprijinit de multe companii
de software.
Microsoft ofer! propria versiune JavaScript denumit! JScript (versiunea curent! n
martie 2001 fiind 5.5) disponibil! n cadrul navigatorului Internet Explorer, extensiile
(mai mult sau mai putin controversate) ale acesteia fiind cele legate de accesarea sistemului
de fi"iere, de existen#a dic#ionarelor de termeni "i conlucrarea cu VBScript. De cele mai
multe ori, programele JavaScript sunt incompatibile cu cele JScript, proiectan#ii Web
trebuind s! conceap! scripturi diferite, pentru a fi rulate pe ambele platforme:
Netscape Navigator "i Internet Explorer.
Limbajul JavaScript este destinat pentru folosirea exclusiv! n cadrul paginilor Web,
codul surs! fiind interpretat de c!tre navigator (client) la momentul nc!rc!rii documentului
HTML care l con#ine. Netscape permite, mai nou, execu#ia "i pe partea de server a
script-urilor JavaScript.
Limbajul JavaScript a stat la baza conceperii modelului de standard ECMAScript,
dezvoltat de Asocia"ia europeana a produc!torilor de calculatoare (European Computer Manufacturers
Association), aprobat n luna aprilie 1998. Pentru a n#elege mai u"or filosofia JavaScript,
vom face mai nti o prezentare a standardului ECMA.
Tehnologii Web
ECMA Script define"te o serie de obiecte predefinite: Global, Object, Function, Array, String,
Boolean, Number, Math "i Date. Se define"te un set de operatori predefini"i (care pot s! nu fie
func#ii sau metode) similari celor din limbajul JavaScript.
Tipuri de baz#
Tipurile de baz! sunt Undefined, Null, Boolean, String, Object, Reference,
List "i Completion.
O variabil! care nu are asignat! nici o valoare este de tip Undefined. Valorile tipurilor
Reference, List "i Completion sunt utilizate doar ca rezultate intermediare n cadrul
evalu!rii expresiilor "i nu pot fi stocate de propriet!#ile vizibile ale obiectelor. Pentru tipul
Number s-au definit constantele speciale: NaN (Not a Number), +Infinity
"i -Infinity. De asemeni sunt permise valorile +0 "i -0 cu semnifica#ia din matematic!.
Tipul obiect
Un obiect este compus din propriet!#i, fiecare proprietate avnd un nume, o valoare "i
o mul#ime de atribute asociate:
propriety ::= < name, value, attributes >
ReadOnly
Descriere
ncerc!rile de modificare a propriet!#ii respective vor fi ignorate.
n cazuri speciale, o proprietate avnd atributul ReadOnly poate s!-"i
schimbe valorile.
DontEnum
DontDelete
Internal
Propriet!#ile "i metodele interne nu sunt vizibile n mod normal "i numele lor le vom
ncadra ntre [[ "i ]]. Atunci cnd un algoritm utilizeaz! o proprietate intern! a unui
obiect "i obiectul nu are implementat! acea proprietate, va fi generat! o eroare de execu#ie.
Propriet!#ile vizibile vor putea fi consultate prin intermediul metodei get "i vor putea fi
asignate prin put.
Obiectele native ECMA Script posed! o proprietate intern! numit! [[Prototype]],
valoarea acesteia este fie null, fie un obiect, cu ajutorul ei fiind implementat! mo"tenirea.
Propriet!#ile obiectului [[Prototype]] sunt vizibile ca propriet!#i ale obiectului
mo"tenitor, putndu-se doar consulta (prin get) "i nu altera (cu put).
H-3
Tehnologii Web
proprietatea [[Class]]
Operatori
Operatorii ECMA Script sunt similari operatorilor care apar "i n limbajele Java "i
JavaScript, cu urm!toarele observa#ii:
valoarea returnat! de operatorii "&&" ("i logic) "i "||" (sau logic) nu
neap!rat va fi de tip Boolean, fiind ntotdeauna valoarea unuia dintre cei doi
operanzi.
Instruc"iuni
Instruc#iunile limbajului ECMA Script sunt:
instruc#iunea vid! ;
instruc#iunea de test if
H-4
Tehnologii Web
2. Caracterizare
2.1 Generaliti
Ca "i celelalte limbaje de programare, n cadrul JavaScript pot fi definite variabile,
de diverse tipuri scalare sau compuse, pot fi folosite instruc#iuni (de atribuire, de test,
de ciclare, de control), pot fi utilizate obiecte, con#innd metode (func#ii) predefinite sau
descrise de programator.
variabile
n JavaScript variabilele pot fi identificatori compu"i din litere, cifre "i
semnul de subliniere (simbolul " _ "), scopul lor putnd fi local sau global.
Ca "i C ori Java, limbajul este case-sensitive.
tipuri de date
Tipurile predefinite includ: numerele ntregi (n baza 10, 8 sau 16) "i
ra#ionale (scrise n nota#ie zecimal! sau "tiin#ific!), tipul boolean, "irurile de
caractere, tipul Object, tipul Null "i tipul Undefined. Similar limbajului
ECMAScript, o variabil! care nu are asociat! nici o valoare este de tip
Undefined (nedefinit). Nu se face verificarea strict! a tipurilor, a"a cum se
ntmpl!, de exemplu, n Pascal.
operatori
JavaScript include operatorii uzuali aritmetici, rela#ionali, logici, speciali
(precum typeof ori operatorul condi#ional ?: familiar programatorilor n C),
de manipulare a obiectelor. ncepnd cu JavaScript 1.2 se permite utilizarea
expresiilor regulate.
instruc"iuni
Pot fi folosite instruc#iunile de atribuire, bloc, de test (if-else, switch),
repetitive (for, do-while, while), de control (break, continue),
de manipulare a obiectelor (for-in, with). Este permis! definirea func#iilor
de c!tre programator pentru utilizarea lor ulterioar! n cadrul paginilor Web.
H-5
Tehnologii Web
Fiecare obiect poate oferi un set de propriet!#i (membri de tip dat!) calificate prin
construc#ia NumeObiect.NumeProprietate.
Un obiect JavaScript este de fapt un tablou. Aceasta ofer! o alt! posibilitate de a accesa
propriet!#ile unui obiect, folosind numele lor ca indici de tablou:
NumeObiect["NumeProprietate"].
Metodele se apeleaz! ca "i func#iile, precedate ns! de numele obiectului c!ruia i apar#in.
Crearea obiectelor
Un obiect poate fi creat folosind maniera direct! de specificare a unei noi instan#e a unui
obiect, prin operatorul new, ca n exemplul urm!tor:
Pictor = new Object();
Pictor.nume = "Salvador Dali";
Pictor.curent = "suprarealism";
Pictor.perioada = "1904-1989";
H-6
Tehnologii Web
Aceast! abordare, prin prototipuri, difer! de abordarea bazat! pe clas!, din limbajul Java.
Obiecte predefinite
Sunt predefinite obiectele de baz! Array, Boolean, Date, Function, Math,
Number, Object, RegExp, String. Aceste obiecte formeaz! a"a-numitul nucleu JavaScript
(JavaScript core).
sau
arrayObjectName = new Array(arrayLength)
Dac! la definirea unui tablou specific!m toate valorile sale, atunci acel tablou
se nume"te tablou dens.
Un exemplu:
// crearea unui tablou dens
pictor = new Array("Dali", 1904, 1989);
Elementele unui tablou pot fi indexate printr-un ordinal sau prin intermediul
numelui (dac! exist!).
Pentru exemplul de mai sus, putem specifica:
// asignarea unei valori unui element
pictor["Dali"] = "Salvador";
H-7
Tehnologii Web
Urm!torul exemplu creeaz! mai multe obiecte booleene, toate avnd valoarea
ini#ial! false:
bNoParam = new Boolean();
bZero = new Boolean(0);
bNull = new Boolean(null);
bEmptyString = new Boolean("");
bFalse = new Boolean(false);
predefinite o serie de metode utile pentru setarea, consultarea "i modificarea datei,
n mod similar limbajelor Java "i ECMAScript. Urm!torul exemplu, preluat din
documenta#ia original!, furnizeaz! timpul curent sub form! de ceas digital:
function Clock() {
var time = new Date();
// timpul curent
var hour = time.getHours();
// ora curent!
var minute = time.getMinutes();
// minutele curente
var second = time.getSeconds();
// secundele curente
var temp = "" + ((hour > 12) ? hour - 12 : hour);
temp += ((minute < 10) ? ":0" : ":") + minute;
temp += ((second < 10) ? ":0" : ":") + second;
temp += (hour >= 12) ? " P.M." : " A.M.";
// Post-Meridian sau Ante-Meridian?
return temp;
}
Prima form! va ini#ializa un obiect care va stoca data "i timpul curente. Linia
secund! va instan#ia un obiect memornd o dat! specificat! n form! numeric!
(timpul Unix n milisecunde: UTC - Universal Coordinated Time, adic! timpul
scurs de la 1 ianuarie 1970) sau ca "ir de caractere (e.g. "January 07, 1974"). A treia
solu#ie posibil! este s! furniz!m fiecare component! a datei (cele care lipsesc vor fi
H-8
Tehnologii Web
o serie de constante "i de func#ii utile (PI, abs(), sin(), cos(), tan(),
acos(), asin(), atan(), log(), exp(), min(), max(), pow(), random(),
round(), sqrt() etc.).
H-9
Tehnologii Web
standardului ECMAScript.
RegExp
este
utilizat
pentru
manipularea
expresiilor
regulate.
Iat! un exemplu:
function matchDemo()
{
var s;
var re = new RegExp("d(b+)(d)","ig");
var str = "cdbBdbttbdbdy";
var arr = re.exec(str);
s = "$1 contains: " + RegExp.$1 + "<br>";
s += "$2 contains: " + RegExp.$2 + "<br>";
s += "$3 contains: " + RegExp.$3;
return(s);
}
H - 10
Tehnologii Web
function ReplaceDemo()
{
var r, re;
var s = "Un exemplu folosind expresii regulate.";
re = /(\S+)(\s+)(\S+)/g;
// interschimb! fiecare pereche de cuvinte
r = s.replace(re, "$3$2$1");
return(r);
}
function SearchDemo()
{
var r, re;
var s = "O c!utare printr-un "ir";
re = /cau/i;
r = s.search(re);
return(r);
}
function replaceString(oldS, newS, fullS)
{
// nlocuie"te 'oldS' cu 'newS' n "irul 'fullS'
for (var i = 0; i < fullS.length; i++) {
if (fullS.substring(i, i + oldS.length) == oldS) {
fullS = fullS.substring(0,i) + newS +
fullS.substring(i + oldS.length, fullS.length);
}
}
return fullS;
}
2.3 Evenimente
Una dintre caracteristicile interesante ale limbajului JavaScript este cea referitoare la
evenimente. Evenimentele sunt ac#iuni care pot surveni n cadrul paginilor Web, n mod
uzual n urma unor opera#iuni executate de utilizator sau de navigator. La apari#ia unui
eveniment pot fi executate instruc#iuni JavaScript care astfel ofer! posibilitatea de
concepere a unor pagini Web dinamice (vezi mai jos).
Pentru fiecare eveniment care se dore"te a fi tratat, trebuie specificat! o bucat! de cod
care va fi executat! ori de cte ori acel eveniment va apare:
<tag ... onNumeEveniment = "cod JavaScript">
H - 11
Tehnologii Web
H - 12
Tehnologii Web
onClick="displayErrors()">
</form>
</body>
o leg!tur!;
sau peste o leg!tur!;
al acestuia);
liniile de mai jos inhib! redimensionarea ferestrei curente a navigatorului:
<body onResize="self.moveTo(0,0);
self.resizeTo(screen.availWidth,screen.availHeight)">
H - 13
Tehnologii Web
Func#ia de tratare returneaz! valoarea true, n cazul unei leg!turi acest lucru
semnificnd faptul c! acea leg!tur! va fi activat! "i nici un alt eveniment nu va mai
fi tratat;
Func#ia de tratare a unui eveniment particular (e.g. onClick) trebuie nregistrat! ca event
handler pentru acel eveniment, n maniera de mai jos:
window.onClick = Handler;
H - 14
Tehnologii Web
Codul JavaScript poate fi stocat ntr-un fi"ier extern .js "i folosit n cadrul paginii prin
construc#ia:
<script src="script.js"
language="JavaScript" type="text/javascript">
</script>
navigatorului care proceseaz! pagina Web, plus lista de module plug-in (extensii) ale
acestuia.
window este obiectul aflat la nivelul cel mai nalt n ierarhia obiectelor
Exemplu
Pentru pagina Web de mai jos se asociaz! o serie de obiecte JavaScript:
H - 15
Tehnologii Web
n func#ie de con#inut, fiecare document poate avea asociate "i alte obiecte.
H - 16
Tehnologii Web
Obiectul window
Acest obiect reprezint! unul dintre cele mai importante obiecte puse la dispozi#ia
programatorului, putnd desemna fie o fereastr! a navigatorului, fie un anumit cadru (frame)
al unei pagini Web.
Propriet!#ile importante ale obiectului window sunt cele de mai jos:
navigatorului.
Obiectul window are predefinite metode utile precum:
open() - deschide o nou! fereastr! de navigare, putndu-se specifica m!rimea,
localizarea etc.,
close() - nchide o fereastr! de navigare,
alert() - afi"eaz! o fereastr! de dialog con#innd un mesaj de alertare a utilizatorului,
confirm() - afi"eaz! o fereastr! de confirmare prev!zut! cu butoane OK "i Cancel,
prompt() - afi"eaz! o fereastr! de interogare,
scrollto() - efectueaz! o opera#iune de derulare a ferestrei.
Exemple
a. Pentru fiecare leg!tur! n parte la trecerea cursorului mouse-ului peste zona
senzitiv! (definit! prin intermediul marcatorului <map>) a unei imagini va fi afi"at
un text explicativ pe linia de stare:
H - 17
Tehnologii Web
H - 18
Tehnologii Web
// specificarea luminii
vr.write("Separator { DirectionalLight { ");
vr.write("direction 3 -1 -2.5 } ");
// direc#ia de vizualizare
vr.write("PerspectiveCamera { position -8.6 2.1 5.6 ");
vr.write("orientation -0.1352 -0.9831 -0.1233 1.1417 ");
vr.write("focalDistance 10.84 } ");
// cubul de culoare verde
vr.write("Separator { Material { diffuseColor 0 1 0 } ");
vr.write("Transform { translation
-2.4 .2 1 rotation 0 0.5 1 .9 } ");
vr.write("Cube {} } }");
// nchide documentul - (nu fereastra!)
vrml.document.close();
}
Parametrul op#iuni este un "ir de caractere care poate con#ine o serie de valori
delimitate de virgul! desemnnd maniera de afi"are a ferestrei nou create. Cele mai
uzuale sunt:
URL-urilor;
menubar - dac! este yes, meniul navigatorului va apare n partea
superioar! a ferestrei;
dimensiunile;
ferestrei;
a ferestrei;
afi"at!;
H - 19
Tehnologii Web
self.menubar.visible
self.toolbar.visible
self.locationbar.visible
self.personalbar.visible
self.scrollbars.visible
self.statusbar.visible
=
=
=
=
=
=
false;
false;
false;
false;
false;
false;
H - 20
Tehnologii Web
Pentru navigatoarele de genera#ia a patra (i.e. Netscape 4 "i IE 5 sau versiuni ulterioare),
obiectul window mai pune la dispozi#ie "i metoda print() care va avea ca efect listarea
paginii curente:
<script language="JavaScript1.2" type="text/javascript">
function listare() {
if (!window.print)
{
alert("Metoda de listare nu este suportat!.");
return;
}
window.print();
}
</script>
<form>
<input type="button" name="list"
value="Listeaz! pagina"
onClick="javascript:listare()">
</form>
H - 21
Tehnologii Web
Obiectul document
Acest obiect este asociat fiec!rei pagini Web.
Obiectul document are asociate o serie de propriet!#i, dintre care se pot aminti:
consulta);
dect consulta);
consulta);
dect consulta);
consulta);
H - 22
Tehnologii Web
Metodele write() "i writeln() genereaz! cod HTML care va fi inclus n cadrul
documentului, astfel se poate modifica n mod dinamic o pagin! Web.
Exemplu
Aceast! func#ie va afi"a o bar! orizontal! de l!#ime variabil!:
function bar(widthPct) {
document.write("<hr align='right' width='" + widthPct + "%'>");
}
pagina
Web
codul
HTML:
Obiectul form
Pentru fiecare formular prezent ntr-o pagin! Web va fi disponibil un tablou, numit
Forms, de obiecte de tip form. Elementele unui formular (butoane, comutatoare, liste de
selec#ie etc. vor putea fi accesate prin intermediul tabloului elements. Astfel, primul
element al primului formular va fi referit prin document.Forms[0].elements[0].
Obiectele din componen#a unui formular vor fi de tipurile urm!toare: Button,
Checkbox, FileUpload, Hidden, Option, Password, Radio, Reset, Select,
Submit, Text "i Textarea.
Obiectul form se va folosi pentru prelucrarea datelor din formularele HTML pe partea
clientului. Pentru aceasta se pot utiliza fie evenimentele (e.g. onSubmit sau onClick),
fie metoda submit().
Pentru nceput, un exemplu de execu#ie a unei func#ii de prelucrare a formularului
apelat! la apari#ia evenimentului onSubmit:
H - 23
Tehnologii Web
<script language="JavaScript">
function verific(){
if (document.formular.produs.value.length >= 7)
return true;
else {
alert("Lungime mai mic! dect 7 caractere. " +
document.formular.produs.value + " nu este corect.");
return false;
}
}
</script>
<body>
<form name="formular" onSubmit="return verific()">
<b>Introduce#i un nume de produs
de minim 7 caractere:</b>
<input type="text" name="produs" size="7">
<p>
<input type="submit" value="Trimite" name="trimite"
onClick="document.formular.produs.value =
document.formular.produs.value.toUpperCase()">
</form>
n acest caz, formularul va fi trimis spre prelucrare numai dac! sunt ndeplinite toate
condi#iile de validitate (evenimentul onSubmit nu previne expedierea formularului chiar
dac! poate con#ine date eronate).
H - 24
Tehnologii Web
Exemple:
i.
Putem scrie o func#ie JavaScript care va redirecta browserul Web c!tre o alt!
pagin!, prin intermediul unui meniu de navigare rapid!. n antetul paginii,
vom defini urm!toarea func#ie:
<script language="JavaScript" type="text/javascript">
<!-- pentru ascunderea codului la navigatoarele vechi
function formHandler() {
var URL =
document.form.site.options[document.form.site.selectedIndex].value;
if (URL != "")
window.location.href = URL;
}
//-->
</script>
ii.
Pentru a reda accesul la un anumit cmp al unui formular, ne putem folosi
de metoda focus(). Urm!toarea func#ie verific! validitatea unei parole "i dac!
aceasta este eronat! pozi#ioneaz! focusul pe cmpul dorit:
function checkPassword(userPass) {
if (parola este gre#it!) {
alert("Introdu din nou parola!");
userPass.focus();
userPass.select();
}
}
iii.
Urmeaz! un exemplu de folosire a metodei reset() (implementat! de
Netscape 3 sau superior) care va reseta (reini#ializa cmpurile unui formular):
H - 25
Tehnologii Web
<script type="text/javascript">
function verificare(textObject) {
if (textObject.value == 'DESTEPT' ||
textObject.value == 'GENIAL')
alert('Chiar crede#i?:)');
else
document.test.reset();
}
</script>
<form name="test"
onReset="alert('V! rog, introduce#i DESTEPT sau GENIAL!')">
Introduce#i <b>DESTEPT</b> sau <b>GENIAL</b>:
<input type="text" name="minte"
size="7" onChange="verificare(this)">
</form>
Obiectul Image
n mod obi"nuit este creat de constructorul tag-ului <img>, navigatorul completnd
automat un tablou (valoare a proprit!#ii document.images) de obiecte de tip Image
care va con#ine toate imaginile dintr-un document HTML.
Forma general! a constructorului este:
new Image(width, height)
height (n!l#imea);
width (l!#imea);
Obiectul Image poate fi util atunci cnd dorim s! realiz!m anima#ii n cadrul
paginilor Web:
<script language="JavaScript" type="text/javascript">
// timpul de a"teptare
delay = 100;
// indexul imaginii curente
imageNum = 1
// ncarc! imaginile anima#iei
theImages = new Array();
for(i = 1; i < 11; i++) {
theImages[i] = new Image();
theImages[i].src = "image" + i + ".gif";
}
H - 26
Tehnologii Web
// func#ia de anima#ie
function animate() {
document.animation.src = theImages[imageNum].src;
// urm!toarea imagine
imageNum++;
if (imageNum > 10) {
imageNum = 1;
}
}
// modific! viteza de anima#ie
function slower() {
delay += 10;
if (delay > 4000)
delay = 4000;
}
function faster() {
delay -= 10;
if (delay < 0)
delay = 0;
}
</script>
<body bgcolor="white" text="black">
<img name="animation" src="image1.gif" alt="[animation]"
onload="settimeout('animate()', delay)">
<form>
<input type="button" value="slower" onclick="slower()">
<input type="button" value="faster" onclick="faster()">
</form>
</body>
Obiectul location
Acest obiect poate fi folosit pentru a manipula prin program loca#iile (URI-urile) "i
istoricul navig!rii. Propriet!#ile cele mai uzuale pot fi urm!rite n exemplul de mai jos:
newWindow = window.open
("http://www.infoiasi.ro/~busaco/teach/courses/web/web1.html#2");
newWindow.document.write("newWindow.location.href = " +
newWindow.location.href + "<br>");
newWindow.document.write("newWindow.location.protocol = " +
newWindow.location.protocol + "<br>");
newWindow.document.write("newWindow.location.host = " +
newWindow.location.host + "<br>");
newWindow.document.write("newWindow.location.hostName = " +
newWindow.location.hostName + "<br>");
newWindow.document.write("newWindow.location.port = " +
newWindow.location.port + "<br>");
newWindow.document.write("newWindow.location.pathname = " +
newWindow.location.pathname + "<br>");
newWindow.document.write("newWindow.location.hash = " +
newWindow.location.hash + "<br>");
newWindow.document.write("newWindow.location.search = " +
newWindow.location.search + "<br>");
newWindow.document.close();
H - 27
Tehnologii Web
Obiectul navigator
Obiectul Navigator furnizeaz! informa#ii despre navigator "i mediul s!u de rulare, prin
intermediul propriet!#ilor appCodeName, appName, appVersion, language,
platform, userAgent.
document.write("<p>Codul navigatorului: " +
navigator.appCodeName);
document.write("<p>Numele navigatorului: " +
navigator.appName + " " + navigator.appVersion);
document.write("<p>Platforma: " +
navigator.platform);
document.write("<p>Agentul-utilizator: " +
navigator.userAgent);
Platforma
x
x
Windows 2000
H - 28
Tehnologii Web
b.
function ShowFreeSpace(drvPath)
{
var fso, d, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
d = fso.GetDrive(fso.GetDriveName(drvPath));
s = "Drive " + drvPath + " - ";
s += d.VolumeName + "<br>";
s += "Free Space: " + d.FreeSpace/1024 + " Kbytes";
return(s);
}
H - 29
Tehnologii Web
c.
Consultarea listei de fi"iere ale unui director poate fi realizat! de
func#ia urm!toare:
function ShowFolderFileList(foldername)
{
var fso, f, f1, fc, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFolder(foldername);
// folosim obiectul Enumerator pentru a parcurge lista
fc = new Enumerator(f.files);
s = "";
for (; !fc.atEnd(); fc.moveNext())
{
s += fc.item();
s += "<br>";
}
return(s);
}
d.
Pentru consultarea/setarea atributelor fi"ierelor (n acest exemplu
read-only), putem utiliza proprietatea attributes a obiectelor File "i
Folder:
function GetReadOnlyAttr(filename)
{
var fso, f, r, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFile(filename);
// returneaz! starea atributului
return(f.attributes && 1);
}
H - 30
Tehnologii Web
function SetReadOnlyAttr(filename)
{
var fso, f, r, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFile(filename);
// seteaz! atributul
f.attributes = f.attributes || 1;
}
ii.
tratarea excep"iilor
H - 31
Tehnologii Web
function TryCatch(x){
try {
try {
if (x == "")
// evalueaz! argumentul
throw "x este nul";
// semnaleaz! o eroare
else
throw "x nu este nul";// semnaleaz! o alt! eroare
}
catch(e) {
// capteaz! eroarea de mai sus
// verificarea erorii
if (e == "x este nul")
// returneaz! mesajul
return(e + " tratat local.");
else
// eroarea nu se trateaz! aici
throw e;
// retrimite eroarea
}
}
// trateaz! alte erori...
catch(e) {
return(e + " tratat general.");
}
}
document.write(TryCatch(""));
document.write(TryCatch("Salut!"));
H - 32
Tehnologii Web
Pozi"ionarea con"inutului
Exemplu
Vom defini cu ajutorul script-urilor JavaScript un strat identificat prin pictor1 "i un
strat pictor2 plasat cu 50 de pixeli sub partea inferioar! a primului strat. Construc#ia
&{"&"} ne permite s! inser!m n codul HTML valoarea unor expresii JavaScript
(aici valorile atributelor left "i top).
<layer id="pictor1" style="left:50;top;30">
<img width=180 height=135 src="Ernst.jpg">
<h5>Max Ernst (1891-1976)</h5>
</layer>
<layer id="pictor2"
left=&{"&"};{ window.document.pictor1.left };
top=&{"&"};{ window.document.pictor1.top +
document.pictor1.document.height + 50 };>
<img width=70 height=107 src="Dali.jpg">
<h5>Salvador Dali (1904-1989)</h5>
</layer>
H - 33
Tehnologii Web
Acela"i cod nc!rcat n Internet Explorer va avea urm!torul efect (se remarc! faptul c!
elementul <layer> este ignorat, nefiind n#eles):
Descriere
id
left
top
width
height
bgcolor
Toate atributele unui strat pot fi att accesate, ct "i modificate de un program
JavaScript.
Urm!torul exemplu mut! un text dintr-o parte n alta a ferestrei:
H - 34
Tehnologii Web
<html>
<head>
<title>Strate n NS 4</title>
</head>
<body bgcolor="white" text="black">
<layer id="textlayer"
width="200" height="50"
bgcolor="#DDFFDD">
<h2 align="center">Salut!ri din Netscape...!</h2>
<hr size="4">
</layer>
<script language="JavaScript1.2" type="text/javascript">
// func#ia de mutare la stnga a stratului
function move_back() {
document.textlayer.left -= 5;
if (document.textlayer.left < 5)
setTimeout("move_ahead()", 50);
else
setTimeout("move_back()", 50);
}
// func#ia de mutare la dreapta a stratului
function move_ahead() {
document.textlayer.left += 5;
if (document.textlayer.left < 400)
setTimeout("move_ahead()", 50);
else
setTimeout("move_back()", 50);
}
move_ahead();
</script>
</body>
</html>
H - 35
Tehnologii Web
Iat! un exemplu care schimb!, la fiecare 5 secunde, con#inutul stratului definit astfel:
<layer id="strat" width="100%" height="33"></layer>
Documentul inclus ntr-un strat poate fi accesat ntr-un script JavaScript prin construc#ia
document.identificator_strat.document. Codul complet al paginii Web este
urm!torul:
<html>
<head>
<title>Strate n NS 4 (partea a 2-a)</title>
</head>
<body bgcolor="white" text="black">
<layer id="strat"
width="100%" height="30"
bgcolor="lightblue">
</layer>
<script language="JavaScript1.2" type="text/javascript">
// tabloul cu textele alternative
var continut = new Array();
continut[0] = "Bine a#i venit";
continut[1] = "la cursul de";
continut[2] = "<b>Tehnologii Web</b>";
// indic! textul care va fi afi"at
var index = 0;
// func#ia de scriere alternativ! a textelor
function scrie() {
document.strat.document.write(continut[index]);
document.strat.document.close();
if (index == 2) // urm!torul text din tablou
index = 0;
else
index++;
setTimeout("scrie()", 5000);
}
// activeaz! func#ia la nc!rcarea paginii
window.onload = scrie;
</script>
</body>
</html>
Dup! cum se observ!, se pot include "i marcaje HTML n cadrul tabloului con#innd
textele alternative. Efectele execu#iei scriptului prezentat mai sus sunt ilustrate n
continuare:
H - 36
Tehnologii Web
Stratele unui document pot fi accesate prin intermediul tabloului predefinit layers.
Un strat particular este accesat, dup! cum am v!zut, prin numele s!u, stabilit de atributul
id. O parte dintre propriet!#ile unui obiect de tip Layer sunt: document (documentul pe
care l con#ine), name (identificatorul stratului), left, top (pozi#ia), zIndex (ordinea de
afi"are), visibility (vizibilitatea) etc.
Metodele predefinite sunt cele specificnd deplasarea stratului: moveBy(), moveTo(),
moveToAbsolute(), moveAbove(), moveBelow(), redimensionarea: resizeBy()
"i resizeTo() sau nc!rcarea: load().
Ca
la
oricare
obiect,
se
poate
crea
un
nou
strat
prin
construc#ia
Stratele pot fi manipulate "i emulate (par#ial) "i prin intermediul propriet!#ilor din CSS
nivelul 2.
H - 37
Tehnologii Web
Astfel,
putem
manipula
propriet!#ile
de
stil
ale
acestuia
prin
construc#ia
Cele mai importante propriet!#i de stil (inspirate din CSS) sunt date n urm!torul tabel:
Proprietate
Descriere
cursor
position
pixelWidth
pixelHeight
pixelLeft
pixelTop
Folosind aceste propriet!#i putem modifica nf!#i"area oric!rui element prezent ntr-un
document HTML. Propriet!#ile pot fi att consultate, ct "i modificate.
Iat! un exemplu (unde utiliz!m tag-ul <span>) care schimb! culoarea de fond "i
culoarea de afi"are a unui text, atunci cnd plas!m cursorul mouse-ului deasupra lui:
H - 38
Tehnologii Web
<span id="text"
onMouseover="text.style.color='green';
text.style.backgroundColor='yellow';
text.style.cursor='help'"
onMouseout="text.style.color='black';
text.style.backgroundColor='white';
text.style.cursor='default'">
Treci peste mine!...
</span>
Folosind aceste propriet!#i, putem modifica dimensiunile unor imagini atunci cnd
intervin anumite evenimente sau la momente stabilite. Imaginile "i schimb! dimensiunile la
cerere, ceea ce nu se putea realiza pn! acum f!r! a renc!rca documentul:
<img id="logo" src="fcs-logo.jpg"
width="238" height="50"
onMouseover="micsoreaza()" onMouseout="revine()">
<script language="JavaScript1.2" type="text/javascript">
// mic"oreaz! dimensiunile imaginii
function micsoreaza() {
logo.style.pixelWidth = 170;
logo.style.pixelHeight = 33;
}
// revine la forma original!
function revine() {
logo.style.pixelWidth = 238;
logo.style.pixelHeight = 50;
}
</script>
H - 39
Tehnologii Web
H - 40
Tehnologii Web
Aici am folosit proprietatea innerHTML care este asociat! elementelor <span> "i
<div> "i care identific! de fapt con#inutul acestora.
Scrierea de scripturi pentru orice tip de browser
Dup! cum am v!zut n cele de mai sus, mijloacele de realizare a documentelor dinamice
difer! n func#ie de navigatorul utilizat. Dac! n Netscape putem folosi stratele, n Internet
Explorer avem la dispozi#ie diverse propriet!#i asociate n principal elementelor <span> "i
<div>.
n Netscape Communicator, un element <div> pozi#ionat la coordonate absolute se
comport! aproape la fel ca un strat specificat prin <layer>. Astfel, utiliznd n cadrul
documentelor HTML construc#ia:
<div id="identificator" style="position: absolute">
vom ob#ine (aproape) acelea"i efecte indiferent de agentul-utilizator folosit. Mai r!mne
doar s! se identifice browserul n care va rula scriptul "i n cazul Netscape s! se specifice
elementul dinamic prin document.identificator, iar n cazul Internet Explorer prin
identificator.
Din p!cate, n Netscape comportamentul lui <div> nu este 100% compatibil cu
<layer> "i programele JavaScript pot cauza, pe nea"teptate, blocarea sau terminarea
execu#iei aplica#iei.
Identificarea navigatorului se poate realiza urmnd "re#eta" urm!toare (ideea este s!
verific!m existen#a unor obiecte particulare, specifice fiec!rui tip de navigator):
// este Netscape Communicator 4 sau ulterior
// dac! suport! straturi
ns4 = (document.layers) ? true : false;
// este Internet Explorer 4 sau ulterior
// dac! suport! proprietatea 'all'
ie4 = (document.all) ? true : false;
H - 41
Tehnologii Web
Astfel, pot fi afi"ate diverse informa#ii ori pot fi utilizate caracteristici particulare
(e.g. tag-ul <marquee> sau propriet!#i DHTML) numai dac! navigatorul este Internet
Explorer 5 sau ulterior.
Cea mai bun! solu#ie este s! se determine pe partea serverului care versiune "i tip de
navigator sunt folosite de c!tre clientul Web "i s! se trimit! acelui agent-utilizator o pagin!
incluznd script-uri JavaScript specifice browserului folosit pe partea client.
Hello, world!
<p>Clasicul mesaj:</p>
<script type="text/javascript">
document.write("Hello, world!");
</script>
H - 42
Tehnologii Web
b.
<html>
<head>
<script type="text/javascript">
// func#ie de trasare a unei linii orizontale
function myline() {
document.write("<hr align='center' width=75%>");
}
// func#ie de afi"are titluri
function myheading(type, header, message) {
document.write("<h" + type + ">" + header + "</h" +
type + "><p>" + message);
}
</script>
</head>
<body>
<script type="text/javascript">
// apelarea func#iilor definite n antet
myline();
myheading(2, "JavaScript", "Hello, world!");
</script>
</body>
</html>
c.
Recursivitate n JavaScript
<html>
<head>
<script type="text/javascript">
function factorial(n) { // calcul!m factorialul
if ((n == 0) || (n == 1))
return 1;
else {
fact = n * factorial(n - 1);
return fact;
}
}
</script>
</head>
<body>
<script type="text/javascript">
// se afi"eaz! factorialul numerelor de la 0 la 9
for (i = 0; i < 10; i++) {
document.write("factorial de " +
i + " este egal cu ", factorial(i));
document.write("<br>");
}
</script>
</body>
</html>
H - 43
Tehnologii Web
d.
Interactivitate cu utilizatorul
<head>
<script type="text/javascript">
// calculeaz! aria unui cerc
function area(obiect) {
obiect.suprafatacerc.value =
3.1415 * obiect.razacerc.value
* obiect.razacerc.value;
}
</script>
</head>
<body>
<form name="calculcerc">
<p>Raza cercului:
<input type="text"
name="razacerc" size="25">
<input type="button" name="buton"
value="Calculeaz!!"
onclick="area(this.form)">
<p>
Suprafa#a:
<input type="text"
name="suprafatacerc"
size="30">
</p>
</form>
</body>
e.
<head>
<script type="text/javascript">
function calcul(obiect) {
obiect.rezultat.value = eval(obiect.expr.value);
}
</script>
</head>
<body>
<form name="evaldinamic">
<p>
Expresia dorit! (introduce#i numai valori numerice):
<input type="text" name="expr" size="40">
<input type="button"
name="buton" value="Calculeaz!!"
onclick="calcul(this.form)">
<p>
Rezultatul este:
<input type="text" name="rezultat" size="20">
</form>
</body>
H - 44
Tehnologii Web
f.
H - 45
Tehnologii Web
g.
h.
Atunci cnd apel!m metoda write(), ea deschide "i "terge documentul, dac!
acest document nu exist! n cadrul procesului de deschidere "i procesare atunci
cnd este executat!. Urm!torul exemplu ilustreaz! un script care inten#ioneaz! s!
afi"eze timpul curent o dat! la fiecare minut, dar e"ueaz! dup! prima rulare
deoarece se "terge pe el nsu"i:
<html>
<head>
<script type="text/javascript">
function singOut() {
var theMoment = new Date();
var theHour = theMoment.getHours();
var theMinute = theMoment.getMinutes();
var theDisplacement =
(theMoment.getTimezoneOffset() / 60);
theHour -= theDisplacement;
H - 46
Tehnologii Web
H - 47
Tehnologii Web
Dac! utiliz!m metoda alert() n locul lui write() pentru a afi"a date, atunci
scriptul de mai sus ruleaz! corect:
window.alert(theHour + " hours, " +
theMinute + " minutes, Coordinated Universal Time.");
window.setTimeout("singOut()", 60000);
i.
Func#iile de mai jos, f!cnd parte din proiectul AIpaedia, au fost concepute de
absolventul Ovidiu Gheorghie$:
function LiveButton(src1, src2, destination, x, y, z) {
// 'src1', 'src2' sunt sursele (URL-urile) a dou! imagini
// ce vor fi interschimbate atunci cnd mouse-ul va trece
// peste ele; imaginile vor fi afi"ate la coordonatele absolute
// (x, y) cu z-index = z
// se va crea "i o leg!tur! la un document
// aflat la adresa 'destination'
// ini#ializeaz! metodele obiectului
this.mouseOver = LiveButton_mouseOver;
this.mouseOut = LiveButton_mouseOut;
H - 48
Tehnologii Web
Tehnologii Web
Din p!cate, codul de mai sus nu este portabil, fiind rulabil numai sub navigatorul
Netscape.
O solu#ie independent! de browser este urm!toarea:
<script language="JavaScript" type="text/javascript">
// test!m dac! navigatorul suport! imaginile
if (document.images)
{
// instan#ierea obiectelor Image
image1 = new Image;
image2 = new Image;
// nc!rcarea imaginilor
image1.src = "enter1.gif";
image2.src = "enter2.gif";
}
H - 50
Tehnologii Web
Pentru conceperea de programe JavaScript se pot utiliza aplica#ii vizuale, editoare "i
generatoare sofisticate, dintre care putem aminti Macromedia Dreamweaver, Adobe PageMill sau
CS Scribber. Exist! de asemeni o multitudine de aplica#ii de mai mic! anvergur!, specializate
pe o anumit! tematic! (creare de meniuri, prelucrare de formulare, managementul
stratelor etc.). Din aceast! categorie face parte "i Java Script Menu Generator, program
elaborat n Java de studen#ii C!t!lin Constantin Ghiorghi"! "i Monica P!dureanu.
H - 51
Tehnologii Web
H - 52
Tehnologii Web
4. Concluzii
JavaScript este o alternativ! la limbajul Java n ceea ce prive"te conceperea de pagini Web
cu con#inut dinamic, dar nu poate fi folosit dect n contextul unui anumit navigator,
coexistnd cu documentele HTML. JavaScript poate fi utilizat pentru emularea ierarhiei de
obiecte a modelului DOM, reprezentnd o solu#ie facil! pentru programarea pe partea
client a aplica#iilor Web.
Utilizarea cea mai spectaculoas! a stratelor definite de DHTML JavaScript este anima"ia
paginilor WWW, programatorii avnd posibilitatea de a proiecta "i implementa diverse
prezent!ri multimedia (ns! nu att de flexibile precum cele scrise n SMIL).
DHTML mpreun! cu facilit!#ile JavaScript sau JScript ofer! o alternativ! la prezent!rile
proprietare Macromedia Flash.
H - 53
Tehnologii Web
Tehnologii Web
1. Istoric i caracterizare
1.1 Scurt istorie
nc! tn!r, limbajul Java a fost proiectat, mpreun! cu mediul lui de dezvoltare "i de
execu#ie, pentru dezvoltarea de aplica#ii performante destinate aparatelor electronice de larg
consum (portabile, distribuite, lucrnd n timp real), ulterior influen#nd semnificativ
Internetul. Firma Sun, care s-a concentrat n proiectarea acestui nou limbaj, a pornit ini#ial
la drum cu limbajul C, dar din cauza complexit!#ii ridicate a nceput s! dezvolte un
descendent mai flexibil, mai facil, mai portabil. Creatorul limbajului a fost James Gostling,
de asemeni autor al binecunoscutului program de editare Emacs din mediile Unix "i al
sistemului de ferestre NeWS. De"i proiectul (denumit ini#ial Oak de la copacul din fa#a
biroului p!rintelui s!u) a debutat n 1990, specifica#ia noului limbaj s-a dat publicit!#ii abia
n anul 1995 la conferin#a SunWorld din San Francisco. Descoperindu-se c! numele
limbajului era deja utilizat, Oak s-a transformat n Java, devenind deliciul programatorilor
iubitori de cafenele "i de exotice arome. De atunci "i pn! n prezent, lumea Java tr!ie"te
ntr-o continu! agita#ie, ap!rnd alte "i alte inova#ii "i modific!ri ale limbajului, noi tr!s!turi
"i medii de dezvoltare, al!turi de JDK (Java Development Kit) pus la dispozi#ie de
compania Sun: Visual Java (Microsoft), Visual Caf for Java (Symantec), Visual Age for Java
(IBM), SuperCede for Java (Asymetrix) etc. Actualmente (nceputul anului 2001) este
disponibil Java 2 SDK, versiunea 1.3.
O parte dintre proiectan#ii de pagini Web au r!mas reticen#i la noul limbaj, obiectnd fie
complexitatea suficient de ridicat!, fie faptul c! nu oferea toate facilit!#ile prezente n C++
din care se tr!gea. Astfel, Netscape ("i ulterior alte browsere) ofer! un mediu
orientat-obiect, acest mediu fiind JavaScript, pe care l-am prezentat n capitolul precedent.
Aceast! sec#iune nu se dore"te a fi o prezentare exhaustiv! a limbajului Java, pentru mai
multe am!nunte putndu-se consulta bibliografia.
simplitatea
Java ncearc! s! r!mn! un limbaj u"or de utilizat chiar "i de c!tre
programatorii neprofesioni"ti, fiind ndep!rtate aspecte derutante precum
supranc!rcarea operatorilor "i mo"tenirea multipl!. De asemeni, lipse"te
adresarea prin intermediul pointerilor.
portabilitatea
Limbajul Java este independent de ma"ina pe care lucreaz! (suport pentru
portabilitate "i independen#! hardware). n loc s! genereze cod nativ pentru o
platform! particular!, compilatorul va genera o secven#! de instruc#iuni ale
unei ma!ini virtuale Java (Java Virtual Machine - JVM), execu#ia
aplica#iilor fiind interpretat!. Astfel, compilatorul Java nu traduce Java n limbaj
ma"in!, ci ntr-un limbaj pseudo-ma"in! denumit cod binar (byte-code) Java.
Codul binar este limbajul ma"in! pentru calculatorul Java imaginar. Pentru a se
I-2
Tehnologii Web
orientare-obiect
n Java se pot crea clase de obiecte "i instan#e ale lor, se pot ncapsula
informa#iile, suportndu-se mo"tenirea simpl! "i legarea dinamic!. Clasele pot
fi declarate abstracte (o clas! abstract! reprezentnd o clas! pentru care nu
s-au precizat toate metodele astfel nct aceasta s! poate fi folosit! n mod
direct, ci numai prin intermediul unor clase derivate).
Java ns! nu ofer! mo"teniri multiple, suplinite de o facilitate denumit!
interfa"! care permite definirea unui anumit comportament pentru o clas! de
obiecte, altul dect cel specificat de clasa de baz!. Interfe#ele pot fi privite ca
un mecanism mai avansat dect cel al claselor abstracte, util pentru ascunderea
implement!rii metodelor. Astfel, un anumit obiect va fi vizibil numai prin
intermediul interfe#ei sale.
Interfe#ele se pot utiliza pentru descrierea claselor unui program "i pentru
definirea structurii de mo"tenire (derivare) a claselor, dar nu pot fi folosite la
specificarea instan#elor unei clase. Astfel, o interfa#! specific! doar scheletul
unei clase.
A"adar, o interfa#! este un set de opera#ii care trebuiesc definite de o clas!
de obiecte pentru a se nscrie ntr-o anumit! categorie. O clas! care define"te
toate metodele (opera#iile) unei interfe#e se spune c! implementeaz! acea
interfa#!.
distribuirea
Java este un limbaj distribuit, avnd implementate biblioteci pentru lucrul n
re#ea (suport la nivel nalt pentru socket-uri "i apelul la distan#! prin mecanismul
RMI - Remote Method Invocation). Exist! posibilitatea de a concepe
aplica#ii care lucreaz! cu mai multe fire de execu"ie (thread-uri); se ofer! de
asemeni primitive de sincronizare, independente de (ori bazate pe) sistemul de
operare (Unix, OS/2, Windows NT ofer! suport pentru fire de execu#ie
multiple).
Setul de caractere al limbajului este Unicode (pe 16 bi#i), mai flexibil dect setul ASCII
(pe 8 bi#i). Aceast! facilitate ofer! "i posibilitatea de interna#ionalizare a codului.
Tipurile primitive sunt urm!toarele:
I-3
Tehnologii Web
Tip
Valori
Cuvnt cheie
boolean
true, false
boolean
caracter
cod Unicode
char
octet
8 bi#i
byte
scurt
16 bi#i
short
propriu-zis
32 bi#i
int
lung
64 bi#i
long
flotant
32 bi#i
float
dublu
64 bi#i
double
ntreg
real
Tipurile referin"# sunt folosite pentru a referi un obiect din interiorul altui obiect:
Desigur, operatorii sunt similari celor din C "i nu vom mai insista asupra prezent!rii lor.
Excep#ie fac operatorii de concatenare "i asignare de "iruri care sunt cei naturali (desemna#i
de "+" "i "=", respectiv), n limbajul C/C++ fiind implementa#i ca func#ii standard de
bibliotec! (strcat() "i, respectiv, strcmp()).
Instruc"iuni
atribuirea;
I-4
Tehnologii Web
syncronized.
Clase
n prima versiune a limbajului (Java 1.0) a fost introdus un cadru abstract, denumit
Abstract Window Toolkit (AWT), compus dintr-o ierarhie de clase menite a fi utilizate la
crearea interfe#elor grafice cu utilizatorul. Interfe#ele construite pe baza AWT ofer! acela"i
comportament indiferent de platforma pe care ruleaz! aplica#iile Java, dar sunt rudimentare
"i nu pun la dispozi#ie toate facilit!#ile interfe#elor moderne.
Ideea de baz! a AWT era ns! cea de a oferi o bibliotec! portabil! de clase. Astfel, n Java
JDK versiunea 1.1, AWT a devenit o parte important! a unui set de clase pentru
construirea interfe#elor grafice denumit Java Foundation Classes (JFC), similar ierarhiilor de
clase Visual Component Library (VCL) din Delphi ori Microsoft Foundation Classes (MFC) din
Visual C++.
JFC, prin Swing, ofer! posibilitatea cre!rii unor interfe#e grafice profesioniste, nu numai
pentru applet-uri, ct "i pentru aplica#iile standard. Mai multe am!nunte vom da ulterior n
cadrul acestui capitol.
Astfel, puterea limbajului Java rezid! n faptul c! se ofer! o serie de clase predefinite,
grupate, sau ncapsulate n pachete, din care utilizatorul poate deriva propriile sale clase,
mo"tenindu-le pe cele de baz!. Pachetele pot avea nume ierarhice, urmnd structura de
directoare n care sunt stocate clasele compilate.
De exemplu, n distribu#ia Java 1.1.6, sunt puse la dispozi#ie urm!toarele pachete,
con#innd peste 450 de clase "i interfe#e:
java.applet
java.awt.datatransfer
java.awt.event
java.awt
java.awt.image
java.beans
java.io
java.lang
java.lang.reflect
java.math
java.net
java.rmi.dgc
java.rmi
java.rmi.registry
java.rmi.server
java.security.acl
java.security
java.security.interfaces
java.sql
java.text
java.util
java.util.zip
Desigur, fiecare nou! versiune de Java aduce noi pachete "i mbun!t!#e"te pe cele vechi.
Programatorul "i poate defini propriile pachete, gruparea claselor n pachete fiind o
problem! care trebuie rezolvat! la nivelul program!rii.
Dup!
cum
se
poate
observa,
numele
de
pachete
au
sintaxa
[NumePachet.]NumeComponent!Pachet "i exist! o regul! pentru numirea
pachetelor, astfel nct s! nu apar! conflicte. Conven#ia este aceea de a utiliza numele
domeniului Internet apar#innd produc!torului (autorului) claselor. De exemplu,
am putea avea:
I-5
Tehnologii Web
com.superlookup.bot.WebIndexer
java.servlet.Servlet
org.ieee.agent.kqml.KQML
com.ibm.aglet.Aglet
instan#a
JavaScript
reprezint!
entit!#i
I-6
Tehnologii Web
Script JavaScript
Interpretat de client.
I-7
Tehnologii Web
2. Applet-uri
A"a cum am v!zut mai sus, applet-urile Java sunt mici aplica#ii Java care sunt apelate
dintr-un document HTML, fiind nc!rcate n momentul acces!rii paginii Web de pe server
"i executate (interpretate) pe ma"ina clientului. Fiecare applet are rezervat! o fereastr! prin
care comunic! cu utilizatorul, definit! de marcatorul <applet>.
Pentru a vedea efectiv rezultatele rul!rii applet-ului, scriem o pagin! minimal! care va
apela applet-ul de mai sus. n prealabil, applet-ul va trebui compilat cu un compilator Java
(i.e. javac) care va genera un fi"ier byte-code Java cu extensia .class.
I-8
Tehnologii Web
<html>
<head><title>Hello world!</title></head>
<body>
<p>Un mesaj:
<applet code="HelloWorldApplet.class"
width="150" height="150"></applet>
</body>
</html>
Applet-ul definit mai sus nu define"te dect dou! metode: una de ini#ializare, necesar!
pentru organizarea mediului n care ruleaz! applet-ul (de cele mai multe ori, navigatorul
Web) "i una de desenare a spa#iului destinat applet-ului n interiorul unei pagini Web).
Metoda init() va redimensiona spa#iul zonei de desenare, iar paint() va afi"a n acest
spa#iu un mesaj de salut.
Applet-ul definit mai sus poate accepta "i parametri ("irul de afi"at) care trebuie
specifica#i de tag-ul <param>. De exemplu, n loc de "Hello, world!" putem specifica
"Hello, Faculty of Computer Science!" incluznd dup! <applet> "i:
<param name="msg" value="Hello, Faculty of Computer Science!">
Execu#ia unui applet este marcat! de o serie de evenimente generate de c!tre navigator.
Cnd acesta ntlne"te <applet>, va porni nc!rcarea (folosind tot protocolul HTTP)
codului necesar rul!rii applet-ului, cod aflat pe server "i care va fi executat pe calculatorul
client, odat! ce a fost nc!rcat complet. Dup! nc!rcare, applet-ul este apelat pentru
ini#ializare (preg!tirea parametrilor "i ob#inerea de resurse sistem). Dup! aceast! etap!,
navigatorul trimite c!tre applet o comand! de pornire "i applet-ul intrat n func#iune va
interac#iona cu utilizatorul.
I-9
Tehnologii Web
2.2 Detalii
Applet-urile sunt construite folosind un cadru obiectual de dezvoltare a aplica#iilor,
ele trebuind s! redefineasc! metodele clasei Applet. Cele mai importante metode sunt
sintetizate n tabelul de mai jos:
Metod#
Descriere
init()
start()
paint()
I - 10
Tehnologii Web
stop()
Este apelat! ori de cte ori applet-ul dispare din fereastra curent!
a navigatorului, pentru a opri (temporar) opera#iunile executate de
applet; de obicei va fi apelat! nainte de destroy().
destroy()
I - 11
Tehnologii Web
// ini#ializare
public void init() {
add(b1); // adaug! butoanele
add(b2);
}
// tratarea evenimentelor
public boolean action(Event evt, Object arg) {
// s-a ap!sat primul buton
if (evt.target.equals(b1))
getAppletContext().showStatus("Un salut");
// s-a ap!sat al doilea buton
else if (evt.target.equals(b2))
getAppletContext().showStatus("Alt salut");
// s-a ap!sat altceva
else
// clasa de baz! se ocup! de eveniment
return super.action(evt, arg);
return true;
}
}
Clasa Component pune la dispozi#ie "i alte metode care pot fi utilizate ca alternative la
action(): keyDown(), keyUp(), gotFocus(), lostFocus(), mouseDown(),
mouseUp(), mouseMove(), mouseEnter(), mouseExit().
Cmpuri text
Putem folosi cmpuri text editabile prin intermediul componentei TextField
(mo"tenit! din componenta mai general! TextComponent). Astfel, modificnd exemplul
de mai sus, nu vom mai utiliza linia de stare a navigatorului pentru a afi"a texte, ci un
TextField. Aceast! abordare este similar! program!rii vizuale n Delphi, de pild!.
Codul applet-ului este urm!torul:
// Butoane "i texte
import java.awt.*;
import java.applet.*;
public class TextFieldApplet extends Applet {
// dou! butoane
Button
b1 = new Button("Adaug un salut"),
b2 = new Button("Sterg");
I - 12
Tehnologii Web
Se constat! faptul c! de"i cmpul nu mai poate fi editat de utilizator, prin program se pot
ad!uga noi caractere.
I - 13
Tehnologii Web
TextFieldApplet n execu"ie
Pentru editarea de c!tre utilizator a unei cantit!#i mai mari de text, n locul lui
TextField se poate folosi TextArea.
Etichete
Pentru a nzestra anumite elemente de interac#iune cu texte explicative, vom utiliza
componenta Label, dup! cum se poate vedea din exemplul de mai jos:
...
// un cmp text
TextField t = new TextField("t", 20);
// o etichet! aliniat! la stnga
Label lab = new Label("Numele: ", Label.LEFT);
...
// ad!ug!m componentele pe canvas
add(lab);
add(t);
...
I - 14
Tehnologii Web
Liste
Choice permite selectarea unui element dintr-o list! de op#iuni (texte), func#ionalitatea
lui emulnd par#ial combo-listele din Windows. Utilizatorul nu va putea selecta mai mult de un
singur element.
I - 15
Tehnologii Web
import java.awt.*;
import java.applet.*;
public class ChoiceApplet extends Applet {
String[]
culori = { "Ro"u", "Galben", "Albastru" };
TextField t = new TextField(30);
Choice c = new Choice();
// un contor
int count = 0;
// ini#ializare
public void init() {
// textul nu este editabil
t.setEditable(false);
// adaug! pe canvas controalele
for(int i = 0; i < culori.length; i++)
c.addItem(culori[count++]);
add(t);
add(c);
}
// tratare evenimente
public boolean action (Event evt, Object arg) {
if (evt.target.equals(c))
t.setText("s-a ales [" +
c.getSelectedIndex() + "] " + (String)arg);
else
return super.action(evt, arg);
return true;
}
}
Pentru selec#ii multiple, dar f!r! a fi derulante, vom folosi liste de tip List. Pentru a afla
care elemente au fost selectate se va apela metoda getSelectedItems(). Ac#iunea
implicit! n cazul componentei List este click-ul dublu, nu cel simplu. Un simplu click
va avea drept efect selectarea sau deselectarea unui element din list!, iar un dublu click va
apela action().
D!m mai jos un exemplu n care utilizatorul poate selecta culori dintr-o list! de maxim
cinci culori (ini#ial fiind afi"ate numai trei dintre ele).
public class ListApplet extends Applet {
String[] culori = { "Ro"u", "Galben", "Albastru",
"Alb", "Negru" };
// afi"eaz! elementele "i
// permite selec#ia multipl!
List lst = new List(5, true);
TextArea t = new TextArea(culori.length, 30);
Button b = new Button("Adaug!");
I - 16
Tehnologii Web
int count = 0;
public void init() {
t.setEditable(false);
// va afi"a doar primele 3 elemente
for(int i = 0; i < 3; i++)
lst.addItem(culori[count++]);
add(t);
add(lst);
add(b);
}
public boolean action (Event evt, Object arg) {
if (evt.target.equals(lst)) {
t.setText("");
String[] items = lst.getSelectedItems();
// listeaz! culorile selectate
for(int i = 0; i < items.length; i++)
t.appendText(items[i] + "\n");
}
else
if (evt.target.equals(b)) {
if (count < culori.length)
lst.addItem(culori[count++], 0);
}
else
return super.action(evt, arg);
return true;
}
}
I - 17
Tehnologii Web
I - 18
Tehnologii Web
Moduri de prezentare
Elementele de interfa#! ale unui applet pot fi dispuse pe zona de afi"are (acel canvas
pomenit mai sus) n mai multe maniere. Toate applet-urile anterioare au utilizat schema
implicit! de prezentare, denumit! FlowLayout, n care navigatorul decide pozi#ionarea
componentelor, conform unui algoritm intern, astfel nct s! ocupe o suprafa#! minim!.
Vom genera o multitudine de cmpuri text:
import java.awt.*;
import java.applet.*;
public class FlowLayoutApplet extends Applet {
public void init() {
// set!m modul de prezentare
setLayout(new FlowLayout());
for(int i = 0; i < 33; i++)
add(new TextField("Eu sunt al " + i + " lea", 33));
}
}
Pentru amplasarea echilibrat! a elementelor (mai ales n cazul boxelor de dialog) se poate
utiliza BorderLayout. Vor exista patru regiuni, denumite dup! punctele cardinale, plus o
zon! central!. Metoda add() va insera un alt control n zona dorit! de programator:
I - 19
Tehnologii Web
import java.awt.*;
import java.applet.*;
public class BorderLayoutApplet extends Applet {
public void init() {
setLayout(new BorderLayout());
add("North", new TextField("La nord", 10));
add("South", new Button("La sud"));
add("East", new Button("La est"));
add("West", new TextField("La vest"));
add("Center", new TextArea("n centru", 3, 33));
}
}
Dac! dorim ca elementele s! fie plasate ntr-un grid (tabel!) de la stnga la dreapta "i
de sus n jos, vom utiliza GridLayout. Pentru a ad!uga un spa#iu gol n cadrul zonei de
afi"are a applet-ului se va putea adopta prezentarea bazat! pe CardLayout.
I - 20
Tehnologii Web
Applet-ul RGB2HexApplet
I - 21
Tehnologii Web
import java.awt.*;
import java.applet.*;
public class RGB2HexApplet extends Applet {
// controalele interfe#ei (vezi mai jos)
RGBcontrols controls;
// ini#ializare
public void init() {
// schimb! modul de prezentare
setLayout(new BorderLayout());
RGBcanvas c = new RGBcanvas();
// adaug! elementele de interfa#!
add("Center", c);
add("North", controls = new RGBcontrols(c));
}
}
// o clas! pentru reprezentarea n baza 16
// a unui num!r din baza 10
class HexInt {
int HInt;
// constructor
public HexInt(int AnInteger){
HInt = AnInteger;
}
// convertire n "ir de caractere
public String toHexString(int StrLen) {
String HexString;
HexString = Integer.toString(HInt,16);
while (HexString.length() < StrLen)
HexString = "0" + HexString;
return HexString.toUpperCase();
}
}
// implementeaz! un obiect pentru vizualizarea culorilor
class RGBcanvas extends Canvas {
// valori implicite pentru culori
int RedValue = 0;
int GreenValue = 0;
int blueValue = 0;
Color createColor;
// redefinire metod! de afi"are
public void paint(Graphics g) {
Rectangle r = bounds();
// afi"are culoare
createColor = new Color(RedValue, GreenValue, blueValue);
g.setColor(createColor);
g.fillRect(0, 0, r.width, r.height);
}
I - 22
Tehnologii Web
I - 23
Tehnologii Web
return true;
}
return false;
}
}
I - 24
Tehnologii Web
// ini#ializare
public void init() {
// adaug! un ascult!tor (clas!)
// pentru fiecare buton
b1.addActionListener(new B1());
b2.addActionListener(new B2());
// adaug! butoanele pe canvas
add(b1);
add(b2);
}
// clasa ascult!tor pentru primul buton
// (implementeaz! interfa#a ActionListener)
class B1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getAppletContext().showStatus("Un salut");
}
}
// clasa ascult!tor pentru al doilea buton
class B2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getAppletContext().showStatus("Alt salut");
}
}
}
Acest applet nu va mai trebui compilat cu op#iunea -deprecation "i nu vom mai
ob#ine nici un avertisment de folosire a unor caracteristici nvechite ale limbajului.
Interfa#a predefinit! ActionListener con#ine numai metoda actionPerformed()
care va trebui redefinit! pentru a executa codul dorit de programator la activarea unui
buton. Textul va fi scris pe bara de stare a navigatorului doar la apari#ia evenimentului
Action asupra butonului vizat, celelalte evenimente nefiind tratate n nici un fel.
De exemplu, pentru a reac#iona la mutarea mouse-ului deasupra unui buton, ar fi trebuit s!
implement!m o clas! pentru interfa#a MouseListener "i ar fi fost necesar! o
metod! addMouseListener(). Pentru eliminarea acestui ascult!tor se va folosi metoda
removeMouseListener().
Desigur, o component! a interfe#ei cu utilizatorul poate avea asocia#i mai mul#i
ascult!tori (de exemplu, cnd dorim ca o zon! de text s! reac#ioneze la mai multe
evenimente produse de mouse sau de tastatur!).
Un alt exemplu, n care implement!m un ascult!tor pentru evenimentul de modificare a
barei de defilare:
I - 25
Tehnologii Web
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class ScrollbarApplet extends Applet
// implementeaz! un ascult!tor
// pentru o bar! de defilare
implements AdjustmentListener {
// membri priva#i:
// bara de defilare
private Scrollbar baraDefilare;
// valoarea asociat! barei de defilare
private int valoareBaraDefilare = 0;
// ini#ializare
public void init() {
// o bar! de defilare orizontal!
baraDefilare = new Scrollbar(Scrollbar.HORIZONTAL,
0, 1, 0, 100);
add(baraDefilare);
// asociaz! ascult!torul
baraDefilare.addAdjustmentListener(this);
}
// metoda de afi"are a applet-ului
public void paint(Graphics g) {
g.drawString("Valoarea curent! este: " +
valoareBaraDefilare, 100, 100);
}
// trateaz! evenimentul de modificare a barei
public void adjustmentValueChanged(AdjustmentEvent e) {
valoareBaraDefilare = baraDefilare.getValue();
repaint();
}
}
I - 26
Tehnologii Web
Eveniment
Interfa"a de ascultare
Componente
Action
(ac#iunea
implicit! a unei
componente)
ActionListener
addActionListener()
removeActionListener()
Button, List,
TextField, MenuItem "i
Adjustment
(manipularea
zonei de afi"are)
AdjustmentListener
addAdjustmentListener()
removeAdjustmentListener()
Focus
(focalizarea
asupra unei
componente)
FocusListener
addFocusListener()
removeFocusListener()
Key
(interac#iunea cu
tastatura)
KeyListener
addKeyListener()
removeKeyListener()
Mouse
(interac#iunea cu
mouse-ul, clickuri "i mi"care)
Component
Component
MouseListener
addMouseListener()
removeMouseListener()
MouseMotionListener
addMouseMotionListener()
removeMouseMotionListener()
Window
(fereastra de
afi"are)
WindowListener
addWindowListener()
removeWindowListener()
Item
(elemente
selectabile)
ItemListener
addItemListener()
removeItemListener()
Text
(elemente
textuale)
TextListener
addTextListener()
removeTextListener()
Component
Windows
component! implementnd
interfa#a ItemSelectable
componente derivate din
TextComponent
(e.g. TextField sau
TextArea)
I - 27
Tehnologii Web
Interfa"a
Metodele interfe"ei
ActionListener
actionPerformed(ActionEvent)
AdjustmentListener adjustmentValueChanged(AdjustmentEvent)
ComponentListener
componentHidden(ComponentEvent)
componentShown(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)
ContainerListener
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
FocusListener
focusGained(FocusEvent)
focusLost(FocusEvent)
KeyListener
keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
MouseListener
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
MouseMotionListener
mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
WindowListener
windowOpened(WindowEvent)
windowClosing(WindowEvent)
windowClosed(WindowEvent)
windowActivated(WindowEvent)
windowDeactivated(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
ItemListener
itemStateChanged(ItemEvent)
TextListener
textValueChanged(TextEvent)
Interfe"ele de ascultare !i metodele lor
Adaptori
Din tabelul anterior, putem observa c! anumite interfe#e de ascult!tori posed! mai multe
metode pe care programatorul va trebui s! le implementeze n cadrul aplica#iilor sale,
ceea ce n anumite situa#ii poate deveni deranjant, din moment ce este nevoie numai de un
singur ascult!tor.
Pentru a solu#iona aceast! problem!, ne vom folosi de ni"te metode speciale, denumite
adaptori. Pentru fiecare clas! de componente care posed! mai mult de un singur ascult!tor,
se pune la dispozi#ie un adaptor (e.g. WindowAdapter, FocusAdapter sau
MouseAdapter). Putem utiliza un adaptor n locul unei interfe#e pentru a implementa
numai metodele dorite. Astfel, adaptorii pot fi privi#i doar ca facilitatori ai cre!rii de
ascult!tori pentru programele Java.
I - 28
Tehnologii Web
Putem folosi adaptorii pentru a scrie clase care s! fie invocate att de o aplica#ie Java de
sine-st!t!toare, ct "i de un applet. Acest lucru se realizeaz! ad!ugnd metoda main() la
un applet. Metoda main() va crea o instan#! a applet-ului din interiorul unei componente
Frame. Iat! o exemplificare:
import java.awt.*;
import java.awt.event.*; // tratarea evenimentelor
import java.applet.*;
public class ButtonL2Applet extends Applet {
// dou! butoane
Button
b1 = new Button("Salut"),
b2 = new Button("Alt salut");
// ini#ializare
public void init() {
// adaug! un ascult!tor
// pentru fiecare buton
b1.addActionListener(new B1());
b2.addActionListener(new B2());
// adaug! butoanele pe canvas
add(b1);
add(b2);
}
// clasa ascult!tor pentru primul buton
// (implementeaz! interfa#a ActionListener)
class B1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getAppletContext().showStatus("Un salut");
}
}
// clasa ascult!tor pentru al doilea buton
class B2 implements ActionListener {
public void actionPerformed(ActionEvent e) {
getAppletContext().showStatus("Alt salut");
}
}
// adaptor pentru evenimentul de nchidere a ferestrei
static class WL extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0); // iese din aplica#ie
}
}
// metoda main() pentru aplica#ie
public static void main(String[] args) {
// instan#iaz! un applet
ButtonL2Applet applet = new ButtonL2Applet();
// un cadru
Frame aFrame = new Frame("ButtonL2Applet");
// adaug! un ascult!tor pentru fereastr!
aFrame.addWindowListener(new WL());
I - 29
Tehnologii Web
// insereaz! applet-ul
aFrame.add(applet, BorderLayout.CENTER);
// seteaz! zona de afi"are
aFrame.setSize(300,200);
// ini#ializeaz! applet-ul
applet.init();
applet.start();
aFrame.setVisible(true);
}
}
de cod
Bare de defilare
Putem nzestra elementele interfe#ei grafice (de exemplu, ariile de text) cu bare de
defilare (scroll). Barele de defilare pot fi plasate pe vertical! "i/sau pe orizontal!. Acest lucru
se specific! ad!ugnd al patrulea argument la constructorul TextArea.
n exemplul de mai jos, vom concepe un applet care are dou! arii de text, fiecare cu
propriile sale bare de defilare:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class TextAreaSApplet extends Applet {
// dou! butoane
Button b1 = new Button("Adaug!");
Button b2 = new Button("%terge");
// dou! zone de text
TextArea t1 = new TextArea("t1", 4, 30,
TextArea.SCROLLBARS_VERTICAL_ONLY);
TextArea t2 = new TextArea("t2", 10, 10,
TextArea.SCROLLBARS_BOTH);
// ini#ializare
public void init() {
b1.addActionListener(new B1L());
b2.addActionListener(new B2L());
add(b1);
add(b2);
add(t1);
add(t2);
}
I - 30
Tehnologii Web
// implementarea ascult!torilor
class B1L implements ActionListener {
public void actionPerformed(ActionEvent e) {
t1.append(t2.getText() + "\n");
t2.append(t1.getText() + "\n");
}
}
class B2L implements ActionListener {
public void actionPerformed(ActionEvent e) {
t1.setText("");
t2.setText("");
}
}
}
Un buton va ad!uga textul dintr-o zon! la cealalt!, iar alt buton va "terge ambele zone de
text. Desigur, pot fi utilizate "i constantele SCROLLBARS_HORIZONTAL_ONLY (pentru a
apare numai bare de defilare orizontale) sau SCROLLBARS_NONE (dac! nu dorim s! existe
bare de defilare).
Drept exerci#iu util, cititorul poate ncerca s! rescrie exemplele de applet-uri din
sec#iunea anterioar!, convertind codul Java de la stilul vechi la cel nou.
intermediul
ii.
iii.
Modelul are ca date de intrare cele furnizate de control, iar ie"irea lui trimis!
componentei de vizualizare. Desigur, cele spuse aici sunt valabile "i pentru interfe#ele
paginilor Web.
Pentru control "i vizualizare de cele mai multe ori se apeleaz! la o serie de biblioteci
pentru crearea de interfe#e grafice, una dintre ele fiind Swing.
Dup! cum am precizat la nceputul acestui capitol, biblioteca de clase Swing reprezint! un
cadru independent de platform! pentru conceperea de interfe#e atractive, conceput complet
n Java 1.1. Orice aplica#ie Swing poate fi utilizat! f!r! mouse, suport! foarte u"or defilarea
folosind barele de scroll, iar interfa#a cu utilizatorul poate fi modificat! ntr-o manier!
dinamic!.
Din punctul de vedere al programatorului, aplica#iile Swing sunt u"or de implementat,
orice cod Java 1.1 putnd fi convertit imediat n cod Swing. n multe cazuri, nu avem de
f!cut dect s! ad!ug!m litera "J" naintea oric!rui nume de clas! de componente.
Unul dintre exemplele de mai sus poate fi rescris astfel:
I - 31
Tehnologii Web
import
import
import
import
Din acest exemplu putem remarca faptul c! putem ata"a un text explicativ (tool-tip)
oric!rei componente de interfa#! (mo"tenite din clasa JComponent).
Pentru a ne face o idee despre posibilit!#ile Swing, vom prezenta succint n continuare
unul dintre elementele de interfa#! cu utilizatorul foarte des folosit.
Butoane
O alt! noutate este cea referitoare la butoane. Toate butoanele sunt derivate dintr-o clas!
abstract! denumit! AbstractButton. Astfel, pot fi specificate mai multe tipuri de
butoane, n func#ie de nevoile aplica#iei. Am specificat, de asemeni, culoarea de fundal
pentru canvas-ul pe care vor fi afi"ate butoanele.
I - 32
Tehnologii Web
I - 33
Tehnologii Web
De asemeni, pentru gruparea diverselor tipuri de butoane (e.g. butoanele radio) se poate
utiliza ButtonGroup.
Alte facilit#"i
Nu inten#ion!m s! epuiz!m aici toate caracteristicile ierarhiilor de clase Swing.
Astfel, printre altele cu ajutorul lui Swing pot fi incluse, n cadrul interfe#elor grafice,
ferestre de dialog (definite de programator sau predefinite: JColorChooser,
JFileChooser, JHTMLPane), icon-uri (imagini), meniuri orizontale sau de tip pop-up,
structuri arborescente (JTree) con#innd alte elemente de interfa#!, se pot selecta n
manier! dinamic! mai multe tipuri de interfe#e grafice. Pentru mai multe am!nunte pute#i
consulta codul surs! al aplica#iilor demonstrative din JDK.
Iat! un instantaneu dintr-un applet dezvoltat n Swing:
I - 34
Tehnologii Web
I - 35
Tehnologii Web
servlet-uri;
utilitare: sunt oferite unelte pentru urm!rirea cererilor "i a erorilor, pentru
managementul memoriei, pentru generarea de alarme etc.
clientul (de cele mai multe ori navigatorul Web) formuleaz! o cerere HTTP;
I - 36
Tehnologii Web
5.
Dup! cum se poate remarca, maniera de operare a unui servlet este apropiat! celei de
invocare a unui script CGI.
Ca exemple de utilizare se pot men#iona generarea de documente HTML dinamice,
procesarea XML "i XSL la nivelul serverului, conectivitatea cu sistemele de management
al bazelor de date, prin JDBC (Java DataBase Connectivity).
Avantajele folosirii servlet-urilor sunt urm!toarele:
pot fi mai rapide "i mai sigure dect script-urile CGI scrise n limbaje
interpretate;
pot fi nl!n#uite (un servlet poate apela unul sau mai multe servlet-uri, n
mod secven#ial);
sunt persistente; servlet-urile sunt nc!rcate numai o singur! dat! "i pot
men#ine servicii (de exemplu, conexiuni cu bazele de date) ntre cereri HTTP
multiple.
Exist! "i alte medii de dezvoltare "i de execu#ie a servlet-urilor, dintre care pot fi
men#ionate Apache JServ, Jigsaw HTTP Server al Consor#iului Web, Servlet CGI Development Kit
(Unicom).
Biblioteca de dezvoltare a aplica#iilor JavaServer asigur! independen#a de protocol, poate
fi extins! (mo"tenindu-se func#ionalitatea claselor de baz! care pot fi dezvoltate ulterior de
programatori) "i este simpl!. De asemeni, exist! posibilitatea de a fi utilizate o serie de
servlet-uri interne (predefinite), cum ar fi:
Invoker
Includes),
utilizator),
Java),
I - 37
Tehnologii Web
pe partea server).
Ciclul de via"# a unui servlet
Ciclul de via#! a unui servlet Java este rezumat de urm!torii pa"i:
1.
2. servlet-ul trateaz! zero, una sau mai multe cereri provenite din partea
clien#ilor (browsere Web);
3. serverul opre"te servlet-ul "i elibereaz! resursele ocupate de acesta (anumite
servere Web vor executa acest pas la nchiderea serverului) - se apeleaz! metoda
destroy().
Servlet-ul va fi rulat de c!tre ma"ina virtual! Java a motorului de servlet-uri instalat pe
serverul Web.
Servlet-urile pot satisface cererile HTTP n manier! concurent!, folosind mecanismul
firelor de execu#ie multiple oferit de limbajul Java. Accesul la baze de date se va face,
n mod uzual, prin intermediul JDBC. Pentru servlet-uri complexe, se vor folosi tehnologii
precum CORBA sau RMI.
I - 38
Tehnologii Web
Un exemplu
Cel mai simplu servlet are codul urm!tor:
import javax.servlet.*;
public class HelloServlet extends HttpServlet
{
// construie"te o pagin! Web afi"nd un mesaj de salut
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ // metod! apelat! la recep#ionarea cererii GET
PrintWriter out;
String
title="Hello, world!";
// trimite tipul MIME n cmpul de antet
response.setContentType("text/html");
// apoi trimite con#inutul paginii
out = response.getWriter();
out.println("<html><head>");
out.println("<title>" + title + "</title>");
out.println("</head>");
out.println("<body text=\"blue\" bgcolor=\"white\">");
out.println("<h2 align=\"center\">" + title + "</h2>");
out.println("</body></html>");
}
}
I - 39
Tehnologii Web
Mai multe servlet-uri, rulnd pe acela"i server Web pot partaja resurse, prin intermediul
interfe#ei ServletContext. Resursele partajate se vor numi atribute "i vor fi manipulate
cu metodele setAttribute(), getAttribute() "i removeAttribute().
Pentru a evita ambiguit!#ile de numire a atributelor se folosesc acelea"i conven#ii de
denumire a pachetelor Java. Astfel, un atribut ar putea avea numele
infoiasi.studs.xml.docname. Numele prefixate de java, javax ori sun sunt
rezervate.
Pentru a seta valoarea unui atribut vom utiliza metoda setAttribute(), acest lucru
efectundu-se de obicei la ini#ializarea servlet-ului. Din moment ce un servlet seteaz! un
atribut, oricare alt servlet va putea avea acces la acest atribut.
Un exemplu, n care atributul infoiasi.stud.xml.docname va fi setat la
ini#ializarea unui servlet. Se verific! ini#ial dac! valoarea atributului nu a fost deja setat! de
alt servlet (clasa XMLDoc reprezint! un document XML):
public class XMLServlet extends HttpServlet {
public void init() throws ServletException
{
XMLDoc xmldoc = (XMLDoc) getServletContext().
getAttribute("infoiasi.stud.xml.docname");
// nu a fost setat nc!?
if (xmldoc == null) {
getServletContext().setAttribute("infoiasi.stud.xml.docname",
XMLDoc.instance());
}
}
...
}
n acest mod, resursa reprezentnd un document XML va putea fi accesat! de mai multe
servlet-uri Java rulnd pe acela"i server Web.
I - 40
Tehnologii Web
javac
java
jre
jdb
javadoc
appletviewer
native2ascii
jar
Arhivator de fi"iere .class, imagini "i sunet ntr-o singur! arhiv! Java
(JAR) pentru a mic"ora timpul de transfer (se asigur! astfel o unic! tranzac#ie
HTTP pentru a aduce de pe re#ea toate fi"ierele necesare rul!rii applet-urilor).
Astfel, putem specifica n cadrul unui marcator <applet> "i arhiva .jar
care con#ine applet-ul dorit a fi executat:
<applet code="tetris.class"
archive="tetris.jar"
width="500" height="433">
</applet>
I - 41
Tehnologii Web
5. Prezent i viitor
n ciuda tinere#ii sale, limbajul Java a avut, are "i va avea o dezvoltare incredibil!, n
special n partea aplica#iilor Web.
JavaOS - un sistem de operare compact, proiectat pentru a rula programe Java direct pe
microprocesoarele oric!rui echipament electronic: calculator de re#ea, imprimant!, automat
pentru jocuri, telefon celular etc., interfa#a de programare JDBC (Java DataBase
Connectivity) destinat! conect!rii la baze de date prin Java permi#nd unei aplica#ii client
s! acceseze direct sistemul de gestiune a unei baze de date, executnd instruc#iuni SQL, mii
de applet-uri disponibile (emulatoare de terminale TELNET, jocuri interactive, anima#ii,
programe de tele-conferin#e "i altele), XP (James Clark's XML Parser) - un analizator
lexical XML, JavaCC (Java Compiler-Compiler) - generator de analizatoare lexicale
orientat-obiect, pentru limbajul Java, toate acestea "i multe altele sunt m!rturii c! lumea
programatorilor n Java este n plin! efervescen#! "i c! n viitor vom asista, sper!m, la o
maturizare "i stabilizare n specifica#iile limbajului.
I - 42
Tehnologii Web
Tehnologii Web
1. Proiectarea i organizarea
site-urilor Web
1.1 Proiectarea sitesite - urilor Web
Ca "i la ingineria software, atunci cnd trebuie construit un site Web se iau n
considera#ie, n vederea rafin!rii ulterioare, fazele urm!toare:
cerin#ele;
men#inerea.
J-2
Tehnologii Web
b.
c.
paginile subsidiare
Site-ul trebuie s! fie consistent. M!rimea "i culoarea butoanelor, textului "i
leg!turilor, localizarea pe pagin! a leg!turilor naviga#ionale trebuie s! fie similare n
ntreg site-ul. Vizitatorul trebuie s! ob#in! informa#ia dorit! ntr-un mod ergonomic,
optim.
J-3
Tehnologii Web
Tehnologii Web
obositoare "i lung!) la sf!r"itul c!reia vizitatorul este redirectat (automat sau nu) spre
con#inutul real al respectivului site Web. n anumite cazuri, utilizatorul are "ansa s! poat! da
click pentru a intra direct pe pagina de start. O pagin! splash poate genera confuzii "i frust!ri
"i nu adaug! nimic la design-ul site-ului, excep#ie f!cnd probabil site-urile de art!
electronic! sau de design Web special. Astfel, proiectarea unui site Web trebuie s! varieze
n func#ie de specificul acestuia.
Sfaturi destinate proiectan"ilor de pagini Web
Putem formula cteva sugestii pentru realizarea unui design mai bun:
1. Autorii de pagini Web vor trebui s! furnizeze un mecanism de navigare
facil!, structurat!, prin utilizarea unor leg!turi de explorare "i/sau bidirec#ionale "i
oferirea de meniuri, arbori de parcurgere a leg!turilor, op#iuni de deplasare
secven#ial! (e.g. butoane Pagina urm!toare, Pagina precedent!,
La nceputul paginii, napoi la pagina principal! etc.).
2. Evitarea scrierii de documente de dimensiuni mari, n care utilizatorul,
pentru a parcurge ntreg con#inutul, trebuie s! foloseasc! intensiv barele de derulare
(scroll). Este indicat ca aceste pagini s! fie divizate n documente mai mici, fiecare
con#innd n jur de 500 de cuvinte/pagin!. Aceast! mp!r#ire are "i avantajul
actualiz!rii mai eficiente a con#inutului "i a parcurgerii totale a documentului de
c!tre cei interesa#i.
3. Interna#ionalizarea reprezint! un alt factor important. De evitat frazele
lungi, folosind expresii colocviale sau regionalisme. Autorii pot realiza documente
separate pentru fiecare limb! dorit! (de exemplu, n cazul nostru, romn! "i
englez!) "i s! detecteze, dup! adresa clientului Web, care ar putea fi localizarea sa
(n interiorul sau n afara #!rii). De asemeni, trebuie acordat! mare aten#ie
corectitudinii gramaticale a textului. Se recomand! ca fiecare document s! fie
parcurs, nainte de a fi disponibil pe Web, de un expert filolog.
4. De evitat utilizarea a mai mult de trei tipuri de fonturi (pentru citirea de pe
ecran cele mai lizibile sunt Verdana "i Georgia, iar pentru tip!rire Times Roman "i
Arial). Fonturile specifice unor platforme particulare nu vor fi corect sau nu vor
putea fi afi"ate pe alte calculatoare.
Este mult mai u"or de parcurs un document al c!rui con#inut a fost structurat pe
capitole, sub-capitole, sec#iuni "i paragrafe, corect aliniate "i indentate (eventual
folosind linii orizontale). Folosirea listelor neordonate sau/"i ordonate cre"te gradul
de lizibilitate a unei pagini Web.
Liniile lungi de text nu sunt recomandabile, optim fiind un num!r de 65-70 de
caractere pe o singur! linie (nu mai mult de 15-20 de cuvinte/linie). De asemeni,
alinierea la dreapta sau centrat!, scrierea cu majuscule ori modific!ri frecvente de
culoare ale unui text de dimensiuni mari implic! dificult!#i de parcurgere.
J-5
Tehnologii Web
J-6
Tehnologii Web
textual!, folosind atributul alt). Fiecare ancor! poate avea asociat!, cu ajutorul
atributului accesskey, o tast! (scurt!tur!) care o activeaz!.
De asemeni, tabelele pot avea asociate explica#ii, date prin intermediul atributului
summary, iar elementelor HTML putem s! le ata"!m titluri explicative folosind
atributul title.
9. Pentru reutilizarea stilurilor sau script-urilor "i a modific!rii facile a acestora,
este bine ca ele s! fie specificate ca fi"iere externe, separndu-le de con#inutul
efectiv al documentului.
Astfel, foile de stiluri pot fi nc!rcate, n antetul documentelor HTML, prin:
<link rel="stylesheet" type="text/css" href="web.css">
p!strarea integrit!#ii leg!turilor dintre diverse pagini "i oferirea unor facilit!#i
de navigare. Echipa de designeri Web trebuie s! interac#ioneze deseori "i cu alte
componente/grupuri ale organiza#iei.
J-7
Tehnologii Web
Problema
Tehnologii
Generarea documentului
la nivelul serverului
XSL, CSS
Pe partea client, procesarea datelor XML n momentul actual poate fi realizat! ntr-o
manier! limitat! de Internet Explorer 5 sau de Netscape/Mozilla 6 "i, mai nou, de Opera 5,
problema principal! fiind compatibilitatea. O alternativ! ar fi folosirea unui analizor XML
extern conceput n Java, extensie a navigatorului. Ca avantaje majore putem men#iona
reducerea nc!rc!rii serverului, procesarea datelor efectundu-se la nivelul clientului,
iar prezentarea lor prin intermediul foilor de stiluri CSS sau XSL.
Pe partea server, manipularea documentelor XML se poate realiza via DOM ori SAX,
o serie dintre serverele Web suportnd deja nativ XML. Prelucrarea datelor se efectueaz! n
mod clasic prin intermediul scripturilor CGI ori folosind PHP, ASP sau ISAPI
(Internet Server API), n limbaje interpretate ori compilate.
Folosind JDOM, putem realiza lejer aplica#ii Java destinate s! proceseze documentele
XML, att pe partea client (applet-uri), ct "i pe server (servlet-uri).
Pentru transformarea datelor XML n documente HTML se pot utiliza XSL sau CSS.
Cu toate c! XSL nu este standardizat nc!, deja exist! implementate o serie de analizoare
XSL bazate pe versiunile de lucru ale Consor#iului Web. Avantajele folosirii XSL sunt n
principal cele legate de suportul pentru o gam! larg! de construc#ii sofisticate pentru
transformarea "i ata"area de semantici elementelor XML n vederea convertirii lor n
documente HTML/XML. Din p!cate, specifica#iile XSL nu sunt n stadiu de recomandare
oficial!, iar sintaxa XSL este dificil!, documentele XSL fiind greu de parcurs de cititorul
uman. Ca "i n cazul CSS, foile de stiluri nu pot fi parametrizate, de cele mai multe ori
propriet!#ile de stil fiind modificate n mod dinamic la nivel programatic.
Diagrama urm!toare ilustreaz! rolul fiec!rei modalit!#i de ata"are de stiluri documentelor
XML. Astfel, documentele XML pot fi vizualizate n urm!toarele maniere:
Dac! documentul nu trebuie transformat, se poate utiliza CSS (modul implicit de afi"are
a documentelor XML n cadrul navigatorului Netscape 6). Vezi (A) din figura de mai jos.
n caz contrar, se va recurge la transform!ri XSLT, dup! cum urmeaz!:
B. Se utilizeaz! obiectele de formatare (formatting objects) prev!zute de
specifica#ia XSL;
C. Se genereaz! un nou document XML sau HTML "i se ofer! o foaie de
stiluri CSS pentru a fi formatat n mod corespunz!tor.
J-8
Tehnologii Web
Tehnologiile "i standardele folosite n cadrul unui site Web bazat pe XML pot fi urm!rite
mai jos:
Tehnologie
Situa"ia standardiz#rii
Suport
Implement!ri numeroase, la nivel de client
sau server.
Recomandare W3C
XML 1.0
J-9
Tehnologii Web
n curs de standardizare
Recomandare W3C
CSS-1
CSS-2
Recomandare W3C
(12 mai 1998)
sau
inexistent
pe
partea
CGI 1.1
Standard de facto
ASP,
ISAPI
(IIS 5)
Proprietar Microsoft
PHP 4.0
Specifica#ie liber!
J - 10
Tehnologii Web
2. Roboii Web
2.1 Prezent
Prezentare
are general
Robo"ii Web, reg!si#i "i sub numele de p!ianjeni (spiders), reprezint! programe care
traverseaz! n mod automat structura hipertext a spa#iului WWW, n scopuri de extragere a
informa#iilor folosind protocoalele Web standard.
Trebuie f!cut! o distinc#ie clar! ntre robo#ii Web "i navigatoarele Web care sunt aplica#ii
ac#ionate de om sau ntre robo#ii Web "i agen#ii Web care se bucur! "i de alte caracteristici,
precum inteligen#a, mobilitatea ori autonomia.
Activitatea unui robot Web este cea de a realiza o conexiune HTTP (HyperText Transfer
Protocol) la un server Web con#innd un set de pagini, pornind de la un identificator
uniform de resurse (URI), de a extrage informa#iile dintr-un document HTML "i din toate
documentele desemnate de leg!turile lui.
2.2 Utilizri
Robo#ii Web se pot utiliza n scopuri multiple, dintre care amintim:
analiza statistic#
Prin traversarea unui ntreg site Web, un robot poate furniza date privind
media documentelor stocate pe un server, procentul de documente de un
anumit tip, m!rimea medie a unei pagini, gradul de interconectare cu alte
documente, locale sau la distan#! etc. n fapt, primul robot implementat a fost
conceput cu scopul de a contoriza serverele Web din lume, pentru a se cerceta
ct de ntins este spa#iul hipertext.
De asemeni, robo#ii Web pot fi utiliza#i la descoperirea diverselor modele
de date (pattern-uri) prin explorarea unei cantit!#i apreciabile de informa#ii
disponibile pe Web, fiind astfel implica#i n activit!#i de data mining.
men"inere
n prezent, este foarte important a se men#ine n bune condi#iuni starea
hiperleg!turilor dintre documentele Web. Un robot poate ajuta la descoperirea
"i rezolvarea a"a-numitelor "leg!turi moarte" care pointeaz! spre resurse
inexistente. De"i serverele Web pot nregistra toate cererile care nu pot fi
satisf!cute din cauza specific!rii adreselor invalide, administratorul unui site
Web de propor#ii poate recurge la asistarea din partea unui robot
(ca MOMSpider) pentru descoperirea automat! a leg!turilor eronate.
Robo#ii pot verifica "i structura documentelor HTML, semnalnd erorile de
design "i de stil ale acestora.
J - 11
Tehnologii Web
oglindire
Tehnica oglindirii (mirroring) este preluat! de la arhivele FTP, reprezentnd
copierea la alt! loca#ie a ntregii structuri arborescente, n mod recursiv, a
fi"ierelor unui site "i reactualizarea periodic! a acestora. Aceasta asigur!
fiabilitate, vitez! mai mare de transfer, evitarea nc!rc!rii traficului de re#ea sau
acces neconectat (off-line).
Pentru Web, oglindirea poate fi realizat! de un robot (e.g. wget din
distribu#iile Linux sau Teleport), care trebuie s! aib! grij! de rescrierea
referin#elor la alte documente, la p!strarea integrit!#ii hipertextului "i la
actualizarea regulat! a paginilor WWW.
Oglindirea poate fi evitat!, folosind n mod inteligent memoria cache a
serverelor proxy (intermediare), care ofer! posibilit!#i de actualizare selectiv! "i
de organizare a resurselor.
descoperirea resurselor
Probabil cea mai spectaculoas! "i important! aplica#ie a robo#ilor Web este
utilizarea lor la descoperirea resurselor. Cre"terea progresiv! a volumului de
informa#ii a dus la necesitatea conceperii de aplica#ii pentru sumarizarea,
indexarea, monitorizarea modific!rilor informa#iilor de pe Web.
Astfel, fiecare motor de c!utare, con#innd baze de date privind localizarea
"i tipul de informa#ii dorite de utilizatori, apeleaz! la serviciul robo#ilor Web
pentru descoperirea resurselor Internet.
Un avantaj suplimentar este cel dat de monitorizarea schimb!rilor survenite
n cadrul unor pagini Web indicate de utilizatori (servicii "Mind-It" sau
"What's new").
utiliz#ri combinate
Desigur, robo#ii Web pot ndeplini sarcini multiple, ca de exemplu
descoperirea resurselor "i realizarea de statistici Web sau men#inerea integrit!#ii
leg!turilor "i, concomitent, detectarea schimb!rilor documentelor HTML.
J - 12
Tehnologii Web
Un alt pericol deriv! din exploatarea necontrolat! a robo#ilor Web de c!tre utilizatorii
finali care pot folosi op#iuni inadecvate sau pot rula mai multe instan#e de program,
conducnd la abuzuri nedorite.
Robo#ii Web, n special cei netesta#i ndeajuns, pot fi ineficien#i sau pot poseda vicii de
arhitectur! "i astfel s! d!uneze traficului de informa#ii pe Internet, mai ales dac! sunt
folosi#i de persoane neavizate ori de neprofesioni"ti. Implement!ri eronate pot determina
robo#ii s! intre n arii aproape infinite denumite g!uri negre (atunci cnd de exemplu un
document are o leg!tur! care se refera la el nsu"i, iar programul nu detecteaz! acest aspect).
De asemeni, robo#ii nu trebuie s! acceseze tipuri de date f!r! relevan#!, avnd dimensiuni
considerabile (e.g. arhive, fi"iere executabile, fi"iere multimedia etc.).
J - 13
Tehnologii Web
n vederea evit!rii index!rii con#inutului unei pagini Web se poate scrie n antetul ei:
<meta name="robots" content="noindex">
Anumi#i robo#i pot utiliza tag-uri specifice (ascunse) care s! dicteze un anumit
comportament pentru acea pagin! Web (a"a cum se ntmpl! n cazul de programului de
oglindire Teleport).
Chiar avem nevoie de un alt robot sau adopt!m nevoilor noastre unul deja
existent?
Robotul va trebui s! fie mai nti testat pe date locale, ntr-o re#ea proprie,
nainte de a fi disponibil n Internet.
Rezultatele furnizate de robot (diversele statistici sau alte date) vor putea fi
f!cute disponibile spre consultare celor interesa#i.
J - 14
Tehnologii Web
2.7 Exemple
DataBots - un robot manipulnd informa"ii
Crea#ie a companiei Imagination Engines Incorporated, DataBots este un robot utilizat
n descoperirea informa#iilor pe Web, folosind tabelele Excel pentru generarea unor re#ele
neuronale menite a analiza datele luate din Internet. Paradigma utilizat! este denumit!
Creativity Machine, permi#nd luarea decizilor asistat! de calculator pe baza informa#iilor
extrase de robotul Web.
Wisebot - utilizat pentru administrarea site-urilor Web
Wisebot este o aplica#ie a companiei Tetranet, putnd fi utilizat la organizarea unui site
Web. Robotul efectueaz! o analiz! a tuturor paginilor Web existente pe un server, re#innd
ntr-o baz! de date cele mai importante informa#ii despre ele (titlu, cuvinte-cheie, timpul
ultimei actualiz!ri etc.). Robotul poate automat genera cuvintele cheie aferente unei pagini,
utiliznd tehnologia Extractor, prin contorizarea celor mai frecvente cuvinte "i lund n
considera#ie pozi#ia lor n cadrul paginii. Astfel, se construie"te un index pentru ntreg
con#inutul hipertext al serverului, care va fi surs! pentru harta de navigare n cadrul site-ului
(actualizat! la momente regulate de timp n mod automat).
Acest robot este disponibil n mediile Windows. Pentru platformele Unix, exist! o
multitudine de robo#i similari, dintre care se pot men#iona tkWWW (scris n Tcl/Tk) sau
RBSE (Repository Based Software Engineering).
Inktomi - statistici Web
Robotul de c!utare Inktomi a fost conceput n cadrul unui proiect de cercetare condus
de Eric Brewer "i Paul Gautier de la Universitatea Berkeley, cu scopul de a utiliza tehnicile
de procesare paralel! pentru indexarea, c!utarea "i analiza paginilor Web. Primele seturi de
date au fost preluate n perioada iulie-octombrie 1995 colectndu-se 1,3 milioane de
documente HTML unice, urmate n noiembrie 1996 de 2,6 milioane de documente HTML.
Experimentul
n cadrul prelucr!rii datelor colectate de robot, s-au folosit urm!toarele aplica#ii:
libink este o bibliotec! de componente pentru extragerea "i manipularea
(URI);
J - 15
Tehnologii Web
statistice (lungimea medie a unei fraze, num!rul mediu de propozi#ii dintr-o fraz!
complex!, num!rul total de cuvinte etc.) utile analizei documentelor din perspectiva
limbajului natural. n cadrul experimentului au fost considerate doar documente
scrise n limba englez!.
Rezultatele
Criteriile de analiz! au fost urm!toarele:
lungimea documentelor;
utilizarea marcatorilor;
utilizarea atributelor;
erorile de sintax!.
Lungimea documentelor
Pentru cele 2,6 milioane de documente HTML colectate de Inktomi, dup!
nl!turarea marcajelor s-a calculat lungimea fiec!rui document. Lungimea
minim! g!sit! a fost de 4,4 KB, lungimea maxim! de 1,6 MB, iar lungimea
medie a fost de 20 KB.
Utilizarea marcatorilor
n ceea ce prive"te distribu#ia tag-urilor, num!rul mediu de marcatori pe
document a fost 71, iar num!rul de marcatori unici pe document a fost 11.
n figura de mai jos se poate remarca ponderea n procente a celor mai
populare 10 tag-uri "i num!rul mediu de apari#ii ale lor.
J - 16
Tehnologii Web
Utilizarea atributelor
Num!rul mediu de atribute prezente ntr-un document a fost 29, iar
num!rul mediu de atribute unice pe document a fost 4. n figura urm!toare se
poate observa procentul de apari#ie a primelor 10 atribute (firesc, atributul cel
mai popular a fost href, urmat de src).
J - 17
Tehnologii Web
J - 18
Tehnologii Web
Erorile de sintax#
Programul weblint a g!sit aproximativ 92000 (0,7%) de documente
con#innd erori sintactice. Figura urm!toare furnizeaz! primele 10 cele mai
comune erori.
Legend!:
J - 19
Tehnologii Web
J - 20
Tehnologii Web
3. Motoarele de cutare
Bazat pe hipertext, spa#iul WWW are ca raison d'tre oferirea unui mecanism facil de a
stoca "i de a pune, ulterior, la dispozi#ie informa#ii, ntr-o manier! intuitiv!, nesecven#ial!.
Studiile recente (efectuate la mijlocul anului 2000) estimeaz! volumul Web-ului ca fiind
de 1-2 miliarde de pagini, utilizatorii care petrec mai mult de cinci ore pe Internet alocnd
70% din timp pentru c!utarea de informa#ii. ntre 85% "i 90% dintre utilizatori se bazeaz!
pe motoarele de c#utare pentru a localiza resursele dorite.
Astfel, importan#a acestora se dovede"te de necontestat, n prezent existnd o
multitudine de c!utatoare "i meta-c!utatoare, generale sau specializate.
Motoarele de c!utare pot oferi servicii de c!utare pe baza de indec"i (i.e. Altavista) sau pe
baza unor ierarhii de termeni - a"a-numitele servicii director (Yahoo). n ultima perioad!,
aceste servicii au devenit hibride (primul care a adoptat tehnicile mixte fiind Excite).
J - 21
Tehnologii Web
Atunci cnd ne afl!m pe Web, de cele mai multe ori nu parcurgem la un moment dat
dect o singur! pagin! WWW, apar#innd unui server particular, f!r! a avea o vedere de
ansamblu a modului de structurare a tuturor documentelor de la acea adres!. Astfel, spa#iul
Web prezint! urm!toarele caracteristici negative:
leg!turile unidirec"ionale
Limbajul HTML nu ofer! dect posibilitatea de specificare a hiperleg!turilor
unidirec#ionale, simple. Este dificil de a alc!tui o hart! local! con#innd toate
sursele "i destina#iile leg!turilor dintre paginile Web ale unui server. Re#elele
sofisticate de leg!turi conduc la o navigare greoaie "i devin surse de confuzie.
men"inerea leg!turilor
Leg!turile fiind stocate n interiorul documentelor, nu exist! posibilitatea de
a ad!uga adnot!ri sau de a modifica leg!turile dintr-o pagin! f!r! a fi
proprietarul acesteia. Men#inerea integrit!#ii leg!turilor pentru site-uri Web
con#innd un num!r foarte mare de documente se dovede"te dificil!. De cele
mai multe ori se utilizeaz! programe de verificare a disponibilit!#ii leg!turilor "i
de construire a ierarhiilor de leg!turi ntre paginile unui site Web (e.g. aplica#ia
ICE scris! n Perl).
J - 22
Tehnologii Web
J - 23
Tehnologii Web
J - 24
Tehnologii Web
Fixnd o anumit! adncime, putem selecta o vecin!tate local! finit! a unui obiect Web
din spa#iul hipertext World Wide Web. Problema este s! stabilim hiperinforma#ia de o
adncime k pentru un obiect O, notnd aceasta cu HYPERINFO[k]. Informa#ia total! de
adncime k va fi notat! cu INFORMATION[k].
Vom considera astfel func#iile HYPERINFO, TEXTINFO "i INFORMATION definite de la
mul#imea obiectelor Web la mul#imea numerelor reale nenegative. Intuitiv, cu ct valoarea
unei func#ii este mai mare, cu att con#inutul informa#ional al acelui obiect este mai
relevant. Aceste func#ii vor fi m!rginite (exist! un num!r M astfel nct
M >= INFORMATION(O), pentru orice obiect O).
Leg#turi simple
Vom avea n vedere mai nti cazul n care fiecare obiect Web posed! cel mult o leg!tur!.
Exist! dou! posibilit!#i: acea leg!tur! s! fie o leg!tur! intern! (c!tre un fragment de
informa#ie din acel document) sau leg!tura este stabilit! ntre obiectul Web A spre obiectul
Web B (vezi figura de mai jos):
Leg#tura de la A la B
Solu#ia, simpl! dar eronat!, este s! se asocieze con#inutului textual al obiectului A "i
con#inutul textual al obiectului B, nlocuind leg!tura cu obiectul Web spre care pointeaz!.
Astfel, con#inutul informa#ional al celor dou! obiecte va fi similar, de"i poate n realitate
utilizatorul era interesat numai de informa#iile din obiectul B. Aceast! problem! devine mai
evident! dac! adncimea cre"te, avnd situa#ia n care Bk este la adncime k de A,
cu k destul de mare (e.g. k > 10):
Leg#tura de la A la Bk
J - 25
Tehnologii Web
Leg#turi multiple
J - 26
Tehnologii Web
Leg#turi de ntoarcere
J - 27
Tehnologii Web
de exemplu) vor fi activate automat, de"i n prezent este foarte dificil de a exploata
con#inutul informa#ional al documentelor care nu sunt de tip text.
Ordonarea leg#turilor
Cercet!torii de la Universitatea Stanford au observat c! vizitarea tuturor documentelor
prezente pe Web nu se poate realiza practic din cel pu#in dou! motive:
1. Indexul are o capacitate limitat! "i deci motorul nu poate indexa sau analiza
toate paginile (Web-ul se dezvolt! ntr-un ritm foarte alert).
2. Web-ul se modific! foarte rapid "i robotul nu va avea "ansa de a parcurge o
serie de pagini (la fiecare lun! se estimeaz! c! peste 800GB de date "i schimb!
con#inutul).
Nu toate paginile vor avea aceea"i importan#! pentru robot, #inndu-se cont de mai mul#i
factori, fiecare fiind considerat cu o anumit! pondere. Se pot lua n calcul: similaritatea cu
posibilele cereri ale utilizatorilor, num!rul leg!turilor care au leg!turi spre pagina analizat!
pe robot, adic! gradul de "citare" a documentului, relevan#a paginii (con#inutul ei), num!rul
de leg!turi con#inute de pagin! "i metrica loca#iei (o pagin! din domeniul ".com" se
consider! a fi mai important! dect una a domeniului ".za"). Importan#a paginii este, deci,
dat! de contextul n care apare.
Paginile vor fi ordonate conform acestor criterii "i vor fi indexate doar primele N.
n fapt, aceast! metod! poate fi privit! ca o rafinare a precedentei.
Abordarea prezentat! aici a fost experimentat! ncepnd cu anul 1997
(proiectul WebBase) "i n prezent se reg!se"te n cadrul popularului motor de c!utare
Google.
Managementul indexului
A doua component! a unui motor de c!utare este indexul (catalogul) reprezentat
dintr-o serie de baze de date memorate pe discurile unui server (modul) de stocare,
constituindu-se un depozit (distribuit) de date de mari dimensiuni.
Modulul de stocare realizeaz! diverse activit!#i importante ca introducerea de noi date
despre paginile parcurse de robo#i, actualizarea con#inutului celor vechi, programarea
diverselor cereri de accesare a informa#iilor despre o serie de documente etc. De cele mai
multe ori aceste date sunt compresate (Google folose"te biblioteca de compresie bzip),
utilizndu-se clustere pentru memorarea lor.
Fiecare pagin! va primi un identificator docID stabilit pe baza URI-ului absolut al
paginii respective. URI-urile vor fi normalizate conform algoritmului urm!tor:
J - 28
Tehnologii Web
Pasul algoritmului
Exemplu
http://www.InfoIasi.Ro:80/ devine
www.InfoIasi.Ro:80/
www.InfoIasi.Ro:80/ devine
www.InfoIasi.Ro/
www.InfoIasi.Ro/ devine
www.infoiasi.ro/
www.infoiasi.ro/ devine
www.infoiasi.ro
ii.
Documentelor HTML le pot fi ata"ate anumite atribute care s! le descrie
con#inutul?
R!spunsul la ultima ntrebare este dat de urm!toarele aspecte:
J - 29
Tehnologii Web
Metode mai sofisticate includ sumariz!ri automate, utilizarea de sinonime ale cuvintelor
cheie ori utilizarea algoritmilor genetici sau a re#elelor neuronale. n activitatea de catalogare
a informa#iilor, de multe ori intervine ierarhizarea datelor n func#ie de subiectul pe care-l
trateaz!, aceast! clasificare ducnd la apari#ia serviciilor director (de genul Yahoo!). Clasificarea
dup! subiect este similar! re#elei lingvistice WordNet.
De asemeni, se calculeaz! num!rul de leg!turi care pointeaz! spre o anumit! pagin! "i
num!rul de leg!turi con#inute de acea pagin!. Aceste valori sunt denumite tehnic hit-uri.
Indec"ii pot cuprinde indec"i text obi"nui#i, dar "i indec"i ai metadatelor extrase
(construi#i pe baza docID-urilor "i a altor informa#ii). n mod uzual, se folosesc tehnici
bazate pe tabele de dispersie (hash) multiple "i pe sortarea eficient! a indec"ilor.
Metadatele "i indec"ii se stocheaz! pe dispozitive separate de cele ale depozitului de date
(de cele mai multe ori se utilizeaz! un sistem de management al bazelor de date rela#ionale).
Depozitul de documente indexate suport! trei moduri de acces:
J - 30
Tehnologii Web
n cadrul depozitului de date este de dorit s! se memoreze cea mai recent! versiune a
paginilor traversate de robo#ii Web. Trebuiesc avute n vedere aspecte importante precum
consisten"a indec$ilor "i eliminarea paginilor vechi/inexistente pe Web. Astfel, pentru fiecare pagin!
pot fi ata"ate dou! valori numerice pentru a specifica timpul de via#! permis "i contorizarea
timpului de via#!. Timpul de via#! permis reprezint! perioada de stocare a unui document
f!r! a necesita actualizarea ori "tergerea sa din depozit. Contorul este decrementat periodic
pn! cnd devine nul, caz n care robotul Web va trebui s! aduc! informa#ii despre acea
pagin!. Desigur, fiecare motor de c!utare va adopta propria manier! de stabilire a timpului
de via#!. De asemeni, robo#ii Web pot avea proprii lor parametri pentru realizarea acestei
actualiz!ri regulate, #innd cont de ra#iuni de congestie a re#elei sau de traversarea n foc
rapid despre care am discutat mai sus.
Pentru asigurarea scalabilit!#ii, depozitul de date poate fi distribuit, constituindu-se
o colec#ie de noduri de stocare interconectate, controlul realizndu-se prin intermediul unui
server de management al nodurilor. Acest server men#ine o tabel! cu starea fiec!rui nod de
stocare: capacitatea total! de memorare, spa#iul liber, nivelul fragment!rii datelor, num!rul
"i tipul de acces!ri, modul de operare a nodului etc.
Mai mult, serverul controleaz! cererile pentru acces!ri de tip flux de date "i maniera de
stocare a paginilor noi colectate de robo#i. Problemele care se pun n discu#ie sunt cele de
distribu#ie, de organizare "i de actualizare a paginilor n cadrul nodurilor depozitului.
Paginile se pot distribui uniform sau printr-o metod! de tip hash. Organizarea se realizeaz!
fie folosindu-se tehnici hash, fie fi"iere de jurnalizare sau o metod! mixt!. n cazul
actualiz!rii, se iau n considera#ie scheme bazate pe actualiz!ri secven#iale (batch) ori
incrementale. La actualizarea secven#ial! nodurile se parti#ioneaz! n dou! categorii: noduri
de actualizare (care nu vor mai fi folosite pentru cereri de acces la pagini) "i noduri de citire.
Astfel, se evit! apari#ia conflictelor ntre opera#iunile executate asupra depozitului de date.
La actualizarea incremental! nu se mai face distinc#ie ntre noduri, fiecare nod fiind
permanent opera#ional, cu penaliz!ri de performan#! "i modificarea dinamic! a indec"ilor
locali.
Pentru sporirea eficien#ei, nodurile pot con#ine pagini grupate pe diverse criterii
(cuvinte-cheie, tematic!, localizare etc.).
C#utarea !i evaluarea
A treia component! a motorului o reprezint! mecanismul de c#utare !i de evaluare a
paginilor Web dorite de un utilizator n urma formul!rii unei cereri adresate prin
intermediul interfe#ei cu aplica#ia.
Interfa#a de c!utare (denumit! frecvent motor de interogare) este o component! important!
a sistemului, oferind n func#ie de motor posibilit!#i de formulare a cererilor prin
intermediul diver"ilor operatori logici, n limbaj natural, explornd ierarhii de domenii
catalogate (directoare Web), alegnd localizarea paginilor etc.
J - 31
Tehnologii Web
termen1 OR termen2
NOT termen
Un utilizator obi"nuit se va sluji foarte rar de aceste facilit!#i, prefernd formularea unui
interogari compuse dintr-un singur cuvnt sau a unei propozi#ii n limbaj natural.
Tehnologia Ask Jeeves ncorporat! de Altavista este utilizat! pentru procesarea cererilor n
J - 32
Tehnologii Web
limbaj natural (n spe#!, n limba englez!), unele probleme care trebuiesc rezolvate fiind
dezambiguizarea termenilor, eliminarea cuvintelor nerelevante sau expandarea interog!rii
(pot fi formulate automat noi cereri con#innd sinonime ale cuvintelor furnizate de
utilizator, folosindu-se re#eaua lingvistic! WordNet).
Majoritatea serviciilor de c!utare ofer! posibilitatea de rafinare a interog!rii,
prin intermediul unor op#iuni refine sau advanced search.
Evaluarea cererii utilizatorului se poate realiza conform urm!toarelor etape:
1.
analizarea interog!rii;
2.
3.
6.
Nu toate motoarele de c!utare trec prin toate fazele descrise mai sus. Unele nu realizeaz!
dect par#ial sau deloc eliminarea duplicatelor (de exemplu, Excite sau Lycos).
O serie de motoare vor afi"a paginile g!site grupate pe termeni sau vor oferi leg!turi
c!tre altele stocate pe acela"i server Web.
Sistemul de evaluare depinde de motorul de c!utare ales. De exemplu, n cazul lui
Google, se men#in mai multe metadate despre documentele indexate dect la alte motoare,
ceea ce conduce la o precizie ridicat!. Se memoreaz! chiar "i pozi#ia n cadrul
documentului, tipul de font "i modul de scriere ale informa#iilor. n plus, datele calculate n
urma fiec!rei interog!ri emise de utilizator sunt salvate temporar, putnd fi folosite la
evaluarea unor cereri similare viitoare.
Alte abord!ri includ:
J - 33
Tehnologii Web
Nici un motor nu poate fi perfect. Pentru testarea serviciilor de c!utare se consider! mai
mul#i factori, dintre care pot fi aminti#i: acurate#ea, posibilitatea de c!utare avansat!,
ergonomia n utilizare "i acordarea de alte facilit!#i.
Tehnologii Web
imagini (MetaSEEk);
informa#ii specifice unui domeniu: afaceri, comunit!#i umane etc. Este "i
cazul portalurilor Web care n plus furnizeaz! "i alte servicii, precum accesarea unui
cont de po"t! electronic!, cursul valutar, starea meteo "i altele).
O parte dintre serviciile de c!utare specializat! se reg!sesc "i n cadrul motoarelor clasice
(de exemplu, la Altavista).
Anatomia unui meta-motor de c!utare este ilustrat! n figura de mai jos:
J - 35
Tehnologii Web
J - 36
Tehnologii Web
4. WebBroker:
comunicaii orientate-obiect pe Web
4.1 Prezentare general
Principalul scop al modelului WebBroker este cel de a extinde modelul actual al
aplica#iilor Web prin ad!ugarea facilit!#ilor de calcul distribuit orientat-obiect descrise de
tehnologiile incompatibile CORBA (Common Object Request Broker Architecture) "i COM
(Component Object Model).
Dac! protocolul IIOP (Internet Inter-ORB Protocol) propus de OMG
(Object Management Group) - consor#iu interna#ional promovnd dezvoltarea teoretic! "i
practic! a produselor orientate-obiect - n cadrul standardului CORBA este bazat pe
standarele Internet, sistemul WebBroker se fundamenteaz! pe standarde Web precum
HTTP, XML "i URI, ncercnd s! simplifice cele mai reu"ite aspecte din CORBA "i COM
"i s! unifice modelele acestora pe un teritoriu neutru, independent de platform!.
Implementarea WebBroker este disponibil! gratuit, fiind scris! n Java.
Comunica"ii distribuite orientate-obiect
WebBroker se bazeaz! pe interfe#e pentru a defini comunica#iile dintre componentele
sistemelor distribuite obiectuale. Dialogul dintre client "i server are loc prin intermediul
unui obiect intermediar, purtnd denumirea de proxy, totul desf!"urndu-se prin intermediul
unor interfe#e specificate n prealabil. Proxy-ul este o aplica#ie (entitate) care trimite cererea
de la client la serverul adecvat. Cel care faciliteaz! transmiterea r!spunsului de la server la
client se nume"te obiect schelet (skeleton).
n esen#!, scenariul dialogului ntre un obiect A rulnd pe ma"ina X care apeleaz! o
metod! a obiectului B executndu-se pe ma"ina Y decurge astfel (vezi "i figura de mai jos):
A "i B.
J - 37
Tehnologii Web
Modelul WebBroker
Orientare-obiect
J - 38
Tehnologii Web
tipurilor
de
date
prin
intermediul
elementelor
XML.
Al
treilea
nivel
este
Pentru p!strarea simplit!#ii, nu sunt prev!zute facilit!#i pentru structuri complexe de date
(de tip struct, composite etc. prezente n limbajele de programare evoluate).
Construirea tipurilor complexe este l!sat! n responsabilitatea implementatorilor finali care
pot prevede obiecte-extensii pentru manipularea acestor tipuri.
Tipul de document AnonymousData declar! un DTD pentru tipuri scalare (predefinite)
de date, sintetizate n urm!torul tabel:
WebBroker CORBA
boolean
COM
boolean boolean
Java
XML-Data
boolean
boolean
short
short
short
short
i2
int
long
int
int
int
(sau i4)
long
long
(sau i8)
char
char
char
char
char
float
float
float
float
(IEEE.754.32)
double
double
double
double
(IEEE.754.64)
byte
octet
byte
byte
bin.hex
string
string
BSTR
java.lang.String
string
URI
java.net.URL
URI
i8
float
double
J - 39
Tehnologii Web
<intArray length="3">
<int>19</int>
<int>74</int>
<int>7</int>
</intArray>
ModuleDef
ITypeLib
ExceptionDef
ExceptionDef
TBD
ParameterDef
ParameterDef
ELEMENTDESC
URI
Repository
HKEY_CLASSES
(din registry)
J - 40
Tehnologii Web
4.5 Viitor
Problemele deschise r!mase de specificat sunt urm!toarele: WebBroker trebuie plasat n
contextul scopurilor de cercetare ntreprinse de Consor#iul Web referitoare la XML, HTTP
"i spa#iul Web n general, necesitatea construirii de unelte de generare a obiectelor proxy "i
schelet, cerintele de interoperabilitate ntre COM+, CORBA "i Java, plus scalabilitatea.
Se pare c! o solu#ie complementar! este reprezentat! de SOAP (Simple Object Access
Protocol) bazat pe protocolul de transport HTTP "i limbajul XML, urmnd modelul
RPC (Remote Procedure Call), propunere formulat! de Microsoft "i deja implementat! n
cadrul noii platforme .NET.
J - 41
Tehnologii Web
"Un punct care ieri era nev#zut, ast#zi a ajuns "inta !i mine va fi punctul de plecare."
(T.Macaulay)
Tehnologii Web
K-2
Tehnologii Web
1. Introducere n VRML
1.1 Istoric al limbajului
Conceperea unui univers tridimensional virtual se poate realiza cu ajutorul VRML
(Virtual Reality Modeling Language), scopul ini#ial al limbajului fiind tranzi#ia de la o
interfa#! text a Web-ului la una avnd trei dimensiuni, n permanent! interac#iune cu
utilizatorul.
VRML a fost creat de Mark Pesce "i Anthony Parisi, cu ajutorul lui Gavin Bell "i Brain
Behlendorf. Primii doi au hot!rt s! proiecteze o interfa#! 3D pentru Web. Limbajul de
modelare a acestei interfe#e (VRML) trebuia s! fie diferit de HTML, dar nu au dorit s!
inventeze un nou limbaj. Dup! ce au trecut n revist! tehnologiile existente la acea dat!, au
investigat mai mul#i candida#i. Dup! o serie de deliber!ri, au ales formatul de fi"ier ASCII
Open Inventor de la Silicon Graphics Inc. (SGI). Unul dintre motivele principale pentru care
a fost adoptat Open Inventor este faptul c! acesta permite o descriere complet! a grafurilor
de scen! 3D. Open Inventor include, de asemeni, facilit!#i de iluminare, descrieri de
materiale "i texturi, precum "i efecte speciale. Astfel, un subset al formatului de fi"ier SGI
Open Inventor, cu ad!ugarea extensiilor de acces la re#ea, a reprezentat baza VRML-ului.
VRML a fost proiectat n prim!vara anului 1994, fiind prezentat la prima conferin#!
WWW din Geneva, la dezvoltarea sa avndu-se n vedere independen#a de platform!,
extensibilitatea "i abilitatea de a lucra n cadrul re#elelor cu l!#ime ngust! de band!.
Primul program suportnd VRML (care nc!rca imaginea 3D a unei banane "i o afi"a pe
ecranul calculatorului) s-a numit Labyrinth.
VRML s-a lansat public la data de 3 aprilie 1995 "i specifica#ia VRML versiunea 1.0
a urmat n luna mai a aceluia"i an. Versiunea 1.0 a specifica#iei VRML a fost pus! la punct
de Gavin Bell, Anthony Parisi "i Mark Pesce. Ulterior a ap!rut VRML 1.1.
Pe 4 august 1996 se d! publicit!#ii specifica#ia versiunii 2.0, permi#nd generarea de lumi
virtuale animate "i avnd o serie de facilit!#i noi precum:
senzori simplificnd
(e.g. drag-and-drop);
opera#iile
efectuate
cu
ajutorul
mouse-ului
n 1997 a ap!rut o specifica#ie apropiat! de VRML 2.0 numit! VRML97, iar n prezent
se lucreaz! la cea de-a treia versiune a limbajului care va ad!uga o tehnologie standardizat!
pentru modelarea interac#iunilor dintre utilizatori.
K-3
Tehnologii Web
1.2 Car
Caracterizarea
acterizarea lumilor 3D
n loc de a parcurge pagini cu imagini statice "i de a urma hiperleg!turi, utilizatorii pot,
de exemplu, s! umble pe coridoare "i s! manipuleze obiecte, folosind o casc! special! de
vizualizare (Head-Mounted Display - HMD) "i o m!nu"! senzorial! (data glove) ori un costum
(data suit) pentru "comunicarea" cu mediul. Mai nou, a ap!rut ecranul retinal virtual
(Virtual Retinal Display - VRD) pentru o explorare mai facil! a lumilor 3D.
Crearea unui spa#iu virtual are similarit!#i cu procesul de proiectare urmat de arhitec#i.
n cartea sa "Towards a New Architecture", Le Corbusier (Charles-Edouard Jeanneret)
define"te arhitectura ca fiind "art!, un fenomen al emo"iilor". Manifestul s!u, constnd din
faptul c! arhitectura se bazeaz! pe trei elemente fundamentale, se poate aplica "i n cazul
realit!#ii virtuale. Aceste elemente sunt:
mas# - lumea este construit! din diverse forme (cuburi, conuri, sfere,
cilindri, piramide) avnd fiecare o mas!;
K-4
Tehnologii Web
originalitate;
propor#ie.
Lumile VRML, conform afirma#iilor lui Mark Pesce, adopt! dou! dintre caracteristicile
spa#iului Web "i anume cele legate de conectivitate (prin intermediul unui protocol de
comunica#ie, i.e. HTTP) "i de interfa"! (e.g. reprezentarea con#inutului). Browserele VRML
pot accesa dintr-o scen! 3D particular! alte fi"iere VRML via un anumit URI specificat.
La fel, navigatoarele Web pot nc!rca lumi VRML, folosind plugin-uri sau aplica#ii externe.
Independen"a de editor
Face posibil! utilizarea de generatoare "i editoare disponibile pe orice
platform! "i posibilitatea de a importa date din alte formate.
Perfec"ionarea
nzestrat cu toate informa#iile necesare pentru implementarea "i adresarea
unui set de tr!s!turi complete pentru acceptarea unei largi industrii.
Compunerea
Abilitatea de a folosi elementele VRML-ului n diferite combina#ii "i astfel
permi#ndu-se reutilizarea lor n alte contexte.
Extensibilitatea
Abilitatea de a ad!uga noi elemente n cadrul lumilor VRML.
Implementarea
Capabil de implement!ri variate pe un num!r mare de sisteme.
Poten"ialul multi-utilizator
Implementarea lumilor VRML n vederea folosirii n contextele utilizatorilor
multiple (medii multi-utilizator).
Ortogonalitatea
Elementele limbajului trebuie s! fie independente unul de altul, iar orice
dependen#! posibil! trebuie s! fie structurat! "i bine definit!.
Performan"a
Elementele trebuie s! fie proiectate #innd cont de importan#a "i de
performan#ele interactive pe o varietate de platforme (software "i hardware).
Scalabilitatea
Elementele VRML trebuie s! fie proiectate pentru o infinitate de compozi#ii
spa#iale.
K-5
Tehnologii Web
Standardizarea practic!
Elementele VRML trebuie s! suporte aplica#ii existente sau m!car
propuneri care urmeaz! a fi standardizate.
Structuri bine-definite
Un element trebuie s! posede o interfa#! bine-definit! "i o simpl! stare cu
scop necondi#ionat. Elementele cu scopuri multiple "i efecte secundare trebuie
evitate.
n limbajul VRML pot s! se realizeze reprezentari statice "i animate de obiecte "i pot
exis#a hiper-leg!turi c!tre alte elemente multimedia, cum ar fi sunetele "i filmele.
Interpretoarele (vizualizatoarele) VRML sunt disponibile (de cele mai multe ori gratuit)
pentru diferite platforme, la fel cum exist! "i diverse instrumente capabile s! creeze "i
s! manipuleze fi"ierele VRML.
VRML suport! un model extensibil care permite definirea de noi obiecte "i o nregistrare
a proceselor, suportndu-se astfel dezvoltarea extensiilor inter-operabile printr-o modalitate
standardizat!. n acest mod, se asigura o legatur! ntre elementele VRML "i folosirea uzual!
a tr!s!turilor API (Application Programmer Interface) pentru grafica 3D.
3.
La baz!, VRML manipuleaz! obiecte, teoretic putnd con#ine orice: forme geometrice
3D, imagini, sunet. Mul#imea de baz! a obiectelor VRML const! din noduri. Aceste noduri
au construc#ia sintactic! de mai jos:
Tip "{"
cmp "[" valoare "]"
...
"}"
Conven#ia de scriere este ca tipurile de noduri s! fie specificate cu prima liter! majuscul!,
iar cmpurile s! apar! cu litere mici, f!r! a conta ordinea de apari#ie. Dup! cum se poate
remarca, VRML este un limbaj case-sensitive.
Nodurile formeaz! structura ini#ial! a tuturor lumilor VRML.
La versiunea VRML 1.0, nodurile se mpart n urm!toarele categorii principale:
1.
K-6
Tehnologii Web
2.
3.
4.
noduri
care
definesc
modul
de
iluminare
obiectelor:
Separator,
Switch,
6.
noduri
de
grupare:
Group,
TransformSeparator, WWWAnchor;
Num!rul tipurilor de noduri VRML 2.0 este mult mai mare, ele putndu-se clasifica n:
1. noduri de grupare (utilizate la generarea unor grafuri ierarhice de
transformare a lumilor 3D): Anchor, Billboard, Collision, Group, LOD,
Transform;
2. noduri de grupuri speciale (folosite pentru gruparea unor noduri localizate
n manier! distribuit!: Inline sau pentru gruparea unor noduri n func#ie de un
cmp de selec#ie: Switch);
3.
noduri
de
K-7
Tehnologii Web
Cmpurile definind valori pentru propriet!#i pot fi de tip simplu (num!r, vector, imagine)
sau de tip compus.
Tipurile de baz! ale valorilor VRML sunt: SFBitMask, SFBool, SFColor,
SFEnum,
SFFloat,
SFImage,
SFLong,
SFMatrix,
SFRotation,
SFString, SFVec2f, SFVec3f (SF=Single value Field) sau MFColor, MFLong,
MFVec2f, MFVec3f (MF=Multiple value Field).
Exemple
Un prim exemplu de lume VRML 1.0 format! din dou! corpuri (o sfer!
violet! "i un cub verde).
#VRML V1.0 ascii
Separator {
DirectionalLight {
direction 0 0 -1
}
Separator {
Material {
diffuseColor 1 0 1
}
Sphere {}
}
Separator {
Material {
diffuseColor 0 1 0
}
# direc#ia de iluminare
# creaz! o sfer! violet!
# culoare de forma RGB
K-8
Tehnologii Web
Transform {
translation 0 2 0
}
Cube {}
}
}
cuburi
sfere
cilindri
K-9
Tehnologii Web
Shape {
geometry PointSet {
coord Coordinate {
point [
1.0 1.0 1.0
-1.0 -1.0 -1.0
1.0 -1.0 1.0
]
}
color Color {
color [
1.0 1.0 0.0
1.0 1.0 1.0
1.0 0.0 1.0
]
}
}
}
Pentru a defini fiecare fa#et! a unui corp geometric tridimensional ne vom sluji
de noduri de tip Extrusion, care pot genera figuri deosebit de complexe.
Urmeaz! un exemplu:
K - 10
Tehnologii Web
O rota#ie asupra unui obiect VRML poate fi realizat! n jurul a celor trei axe
de coordonate (Ox - yaw, Oy - roll, Oz - pitch). Cmpul rotation va necesita patru
argumente, primele trei corespunznd axelor, iar ultimul fiind unghiul de rota#ie,
dat n radiani. A"adar, pentru o rota#ie de 180 de grade n jurul axei Oz va trebui
s! scriem:
rotation 0 0 1 3.1415
K - 11
Tehnologii Web
appearance Appearance {
material Material {
emissiveColor 1 1 0
specularColor 1 1 1
shininess 0.7
}
}
}
Shape { # un "b!#"
geometry Box {
size 0.1 0.1 10
}
}
Transform {
rotation 0 0 1 3.1415
children [
Shape { # un con rotit
geometry Cone {
side TRUE
bottom FALSE
height 7.5
}
appearance Appearance {
material Material {
diffuseColor 0 0.5 0.5
}
}
}
]
}
SFFloat
SFFloat
SFFloat
SFFloat
SFFloat
SFFloat
ambientIntensity
diffuseColor
emissiveColor
shininess
specularColor
transparency
valoare
r g b
r g b
valoare
r g b
valoare
Tehnologii Web
K - 13
Tehnologii Web
geometry Cone {}
}
}
Transform {
translation 5 -2.5 0
children Shape {
appearance Appearance {
material Material {
diffuseColor 0 0 0
}
# schimb! culoarea (negru)
}
geometry Text {
string ["n","VRML"]
length []
maxExtent 0.0
fontStyle FontStyle {
# modific! propriet!#ile fontului
family "SANS"
style "PLAIN"
horizontal TRUE
leftToRight TRUE
topToBottom TRUE
justify "BEGIN"
size 1.0
spacing 1.0
}
}
}
}
K - 14
Tehnologii Web
Text. Dup! cum se poate remarca, pot fi specificate diferite propriet!#i: familia
Iluminare direc"ional#
Un exemplu:
DirectionalLight {
on TRUE
intensity 1
ambientIntensity 0
color 1 1 1
direction 0 0 -1
}
K - 15
Tehnologii Web
"i care ac#ioneaz! asupra tuturor obiectelor din vecin!tatea ei (putem asimila
acest tip de lumin! cu iluminarea conferit! de soare).
O exemplificare:
PointLight {
on TRUE
intensity 1
ambientIntensity 0
color 1 1 0
location 0 0 0
attenuation 1 0 0
radius 100
}
lumin!.
Un exemplu:
SpotLight {
on TRUE
intensity 1
ambientIntensity 0
color 1 1 1
location 0 0 0
direction 0 0 0
attenuation 1 0 0
radius 100
cutOffAngle 0.78
beamWidth 1.57
}
Desigur, lumile VRML pot fi nl!n#uite sau pot con#ine ancore spre alte
resurse Web. Acest lucru se poate realiza prin intermediul nodurilor de tip Anchor.
Un exemplu este cel de mai jos, unde unui cub i se ata"eaz! o ancor! spre un
document HTML:
K - 16
Tehnologii Web
K - 17
Tehnologii Web
geometry Sphere {}
}
]
}
# o rut! de evenimente (vezi mai jos)
ROUTE col.collideTime TO ac.set_startTime
}
a obiectelor.
K - 18
Tehnologii Web
Un asterisc virtual
Propriet!#ile unui nod definit prin DEF pot fi ulterior modificate, dup! cum se observ!
din urm!torul exemplu:
#VRML V2.0 utf8
Transform {
children [
DEF BSph Shape { # o sfer!
geometry Sphere {}
}
Transform {
translation 2 0 0
children
# redefinirea sferei (se modific! raza)
DEF BSph Shape {
geometry Sphere { radius .2 }
}
}
Transform {
translation -2 0 0
# utilizarea noii defini#ii
children USE BSph
}
]
}
n aceast! manier!, codul VRML devine modularizat "i mai scurt. Mai multe noduri
pot fi, de asemeni, grupate prin intermediul unui nod Group.
O alt! facilitate este cea referitoare la inserarea de obiecte (noduri) externe prin
intermediul unui nod Inline:
K - 19
Tehnologii Web
Inline {
url "lume-virtual!.wrl"
bboxSize dOx dOy dOz
bboxCenter cOx cOy cOz
}
n VRML 2.0 putem folosi a"a-numitele prototipuri pentru a defini noi noduri con#innd
cmpuri specificate de utilizator. Prototipurile vor fi date prin intermediul construc#iei
PROTO, n aceast! manier! putnd extinde limbajul prin ad!ugarea unor noduri proiectate
de programator.
Structura unui prototip simplu este:
PROTO nume_prototip [
cmp tip_cmp nume valoare_implicit!
cmp tip_cmp nume valoare_implicit!
...
]
{ nod }
K - 20
Tehnologii Web
Maniere de vizualizare
Anumite scene 3D pot fi vizualizate optim doar de la anumite distan#e "i sub diverse
unghiuri. Pentru a furniza utilizatorului puncte de observare prestabilite care vor fi indicate
de navigatorul VRML, ne vom folosi de noduri de tip Viewpoint. Propriet!#ile
importante ale unui nod Viewpoint sunt:
K - 21
Tehnologii Web
Putem folosi puncte de observare multiple, dup! cum se remarc! din exemplul de
mai jos:
#VRML V2.0 utf8
# primul punct de observare
Viewpoint {
fieldOfView 0.785398
position 0 0 10
orientation 0 0 1 0
jump FALSE
description "v1"
}
# al doilea punct de observare
Viewpoint {
fieldOfView 0.785398
position -10 0 0
orientation 0 1 0 -1.57
jump TRUE
description "v2"
}
# un paralelogram
Shape {
appearance DEF ap Appearance {
material Material {
diffuseColor 0.6 0.8 1.0
}
}
geometry Box {
size 5 0.5 1
}
}
# prima sfer!
Transform {
translation -5 1 0
children
Shape {
appearance USE ap
geometry Sphere {}
}
}
# a doua sfer!
Transform {
translation 0 2 -5
children
Shape {
appearance USE ap
geometry Sphere {}
}
}
K - 22
Tehnologii Web
De asemeni, aceste noduri pot fi utilizate pentru a realiza a"a-numitele tour guides prin
scenele 3D concepute.
Informa"ii despre lumile VRML
Fiecare lume VRML modelat! poate include, prin intermediul unui nod WorldInfo,
informa#ii despre autorul "i lumea respectiv! (anumite browsere pot afi"a aceste date):
WorldInfo {
info [ "O lume scris! n VRML97", "dec 2000" ]
title "Lec#ii de geometrie"
}
Nivele de detaliere
n continuare ne vom ocupa de anumite facilit!#i oferite de VRML 2.0 dezvoltatorilor de
lumi virtuale.
n primul rnd, pentru a optimiza afi"area scenelor complexe, autorul de lumi VRML
poate specifica o serie de nivele de detaliere prin intermediul nodurilor de tip LOD
(level of detail). Privite de la dep!rtare, obiectele vor putea fi reprezentate doar schi#at
(de exemplu o cas! poate apare ca un paralelipiped), iar pe m!sur! ce utilizatorul se apropie
am!nuntele se pot nmul#i (ad!ugnd noi obiecte, texturi, ilumin!ri etc.).
Structura general! a unui nod LOD este:
LOD {
center dOx dOy dOz
range interval_de_vizualizare
level colec"ie_de_noduri
}
Cmpul center va defini originea obiectelor pentru care fix!m mai multe nivele de
detaliere, iar range va specifica navigatorului care nivel de detaliu va fi utilizat n func#ie de
distan#ia de vizualizare. Proprietatea level va reprezenta o colec#ie de nivele de detaliere.
De exemplu, pentru trei nivele de detaliere vom putea scrie urm!toarele:
LOD {
center 0 0 0
range [5, 30]
level [
# nivelul 1 - departe
Inline {
url "lume3D.wrl"
...
}
# nivelul 2 - mediu
Shape {
...
}
# nivelul 3 - aproape
Group {
...
}
]
}
K - 23
Tehnologii Web
Desigur, putem defini oricte nivele dorim, pentru a realiza o tranzi#ie lin! de la o scen!
simplist! la o scen! detaliat!.
Realismul lumilor virtuale
De asemeni, pentru ca lumea VRML s! aib! un grad mai mare de realism, vom putea
utiliza noduri de tip Background, Fog, Sound ori AudioClip.
Nodul Background ofer! posibilitatea de a descrie orizontul lumii imaginate.
Forma general! (simplificat!) este urm!toarea:
Background {
# culoarea cerului
skyColor list!_de_culori
# utilizat pentru degradeuri
skyAngle list!_de_unghiuri
# culoarea terenului
groundColor list!_de_culori
# utilizat pentru degradeuri
groundAngle list!_de_unghiuri
}
Acest nod poate fi folosit pentru a asocia diverse texturi (imagini) lumilor noastre.
Background
MFString
MFString
MFString
MFString
MFString
MFString
}
{
backUrl
bottomUrl
frontUrl
leftUrl
rightUrl
topUrl
[]
[]
[]
[]
[]
[]
Pentru a ad!uga atmosfer! lumilor 3D concepute vom utiliza noduri de tip Fog:
Fog {
# culoare
color 1 1 1
# tip
fogType "LINEAR"
# distan#a vizibilit!#ii obiectelor
visibilityRange 0.3
}
K - 24
Tehnologii Web
K - 25
Tehnologii Web
1 0 1,
1 1 1,
1 1 0
]
}
}
}
]
}
Dac! dorim s! ad!ug!m "i o dimensiune sonor! lumilor VRML, vom specifica sunete
spa#iale prin noduri de tip Sound.
Sursa sonor! va putea fi un fi"ier audio MIDI, WAV sau MPEG, specificate prin
intermediul nodurilor AudioClip ori MovieTexture. Mai pot fi precizate localizarea
spa#ial!, intensitatea, modul de receptare (spa#ial sau ambiental).
#VRML V2.0 utf8
Group {
children [
Sound { # sonorul lumii
source AudioClip {
url "hello.wav"
loop TRUE # repet!
}
spatialize TRUE
intensity 0.8
location 0.0 1.0 0.0
}
Shape { # un cub verde
appearance Appearance {
material Material {
emissiveColor 0 1 0
}
}
geometry Box{}
}
]
}
K - 26
Tehnologii Web
Modelul rut!-eveniment n VRML este dat n urm!torul exemplu, n care avem o rut! de
la un eveniment de ie"ire touchTime generat de un nod Sensor (vezi mai jos) la un
eveniment de intrare startTime primit de un nod Sound. Astfel, la un click de mouse va fi
generat un anumit sunet.
Astfel, putem realiza anima#ii sofisticate sau modific!ri complexe asupra lumilor VRML,
afectnd n mod dinamic anumite valori ale unor cmpuri, f!r! a utiliza scripturi.
De exemplu, pentru a roti un obiect, va trebui s! modific!m valorile cmpului rotation.
n VRML 2.0 exist! o multitudine de evenimente care pot fi captate sau generate de
senzori (noduri Sensor), interpolatoare (noduri Interpolator) "i script-uri (noduri
Script).
Senzori
Valorile cmpurilor expuse ale unui nod VRML pot fi alterate via evenimentele de
intrare, prin intermediul senzorilor:
a. TimeSensor reprezint! de fapt un temporizator, f!r! a poseda pozi#ie "i
form! n spa#iul geometric. Se poate utiliza cu succes la realizarea de anima#ii,
genernd evenimente la momente regulate de timp sau coordonnd activitatea
nodurilor de interpolare.
Forma general! este urm!toarea:
K - 27
Tehnologii Web
TimeSensor {
exposedField
exposedField
exposedField
exposedField
exposedField
eventOut
eventOut
eventOut
eventOut
}
SFTime
SFBool
SFBool
SFTime
SFTime
SFTime
SFFloat
SFBool
SFTime
cycleInterval
enabled
loop
startTime
stopTime
cycleTime
fraction_changed
isActive
time
1
TRUE
FALSE
0
0
K - 28
Tehnologii Web
# un text
Shape {
appearance Appearance {
material Material {
diffuseColor 0 1 0
}
}
geometry Text {
string "Booom!"
fontStyle FontStyle {
justify "MIDDLE"
}
}
}
# la fiecare 2 secunde se va auzi un sunet
ROUTE TIMER.cycleTime TO SOUND.startTime
K - 29
Tehnologii Web
K - 30
Tehnologii Web
# vecin!tatea coliziunilor
proxy Transform {
translation 10 0 0
children [
# un cub de latur! 4 metri
Shape {
geometry Box {
size 4 4 4
}
}
]
}
# se detecteaz! coliziunile
collide TRUE
}
# dou! rute
ROUTE COLLIDER1.collideTime TO SOUND1.startTime
ROUTE COLLIDER2.collideTime TO SOUND2.startTime
SFBool
SFVec3f
SFVec3f
SFVec2f
SFBool
SFBool
SFTime
enabled
TRUE
hitNormal_changed
hitPoint_changed
hitTexCoord_changed
isActive
isOver
touchTime
K - 31
Tehnologii Web
Interpolatoare
Deosebit de utile pentru realizarea anima#iilor, nodurile de interpolare sunt folosite la
modificarea unor anumite valori de cmpuri ntr-un mod uniform, n func#ie de timp.
De cele mai multe ori, un interpolator va prelua evenimente de la un nod TimeSensor "i
va realiza o interpolare liniar! ntre diverse valori denumite keyValues. Fiecare astfel de
valoare va avea o cheie, numit! key, a c!rei valori vor fi numere frac#ionare ntre 0 "i 1.
Dup! cum am v!zut mai sus, un nod TimeSensor va trimite evenimente
fraction_changed ori de cte ori va putea. Printr-o rut!, putem asocia aceste
evenimente unui interpolator pentru a calcula urm!toarea valoare de interpolare pentru un
anumit cmp dorit. De fiecare dat! cnd un nod de interpolare recepteaz! un eveniment de
intrare, va genera un eveniment de ie"ire avnd valoarea interpolat!, conform func#iei de
interpolare stabilite.
Nodurile de interpolare VRML sunt:
OrientationInterpolator
PositionInterpolator
orientarea obiectelor),
(interpoleaz! date referitoare la pozi#ia
obiectelor),
ScalarInterpolator (interpoleaz! valori reale, fiind deci un
K - 32
Tehnologii Web
SFFloat
MFFloat
MFVec3f
MFVec3f
set_fraction
key
[]
keyValue
[]
value_changed
K - 33
Tehnologii Web
# un interpolator
DEF Spin OrientationInterpolator {
key [ 0.0 0.5 1.0 ]
# valorile cheilor
keyValue [
0.0 1.0 0.0 0.0,
0.0 1.0 0.0 3.14,
0.0 1.0 0.0 6.28
]
}
]
}
# o rut! de temporizare
ROUTE Clock.fraction_changed TO Spin.set_fraction
# o rut! de modificare a orient!rii
ROUTE Spin.value_changed TO Globe.set_rotation
K - 34
Tehnologii Web
Script-uri
n unele cazuri, senzorii "i interpolatoarele nu sunt suficiente pentru a dezvolta lumi
VRML cu adev!rat dinamice. Nodurile de tip Script permit construirea propriilor
noastre noduri, cmpuri, evenimente de intrare "i de ie"ire. Sintaxa general! este:
Script {
exposedField
field
field
eventIn
field
eventOut
MFString url
[]
SFBool
directOutput FALSE
SFBool
mustEvaluate FALSE
Type
Type
Type
eventInName
fieldName
default_value
eventOutName
Un exemplu:
Script {
eventIn SFBool input
field
SFBool boolValue TRUE
eventOut SFBool output
url "filter.js"
}
K - 35
Tehnologii Web
Dac! vom specifica pentru cmpul mustEvaluate valoarea TRUE, atunci navigatorul
VRML va evalua de fiecare dat! evenimentele trimise unui nod Script. Cmpul
directOutput permite unui script s! ignore cozile de evenimente "i s! plaseze valori
direct pentru cmpurile nodurilor la care acces.
Iat! un exemplu complet, scris de studen#ii Alexandrina Orzan "i Petric!-Ionu" G!bureanu,
preluat dintr-un proiect mai complex de lec#ii de geometrie elaborate n VRML. Dnd click
pe o sfer!, va fi construit pe etape un cub:
#VRML V2.0 utf8
# fundal alb
Background {
skyColor 1 1 1
}
Viewpoint {
position -15 0 50
orientation 0 1 0 -0.3
fieldOfView 0.30
}
# definirea unui nod script
DEF CYCLE Script {
# eveniment de intrare
eventIn SFTime touchTime
# pasul de vizualizare
field SFInt32 number 12
# eveniment de ie"ire
eventOut SFInt32 output
# cod JavaScript inline
url "javascript:
// ini#ializare
function initialize() {
output = 0;
}
// o metod! apelat! la
// fiecare eveniment 'touchTime'
function touchTime(value, time) {
if (output == number - 1)
output = 0;
else
++output;
}"
}
Transform {
translation -8 -6 -15
children [ # sfera senzor
DEF SENSOR TouchSensor {}
Shape {
appearance Appearance {
material Material {
diffuseColor 0 0.7 0
shininess 1
}
}
K - 36
Tehnologii Web
geometry Sphere {
radius 1
}
}
]
}
# o alternativ! de afi"are
DEF SWITCH Switch {
whichChoice 0
choice [
# cubul complet
Shape {
appearance DEF ap Appearance {
material Material {
diffuseColor 0 0 1
emissiveColor 0 0 1
}
}
geometry Box {
size 8 8 8
}
}
# punctul ini#ial
Shape {
appearance USE ap
geometry PointSet {
coord Coordinate {
point -4 -4 4
}
}
}
# prima linie
Shape {
appearance USE ap
geometry IndexedLineSet {
coord Coordinate {
point [ -4 -4 4, 4 -4 4 ]
}
coordIndex [ 0 1 -1 ]
}
}
# primele 2 linii
Shape {
appearance USE ap
geometry IndexedLineSet {
coord Coordinate {
point [ -4 -4 4, 4 -4 4, 4 -4 -4 ]
}
coordIndex [ 0 1 -1, 1 2 -1 ]
}
}
K - 37
Tehnologii Web
# primele 3 linii
Shape {
appearance USE ap
geometry IndexedLineSet {
coord DEF crd Coordinate {
point [ -4 -4 4, 4 -4 4,
4 -4 -4, -4 -4 -4 ]
}
coordIndex [ 0 1 -1, 1 2 -1, 2 3 -1 ]
}
}
# baza
Shape {
appearance USE ap
geometry IndexedLineSet {
coord USE crd
coordIndex [ 0 1 -1, 1 2 -1,
2 3 -1, 3 0 -1 ]
}
}
# prima n!l#ime
Shape {
appearance USE ap
geometry IndexedLineSet {
coord Coordinate {
point [ -4 -4 4, 4 -4 4,
4 -4 -4, -4 -4 -4,
4 4 4 ]
}
coordIndex [ 0 1 -1, 1 2 -1,
2 3 -1, 3 0 -1,
1 4 -1 ]
}
}
# dou! n!l#imi
Shape {
appearance USE ap
geometry IndexedLineSet {
coord Coordinate {
point [ -4 -4 4, 4 -4 4,
4 -4 -4, -4 -4 -4,
4 4 4, 4 4 -4 ]
}
coordIndex [ 0 1 -1, 1 2 -1,
2 3 -1, 3 0 -1,
1 4 -1, 2 5 -1 ]
}
}
# trei n!l#imi
Shape {
appearance USE ap
geometry IndexedLineSet {
coord Coordinate {
point [ -4 -4 4, 4 -4 4,
4 -4 -4, -4 -4 -4,
4 4 4, 4 4 -4,
K - 38
Tehnologii Web
-4 4 -4 ]
}
coordIndex [ 0 1 -1, 1 2 -1,
2 3 -1, 3 0 -1,
1 4 -1, 2 5 -1,
3 6 -1 ]
}
}
# patru n!l#imi
Shape {
appearance USE ap
geometry IndexedLineSet {
coord Coordinate {
point [ -4 -4 4, 4 -4 4,
4 -4 -4, -4 -4 -4,
4 4 4, 4 4 -4,
-4 4 -4, -4 4 4 ]
}
coordIndex [ 0 1 -1, 1 2 -1,
2 3 -1, 3 0 -1,
1 4 -1, 2 5 -1,
3 6 -1, 0 7 -1 ]
}
}
# schelet de cub (cadru de srm!)
Shape {
appearance USE ap
geometry DEF ils IndexedLineSet {
coord Coordinate {
point [ -4 -4 4, 4 -4 4,
4 -4 -4, -4 -4 -4,
-4 4 4, 4 4 4,
4 4 -4, -4 4 -4 ]
}
coordIndex [ 0 4 -1, 4 7 -1,
7 3 -1, 3 0 -1,
1 2 -1, 2 6 -1,
6 5 -1, 5 1 -1,
4 5 -1, 6 7 -1,
2 3 -1, 1 0 -1 ]
}
}
# corp final
Group {
children [
Shape {
appearance USE ap
geometry USE ils
}
Shape {
appearance Appearance {
material Material {
diffuseColor 0 0 1
transparency 0.5
}
K - 39
Tehnologii Web
}
geometry Box {
size 8 8 8
}
}
]
}
]
}
# rutele de evenimente:
# o rut! de la un senzor la un script
ROUTE SENSOR.touchTime TO CYCLE.touchTime
# o rut! de la un script la un grup de noduri
ROUTE CYCLE.output TO SWITCH.whichChoice
K - 40
Tehnologii Web
url "javascript:
function initialize() {
// cod de ini#ializare
}
function shutdown() {
// cod de terminare
}
function eventsProcessed() {
// cod de tratare a evenimentelor
}"
cmpuri publice
rate
1
distance 1
children [ ]
startTime 0
stopTime 0
loop
TRUE
# o transformare
DEF F Transform {
children IS children
}
# un temporizator
DEF T TimeSensor {
cycleInterval IS rate
startTime IS startTime
stopTime IS stopTime
loop IS loop
}
# un nod script
DEF S Script {
field
SFFloat
eventOut MFVec3f
distance IS distance
position
K - 41
Tehnologii Web
url "javascript:
function initialize() {
// constructor
pos1 = new SFVec3f(-distance, 0, 0);
pos2 = new SFVec3f(distance, 0, 0);
position = new MFVec3f(pos1, pos2, pos1);
}",
}
# un interpolator
DEF I PositionInterpolator {
key [ 0, 0.5, 1 ]
keyValue [ -1 0 0, 1 0 0, -1 0 0 ]
}
# rutele
ROUTE T.fraction_changed TO I.set_fraction
ROUTE I.value_changed TO F.set_translation
ROUTE S.position TO I.set_keyValue
}
# prototipul pendul
PROTO Pendulum [
field
SFTime
field
SFFloat
field
MFNode
exposedField SFTime
exposedField SFTime
field
SFBool
] {
rate
maxAngle
children
startTime
stopTime
loop
1
3.14159
[ ]
0
0
TRUE
# o transformare
DEF F Transform {
children IS children
}
# un temporizator
DEF T TimeSensor {
cycleInterval IS rate
startTime IS startTime
stopTime IS stopTime
loop IS loop
}
# un script
DEF S Script {
field
SFFloat
maxAngle IS maxAngle
eventOut MFRotation rotation
url "javascript:
function initialize() {
// constructor
rot1 = new SFRotation(0, 0, 1, 0);
rot2 = new SFRotation(0, 0, 1, maxAngle/2);
rot3 = new SFRotation(0, 0, 1, maxAngle);
rotation = new MFRotation(rot1, rot2, rot3,
rot2, rot1);
}",
}
K - 42
Tehnologii Web
# un interpolator
DEF I OrientationInterpolator {
key [ 0, 0.25, 0.5, 0.75, 1 ]
# orient!rile
keyValue [ 0 0 1 0,
0 0 1 1.57,
0 0 1 3.14,
0 0 1 1.57,
0 0 1 0 ]
}
# rutele
ROUTE T.fraction_changed TO I.set_fraction
ROUTE I.value_changed TO F.set_rotation
ROUTE S.rotation TO I.set_keyValue
}
# figurarea pendulului
Transform {
translation -3 0 0
# utilizarea prototipului
children Pendulum {
rate 3
maxAngle 6.28
children Shape {
geometry Cylinder {
height 5
}
}
}
}
# figurarea rachetei
Transform {
translation 3 0 0
# utilizarea prototipului
children Shuttle {
rate 2
children Shape {
geometry Sphere {}
}
}
}
K - 43
Tehnologii Web
De asemeni, putem utiliza obiectul Browser ntr-un nod Script (despre acest obiect
vom discuta mai jos):
Browser.loadURL(url, parametri);
De exemplu, pentru nc!rcarea unei lumi 3D ntr-o alt! fereastr! vom scrie:
Browser.loadURL("autor.wrl", "target=_blank");
n loc de un fi"ier VRML, putem specifica orice alt tip recunoscut de navigator
(e.g. un document HTML):
Browser.loadURL("ajutor.html", "target=_parent");
K - 44
Tehnologii Web
r = document.forms[0].value;
g = document.forms[0].value;
b = document.forms[0].value;
// deschide o fereastr! de afi"are
src = window.open('','src',
'toolbar=no,resizable=yes,menubar=no');
src.document.open("model/vrml");
// scrie lumea VRML
src.document.writeln("#VRML V2.0 utf8");
src.document.writeln("Shape {");
src.document.writeln(" appearance Appearance {");
src.document.writeln("
material Material {");
src.document.writeln("
diffuseColor" +
r + " " + g + " " + b);
src.document.writeln("
}");
src.document.writeln(" }");
src.document.writeln(" geometry Box {");
src.document.writeln("
size " +
w + " " + h + " " + d);
src.document.writeln(" }");
src.document.writeln("}");
src.document.close();
}
</script>
</head>
<body text="blue" bgcolor="white">
<form name="genvrml">
<p>Nodul <tt>Box</tt>:</p>
<p>L!#ime (Ox): <input name="w" value="1" size="3">
<p>n!l#ime (Oy): <input name="h" value="1" size="3">
<p>Adncime (Oz): <input name="d" value="1" size="3">
<p>Culoare ro"ie: <input name="r" value="1" size="3">
<p>Culoare verde: <input name="g" value="1" size="3">
<p>Culoare albastr!: <input name="b" value="1" size="3">
<hr>
<p><input type="button" name="gen" value="Genereaza"
onClick="javascript:genBox()">
</form>
</body>
</html>
Din p!cate aceast! metod! este puternic dependent! de navigatorul utilizat. Pentru
Internet Explorer, se poate folosi controlul ActiveX VRML2C, dac! este instalat n sistem.
Obiectul Browser
Cele mai multe navigatoare VRML ofer! programatorilor accesul static la un obiect
special denumit Browser. O serie dintre metodele "i propriet!#ile acestuia le vom ilustra n
continuare.
Avem la dispozi#ie metodele de informare getName(), getVersion(),
getWorldURL(), getCurrentFrameRate() "i getCurrentSpeed().
Un exemplu de utilizare, datele fiind afi"ate de un nod de tip Text:
K - 45
Tehnologii Web
K - 46
Tehnologii Web
nodului WorldInfo;
document desemnat de url;
Toate aceste metode sunt opera#ionale doar dac! valoarea cmpului mustEvaluate
este setat! pe TRUE.
Pentru a genera lumi VRML n mod dinamic vom putea folosi metodele
createVrmlFromString(String #ir) sau createVrmlFromURL(MFString
url, SFNode nod, String eventIn). Ambele pot fi utilizate la crearea de lumi 3D
date ca "ir de caractere sau, respectiv, la un anumit URL.
Un exemplu:
# un grup de noduri (ini#ial vid)
DEF GROUP Group {
}
Script {
field SFNode group USE GROUP
# constructor care ncarc! o lume
url "javascript:
function initialize() {
urlString = new MFString('con.wrl');
Browser.createVrmlFromURL(urlString,group,'addChildren');
}"
}
K - 47
Tehnologii Web
K - 48
Tehnologii Web
K - 49
Tehnologii Web
Pentru realizarea anumitor p!r#i ale programului au fost reutilizate unele surse de pe
Internet, mai ales n ceea ce prive"te importul "i exportul de tipuri de fi"iere grafice.
DXF (AutoCAD);
VRML 1.0;
VRML 2.0;
Tehnologii Web
K - 51
Tehnologii Web
3.1 Caracterizare
Un mediu virtual distribuit se bucur! de urm!toarele caracteristici principale:
1.
2.
4.
posibilitatea comunic!rii
Posibilit!#ile comunic!rii includ comunicarea prin gesturi, prin text introdus
de la un dispozitiv de intrare sau prin voce.
5.
partajarea informa"iilor
n afara faptului de a facilita comunicarea dintre utilizatori, sistemul ofer!
posibilitatea de a interac#iona cu mediul virtual (de exemplu, participan#ii la o
simulare virtual! pot selecta, muta, transforma obiecte care exist! n mediu
"i pot s! le dea altor utilizatori). Un proiectant de mediu virtual distribuit poate
oferi utilizatorilor libertatea de a construi edificii, de a desena pe o tabl! sau
chiar de a distruge mediul.
K - 52
Tehnologii Web
3.2 Structura
Un mediu virtual distribuit prezint! urm!toarea structur!:
re#ele (rapide, locale: Ethernet, Token Ring sau mondiale: ISDN (Integrated
Services Distribution Network), DSI (Defense Simulation Internet), comunicarea
realizndu-se printr-un protocol special: VRTP (Virtual Reality Transfer Protocol) sau
folosindu-se standardul Living Worlds).
Problemele care pot surveni n implementarea "i func#ionarea unui mediu virtual
distribuit sunt, n principal, cele legate de managementul n timp-real al resurselor, pierderea
de date, l!rgimea de band!, eterogenitatea "i scalabilitatea echipamentelor, configurarea "i
exploatarea software-ului.
K - 53
Tehnologii Web
Mediile virtuale distribuite sunt, concomitent, sisteme distribuite, aplica"ii grafice "i aplica"ii
interactive, integrnd sisteme de baze de date (utile pentru memorarea datelor persistente
care genereaz! mediul: forme "i localiz!ri de obiecte, texturi, informa#ii despre avatari etc.),
interac#ionnd cu sisteme tranzac#ionale (de comer# electronic, de exemplu) "i trebuind s!
asigure autentificarea utilizatorilor "i jurnalizarea activit!#ilor.
3.3 Origini
Mediilor virtuale distribuite "i au r!d!cinile n:
jocurile n re"ea
Una dintre primele ncerc!ri de implementare a unui simulator realist
o constituie Flight, conceput ini#ial de Gary Tarolli de la Silicon Graphics Inc.
(SGI), simulator de zbor disponibil n premier! n vara anului 1983 "i inclus n
software-ul oric!rei sta#ii grafice comercializate de SGI n perioada 1984-1992.
Partea de re#ea a fost ad!ugat! ncepnd cu 1984, dar utilizatorii conecta#i la
simulator nu puteau interac#iona unul cu altul. Acest lucru este ns! posibil la
programul demonstrativ Dogfight, limitat ini#ial la 10 utilizatori din ra#iuni de
evitare a congestiei re#elei. Aceste dou! aplica#ii au inspirat, peste ani,
dezvoltarea mediilor virtuale distribuite, mai ales prin faptul c! SGI a f!cut
sursele programelor publice (fragmente din aceste surse au fost folosite pentru
proiectul NPSNET pe care-l vom descrie mai tirziu).
O alt! surs! de inspira#ie a constituit-o Doom (idSoftware), ap!rut pe pia#!
n decembrie 1993 ca aplica#ie shareware, punct de cotitur! n industria jocurilor
n re#ea, oferind un mediu 3D realist, zgomotos "i populat cu mon"tri.
Succesorul lui, Doom II, a fost disponibil din octombrie 1994 "i s-a vndut n
peste 1,6 milioane de exemplare. A fost portat "i pe sta#ii de jocuri precum
Sega 32X, Super Nintendo, Sony PlayStation sau Nintendo 64.
Pentru Macintosh, se poate men#iona un joc cu grafic! impresionant! "i
sunet spa#ial, denumit Marathon, ap!rut n 1994, care oferea, ca "i Doom,
utilitare pentru editarea "i crearea de c!tre utilizator a scenelor 3D.
K - 54
Tehnologii Web
K - 55
Tehnologii Web
K - 56
Tehnologii Web
Pentru cea de-a treia problem!, solu#iile se dovedesc a fi multiple. Astfel, vom da n
continuare cteva exemple de medii virtuale distribuite, fiecare cu propria sa arhitectur!.
DIS-Java-VRML
Dezvoltat la Naval Postgraduate School (Statele Unite ale Americii), proiectul este
considerat de autorii lui drept model pentru mediile virtuale distribuite bazate pe VRML.
Eforturile proiectan#ilor s-au focalizat asupra transferului informa#iilor despre schimb!rile
de stare "i interac#iunile dintre entit!#ile care compun mediul, dezvoltndu-se o bibliotec!
de clase Java "i o arhitectur! pentru interschimbul de pachete de date DIS n Internet.
Arhitectura software de re#ea, la nivel general, este prezentat! n urm!toarea ilustra#ie:
K - 57
Tehnologii Web
privind utilizarea VRML-ului n acest context: suport pentru prezen#a virtual! a mai multor
participan#i, pentru interac#iunea participant-participant sau participant-sistem, pentru
asamblarea dinamic! a mediului din diverse componente precum avatari, modele partajate,
camere virtuale "i altele. Astfel, sunt disponibile biblioteci (abstracte) con#innd
scene/noduri VRML care pot fi folosite de proiectan#ii "i programatorii de lumi 3D.
Sunt definite urm!toarele interfe#e pentru:
1.
2.
3.
4.
5.
K - 58
Tehnologii Web
Java Shared Data Toolkit (JSDT) este pus la dispozi#ie de Sun "i ofer! un
cadru de dezvoltare a aplica#iilor Java colaborative (e.g. suport pentru sincronizarea
automat! a zonelor de memorie partajat! "i definirea de canale abstracte pentru
trimiterea "i recep#ionarea evenimentelor partajate). Utiliznd JSDT, se poate
implementa complet HLA RTI.
K - 59
Tehnologii Web
SFFloat getCurrentSpeed();
SFFloat getCurrentFrameRate();
SFString getWorldURL();
K - 60
Tehnologii Web
SFString event);
url,
SFNode
node,
scene VRML de la un anumit URL sau mai multe URL-uri date. Dup! ce
scena este nc!rcat!, evenimentul este trimis la nodul transmis ca parametru,
returnndu-se r!d!cina nodurilor corespunz!toare scenei VRML. Parametrul
evenimentului contine un "ir numind un eveniment MFNode la nodul p!strat.
void addRoute(SFNode fromNode, SFString fromEventOut,
void
SFNode
toNode,
SFString
toEventIn);
"i
deleteRoute(SFNode fromNode,SFString fromEventOut, SFNode
toNode,SFString toEventIn);
Aceste metode adaug! "i respectiv "terg o cale ntre numele evenimentelor
date pentru nodurile date.
Tehnologii Web
EXTERNPROTO Torus [
field SFFloat bigR,
field SFFloat smallR
]
[ "urn:inet:library:Torus",
"http://www.site.com/proto_torus.wrl"
]
K - 62
Tehnologii Web
Aplica#ia a fost realizat! cu ajutorul editorului VRML Pad, iar pentru vizualizarea ei
se poate folosi un plug-in precum Cortona VRML Client, Cosmo VRML Player sau World View.
n principiu, interfa#a unui plug-in VRML pentru navigatorul Web este compus! din dou!
p!r#i distincte:
i.
Toolbar-urile:
K - 63
Tehnologii Web
Structura aplica"iei
Aplica#ia este mp!r#it! n patru lumi distincte: holul, sala de calculatoare RP1,
secretariatul "i decanatul. Celor patru lumi le corespund fi"ierele: hol.wrl, rp1.wrl,
secretariat.wrl, respectiv decanat.wrl. Trecerea de la o lume la alta se face dnd
click pe u"a respectiv!. n momentul n care cursorul este pozi#ionat pe una dintre aceste
u"i, se va activa un nod de tip Anchor. n acel moment ap!snd butonul stng al
mouse-ului se va realiza trecerea n alt! lume (aceasta fiind nc!rcat! de navigator).
De exemplu, codul care realizeaz! trecerea din hol n sala RP1 este:
Anchor {
children [
USE usa
]
url "rp1.wrl"
}
K - 64
Tehnologii Web
Fiecare obiect care apare de mai multe ori n cadrul aplica#iei (monitorul, tastatura,
unitatea central!, scaunul, masa, u"a etc.) este stocat n fi"iere separate "i apoi este importat
n locul n care se dore"te a fi folosit. Spre exemplu, n figura de mai sus este prezentat!
o captur! din fi"ierul tasta.wrl, n care a fost modelat! tastatura utilizat! n fi"ierul
rp1.wrl pentru fiecare calculator virtual.
Structura fi"ierelor este una arborescent!, de pild! fi"ierul rp1.wrl import! noduri din
fi"ierele proba.wrl "i pereti.wrl.
Lumea descris! de proba.wrl reprezint! o mas! care are trei calculatoare "i trei scaune
"i n fi"ierul rp1.wrl este importat! de dou! ori. Fi"ierul pereti.wrl reprezint!
nc!perea propriu-zis!, adic! trei pere#i (pe unul dintre ei se figureaz! "i o tabl!) "i un perete
de sticl!. Pentru realizarea unui grad mai mare de realism s-au utilizat diverse texturi.
Peisajul care se observ! prin geamul de sticl! al laboratorului RP1 este realizat n fi"ierul
pereti.wrl, iar codul lui se prezint! mai jos:
Background {
groundColor [ 0.21 0.66 0.17,
0.21 0.66 0.17 ]
groundAngle 1.5
skyColor [ 0.42 0.63 0.89,
0.42 0.63 0.89 ]
skyAngle 1.64
backUrl
"img/back.jpg"
frontUrl "img/back.jpg"
rightUrl "img/back.jpg"
leftUrl
"img/back.jpg"
bottomUrl "img/floor.jpg"
}
La rndul s!u, fi"ierul pereti.wrl folose"te fi"ierele neon.wrl "i usahol.wrl, iar
proba.wrl utilizeaz! fi"ierele monitor.wrl, tasta.wrl, masa.wrl, scaun.wrl "i
pc.wrl.
K - 65
Tehnologii Web
Unitatea central! a unui calculator are definit un touch sensor la butonul CD-ROM-ului "i
un touch sensor la butonul Power. n momentul n care este ap!sat butonul Power, se va
aprinde un led dac! este stins "i invers. Cnd este ap!sat butonul de la CD-ROM, va ie"i
CD-ul pentru cteva secunde "i apoi va reintra n loca"ul lui. n acest timp un led verde de
la unitatea de CD va clipi. %i ledul ro"u de la hard-disk clipe"te continuu, ca "i cum ar fi
folosit hard-disk-ul.
Datorit! acestor anima#ii, mi"carea n sala de calculatoare poate fi fragmentat!, fiind
consumate foarte multe resurse.
K - 66
Tehnologii Web
6. Viitor
Deja realitatea virtual! este utilizat!, nglobat! sau nu n alte tehnici de reprezentare a
informa#iei, n domenii precum arhitectura, nv!#!mntul, medicina, ingineria ori sociologia
"i divertismentul. Crea#iile VRML prezente deja pe Web pot fi ncadrate ntr-un curent
artistic denumit environmental art.
Spa#iul cibernetic poate deveni viitorul laborator al omului de "tiin#!, viitorul simulator
cibernetic al inginerilor, viitorul amfiteatru al studen#ilor. Dac! nc! nu exist! suficiente
instrumente menite a construi lumi 3D sofisticate, tehnici precum telesenza"ia (summum al
realit!#ii virtuale, computer vision, grafic! computerizat! "i telecomunica#ii) ofer! premisele
reprezent!rii informa#iilor ntr-o form! familiar!, facil!, dar "i complex!.
Un proiect spectaculos al organizatiei Biota este Nerve Garden, bazat pe sisteme
Lindenmayer (tipuri particulare de fractali), VRML, re#ele neuronale, tehnologii Web "i
tehnici de codificare genetic!, al c!rui scop este explorarea interactiv! a biologiei digitale pe
Internet "i, ntr-un viitor mai ndep!rtat, instituirea unei infrastructuri pentru medii virtuale
biologice "i crearea unor noi organisme (plante "i animale) artificiale.
Limbajele bazate pe VRML care vor apare n urm!torii ani vor oferi modalit!#i de
manipulare inteligent! a datelor universului nostru uman transpus n spa#iul cibernetic aflat
n continu! transformare "i expansiune.
K - 67
Tehnologii Web
Tehnologii Web
L-2
Tehnologii Web
telnetaddress
t e l n e t : / / login
gopheraddress
g o p h e r : / / hostport [/ gtype [ gcommand ] ]
login
[ user [ : password ] @ ] hostport
hostport
host [ : port ]
host
hostname | hostnumber
ftptype
A formcode | E formcode | I | L digits
formcode
N|T|C
cellname
hostname
hostname
ialpha [ . hostname ]
hostnumber
digits . digits . digits . digits
port
digits
gcommand
path
path
void | segment [ / path ]
segment
xpalphas
search
xalphas [ + search ]
user
alphanum2 [ user ]
password
alphanum2 [ password ]
fragmentid
xalphas
gtype
xalpha
alphanum2
alpha | digit | - | _ | . | +
xalpha
alpha | digit | safe | extra | escape
xalphas
xalpha [ xalphas ]
xpalpha
xalpha | +
xpalphas
xpalpha [ xpalphas ]
ialpha
alpha [ xalphas ]
alpha
a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|
B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y
|Z
digit
0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
safe
$|-|_|@|.|&|+|extra
!|*|"|'|(|)|,
reserved
= | ; | / | # | ? | : | space
L-3
Tehnologii Web
escape
% hex hex
hex
digit | a | b | c | d | e | f | A | B | C | D | E | F
national
{ | } | vline | [ | ] | \ | ^ | ~
punctuation
<|>
digits
digit [ digits ]
alphanum
alpha | digit
alphanums
alphanum [ alphanums ]
void
_
L-4
Tehnologii Web
Tag de
start
Tag de
sfr!it
Descriere
ancor!
ABBR
ACRONYM
acronim
ADDRESS
APPLET
AREA
applet Java
hart! de imagini
ngro"at
BASE
BASEFONT
URI de baz!
D
BDO
I18N BiDi
BIG
BLOCKQUOTE
citat lung
BODY
BR
O
F
corp document
E
linie nou!
BUTTON
buton
CAPTION
explica#ie tabel
CENTER
DIV align=center
CITE
citat
CODE
cod surs!
COL
COLGROUP
grup de coloane
DD
descriere de defini#ie
coloan! de tabel
DEL
text "ters
DFN
defini#ie de instan#!
DIR
list! de directoare
DIV
diviziune
DL
list! de defini#ie
DT
termen definit
EM
intensificare
FIELDSET
L-5
Tehnologii Web
FONT
FORM
modificator caracteristici
de fonturi
formular
FRAME
FRAMESET
cadru
mul#ime de cadre
H$
titlu de tip 1
H2
titlu de tip 2
H3
titlu de tip 3
H4
titlu de tip 4
H5
titlu de tip 5
H6
titlu de tip 6
HEAD
HR
HTML
O
F
antet
E
linie orizontal!
r!d!cin! de document
italic
IFRAME
IMG
imagine
INPUT
INS
ISINDEX
text inserat
F
KBD
text tastat
LABEL
etichet! de formular
LEGEND
legend!
LI
LINK
membru de list!
E
leg!tur! independent!
MAP
MENU
META
D
F
meniu
meta-informa#ii
NOFRAMES
NOSCRIPT
OBJECT
obiect generic
OL
list! ordonat!
OPTGROUP
grup de op#iuni
OPTION
op#iune selectabil!
paragraf
PARAM
parametru
L-6
Tehnologii Web
PRE
text preformatat
citat scurt
SAMP
exemple de script-uri,
cod etc.
SCRIPT
instruc#iuni script
SELECT
selector
SMALL
SPAN
STRIKE
text ngro"at
STRONG
intensificare puternic!
STYLE
informa#ii de stil
SUB
subscript (indice)
SUP
superscript (exponent)
TABLE
tabel
TBODY
TD
corp de tabel
celul! de date
TEXTAREA
cmp de text
TFOOT
TH
cap de tabel
THEAD
antet de tabel
TITLE
TR
titlul documentului
O
rnd de tabel
TT
U
teletype
D
text subliniat
UL
list! neordonat!
VAR
instan#! de variabil!
n care:
E - element vid,
O - tag op#ional,
F - interzis,
D - n curs de dispari#ie,
L - forma tranzi#ional! (loose),
F - DTD suportnd cadre.
L-7
Tehnologii Web
Apare n elementele
Implicit
abbr
TD, TH
#IMPLIED
accept-charset
FORM
#IMPLIED
lista seturilor de
caractere suportate
accept
INPUT
#IMPLIED
accesskey
A, AREA, BUTTON,
INPUT, LABEL,
LEGEND, TEXTAREA
#IMPLIED
action
FORM
#REQUIRED
align
CAPTION
#IMPLIED
align
APPLET, IFRAME,
IMG, INPUT, OBJECT
#IMPLIED
align
LEGEND
#IMPLIED
aliniere relativ! la
cmpul de intrare
align
TABLE
#IMPLIED
pozi#ia relativ! a
tabelului
align
HR
#IMPLIED
aliniere a liniei
orizontale
align
#IMPLIED
alinierea textului
align
COL, COLGROUP,
TBODY, TD, TFOOT,
TH, THEAD, TR
#IMPLIED
alink
BODY
#IMPLIED
culoarea leg!turilor
selectate
alt
APPLET
#IMPLIED
descriere scurt!
alt
AREA, IMG
#REQUIRED
descriere scurt!
alt
INPUT
#IMPLIED
descriere scurt!
archive
OBJECT
#IMPLIED
archive
APPLET
#IMPLIED
axis
TD, TH
#IMPLIED
background
BODY
#IMPLIED
L-8
Demodat DTD
Remarci
alinierea con#inutului
n cadrul tabelului
imaginea pentru
fundalul documentului
Tehnologii Web
bgcolor
TABLE
#IMPLIED
culoarea de fundal
pentru celule
bgcolor
TR
#IMPLIED
culoarea de fundal
pentru rnduri
bgcolor
TD, TH
#IMPLIED
culoarea de fundal
pentru o celul!
bgcolor
BODY
#IMPLIED
culoarea de fundal a
documentului
border
TABLE
#IMPLIED
border
IMG, OBJECT
#IMPLIED
cellpadding
TABLE
#IMPLIED
spa#ierea n interiorul
celulelor
cellspacing
TABLE
#IMPLIED
char
COL, COLGROUP,
TBODY, TD, TFOOT,
TH, THEAD, TR
#IMPLIED
charoff
COL, COLGROUP,
TBODY, TD, TFOOT,
TH, THEAD, TR
#IMPLIED
spa#ierea pentru
alinierea n func#ie de
un anumit caracter
charset
A, LINK, SCRIPT
#IMPLIED
codificarea unei
resurse
checked
INPUT
#IMPLIED
cite
BLOCKQUOTE, Q
#IMPLIED
URI-ul documentului
surs!
cite
DEL, INS
#IMPLIED
informa#ii despre
motivul schimb!rii
con#inutului
class
#IMPLIED
classid
OBJECT
#IMPLIED
identific! o
implementare
clear
BR
none
controlul curgerii
textului
code
APPLET
#IMPLIED
fi"ierul applet-ului
codebase
OBJECT
#IMPLIED
codebase
APPLET
#IMPLIED
codetype
OBJECT
#IMPLIED
color
BASEFONT, FONT
#IMPLIED
L-9
controleaz! l!#imea
bordurii din jurul
tabelului
D
l!#imea bordurii
culoarea textului
Tehnologii Web
list! de lungimi,
implicit: 100% (1
coloan!)
cols
FRAMESET
#IMPLIED
cols
TEXTAREA
#REQUIRED
colspan
TD, TH
num!rul de coloane
ocupate de o celul!
compact
#IMPLIED
content
META
#REQUIRED
informa#ie
suplimentar!
coords
AREA
#IMPLIED
list! de lungimi
separate de virgul!
coords
#IMPLIED
utilizat! la h!r#i de
imagini senzitive
data
OBJECT
#IMPLIED
referin#! la datele
obiectului
datetime
DEL, INS
#IMPLIED
data/timpul
modific!rii
declare
OBJECT
#IMPLIED
declar! dar nu
instan#iaz! un
parametru
defer
SCRIPT
#IMPLIED
agentul utilizator
poate redirec#iona
execu#ia scriptului
dir
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FRAME, FRAMESET,
IFRAME, PARAM,
SCRIPT
#IMPLIED
direc#ia de afi"are a
textului
dir
BDO
#REQUIRED
direc#ia afi"!rii
disabled
BUTTON, INPUT,
OPTGROUP, OPTION,
SELECT, TEXTAREA
#IMPLIED
anulare n acest
context
enctype
FORM
"application/xwww- formurlencoded"
modul de codificare a
formularului
face
BASEFONT, FONT
#IMPLIED
for
LABEL
#IMPLIED
referitor la valoarea
ID a elementului
frame
TABLE
#IMPLIED
frameborder
FRAME, IFRAME
L - 10
reduce spa#ierea
list! de nume de
fonturi separate de
virgul!
Tehnologii Web
lista de identificatori
de antete de celul!
headers
TD, TH
#IMPLIED
height
IFRAME
#IMPLIED
height
IMG, OBJECT
#IMPLIED
height
APPLET
#REQUIRED
n!l#imea initial!
height
TD, TH
#IMPLIED
n!l#imea celulei
href
A, AREA, LINK
#IMPLIED
href
BASE
#IMPLIED
URI-ul considerat
baz!
hreflang
A, LINK
#IMPLIED
codul limbajului
hspace
APPLET, IMG,
OBJECT
#IMPLIED
http-equiv
META
#IMPLIED
id
#IMPLIED
identificator unic
ismap
IMG, INPUT
#IMPLIED
utilizeaz! o imagine
senzitiv! la nivel de
server
label
OPTION
#IMPLIED
label
OPTGROUP
#REQUIRED
lang
toate, exceptnd
APPLET, BASE,
BASEFONT, BR,
FRAME, FRAMESET,
IFRAME, PARAM,
SCRIPT
#IMPLIED
language
SCRIPT
#IMPLIED
link
BODY
#IMPLIED
culoarea leg!turilor
longdesc
IMG
#IMPLIED
longdesc
FRAME, IFRAME
#IMPLIED
leg!tur! spre o
descriere lung!
marginheight
FRAME, IFRAME
#IMPLIED
n!l#imea marginilor
(n pixeli)
marginwidth
FRAME, IFRAME
#IMPLIED
l!#imea marginilor (n
pixeli)
maxlength
INPUT
#IMPLIED
lungimea maxim! de
caractere ce pot fi
introduse
media
STYLE
#IMPLIED
media folosit!
media
LINK
#IMPLIED
media folosit!
L - 11
n!l#imea cadrului
n!l#imea con#inutului
spatiu orizontal
suplimentar
leg!tur! spre o
descriere lung!
Tehnologii Web
method
FORM
GET
multiple
SELECT
#IMPLIED
selectare multipl!
name
BUTTON, TEXTAREA
#IMPLIED
numele asociat
cmpului de intrare
name
APPLET
#IMPLIED
name
SELECT
#IMPLIED
nume de cmp
name
FORM
#IMPLIED
numele formularului
name
FRAME, IFRAME
#IMPLIED
name
IMG
#IMPLIED
numele imaginii
name
#IMPLIED
numele leg!turii
name
INPUT, OBJECT
#IMPLIED
name
MAP
#REQUIRED
identificator n usemap
name
PARAM
#REQUIRED
nume de proprietate
name
META
#IMPLIED
nohref
AREA
#IMPLIED
noresize
FRAME
#IMPLIED
noshade
HR
#IMPLIED
nowrap
TD, TH
object
permite identificarea
applet-ului
numele cadrului
nu permite
modificarea
dimensiunii cadrelor
#IMPLIED
nu permite "ruperea"
cuvintelor pe mai
multe linii
APPLET
#IMPLIED
onblur
A, AREA, BUTTON,
INPUT, LABEL,
SELECT, TEXTAREA
#IMPLIED
trateaz! pierderea
focaliz!rii
onchange
INPUT, SELECT,
TEXTAREA
#IMPLIED
trateaz! modificarea
valorii cmpului
onclick
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
trateaz! ac#ionarea
unui click
L - 12
Tehnologii Web
ondblclick
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
trateaz! ac#ionarea
unui click dublu
onfocus
A, AREA, BUTTON,
INPUT, LABEL,
SELECT, TEXTAREA
#IMPLIED
trateaz! focalizarea
unui element
onkeydown
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
onkeypress
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
onkeyup
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
onload
FRAMESET
#IMPLIED
onload
BODY
#IMPLIED
trateaz! nc!rcarea
documenului
#IMPLIED
trateaz! ap!sarea
butonului mouse-ului
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
onmousedown
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
L - 13
trateaz! nc!rcarea
tuturor cadrelor
Tehnologii Web
onmousemove
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
trateaz! mi"carea
mouse-ului
onmouseout
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
onmouseover
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
trateaz! mutarea
mouse-ului peste un
element
onmouseup
toate, exceptnd
APPLET, BASE,
BASEFONT, BDO, BR,
FONT, FRAME,
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
#IMPLIED
trateaz! eliberarea
butonului mouse-ului
onreset
FORM
#IMPLIED
trateaz! resetarea
formularului
onselect
INPUT, TEXTAREA
#IMPLIED
trateaz! selectarea
textului
onsubmit
FORM
#IMPLIED
trateaz! evenimentul
de trimitere a
formularului
onunload
FRAMESET
#IMPLIED
trateaz! distrugerea
tuturor cadrelor
onunload
BODY
#IMPLIED
trateaz! distrugerea
documentului, prin
nc!rcarea altuia n
aceea"i fereastr!
profile
HEAD
#IMPLIED
prompt
ISINDEX
#IMPLIED
readonly
TEXTAREA
#IMPLIED
L - 14
mesaj
datele nu pot fi
modificate
Tehnologii Web
readonly
INPUT
#IMPLIED
rel
A, LINK
#IMPLIED
tipuri de leg!turi
rev
A, LINK
#IMPLIED
tipuri de leg!turi
rows
FRAMESET
#IMPLIED
rows
TEXTAREA
#REQUIRED
num!rul de rnduri
ocupate
rowspan
TD, TH
num!rul de rnduri
ocupate de o celul!
rules
TABLE
#IMPLIED
scheme
META
#IMPLIED
selecteaz! forma
con#inutului
scope
TD, TH
#IMPLIED
scrolling
FRAME, IFRAME
auto
selected
OPTION
#IMPLIED
indic! selectarea
implicit!
shape
AREA
rect
controleaz!
interpretarea
coordonatelor
shape
rect
size
HR
#IMPLIED
size
FONT
#IMPLIED
m!rimea fontului,
relativ! sau absolut!
[+|-]nn
size
INPUT
#IMPLIED
size
BASEFONT
#REQUIRED
size
SELECT
#IMPLIED
num!rul de rnduri
vizibile dintr-o list! de
selec#ie
span
COL
span
COLGROUP
num!rul implicit de
coloane
src
SCRIPT
#IMPLIED
URI-ul pentru un
script extern
src
INPUT
#IMPLIED
pentru cmpuri
con#innd imagini
L - 15
permite apari#ia
barelor de derulare
m!rimea cmpurilor
de intrare
D
m!rimea de baz! a
fonturilor
Tehnologii Web
src
FRAME, IFRAME
#IMPLIED
src
IMG
#REQUIRED
URI-ul imaginii
standby
OBJECT
#IMPLIED
mesaj afi"at la
nc!rcarea obiectului
start
OL
#IMPLIED
style
#IMPLIED
informa#ii de stil
asociate
(via CSS sau alte
limbaje)
summary
TABLE
#IMPLIED
scopul/structura
tabelului
tabindex
A, AREA, BUTTON,
INPUT, OBJECT,
SELECT, TEXTAREA
#IMPLIED
pozi#ia n ordinea de
tabulare
target
A, AREA, BASE,
FORM, LINK
#IMPLIED
text
BODY
#IMPLIED
title
#IMPLIED
titlul asociat
type
A, LINK
#IMPLIED
tipul con#inutului
type
OBJECT
#IMPLIED
tipul con#inutului
type
PARAM
#IMPLIED
tipul con#inutului
valorii cnd
valuetype=ref
type
SCRIPT
#REQUIRED
tipul con#inutului
limbajului script
type
STYLE
#REQUIRED
tipul con#inutului
limbajului de stiluri
type
INPUT
TEXT
tipul cmpului de
intrare
type
LI
#IMPLIED
type
OL
#IMPLIED
tipul stilului de
numerotare
type
UL
#IMPLIED
type
BUTTON
submit
tipul de buton
usemap
#IMPLIED
valign
COL, COLGROUP,
TBODY, TD, TFOOT,
TH, THEAD, TR
#IMPLIED
alinierea vertical! a
celulelor
L - 16
secven#! de start
a contorului
unei liste
culoarea textului
documentului
Tehnologii Web
value
OPTION
#IMPLIED
valoarea implicit! a
unui element
value
PARAM
#IMPLIED
valoarea unei
propriet!#i
value
INPUT
#IMPLIED
value
BUTTON
#IMPLIED
value
LI
#IMPLIED
valuetype
PARAM
DATA
version
HTML
%HTML.Version;
constant!, desemnnd
versiunea specifica#iei
HTML
vlink
BODY
#IMPLIED
culoarea leg!turilor
vizitate
vspace
APPLET, IMG,
OBJECT
#IMPLIED
marginea vertical!
suplimentar!
width
HR
#IMPLIED
width
IFRAME
#IMPLIED
width
IMG, OBJECT
#IMPLIED
l!#imea unei
imagini/obiect
width
TABLE
#IMPLIED
width
APPLET
#REQUIRED
width
COL
#IMPLIED
l!#imea coloanelor
width
COLGROUP
#IMPLIED
width
TD, TH
#IMPLIED
width
PRE
#IMPLIED
n care:
D - n curs de dispari#ie,
L - forma tranzi#ional! (loose),
F - DTD suportnd cadre.
L - 17
schimb!
contorizarea/stilul
unui element de list!
modul de interpretare
a valorii
l!#imea ini#ial! de
afi"are a applet-ului
Tehnologii Web
Entit!"i utile
Simbol
Entitate
Semnul copyright
Exemplu
®
MagicPenguin
Semnul trademark
™
Crocodilla
<
<
>
>
Ampersand
&
&
Spa#iu indestructibil
"
"
  Ð
Ð
¡
¡ Ñ
Ñ
¢
¢ Ò
Ò
£
£ Ó
Ó
¤
¤ Ô
Ô
¥
¥ Õ
Õ
¦
¦ Ö
Ö
§
§
×
×
¨
¨ Ø
Ø
©
©
Ù
Ù
ª
ª
Ú
Ú
«
«
Û
Û
L - 18
Tehnologii Web
¬
¬
Ü
Ü
­
­
Ý
Ý
®
®
Þ
Þ
¯
¯
ß
ß
°
°
à
à
±
±
á
á
²
²
â
â
³
³
ã
ã
´
´
ä
ä
µ
µ
å
å
¶
¶
æ
æ
& ·
·
ç
ç
¸
¸
è
è
¹
¹
é
é
º
º
ê
ê
»
»
ë
ë
¼
¼
ì
ì
½
½
í
í
¾
¾
î
î
¿
¿
ï
ï
À
À
ð
ð
Á
Á
ñ
ñ
Â
Â
ò
ò
Ã
Ã
ó
ó
' Ä
Ä
ô
ô
Å
Å
õ
õ
Æ
Æ
ö
ö
Ç
Ç
÷
÷
È
È
ø
ø
É
É
ù
ù
Ê
Ê
ú
ú
Ë
Ë
û
û
Ì
Ì
ü
ü
L - 19
Tehnologii Web
Í
Í
ý
ý
Î
Î
þ
þ
Ï
Ï
ÿ
ÿ
Vizualizare
Â
(alternativ Â)
â
(alternativ â)
Ă
ă
Î
(alternativ Î)
î
(alternativ î)
Ş
ş
Ţ
ţ
"
L - 20
Tehnologii Web
Procentaje
(implicit:
N/A)
Nume
Valori
Valoare
ini"ial#
'azimuth'
center
da
'background'
['background-color'
|| 'background-image'
|| 'background-repeat'
|| 'background-attachment'
|| 'background-position']
| inherit
XX
nu
'backgroundattachment'
scroll
nu
visual
'backgroundcolor'
transparent
nu
visual
'backgroundimage'
none
nu
visual
'backgroundposition'
[ [<percentage> | <length>
]{1,2} | [ [top | center | bottom]
|| [left | center | right] ] ]
| inherit
0% 0%
'backgroundrepeat'
repeat
nu
visual
'border'
[ 'border-width' || 'border-style'
|| <color> ] | inherit
vezi
propriet!#ile
individuale
nu
visual
'border-collapse'
collapse
da
visual
'border-color'
<color>{1,4} |
transparent | inherit
vezi
propriet!#ile
individuale
nu
visual
'border-spacing'
<length><length>? | inherit
da
visual
'border-style'
<border-style>{1,4} | inherit
vezi
propriet!#ile
individuale
nu
visual
'bordertop''borderright''borderbottom''borderleft'
vezi
propriet!#ile
individuale
nu
visual
L - 21
nivel bloc
sau
elemente
nlocuite
'table' "i
'inline-table'
'table' "i
'inline-table'
nu
Grupuri
de medii
aural
permis! la
'backgroundposition'
relativ! la
m!rimea
boxei
visual
visual
Tehnologii Web
'border-topcolor''borderrightcolor''borderbottomcolor''borderleft-color'
<color> | inherit
valoarea
propriet!#ii
'color'
nu
visual
'border-topstyle''borderrightstyle''borderbottomstyle''border-leftstyle'
<border-style> | inherit
none
nu
visual
'border-topwidth''borderrightwidth''borderbottomwidth''borderleft-width'
<border-width> | inherit
medium
nu
visual
'border-width'
<border-width>{1,4} | inherit
vezi
propriet!#ile
individuale
nu
visual
'bottom'
auto
elemente
pozi#ionate
nu
'caption-side'
top
'tablecaption'
da
visual
'clear'
none
elemente
bloc
nu
visual
'clip'
auto
elemente
bloc sau
nlocuite
nu
visual
'color'
<color> | inherit
depinde de
agentul
utilizator
da
visual
'content'
"irul vid
nu
toate
'counterincrement'
[ <identifier><integer>? ]+ |
none | inherit
none
nu
toate
'counter-reset'
[ <identifier><integer>? ]+ |
none | inherit
none
nu
toate
'cue'
[ 'cue-before' || 'cue-after' ]
| inherit
XX
nu
aural
'cue-after'
none
nu
aural
'cue-before'
none
nu
aural
'cursor'
auto
da
visual,
interactive
'direction'
ltr
da
visual
L - 22
pseudoelementele
:before "i
:after
toate
relativ! la
n!l#imea
blocului
visual
Tehnologii Web
'display'
inline
nu
toate
'elevation'
level
da
aural
'empty-cells'
show
'table-cell'
da
visual
'float'
none
toate, f!r!
elementele
pozi#ionate
nu
visual
'font'
[ [ 'font-style' || 'font-variant'
|| 'font-weight' ]? 'font-size' [
/ 'line-height' ]? 'font-family' ] |
caption | icon | menu |
message-box | small-caption |
status-bar | inherit
vezi
propriet!#ile
individuale
da
'font-family'
depinde de
agentul
utilizator
da
'font-size'
medium
da, valoarea
calculat! e
mo"tenit!
'font-size-adjust'
none
da
visual
'font-stretch'
normal
da
visual
'font-style'
normal
da
visual
'font-variant'
normal
da
visual
'font-weight'
normal
da
visual
'height'
<length> | <percentage> |
auto | inherit
auto
toate
elementele,
exceptnd
elementele
inline,
coloanele
de tabel "i
grupurile de
celule
'left'
<length> | <percentage> |
auto | inherit
auto
elementele
pozi#ionate
'letter-spacing'
normal
da
'line-height'
normal
da
L - 23
permis la
'font-size' "i
'line-height'
visual
visual
relativ! la
m!rimea
fontului
elementelor
p!rinte
visual
nu
vezi
specificatia
CSS2
visual
nu
relativ! la
l!#imea
blocului
visual
visual
relativ! la
m!rimea
fontului
visual
Tehnologii Web
'list-style'
XX
elemente cu
'display:
list-item'
da
visual
'list-style-image'
none
elemente cu
'display:
list-item'
da
visual
'list-styleposition'
outside
elemente cu
'display:
list-item'
da
visual
'list-style-type'
disc
elemente cu
'display:
list-item'
da
visual
'margin'
<margin-width>{1,4} | inherit
XX
nu
relativ! la
l!#imea
blocului
visual
'margintop''marginright''marginbottom''marginleft'
<margin-width> | inherit
nu
relativ! la
l!#imea
blocului
visual
'marker-offset'
auto
elemente cu
'display:
marker'
nu
visual
'marks'
none
contextul
paginii
N/A
visual,
paged
none
toate
elementele,
exceptnd
elementele
inline "i
elementele
tabel
nu
relativ la
n!l#imea
blocului
visual
none
toate
elementele,
exceptnd
elementele
inline "i
elementele
tabel
nu
relativ la
l!#imea
blocului
visual
toate
elementele,
exceptnd
elementele
inline "i
tabel
nu
relativ la
n!l#imea
blocului
visual
nu
relativ la
l!#imea
blocului
visual
da
'max-height'
'max-width'
'min-height'
<length> | <percentage> |
none | inherit
<length> | <percentage> |
none | inherit
<length> | <percentage>
| inherit
'min-width'
<length> | <percentage>
| inherit
dependent
de agentul
utilizator
toate
elementele
exceptnd
elementele
inline "i
tabel
'orphans'
<integer> | inherit
elemente
bloc
L - 24
visual,
paged
Tehnologii Web
'outline'
[ 'outline-color' || 'outline-style'
|| 'outline-width' ] | inherit
vezi
propriet!#ile
individuale
nu
visual,
interactive
'outline-color'
invert
nu
visual,
interactive
'outline-style'
<border-style> | inherit
none
nu
visual,
interactive
'outline-width'
<border-width> | inherit
medium
nu
visual,
interactive
'overflow'
visible
nu
visual
'padding'
<padding-width>{1,4} | inherit
XX
nu
relativ la
l!#imea
blocului
visual
'paddingtop''paddingright''paddingbottom''paddingleft'
<padding-width> | inherit
nu
relativ la
l!#imea
blocului
visual
'page'
<identifier> | auto
auto
elemente de
tip bloc
da
visual,
paged
'page-breakafter'
auto
elemente de
tip bloc
nu
visual,
paged
'page-breakbefore'
auto
elemente de
tip bloc
nu
visual,
paged
'page-breakinside'
auto
elemente de
tip bloc
da
visual,
paged
'pause'
[ [<time> |
<percentage>]{1,2} ] | inherit
depinde de
agentul
utilizator
nu
aural
'pause-after'
depinde de
agentul
utilizator
nu
vezi
specifica#iile
CSS2
aural
'pause-before'
depinde de
agentul
utilizator
nu
vezi
specifica#iile
CSS2
aural
'pitch'
medium
da
aural
'pitch-range'
<number> | inherit
50
da
aural
'play-during'
auto
nu
aural
nu
visual
elemente
bloc "i
nlocuite
toate
elementele,
f!r!
elementele
cu con#inut
generat
'position'
static
'quotes'
[<string><string>]+ |
none | inherit
depinde de
agentul
utilizator
da
visual
'richness'
<number> | inherit
50
da
aural
L - 25
Tehnologii Web
relativ la
l!#imea
blocului
'right'
<length> | <percentage> |
auto | inherit
auto
elemente
pozi#ionate
nu
'size'
<length>{1,2} | auto |
portrait | landscape | inherit
auto
contextul
paginii
N/A
visual,
paged
'speak'
normal | none |
spell-out | inherit
normal
da
aural
da
aural
elemente
care au
antet de
tabel
visual
'speak-header'
once
'speak-numeral'
continuous
da
aural
'speakpunctuation'
none
da
aural
'speech-rate'
medium
da
aural
'stress'
<number> | inherit
50
da
aural
'table-layout'
auto
'table' "i
'inline-table'
nu
visual
'text-align'
depinde de
agentul
utilizator "i
de direc#ia
de scriere
elemente de
tip bloc
da
visual
'text-decoration'
none
nu (vezi
specifica#iile
CSS2)
visual
'text-indent'
<length> | <percentage>
| inherit
'text-shadow'
none | [<color>
|| <length><length><length>?
,]* [<color>
|| <length><length><length>?]
| inherit
none
nu (vezi
specifica#iile
CSS2)
visual
'text-transform'
capitalize | uppercase |
lowercase | none | inherit
none
da
visual
'top'
<length> | <percentage> |
auto | inherit
auto
elemente
pozi#ionate
nu
normal
toate
elementele,
vezi "i
specifica#iile
CSS2
nu
inline-level
"i 'table-cell'
'unicode-bidi'
normal | embed |
bidi-override | inherit
'vertical-align'
baseline
'visibility'
visible | hidden |
collapse | inherit
inherit
L - 26
elemente de
tip bloc
da
nu
nu
relativ la
l!#imea
blocului
relativ la
n!l#imea
blocului
visual
visual
visual
relativ la
proprietatea
'line-height'
a
elementului
visual
visual
Tehnologii Web
'voice-family'
depinde de
agentul
utilizator
da
'volume'
<number> | <percentage> |
silent | x-soft | soft | medium |
loud | x-loud | inherit
medium
da
'white-space'
normal
elemente de
tip bloc
da
visual
'widows'
<integer> | inherit
elemente de
tip bloc
da
visual,
paged
toate
elementele,
f!r!
elemente
inline,
rnduri de
tabel "i
grupuri de
rnduri
nu
'width'
<length> | <percentage> |
auto | inherit
auto
'word-spacing'
normal
'z-index'
auto
L - 27
elemente
pozi#ionate
aural
relativ la
valoarea
mo"tenit!
relativ la
l!#imea
blocului
aural
visual
da
visual
nu
visual
Tehnologii Web
Anexa 6 - Aplicaii i
unelte de dezvoltare XML
Cu toate c! familia de limbaje XML este o apari#ie recent! n lumea tehnologiei
informa#iei, deja exist! o sumedenie de aplica#ii "i utilitare pentru prelucrarea, formatarea "i
convertirea documentelor XML. Prezent!m o parte dintre ele (majoritatea disponibile
gratuit) n continuare:
$. Editoare XML
Visual XML
Xeena
http://www-4.ibm.com/software/developer/library/xeenatech.html
aplica#ie Java gratuit! destinat! edit!rii de documente XML derivate din orice
DTD;
XML Spy
Xpose
xmlTool
2. Procesoare XML
expat
XML4C
XP
L - 28
de
Tehnologii Web
SAX 2
Xml2Beans
SAXON
http://users.iclway.co.uk/mhkay/saxon/index.html
colec#ie
open-source de utilitare Java pentru prelucrarea documentelor XML (procesor XSLT,
XPath, avnd numeroase extensii);
TclXT
XTL
HaXml
Perl Libxml
XML::Parser
http://wwwx.netheaven.com/~coopercc/xmlparser/intro.html - ex-tensie
Perl pentru procesorul Expat al lui James Clark;
XML::DOM
XML::XQL
4suite
L - 29
Tehnologii Web
xmlFX
http://msdn.microsoft.com/downloads/webtechnology/xml/
msxml.asp - procesor XML distribuit gratuit ca o component! COM, suportnd
DOM, spa#ii de nume, XML Schema "i interog!ri;
Lark
http://www.textuality.com/Lark
specifica#iilor XML 1.0;
procesor
dezvoltat
pentru
testarea
Xerces
DTD Parser
Mozilla
Internet Explorer
DocZilla
L - 30
Tehnologii Web
InDelv
Xplorer
Jumbo
eXeMeL
Opera
XML-DBMS
http://www.informatik.tu-darmstadt.de/DVS$/staff/bourret/xmldbms/ set de pachete Java sau module Perl folosit pentru transferul de date ntre sistemele
de gestiune a bazelor de date "i documentele XML;
http://www.alphaworks.ibm.com/tech/xmltranslatorgenerator - generator
Java automat de translatoare a documentelor XML bazate pe un anumit DTD n
documente XML conforme cu alte DTD-uri;
Some2XML
http://www.pault.com/Xmltube/some2xml.html
convertirea fi"ierelor text n documente XML;
script
Perl
pentru
XMLTRANS
Tidy
L - 31
Tehnologii Web
XTAL
XMLServlet
Majix
XML::Writer
XMLZip
XMill
http://technet.oracle.com/tech/xml/schema_java/index.htm - pro-cesor
Java pentru schemele XML.
XML Styler
http://www.arbortext.com/XML_Styler/xml_styler.html
ArborText gratuit! pentru crearea "i modificarea documentelor XSL;
aplica#ie
XSL Editor
Stylus
http://www.exceloncorp.com/products/excelon_stylus.html
integrat de dezvoltare a site-urilor Web folosind XSL;
L - 32
mediu
Tehnologii Web
XSpLit
<xsl>Composer
XSLTmark
XEP
XML::XSLT
http://xmlxslt.sourceforge.net/ - analizor
implementnd par#ial recomandarea XSLT;
XSLT
conceput
Perl,
XT
Xalan
xesalt
Link
L - 33
Tehnologii Web
PyPointers
http://www.stud.ifi.uio.no/~larsga/download/python/xml/
xptr.html - implementare Python gratuit! a unui analizor XPointer;
X2X
xlinkit.com
Mozilla
http://www.redland.opensource.ac.uk/rapier/
conceput n limbajul C;
analizor
RDF/XML
Reggie
DC-Dot
InterDataWorking
Protg-2000
http://smi-web.stanford.edu/projects/protege/protege-2000/
grafic pentru scrierea de documente RDF "i scheme RDF;
edi-tor
SiRPAC
L - 34
Tehnologii Web
MFNode
MFNode
MFNode
SFString
MFString
MFString
SFVec3f
SFVec3f
addChildren
removeChildren
children
description
parameter
url
bboxCenter
bboxSize
[]
""
[]
[]
0 0 0
-1 -1 -1
SFNode
SFNode
SFNode
material
texture
textureTransform
NULL
NULL
NULL
SFString
SFBool
SFFloat
SFTime
SFTime
MFString
SFTime
SFBool
description
loop
pitch
startTime
stopTime
url
duration_changed
isActive
""
FALSE
1.0
0
0
[]
SFBool
MFFloat
MFColor
MFString
MFString
MFString
MFString
MFString
MFString
set_bind
groundAngle
groundColor
backUrl
bottomUrl
frontUrl
leftUrl
rightUrl
topUrl
Appearance
Appearance {
exposedField
exposedField
exposedField
}
AudioClip
AudioClip {
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
eventOut
eventOut
}
Background
Background {
eventIn
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
L - 35
[]
[]
[]
[]
[]
[]
[]
[]
Tehnologii Web
exposedField
exposedField
eventOut
MFFloat
MFColor
SFBool
skyAngle
skyColor
isBound
[]
[0 0 0]
MFNode
MFNode
SFVec3f
MFNode
SFVec3f
SFVec3f
addChildren
removeChildren
axisOfRotation
children
bboxCenter
bboxSize
0 1 0
[]
0 0 0
-1 -1 -1
SFVec3f
size
2 2 2
MFNode
MFNode
MFNode
SFBool
SFVec3f
SFVec3f
SFNode
SFTime
addChildren
removeChildren
children
collide
bboxCenter
bboxSize
proxy
collideTime
MFColor
color
[]
set_fraction
key
keyValue
value_changed
[]
[]
Billboard
Billboard {
eventIn
eventIn
exposedField
exposedField
field
field
}
Box
Box {
field
}
Collision
Collision {
eventIn
eventIn
exposedField
exposedField
field
field
field
eventOut
}
[]
TRUE
0 0 0
-1 -1 -1
NULL
Color
Color {
exposedField
}
ColorInterpolator
ColorInterpolator
eventIn
exposedField
exposedField
eventOut
}
{
SFFloat
MFFloat
MFFloat
SFFloat
L - 36
Tehnologii Web
Cone
Cone {
field
field
field
field
}
SFBool
SFFloat
SFFloat
SFBool
bottom
bottomRadius
height
side
TRUE
1
2
TRUE
MFVec3f
point
[]
set_fraction
key
keyValue
value_changed
[]
[]
bottom
height
radius
side
top
TRUE
2
1
TRUE
TRUE
Coordinate
Coordinate {
exposedField
}
CoordinateInterpolator
CoordinateInterpolator {
eventIn
SFFloat
exposedField
MFFloat
exposedField
MFVec3f
eventOut
MFVec3f
}
Cylinder
Cylinder {
field
field
field
field
field
}
SFBool
SFFloat
SFFloat
SFBool
SFBool
CylinderSensor
CylinderSensor {
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
eventOut
eventOut
eventOut
}
SFBool
SFFloat
SFBool
SFFloat
SFFloat
SFFloat
SFBool
SFRotation
SFVec3f
autoOffset
TRUE
diskAngle
0.262
enabled
TRUE
maxAngle
-1
minAngle
0
offset
0
isActive
rotation_changed
trackPoint_changed
DirectionalLight
DirectionalLight {
exposedField
SFFloat
exposedField
SFColor
ambientIntensity
color
L - 37
0
1 1 1
Tehnologii Web
exposedField
exposedField
exposedField
SFVec3f
SFFloat
SFBool
direction
intensity
on
0 0 -1
1
TRUE
MFFloat
SFNode
SFNode
SFNode
MFFloat
SFBool
SFBool
SFFloat
SFBool
SFBool
SFInt32
SFFloat
SFInt32
SFInt32
set_height
color
normal
texCoord
height
ccw
colorPerVertex
creaseAngle
normalPerVertex
solid
xDimension
xSpacing
zDimension
zSpacing
NULL
NULL
NULL
[]
TRUE
TRUE
0
TRUE
TRUE
0
0.0
0
0.0
Extrusion {
eventIn
eventIn
eventIn
eventIn
field
field
field
field
field
MFVec3f
MFRotation
MFVec2f
MFVec3f
SFBool
SFBool
SFBool
SFFloat
MFVec2f
set_crossSection
set_orientation
set_scale
set_spine
beginCap
ccw
convex
creaseAngle
crossSection
field
field
field
field
field
SFBool
MFRotation
MFVec2f
SFBool
MFVec3f
endCap
orientation
scale
solid
spine
SFBool
SFColor
SFString
SFFloat
SFBool
set_bind
color
fogType
visibilityRange
isBound
ElevationGrid
ElevationGrid {
eventIn
exposedField
exposedField
exposedField
field
field
field
field
field
field
field
field
field
field
}
Extrusion
TRUE
TRUE
TRUE
0
[1 1, 1 -1,
-1 -1, -1 1, 1 1]
TRUE
0 0 1 0
1 1
TRUE
[0 0 0, 0 1 0]
Fog
Fog {
eventIn
exposedField
exposedField
exposedField
eventOut
L - 38
1 1 1
"LINEAR"
0
Tehnologii Web
FontStyle
FontStyle {
field
field
field
field
field
field
field
field
field
}
MFString
SFBool
MFString
SFString
SFBool
SFFloat
SFFloat
SFString
SFBool
family
horizontal
justify
language
leftToRight
size
spacing
style
topToBottom
"SERIF"
TRUE
"BEGIN"
""
TRUE
1.0
1.0
"PLAIN"
TRUE
MFNode
MFNode
MFNode
SFVec3f
SFVec3f
addChildren
removeChildren
children
bboxCenter
bboxSize
[]
0 0 0
-1 -1 -1
MFString
SFBool
SFBool
url
repeatS
repeatT
[]
TRUE
TRUE
set_colorIndex
set_coordIndex
set_normalIndex
set_texCoordIndex
color
coord
normal
texCoord
ccw
colorIndex
colorPerVertex
convex
coordIndex
creaseAngle
normalIndex
normalPerVertex
solid
texCoordIndex
NULL
NULL
NULL
NULL
TRUE
[]
TRUE
TRUE
[]
0
[]
TRUE
TRUE
[]
Group
Group {
eventIn
eventIn
exposedField
field
field
}
ImageTexture
ImageTexture {
exposedField
field
field
}
IndexedFaceSet
IndexedFaceSet {
eventIn
eventIn
eventIn
eventIn
exposedField
exposedField
exposedField
exposedField
field
field
field
field
field
field
field
field
field
field
}
MFInt32
MFInt32
MFInt32
MFInt32
SFNode
SFNode
SFNode
SFNode
SFBool
MFInt32
SFBool
SFBool
MFInt32
SFFloat
MFInt32
SFBool
SFBool
MFInt32
L - 39
Tehnologii Web
IndexedLineSet
IndexedLineSet {
eventIn
eventIn
exposedField
exposedField
field
field
field
}
MFInt32
MFInt32
SFNode
SFNode
MFInt32
SFBool
MFInt32
set_colorIndex
set_coordIndex
color
coord
colorIndex
colorPerVertex
coordIndex
NULL
NULL
[]
TRUE
[]
MFString
SFVec3f
SFVec3f
url
bboxCenter
bboxSize
[]
0 0 0
-1 -1 -1
MFNode
SFVec3f
MFFloat
level
center
range
[]
0 0 0
[]
SFFloat
SFColor
SFColor
SFFloat
SFColor
SFFloat
ambientIntensity
diffuseColor
emissiveColor
shininess
specularColor
transparency
0.2
0.8 0.8 0.8
0 0 0
0.2
0 0 0
0
SFBool
SFFloat
SFTime
SFTime
MFString
SFBool
SFBool
SFTime
SFBool
loop
speed
startTime
stopTime
url
repeatS
repeatT
duration_changed
isActive
FALSE
1
0
0
[]
TRUE
TRUE
Inline
Inline {
exposedField
field
field
}
LOD
LOD {
exposedField
field
field
}
Material
Material {
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
}
MovieTexture
MovieTexture {
exposedField
exposedField
exposedField
exposedField
exposedField
field
field
eventOut
eventOut
}
L - 40
Tehnologii Web
NavigationInfo
NavigationInfo {
eventIn
exposedField
exposedField
exposedField
exposedField
exposedField
eventOut
}
SFBool
MFFloat
SFBool
SFFloat
MFString
SFFloat
SFBool
set_bind
avatarSize
headlight
speed
type
visibilityLimit
isBound
MFVec3f
vector
[]
set_fraction
key
keyValue
value_changed
[]
[]
set_fraction
key
keyValue
value_changed
[]
[]
SFImage
SFBool
SFBool
image
repeatS
repeatT
0 0 0
TRUE
TRUE
SFBool
SFBool
SFVec2f
SFVec2f
SFVec3f
autoOffset
enabled
maxPosition
minPosition
offset
TRUE
TRUE
-1 -1
0 0
0 0 0
Normal
Normal {
exposedField
}
NormalInterpolator
NormalInterpolator {
eventIn
SFFloat
exposedField
MFFloat
exposedField
MFVec3f
eventOut
MFVec3f
}
OrientationInterpolator
OrientationInterpolator {
eventIn
SFFloat
exposedField
MFFloat
exposedField
MFRotation
eventOut
SFRotation
}
PixelTexture
PixelTexture {
exposedField
field
field
}
PlaneSensor
PlaneSensor {
exposedField
exposedField
exposedField
exposedField
exposedField
L - 41
Tehnologii Web
eventOut
eventOut
eventOut
SFBool
SFVec3f
SFVec3f
isActive
trackPoint_changed
translation_changed
SFFloat
SFVec3f
SFColor
SFFloat
SFVec3f
SFBool
SFFloat
ambientIntensity
attenuation
color
intensity
location
on
radius
0
1 0 0
1 1 1
1
0 0 0
TRUE
100
SFNode
SFNode
color
coord
NULL
NULL
set_fraction
key
keyValue
value_changed
[]
[]
PointLight
PointLight {
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
}
PointSet
PointSet {
exposedField
exposedField
}
PositionInterpolator
PositionInterpolator {
eventIn
SFFloat
exposedField
MFFloat
exposedField
MFVec3f
eventOut
SFVec3f
}
ProximitySensor
ProximitySensor {
exposedField
SFVec3f
exposedField
SFVec3f
exposedField
SFBool
eventOut
SFBool
eventOut
SFVec3f
eventOut
SFRotation
eventOut
SFTime
eventOut
SFTime
}
center
0 0 0
size
0 0 0
enabled
TRUE
isActive
position_changed
orientation_changed
enterTime
exitTime
ScalarInterpolator
ScalarInterpolator {
eventIn
SFFloat
exposedField
MFFloat
exposedField
MFFloat
eventOut
SFFloat
}
set_fraction
key
keyValue
value_changed
L - 42
[]
[]
Tehnologii Web
Script
Script {
exposedField
field
field
MFString
SFBool
SFBool
url
directOutput
mustEvaluate
[]
FALSE
FALSE
default value
Shape
Shape {
exposedField
exposedField
}
SFNode
SFNode
appearance
geometry
NULL
NULL
SFVec3f
SFFloat
SFVec3f
SFFloat
SFFloat
SFFloat
SFFloat
SFFloat
SFNode
SFBool
direction
intensity
location
maxBack
maxFront
minBack
minFront
priority
source
spatialize
0 0 1
1
0 0 0
10
10
1
1
0
NULL
TRUE
SFFloat
radius
SFBool
SFBool
SFRotation
SFBool
SFRotation
SFVec3f
autoOffset
TRUE
enabled
TRUE
offset
0 1 0 0
isActive
rotation_changed
trackPoint_changed
Sound
Sound {
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
field
}
Sphere
Sphere {
field
}
SphereSensor
SphereSensor {
exposedField
exposedField
exposedField
eventOut
eventOut
eventOut
}
L - 43
Tehnologii Web
SpotLight
SpotLight {
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
}
SFFloat
SFVec3f
SFFloat
SFColor
SFFloat
SFVec3f
SFFloat
SFVec3f
SFBool
SFFloat
ambientIntensity
attenuation
beamWidth
color
cutOffAngle
direction
intensity
location
on
radius
0
1 0 0
1.570796
1 1 1
0.785398
0 0 -1
1
0 0 0
TRUE
100
MFNode
SFInt32
choice
whichChoice
[]
-1
MFString
SFNode
MFFloat
SFFloat
string
fontStyle
length
maxExtent
[]
NULL
[]
0.0
point
[]
center
rotation
scale
translation
0 0
0
1 1
0 0
cycleInterval
enabled
loop
1
TRUE
FALSE
Switch
Switch {
exposedField
exposedField
}
Text
Text {
exposedField
exposedField
exposedField
exposedField
}
TextureCoordinate
TextureCoordinate {
exposedField
MFVec2f
}
TextureTransform
TextureTransform {
exposedField
SFVec2f
exposedField
SFFloat
exposedField
SFVec2f
exposedField
SFVec2f
}
TimeSensor
TimeSensor {
exposedField
exposedField
exposedField
SFTime
SFBool
SFBool
L - 44
Tehnologii Web
exposedField
exposedField
eventOut
eventOut
eventOut
eventOut
SFTime
SFTime
SFTime
SFFloat
SFBool
SFTime
startTime
stopTime
cycleTime
fraction_changed
isActive
time
0
0
SFBool
SFVec3f
SFVec3f
SFVec2f
SFBool
SFBool
SFTime
enabled
TRUE
hitNormal_changed
hitPoint_changed
hitTexCoord_changed
isActive
isOver
touchTime
MFNode
MFNode
SFVec3f
MFNode
SFRotation
SFVec3f
SFRotation
SFVec3f
SFVec3f
SFVec3f
addChildren
removeChildren
center
children
rotation
scale
scaleOrientation
translation
bboxCenter
bboxSize
SFBool
SFFloat
SFBool
SFRotation
SFVec3f
SFString
SFTime
SFBool
set_bind
fieldOfView
jump
orientation
position
description
bindTime
isBound
TouchSensor
TouchSensor {
exposedField
eventOut
eventOut
eventOut
eventOut
eventOut
eventOut
}
Transform
Transform {
eventIn
eventIn
exposedField
exposedField
exposedField
exposedField
exposedField
exposedField
field
field
}
0 0 0
[]
0 0 1 0
1 1 1
0 0 1 0
0 0 0
0 0 0
-1 -1 -1
Viewpoint
Viewpoint {
eventIn
exposedField
exposedField
exposedField
exposedField
field
eventOut
eventOut
}
0.785398
TRUE
0 0 1 0
0 0 10
""
VisibilitySensor
VisibilitySensor {
exposedField
SFVec3f
exposedField
SFBool
exposedField
SFVec3f
center
enabled
size
L - 45
0 0 0
TRUE
0 0 0
Tehnologii Web
eventOut
eventOut
eventOut
SFTime
SFTime
SFBool
enterTime
exitTime
isActive
MFString
SFString
info
title
WorldInfo
WorldInfo {
field
field
}
L - 46
[]
""
Tehnologii Web
"Toate erau laolalt#; dup# aceea a venit mintea !i le-a pus n ordine."
(Anaxagoras)
Tehnologii Web
Adnotare
Leg!tura unui nod de comentare la un nod obi"nuit. Autorii documentelor
pot adnota nodurile folosind diverse marcaje (e.g. TEI = Text Encoding Initiative). Sinonim cu
marcare sau tagging. Pentru adnotarea documentelor Web se folose"te limbajul de adnotare
(marcare) HTML (HyperText Markup Language) sau, mai nou, XML (Extensible Markup
Language).
Agent-utilizator
Clientul (navigator, editor, robot de traversare Web) care ini#iaz! o cerere trimis! unui server
WWW. Navigatoarele cele mai cunoscute sunt Netscape Navigator, Internet Explorer, Opera,
Arena, Mosaic (toate opernd n mod grafic), Lynx "i Links (rulnd n mod text), n general
fiind disponibile pentru mai multe platforme (software "i hardware). Vezi "i browser.
Ancor#
Arie n cadrul con#inutului unui nod care este surs! sau destina#ie a unei leg!turi. Ancora
poate reprezenta ntregul con#inut al unui nod. Tipic, f!cnd click pe o ancor! va fi urmat!
leg!tura ce o reprezint!. Ancorele sunt intensificate ntr-un mod anumit sau sunt reprezentate
de un simbol special n cadrul documentului hipertext.
Applet
Program Java care ruleaz! n cadrul unui browser, fiind lansat dintr-o pagin! Web.
Ascuns
Element al unui formular electronic care nu este afi"at de navigator. Elementele ascunse
pot fi utilizate pentru trimiterea de informa#ii suplimentare serverului Web, fiind folosite "i de
cookie-uri.
Un
element
ascuns
se
declar!
prin
construc#ia
HTML
<input type="hidden" name="..." value="...">.
Atribut
O surs! de informa#ie suplimentar! despre un element. Valorile atributului pot fi fixate n
cadrul defini#iei tipului de document (DTD) sau pot fi specificate prin construc#ia
atribut = valoare n tag-ul de nceput al unui element.
Avatar
Reprezentare abstract! a unui utilizator al unei lumi VRML. Dimensiunile fizice ale unui
avatar sunt folosite pentru detectarea coliziunilor "i interac#iunii cu mediul.
Autentificare
Ac#iunea de determinare a faptului dac! un utilizator are permisiunea s! acceseze
o resurs! sau s! execute o opera#ie. Autentificarea de cele mai multe ori se realizeaz! prin
intermediul unei parole.
M-2
Tehnologii Web
Authoring
Termen pentru procesul de marcare, concepere "i publicare a unui document sau prezent!ri
multimedia. Exist! diferite sisteme specializate de editare "i publicare pe Web a prezent!rilor
multimedia (de exemplu: Microsoft FrontPage, Macromedia Dreamweaver, Macromedia Flash, Adobe
GoLive!, GRiNS, Real System G2 etc.), respectnd diverse paradigme.
Baz# de date
Termen desemnnd vag n contextul hipermedia o colec#ie de noduri "i modalit!#i de
organizare a informa#iilor corespunz!toare lor.
Browser
Program care permite unei persoane s! citeasc! "i s! parcurg! hipertextul, vizualiznd
con#inutul nodurilor "i navignd din nod n nod (termenul de browser se reg!se"te "i ca
navigator, agent-utilizator, client Web).
Buton
Este o ancor! care reprezint! sursa unei leg!turi. De cele mai multe ori, se figureaz! pe cran
ca un buton.
Card
Fi"!, termen alternativ pentru un nod n cadrul unui sistem (e.g. HyperCards, Notecards)
n care m!rimea nodului este limitat! la o singur! pagin! de capacitate fix!.
Cache
Un depozit local de memorare a mesajelor (datelor) de r!spuns "i un subsistem de control
al acestuia. Memoria cache reduce timpul de r!spuns "i congestia re#elei. Orice client "i orice
server Web pot include un cache.
Cmp
O proprietate sau un atribut al unui nod (VRML). Fiecare tip de nod posed!
o mul#ime fix! de cmpuri. Un cmp poate con#ine tipuri diverse de date, compuse din una
ori mai multe valori. Oricare cmp este nzestrat cu o valoare implicit!.
Cerere
Un mesaj de cerere emis de un client, prin intermediul protocolului HTTP, a unor date de
pe un server Web.
Ciberspa"iu
Lume "electric!" perceput! pe ecranul computerului, n opozi#ie cu spa#iul "real". Spa#iul
cibernetic poate fi perceput global cu ajutorul unor dispozitive speciale (m!nu"! senzorial! "i
casc! de vizualizare, de exemplu), fiind modelat prin intermediul unui limbaj denumit
M-3
Tehnologii Web
VRML (Virtual Reality Modeling Language). Cunoscut "i sub numele de realitate virtual!, extensie
3D a hipermediei.
Clas#
n contextul program!rii obiectuale, reprezint! o colec#ie de date, ncapsulnd de asemeni o
serie de proceduri (metode) pentru manipularea acelor date. O instan#! a unei clase poart!
denumirea de obiect.
Client
Program care cere servicii de la alt program. De exemplu, navigatorul este client al unui
server Web (care poate furniza "i alte servicii).
Coduri de stare HTTP
Pentru fiecare cerere a unui client Web, serverul HTTP r!spunde cu o serie de coduri de
stare a opera#iei solicitate.
Comentariu
O not! cu con#inut arbitrar inclus! ntr-un fi"ier. n SGML, XML "i HTML comentariile
pot fi scrise prin construc#ia <!-- comentariu -->. n PHP, JavaScript "i Java,
comentariile sunt similare celor din C++, putnd fi scrise pe o singur! linie:
//
comentariu
/*
comentariu
*/.
sau
pe
linii
multiple:
n VRML, un comentariu ncepe cu caracterul #, ca n scripturile shell din Unix:
# comentariu.
Conexiune
Un circuit virtual (la nivelul transportului de date) stabilit ntre dou! programe care doresc
s! comunice. Vezi "i protocol.
Cookie
Obiect special con#innd anumite informa#ii de stare despre un client Web.
Aceste informa#ii vor fi trimise serverului care a creat cookie-ul. Un cookie va fi stocat pe
calculatorul clientului, putnd fi persistent sau nepersistent.
Corect formatat
Un document corect formatat trebuie s! aib! o declara#ie XML "i s! con#in! elemente de
marcare imbricate "i scrise corect. Un document corect formatat poate s! aib! sau nu un
DTD ata"at.
Copil
n contextul marc!rii, se refer! la un element inclus n interiorul altui element.
n construc#ia <carte><capitol /><carte> elementul capitol este copil al
elementului carte.
M-4
Tehnologii Web
Tehnologii Web
Entitate
n contextul HTTP: informa#ia transferat! ntr-o opera#ie de cerere sau de r!spuns.
O entitate poate cuprinde att meta-informa#ii, ct "i con#inutul propriu-zis.
Vezi "i cerere.
n contextul SGML/XML: referin#! la o alt! informa#ie, func#ionnd ca abreviere sau
scurt!tur!. Creatorii DTD-urilor se folosesc de entit!#i pentru a evita repeti#iile de declara#ii de
reguli.
E-text
Carte electronic! formatat! n SGML.
Eveniment
Ac#iuni care pot surveni n cadrul paginilor Web, n mod uzual n urma unor opera#iuni
executate de utilizator sau de navigator.
n VRML, un mesaj trimis de un nod unui alt nod n func#ie de o rut!.
Extern
Atribut al unei leg!turi c!tre un nod dintr-o alt! baz! de date.
Graf de scen#
Un arbore de noduri VRML cuprinznd sisteme de coordonate "i forme pentru
a descrie o lume 3D.
Generator
Program folosit la generarea de pagini Web sau de lumi VRML. Un generator poate opera
n mod automat sau poate fi utilizat de un programator. Sinonim cu authoring tool.
Hipermedia
Hipertext multimedia. Termenii "hipermedia" "i "hipertext" tind s! fie considera#i similari.
Media include text, grafic!, sunet, video etc.
Hipertext
Text ntr-o form! non-linear!.
Host
Gazd!, un calculator al unei re#ele, identificat printr-o adres!.
M-6
Tehnologii Web
M-7
Tehnologii Web
Invalid
Atribut referitor la un document SGML/XML care nu respect! regulile de marcare "i
DTD-ul asociat (dac! exist!).
ncapsulare
Tehnic! a program!rii orientate-obiect pentru a face ca datele unui obiect s! fie private sau
protejate de manipularea direct!. Datele vor fi accesate/modificate doar prin intermediul unor
metode.
Java
Limbaj de programare orientat-obiect, inspirat din C "i C++ "i creat de James Gostling de
la Sun Microsystems, proiectat ini#ial cu scopul de a fi portabil "i de a fi utilizat n dispozitive
de larg consum, miniaturizate. Aplica#iile Java de mici dimensiuni, numite applet-uri, pot fi
rulate de navigatoarele Web, pe calculatorul client al utilizatorului. O aplica#ie Java rulnd n
cadrul unui server va fi numit! servlet.
JavaScript
Limbaj script dezvoltat ini#ial de compania Netscape pentru prelucrarea documentelor
HTML, oferind dinamism paginilor Web "i permi#nd execu#ia de cod la apari#ia unor
evenimente. O variant! diferit! de JavaScript este cea oferit! pentru Internet Explorer, numit!
JScript. O standardizare a limbajului JavaScript este dat! de ECMAScript.
Leg#tur#
Rela#ia dintre dou! ancore, stocate n aceea"i sau n baze de date diferite.
Lume virtual#
Colec#ie de unul sau mai multe fi"iere VRML, plus alte fi"iere multimedia prezentnd o
experien#! interactiv! pentru un utilizator. O lume virtual! este de cele mai multe ori
interpretat! de un navigator VRML.
Marcaj
Informa#ie structural! stocat! ntr-un document. n mod tradi#ional, informa#ia structural!
este separat! de con#inutul propriu-zis al documentelor "i izolat! n cadrul elementelor
(definit! n tag-uri) "i entit!#ilor.
Metadat#
Dat! referitoare la o anumit! dat! (resurs!) disponibil! pe Web, incluznd - f!r! a fi limitat!
doar la acestea - informa#ii despre autorul, drepturile de autor, proprietarul, termenii de
distribu#ie ale datei respective.
M-8
Tehnologii Web
Metod#
Termen care n jargonul program!rii obiectuale desemneaz! o procedur! sau
o func#ie intrnd n componen#a unei clase.
MIME (Multipurpose Internet Mail Extension)
Standard utilizat pentru specificarea de tipuri de fi"ere utilizate de aplica#iile Internet.
Fiecare fi"ier vehiculat n Internet apar#ine unui tip "i subtip MIME (e.g. text/plain,
image/gif, application/postscript).
Model de execu"ie
Set de reguli care guverneaz! modul n care evenimentele sunt procesate de navigatoare sau
de scripturi.
Motor de c#utare
Aplica#ie software care caut! ntr-un index dup! o cerere de interogare dat! de utilizator "i
returneaz! loca#iile documentelor g!site. Se reg!se"te "i sub denumirile de search engine sau
index. Nu trebuie confundat cu robo#ii Web.
Navigare
Procesul de mutare dintr-un nod n alt nod prin hipertext, n mod normal prin intermediul
leg!turilor. Navigatorul poate facilita acest lucru men#innd o list! cu cele mai recente leg!turi
urmate (history) etc. Vezi "i browser.
Negociere
Mecanism de selectare a reprezent!rii potrivite a unei date solicitate.
Nod
n teoria hipertextului, reprezint! unitatea de informa#ie, numit "i frame (cadru) n KMS sau
card (fi"!) n Hypercard. A nu se confunda cu gazd! (nod) de re#ea. Nodul poate fi asimilat "i
cu termenul de document, fiind adresat n Internet prin intermediul unui identificator uniform de
resurs! - URI (Uniform Resource Identifier).
n VRML, un nod este blocul de baz! pentru construc#ia lumilor virtuale. Un fi"ier VRML
con#ine m!car un nod. Fiecare nod posed! un anumit tip "i are asociate diferite cmpuri de
date.
Nota"ie
O structur! XML care identific! tipul con#inutului unui anumit element "i asociaz! un
program de vizualizare a acelui con#inut.
M-9
Tehnologii Web
Obiect
Colec#ie de date "i proceduri (metode), instan#! a unei clase. n VRML, un obiect este
sinonim cu nod.
Pachet
n Java, grupeaz! un set de clase. Mediile de dezvoltare Java pun la dispozi#ia
programatorului o serie de pachete standard, ierarhizate.
Path
Cale, mul#ime ordonat! de noduri/ancore reprezentnd o secven#! de citire a informa#iilor
utilizat! de cititor sau recomandat! de autor.
Poart#
Un server care lucreaz! ca intermediar pentru alte servere, n mod transparent, fiind "i un
translator de protocoale.
Profil
Colec#ie de criterii de func#ionalit!#i care definesc un subset implementabil al unui
standard.
Protec"ie
Prevenirea citirii, scrierii, manipul!rii unor date de c!tre utilizatorii neautoriza#i. Numit!
"i "autentificare" ori "controlul accesului". Protec#ia se realizeaz!, printre altele, prin adoptarea
unor protocoale de autentificare precum S-HTTP (Secure HTTP) sau SSL (Secure Socket Layer)
ori prin securizarea serverelor.
Protocol
Mul#ime de reguli pentru transmiterea datelor n cadrul re#elelor de calculatoare.
Protocoalele se structureaz! pe nivele, aplica#iile folosindu-se de protocoale de pe nivelul
superior. n Internet, se utilizeaz! suita de protocoale TCP/IP (Transmission Control
Protocol/Internet Protocol). Protocoalele bazate pe TCP/IP la nivelul aplica#ie sunt:
HTTP (HyperText Transfer Protocol) - utilizat pentru transferul de informa#ii hipertext, FTP (File
Transfer Protocol) - folosit pentru transferul de fi"iere prin Internet, TELNET - utilizat la
conectarea la distan#! prin intermediul unui terminal virtual etc.
Proxy (intermediar)
Un program intermediar care ruleaz! ca server, ct "i drept client pentru a transmite cereri
altor servere. Cererile trimise unui proxy pot fi rezolvate intern sau transmise mai departe, c!tre
alte servere (posibil translatate). Un proxy trebuie s! implementeze cerin#ele de server "i de
client ale specifica#iei HTTP.
M - 10
Tehnologii Web
R#d#cin#
n SGML/XML reprezint! primul element al unui document. Un element r!d!cin! nu
poate fi con#inut de nici un alt element "i formeaz! baza arborelui creat prin procesarea
elementelor pe care le con#ine.
R#spuns
Un mesaj de r!spuns HTTP din partea unui server furnizat clientului care a formulat o
cerere.
RDF (Resource Description Framework)
Un cadru de descriere "i de construc#ie a unor limbaje logice care definesc semantica
resurselor disponibile pe Web, cu scopul de a constitui Web-ul semantic. Sintaxa utilizat! se
bazeaz! pe XML.
Realitate virtual#
Simulare generat! de calculator a unui mediu tridimensional n care utilizatorul este capabil
s! vizualizeze "i s! manipuleze, n mod interactiv, con#inutul acestui mediu. Vezi "i ciberspa"iu.
Reprezentare
O entitate inclus! ntr-un r!spuns care reprezint! o negociere ntre client "i server.
Vezi "i termenii client, server, r!spuns.
Resurs#
Un obiect de date sau serviciu care poate fi identificat de un URI. Resursele pot avea
reprezent!ri multiple (formate, m!rimi, rezolu#ii etc.). n cazul Web-ului, o pagin! (document)
Web reprezint! o resurs!. Vezi "i nod.
Robo"i Web
Reprezint! programe care traverseaz! n mod automat structura hipertext a spa#iului
WWW, n scopuri de extragere a informa#iilor, folosind protocoalele Web standard (HTTP).
Se reg!sesc "i sub numele de p!ianjeni (spiders).
SAX (Simple API for XML)
Interfa#! de programare permi#nd dezvolt!torilor de aplica#ii s! analizeze documentele
XML. Spre deosebire de DOM, SAX nu necesit! nc!rcarea ntregului fi"ier n memorie.
Analiza XML este condus! de evenimente.
Schem#
Specifica#ie formal! a numelor, modului de apari#ie "i tipului de elemente "i atribute care
pot compune un document XML, folosind sintaxa limbajului XML. Func#ionalitatea
M - 11
Tehnologii Web
schemelor este echivalent! cu cea a DTD-urilor, dar XML Schema ofer! facilit!#i n plus.
Pentru RDF, o schem! descrie un vocabular RDF.
Script
Un limbaj de tip script este destinat s! prelucreze, s! automatizeze "i s! integreze facilit!#ile
oferite de un anumit sistem, n cazul WWW cele oferite de un navigator Web. n cadrul
documentelor HTML pot fi inserate scurte programe scrise n limbaje script (ca JavaScript sau
VBScript) cu scopul de a realiza un con#inut dinamic al paginilor WWW. Un document HTML
care include "i programe script se mai nume"te "i document HTML dinamic (DHTML).
Server
O aplica#ie care accept! conexiuni, r!spunznd la anumite cereri transmise de clien#i.
Un program poate juca rol att de server, ct "i de client. ntr-un sistem hipertext, un server
va oferi informa#ii hipertext unui client. Un server se poate comporta ca server ini#ial, poart!,
tunel sau proxy Web, n func#ie de natura cererii. Cele mai cunoscute servere Web sunt:
Apache, Netscape Enterprise Server, Sun Web Server, Microsoft Internet Information Server, Stronghold,
Jigsaw. Calculatorul pe care ruleaz! un server Web "i care g!zduie"te o serie de pagini WWW
se mai nume"te "i site.
SGML (Standard Generalized Markup Language)
Standard "i meta-limbaj pentru adnotarea documentelor electronice, p!rintele unor limbaje
precum HTML "i XML. SGML ofer! un set complex de reguli pentru definirea structurii
documentelor, avnd o serie de aplica#ii de succes ca HTML, OpenTAG, TEI, HyTime etc.
Spa"iu de nume
Mecanism permi#nd dezvolt!torilor XML s! califice n mod unic numele de elemente "i
rela#iile dintre ele, evitndu-se conflictele de elemente definite n vocabulare diferite. Un spa#iu
de nume identific! un vocabular XML prin intermediul unui URN.
SMIL (Synchronized Multimedia Integration Language)
Limbaj de realizare a prezent!rilor sincronizate multimedia pe Web, bazat pe XML.
A inspirat extensiile de sincronizare HTML+TIME pentru suport multimedia sincronizat n
cadrul documentelor Web.
Structur# semantic#
Rela#ia dintre con#inutul unui document "i structura lui.
Topologie
Toate conexiunile disponibile ntre noduri, ancore "i leg!turi, de exemplu 1 la 1 sau 1 la mai
multe etc.
M - 12
Tehnologii Web
Trasare
G!sirea automat! a nodurilor pentru navigare: g!sirea tuturor nodurilor depinznd de un
anumit nod, toate persoanele interesate de un nod dat, drumul minim de la un nod la alt nod
etc.
Tunel
Un program intermediar func#ionnd ca mijlocitor ntre dou! conexiuni.
Unicode
Standard pentru codificarea interna#ional! a caracterelor, extensie a codului ASCII, fiecare
caracter fiind codificat pe 16 bi#i.
URI (Uniform Resource Identifier)
Identificator uniform de resurse, folosit n general pentru adresarea resurselor Internet.
Mul#imea URI este compus! din subseturile de identificatori URN "i URL. Un URI generic
are forma schema://authority path?query.
URL (Uniform Resource Locator)
Subset URI identificnd resursele printr-o reprezentare a mecanismului de accesare a lor
(e.g. localizarea re#elei).
URN (Uniform Resource Name)
Subset URI care r!mne permanent "i unic, chiar dac! resursa a disp!rut ori a devenit
inaccesibil!. Un URN este independent de localizarea resursei.
Valid
Un document este considerat valid dac! se conformeaz! unei defini#ii a tipului
de document (DTD) "i respect! toate regulile sintactice (este corect formatat). Toate
elementele, atributele, entit!#ile trebuie s! fie declarate n DTD "i toate tipurile de date trebuie
s! fie corecte.
Versioning
Controlul versiunilor, stocarea "i organizarea versiunilor precedente ale unui fragment de
informa#ie pentru securitate, statistici sau alte scopuri. Acest lucru devine important atunci
cnd mai mul#i utilizatori pot edita n mod concurent acela"i material.
Web
Pnz! de p!ianjen, mul#ime de noduri interconectate prin leg!turi. De obicei desemneaz!
mul#imea tuturor nodurilor interconectate din lume. Denumit! "i WWW (World Wide Web), n
continu!
dezvoltare
"i
nglobnd
noi
tehnologii.
M - 13
Tehnologii Web
M - 14
Tehnologii Web
Tehnologii Web
1. Fundamente
1.
2. Internet i Web
1.
2.
5. T.Berners-Lee - "What the Semantic Web can represent", W3C Note, sep.1998:
http://www.w3.org/DesignIssues/RDFnot.html
6. T.Berners-Lee, D.Connolly - "Web Architecture: Extensible Languages",
W3C Note, feb.1998
7. D.Connolly - "Seeds of the Semantic Web", ALA Midwinter Meeting,
San Antonio, 2000: http://www.w3.org/2000/0$/ala2349/all
8.
A.DasGupta - "Television and the Web", W3 Workshop "TV and the Web", 1998
N-2
Tehnologii Web
N-3
Tehnologii Web
B.Behlendorf et al. - "Running a Perfect Web Site with Apache", QUE, 1996
8.
Tehnologii Web
11. C.Tutu - "Servere Web pentru Windows", PC Report, vol.7, 10 (73), oct.1998
12. S.Vinoski - "CORBA: Integrating Diverse Applications Within Distributed
Heterogeneous Environments", IEEE Communications Magazine, feb.1997
13. * * * - Apache: http://www.apache.org
14. * * * - Apache Week: http://www.apacheweek.com
6. Navigatoare
1. T.Berners-Lee - "Axioms of Web architecture - User Agent watch points",
W3C Note, 1998: http://www.w3.org/DesignIssues/UserAgent/
2. S.C.Buraga - "Netscape 6: rentoarcerea", PC Report, vol.9, nr.12 (99), dec.2000:
http://www.infoiasi.ro/~busaco/publications/articles/ns6.pdf
3. S.C.Buraga - "Web-ul devine mai vizual", PC Report, vol.9, nr.12 (99), dec.2000:
http://www.infoiasi.ro/~busaco/publications/articles/multimedia-ie55.pdf
4. K.Dubost, H.Haas, I.Jacobs - "Common User Agent Problems", W3C Note,
feb.2001: http://www.w3.org/TR/cuap
5. W.Harris, R.Potts - "Necko: The New Netlib Project", Mozilla.Org, apr.1999:
http://www.mozilla.org/projects/netlib/
6. E.Krock - "Gecko and Web Design with W3C Standards",
Netscape CodeStock Workshop, Mountain View, sep.1999
7. R.Norlander - "Internet Explorer 5: All Power to the Document Object Model",
Site Builder Magazine, mart.1999
8. C.Owen Yoshikawa - "Microbrowser: An Extensible Web Browser Architecture",
University of California, Berkeley, 1997
9. H.Toivonen, J.Stenbck - "Extending Mozilla or How To Do The Impossible",
CITEC Proceedings, 1999
10. * * * - Amaya: http://www.w3.org/Amaya/
11. * * * - Annotea: http://www.w3.org/200$/Annotea/
12. * * * - DocZilla: http://www.doczilla.com
13. * * * - Internet Explorer: http://www.microsoft.com/ie/
14. * * * - Links: http://links.sourceforge.net/
15. * * * - Lynx: http://www.cc.ukans.edu/about_lynx
16. * * * - MozillaZine - Chrome Zone: http://www.mozillazine.org/chrome/
17. * * * - Netscape Communicator: http://home.netscape.com
N-5
Tehnologii Web
4.
5.
* * * - DSSSL: http://www.jclark.com/dsssl/
6.
* * * - Oasis: http://www.oasis-open.org/
7.
* * * - SGML: http://www.sil.org/sgml/
XML
1. J.Boyer - "Canonical XML Version 1.0", W3C Working Draft, Boston, oct.2000:
http://www.w3.org/TR/xml-c$4n
2. D.Box - "Understanding XML", Tech-Ed 2000 Europe Presentation,
Amsterdam, iul.2000
3. T.Bray et al. (eds.) - "Extensible Markup Language (XML) 1.0 (Second Edition)",
W3C Recommendation, oct.2000: http://www.w3.org/TR/REC-xml
4. T.Bray, D.Hollander, A.Layman (eds.) - "Namespaces in XML",
W3C Recommendation, ian.1999: http://www.w3.org/TR/REC-xml-names/
5. J.Clark - "Comparison of SGML and XML", W3C Note, dec.1997:
http://www.w3.org/TR/NOTE-sgml-xml
6. D.Fallside (ed.) - "XML Schema: Primer", W3C Candidate Recommendation,
oct.2000: http://www.w3.org/TR/xmlschema-0/
7.
8.
9.
N-6
Tehnologii Web
8. B.DuCharme - "XML, XLL and XSL: Current Status, Next", <TAG>, vol.11,
no.1, ian.1998
9. M.Sergeant - "XPathScript: An Alternative To XSLT", XML.com, 2000:
http://www.xml.com/pub/a/2000/07/05/xpathscript/index.html
10. B.Travis - "Using XSLT to Transform XML", Tech-Ed 2000 Europe Presentation,
Amsterdam, iul.2000
5.
6.
N-7
Tehnologii Web
N-8
Tehnologii Web
Alte aplica"ii
1. S.C.Buraga - "Reprezentarea sistemelor Lindenmayer ca documente XML",
Conferin#a de Informatic! Teoretic! "i Tehnologii Informatice - CITTI 2000, Constan#a,
mai 2000: http://www.infoiasi.ro/~busaco/publications/articles/lsml-pub.pdf
2. S.C.Buraga, T.Rusu - "An XML-based Query Language Used in Structural Search
Activity on Web", CONTI 2000 Proceedings, Timisoara, oct. 2000
3. O.Gogan, S.C.Buraga - "The Use of Neural Networks for Structural Search on
Web", "Internation Symposium on System Theory - SINTES 10 Proceedings", Craiova,
mai 2000: http://www.infoiasi.ro/~busaco/publications/articles/neuralweb.pdf
4. K.Spencer - "Using XML in Business Applications", Tech-Ed 2000 Europe
Presentation, Amsterdam, iul.2000
5. R.Stevahn (ed.) - "Adding Style and Behavior to XML with a dash of Spice",
W3C Note, feb.1998: http://www.w3.org/pub/WWW/TR/NOTE-spice.html
6.
N-9
Tehnologii Web
Multimedia !i hipermedia
1. S.C.Buraga - "Hipermedia", PC Report & BYTE, vol.8, nr.5 (80), mai 1999:
http://www.infoiasi.ro/~busaco/publications/articles/hipermedia.pdf
2. J.Crowcroft, M.Handley, I.Wakeman - "Internetworking Multimedia",
UCP Press, 1998
3. N.Georganas - "Multimedia Applications Development: Experiences", MCRLab,
Univ. of Ottawa, 1998
4. S.Gibbs, G.Szentivanyi - "Index to Multimedia Information Sources":
http://viswiz.gmd.de/MultimediaInfo
5. P.Hoschka - "Toward Synchronized Multimedia on the Web",
World Wide Web Journal, Spring 1997
6. J.Yu - "A Simple Intuitive Hypermedia Synchronization Model and its Realization
in the Browser/Java Environment", DEC Systems Reasearch Center, 1997
7. J.Yu, J.Xiang - "Hypermedia Presentation and Authoring System",
Systems Reasearch Center, Technical Note, DEC, Paco Alto, mai 1997
8.
* * * - GRiNS: http://www.oratrix.com/GRiNS/index.html
3.
* * * - Helio: http://www.helio.org
4.
* * * - HPAS: http://www.research.digital.com/SRC/HPAS/
N - 10
Tehnologii Web
5.
* * * - JustSMIL: http://www.justsmil.com
6.
* * * - RealNetworks: http://www.real.com
7.
8.
* * * - SMIL: http://www.w3.org/AudioVideo
9.
5.
2.
5.
6.
7.
N - 11
Tehnologii Web
2.
3.
4.
P.Doyle et al. - "Special Edition, Using Perl for Web Programming", QUE, 1996
5.
6.
N - 12
Tehnologii Web
S.C.Buraga - "PHP, OOP "i XML", NET Report, vol.10, 03 (102), mart.2001
2.
3.
9.
Tehnologii Web
Cookie-uri
1. S.C.Buraga - "Cookie-uri", PC Report, vol.9, nr.10 (97), oct.2000:
http://www.infoiasi.ro/~busaco/publications/articles/cookies.pdf
2. * * * - DevEdge:
http://developer.netscape.com/library/documentation/index.html
3.
* * * - DLib.org: http://www.dlib.org
4.
5.
6.
7.
* * * - InsideDHTML: http://www.insideDHTML.com
8.
9.
13. Limbajul
Lim bajul Java
1. S.Andrei - "Programarea n Java" (curs electronic), Facultatea de Informatic!,
Ia"i, 2000-2001: http://www.infoiasi.ro/~stefan/java/index.html
2. I.Athanasiu et al. - "Limbajul Java - o perspectiv! pragmatic! (edi#ia a doua)",
Computer Press Agora, Tg.Mure", 2000
3.
4.
5.
R.Martin - "Java and C++, A Critical Comparation", Java Journal, March 1997
6.
7.
8.
9.
10. W.Stanek - "Peter Norton's Guide to Java Programming", Cisco Press, 1996
11. A.Subrahmanyan - "Java Servlets: Design Issues", 1999:
http://www.subrahmanyan.com/articles/servlets/servletIssues.html
N - 14
Tehnologii Web
8.
9.
* * * - Eliza: http://www-ai.ijs.si/eliza/eliza.html
N - 15
Tehnologii Web
3.
C.E.Loeffer, T.Anderson (eds.) - "The Virtual Reality Casebook", New York, 1994
4.
Tehnologii Web
* * * - ACM: http://www.acm.org
2.
* * * - Adobe: http://www.adobe.com
3.
* * * - Alliare: http://www.alliare.com
4.
* * * - CWI: http://www.cwi.nl
* * * - GCA: http://www.gca.org/
7.
* * * - IEEE: http://www.computer.org
8.
* * * - IBM: http://www.ibm.com
9.
N - 17
Tehnologii Web
Tehnologii Web
O.
Preambul
A.
i
1.
2.
Metodologii
3.
4.
5.
A- 1
A- 2
A- 7
A - 24
A - 27
A - 36
B.
2.
B- 1
B- 2
C.
B - 18
C- 1
1.
2.
3.
C- 2
C - 10
D.
C - 27
D- 1
1.
2.
HTML Compact
3.
4.
Foi de stiluri
D- 2
D - 20
D - 24
D - 31
E.
1.
Introducere !i caracterizare
2.
Interfe"e !i implement#ri
3.
4.
5.
DOM nivelul 2
6.
7.
Concluzii
E- 2
E- 4
E- 5
E - 12
E - 14
E - 20
E - 48
F.
1.
Modele !i metodologii
2.
3.
F- 2
F - 12
F - 27
II
Tehnologii Web
4.
G.
2.
3.
4.
Cookie-uri
5.
Concluzii
G- 1
G- 3
G - 21
G - 54
G - 73
G - 83
H.
1.
Istoric !i fundamente
2.
Caracterizare
3.
4.
Concluzii
H- 2
H- 5
H - 15
I.
H - 53
I- 1
1.
Istoric !i caracterizare
2.
Applet-uri
3.
4.
5.
Prezent !i viitor
I- 2
I- 8
I - 36
I - 41
J.
I - 42
Ingineria Web
J- 1
1.
2.
Robo"ii Web
3.
Motoarele de c#utare
4.
J- 2
J - 11
J - 21
J - 37
K.
Realitatea virtual#
K- 1
1.
Introducere n VRML
2.
3.
4.
K- 3
K - 48
K - 52
Studiu de caz: o aplica"ie VRML pentru vizualizarea
5.
tridimensional# a interiorului unei cl#diri
K - 60
K - 63
6.
Viitor
K - 67
III
Tehnologii Web
L.
Anexe
L- 1
1.
2.
Elementele HTML 4
3.
Atributele HTML 4
4.
Entit#"ile HTML
5.
Propriet#"ile CSS2
6.
7.
Nodurile VRML97
L- 2
L- 5
L- 8
L - 18
L - 21
L - 28
M.
Glosar de termeni
N.
Resurse bibliografice
O.
Cuprins
L - 35
M- 1
N- 1
I
IV