siteuri.ro logo

www.siteuri.ro

Aceasta este traducerea in romana a documentului original in engleza realizat de membrii W3C DOM Working Group. Aceasta traducere poate contine erori. In caz de neclaritati, versiunea in engleza este cea autoritativa.

Traducere de Andrei Stanescu, August 2005.

Intrebari frecvente despre Document Object Model

Versiunea in engleza din: 22 Octombrie 2003.

Acest document contine intrebarile cele mai des puse despre the Document Object Model. Scopul acestui document nu este sa inlocuiasca specificatia sau alte documente.


General

De la ce vine DOM?

Document Object Model. Aceasta inseamna un model in care documentul sau pagina web contine obiecte (elemente, linkuri, etc) care pot fi manipulate. Deci poti sterge, adauga sau schimba elemente (atata timp cat documentul ramane valid, desigur!), schimba continutul unui element, sau adauga, sterge, sau schimba un atribut. Poti crea o lista cu toate elementele <h1> din document sau toate elementele cu atributul class="foo".

Inapoi Sus

De ce ar trebui sa folosesc DOM?

API-ul DOM iti ofera access standardizat si versatil la continutul unui document. Implementand API-ul DOM, un program nu doar ca permite manipularea datelor sale de un alt software, dar aceasta manipulare poate fi refolosita pentru alte DOM-uri, sau poate folosi solutii scrise deja pentru acele DOM-uri. Aceasta interoperabilitate inseamna ca programatorii care invata DOM isi pot folosi cunostintele si in alte DOM-uri.

Scopul este ca, daca folosesti API-ul standard, orice implementare DOM poate fi folosita cu orice aplictatie DOM. Exemplul original erau scripturile DHTML; daca aceste scripturi folosesc DOM-ul standard, ele ar trebui sa functioneze corect in toate browserele. Dar aceasta se aplica si la programe mai serioase. Spre exemplu, o solutie server-side poate fi construita din componentele urmatoare (refolosibile), care ar putea avea o singura implementare DOM:

  • O baza de date care pastreaza continutul ca un copac DOM. (datele prezentate cu DOM nu trebuie sa fie DOM. DOM este o unealta pentru manipularea datelor, nu o structura a lor.)
  • Un parser XML care genereaza un copac DOM, folosit pentru a citi un stylesheet.
  • Un procesor XSLT care le combina, producand un nou copac DOM.
  • O rutina care scrie continutul DOM-ului pentru retea, cu sintaxa dorita (XML, HTML, sau alta).

Daca o implementare mai buna a unuia din aceste module devine disponibila, spre exemplu un parser XML mai rapid, sau daca este nevoie de o etapa aditionala de procesare, ar trebui sa poti face aceste schimbari fara a schimba mult cod.

