Document Object Model: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FlaBot (discussione | contributi)
m robot Aggiungo: af
m Storia: Eliminato uno spazio
 
(105 versioni intermedie di 66 utenti non mostrate)
Riga 1:
[[File:Simpe HTML page DOM.svg|thumb|upright=1.4|Rappresentazione ad albero del DOM di un semplice documento [[HTML]]]]
'''Document Object Model''' ('''DOM''') è una forma di rappresentazione dei documenti strutturati come modello orientato agli oggetti. DOM è lo standard ufficiale del [[W3C]] per la rappresentazione di documenti strutturati in maniera da essere neutrali sia per la lingua che per la piattaforma. DOM è inoltre la base per una vasta gamma delle interfacce di programmazione delle applicazioni; alcune di esse sono standardizzate dal W3C.
 
In [[informatica]] il '''Document Object Model''' (spesso abbreviato come '''DOM'''), {{Lett|modello a oggetti del documento}}, è una forma di rappresentazione dei documenti strutturati come modello [[object oriented|orientato agli oggetti]]. È lo standard ufficiale del [[W3C]] per la rappresentazione di documenti strutturati in maniera da essere neutrali sia per la lingua che per la [[piattaforma (informatica)|piattaforma]]. È inoltre la base per una vasta gamma di interfacce di [[Programmazione (informatica)|programmazione]] delle [[Applicazione (informatica)|applicazioni]], alcune di esse [[Norma tecnica|standardizzate]] dal W3C.
DOM è stato inizialmente supportato dai [[browser]] per modificare gli elementi in un documento [[HTML]]. DOM è stato un modo per accedere e aggiornare dinamicamente il contenuto, struttura e stile dei documenti. A causa delle incompatibilità nell'esecuzione di DOM fra i vari browser, il W3C ha fornito delle specifiche standard.
 
== Storia ==
DOM non mette limitazioni sulla struttura dei dati del documento. Con DOM, un documento ben formato può essere visto come un albero. La maggior parte dei [[parser XML]] (come [[Xerces]]) e i processori [[XSL]] (per esempio [[Xalan]]) sono stati sviluppati per usare la struttura ad albero. Questa implementazione richiede che l'intero contenuto di un documento venga analizzato e salvato in memoria. Quindi, DOM può essere usato molto bene per applicazioni dove gli elementi del documento devono essere trovati in modo random e modificati. Per le applicazioni basate su [[XML]] che usano un processo di lettura e scrittura per analisi, DOM presenta un grande spreco di memoria; per questo tipo di applicazioni si consiglia di usare il modello [[SAX]].
La storia del Document Object Model si intreccia con la storia delle "[[Guerra dei browser|guerre del browser]]" della fine degli anni '90 tra [[Netscape Navigator]] e [[Internet Explorer|Microsoft Internet Explorer]], così come con quella di [[JavaScript]] e [[JScript]], i primi linguaggi di scripting ad essere ampiamente implementati nel Motore JavaScript dei browser web.
 
JavaScript è stato distribuito da Netscape Communications nel 1995 all'interno di Netscape Navigator 2.0. Il concorrente di Netscape, Microsoft, ha distribuito Internet Explorer 3.0 l'anno successivo con una re-implementazione di JavaScript chiamata JScript. JavaScript e JScript consentono agli sviluppatori web di creare pagine web con interattività [[lato client]]. Le funzionalità limitate per rilevare eventi generati dagli utenti e modificare il documento HTML nella prima generazione di questi linguaggi sono diventati noti come "DOM Level 0" o "Legacy DOM". Nessuno standard indipendente è stato sviluppato per DOM Livello 0, ma è stato parzialmente descritto nelle specifiche per HTML 4.
==Livelli==
 
La specifica attuale di DOM è al ''Livello 2'', tuttavia alcune delle specifiche del ''Livello 3'' ora sono già raccomandazioni del W3C.
Il DOM legacy era limitato nei tipi di elementi a cui era possibile accedere. È possibile fare riferimento agli elementi del modulo, del collegamento e dell'immagine con un nome gerarchico che inizia con l'oggetto documento principale. Un nome gerarchico potrebbe fare uso dei nomi o dell'indice sequenziale degli elementi attraversati. Ad esempio, è possibile accedere a un elemento di input del modulo come <code>document.formName.inputName</code> o <code>document.forms[0].elements[0]</code>.
; Livello 0: include tutto quello che viene fornito a DOM per la creazione del Livello 1, per esempio: <tt>document.images</tt>, <tt>document.forms</tt>, <tt>document.layers</tt>, e <tt>document.all</tt>. Nota, questa non è una specifica convenzionale pubblicata dal W3C ma piuttosto dà un riferimento a che cosa esisteva prima del processo di standardizzazione.
 
Il DOM legacy abilitava la convalida dei moduli lato client e il popolare effetto " rollover ".
 
Nel 1997 Netscape e Microsoft hanno distribuito rispettivamente la versione 4.0 di Netscape Navigator e Internet Explorer, aggiungendo il supporto per la funzionalità Dynamic HTML (DHTML) che abilita le modifiche a un documento HTML caricato. [[DHTML]] richiedeva estensioni per l'oggetto documento rudimentale che era disponibile nelle implementazioni DOM legacy. Sebbene le implementazioni DOM legacy fossero ampiamente compatibili poiché JScript era basato su JavaScript, le estensioni DOM DHTML sono state sviluppate in parallelo da ciascun produttore di browser e sono rimaste incompatibili. Queste versioni del DOM sono diventate note come "DOM intermedio".
 
Dopo la standardizzazione di [[ECMAScript]], il W3C DOM Working Group ha iniziato a redigere una specifica DOM standard. La specifica completa, nota come "DOM Level 1", divenne una raccomandazione del W3C alla fine del 1998. Nel 2005, gran parte del DOM W3C era ben supportata dai comuni browser abilitati per ECMAScript, incluso Microsoft Internet Explorer versione 6 (dal 2001), Opera, [[Safari (browser)|Safari]] e [[Gecko]] (come Mozilla, Firefox, SeaMonkey e Camino).
 
== Descrizione ==
Nativamente supportato dai [[browser]] per modificare gli elementi di un documento [[HTML]], DOM è un modo per accedere e aggiornare dinamicamente il contenuto, la struttura e lo stile dei documenti. Per le numerose incompatibilità dovute al diverso tipo di gestione di DOM dai vari browser, il W3C ha stabilito delle specifiche standard.
 
DOM non pone limitazioni alla struttura dei dati di un documento. DOM permette di visualizzare un documento ben formato sotto forma di albero: la maggior parte dei [[parser XML]] (come [[Xerces]]) e i processori [[Extensible Stylesheet Language|XSL]] (per esempio [[Xalan]]) sono stati sviluppati per usare la struttura ad albero. Questa implementazione richiede che l'intero contenuto di un documento venga analizzato e salvato in memoria. DOM è utilizzato principalmente per recuperare informazioni da documenti con una strutturazione non standard, cioè dove gli elementi devono essere trovati in modo casuale. Per le applicazioni basate su [[XML]] che usano un processo di lettura e scrittura per analisi, DOM presenta un grande spreco di memoria; per questo tipo di applicazioni si consiglia di usare il modello [[Simple API for XML|SAX]].
 
=== Livelli ===
Le specifiche DOM elaborate da W3C sono suddivise in livelli, ciascuno dei quali contiene moduli obbligatori o opzionali. Per sostenere di appartenere ad un certo 'livello', un'applicazione deve soddisfare tutti i requisiti di tale livello e dei livelli inferiori. La specifica attuale di DOM è al ''Livello 2'', tuttavia alcune delle specifiche del ''Livello 3'' ora sono già raccomandazioni del W3C.
; Livello 0: include tutto quello che viene fornito a DOM per la creazione del Livello 1, per esempio: <code>document.images</code>, <code>document.forms</code>, <code>document.layers</code>, e <code>document.all</code>. Nota, questa non è una specifica convenzionale pubblicata dal W3C ma piuttosto dà un riferimento a che cosa esisteva prima del processo di standardizzazione.
; Livello 1: navigazione di un documento DOM e manipolazione del contenuto.
; Livello 2: supporto al [[Namespace]] XML, viste filtrate e [[Eventi DOM]].
; Livello 3: consiste in 6 specifiche differenti: 1)
:# il nucleo del Livello 3; 2)
:# caricamento e salvataggio del Livello 3; 3)
:# XPath del Livello 3; 4)
:# viste e formattazione del Livello 3; 5)
:# requisiti del Livello 3; 6)
:# validazione del Livello 3, che potenzia ulteriormente DOM.
 