(Tinta ar fi nici o schimbare in cod, si acesta este cazul pentru multe aplicatii, dar in momentul de fata API-urile DOM Level 2 nu sunt destul de complete pentru a asigura aceasta pentru toate aplicatiile. In particular, unele unelte necesare pentru a construi un DOM 'de la zero' nu sunt disponibile in API, si DOM nu are inca o reprezentare a informatiilor DTD/Schema.

In mod similar, in timp ce toate implementatiile DOM ar trebui sa fie interoperabile, acestea pot varia din punt de vedere al marimii codului, consumul de memorie si performanta operatiilor individuale. Deci posibilitatea de a inlocui DOM-ul in sine ar putea fi folositoare. Spre exemplu, din moment ce unele parsere pot scrie intr-ul DOM definit de utilizator, ai putea sa creezi documentul direct in baza de date mentionata mai sus.

Exista un dezavantaj care poate aparea in folosirea DOM: ca pentru orice set de interfete generalizat, API-ul DOM poate rezolva o gama foarte larga de probleme, dar este posibil sa nu ofere solutia optima pentru o problema specifica.

Inapoi Sus

Care este situatia actuala a specificatiei DOM?

Specificatiile DOM Level 1 si Level 2 sunt recomandari W3C. Aceasta inseamna ca specificatia este finala si poate fi implemetata. Level 1 permite navigarea intr-un document HTML sau XML document, si manipularea continutului acelui document. Level 2 extinde functionalitatea din Level 1, avand in plus: XML Namespace support, filtered views, ranges, events, etc. Level 3 este inca Working Draft, ceea ce inseamna ca este inca in dezvoltare si va fi schimbat in viitor.

Inapoi Sus

Ce este o implementare DOM?

O implementare DOM (numita si implementare host) este un software care ia un document XML sau HTML si il pune la dispozitie pentru procesare cu interfetele DOM. Spre exemplu, un browser contine o astfel de implementare.

Inapoi Sus

Ce este o aplicatie DOM?

O aplicatie DOM (numita si aplicatie client) este un software care ia documentul creat de implementare, si il foloseste la ceva. Un script care functioneaza intr-un browser este un exemplu de aplicatie DOM.

Inapoi Sus

Ce limbaje de programare pot folosi cu DOM?

Aceasta depinde de implementarea host cu care vrei sa le folosesti. Browserul tau favorit poate implemeta o interfata JavaScript sau VBScript, si in acest caz poti folosi aceste limbaje intr-o pagina web pentru a manipula pagina sau a schimba stilul CSS. Editorul tau favorit poate implementa o interfata Scheme sau Java, si in acest caz poti scrie un executabil in aceste limbaje care vorbeste cu editorul pentru a manipula pagina. Ai putea sa scrii o aplicatie in C++ care foloseste o interfata DOM pentru a transfera informatii din pagina (browser) intr-o intr-o baza de date cu ajutorul unui driver ODBC. W3C scrie un set de interfete; companii diferite vor putea implemeta aceste interfete in feluri diferite. Este putin probabil ca o singura companie iti va oferi posibilitatea de a alege intre C++ si Java si Scheme si Perl si Python si ..., dar interfete in toate aceste limbaje sunt posibile, din moment ce DOM-ul in sine este neutru din punct de vedere al limbajului.

Inapoi Sus

Daca DOM nu depinde de un limbaj, in ce limbaj specifici interfata?

Object Management Group Interface Definition Language (OMGIDL) a fost ales pentru ca este facut pentru a creat interfete neutre din punct de vedere al limbajului si implementarii. Alte IDL-uri ar putea fi folosite.

Ne asteptam ca DOM sa fie implementat folosind CORBA, COM, sau Java Virtual Machine runtime bindings. DOM-ul specifica bindings pentru Java si ECMAScript (versiunea standard a JavaScript/JScript creata de European Computer Manufacturer's Association (ECMA) si definita de ECMA-262), ca anexe la specificatie; alte language bindings (spre exemplu ANSI C++, Perl, sau VBScript) pot fi create de alte parti interesate. In mod evident, este de preferat ca implementarile in diferitele limbaje sa fie consistente unule cu celelalte.

Inapoi Sus

Unde pot sa intreb ceva despre DOM?

Desi intrebari despre DOM pot fi puse in alte forumuri, cel mai bine ar fi sa intrebi in mailing list-ul public la www-dom@w3.org. Pentru a subscrie, trimite un mail la www-dom-request@w3.org cu subiectul "subscribe". Citeste cu atentie acest document inainte de a intreba ceva si tine cont ca mailing list-ul e in limba engleza.

Inapoi Sus

Cum pot influenta specificatia?

Citeste specificatia de pe site, si trimite un mail la www-dom@w3.org. Vom imbunatati specificatiile cat de des putem.

Inapoi Sus

Ce functionalitate va fi disponibila in viitorul apropiat?

Vezi Activity statement pentru a vedea la ce lucreaza DOM WG in momentul de fata.

Inapoi Sus

Se va tine cont de accesibilitate in dezvoltarea DOM?

Da. W3C si organizatiile membre sunt interesate de accesibilitate. Folosirea DOM-ul va insemna ca uneltele si aplicatiile de accesibilitate vor accesa documentele mai usor.

Inapoi Sus

Ce implicatii are DOM pentru alte standarde?

DOM nu schimba sau modifica alte standarde. DOM va avea interfete 'curate' cu alte specificatii relevante. DOM WG lucreaza impreuna cu alte grupuri, pe cat posibil, pentru a asigura ca specificatiile sunt consistente.

Inapoi Sus

Care este legatura dintre COM sau CORBA si DOM?

Document Object Model, in ciuda numelui, nu este un object model ca Component Object Model (COM). COM, ca si CORBA, este o modalitate independenta de limbaj pentru a specifica interfete si obiecte. Document Object Model este un set de interfete si obiecte create pentru modificarea documentelor HTML si XML. DOM poate fi implementat folosind sisteme independente de limbaj ca COM sau CORBA; poate fi implementat si folosind legaturi specifice unui anumit limbaj, cum ar fi Java sau ECMAScript.

Inapoi Sus

Cum folosesc DOM intr-o pagina HTML?

Sund doua metode de folosire a modulului HTML al DOM. Ai putea folosi JavaScript sau VBScript in pagina. Sau, ai putea folosi o aplicatie externa, cum ar fi un plug-in, control ActiveX, sau un Java applet, care acceseaza documentul cu ajutorul browserului (suportul pentru aceasta depinde de browser).

Inapoi Sus

Care este diferenta dintre DHTML si DOM?

Dynamic HTML (DHTML) este un termen folosit de unele companii pentru a descrie combinatia de HTML, style sheets si scripturi, care permite animarea documentelor. Interfetele scripturilor DHTML se aseamana cu DOM, in special cu modulul HTML. Compatibilitatea cu DHTML a fost un factor important in dezvoltarea DOM. DOM este totusi mult mai mult decat DHTML. Este o interfata independenta de platforma sau limbaj care permite programatorilor si scripturilor sa acceseze si sa updateze continutul, structura si stilul documentelor HTML si XML.

Inapoi Sus

Functioneaza DOM in pagini HTML invalide?

In general, paginile tale nu ar trebui sa fie invalide daca vrei sa obtii rezultate consistente cand folosesti DOM. Daca folosesti JavaScript sau VBScript cu o pagina HTML invalida, probabil vei obtine rezultate neasteptate.

Inapoi Sus

Ce inseamna sa respecti specificatia DOM?

Un model de document conform cu DOM este unul care raspunde la toate API-urile DOM cu rezultatul specificat de Recomandarea DOM. Nu este obligatoriu sa fie implementate modulele optionale (XML, HTML, Stylesheet, CSS, Traversal, Ranges, etc) pentru a fi in coformitate, dar daca DOM-ul tau nu le implementeaza, trebuie sa raspunda cu false la queriurile hasFeature. Spre exemplu, un DOM care implementeaza doar API-urile Level 1 APIs plus metoda importNode este conform doar cu Level 1, deoarece nu are suport complet pentru Level 2.

In multe situatii, este posibil si de dorit sa adaugi caracteristici la DOM (fara sa strici conformitatea cu standardele). Cel mai simplu si sigur mod de a face acest lucru este sa definesti un nou set de API-uri pe care obiectele din DOM-ul tau customizat le suporta, pentru ca comportamentul API-urilor standard DOM sa fie lasate neschimbate. DOM-ul HTML este un bun exemplu; defineste un set de subclase customizate ale obiectelor DOM standarde, fiecare din ele continua sa respecte comportamentul din core DOM, dar contine si comportamente speciale.

Unii developeri incep sa refoloseasca portiuni din API-ul DOM fara sa promita conformite 100% cu DOM. Spre exemplu, unii oameni au scris subseturi DOM (DOM-uri read-only, spre exemplu), sau au folosit portiuni din API-ul DOM pentru a construi alte tipuri de copaci de noduri, sau au amestecat nodetypurile lor customizate cu cele definite de DOM.

Inapoi Sus


DOM si alte standarde

Care este legatura dintre foile de stil si DOM?

DOM Level 2 specifica si o modalitate de modificare a foilor de stil CSS. Exista si functionalitate care leaga foile de stil (in orice limbaj) de un document XML sau HTML. O interfata similara, de data aceasta pentru foile XSL ar putea fi specificata mai tarziu.

Inapoi Sus

Care este diferenta dintre DOM si groves?

Modelul obiect in DOM vine din design-ul obiectorial. Se refera la faptul ca interfetele sunt definite prin obiecte. Modelul obiect din groves este un model de date abstract. Exista un model de date implicit in DOM, dar implementatorii nu sunt obligati sa il foloseasca pentru a implementa interfetele. Modelul de date in DOM este specificat in Information Set specification.

Inapoi Sus

Dar limbaje query?

Ne asteptam ca un nivel viitor al DOM va include o interfata query, deci va putea comunica cu orice limbaj query din implementare. W3C lucreaza deja la dezvoltarea unui limbaj query, deci DOM WG (Working Group) nu trebuie sa specifice si limbajul.

Inapoi Sus

Cum e cu DOM pentru alte limbaje markup?

Alte grupuri creaza module DOM care sunt compatibile cu specificatia DOM dar au si alta functionalitate, pentru un alt limbaj markup. Spre exemplu, MathML DOM care este folosit cu MathML si SVG DOM care este folosit cu SVG. Aceste module sunt create de grupurile insarcinate cu crearea limbajelor respective.

Inapoi Sus

Care e legatura dintre DOM si SAX?

DOM si SAX sunt in momentul de fata cele mai populare API-uri pentru manipularea documentelor XML. Acestea difera in mod significant in provenieta, scop si stil de programare. Nu sunt in competitie directa, si fiecare are puncte bune si puncte slabe.

Provenienta: Spre deosebire de DOM, SAX ("Simple API for XML") nu este dezvoltat de World Wide Web Consortium, ci a fost dezvoltat de un grup informal de participanti la mailing listul XML-DEV. SAX 1 a fost suportat destul de bine de providerii de sofware pentru procesarea XML. SAX 2, in dezvoltare in momentul de fata, nu este inca suportat asa de bine, si face schimbari importante fata de SAX 1, desi include API-urile SAX 1 pentru backward-compatibility.

Scop:SAX a fost creat initial ca un API pentru parsere XML. Prin urmare, include functii care vor fi incluse in DOM abia in modulul Load/Save al DOM Level 3. Pe de alta parte, SAX 1 nu include unele informatii (spre exemplu comentariile) care sunt incluse in DOM. Cum este cazul si cu DOM, viitoarele versiuni vor avea mai multa functionalitate.

Stil:Cele mai importante diferente dintre SAX si DOM sunt ca SAX prezinta documentul ca un "event stream" serial (o serie de call-uri la o functie handler, pe masura ce parti din sintaxa XML sunt recunoscute), si nu ca un copac, cum face DOM. Un dezavantaj major al acestui mod de abordare este ca SAX nu suporta random-access. Vezi informatia in ordinea din document, o singura data. Daca vrei sa folosesti ceva ce ai vazut inainte, este responsabilitatea codului tau sa pastreze acea informatie pentru mai tarziu. Dar acest lucru inseamna si ca poti ignora informatia de care nu ai nevoie, care duce la un memory overhead mai mic.

Totusi, in fuctie de ce vrei sa faci, SAX nu consuma intotdeauna mai putina memorie. Si trebuie tinut cont ca implementarile DOM variaza in cerinta de memorie, cum variaza si in marime si performanta. Unele sunt mai compacte ca altele, si unele nu tin tot documentul in memorie tot timpul.

Deci cum sa alegi intre evenimente SAX si copaci DOM? Daca intentionezi sa folosesti alt cod, scripturi, etc sa modifici continutul documentului, DOM este cea mai buna alegere, fiind standardizat si complet. Pe de alta parte, daca ai nevoie sa procesezi documentul in mod linear, fara a folosi alte 'scripturi' si fara sa ai nevoie de informatie contextuala la fiecare etapa (spre exemplu daca citesti documentul XML si il salvezi direct intr-o baza de date), SAX poate oferi o interfata mai 'directa'. Intre aceste extreme, depinde de tine. Trebuie sa te gandesti de cat efort e nevoie sa implementezi propriul model document (in loc sa folosesti DOM) si cat si cum se va dezvolta aplicatia in viitor.

De fapt, este posibil sa combini SAX si DOM in acelasi sistem. Multe parsere pot produce output DOM si SAX. Exista multe aplicatii care combina SAX si DOM in diferite moduri.

Inapoi Sus


Copyright si Referinte

Dezvolt un produs care foloseste specificatia DOM. Ce trebuie sa fac cand acest produs este lansat?

Detaliile sunt in specificatia DOM. Acesta este o expunere sumara:

  1. daca copiezi specificatia DOM in documentatia ta, trebuie sa citezi sursa, si sa adaugi copyright-ul W3C
  2. daca vrei sa construiesti tehnologii bazate pe specificatia DOM, esti liber sa le folosesti.