==Voci= correlateEsempio ===
Un classico esempio di albero DOM è quello generato da un [[browser|browser web]] nell'interpretazione di un documento [[HTML]].
* [[DOM Inspector]]
 
Il seguente documento HTML:
==Specifiche==
<syntaxhighlight lang="html4strict">
*[http://www.w3.org/TR/REC-DOM-Level-1/ Specifiche DOM Livello 1]
 
*Raccomandazioni del Livello 2:
<!-- My document -->
**[http://www.w3.org/TR/DOM-Level-2-Core/ Specifiche nucleo DOM Livello 2]
<HTML>
**[http://www.w3.org/TR/DOM-Level-2-Views/ Specifiche viste DOM Livello 2]
<HEAD>
**[http://www.w3.org/TR/DOM-Level-2-Events/ Specifiche eventi DOM Livello 2]
<TITLE>My Document</TITLE>
**[http://www.w3.org/TR/DOM-Level-2-Style/ Specifiche stile DOM Livello 2]
</HEAD>
**[http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ Specifiche Traversal and Range DOM Livello 2]
<BODY>
**[http://www.w3.org/TR/DOM-Level-2-HTML/ Specifiche HTML DOM Livello 2]
<H1>Header</H1>
*Raccomandazioni del Livello 3:
<P>
**[http://www.w3.org/TR/DOM-Level-3-Core/ Specifiche nucleo DOM Livello 3]
Paragraph
**[http://www.w3.org/TR/DOM-Level-3-LS/ Specifiche caricamento e salvataggio DOM Livello 3]
</P>
**[http://www.w3.org/TR/DOM-Level-3-Val/ Specifiche validazione DOM Livello 3]
<P>
*Note del gruppo di lavoro del Livello 3:
Paragraph
**[http://www.w3.org/TR/DOM-Level-3-XPath/ Specifiche XPath DOM Livello 3]
</P>
**[http://www.w3.org/TR/DOM-Level-3-Views/ Specifiche di visualizzazione e formattazione DOM Livello 3]
</BODY>
**[http://www.w3.org/TR/DOM-Requirements/ Requisiti di DOM]
</HTML>
</syntaxhighlight>
 
avrebbe il seguente albero DOM:
[[File:DOMExample.png|centro|572x572px]]
È da notare che in questo esempio anche i cosiddetti ''caratteri blank'' (spazi, tabulazioni, ecc.) sono considerati elementi dell'albero, nonostante questi non vengano poi mostrati dal [[browser]] (a meno che non si trovino all'interno di un tag ''pre'').
 
== Specifiche ==
* {{cita web|https://www.w3.org/TR/REC-DOM-Level-1/|Specifiche DOM Livello 1}}
* Raccomandazioni del Livello 2:
** {{cita web|https://www.w3.org/TR/DOM-Level-2-Core/|Specifiche nucleo DOM Livello 2}}
** {{cita web|https://www.w3.org/TR/DOM-Level-2-Views/|Specifiche viste DOM Livello 2}}
** {{cita web|https://www.w3.org/TR/DOM-Level-2-Events/|Specifiche eventi DOM Livello 2}}
** {{cita web|https://www.w3.org/TR/DOM-Level-2-Style/|Specifiche stile DOM Livello 2}}
** {{cita web|https://www.w3.org/TR/DOM-Level-2-Traversal-Range/|Specifiche Traversal and Range DOM Livello 2}}
** {{cita web|https://www.w3.org/TR/DOM-Level-2-HTML/|Specifiche HTML DOM Livello 2}}
* Raccomandazioni del Livello 3:
** {{cita web|https://www.w3.org/TR/DOM-Level-3-Core/|Specifiche nucleo DOM Livello 3}}
** {{cita web|https://www.w3.org/TR/DOM-Level-3-LS/|Specifiche caricamento e salvataggio DOM Livello 3}}
** {{cita web|https://www.w3.org/TR/DOM-Level-3-Val/|Specifiche validazione DOM Livello 3}}
* Note del gruppo di lavoro del Livello 3:
** {{cita web|https://www.w3.org/TR/DOM-Level-3-XPath/|Specifiche XPath DOM Livello 3}}
** {{cita web|https://www.w3.org/TR/DOM-Level-3-Views/|Specifiche di visualizzazione e formattazione DOM Livello 3}}
** {{cita web|https://www.w3.org/TR/DOM-Requirements/|Requisiti di DOM}}
 
== Voci correlate ==
* [[DOM Inspector]]
* [[XHTML]]
* [[Xerces]]
 
== Altri progetti ==
==Collegamenti esterni==
{{interprogetto|preposizione=sul|b=JavaScript/DOM}}
*[http://www.w3.org/DOM/ W3.org on DOM]
*[http://xml.coverpages.org/dom.html Technology Reports]
*[http://xml.com/pub/rg/DOM_Tutorials Tutorials]
*[http://www.w3.org/2003/02/06-dom-support.html What does your user agent claim to support?]
*[http://www.mozilla.org/docs/dom/reference/levels.html What does each DOM Level bring?]
*[http://msdn.microsoft.com/workshop/author/dom/domoverview.asp About the W3C Document Object Model]
*[http://www.quirksmode.org/dom/contents.html W3C DOM scripts and compatibility tables]
*[http://mozilla.org/docs/dom/domref/ Gecko DOM Reference]
*[http://developer.kde.org/documentation/library/cvs-api/khtml/html/namespaceDOM.html khtml Library API Documentation]
 
== Collegamenti esterni ==
*Interfacce per...
* {{Collegamenti esterni}}
**[http://xml.apache.org/xerces-c/program-dom.html C++]
* {{FOLDOC}}
**[http://www.w3.org/2003/01/dom2-javadoc/index.html Java] - W3C Document Object Model Level 2
* {{cita web|https://www.w3.org/DOM/|W3.org on DOM}}
**[http://interaction.in-progress.com/developer/dom/ Lisp]
* {{cita web|http://xml.coverpages.org/dom.html|Technology Reports}}
**[http://www.philo.de/xml/downloads.shtml Pascal] ([[Kylix]])
* {{cita web |1=https://www.xml.com/pub/rg/DOM_Tutorials |2=Tutorials |accesso=12 settembre 2005 |urlarchivio=https://web.archive.org/web/20051214222021/http://www.xml.com/pub/rg/DOM_Tutorials |dataarchivio=14 dicembre 2005 |urlmorto=sì }}
**[http://search.cpan.org/~tjmather/XML-DOM-1.43/ Perl]
* {{cita web|https://www.w3.org/2003/02/06-dom-support.html|What does your user agent claim to support?}}
**[http://www.php.net/manual/it/ref.domxml.php PHP4]
* {{cita web|https://www.mozilla.org/docs/dom/reference/levels.html|What does each DOM Level bring?}}
**[http://www.php.net/manual/it/ref.dom.php PHP5]
* {{cita web | 1 = https://msdn.microsoft.com/workshop/author/dom/domoverview.asp | 2 = About the W3C Document Object Model | accesso = 12 settembre 2005 | urlarchivio = https://web.archive.org/web/20050830050710/http://msdn.microsoft.com/workshop/Author/dom/domoverview.asp | dataarchivio = 30 agosto 2005 | urlmorto = sì }}
**[http://www.python.org/doc/current/lib/module-xml.dom.html Python]
* {{cita web|http://www.quirksmode.org/dom/contents.html|W3C DOM scripts and compatibility tables}}
**[http://libgdome-ruby.berlios.de/ Ruby]
* {{cita web |1=https://mozilla.org/docs/dom/domref/ |2=Gecko DOM Reference |accesso=12 settembre 2005 |urlarchivio=https://web.archive.org/web/20050924101420/http://www.mozilla.org/docs/dom/domref/ |dataarchivio=24 settembre 2005 |urlmorto=sì }}
**[http://tclxml.sourceforge.net/tcldom.html TCL]
* {{cita web |1=http://developer.kde.org/documentation/library/cvs-api/khtml/html/namespaceDOM.html |2=khtml Library API Documentation |accesso=12 settembre 2005 |urlarchivio=https://web.archive.org/web/20050306061629/http://developer.kde.org/documentation/library/cvs-api/khtml/html/namespaceDOM.html |dataarchivio=6 marzo 2005 |urlmorto=sì }}
 
;Interfacce per...
* {{cita web|https://xml.apache.org/xerces-c/program-3.html|C++}}
* [https://www.w3.org/2003/01/dom2-javadoc/index.html Java] - W3C Document Object Model Level 2
* {{cita web | 1 = http://interaction.in-progress.com/developer/dom/ | 2 = Lisp | accesso = 12 settembre 2005 | urlarchivio = https://web.archive.org/web/20051102123055/http://interaction.in-progress.com/developer/dom/ | dataarchivio = 2 novembre 2005 | urlmorto = sì }}
* [http://www.philo.de/xml/downloads.shtml Pascal] ([[Kylix (linguaggio)|Kylix]])
* {{cita web|http://search.cpan.org/~tjmather/XML-DOM-1.43/|Perl}}
* {{cita web | 1 = http://www.php.net/manual/it/ref.domxml.php | 2 = PHP4 | accesso = 16 gennaio 2006 | dataarchivio = 18 dicembre 2005 | urlarchivio = https://web.archive.org/web/20051218053603/http://www.php.net/manual/it/ref.domxml.php | urlmorto = sì }}
* {{cita web | 1 = http://www.php.net/manual/it/ref.dom.php | 2 = PHP5 | accesso = 16 gennaio 2006 | dataarchivio = 30 agosto 2005 | urlarchivio = https://web.archive.org/web/20050830165859/http://www.php.net/manual/it/ref.dom.php | urlmorto = sì }}
* {{cita web | 1 = https://www.python.org/doc/current/lib/module-xml.dom.html | 2 = Python | accesso = 12 settembre 2005 | urlarchivio = https://web.archive.org/web/20050618001305/http://www.python.org/doc/current/lib/module-xml.dom.html | dataarchivio = 18 giugno 2005 | urlmorto = sì }}
* {{cita web | 1 = http://libgdome-ruby.berlios.de/ | 2 = Ruby | accesso = 12 settembre 2005 | urlarchivio = https://web.archive.org/web/20050609080554/http://libgdome-ruby.berlios.de/ | dataarchivio = 9 giugno 2005 | urlmorto = sì }}
* {{cita web|http://tclxml.sourceforge.net/tcldom.html|TCL}}
 
{{Interfacce web}}
[[categoria:Standard W3C]]
{{Browser Internet}}
[[categoria:Standard XML]]
{{Controllo di autorità}}
{{Portale|internet}}
 
[[Categoria:Standard W3C]]
[[af:Document Object Model]]
[[cs:DOM]]
[[de:Document Object Model]]
[[en:Document Object Model]]
[[es:Document Object Model]]
[[fa:مدل شیء‌گرای سند]]
[[fi:DOM]]
[[fr:Document Object Model]]
[[he:Document Object Model]]
[[ja:Document Object Model]]
[[ko:문서 객체 모델]]
[[nl:Document Object Model]]
[[pl:Obiektowy model dokumentu]]
[[pt:Modelo de Objeto de Documentos]]
[[ru:DOM]]
[[sv:Document Object Model]]
[[th:Document Object Model]]
[[vi:DOM]]
[[zh:文档对象模型]]