+ All Categories
Home > Documents > Corso-Guida - HTML.it - Corso XML

Corso-Guida - HTML.it - Corso XML

Date post: 28-Oct-2015
Category:
Upload: bioshack
View: 80 times
Download: 3 times
Share this document with a friend
253
XML da anni fa parlare di sè come il linguaggio di Markup destinato a sostituire l'HTML. Questa sezione fornisce strumenti per imparare da zero XML (attraverso il corso) e per approfondirne la conoscenza (attraverso i tutorial). Corso XML Questa guida, curata da Marco Giannì, introduce, in 70 lezioni corredate da esempi pratici, alle caratteristiche principali di XML. Dall'introduzione al linguaggio al suo utilizzo pratico. Questo corso, completamente in italiano e di facile comprensione, è il primo passo per chi non ha alcuna conoscenza di XML. Tutorial XML-DOM Con XML è possibile avere un'unica piattaforma di sviluppo per scambiarsi ed elaborare i dati provenienti da varie fonti. Il Tutorial di Enrico Modanese per HTML.it vi condurrà all'elaborazione e alla scrittura di strumenti che utilizzano Javascript, XML e la standard DOM per accedere ai documenti XML e manipolarli. HTML.it - XML http://www.html.it/xml/index.html [19/06/2001 14.08.45]
Transcript
Page 1: Corso-Guida - HTML.it - Corso XML

XML da anni fa parlare di sè come il linguaggio di Markup destinato asostituire l'HTML. Questa sezione fornisce strumenti per imparare da zeroXML (attraverso il corso) e per approfondirne la conoscenza (attraverso i

tutorial).

Corso XMLQuesta guida, curata da Marco Giannì, introduce, in 70 lezioni corredate da esempi pratici, alle caratteristicheprincipali di XML. Dall'introduzione al linguaggio al suo utilizzo pratico. Questo corso, completamente in italiano edi facile comprensione, è il primo passo per chi non ha alcuna conoscenza di XML.

Tutorial XML-DOMCon XML è possibile avere un'unica piattaforma di sviluppo per scambiarsi ed elaborare i dati provenienti davarie fonti. Il Tutorial di Enrico Modanese per HTML.it vi condurrà all'elaborazione e alla scrittura di strumenti cheutilizzano Javascript, XML e la standard DOM per accedere ai documenti XML e manipolarli.

HTML.it - XML

http://www.html.it/xml/index.html [19/06/2001 14.08.45]

Page 2: Corso-Guida - HTML.it - Corso XML

di Marco Giannì[email protected]

Questa guida, curata da Marco Giannì, introduce, in 70 lezioni corredate da esempi pratici, allecaratteristiche principali di XML. Dall'introduzione al linguaggio al suo utilizzo pratico. Questocorso, completamente in italiano e di facile comprensione, è il primo passo per chi non ha alcunaconoscenza di XML.

Percorso consigliato: apprendistiLivello di difficoltà:

 

INTRODUZIONE

CAPITOLO 1

1. L’importanza dell’XML

1.1 Origine e obiettivi

1.2 Relazioni tra XML e altri linguaggi

1.2.1 Relazione tra XML e SGML

1.2.2 Relazione tra XML e HTML

1.3 Le proprietà dell’XML

1.4 L’XML e il Web

1.4.1 Database eterogenei

1.4.2 Processi distribuiti

1.4.3 Viste differenti

1.4.4 Motori di ricerca

CAPITOLO 2

2. STRUTTURA E SINTASSI

2.1 Struttura logica del linguaggio XML

2.2 Struttura fisica del linguaggio XML

2.3 Sintassi XML

2.3.1 Apertura e chiusura dei tag

2.3.2 Attributi

2.4 Documenti XML validi e ben formati

2.4.1 Documenti validi

2.4.2 Documenti ben formati

CAPITOLO 3

HTML.it - Corso gratuito su XML

http://www.html.it/xml/guida/index.html (1 di 3) [19/06/2001 14.08.53]

Page 3: Corso-Guida - HTML.it - Corso XML

3. DEFINIZIONE DEL TIPO DI DOCUMENTO (DTD)

3.1 Struttura della DTD

3.2 Creazione di una DTD semplice

3.3 Dichiarazioni di elementi

3.4 Tipi di Dati

3.5 Simboli relativi alla struttura

3.6 Attributi

3.7 Entità

3.8 Le parole chiave IGNORE e INCLUDE

3.9 Istruzioni di elaborazione.

3.10 Commenti

3.11 DTD esterne

3.12 Vocabolari

3.13 Spazi dei nomi XML (XML Namespace)

3.13.1 Creazione di nomi univoci tramite gli spazi dei nomiXML

CAPITOLO 4

4. AMPLIARE I DOCUMENTI XML

4.1 XSL: l’XML con i fogli di stile

4.1.1 Nozioni fondamentali sul linguaggio XSL

4.1.2 Componenti del linguaggio XSL

4.1.3 Fogli di stile XSL

4.1.4 Utilizzo dei modelli

4.1.5 Visualizzazione degli elementi di output

4.1.6 Estrazione dei dati dall’XML

4.2 XLL: Collegamenti con il linguaggio XML

4.2.1 XLink: il sistema per i collegamenti XML

4.2.2 Collegamenti semplici nell’XML

4.2.3 Collegamenti estesi nell’XML

4.3 XPOINTER

4.3.1 Concetti fondamentali relativi al linguaggioXPointer

4.4 XML-Data

4.4.1 Gli obiettivi di XML-Data

4.4.2 Linguaggio schema XML-Data

4.4.3 Struttura del documento dello schema

4.4.4 Dichiarazioni del tipo di elemento

HTML.it - Corso gratuito su XML

http://www.html.it/xml/guida/index.html (2 di 3) [19/06/2001 14.08.53]

Page 4: Corso-Guida - HTML.it - Corso XML

4.4.5 Dichiarazioni del tipo di attributo

4.4.6 Tipi di dati

4.4.7 Funzionamento degli schemi (esempio filexml/xsl)

CAPITOLO 5

5. Applicazioni dell’XML

5.1 Channel Definition Format (CDF)

5.1.1 Webcasting (tecnologia push)

5.1.2 Struttura di un file CDF

5.1.3 Utilizzo del file CDF

5.1.4 Esempio di un canale

5.2 Synchronized Multimedia Integration Language (SMIL)

5.2.1 Struttura di SMIL

5.2.2 Stile parallelo

5.2.3 Stile in sequenza

5.2.4 Specifiche dell’impostazione

5.2.5 Switching

5.2.6 Esempio SMIL (esempio file smil)

Conclusioni

Appendice A

Strumenti software

A.1 Il processore XML

A.2 Il parser Msxml

A.3 Panorama del software

A.4 Esempio di file XML (esempio file xml/xsl)

Bibliografia

HTML.it - Corso gratuito su XML

http://www.html.it/xml/guida/index.html (3 di 3) [19/06/2001 14.08.53]

Page 5: Corso-Guida - HTML.it - Corso XML

  Introduzione all'XMLIntroduzione

L’HTML (Hypertext Markup Language) è considerato la base del World Wide Web.Questo linguaggio consente infatti di creare in maniera standardizzata pagine diinformazioni formattate in grado di raggiungere, tramite Internet, un numero di utentiin costante aumento. Insieme al protocollo HTTP (Hypertext Transport Protocol),l’HTML ha rivoluzionato il modo in cui le persone inviano e ricevono informazioni, malo scopo principale per cui è stato realizzato è la visualizzazione dei dati. Per questomotivo, l’HTML prende in considerazione soprattutto il modo in cui le informazionivengono presentate e non il tipo o la struttura di tali informazioni, aspetti per i quali èstato sviluppato il linguaggio XML (eXtensible Markup Language). La necessità diespandere le capacità di HTML ha spinto i produttori di browser a introdurre nuovimarcatori nella sintassi, rendendola a tutti gli effetti proprietaria e non più standard.Da ciò segue che una pagina HTML che sfrutti marcatori proprietari non può esserevisualizzata correttamente se non con il browser adatto, con le ovvie conseguenzeche ne derivano.

L’XML è un linguaggio di markup aperto e basato su testo che fornisce informazioni ditipo strutturale e semantico relative ai dati veri e propri. Questi "dati sui dati", ometadati, offrono un contesto aggiuntivo all’applicazione che utilizza i dati e consenteun nuovo livello di gestione e manipolazione delle informazioni basate su Web.

L’XML, derivazione del noto linguaggio SGML (Standard Generalized MarkupLanguage), è stato ottimizzato per il Web, diventando potente complementodell’HTML basato su standard. L’importanza dell’XML nel futuro delle informazioni sulWeb potrebbe pertanto giungere ad eguagliare quella dell’HTML agli albori.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Introduzione all'XML - Introduzione

http://www.html.it/xml/guida/introdu.htm [19/06/2001 14.09.05]

Page 6: Corso-Guida - HTML.it - Corso XML

 Origine e obiettivi

L’Extensible Markup Language (XML) è un metalinguaggio che permette di creare deilinguaggi personalizzati di markup; nasce dall’esigenza di portare nel World WideWeb lo Standard Generalized Markup Language (SGML), lo standard internazionaleper la descrizione della struttura e del contenuto di documenti elettronici di qualsiasitipo; ne contiene quindi tutta la potenza, ma non tutte le complesse funzioniraramente utilizzate. Si caratterizza per la semplicità con cui è possibile scriveredocumenti, condividerli e trasmetterli nel Web.

L’utilizzo di XML permette di superare il grosso limite attuale del Web, che è quellodella dipendenza da un tipo di documento HTML, singolo e non estensibile. Questolinguaggio è nato per permettere agli utenti del World Wide Web di condividere leinformazioni su sistemi differenti; il presupposto era che quelle informazioni fosserotesto con al più alcune immagini e collegamenti ipertestuali. Attualmente però, leinformazioni sul World Wide Web sono database di testo, immagini, suoni, video,audio. Quindi l’HTML è stato chiamato sempre più di frequente a fornire soluzioni aproblemi che non aveva lo scopo di risolvere, come dover descrivere tipi differenti especifici di informazioni, definire relazioni complesse di collegamenti fra documenti,trasmettere informazioni in diversi formati. Per superare questi problemi, sono statecreate delle estensioni dell’HTML, spesso fra loro incompatibili.

L’XML permette a gruppi di persone o ad organizzazioni di creare il proprio linguaggiodi markup, specifico per il tipo di informazione che trattano; per molte applicazioni eper diversi settori, gli esperti hanno già creato linguaggi di markup specifici, come adesempio il Channel Definition Format, il Mathematical Markup Language ed altri (Fig.1.1).

Fig. 1.1: L’XML permette di scrivere linguaggi di markup

XML fu sviluppato da XML Working Group (originariamente noto come SGMLEditorial Review Board) costituitosi sotto gli auspici del World Wide Web Consortium(W3C) nel 1996. Esso era presieduto da Jon Bosak della Sun Microsystems con lapartecipazione attiva dell’XML Special Interest Group (precedentemente noto comeSGML Working Group) anch’esso organizzato dal W3C.

L’obiettivo di questo gruppo di lavoro era di portare il linguaggio SGML nel Web.L’SGML è un linguaggio per la specifica dei linguaggi di markup ed è il genitore del

XML: Capitolo I: L'importanza dell'XML - Origine e obiettivi

http://www.html.it/xml/guida/origine.htm (1 di 2) [19/06/2001 14.09.15]

Page 7: Corso-Guida - HTML.it - Corso XML

ben noto HTML.

La progettazione dell’XML venne eseguita esaminando i punti di forza e di debolezzadell’SGML. Il risultato è uno standard per i linguaggi di markup che contiene tutta lapotenza dell’SGML ma non tutte le funzioni complesse e raramente utilizzate. L’XMLvenne mostrato per la prima volta al pubblico quando l’SGML celebrò il suo decimoanno.

Gli obiettivi progettuali di XML sono:XML deve essere utilizzabile in modo semplice su Internet: in primo luogo,l’XML deve operare in maniera efficiente su Internet e soddisfare le esigenzedelle applicazioni eseguite in un ambiente di rete distribuito.

1.

XML deve supportare un gran numero di applicazioni: deve esserepossibile utilizzare l’XML con un’ampia gamma di applicazioni, tra cui strumentidi creazione, motori per la visualizzazione di contenuti, strumenti di traduzionee applicazioni di database.

2.

XML deve essere compatibile con SGML: questo obiettivo è stato definitosulla base del presupposto che un documento XML valido debba anche essereun documento SGML valido, in modo tale che gli strumenti SGML esistentipossano essere utilizzati con l’XML e siano in grado di analizzare il codiceXML.

3.

Deve essere facile lo sviluppo di programmi che elaborino documentiXML: l’adozione del linguaggio è proporzionale alla disponibilità di strumenti ela proliferazione di questi è la dimostrazione che questo obiettivo è statoraggiunto.

4.

Il numero di caratteristiche opzionali deve essere mantenuto al minimopossibile: al contrario dell’SGML, l’XML elimina le opzioni, in tal modoqualsiasi elaboratore potrà pertanto analizzare qualunque documento XML,indipendentemente dai dati e dalla struttura contenuti nel documento.

5.

I documenti XML dovrebbero essere leggibili da un utente eragionevolmente chiari: poiché utilizza il testo normale per descrivere i dati ele relazioni tra i dati, l’XML è più semplice da utilizzare e da leggere delformato binario che esegue la stessa operazione; inoltre poiché il codice èformattato in modo diretto, è utile che l’XML sia facilmente leggibile da partesia degli utenti che dei computer.

6.

La progettazione di XML dovrebbe essere rapida: l’XML è stato sviluppatoper soddisfare l’esigenza di un linguaggio estensibile per il Web. Questoobiettivo è stato definito dopo aver considerato l’eventualità che se l’XML nonfosse stato reso disponibile rapidamente come metodo per estendere l’HTML,altre organizzazioni avrebbero potuto provvedere a fornire una soluzioneproprietaria, binaria o entrambe.

7.

La progettazione di XML deve essere formale e concisa: questo obiettivoderiva dall’esigenza di rendere il linguaggio il più possibile conciso,formalizzando la formulazione della specifica.

8.

I documenti XML devono essere facili da creare: i documenti XML possonoessere creati facendo ricorso a strumenti di semplice utilizzo, quali editor ditesto normale.

9.

Non è di nessuna importanza l’economicità nel markup XML: nell’SGML enell’HTML la presenza di un tag di apertura è sufficiente per segnalare chel’elemento precedente deve essere chiuso. Benché così sia possibile ridurre illavoro degli autori, questa soluzione potrebbe essere fonte di confusione per ilettori, nell’XML la chiarezza ha in ogni caso la precedenza sulla concisione.

10.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Origine e obiettivi

http://www.html.it/xml/guida/origine.htm (2 di 2) [19/06/2001 14.09.15]

Page 8: Corso-Guida - HTML.it - Corso XML

 Relazione tra XML e SGML

SGML è un meta-linguaggio, ovvero un insieme di regole generalizzate usate percreare molteplici linguaggi speciali che prendono il nome di markup language. Leapplicazioni più note di SGML sono HTML, TIM (Telecommunication InterchangeMarkup); inoltre SGML viene largamente usato dalle grandi industrie di tecnologiacome strumento di immagazzinamento e scambio di informazioni di qualsiasi tipo. E'poi utilizzato in tipografia (ad esempio nella stampa delle delibere) per creare ildocumento che poi le macchine tipografiche andranno a stampare secondo la lorointerpretazione specifica delle strutture SGML.

L’SGML stesso non ha mai suscitato particolare interesse tra gli sviluppatori Web,probabilmente a causa soprattutto della sua complessità e delle difficoltà che l’utilizzodi questo linguaggio comporta.

L’obiettivo era di includere nell’XML, solo le parti dell’SGML necessarie per lapubblicazione sul Web. XML eredita da SGML la capacità di definire con estremafacilità nuovi marcatori, creando di fatto dei linguaggi di markup personalizzati,mentre la complessità e le caratteristiche opzionali che appesantivano l’SGML sonostate pertanto eliminate dall’XML.

Pregi di SGML :

La sua potenza è la flessibilità. E' uno standard (ISO 8879:1986) che può essereapplicato ad ogni tipo dato; è espandibile ed è fortemente strutturato. Questecaratteristiche lo rendono capace di risolvere problemi di elaborazionedell'informazione tra i più complessi, garantendo un perfetto riutilizzo dei dati. Inoltre ènon-proprietario ed indipendente dalla piattaforma.

Limiti di SGML :

Ha una struttura molto pesante, comprensiva di un gran numero di opzioni che lorendono poco maneggevole da un eventuale software di manipolazione dei dati,quindi può rappresentare un grosso scoglio per i programmatori che lavorano sulWeb. Comunque sia il problema più importante è che SGML richiede un DTD(Document Type Definition) per l'identificazione di tutte le relazioni tra le entità checompongono il documento SGML, e di uno Style-Sheet cioè un foglio di stile chestabilisce il modo di rappresentare e/o visualizzare i dati e le strutture definite nelDTD. Inoltre ogni documento SGML deve necessariamente essere validato e quindioltre ad un controllo sintattico viene controllata anche la semantica delle strutture didati presenti nel documento (ad esempio non potrà succedere che un titolo di capitoloviene dopo il relativo sottotitolo). Si capisce quindi che in mancanza di uno di questielementi, o in caso di corruzione dei dati, le istanze SGML saranno visualizzate comecodice incomprensibile per l'utente finale. Il risultato di queste considerazioni è cheper le applicazioni sul World Wide Web (WWW) le istanze SGML non sonopraticamente portabili data la loro intrinseca pesantezza e non robustezza.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Relazione tra XML e SGML

http://www.html.it/xml/guida/sgml.htm [19/06/2001 14.09.20]

Page 9: Corso-Guida - HTML.it - Corso XML

 Relazione tra XML e HTML

L’XML è spesso considerato una sostituzione dell’HTML. Sebbene questo possaessere in parte vero, in realtà i due linguaggi sono complementari e, relativamente almodo in cui vengono trattati i dati, operano su livelli differenti. Nei casi in cui l’XMLviene utilizzato per strutturare e descrivere i dati sul Web, l’HTML è usato performattare i dati.

Pregi di HTML :

Data la semplicità della struttura dei documenti HTML, rappresenta un velocestrumento per lo scambio delle informazioni sul Web. Le istanze HTML non devonoessere validate ma è sufficiente che siano "ben formate", ovvero sintatticamentecorrette. Il modo con cui viene visualizzato il documento dipende dallo Style-Sheetdel browser stesso.

Limiti di HTML :

I limiti di HTML discendono proprio dai suoi pregi e sono dovuti soprattutto ad un usodistorto di questo strumento. Dal momento che non è richiesta una strutturazionesemanticamente corretta delle informazioni, HTML diventa molto povero per leapplicazioni di elaborazione dei dati, quindi il problema viene completamentedemandato agli applicativi scritti in Java, Java Script, ecc. La sua struttura non èestensibile e questo lo rende praticamente inutilizzabile per le industrie che si sonoviste costrette a crearsi standards differenti per ogni diversa applicazione, ed ancorauna volta è compito del software elaborare i dati per il trasferimento delle informazionisul Web. Un altro problema da non sottovalutare si può verificare dalla parte del clientqualora non abbia un dispositivo video del tipo previsto dal server (per esempiodispositivi per il braille o monitor non grafici).

Inoltre l’HTML non offre i meccanismi per mantenere il controllo della formattazione.Infatti non si possono specificare le dimensioni video di un documento o controllare ledimensioni della finestra di un browser. Per superare questo problema sono statiinseriti nuovi tag e i fogli di stile; i nuovi tag forniscono istruzioni di formattazionecome ad esempio il tag <FONT> per specificare il tipo di carattere; gli utenti però,possono ignorare queste specifiche e utilizzare le loro; inoltre questi tag sono diformattazione e non di descrizione (come dovrebbero essere essendo l’HTML unlinguaggio di descrizione del documento). Tutto questo fa sì che uno sviluppatore dipagine Web non sappia mai con certezza cosa un client visualizzerà sullo schermodel computer.

Il W3C (ente guida per lo sviluppo del Web), si rese conto che la creazione di unamoltitudine di nuovi tag che rispondessero a ogni possibile esigenza di formattazioneera irrealistica ed incoerente con i principi ed i concetti dell’HTML; vennero quindiintrodotti i CSS (Cascading Style Sheet) che permettono attraverso le norme di stiledi definire come devono apparire determinati elementi di un documento; anche con iCSS però, si deve scegliere fra un assortimento di proprietà predefinite.

Bisogna anche specificare che lasciare al browser la decisione di come presentare undocumento, fu esplicitamente voluto come impostazione del progetto HTML (infatticome si è già detto è un linguaggio di descrizione del documento). Il browser conoscele preferenze degli utenti e soprattutto l’ambiente in cui si trova ad operare; tutteinformazioni che logicamente l’autore di un documento HTML non conosce (a partepochi casi, come un ambiente intranet omogeneo). Il poter decidere comevisualizzare un documento è molto utile ad esempio quando un utente non dispone diun browser grafico, oppure per utenti che hanno problemi di vista e hanno bisogno dicaratteri molto grandi, oppure addirittura per utenti non vedenti. Sfortunatamente, lecase produttrici di browser, non hanno capito la filosofia di base dell’HTML; il risultatodi questo è che allo stato attuale un numero enorme di pagine sul Web, contengonoinsiemi di tag specifici per determinati browser, e anche per determinate versioni dellostesso browser; queste pagine sono molto spesso illeggibili. Gradualmente l’HTMLsta passando da un linguaggio di descrizione, ad un linguaggio di presentazione, contutti i problemi qui descritti; l’XML può fornire una soluzione, fornendo un layout a

XML: Capitolo I: L'importanza dell'XML - Relazione tra XML e HTML

http://www.html.it/xml/guida/rel.htm (1 di 2) [19/06/2001 14.09.24]

Page 10: Corso-Guida - HTML.it - Corso XML

chiunque e indipendentemente dal browser utilizzato, attraverso l’utilizzodell’Exstensible Style Language (XSL), che diventerà uno standard universalmenteaccettato.

L’XML si differenzia dall’HTML per tre maggiori aspetti:Possono essere definiti nuovi tag ed attributi.●

La struttura di un documento può essere vista in modo gerarchico nidificando itag in ogni livello di complessità.

Ogni documento XML può contenere una opzionale descrizione della suagrammatica, in modo che possa essere utilizzata da applicazioni cherichiedono una validazione della struttura del documento.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Relazione tra XML e HTML

http://www.html.it/xml/guida/rel.htm (2 di 2) [19/06/2001 14.09.24]

Page 11: Corso-Guida - HTML.it - Corso XML

 Le proprietà dell'XML

L’XML è importante in due classi di applicazioni Web: la creazione di documenti e loscambio dei dati; i server Web attualmente utilizzati richiedono, per essere in grado diservire documenti XML, minime modifiche di configurazione; inoltre il metodostandard di collegamento e la connessione dei documenti XML, utilizza gli URL, chevengono interpretati correttamente della maggior parte del software per Internet.

La sintassi dell’XML è molto simile a quella dell’HTML, ma molto più rigida e severa;anche se al primo impatto questa caratteristica non sembra una proprietà positiva,(soprattutto per chi dovrà scrivere documenti XML), è stata volutamente introdotta dalgruppo di studio del W3C, per facilitare lo sviluppo di applicazioni basate sull’XML eaumentarne le prestazioni (si pensi ad un browser). Inoltre una sintassi chiara epulita, aumenta la leggibilità di un documento (questo vale in generale); a questoproposito si può dire che una sintassi chiara e pulita, unita alla possibilità di creare unproprio set di markup, contribuirà a rendere un file XML leggibile quanto un file di solotesto (e in alcuni casi di più).

L’XML non è limitato a un insieme fisso di tipi di elementi, ma permette di definire eutilizzare elementi e attributi personalizzati; per far questo viene fornita una sintassicon cui è possibile specificare gli elementi e gli attributi che possono essere utilizzatiall’interno dei documenti. In altre parole è possibile creare un modello, chiamatoDocument Type Definition (DTD), che descrive la struttura e il contenuto di unaclasse di documenti; lo stesso XML ha un proprio DTD (attualmente descritto nellaspecifica REC-xml-19980210) in cui vengono elencate le regole della specifica stessadel linguaggio. Con l’XML è anche introdotta una classe di documenti che fariferimento al solo DTD dell’XML; la creazione di un DTD personale non è quindiindispensabile, come mostra la Fig. 1.2.

Fig. 1.2: Un documento XML può fare riferimento al DTD dell’XML o a un DTDpersonale

Questa possibilità semplifica molto l’utilizzo dell’XML rispetto all’SGML. Nellinguaggio SGML infatti i DTD sono indispensabili (e spesso complicati da creare e daimparare), e un documento deve fare obbligatoriamente riferimento ad uno di essi.

L’XML permette di creare dei tag personalizzati; inoltre uno stesso documento XMLpuò essere utilizzato per scopi diversi da applicazioni diverse. Come fa unaapplicazione a riconoscere il markup disegnato per lei e ad evitare di confonderlo conil markup disegnato per altre applicazioni? Ad esempio una applicazione potrebbeutilizzare un elemento chiamato "address" per identificare il domicilio di una persona;un’altra applicazione invece potrebbe utilizzare lo stesso elemento per identificarel’indirizzo elettronico di una persona. Anche un programmatore potrebbe averedifficoltà nel capire l’utilizzo di un determinato elemento; per risolvere questo tipo diproblemi, il gruppo di lavoro del W3C ha pensato ad un metodo per individuare leconvenzioni che governano l’utilizzo di un particolare set di elementi; l’idea è quella diutilizzare un namespace, cioè un documento in cui viene definito l’utilizzo di unparticolare set di elementi; un documento XML può far riferimento ad un namespaceattraverso un indirizzo Web. Il documento di riferimento è ilWD-xml-names-19990114.

L’XML può essere utilizzato come piattaforma per lo scambio di dati tra le

XML: Capitolo I: L'importanza dell'XML - Le proprietà dell'XML

http://www.html.it/xml/guida/proprieta.htm (1 di 3) [19/06/2001 14.09.39]

Page 12: Corso-Guida - HTML.it - Corso XML

applicazioni, come mostra la Fig. 1.3; ciò è possibile perché è orientato alladescrizione dei dati.

Fig 1.3: L’XML può essere utilizzato come piattaforma per lo scambio di dati

Poniamo il caso che si voglia scambiare le informazioni di database su Internet. Siimmagini di utilizzare un browser per rinviare al server le informazioni su unquestionario compilato dagli utenti. Questo processo, come molti altri, richiede unformato che possa essere personalizzato per un utilizzo specifico e che sia unasoluzione aperta non proprietaria.

L’XML è la soluzione per questo tipo di problema. Questo linguaggio in futurodiventerà sempre più importante per lo scambio di dati su Internet.

L’XML è in grado di fornire una sola piattaforma per lo scambio di dati tra leapplicazioni. Era sempre stato difficile trovare un formato di interscambio che potesseessere utilizzato per il trasferimento di dati tra database di fornitori differenti e sistemioperativi diversi. Quel tipo di interscambio è ora diventato una delle applicazioniprincipali dell’XML.

Le pagine HTML hanno l’unico scopo di essere visualizzate da un browser (infatti sidice che i dati nell’HTML sono orientati al video); per questo è molto difficilel’elaborazione successiva delle informazioni contenute nelle pagine HTML. Idocumenti basati sull’XML invece, non fanno supposizioni su come verranno utilizzatidal client; così le informazioni ricevute possono essere utilizzate da un’applicazioneche comprende il linguaggio XML, utilizzando i dati ivi contenuti in altri processisoftware; quindi uno stesso documento può essere facilmente utilizzato per scopidiversi.

Il collegamento ipertestuale è una caratteristica specifica dell’HTML; attualmenteperò, esso supporta solo un tipo di collegamento, che è quello unidirezionale; in unvero sistema ipertestuale i tipi di collegamento sono diversi. Anche se l’XML è unostandard, molte cose sulle tecnologie correlate, quali i fogli di stile ed il collegamento,sono ancora in fase di sviluppo; quindi il modo esatto in cui il collegamento deveessere implementato nell’XML è ancora in fase di studio. Sicuramente dovrà esserecompatibile con i meccanismi di collegamento HTML esistenti, supportarel’estensibilità e le proprietà intrinseche dell’XML e implementare i vari tipi dicollegamenti propri di un vero sistema ipertestuale. Attualmente lo standard diriferimento è l’Extensible Linking Languge (XLL) del 3/3/1998; è stato diviso in dueparti: XML Linking Language (XLink) e XML Pointer Language (XPointer).

L’XSL definisce la specifica per la presentazione e l’aspetto di un documento XML: èstato presentato nel 1997 da un consorzio di industrie software (tra cui anche laMicrosoft) al W3C perché lo approvasse come linguaggio di stile standard per idocumenti XML. L’XSL è un sottoinsieme del Document Style Semantics andSpecification Language (DSSSL), il linguaggio di stile utilizzato in ambiente SGML;gode delle proprietà di essere estensibile, potente ma nello stesso tempo di facileutilizzo.

Con l’XSL è possibile creare fogli di stile che permettono la visualizzazione di undocumento XML in un qualsiasi formato (audio, video, braille, etc.), come mostra laFig. 1.4. Attualmente lo standard di riferimento è il documento WD-xsl-19990421.

XML: Capitolo I: L'importanza dell'XML - Le proprietà dell'XML

http://www.html.it/xml/guida/proprieta.htm (2 di 3) [19/06/2001 14.09.39]

Page 13: Corso-Guida - HTML.it - Corso XML

Fig 1.4: L’XSL permette di creare fogli di stile per un qualsiasi formato

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Le proprietà dell'XML

http://www.html.it/xml/guida/proprieta.htm (3 di 3) [19/06/2001 14.09.39]

Page 14: Corso-Guida - HTML.it - Corso XML

 L'XML e il Web

Si possono individuare quattro categorie di applicazioni che utilizzeranno l’XML:Applicazioni che richiedono al Web client di mediare tra due o più databaseeterogenei.

Applicazioni che tentano di distribuire i processi di caricamentodell’informazione dal Web server al Web client.

Applicazioni che richiedono al Web client di presentare differenti viste deglistessi dati ad utenti differenti.

Applicazioni nelle quali motori di ricerca Web tentano di ritagliare leinformazioni scoperte, ai bisogni individuali degli utenti.

L’alternativa all’XML, per queste applicazioni, sono codici proprietari inseriti comescript nei documenti HTML. La filosofia dell’XML invece, si basa sul fatto che il

formato dei dati non sia legato a nessuno script in particolare, e sia uno standardindipendente da qualsiasi organizzazione proprietaria.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - L'XML e il Web

http://www.html.it/xml/guida/web.htm [19/06/2001 14.09.43]

Page 15: Corso-Guida - HTML.it - Corso XML

 L'importanza dell'XMLDatabaseeterogenei

Un esempio di questa categoria di applicazioni Web è il sistema informativo diun’agenzia americana di "home health care". Questo tipo di agenzie sono il maggiorcomponente dell’industria medica americana e la loro importanza sta aumentando daquando politiche governative hanno spostato l’assistenza medica ospedaliera versol’assistenza medica domestica. Come si può ben capire la gestione dell’informazioneè critica per questa industria; la salute di un paziente è rappresentata nel sistemainformativo attraverso una collezione di documenti storici che rappresentano la vitamedica di una persona, passata attraverso vari dottori, ospedali, farmacie ecompagnie di assicurazioni; quando un nuovo paziente entra in una agenzia, c’èl’enorme compito di prelevare tutto il materiale e di memorizzarlo nel databasedell’agenzia. L’avvento del Web diede alla comunità informatica medica la speranzadi poter semplificare lo sforzo di memorizzazione delle informazioni nel database;sfortunatamente le applicazioni Web esistenti offrono modelli di soluzione a questoproblema inadeguati. Gli ospedali offrono alle agenzie una soluzione che in pocheparole è così riassunta:

Raggiungere il sito Web dell’ospedale1. Diventare un utente autorizzato2. Accedere alla documentazione medica del paziente attraverso il browser3. Stampare la documentazione4. Inserire manualmente i dati nel database (dalla stampa)5.

Attualmente questa soluzione è proposta da un gran numero di ospedali americani.Una versione leggermente più sofisticata permette all’operatore di inseriremanualmente i dati letti dal browser direttamente in un form dell’agenzia (in unafinestra separata), evitando così la stampa del documento. Anche questa però non èuna grande soluzione. La soluzione ideale sarebbe la seguente:

Raggiungere il sito Web dell’ospedale1. Diventare un utente autorizzato2. Accedere alla documentazione medica del paziente attraverso una interfacciaWeb che rappresenti la documentazione con una icona a cartella

3.

Fare un drag della cartella dall’applicazione Web nel database interno4. Fare un drop della cartella nel database5.

Attualmente questa soluzione non è possibile poiché ci si scontra con i limitidell’HTML; le ragioni sono due:

L’HTML non permette di rappresentare strutture dati●

L’HTML non permette il controllo dei dati per validare i documenti ricevuti●

Una soluzione tecnica per implementare questo scambio di documenti è quella dirichiedere agli ospedali e alle agenzie di utilizzare un sistema informativo standarddettato dal governo (tale soluzione è attualmente allo studio); questo tipo di soluzioneè però difficile da mettere in pratica, soprattutto in un ambiente dove ospedali eagenzie stanno attraversando un momento di difficoltà finanziaria (cambiare ilsistema informativo comporta generalmente grosse spese). Un’altra soluzione èquella di adottare un formato standard di scambio dell’informazione; un grandenumero di industrie nel campo spaziale, telecomunicazioni, hardware, software, hautilizzato per anni un linguaggio standard per lo scambio dei dati e il processo èattualmente molto ben compreso. Tipicamente un consorzio di grandi industriedefinisce un Document Type Definition (in ambiente SGML) per implementare unlinguaggio di markup specifico per un determinato scopo; quindi il linguaggio èutilizzato come standard per lo scambio dei dati in determinati ambienti.

La soluzione XML è indipendente dai sistemi, dalle organizzazioni e proviene dalladecennale esperienza dell’SGML; l’XML permette di utilizzare l’approccio SGML per

XML: Capitolo I: L'importanza dell'XML - Database eterogenei

http://www.html.it/xml/guida/database.htm (1 di 2) [19/06/2001 14.09.47]

Page 16: Corso-Guida - HTML.it - Corso XML

lo scambio dei dati nel Web; è significativo come il giorno del rilascio della primaversione stabile dell’XML, l’organizzazione che raggruppa le maggiori agenzie dihome health care, abbia annunciato lo sviluppo dell’Health Care Markup Language inambiente SGML, che dovrebbe risolvere i tipi di problemi descritti in questo esempio.

Si è anche dimostrato che rappresentare i dati con un ricco markup ha dei beneficiche vanno oltre lo scambio dei dati; ad esempio è molto utile rappresentare risultati diun esame clinico con tag quali <allergia> oppure <reazione>; infatti chi legge ildocumento è subito allertato (da una applicazione apposita) del fatto che un pazientepuò essere allergico alla penicillina.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Database eterogenei

http://www.html.it/xml/guida/database.htm (2 di 2) [19/06/2001 14.09.47]

Page 17: Corso-Guida - HTML.it - Corso XML

 Processi distribuiti

Un esempio di questa seconda categoria di applicazioni XML è il sistema didistribuzione dei dati adottato dall’industria dei semiconduttori. Ogni grande industrianel campo dei semiconduttori deve mantenere enormi quantità di dati tecnici suicircuiti integrati prodotti. Per abilitare lo scambio di questi dati, anni fa fu formato unconsorzio (il Pinnacles Group) di industrie quali Intel, National Semiconductor, Philips,Texas Instrument e Hitachi; lo scopo era quello di sviluppare uno specifico linguaggiodi markup in ambiente SGML; nel 1995 è stata presentata la prima versione stabile eattualmente le grandi compagnie sono impegnate nel processo d’implementazione diquesto linguaggio. Si potrebbe pensare che l’incremento della popolarità dell’HTMLavesse fatto cambiare idea ai membri del Pinnacles Group, ma le limitazioni di talelinguaggio li hanno convinti che l’idea originale fosse più che corretta. L’idea era cheutilizzare il linguaggio di markup come veicolo per la distribuzione dei dati sui circuitiintegrati potesse permettere non solo la loro visualizzazione, ma anche il progetto deicircuiti stessi. Questo approccio si integra molto bene con la tecnologia dei Javaapplet perché permette ad un ingegnere di accedere al sito Web di una industria disemiconduttori e di scaricarsi non solo i dati di un particolare circuito integrato, maanche un Java applet che permetta di combinare i dati in vari modi.

Questo esempio dei semiconduttori è una buona dimostrazione dei vantaggi dell’XMLperché:

Richiede uno specifico tag set che non può essere ottenuto con il nonestensibile tag set dell’HTML.

Richiede che la rappresentazione dei dati sia indipendente dai sistemi utilizzatinelle varie industrie.

Creare il disegno dei circuiti dai dati è un processo computazionalmente moltointensivo; quindi in un ambiente Web client-server è necessario distribuire ilprocesso computazionale per ridurre al minimo l’interazione fra il client e ilserver e lasciare la parte più intensiva del processo sul client; questo aspettopuò essere riassunto nel seguente slogan: "XML fa lavorare Java".

Bisogna notare che la validazione dei dati in questi processi non è semprenecessaria; infatti la validazione dei dati è cruciale quando questi devono esserememorizzati in un database, ma non sempre questo è richiesto; per rendere questiprocessi il più efficienti possibile, XML permette che la validazione sia un optional inapplicazioni dove non è necessaria.

L’esempio dei semiconduttori mostra come si integrano bene l’XML e Java inapplicazioni in cui i dati devono essere manipolati in modo interessante sul client.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Processi distribuiti

http://www.html.it/xml/guida/processi.htm [19/06/2001 14.09.51]

Page 18: Corso-Guida - HTML.it - Corso XML

 Viste differenti

Un utente può decidere di cambiare la visualizzazione dei dati senza dover scaricaredifferenti formati dal Web server. Una possibile applicazione di questa categoria è undinamico tables of contents (TOC); è possibile attraverso un server Web, presentareall’utente il contenuto di una struttura dati utilizzando un TOC dinamico; con un clickdel mouse su una parte del TOC, l’utente può ottenere livelli di dettaglio più specificidella struttura dati. Un TOC dinamico di questo tipo può essere generato a run-timedirettamente dalla struttura gerarchica dei dati memorizzati in un database;sfortunatamente il ritardo intrinseco della rete Internet, rende il processo diespansione o di contrazione del TOC fastidioso per molti utenti. Una soluzionemigliore è quella di scaricare l’intera struttura TOC sul Web client; quindi l’utente puòespandere, contrarre, navigare nel TOC, supportato da processi molto veloci chegirano direttamente sul suo client.

Un gruppo di studio alla Sun ha implementato questo tipo di soluzione nelJava-based HTML Help browser, ma le limitazioni dell’HTML richiedono al teamingegnose "capriole". In questa applicazione un TOC è costruito manualmente (lecarenze dell’HTML rendono impossibile la generazione automatica del TOCdirettamente dal documento), utilizzando un set di tag inventato per questo proposito.Quindi il TOC è inserito in un commento dentro la pagina HTML, per fare in modo cheil Web browser non abbia problemi di riconoscimento del set di tag nonconvenzionale; un applet Java scaricato con il documento HTML interpreta il markupdel TOC, fornendolo all’utente.

In pratica questa soluzione lavora molto bene; ma in ambiente XML, la creazionemanuale del TOC non è necessaria; naturalmente attraverso un editor è necessariocreare la struttura generale del TOC, ma il TOC specifico di una particolare strutturadati può essere generato a run-time e scaricato nel browser che lo visualizza grazieal Java applet.

La capacità di catturare e trasmettere le informazioni semantiche e strutturale deidati, rende possibile attraverso l’XML, l’implementazione di una grande varietà diquesto tipo di applicazioni; ad esempio:

Con un semplice click del mouse si può optare per visualizzare la versione permacchine Sparc del manuale tecnico del sistema operativo Solaris, o laversione per macchine x86.

Oppure si può optare per visualizzare il manuale in differenti lingueinternazionali.

Un documento che contiene molte annotazioni può essere visualizzato senzaqueste, oppure solo con le annotazioni, oppure sia con il testo che con leannotazioni, semplicemente attraverso un menu di selezione.

Una agenda telefonica ordinata sul Cognome, può istantaneamente essereordinata sul nome.

Questi sono solo alcuni esempi che possono essere implementati in ambiente Webgrazie all’XML.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Viste differenti

http://www.html.it/xml/guida/viste.htm [19/06/2001 14.09.54]

Page 19: Corso-Guida - HTML.it - Corso XML

 Motori di ricerca

XML permette di aggiungere informazioni semantiche al testo:<Autore>Giancarlo Parma</Autore>

questo permette di semplificare la creazione di applicazioni che svolgono operazioniintelligenti con i documenti elettronici; un motore di ricerca sarebbe in grado dieseguire ricerche esplicite nel Web per trovare tutti i documenti in cui GiancarloParma è l’autore; in questo modo si può superare uno dei limiti dell’HTML, in cui i datisono orientati al video e difficili da utilizzare per una elaborazione successiva; aquesto riguardo, il commercio on-line è in pieno sviluppo e sempre più commerciantiin tutto il mondo si stanno affacciando nel Web; però un’indagine su un campione diacquirenti abituali via Internet, ha evidenziato una certa frustrazione da parte deiconsumatori per la difficoltà di trovare i prodotti di cui hanno bisogno; il problemarisiede nel sistema di indicizzazione delle merci, non sempre intuitivo e semplicecome l’utente vorrebbe.

La chiave per risolvere questo tipo di problemi sta in questo slogan: "L’informazioneha bisogno di conoscere se stessa, ma ha anche bisogno di conoscere me";supponiamo di dover implementare una guida TV personalizzata per un sistema viacavo di 500 canali; la guida TV personalizzata deve conoscere sia le preferenze e lecaratteristiche dell’utente (livello di educazione, interessi, professione, età, etc.), sia lecaratteristiche dei programmi trasmessi; queste informazioni devono essere fornite inmodo tale da permettere al motore di ricerca implementato nella guida, di fare unaselezione intelligente dei programmi più interessanti per l’utente; si ha quindi bisognodi un sistema standard che utilizzi uno specifico set di tag con cui poter esprimere lecaratteristiche di un particolare programma (argomento, tipo di utenza a cui è rivolto,attori, lunghezza, data in cui è stato girato, lingua, etc.).

Questo è un semplice esempio che può naturalmente essere esteso ad un qualsiasiambiente in cui l’informazione debba essere ritagliati sui gusti degli utenti; l’XML èun’ottima soluzione anche per questo tipo di problemi e permetterà ad applicazioniWeb di competere realmente con la grande distribuzione dislocata sul territorio.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo I: L'importanza dell'XML - Motori di ricerca

http://www.html.it/xml/guida/motori.htm [19/06/2001 14.09.57]

Page 20: Corso-Guida - HTML.it - Corso XML

 Struttura e sintassi

Una delle caratteristiche principali dell’XML è la possibilità di fornire una struttura a undocumento. Ogni documento XML comprende sia una struttura logica che unastruttura fisica. La struttura logica è simile a un modello che indica quali elementiincludere in un documento e in quale ordine. La struttura fisica contiene i dati effettiviutilizzati in un documento, quali il testo memorizzato nella memoria del computer,un’immagine memorizzata nel WWW e così via. Per comprendere la struttura di undocumento XML, osserviamo questo modello:

Fig 1.5:Un documento XML ha sia una struttura logica che una struttura fisica.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi

http://www.html.it/xml/guida/struttura.htm [19/06/2001 14.10.03]

Page 21: Corso-Guida - HTML.it - Corso XML

 Struttura logica del linguaggio XML

La struttura logica fa riferimento all’organizzazione delle parti di un documento: inaltre parole, indica il modo in cui viene creato un documento in contrapposizione alcontenuto del documento stesso.

Un documento XML è costituito da dichiarazioni, elementi, istruzioni di elaborazione ecommenti. Alcuni componenti sono opzionali, altri sono necessari.

PROLOGO

Il primo elemento strutturale di un documento XML è un prologo opzionale, costituitoda due componenti principali anch’essi opzionali: la dichiarazione XML e ladichiarazione del tipo di documento.

DICHIARAZIONE XML La dichiarazione XML identifica la versione delle specificheXML a cui è conforme il documento. Sebbene la dichiarazione XML sia un elementoopzionale, deve sempre essere inserita in documento XML. Il documento inizia conuna dichiarazione XML di base:<?xml version="1.0"?>

Una dichiarazione XML può inoltre contenere una dichiarazione di codifica (encoding)e una dichiarazione di documento autonomo (standalone). La dichiarazione dicodifica identifica lo schema di codifica dei caratteri, ad esempio UTF-8 o EUC-JP.Schemi di codifica diversi assegnano formati di caratteri o linguaggi diversi. Ladichiarazione di documento autonomo identifica l’esistenza delle dichiarazioni dimarkup esterne al documento. Questo tipo di dichiarazione può assumere valore yeso no.

DICHIARAZIONE DEL TIPO DI DOCUMENTO La dichiarazione del tipo didocumento è costituita da codice di markup che indica le regole grammaticali o ladefinizione del tipo di documento DTD per una particolare classe di documenti.Questa dichiarazione può anche essere diretta a un file esterno che contiene tutta oparte della DTD e deve essere visualizzata dopo la dichiarazione XML e primadell’elemento Document. Queste stringhe di codice aggiungono una dichiarazione deltipo di documento all’esempio:<?xml version="1.0"?><!DOCTYPE Wildflowers SYSTEM "Wldflr.dtd">

L’ELEMENTO DOCUMENT

L’elemento Document contiene tutti i dati di un documento XML inclusi tutti isottoelementi nidificati e le entità esterne. Può essere considerato simile all’unità C:del computer. Tutti i dati del computer sono memorizzati in questa singola unità in cuile cartelle e le sottocartelle contengono le singole parti di dati in una struttura logica edi semplice gestione. Queste stringhe di codice aggiungono un elemento Document,in questo caso l’elemento Plant all’esempio:<?xml version="1.0"?><!DOCTYPE Wildflowers SYSTEM "Wldflr.dtd">

<PLANT> <COMMON>Columbine</COMMON> <BOTANICAL>Aquilegia canadensis</BOTANICAL></PLANT>

La nidificazione è il processo che consente di incorporare un oggetto o un costruttol’uno all’interno dell’altro. Un documento XML può ad esempio contenere elementinidificati e altri documenti. Ogni elemento secondario, cioè un elemento diversodall’elemento Document risiede interamente all’interno del relativo elementoprincipale, così :

XML: Capitolo II: Struttura e Sintassi - Struttura logica del linguaggio XML

http://www.html.it/xml/guida/logica.htm (1 di 2) [19/06/2001 14.10.06]

Page 22: Corso-Guida - HTML.it - Corso XML

<DOCUMENT> <PARENT1> <CHILD1></CHILD1> <CHILD2></CHILD2> </PARENT1></DOCUMENT>

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Struttura logica del linguaggio XML

http://www.html.it/xml/guida/logica.htm (2 di 2) [19/06/2001 14.10.06]

Page 23: Corso-Guida - HTML.it - Corso XML

 Struttura fisica del linguaggio XML

La struttura fisica di un documento XML è costituita da tutto il contenuto deldocumento stesso. Le unità di memorizzazione definite entità, possono essere parteintegrante del documento o possono essere esterne. Ogni entità è identificata da unnome univoco e da un contenuto specifico che può essere costituito da un singolocarattere all’interno del documento o da un file esterno di grandi dimensioni. In terminidi struttura logica di un documento XML, le entità vengono dichiarate nel prologo eviene loro fatto riferimento nell’elemento Document.

Dopo aver dichiarato la DTD, l’entità può essere utilizzata in un punto qualsiasi deldocumento. Un riferimento di entità indica all’elaboratore di recuperare il contenuto diun’entità, come stabilito dalla dichiarazione di entità, e di utilizzarla all’interno deldocumento.

ENTITA’ ANALIZZABILI E NON ANALIZZABILI

Un’entità può essere analizzabile o non analizzabile. Per entità analizzabile si intendeun’entità in grado di essere letta dall’elaboratore di XML che ne consente l’estrazione.Al termine dell’estrazione, questo tipo di entità viene visualizzata come parte del testodel documento nella posizione di riferimento dell’entità stessa. Ad esempio, unadichiarazione del tipo analizzabile potrebbe essere questa :<!ENTITY LR1 "light requirement: mostly shade">

Ogni volta che nel documento viene fatto riferimento a questa entità, quest’ultimaverrà sostituita dal contenuto. Se si desidera modificare il contenuto dell’entità, ènecessario effettuare questa operazione solo nella dichiarazione e la modifica sirifletterà in qualsiasi punto del documento in cui venga utilizzata l’entità.

RIFERIMENTI DI ENTITA’ Il contenuto di ogni entità viene aggiunto al documentoogni volta che viene fatto riferimento a quell’entità. Il riferimento ha la funzione disegnaposto per l’autore del contenuto e l’elaboratore di XML colloca il contenutoeffettivo nei punti di riferimento. Per includere un riferimento, bisogna inserire una ecommerciale (&) e immettere il nome dell’entità seguito da punto e virgole (;).All’interno di un documento assumerebbe il seguente aspetto:<TERM>Wild Ginger has the following &LR1;</TERM>

RIFERIMENTI DI ENTITA’ DI PARAMETRO Un altro tipo di riferimento è quellorelativo all’entità di parametro che utilizza un modulo (%) invece di una ecommerciale anche se l’aspetto è simile a qualsiasi altro riferimento di entità. %CDF;è un esempio di entità di parametro.

Un’entità non analizzabile viene indicata talvolta come entità binaria in quanto ilcontenuto è spesso costituito da un file binario, ad esempio un’immagine, che nonpuò essere interpretato direttamente dall’elaboratore XML. Un’entità non analizzabilerichiede informazioni diverse da quelle incluse in un’entità analizzabile. Vienerichiesta un’annotazione che identifica il formato o il tipo di risorsa per cui l’entitàviene dichiarata. Ad esempio :

<!ENTITY MyImage SYSTEM "Image001.gif" NDATA GIF>

Questa dichiarazione significa che l’entità MyImage è un file binario nell’annotazioneGIF. Perché queste dichiarazione di entità siano valide, anche l’annotazione deveessere dichiarata. La dichiarazione di annotazione consente all’applicazione di XMLdi gestire i file binari esterni. Nel caso dell’annotazione GIF utilizzata nell’esempio,può essere impiegata la dichiarazione di annotazione seguente:<!NOTATION GIF SYSTEM "/Utils/Gifview.exe">

Questa stringa di codice indica all’elaboratore di XML di utilizzare Gifview.exe perelaborare l’entità di tipo GIF ogni volta che viene rilevata. Dopo essere statadichiarata, la dichiarazione di annotazione può essere utilizzata all’interno deldocumento.

XML: Capitolo II: Struttura e Sintassi - Struttura fisica del linguaggio XML

http://www.html.it/xml/guida/fisica.htm (1 di 2) [19/06/2001 14.10.11]

Page 24: Corso-Guida - HTML.it - Corso XML

ENTITA' PREDEFINITE

Nel linguaggio XML alcuni caratteri sono utilizzati per contrassegnare il documento inmodo specifico. Le parentesi angolari (<>) e la barra (/) sono interpretate comemarkup e non come dati di un carattere effettivo:<PLANT>Blodroot</PLANT>

Questi e altri caratteri sono riservati per il markup e non possono essere utilizzaticome contenuto. Se si desidera che questi caratteri siano visualizzati come dati, ènecessario utilizzare determinati codici:

&lt; < (parentesi angolare di apertura)

&gt; > (parentesi angolare di chiusura)

&amp ; & (e commerciale)

&apos; ‘ (apostrofo)

&quot; " (virgolette doppie)

ENTITA’ INTERNE ED ESTERNE

Nel primo caso si tratta di un’entità in cui non esistono unità di memorizzazione fisicaseparate e il cui contenuto viene fornito nella dichiarazione corrispondente, adesempio:<!ENTITY LR1 "light requirement: mostly shade">

Un’entità esterna fa riferimento a un’unità di memorizzazione nella dichiarazionemediante un identificatore pubblico o di sistema. L’identificatore di sistema fornisceun collegamento alla posizione in cui si trova il contenuto dell’entità, ad esempio unURI (Uniform Resource Identifier) come ad esempio:<!ENTITY MyImage SYSTEM "http://www.wildflowers.com/Image001.gif" NDATA GIF>

In questo caso l’elaboratore di XML deve necessariamente leggere il file Image001.gifper recuperare il contenuto di questa entità.

Oltre all’identificatore di sistema, l’entità può includere un identificatore pubblico chefornisce un metodo opzionale e alternativo per il recupero del contenuto di un’entitàda parte dell’elaboratore di XML. Questo identificatore può essere ad esempioutilizzato se l’applicazione è collegata a una libreria del documento disponibilepubblicamente. Se l’elaboratore non è in grado di generare una posizione appropriataper l’identificatore pubblico, è necessario che venga controllato l’URI specificatodall’identificatore di sistema. Ad esempio:<!ENTITY MyImage PUBLIC "-//Wildflowers/TEXT Standard images//EN" "http://www.wildflowers.com/Image001.gif" NDATA GIF>

L’elaboratore di XML verifica l’identificatore pubblico all’interno di un elenco di risorsea cui è collegato e scoprire che non è necessaria una nuova copia dell’entità perchégià disponibile localmente.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Struttura fisica del linguaggio XML

http://www.html.it/xml/guida/fisica.htm (2 di 2) [19/06/2001 14.10.11]

Page 25: Corso-Guida - HTML.it - Corso XML

 Sintassi XML

Le regole strutturali del linguaggio XML si riflettono nelle regole linguistiche o sintassi.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Sintassi XML

http://www.html.it/xml/guida/sintassi.htm [19/06/2001 14.10.21]

Page 26: Corso-Guida - HTML.it - Corso XML

 Apertura e chiusura dei tag

Nel codice HTML un elemento contiene in genere sia tag di apertura che di chiusura.A differenza dell’HTML, l’XML richiede che un tag di chiusura venga utilizzato perogni elemento.

Si consideri ad esempio l’elemento HTML Paragraph che dovrebbe in genereincludere un tag di apertura, il contenuto e un tag di chiusura come mostrato diseguito:<P>Questo è un elemento HTML Paragraph.</P>

Non sempre viene utilizzato un tag di chiusura in questo contesto. Questo avvieneperché l’HTML e il linguaggio di origine SGML consentono di omettere i tag dichiusura senza invalidare il codice.

Poiché un paragrafo in HTML non può essere annidato all’interno di un altroparagrafo, l’elaboratore è in grado di leggere il tag di apertura del paragrafo e dipresumere che indichi anche la fine del paragrafo precedente. Queste tecniche diminimizzazione non sono consentite nel linguaggio XML. Questa caratteristicacostituisce la differenza sintattica più evidente tra i due linguaggi.

IL TAG DI ELEMENTO VUOTO

Il linguaggio XML supporta un collegamento per elementi vuoti, il tag di elementovuoto. Questo tag unisce i tag di apertura e di chiusura per un elemento senza alcuncontenuto. Viene utilizzato un formato speciale: <NOMETAG/>. In questo caso labarra segue il nome del tag, il che non è possibile nel linguaggio HTML.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Apertura e chiusura dei tag

http://www.html.it/xml/guida/tag.htm [19/06/2001 14.10.23]

Page 27: Corso-Guida - HTML.it - Corso XML

 Attributi

Gli attributi consentono di associare valori a un elemento senza che siano consideratiparte del contenuto dell’elemento stesso. Ad esempio osserviamo un comuneelemento HTML e l’utilizzo di un attributo:<A HREF = "http://www.microsoft.com">Microsoft Home Page</A>

In questo caso l’elemento Anchor indicato dal tag <A> contiene un attributodenominato HREF. Il valore dell’attributo è http://www.microsoft.com. Mentre il valorenon viene mai visualizzato dall’utente, l’attributo contiene importanti informazionirelative all’elemento e fornisce la destinazione dell’ancoraggio. Questo formato delnome e del valore mostra il modo in cui sono utilizzati gli attributi nel linguaggio XML.

Questo esempio aggiunge un attributo a uno degli elementi del documento:<?xml version="1.0"?> <!DOCTYPE Wildflowers SYSTEM "Wldflr.dtd">

<PLANT ZONE=3> <COMMON>Columbine</COMMON> <BOTANICAL>Aquilegia canadensis</BOTANICAL> </PLANT>

L’attributo ZONE del tag di apertura <PLANT> segue il formato del nome e del valore.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Attributi

http://www.html.it/xml/guida/attributi.htm [19/06/2001 14.10.26]

Page 28: Corso-Guida - HTML.it - Corso XML

 Documenti XML validi e ben formati

Il linguaggio XML possiede due caratteristiche fondamentali, la capacità di fornire unastruttura ai documenti e di rendere i dati autodescrittivi. Queste caratteristiche nonsarebbero di alcuna utilità se non si potessero far rispettare le regole strutturali egrammaticali.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Documenti XML validi e ben formati

http://www.html.it/xml/guida/doc.htm [19/06/2001 14.10.29]

Page 29: Corso-Guida - HTML.it - Corso XML

 Documenti validi

La definizione del tipo di documento DTD specificata nel prologo delinea tutte leregole relative a un documento. Un documento XML valido segue tutte queste regolerigidamente. Un documento valido è conforme anche a tutti i limiti di validitàidentificati dalle specifiche relative all’XML.

L’elaboratore dovrà comprendere i limiti di validità delle specifiche XML e verificarepossibili violazioni all’interno del documento. Se l’elaboratore trova un errore, devecomunicarlo all’applicazione XML. Dovrà inoltre leggere la DTD, convalidare ildocumento e riportare qualsiasi violazione all’applicazione XML. Dato che questicontrolli possono richiedere tempo e occupare larghezza di banda e poiché laconvalida non sempre è necessaria, il linguaggio XML supporta la nozione didocumento ben formato.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Documenti validi

http://www.html.it/xml/guida/validi.htm [19/06/2001 14.10.31]

Page 30: Corso-Guida - HTML.it - Corso XML

 Documenti ben formati

Anche se ben formato significa che è necessario seguire alcune regole, non èrichiesto la stessa rigidità dei limiti di validità. Il concetto di documento ben formato èrelativamente nuovo in XML. Un documento XML ben formato è più facile da leggereper un programma ed è pronto per la distribuzione in rete. Più specificatamente, idocumenti ben formati hanno queste caratteristiche:

Tutti i tag di apertura e di chiusura corrispondono.●

I tag vuoti utilizzano una sintassi XML speciale.●

Tutti i valori degli attributi sono racchiusi tra virgolette.●

Tutte le entità sono dichiarate.●

Quindi, un documento XML valido rispetta i tag e le norme di nidificazione impostatenel DTD del documento, mentre un documento XML ben formato viene strutturato inmodo appropriato per l’utilizzo da parte di un computer.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo II: Struttura e Sintassi - Documenti ben formati

http://www.html.it/xml/guida/formati.htm [19/06/2001 14.10.34]

Page 31: Corso-Guida - HTML.it - Corso XML

 DTD<

Un documento XML comprende, come sappiamo, il prologo che contiene ladichiarazione XML e la dichiarazione del tipo di documento, che identifica il tipo didocumento specifico elaborato e le regole che controllano il documento completo.Queste regole sono denominate definizione del tipo di documento o DTD ecostituiscono la parte più complessa della dichiarazione del tipo di documento.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - DTD

http://www.html.it/xml/guida/dtd.htm [19/06/2001 14.10.36]

Page 32: Corso-Guida - HTML.it - Corso XML

 Struttura della DTD

Una DTD può essere costituita da due parti: un sottoinsieme DTD esterno e unsottoinsieme DTD interno. Nel primo caso si tratta di una DTD che esiste all’esternodel contenuto del documento, nel secondo caso si tratta di una DTD inclusaall’interno del documento XML. Un documento può contenere una o entrambi i tipi disottoinsiemi. In questo caso il sottoinsieme interno viene elaborato per primo e gliviene data la precedenza su qualsiasi sottoinsieme esterno. Questa funzionalità èutile agli autori che impiegano una DTD esterna, ma che desiderano personalizzarealcune parti della DTD per un’applicazione specifica.

Se si desidera includere un sottoinsieme DTD interno al documento, è sufficientescriverlo nella dichiarazione del tipo di documento. Un sottoinsieme DTD esternotuttavia deve essere incluso mediante un riferimento DTD, che indica al processoredove trovare il sottoinsieme esterno specificando il nome del file DTD. Il riferimentoDTD contiene inoltre informazioni relative all’autore, all’obiettivo e al linguaggioutilizzato nella DTD. Ad esempio:<!DOCTYPE catalog PUBLIC "-//flowers//DTD Standard //EN" http://www.wildflowers.com/dtd/Wldflr.dtd

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Struttura della DTD

http://www.html.it/xml/guida/strutturad.htm [19/06/2001 14.10.39]

Page 33: Corso-Guida - HTML.it - Corso XML

 Creazione di una DTD semplice

Creiamo un documento XML di messaggio di posta elettronica con un sottoinsieme DTDinterno.<?xml version="1.0"?>

<!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)> ]>

<EMAIL> <TO>[email protected]</TO> <FROM>[email protected]</FROM> <CC>[email protected]</CC> <SUBJECT>My first DTD</SUBJECT> <BODY>Hello, World</BODY> </EMAIL>

Si noti che il codice contiene informazioni aggiuntive nella dichiarazione del tipo didocumento. In questo caso si tratta del sottoinsieme DTD interno e identifica gli elementiche possono essere presenti nel documento e il tipo di dati che deve contenere. Sequesto documento viene eseguito visualizzando la pagina XML, il documento avràquesto aspetto:

In questo caso l’elaboratore sta convalidando il documento in base alla DTD. In altritermini la pagina XML che visualizza il documento esegue l’analisi utilizzando unelaboratore di convalida. Ciò significa che l’elaboratore verifica il documento in base alleregole della DTD per accertare che tutto il codice utilizzato nel documento sia valido.

Per verificare il funzionamento della convalida, aggiungiamo un elemento non inclusonella DTD al documento, ad esempio un elemento Signature, al termine del documento,

XML: Capitolo III: Definizione del tipo di documento (DTD) - Creazione di una DTD semplice

http://www.html.it/xml/guida/creadtd.htm (1 di 3) [19/06/2001 14.10.45]

Page 34: Corso-Guida - HTML.it - Corso XML

come:<?xml version="1.0"?>

<!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)> ]>

<EMAIL> <TO>[email protected]</TO> <FROM>[email protected]</FROM> <CC>[email protected]</CC> <SUBJECT>My first DTD</SUBJECT> <BODY>Hello, World</BODY> <SIGNATURE>Bill</SIGNATURE> </EMAIL>

Se si cerca di eseguire questo documento, verrà visualizzato un messaggio di erroreperché l’elaboratore non trova la dichiarazione relativa all’elemento Signature nella DTDsimile a questo :

Element content is invalid according to the DTD/Schema. (Il contenuto dell’elementonon è valido in base alla DTD/Schema.)

Modifichiamo adesso una parte della DTD. Notiamo che la prima dichiarazionedell’elemento è relativa all’elemento Email:<!ELEMENT EMAIL (TO,FROM,CC,SUBJECT,BODY)>

All’interno di questa riga di codice tra le parentesi è presente un elenco degli altrielementi che possono essere contenuti nel documento. Questo elenco viene definitomodello di contenuto e identifica gli elementi secondari che l’elemento Email devecontenere e l’ordine in cui sono elencati.

Ad esempio rimuoviamo l’elemento Subject dal modello di contenuto.<!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO, FROM, CC, BODY)> <!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)>]>

L’esecuzione del documento causerebbe un errore, perché il documento non ha seguitoil modello di documento specificato. Torniamo al documento originale per modificarel’ordine degli elementi From e Cc affinché la parte superiore del documento assumal’aspetto seguente:<EMAIL> <TO>[email protected]</TO> <CC>[email protected]</CC> <FROM>[email protected]</FROM> <SUBJECT>My first DTD</SUBJECT> <BODY>Hello, World</BODY> <SIGNATURE>Bill</SIGNATURE></EMAIL>

Ancora una volta al momento dell’esecuzione del documento, verrà restituito un erroreperché l’elaboratore prevedeva un altro elemento al posto di quello ottenuto.

E’ dunque chiaro che la DTD ha il ruolo di un rigido regolamento per i documenti XML,quindi è importante fare attenzione al momento della creazione delle DTD.

XML: Capitolo III: Definizione del tipo di documento (DTD) - Creazione di una DTD semplice

http://www.html.it/xml/guida/creadtd.htm (2 di 3) [19/06/2001 14.10.45]

Page 35: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Creazione di una DTD semplice

http://www.html.it/xml/guida/creadtd.htm (3 di 3) [19/06/2001 14.10.45]

Page 36: Corso-Guida - HTML.it - Corso XML

 Dichiarazioni di elementi

Ogni dichiarazione di elemento contiene il nome dell’elemento e il tipo di dati definitospecifiche di contenuto costituite da uno tra i quattro tipi seguenti:

Un elenco di altri elementi, denominato modello di contenuto●

La parola chiave EMPTY●

La parola chiave ANY●

Contenuto di vario tipo●

ULTERIORI INFORMAZIONI SUL MODELLO DI CONTENUTO

La DTD dell’esempio precedente iniziava con una dichiarazione di elemento inclusanel modello di contenuto, come illustrato nella parentesi che segue:<!ELEMENT EMAIL (TO, FROM, CC, SUBJECT, BODY)>

L’elemento Email contiene solo sottoelementi o elementi secondari. Per ognielemento del modello di contenuto deve essere visualizzata una dichiarazione dielemento corrispondente nella parte restante della DTD che segue.

DICHIARAZIONE DI ELEMENTO VUOTO

Per dichiarare che un elemento non può avere alcun contenuto, è possibile utilizzarela parola chiave EMPTY nella dichiarazione di elemento, come indicato di seguito:<!ELEMENT TEST EMPTY>

Un elemento Test di un documento che includa la dichiarazione precedente nonpotrebbe mai avere alcun contenuto e sarebbe necessario che fosse indicato comeelemento vuoto, ad esempio <TEST/>. Anche se gli elementi vuoti potrebberosembrare inutili, possono contenere attributi in grado di fornire un contenutosignificativo o di funzioni specifiche all’interno di un documento. Il tag <BR> in HTMLè un esempio di tag di elemento vuoto.

DICHIARAZIONE DI TUTTI GLI ELEMENTI

La specifica di contenuto ANY è esattamente l’opposto della parola chiaveprecedente. Se una dichiarazione di elemento utilizza la parola chiave ANY per lespecifiche di contenuto, quel tipo di elemento potrà avere qualsiasi tipo di contenutoin base alle disposizioni della DTD, disposto in un ordine qualsiasi. La dichiarazionedi tutti gli elementi assume questo aspetto:<!ELEMENT TEST ANY>

CONTENUTO DI VARIO TIPO

Le specifiche di contenuto possono anche essere costituite da un singolo insieme dialternative separate dal simbolo pipe (|). Ad esempio:<!ELEMENT EXAMPLE (#PCDATA|x|y|z)*>

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Dichiarazioni di elementi

http://www.html.it/xml/guida/elem.htm [19/06/2001 14.10.49]

Page 37: Corso-Guida - HTML.it - Corso XML

 Tipi di dati

All’interno del contenuto dei documenti, il linguaggio XML consente di utilizzare dati dicaratteri analizzabili dichiarati mediante la parola chiave #PCDATA e i dati di caratteridichiarati mediante la parola chiave CDATA. I dati di caratteri analizzabili sono dati dicaratteri di markup, contengono quindi tag di markup. I dati di caratteri sono costituitida testo ordinario che può includere caratteri in genere riservati al markup. In baseall’impostazione predefinita, gli elaboratori di XML presuppongono che il contenuto diun file XML sia costituito da dati di caratteri.

Mentre i dati di caratteri analizzabili sono in genere utilizzati nel contenuto di undocumento XML, i dati di carattere possono essere utilizzati nel caso in cui un autoredesideri includere dati che non possono essere analizzati. Per dichiarare una sezionecome dati di carattere, è necessario indicare l’inizio della sezione con la sequenza<![CDATA[ e la fine con due parentesi di chiusura ]]. Tutti i dati che risiedonoall’interno di questo insieme di marcatori verranno interpretati come semplici dati nonanalizzabili.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Tipi di dati

http://www.html.it/xml/guida/tipi.htm [19/06/2001 14.10.52]

Page 38: Corso-Guida - HTML.it - Corso XML

 Simboli relativi alla struttura

Il linguaggio XML utilizza una serie di simboli per specificare la struttura di unadichiarazione di elementi. La tabella seguente identifica i simboli disponibili, lo scopo diogni simbolo, un esempio di come vengono utilizzati e il loro significato.

Simbolo Scopo Esempio Significato

Parentesi Racchiudono unasequenza, un gruppo dielementi o una serie dialternative

(content1,content2)

L’elemento devecontenere la sequenzacontent1 e content2.

Virgola Separa gli elementi diuna sequenza eidentifica l’ordine in cuidevono esserevisualizzati

(content1,content2,content3)

L’elemento devecontenere content1,content2 e content3nell’ordine specificato.

Pipe Separa gli elementi inun gruppo di alternative

(content1|

content2|

content3)

L’elemento devecontenere content1,content2 o content3.

Punto didomanda

Indica che un elementodeve essere visualizzatouna sola volta o nonapparire mai

content1? L’elemento può contenerecontent1. Se content1viene visualizzato, deveapparire una sola volta.

Asterisco Indica che l’elementopuò essere visualizzatoogni volta che l’autoredesidera

content1* L’elemento può contenerecontent1. Se vienevisualizzato, può apparireuna o più volte.

Segno più Indica che un elementodeve essere visualizzatouna o più volte

content1+ L’elemento devecontenere content1 unavolta, ma può esserevisualizzato anche più diuna volta.

Nessunsimbolo

Indica che deve esserevisualizzato unelemento

content1 L’elemento devecontenere content1.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Simboli relativi alla struttura

http://www.html.it/xml/guida/simboli.htm [19/06/2001 14.10.56]

Page 39: Corso-Guida - HTML.it - Corso XML

 Attributi

Oltre alla definizione della struttura di un elemento e al tipo di contenuto, è possibileassociare attributi a un elemento. Gli attributi forniscono informazioni aggiuntive relativeall’elemento o al contenuto dell’elemento.

DICHIARAZIONI DI ATTRIBUTO

Nel linguaggio XML gli attributi vengono dichiarati nella DTD utilizzando la sintassiseguente:<!ATTLIST ElementName AttributeName Type Default>

In questo caso <!ATTLIST> rappresenta il tag che identifica una dichiarazione diattributo. La voce ElementName rappresenta il nome dell’elemento a cui vengonoapplicati gli attributi, La voce AttributeName rappresenta il nome dell’attributo. La voceType identifica il tipo di attributo dichiarato. La voce Default specifica le impostazionipredefinite relative all’attributo.

Ecco elencati i tipi di attributi disponibili per il linguaggio XML:Tipo di attributo Utilizzo

CDATA In questo attributo possono essere utilizzati solo dati in formatocarattere.

ENTITY Il valore dell’attributo deve fare riferimento a un’entità binariaesterna dichiarata nella DTD.

ENTITIES E’ equivalente all’attributo ENTITY, ma consente l’utilizzo di piùvalori separati da spazi.

ID Il valore dell’attributo deve essere un identificatore univoco. Seun documento contiene attributi ID con lo stesso valore,l’elaboratore produrrà un errore.

IDREF Il valore deve essere un riferimento a un ID dichiarato in un altropunto del documento. Se l’attributo non corrisponde al valoredell’ID specificato, l’elaboratore produrrà un errore.

IDREFS E’ equivalente all’attributo IDREF, ma consente l’utilizzo di piùvalori separati da spazi.

NMTOKEN Il valore dell’attributo consiste in una qualsiasi combinazione dicaratteri del token del nome, rappresentati da lettere, numeri,punti trattini, due punti o caratteri di sottolineatura.

NMTOKENS E’ equivalente all’attributo NMTOKEN, ma consente l’utilizzo dipiù valori separati da spazi.

NOTATION Il valore dell’attributo deve fare un riferimento a un’annotazionedichiarata in un altro punto della DTD. La dichiarazione puòanche essere costituita da un elenco di annotazioni. Il valoredeve corrispondere a una delle annotazioni dell’elenco. Ogniannotazione deve avere la relativa dichiarazione nella DTD.

Enumerated Il valore dell’attributo deve corrispondere a uno dei valori inclusi.Ad esempio: <!ATTLIST MyAttribute (content1|content2)>.

La parte finale della dichiarazione di attributo è l’impostazione predefinita per il valoredell’attributo. Le impostazioni predefinite per i quattro tipi sono:

Impostazionepredefinita

Utilizzo

XML: Capitolo III: Definizione del tipo di documento (DTD) - Attributi

http://www.html.it/xml/guida/attrib.htm (1 di 2) [19/06/2001 14.11.00]

Page 40: Corso-Guida - HTML.it - Corso XML

#REQUIRED Ogni elemento contenente questo attributo devespecificarne un valore. Un valore mancante puòcausare un errore.

#IMPLIED Questo attributo è opzionale. L’elaboratore puòignorare questo attributo se non viene rilevato alcunvalore.

#FIXED fixedvalue Questo attributo deve avere il valore fixedvalue. Sel’attributo non è incluso nell’elemento, viene stabilito ilvalore fixedvalue.

Default Identifica un valore predefinito per un attributo. Sel’elemento non include l’attributo, viene stabilito ilvalore default.

Nel documento d’esempio mostriamo l’utilizzo degli attributi aggiungendo alcunedichiarazioni di attributo alla DTD:<?xml version="1.0"?>

<!DOCTYPE EMAIL [ <!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)> <!ATTLIST EMAIL LANGUAGE(Western|Greek|Latin|Universal) " Western"

ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL|LOW|HIGH) "NORMAL">

<!ELEMENT TO (#PCDATA)> <!ELEMENT FROM (#PCDATA)> <!ELEMENT CC (#PCDATA)>

<!ELEMENT BCC (#PCDATA)> <!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE">

<!ELEMENT SUBJECT (#PCDATA)> <!ELEMENT BODY (#PCDATA)>]>

In questo esempio sono stati aggiunti attributi all’elemento Email e al nuovo elementoBcc. Il primo attributo aggiunto all’elemento Email è LANGUAGE. Questo attributo puòcontenere una tra le numerose opzioni. L’attributo conterrà il valore predefinito Westernse non verrà specificato un altro valore. L’attributo successivo dell’elemento Email èENCRYPTED. Questo elemento deve contenere i dati di carattere e poichél’impostazione predefinita è #IMPLIED, l’elaboratore ignorerà questo attributo se nonverrà specificato alcun valore. L’ultimo attributo dell’elemento Email è PRIORITY.Questo attributo può assumere uno dei tre valori NORMAL, LOW e HIGH. Il valorepredefinito è NORMAL.

L’attributo HIDDEN è stato incluso nell’elemento Bcc. Questo attributo è di tipo CDATAe il valore predefinito di #FIXED viene specificato dopo la parola chiave #FIXED. Questoattributo deve sempre specificare il valore nella DTD, in questo caso TRUE.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Attributi

http://www.html.it/xml/guida/attrib.htm (2 di 2) [19/06/2001 14.11.00]

Page 41: Corso-Guida - HTML.it - Corso XML

 Entità

Oltre all’entità generale viste nel capitolo precedente esiste un altro tipo di entità definitaentità di parametro.

La maggior parte delle entità deve essere dichiarata nella DTD. Alcune entità predefinitesono incorporate nel codice XML e sono utilizzate per visualizzare i caratteri generalmenteimpiegati per il markup. Le dichiarazioni di entità seguono la stessa sintassi di base utilizzatadalle altre dichiarazioni:<!ENTITY EntityName EntityDefinition>

Le entità della DTD possono essere analizzabili o non analizzabili. Le entità del primo tipo oentità di testo contengono testo che farà parte del documento XML. Le entità del secondotipo o entità binarie sono in genere riferimenti a un file binario esterno. Le entità nonanalizzabili possono anche essere costituite da testo non analizzabile ed è quindi preferibilepensare a queste entità come elementi che non sono stati creati per essere considerati partedel codice XML.

ENTITA’ INTERNE

Le entità interne vengono dichiarate nella DTD e includono il contenuto che verrà utilizzatonel documento. Ad esempio, questa riga di codice aggiunge un’entità interna definitaSIGNATURE:<!ENTITY SIGNATURE "Bill">

Ogni volta che viene fatto riferimento all’entità nel documento, &SIGNATURE, quest’ultimaverrà sostituita dal relativo contenuto, in questo caso Bill.

ENTITA’ ESTERNE: PAROLE CHIAVE SYSTEM E PUBLIC

Le entità esterne fanno riferimento a file esterni, anche ad altri file XML. Ad esempio, questaentità fa riferimento a un file GIF esterno e verrà visualizzata nel corpo del documento XML:<!ENTITY IMAGE1 SYSTEM "Xmlquot.gif" NDATA GIF>

Una dichiarazione di entità esterna può includere la parola chiave SYSTEM o PUBLIC. MolteDTD sono sviluppate localmente, vengono cioè sviluppate per un’azienda o organizzazionespecifica o per un sito Web particolare. In questo caso andrebbe utilizzata la parola chiaveSYSTEM. Questa parola chiave è seguita da un URI (Uniform Resource Identifier) che indicaall’elaboratore dove reperire l’oggetto indicato nella dichiarazione. Nell’esempio precedente, ilnome di file era utilizzato perché il codice aveva impiego locale. Nella dichiarazione chesegue, l’URI è un indirizzo Web che collega alla posizione dei file di riferimento:<!ENTITY IMAGE1 SYSTEM http://XMLCo.com/Images/Xmlquot.gif NDATA GIF>

Alcune DTD sono standard stabiliti disponibili per un’ampia gamma di utenti. Sarebbenecessario utilizzare la parola chiave PUBLIC, seguita dall’identificatore pubblico chel’elaboratore può impiegare se è disponibile una libreria standard. Dopo l’identificatorepubblico è inserito un URI, simile a quello utilizzato con la parola chiave SYSTEM. Unesempio potrebbe essere questo:<!ENTITY IMAGE1 PUBLIC "-//XMLCo//TEXT Standard Images//EN" "http://XMLCo.com/Images/Xmlquot.gif" NDATA GIF>

ENTITA’ ESTERNE: ANNOTAZIONI E DICHIARAZIONI DI ANNOTAZIONI

Consideriamo la dichiarazione di entità:<!ENTITY IMAGE1 SYSTEM "Xmlquot.gif" NDATA GIF>

Un’annotazione NDATA GIF viene visualizzata nella parte finale della dichiarazione. Questaannotazione indica all’elaboratore il tipo di oggetto a cui viene fatto riferimento. A questopunto se viene semplicemente aggiunta la dichiarazione di entità alla DTD e viene eseguitaattraverso l’elaboratore, verrà visualizzato un messaggio di errore simile al seguente:

XML: Capitolo III: Definizione del tipo di documento (DTD) - Entita'

http://www.html.it/xml/guida/entita.htm (1 di 2) [19/06/2001 14.11.04]

Page 42: Corso-Guida - HTML.it - Corso XML

Declaration ‘IMAGE1’ contains reference to undefined notation ‘GIF’.

(La dichiarazione ‘IMAGE1’ contiene un riferimento a un’annotazione ‘GIF’ non identificata.)

L’errore si verifica perché la dichiarazione di entità fa riferimento a un tipo di file binario eall’elaboratore non è stato indicato come operare con questo file. Si tratta di un’entità nonanalizzabile che l’elaboratore non è in grado di comprendere. In questo caso l’annotazionedeve essere dichiarata come dichiarazione di annotazione. Una dichiarazione di annotazioneindica all’elaboratore come operare con un tipo di file binario specifico. Le dichiarazioni diannotazione hanno il seguente formato:<!NOTATION GIF SYSTEM "Iexplore.exe">

Questa dichiarazione indica all’elaboratore di utilizzare il programma Iexplore.exe perelaborare il file GIF ogni volta che nella DTD ne viene rilevato uno.

ENTITA’ DI PARAMETRO

Anche se le entità di parametro funzionano in modo simile alle entità generali, possiedonoun’importante differenza sintattica. Le entità di parametro utilizzano il simbolo di percentuale(%) nelle dichiarazioni e nei riferimenti. Nella dichiarazione di entità il simbolo di percentualesegue la parola chiave !ENTITY, ma precede il nome dell’entità come illustrato di seguito. Sinoti che è richiesto uno spazio singolo prima e dopo il simbolo &:<!ENTITY % ENCRYPTION "40bit CDATA #IMPLIED 128bit CDATA #IMPLIED">

E’ ora possibile fare riferimento a questa entità in un altro punto della DTD. Ad esempio:<!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)><!ATTLIST EMAIL LANGUAGE(Western|Greek|Latin|Universal) "Western" ENCRYPTED %ENCRYPTION; PRIORITY (NORMAL|LOW|HIGH) "NORMAL">

Il riferimento all’entità di parametro &ENCRYPTION; utilizza lo stesso formato di base delriferimento di entità generale, a eccezione del simbolo % che sostituisce il simbolo &.

Le entità di parametro possono rivelarsi un metodo utile per creare uno stile personaleall’interno delle DTD e rendere queste ultime più concise e meglio organizzate. Tuttaviaqueste entità dovrebbero essere utilizzate con cautela, dato che possono creare situazionicomplesse all’interno di un documento in grado di rendere difficoltosa la gestione.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Entita'

http://www.html.it/xml/guida/entita.htm (2 di 2) [19/06/2001 14.11.04]

Page 43: Corso-Guida - HTML.it - Corso XML

 Le parole chiave IGNORE e INCLUDE

Le parole chiave IGNORE e INCLUDE possono essere utilizzate dagli autori per"attivare" o "disattivare" porzioni della DTD. IGNORE e INCLUDE sono utilizzate nellaDTD per creare all’interno del documento condizioni adatte a vari scopi. L’utilizzo diIGNORE e INCLUDE consente ad esempio di verificare diverse strutture durante ilcontrollo delle variazioni. IGNORE e INCLUDE sono utilizzati in modo simile aCDATA:<![IGNORE [DTD section]]><![INCLUDE [DTD section]]>

Nessuna parola chiave può apparire all’interno di unadichiarazione e ogni sezione della DTD deve includere unadichiarazione completa o una serie di dichiarazioni, commenti espazi vuoti. Vediamo un esempio dell’utilizzo delle parolechiave:

<![IGNORE[<!ELEMENT BCC (#PCDATA)><!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE">]]><![INCLUDE[<!ELEMENT SUBJECT (#PCDATA)>]]>

Questo frammento di codice indica all’elaboratore di ignorarel’elemento Bcc e l’elenco di attributi e includere l’elementoSubject.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Le parole chiave Ignore e Include

http://www.html.it/xml/guida/ignore.htm [19/06/2001 14.11.08]

Page 44: Corso-Guida - HTML.it - Corso XML

 Istruzioni di elaborazione

Le istruzioni di elaborazione (PI, Processing Instructions) forniscono indicazioniall’applicazione che elabora il documento. Queste istruzioni vengono in generevisualizzate nel prologo, ma possono essere posizionate in un punto qualsiasi deldocumento XML. L’istruzione di elaborazione più comune è la dichiarazione XMLinclusa nella parte superiore del documento di esempio:<?xml version=1.0"?>

Le istruzioni di elaborazione sono scritte con la sequenza <?, seguita dal nomedell’istruzione, da un valore o da un’istruzione e sono chiuse con ?>. Il nome o ladestinazione di PI identifica quale applicazione dovrebbe seguire le istruzioni. Esempidi istruzioni di elaborazione sono:<?AVI CODEC="VIDEO1" COLORS="256"?><?WAV COMPRESSOR="ADPCM" BITS="8" RESOLUTION="16"?>

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Istruzioni di elaborazione

http://www.html.it/xml/guida/pi.htm [19/06/2001 14.11.10]

Page 45: Corso-Guida - HTML.it - Corso XML

 Commenti

I commenti rappresentano una delle parti generiche della DTD. Anche se i commentinon sono necessari, vengono ampiamente utilizzati per migliorare la leggibilità di undocumento. E’ possibile aggiungere commenti per spiegare lo scopo di unadeterminata sezione della DTD, per indicare il significato dei riferimenti e per altriobiettivi. I commenti si rivelano utili come promemoria durante le fasi della codifica, sesi verifica la necessità di tornare alla DTD ed effettuare le modifiche oppure se unaltro autore utilizza il documento. I commenti non sono vincolati alla DTD e possonoessere utilizzati in tutto il documento. Dato che i commenti sono a vantaggioesclusivo del lettore, qualsiasi elaboratore di XML ne ignorerà la presenza. Icommenti vengono visualizzati tra tag di commento (<!-- -->) e possono includerequalsiasi combinazione di testo, markup e simboli a eccezione di combinazioni disimboli che costituiscono i tag di commento.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Commenti

http://www.html.it/xml/guida/commenti.htm [19/06/2001 14.11.13]

Page 46: Corso-Guida - HTML.it - Corso XML

 DTD esterne

E’ possibile separare documenti e DTD per semplificarne l’utilizzo. Dopo aver creatouna DTD separata, è possibile farvi riferimento all’interno di qualsiasi documento.

Per separare una parte della DTD nel documento XML basta tagliare semplicementela porzione di DTD e incollarla nel nuovo file di testo. Il nuovo nome di file dovrebbeavere estensione .dtd.

La separazione della DTD dal documento riduce notevolmente la dimensione del filedel documento XML e fornisce altri vantaggi. Dato che ora la DTD è un file separato,può essere utilizzata in altri documenti da chiunque vi abbia accesso. Un altro autorepuò creare un documento utilizzando la stessa struttura con un contenutocompletamente diverso. Poiché il nuovo documento seguirebbe la DTD, potrebbeessere letto da qualsiasi applicazione in grado di elaborare la DTD.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - DTD esterne

http://www.html.it/xml/guida/dtdest.htm [19/06/2001 14.11.15]

Page 47: Corso-Guida - HTML.it - Corso XML

 Vocabolari

Un vocabolario XML è un insieme di elementi e della struttura di un tipo di documentospecifico. I vocabolari sono definiti in una DTD che rappresenta il regolamento perquel vocabolario. I vocabolari sono utilizzati correntemente su Internet e in alcuneorganizzazioni e aziende. Uno dei vocabolari principali e maggiormente noti è ilChannel Definition Format (CDF) impiegato per definire le pagine Web progettate peressere inviate automaticamente agli utenti client.

I vocabolari sono adatti per le applicazioni verticali e per lo sviluppo di sistemi diinterscambio di dati per aziende specifiche, ad esempio telecomunicazioni, prodottifarmaceutici e istituzioni legali.

CHANNEL DEFINITION FORMAT

Channel Definition Format (CDF) viene utilizzato per descrivere il comportamentodelle pagine Web in un modello di invio automatico. CDF viene utilizzato da MicrosoftInternet Explorer e descrive i processi quali pianificazioni di download,visualizzazione della barra dei canali, utilizzo delle pagine e frequenza degliaggiornamenti.

OPEN FINANCIAL EXCHANGE

Open Financial Exchange (OFX) è correntemente un’applicazione SGML utilizzata dapacchetti software per comunicare con le istituzioni finanziarie. OFX sarà prestobasato sul linguaggio XML.

OPEN SOFTWARE DESCRIPTION

Open Software Description (OSD) è un formato di dati utilizzato per consentirel’aggiornamento e l’installazione di software tramite Internet. Questo formato èparticolarmente utile per notificare agli utenti la disponibilità di nuove versioni disoftware e per fornire un meccanismo per ottenere i programmi da Internet.

ELECTRONIC DATA INTERCHANGE

Electronic Data Interchange (EDI) viene utilizzato correntemente in tutto il mondo perlo scambio di dati e per il supporto delle transazioni. Nell’implementazione correntetuttavia può essere utilizzato solo da organizzazioni che hanno impostato lo scambiodi informazioni mediante sistemi compatibili. Il linguaggio XML può ampliare la portatadi EDI e renderlo più accessibile a un maggior numero di organizzazioni.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Vocabolari

http://www.html.it/xml/guida/vocabo.htm [19/06/2001 14.11.18]

Page 48: Corso-Guida - HTML.it - Corso XML

 Spazio dei nomi XML (XMLNamespace)

Come sappiamo XML è un linguaggio per definire linguaggi, cioè insiemi di marcatoripersonalizzati e le loro sintassi di utilizzo. Questa operazione avviene attraverso iDTD che definiscono gli insiemi di marcatori che saranno utilizzati nei documenti e leloro regole di nidificazione. I marcatori XML che saranno definiti nei DTD adottati suisiti Web possono anche non essere inventati dai Webmaster, ma possonoappartenere a repertori standard per i vari domini applicativi (i cosiddetti XMLnamespace), garantendo l’uniformità sintattica delle pagine Web necessaria alfunzionamento degli agenti.

I Namespace permettono la creazione e l’uso di marcatori ambigui, ovvero con lostesso nome, ma in riferimento a significati e ambienti diversi utilizzando costrutti connomi non equivoci. Pensiamo per esempio a documenti di una rivista in cui la parola"titolo" a secondo del contesto può referenziare il titolo di una rivista, ma anche ilruolo di un giornalista all’interno della struttura aziendale.

I dati, ovvero il contenuto di un documento XML, vengono recuperati analizzando isingoli nodi all’interno del documento, meccanismo consentito dal fatto che lastruttura gerarchica dei documenti XML e le regole di validità e di ben formato chegestiscono la creazione dei documenti XML garantiscono che ogni nodo presente inun documento è unico. Questo garantisce a sua volta che esista un solo riferimentoper ciascun nodo. L’utilizzo di documenti XML in un ambiente di collaborazionepotrebbe tuttavia dare luogo a potenziali problemi. Ad esempio, due o più documentipotrebbero contenere elementi con gli stessi nomi, ma con semantica differente. Idocumenti possono essere strutturati nello stesso modo. Qualora fosse necessarioutilizzare entrambi i documenti in un unico ambiente, la sovrapposizione di elementisarebbe causa di confusione. Consideriamo ad esempio:<AUTOMOBILE> <ID>232-HDF</ID></AUTOMOBILE>

<DOG> <ID>Rover</ID></DOG>

Gli elementi Automobile e Dog contengono un elemento Id ciascuno, ma tale Idassume significato differente nei due casi. Se questi elementi provenienti da fontidiverse sono stati combinati in un solo documento, gli elementi Id perdono ilsignificato originale.

Questo problema, tutt’altro che trascurabile, potrebbe aggravarsi parallelemente alladiffusione dell’utilizzo del linguaggio XML sul Web e nelle organizzazioni. Lasoluzione è offerta dagli spazi dei nomi, che consentono di creare nomi univociindipendentemente dalla posizione in cui gli elementi vengono utilizzati, garantendol’uniformità sintattica delle pagine Web.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Spazio dei nomi XML (XML Namespace)

http://www.html.it/xml/guida/spazio.htm [19/06/2001 14.11.20]

Page 49: Corso-Guida - HTML.it - Corso XML

 Creazione di nomi univoci tramitegli spazi dei nomi XML

La definizione spazio dei nomi è utilizzata dal programmatore tradizionale perindicare un gruppo di nomi in cui non esistono duplicati. Poiché la natura dellinguaggio XML consente di definire set di tag personalizzati, che potrebbero darluogo a nomi duplicati nei documenti XML, nel linguaggio XML gli spazi dei nomioffrono caratteristiche aggiuntive. Costituiscono infatti una metodologia per lacreazione di nomi universalmente univoci in un documento XML identificando i nomidegli elementi con una risorsa esterna univoca. Nel linguaggio XML uno spazio deinomi è pertanto una raccolta di nomi identificata da un URI e può essere qualificato onon qualificato.

NOMI QUALIFICATI

Nell’XML un nome qualificato si compone in due parti: il nome dello spazio dei nomi ela parte locale. Il nome dello spazio dei nomi, ovvero un URI, definisce lo spazio deinomi, mentre la parte locale corrisponde al nome dell’elemento o dell’attributo deldocumento locale. Poiché l’URI è sempre univoco, il nome dello spazio dei nomi creainsieme alla parte locale un nome di elemento universalmente univoco. Per poterutilizzare uno spazio dei nomi in documento XML, è necessario includere unadichiarazione dello spazio dei nomi nel prologo del documento. E’ inoltre possibileincludere nella dichiarazione un prefisso dello spazio dei nomi. Utilizzando i due punti(:), il prefisso può essere aggiunto alla parte locale in modo da associarla al nomedello spazio dei nomi. Nel documento riportato nell’esempio che segue, i due spazidei nomi vengono dichiarati con prefissi, quindi utilizzati nel documento.<?xml version="1.0"?><?xml:namespace ns=http://inventory/schema/ns prefix="inv"?><?xml:namespace ns=http://wildflowers/schema/ns prefix="wf"?><PRODUCT> <PNAME>Test1</PNAME> <inv:quantity>1</inv:quantity> <wf:price>323</wf:price> <DATE>6/1</DATE></PRODUCT>

In questo esempio di codice, i prefissi vengono utilizzati per identificare elementiappartenenti allo spazio dei nomi selezionato. Si otterranno in questo modo nomiunivoci, ma anche la conservazione del valore semantico dei nomi. Gli elementiinv:quantity e wf:price contengono nomi completamente qualificati che risulterannounivoci indipendemente dalla posizione in cui sono stati utilizzati. Il prefisso è partedel nome dell’elemento e deve essere sempre incluso in modo tale da indicare chel’elemento appartiene allo spazio dei nomi.

NOMI NON QUALIFICATI

Un nome non qualificato non dispone di nome associato al nome dello spazio deinomi. I nomi di elementi XML tipici non sono qualificati poiché non specificano unospazio dei nomi.

AREA DI VALIDITA’ DELLO SPAZIO DEI NOMI

Il prologo non è l’unica opzione disponibile per la posizione della dichiarazione dellospazio dei nomi. E’ infatti possibile includere tale dichiarazione direttamenteall’interno di un elemento appartenente allo spazio dei nomi. A questo scopo, èsufficiente includere la dichiarazione la prima volta che si utilizza l’elemento, comemostrato nell’esempio che segue:<PRODUCT> <PNAME>Test1</PNAME> <inv:quantity>1</inv:quantity> <wf:price xmlns:wf="urn:shemas-wildflowers-com:xml-prices">

XML: Capitolo III: Definizione del tipo di documento (DTD) - Creazione di nomi univoci tramite gli spazi dei nomi XML

http://www.html.it/xml/guida/spazio2.htm (1 di 3) [19/06/2001 14.11.24]

Page 50: Corso-Guida - HTML.it - Corso XML

323 </wf:price> <DATE>6/1</DATE></PRODUCT>

Lo spazio dei nomi risulta quindi disponibile nel contesto dell’elemento specifico,ovvero tale elemento e tutti i relativi elementi secondari possono utilizzare lo spaziodei nomi. Se dichiarato nell’elemento del documneto, lo spazio dei nomi può essereutilizzato nell’intero documento.

SPAZIO DEI NOMI PREDEFININTI

E’ possibile impostare come predefinito uno spazio dei nomi dichiarandolo senzal’assegnazione di un prefisso. In questo caso, lo spazio dei nomi viene consideratoall’interno del contesto dell’elemento in cui è stato dichiarato, come mostrato nelseguente esempio di codice:<CATALOG> <INDEX> <ITEM>Trees</ITEM> <ITEM>Wildflowers</ITEM> § </INDEX>

<PRODUCT xmlns:wf="urn:shemas-wildflowers-com> <NAME>Bloodroot</NAME> <QUANTITY>10</QUNTITY> <PRICE>$2.44</PRICE> </PRODUCT></CATALOG>

L’elemento Product contiene la dichiarazione di uno spazio dei nomi senza prefissoassociato. In quanto tale, lo spazio dei nomi viene utilizzato per l’elemento Product etutti i relativi elementi secondari, ma per nessun altro elemento oltre Product.

DICHIARAZIONE DELLO SPAZIO DEI NOMI COME URL O URN

In quanto univoci, gli URL possono essere utilizzati per rendere univoci i nomi deglispazi dei nomi. Se uno spazio dei nomi è mappato a un URL, tale spazio dei nomirisulterà univoco nell’intero contesto in cui viene utilizzato.

Un’altra situazione tipica è rappresentata dall’esistenza di uno schema dello spaziodei nomi che identifica tutti i nomi contenuti nello spazio dei nomi e il modo in cuisono strutturati. Il nome dello spazio dei nomi XML non fornisce alcun meccanismoper il recupero di tale schema, meccanismo che tuttavia può essere reso disponibileutilizzzando gli URN (Uniform Resource Names).

Un URN consente di individuare e recuperare un file di schema che definisce undeterminato spazio dei nomi. Sebbene funzionalità simili possano essere fornite daun comune URL, a questo scopo l’URN è più efficiente e facile da gestire poiché puòessere riferito a più URL.

Il codice seguente mostra l’utilizzo di un URN nel contesto di uno spazio dei nomiXML:<CATALOG> <INDEX> <ITEM>Trees</ITEM> <ITEM>Wildflowers</ITEM> § </INDEX>

<wf:product xmlns:wf="urn:shemas-wildflowers-com> <wf:name>Bloodroot>/wf:name> <QUANTITY>10</QUNTITY> <PRICE>$2.44</PRICE> </wf:product></CATALOG>

Lo schema relativo allo spazio dei nomi è disponibile nella posizione identificatadall’URN e l’applicazione di elaborazione è in grado di recuperare tale schema. Loschema contiene informazioni dettagliate relative agli elementi dello spazio dei nomiutilizzabili nel documento.

SPAZIO DEI NOMI DEGLI ATTRIBUTI

XML: Capitolo III: Definizione del tipo di documento (DTD) - Creazione di nomi univoci tramite gli spazi dei nomi XML

http://www.html.it/xml/guida/spazio2.htm (2 di 3) [19/06/2001 14.11.24]

Page 51: Corso-Guida - HTML.it - Corso XML

Gli spazi dei nomi sono applicabili così come agli elementi, anche agli attributi. Adesempio:<wf:product TYPE="plant" class:kingdom="plantae" xmlns:wf="urn:wildflowers:schemas:product" xmlns:class="urn:bio:botany:classification"> <PNAME>Test1</PNAME> <QUANTITY>1</QUNTITY> <PRICE>323</PRICE> <DATE>6/1</DATE></wf:product>

In questo esempio sia all’elemento wf:product che all’attributo class:kingdom sonoassociate dichiarazioni degli spazi dei nomi. Lo spazio dei nomi degli attributi vieneutilizzato in modo simile allo spazio dei nomi degli elementi.

L’importanza degli spazi dei nomi aumenta parallelemente allo sviluppo di nuovivocabolari e di nuove tecnologie basate sul linguaggio XML. Sono comunque giàtecnologie che utilizzano gli spazi dei nomi, tra cui XML-Data, i tipi di dati XML e illinguaggio SMIL (Syncronized Multimedia Integration Language).

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo III: Definizione del tipo di documento (DTD) - Creazione di nomi univoci tramite gli spazi dei nomi XML

http://www.html.it/xml/guida/spazio2.htm (3 di 3) [19/06/2001 14.11.24]

Page 52: Corso-Guida - HTML.it - Corso XML

 Ampliare i documenti XMLAmpliare idocumenti XML

Abbiamo visto come, seguendo la specifica del linguaggio XML, sia possibile crearedei DTD personali e dei documenti XML. Il fatto che sia possibile creare dei DTDpersonali, rende l’XML un metalinguaggio, cioè un linguaggio di livello superiore concui è possibile creare altri linguaggi. Il gruppo di lavoro del W3C, fornita la primaversione stabile della specifica XML, ha orientato gran parte dei suoi sforzi proprionello sviluppo di linguaggi di markup basati sull’XML, orientati ad argomenti che fannocontorno all’ambiente in cui l’XML si trova ad operare. Anche in questo caso lo scopodel gruppo di lavoro è quello di creare degli standard per argomenti fondamentaliquali i collegamenti ipertestuali, la rappresentazione di strutture dati relazionali o adoggetti e i fogli di stile.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML

http://www.html.it/xml/guida/amplia.htm [19/06/2001 14.11.28]

Page 53: Corso-Guida - HTML.it - Corso XML

 XSL: l'XML con i fogli di stile

L’XML ha sempre riguardato i dati. L’XML commenta semanticamente un documento,fornendo la struttura e il contesto per i dati che contiene. Non è tuttavia indicato qualedovrebbe essere l’aspetto dei dati visualizzati. L’utilizzo diretto del linguaggio HTML ècertamente un modo efficace per formattare i documenti XML, ma esisteun’alternativa: XSL (Extensible Stylesheet Language), ossia un linguaggio creatoesclusivamente per l’utilizzo con i documenti XML. L’XSL è un’applicazione di XML,quindi la sua struttura e la sua sintassi sono identiche a quelle dell’XML.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - XSL: l'XML con i fogli di stile

http://www.html.it/xml/guida/xsl.htm [19/06/2001 14.11.31]

Page 54: Corso-Guida - HTML.it - Corso XML

 Nozioni fondamentali sul linguaggioXSL

L’XSL si basa su un meccanismo di fogli di stile. I fogli di stile vengono generalmenteusati per applicare in modo coerente stili o formattazione ai documenti. Il tipo di fogliodi stile più utilizzato sul Web è basato sulla specifica dei fogli di stile CSS (CascadingStyle Sheets). Questi permettono agli utenti di definire le classi di stile che possonoessere applicate al documento HTML.

L’XSL offre lo stesso livello di formattazione e di flessibilità dei fogli di stile CSS emolte altre caratteristiche, ma utilizza metodi diversi. L’XSL si basa su modelli, chesono sotto alcuni aspetti analoghi alle regole dei fogli di stile e che offrono ilmeccanismo per l’applicazione di informazioni di formattazione ai dati che rispondonoa un particolare pattern.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Nozioni fondamentali sul linguaggio XSL

http://www.html.it/xml/guida/nozioni.htm [19/06/2001 14.11.33]

Page 55: Corso-Guida - HTML.it - Corso XML

 Componenti del linguaggio XSL

Il linguaggio XSL è composto da due componenti: un linguaggio di trasformazioneXSL e una specifica (vocabolario) di formattazione di un oggetto. Questi due elementisono distinti, ma è possibile utilizzarli insieme per ottenere funzionalità diformattazione sofisticate per la visualizzazione del documento. Il linguaggio ditrasformazione XSL e la specifica di formattazione dell’oggetto vengono implementaticome spazi dei nomi.

LINGUAGGIO DI TRASFORMAZIONE XSL

Il linguaggio di trasformazione XSL (spazio del nome xsl) dimostra come unelaboratore può trasformare la struttura di un documento XML in un’altra struttura. Ilprocesso di trasformazione converte quindi la struttura di un documento in un’altrastruttura di documento. L’utilizzo di questo linguaggio è quindi convertire undocumento XML da una struttura semantica a una struttura di visualizzazione, qualela conversione di un documento XML in documento HTML. In realtà, questa non èl’unica possibilità, dal momento che il processo di trasformazione è totalmenteindipendente dal risultato finale. Questo consente una grande flessibilità per il futuro,dal momento che l’XSL, potrebbe trasformare documenti in nuove strutture.

SPECIFICA DI FORMATTAZIONE DELL’OGGETTO

La specifica di formattazione dell’oggetto (spazio del nome fo) fornisce una nuovasemantica di formattazione sviluppata come vocabolario XML. Un motore divisualizzazione può quindi elaborare direttamente le informazioni di formattazionecontenute nello spazio del nome fo (a differenza delle informazioni dello spazio delnome xsl) oppure un elaboratore può trasformare le informazioni in altre strutture diformattazione, ad esempio in codice HTML. La differenza tra questo metodo e ilmetodo dello spazio del nome xsl consiste nel fatto che il metodo dello spazio delnome fo è connesso in modo specifico alla formattazione della semantica,consentendo così di sviluppare i vocabolari per applicazioni specifiche, quali leapplicazioni multimediali. La funzionalità dello spazio del nome xsl è finalizzata allatrasformazione del modello di oggetti Document ed è indipendente dalla semantica diformattazione.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Componenti del linguaggio XSL

http://www.html.it/xml/guida/compone.htm [19/06/2001 14.11.36]

Page 56: Corso-Guida - HTML.it - Corso XML

 Fogli di stile XSL

L’XSL include la funzionalità di trasformazione del documento di origine XML inun’altra struttura. E’ possibile fare questo mediante l’uso di fogli di stile. I fogli di stileXSL indicano la procedura in base alla quale deve essere creata la struttura.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Fogli di stile XSL

http://www.html.it/xml/guida/fogli.htm [19/06/2001 14.11.38]

Page 57: Corso-Guida - HTML.it - Corso XML

 Utilizzo dei modelli

Un foglio di stile comprende uno o più modelli che a loro volta contengono deipattern. I modelli forniscono la struttura dei documenti generati dal codice. Glielementi generati possono essere di qualsiasi tipo, poiché non è necessario che imodelli XSL contengano riferimenti ai dati XML.

La reale potenzialità dei fogli di stile consiste nel generare dati XML in nuovidocumenti. I modelli XSL fanno riferimento ai dati XML mediante i pattern.

PATTERN

Il linguaggio XSL utilizza i pattern per specificare gli elementi XML a cui vieneapplicato il modello XSL. Questo metodo di corrispondenza dei pattern rende XSL unlinguaggio di dichiarazioni in contrapposizione con i linguaggi basati sulle procedure.Questo significa che i pattern definiscono il "livello" specifico della struttura deldocumento da far corrispondere identificandone la gerarchia della struttura. Per avereun’idea della struttura di un modello, sarà sufficiente prendere in esame un semplicefoglio di stile. Sarà quindi necessario creare un documento XML a cui applicare ilfoglio di stile:<CATALOG> <PLANT> <COMMON>Bloodroot</COMMON> <BOTANICAL>Sanguinaria canadensis</BOTANICAL> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> <PRICE>$7.05</PRICE>

<AVAILABILITY USONLY="true">02/01/99</AVAILABILITY>

</PLANT></CATALOG>

Quindi procedere con la creazione di un foglio di stile XSL per un unico modellodell’elemento Common:<?xml version="1.0"?><xsl:template xmlns:xsl="uri:xsl"> <HTML> <BODY> <xsl:repeat for="CATALOG/PLANT"> <DIV> <SPAN STYLE="font-weight:bold; font-size:20"> <xsl:get-value for="COMMON"/> </SPAN> </DIV> </xsl:repeat> </BODY> </HTML></xsl:template>

Quando il documento XML viene elaborato con il foglio di stile XSL, l’elaboratoregenera il seguente codice HTML:<HTML><BODY><DIV><SPAN STYLE="font-weight:bold; font-size:20"> Bloodroot</SPAN></DIV></BODY></HTML>

XML: Capitolo IV: Ampliare i documenti XML - Utilizzo dei modelli

http://www.html.it/xml/guida/modelli.htm (1 di 4) [19/06/2001 14.11.44]

Page 58: Corso-Guida - HTML.it - Corso XML

ANALISI DEL MODELLO

Ogni modello comprende uno o più pattern. L’esempio che segue riporta la sezioneche contiene due pattern:<xsl:repeat for="CATALOG/PLANT"> <DIV> <SPAN STYLE="font-weight:bold; font-size:20"> <xsl:get-value for="COMMON"/> </SPAN> </DIV></xsl:repeat>

Il primo pattern specifica qualsiasi elemento Plant secondario all’elemento Catalog. Ilsecondo pattern per questa regola specifica l’elemento Common. In base alla regola,qualsiasi dato trovato nell’elemento del pattern verrà inserito nell’elemento Span a cuiviene quindi applicato lo stile "font-weight:bold; font-size:20". Questo modelloespresso in modo discorsivo, sarebbe formulato nel seguente modo: "Ripeterequanto segue per ogni elemento Plant secondario dell’elemento Catalog: prendere ilvalore dell’elemento Common e inserirlo nell’elemento Span applicando il grassetto euna dimensione di carattere pari a 20".

Il modello viene applicato a ogni elemento che risponda al pattern o ai criteri definiti inesso.

Questa è una delle potenzialità del linguaggio XSL. Utilizzando le funzionalità dipattern matching, o corrispondenza dei pattern, del linguaggio XSL, è possibileriorganizzare in modo efficiente i dati XML, per soddisfare esigenze precise. Se nonsi desidera includere uno o più elementi nel risultato finale, sarà sufficiente escludereil pattern relativo a tali elementi. Se invece si desidera includere un unico elemento inuna sezione specifica del documento, è possibile creare un pattern dettagliato perconvertirlo per la visualizzazione.

STRUTTURA A MODELLO SINGOLO

Il modello inizia con il tag <xsl:template xmlns:xsl="uri:xsl"> e termina con il tag</xsl:template>. Questi due tag, o contenitori, facilitano l’applicazione di diversesezioni del foglio di stile quando vengono utilizzati più modelli. Dal momento chequesto foglio di stile contiene un solo modello, è possibile utilizzare anche ilcontenitore <xsl:document> </xsl:document>. Ad esempio il foglio di stile seguenteequivale a quello precedente:<?xml version="1.0"?><xsl:document xmlns:xsl="uri:xsl"> <HTML> <BODY> <xsl:repeat for="CATALOG/PLANT"> <DIV> <SPAN STYLE="font-weight:bold; font-size:20"> <xsl:get-value for="COMMON"/> </SPAN> </DIV> </xsl:repeat> </BODY> </HTML></xsl:document>

Ambedue i fogli di stile sono esempi di una struttura a modello singolo, ossiaciascuno dei due fogli di stile è costituito da un unico modello. Ma un foglio di stilepuò avere anche una struttura a più modelli, nella quale il foglio di stile contiene piùmodelli che possono essere applicati indipendentemente dagli altri.

STRUTTURA A PIU’ MODELLI

Un foglio di stile a più modelli utilizza i tag <xsl:stylesheet> </xsl:stylesheet>, che aloro volta possono contenere diverse coppie di tag <xsl:template> </xsl:template>.Ciascuna di queste coppie può essere applicata indipendentemente dalle altre.Nell’esempio che segue è possibile esaminare in modo più approfondito questastruttura:<CATALOG> <PLANT BESTSELLER="no"> <NAME> <COMMON>Bloodroot</COMMON> <BOTAN>Sanguinaria canadensis</BOTAN> </NAME>

XML: Capitolo IV: Ampliare i documenti XML - Utilizzo dei modelli

http://www.html.it/xml/guida/modelli.htm (2 di 4) [19/06/2001 14.11.44]

Page 59: Corso-Guida - HTML.it - Corso XML

<GROWTH> <ZONE>4</ZONE> <LIGHT>Mostly Shady</LIGHT> </GROWTH> <SALESINFO> <PRICE>$3.00</PRICE> <AVAILABILITY>4/21/99</AVAILABILITY> </SALESINFO> </PLANT> <PLANT BESTSELLER="yes"> <NAME> <COMMON>Columbine</COMMON> <BOTAN>Aquilegia canadensis</BOTAN> </NAME> <GROWTH> <ZONE>3</ZONE> <LIGHT>Mostly Shady</LIGHT> </GROWTH> <SALESINFO> <PRICE>$9.00</PRICE> <AVAILABILITY>4/10/99</AVAILABILITY> </SALESINFO> </PLANT>

<PLANT BESTSELLER="no"> <NAME> <COMMON>Marsh Marigold</COMMON> <BOTAN>Caltha palustris</BOTAN> </NAME> <GROWTH> <ZONE>4</ZONE> <LIGHT>Mostly Sunny</LIGHT> </GROWTH> <SALESINFO> <PRICE>$9.00</PRICE> <AVAILABILITY>4/19/99</AVAILABILITY> </SALESINFO> </PLANT></CATALOG>

Nel listato seguente è riportato il foglio di stile dell’esempio precedente, il qualecontiene diversi modelli che vengono applicati in modo indipendente alle diversesezioni del documento XML:<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template match="/"> <HTML> <BODY> <TABLE BORDER="1"> <TR STYLE="font-weight:bold"> <TD>Common Name</TD> <TD>Botanical Name</TD> <TD>Zone</TD> <TD>Light</TD> <TD>Price</TD> <TD>Availability</TD> </TR> <xsl:for-each select="CATALOG/PLANT"> <TR> <xsl:apply-templates/> </TR> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template>

<xsl:template match="NAME"> <TD><xsl:value-of select="COMMON"/></TD> <TD><xsl:value-of select="BOTAN"/></TD> </xsl:template>

XML: Capitolo IV: Ampliare i documenti XML - Utilizzo dei modelli

http://www.html.it/xml/guida/modelli.htm (3 di 4) [19/06/2001 14.11.44]

Page 60: Corso-Guida - HTML.it - Corso XML

<xsl:template match="GROWTH"> <TD><xsl:value-of select="ZONE"/></TD> <TD><xsl:value-of select="LIGHT"/></TD> </xsl:template>

<xsl:template match="SALESINFO"> <TD><xsl:value-of select="PRICE"/></TD> <TD><xsl:value-of select="AVAILABILITY"/></TD> </xsl:template></xsl:stylesheet>

Il foglio di stile inizia con il tag <xsl:stylesheet> e termina con il tag </xsl:stylesheet>.

La sigla xmlns è una parola riservata e serve per identificare un particolarenamespace; ad esempio in questo caso tutte le parole riservate che iniziano con xsl:fanno parte del vocabolario individuato dall’URL htttp://www.w3.org/TR/WD-xsl.

Dal momento che il documento XML può avere un solo elemento principale e chel’XSL è un profilo di XML, il solo elemento xsl:stylesheet consente di includere piùelementi xsl:template nel foglio di stile.

Il pattern di questo modello è semplicemente "/" e definisce l’elemento principale deldocumento XML. E’ presente anche l’elemento xsl:for-each all’interno del modello,che definisce un altro pattern, CATALOG/PLANT, e stabilisce che la strutturagenerata che segue deve essere applicata a ogni sezione corrispondente al pattern.All’interno di tale struttura è contenuto l’elemento xsl:apply-templates che avvia laricerca da parte dell’elaboratore di altri modelli nel foglio di stile, ciascuno con il suopattern. Poiché l’elemento xsl:apply-templates si trova all’interno del patternCATALOG/PLANT, gli altri modelli verranno applicati solo quando verrà trovata unacorrispondenza all’interno dell’elemento. Ad esempio, il modello NAME verràapplicato solo agli elementi nella gerarchia CATALOG/PLANT/NAME.

Facciamo una sintesi di quanto visto fino ad ora.

Il linguaggio XSL trasforma l’XML in elementi di output. Questi elementi di outputvengono tipicamente utilizzati per preparare i dati per la visualizzazione applicandoformattazione ai dati XML, ma questo non ne costituisce l’unico utilizzo possibile.Questa trasformazione avviene in questa sequenza:

Un foglio di stile specifica pattern che corrispondono ai dati rilevati neldocumento XML. Questi pattern fanno parte di singoli modelli che contengonostrutture di output.

1.

L’elaboratore rileva i dati che corrispondono ai pattern e li converte nellastruttura di output.

2.

Una volta elaborato l’intero foglio di stile, nella memoria del computer esisteuna nuova struttura di dati basata sull’output del foglio di stile.

3.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Utilizzo dei modelli

http://www.html.it/xml/guida/modelli.htm (4 di 4) [19/06/2001 14.11.44]

Page 61: Corso-Guida - HTML.it - Corso XML

 Visualizzazione degli elementi dioutput

A questo punto introduciamo un nuovo concetto relativo al linguaggio XSL: lavisualizzazione.

Fino a poco tempo non esistevano software XML che erano in grado di visualizzare un fileXML secondo quanto espresso nei principi base del progetto del consorzio W3. Lasituazione era quindi tale che in attesa di un processore o di un browser che supportassecompletamente XML si potevano seguire diverse strade, ad esempio visualizzare i file XMLcon viewer SGML, utilizzare l’Active X Msxml, generare off-line dei file HTML da sorgentiXML e XSL utilizzando script .

Questa ultima modalità consentiva di elaborare e visualizzare contemporaneamente ildocumento, in modo che l’utente non doveva far altro che controllarne il risultato. Puressendo una modalità ottima per una fase di passaggio è pur sempre lontana dalla filosofiadi partenza del progetto XML, che prevede l’utilizzo diretto di XML sul Web, perchécomunque deve sempre tener conto dei limiti di HTML.

La Microsoft è quella che per prima ha già sviluppato due parser XML che si integrano conil suo ultimo browser.

Infatti con l’avvento di Microsoft Internet Explorer 5 è possibile adesso visualizzare i datiXML utilizzando i fogli di stile XSL come dei file HTML e indipendentemente da questi.

Per visualizzare un file XML utilizzando XSL bisogna indicare il tipo e la locazione delfoglio di stile XSL con le istruzioni di elaborazione (PI). La forma base per queste istruzionidi elaborazione sono del tipo<?xml-stylesheet type="text/xsl" href="mystyle.xsl"?>

Quando Internet Explorer 5 sfoglia il documento XML, elabora l’istruzione di elaborazione,scarica il foglio di stile e lo utilizza per visualizzare il documento XML. Il valore dell’attributotype descrive il tipo del foglio di stile da attuare, se XSL "text/xsl" se CSS "text/css".L’attributo href è un collegamento URL relativo al foglio di stile. Se il documento XML noncontiene queste istruzioni di elaborazione, Internet Explorer 5 visualizzerà il documentoXML come un albero gerarchico con il codice di vario colore.

Ecco come verrà visualizzato l’esempio utilizzato in questo capitolo usando MicrosoftExplorer 5:

XML: Capitolo IV: Ampliare i documenti XML - Visualizzazione degli elementi di output

http://www.html.it/xml/guida/visual.htm (1 di 2) [19/06/2001 14.12.09]

Page 62: Corso-Guida - HTML.it - Corso XML

Per quanto riguarda Netscape, che inizialmente non aveva dimostrato molto interesseverso XML, sembra essere ritornata sui suoi passi. La versione 5 del browser Navigatordovrebbe contenere un processore in grado di leggere e formattare i file XML.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Visualizzazione degli elementi di output

http://www.html.it/xml/guida/visual.htm (2 di 2) [19/06/2001 14.12.09]

Page 63: Corso-Guida - HTML.it - Corso XML

 Estrazione dei dati dall'XML

Molti elementi XSL possono essere utilizzati per recuperare dati dal documento XML.Gli elementi XSL combinati con gli attributi XSL forniscono altre prestazioni per ilcorretto recupero dei dati necessari dal documento XML.

ELEMENTI XSL

Gli elementi XSL si comportano come comandi e indicano all’elaboratore XSL comegestire i dati. Di seguito riportiamo un elenco completo degli elementi XSL supportati:

Elemento XSL Descrizione

xsl:apply-templates Indica all’elaboratore XSL di cercare il modello correttoda applicare, in base al pattern specificato.

xsl:attribute Genera un nodo di attributo e lo applica all’elemento dioutput.

xsl:cdata Genera una sezione CDATA nell’output.

xsl:choose Consente di eseguire test condizionali. Questo elementoviene utilizzato in combinazione con gli elementixsl:otherwise e xsl:when.

xsl:comment Crea un commento nella struttura di output.

xsl:copy Crea una copia del nodo di destinazione dalla fonte daincludere nell’output.

xsl:define-template-set Definisce un insieme di modelli a un specifico livello divalidità.

xsl:element Genera un elemento nell’output con il nome specificato.

xsl:entity-ref Genera un riferimento all’entità nell’output con il nomespecificato.

xsl:eval Valuta una stringa di testo, solitamente codice script.

xsl:for-each Applica lo stesso modello a più nodi del documento.

xsl:if Consente test condizionali in un modello.

xsl:node-name Inserisce il nome del nodo corrente nell’output comestringa di testo.

xsl:otherwise Fornisce test condizionali. Questo elemento vieneutilizzato in combinazione con gli elementi xsl:choose exsl:when.

xsl:pi Genera un istruzione di elaborazione nell’output.

xsl:script Definisce dichiarazioni e funzioni di variabili globali.

xsl:stylesheet Definisce l’insieme di modelli che vengono applicati allastruttura del documento di origine per generare ildocumento di output.

xsl:template Definisce un modello per l’output basato su un patternspecifico.

xsl:value-of Valuta un pattern XSL specificato nell’attributo select erestituisce il valore del nodo identificato come testo, cheverrà poi inserito nel modello.

XML: Capitolo IV: Ampliare i documenti XML - Estrazione dei dati dall'XML

http://www.html.it/xml/guida/estrazio.htm (1 di 2) [19/06/2001 14.12.46]

Page 64: Corso-Guida - HTML.it - Corso XML

xsl:when Fornisce test condizionali. Questo elemento vieneutilizzato in combinazione con gli elementi xsl:choose exsl:otherwise.

METODI XSL

Oltre agli elementi, nell’XSL sono inclusi anche metodi. Questi metodi possono esserechiamati dall’elemento xsl:eval o da un normale codice script. Ad esempio, il metodoformatIndex potrebbe essere utilizzato come di seguito:<xsl:template match="NAME"> <TD STYLE="font-style:italic; font-size:20"> <xsl:value-of select="COMMON"/> item number: <xsl:eval> formatIndex(childNumber(this),"1") </xsl:eval> </TD></xsl:template>

Ecco un elenco dei metodi supportati:Metodo XSL Descrizione

AbsoluteChildNumber Restituisce il numero del nodo specificato relativo atutti gli elementi di pari livello.

AncestorChildNumber Restituisce il numero del predecessore di un nodocon il nome specificato.

ChildNumber Restituisce il numero del nodo relativo agli elementidi pari livello.

Depth Restituisce, per il nodo specificato, il livellogerarchico all’interno della struttura del documento.

ElementIndexList Restituisce una matrice di numeri secondari per ilnodo specificato e per tutti i nodi principali. Questoelemento è ricorsivo fino al nodo principale.

FormatDate Formatta la data mediante le opzioni di formattazionespecificate.

FormatIndex Formatta il numero intero fornito utilizzando il sistemanumerico specificato.

FormatNumber Formatta il numero fornito utilizzando il formatospecificato.

FormatTime Formatta l’ora mediante le opzioni di formattazionespecificate.

UniqueID Restituisce l’unico identificatore per il nodospecificato.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Estrazione dei dati dall'XML

http://www.html.it/xml/guida/estrazio.htm (2 di 2) [19/06/2001 14.12.46]

Page 65: Corso-Guida - HTML.it - Corso XML

 XLL: collegamenti con il linguaggioXML

Il linguaggio XML è in grado di fornire un metodo più efficiente per collegare leinformazioni sul Web tramite un’applicazione XML denominata XLink e inoltre ancheun meccanismo che consente i collegamenti a strutture interne di un documento XMLdenominato XPointer. Le principali proprietà dell’XLL sono:

Link multi direzionali: ad esempio l’HTML fornisce solo link mono direzionali;per questo tipo di link l’unico modo per tornare "indietro" è quello di utilizzarel’apposito pulsante. Invece in un link bi-direzionale per esempio, un utente puòtornare indietro utilizzando lo stesso link che gli ha permesso di arrivare adestinazione.

Link a destinazione multipla: da un singolo link, un utente può scegliere fradifferenti destinazioni.

Link ad effetto multiplo: si può fare in modo che la risorsa collegata sostituiscail documento attivo, oppure che sia visualizzata in una nuova finestra, o infineche sia inserita direttamente nel documento attivo.

Link ad attivazione multipla: si può fare in modo che il link sia attivato da unclick dell’utente, oppure che sia attivato automaticamente quando individuatodall’applicazione di elaborazione.

Vediamo in dettaglio le due componenti dell’XLL.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - XLL: collegamenti con il linguaggio XML

http://www.html.it/xml/guida/xll.htm [19/06/2001 14.13.04]

Page 66: Corso-Guida - HTML.it - Corso XML

 XLink: il sistema per i collegamentiXML

L’XLink utilizza il linguaggio XML per definire tutti i componenti necessari per crearecollegamenti nei documenti XML e definisce due tipi di collegamenti fondamentali: icollegamenti semplici e i collegamenti estesi. Realizzato in modo tale da manteneresemplicità dei collegamenti HTML, l’XLink fornisce tuttavia maggiori efficienza edestensibilità.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - XLink: il sistema per i collegamenti XML

http://www.html.it/xml/guida/xlink.htm [19/06/2001 14.13.11]

Page 67: Corso-Guida - HTML.it - Corso XML

 Collegamenti semplici nell'XML

I collegamenti XML dovrebbero più opportunamente essere considerati risorse diconnessione. Questo significa che l'XLink è in grado di fornire il collegamento aqualunque risorsa raggiungibile tramite un localizzatore nell’elemento dicollegamento. Questo concetto non è specifico dell’XLink: la nozione di risorse èlegata al funzionamento del World Wide Web. L’XLink fornisce tuttavia una sintassipiù sofisticata per la definizione degli elementi e del comportamento dei collegamenti,ad esempio la capacità di un collegamento di funzionare in più direzioni. L’XLink èinoltre più flessibile e consente a un documento di collegarsi a qualsiasi tipo di risorsaraggiungibile sul Web.

Come nell’HTML, i collegamenti semplici sono collegamenti in linea, ovvero fannoparte dell’elemento e funzionano in una sola direzione. Un collegamento semplice haun solo identificatore di risorsa, o localizzatore. Il localizzatore, ad esempio l’attributoHREF nell’elemento Anchor, contiene i dati relativi al collegamento. Nell’XLink, tuttele informazioni sul localizzatore sono contenute all’interno dell’elemento dicollegamento. Pertanto, l’applicazione di elaborazione non avrà bisogno direcuperare altre informazioni sul localizzatore.

Il primo esempio di collegamento riportato contiene un collegamento XML semplice.La creazione di un elemento di collegamento semplice nell’XML comporta maggioridifficoltà rispetto alla creazione di un elemento Anchor e all’assegnazione di un valoreHREF. L’XML è un metalinguaggio, pertanto la creazione di un nuovo elemento chepossa essere utilizzato in un documento richiede la dichiarazione dell’elemento e ditutti i relativi attributi. Il linguaggio XML e la specifica XLink forniscono un’ampiagamma di efficienti opzioni per la creazione di collegamenti. Creiamo adesso unelemento di collegamento semplice, denominato MYLINK. Riportiamo ladichiarazione dell’elemento e l’elenco degli attributi così come potrebbe comparire inuna dichiarazione del tipo di documento (DTD).<!ELEMENT MYLINK ANY><!ATTLIST MYLINK XML:LINK CDATA #FIXED "simple" HREF CDATA #REQUIRED INLINE (true|false) "true" ROLE CDATA #IMPLIED TITLE CDATA #IMPLIED SHOW (replace|new|embed) #IMPLIED ACTUATE (auto|user) #IMPLIED BEHAVIOR CDATA #IMPLIED CONTENT-ROLE CDATA#IMPLIED CONTENT-TITLE CDATA #IMPLIED>

XML:LINK

Gli sviluppatori dell’XLink avrebbero potuto riservare un nome di tag (ad esempio <A>nell’HTML), riservare un nome di attributo o lasciare la scelta al softwaredell’applicazione per riconoscere un elemento come elemento di collegamento.Decisero di adottare un nome di attributo, ritenendo che questo avrebbe consentitoagli autori di definire elementi personalizzati e contemporaneamente mantenerel’elemento di collegamento come parte del collegamento della struttura dell’elemento.Il risultato è l’attributo XML:LINK, che può avere valore simple o extended.

L’esempio precedente assegna il valore simple, poiché il collegamento in fase dicreazione è di tipo semplice. L’esempio seguente mostra come apparirà l’elementoMylink in un documento:<MYLINK XML:LINK="simple" HREF="http://www.miosito.com"> My Home Page</MYLINK>

L’attributo XML:LINK è incluso nell’elemento Mylink precedente, ma in quanto

XML: Capitolo IV: Ampliare i documenti XML - Collegamenti semplici nell'XML

http://www.html.it/xml/guida/semplici.htm (1 di 3) [19/06/2001 14.13.25]

Page 68: Corso-Guida - HTML.it - Corso XML

dichiarato con un valore fisso nella dichiarazione dell’elemento, non è necessario chel’elemento stesso includa l’attributo XML:LINK.

HREF

Ciascun elemento di collegamento nell’XML deve avere un localizzatore di risorsache identifica la risorsa alla quale il collegamento fa riferimento. HREF è l’attributo dellocalizzatore nell’XLink e funziona come nell’HTML.

INLINE

Un elemento di collegamento XLink può essere in linea o non in linea. Uncollegamento in linea funziona come risorsa propria, ovvero l’elemento dicollegamento, analogamente alla destinazione del collegamento, fornisce contenuto.Anche in questo caso l’elemento Anchor HTML rappresenta perfettamente questotipo di collegamento. Così come la destinazione del collegamento, l’elemento Anchorfornisce anche contenuto. Nell’esempio riportato il valore predefinito true fa partedella dichiarazione dell’attributo INLINE. Non è pertanto necessario specificarel’attributo nell’elemento.

ROLE

L’attributo ROLE indica al software dell’applicazione il significato del collegamento.Con questo attributo si intende fornire informazioni sul collegamento consideratocome insieme e non solo come risorsa remota del collegamento. Queste applicazionidevono essere comprese dall’applicazione e non dagli utenti. L’utilizzo di ROLEconsente di fornire all’applicazione informazioni dettagliate sui collegamenti chevanno oltre la semplice indicazione della risorsa a cui rimandano. Ad esempio, alcunicollegamenti potrebbero condurre a voci di glossario, altri a informazioni generali suun determinato argomento, altri ancora a informazioni sulle proprietà di una risorsa,tra cui informazioni sulla versione. Le applicazioni possono ora ottenere questo tipo diinformazioni direttamente dal collegamento e agire di conseguenza.

TITLE

L’attributo TITLE, simile al tag <ALT> dell’HTML, contiene un’etichetta visualizzabileo del testo che può essere utilizzato per fornire informazioni supplementari all’utente.Si tratta di un attributo per risorse remote: l’informazione TITLE non intende correlarsial collegamento nel suo insieme, bensì fornire informazioni all’utente sulla relazioneesistente tra risorsa e collegamento. Mentre l’attributo ROLE viene interpretato dalcomputer, l’attributo TITLE si rivolge all’utente.

SHOW

L’attributo SHOW fa parte della semantica per le risorse remote dell’XML erappresenta probabilmente uno dei miglioramenti più rilevanti rispetto ai collegamentiHTML. L’attributo SHOW accetta valori come replace, new ed embed, che descrivonoil modo in cui il collegamento dovrà funzionare. Il valore replace indica che la risorsalocale viene sostituita da una risorsa remota. Questa tecnica è tra le piùcomunemente utilizzate dai collegamenti HTML. Il valore new specifica che la risorsadi destinazione deve essere aperta in un contesto nuovo. Una funzionalità simile èfornita nell’HTML dall’attributo TARGET dell’elemento Anchor: la destinazione delcollegamento si apre in un nuovo contesto, in genere un’altra finestra del browser. Ilvalore embed indica la nuova tecnica relativa al funzionamento di un collegamento.Se viene specificato il valore embed, il contenuto della destinazione del collegamentoviene incorporato nel contenuto dell’origine del collegamento. Quando l’utente fa clicsul collegamento con il valore embed specificato, le informazioni vengonovisualizzate nel contesto, direttamente all’interno del documento di origine.

ACTUATE

L’attributo ACTUATE specifica il modo in cui il collegamento deve essere attivato.Questo attributo può accettare il valore auto o user. Il valore auto indica che ilcollegamento deve essere attivato automaticamente quando il collegamento vieneelaborato dall’applicazione. Il valore user specifica che il collegamento deve essereattivato da un meccanismo esterno, ad esempio un clic del mouse. Combinandoinoltre l’attributo SHOW=embed con l’attributo ACTUATE=auto è possibile creare undocumento contenente molti collegamenti incorporati. Quando un utente apre ildocumento, tutti i collegamenti vengono automaticamente attivati e incorporatidirettamente nel documento. Il documento composto che ne deriva contieneinformazioni raccolte da varie origini invisibili all’utente.

BEHAVIOR

L’attributo BEHAVIOR fornisce all’autore del collegamento uno spazio in cui

XML: Capitolo IV: Ampliare i documenti XML - Collegamenti semplici nell'XML

http://www.html.it/xml/guida/semplici.htm (2 di 3) [19/06/2001 14.13.25]

Page 69: Corso-Guida - HTML.it - Corso XML

descrivere cosa accadrà all’attivazione del collegamento. Al collegamento possonoad esempio essere associati gli stati "precedente" e "successivo". Lo statoprecedente corrisponde all’aspetto del collegamento prima che venga attivato e puòincludere tipo di carattere, colori e altri elementi di formattazione. Lo stato successivorimanda a quanto si verifica dopo l’attivazione del collegamento, ovvero alcomportamento del collegamento. L’attributo BEHAVIOR non presenta vincoli e puòcontenere qualunque tipo di istruzione che possa essere comunicata all’applicazioneche elabora il collegamento.

CONTENT-ROLE

Questo attributo funziona in modo analogo all’attributo ROLE, ma è specifico dellerisorse locali. Indica all’applicazione lo scopo della risorsa locale come parte delcollegamento. Come l’attributo ROLE, questa informazione viene utilizzatadall’applicazione e non dagli utenti.

CONTENT-TITLE

Anche CONTENT-TITLE è un attributo della semantica delle risorse locali chefornisce informazioni all’utente relativamente alla parte locale del collegamento.Svolge una funzione simile a quella dell’attributo TITLE, ma si rivolge agli utenti.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Collegamenti semplici nell'XML

http://www.html.it/xml/guida/semplici.htm (3 di 3) [19/06/2001 14.13.25]

Page 70: Corso-Guida - HTML.it - Corso XML

 Collegamenti estesi nell'XML

L’utilizzo dei collegamenti estesi consente di definire gruppi di possibili destinazioni daun’unica origine. I collegamenti estesi forniscono tutte le informazioni necessarie perconsentire i collegamenti multipli.

COLLEGAMENTI ESTESI IN LINEA

Il miglioramento delle potenzialità ha portato con sé un aumento delle complessità e ineffetti i collegamenti estesi complicano l’equazione. Vediamo un esempio dicollegamento esteso:<!ELEMENT MYELINK ANY><!ATTLIST MYELINK XML:LINK CDATA #FIXED "extended" INLINE (true|false) "true" ROLE CDATA #IMPLIED TITLE CDATA #IMPLIED SHOW (replace|new|embed) #IMPLIED ACTUATE (auto|user) #IMPLIED BEHAVIOR CDATA #IMPLIED CONTENT-ROLE CDATA#IMPLIED CONTENT-TITLE CDATA #IMPLIED>

Il codice è simile alla dichiarazione del collegamento semplice creato in precedenza, main questo caso l’attributo XML:LINK contiene il valore extended anziché simple, poiché sitratta di un collegamento esteso, e non vi sono attributi HREF dichiarati in quanto con icollegamenti estesi i localizzatori devono essere contenuti in un insieme separato dielementi. Questi elementi vengono identificati come localizzatori. L’utilizzo di questometodo per la definizione dei localizzatori consente di specificare più localizzatori per unsolo elemento di collegamento. Non diversamente da altri elementi, anche il localizzatoredeve essere dichiarato. Ecco un esempio di dichiarazione di localizzatore:<!ELEMENT ELOCATOR ANY><!ATTLIST ELOCATOR XML:LINK CDATA #FIXED "locator" HREF CDATA #REQUIRED INLINE (true|false) "true" ROLE CDATA #IMPLIED TITLE CDATA #IMPLIED SHOW (replace|new|embed) #IMPLIED ACTUATE (auto|user) #IMPLIED BEHAVIOR CDATA #IMPLIED>

L’attributo XML:LINK contiene il valore locator per identificare questo elemento comelocalizzatore XLink, inoltre utilizziamo l’attributo HREF.

A questo punto esaminiamo il modo in cui questa struttura potrebbe funzionare in undocumento XML. L’elemento di collegamento avrà aspetto simile al seguente codice:<MYELINK XML:LINK="extended">minivan review

<ELOCATOR TITLE="Chrysler Town and Country" HREF="Chrysler.htm"/> <ELOCATOR TITLE="Ford Windstar" HREF="Ford.htm"/> <ELOCATOR TITLE="Chevrolet Venture" HREF="Chevy.htm"/> <ELOCATOR TITLE="Honda Odyssey" HREF="Honda.htm"/> <ELOCATOR TITLE="Nissan Quest" HREF="Nissan.htm"/> <ELOCATOR TITLE="Toyota Sienna" HREF="Toyota.htm"/>

</MYELINK>

COLLEGAMENTI ESTESI NON IN LINEA

XML: Capitolo IV: Ampliare i documenti XML - Collegamenti estesi nell'XML

http://www.html.it/xml/guida/estesi.htm (1 di 4) [19/06/2001 14.13.42]

Page 71: Corso-Guida - HTML.it - Corso XML

Un collegamento in linea richiede il testo del collegamento affinché il collegamentostesso risulti completo. I collegamenti estesi consentono di creare collegamenti in cui larisorsa locale non appartiene al collegamento. Questo significa che un elemento o unaporzione di contenuto può costituire un collegamento, benché non sia stato creato conquesto obiettivo. Questi collegamenti, definiti collegamenti non in linea, forniscono unmodo potente e flessibile per collegare informazioni. Per creare un collegamento non inlinea utilizzeremo la stessa dichiarazione degli elementi del collegamento esteso e lastessa dichiarazione degli elementi localizzatori create per il collegamento esteso inlinea. Nel tag dell’elemento occorre impostare l’attributo INLINE su false per indicare chel’elemento è un collegamento non in linea.<MYELINK XML:LINK="extended" INLINE="false">

<ELOCATOR TITLE="Chrysler Town and Country" HREF="#Chrysler"/> <ELOCATOR TITLE="Ford Windstar" HREF="#Ford"/> <ELOCATOR TITLE="Chevrolet Venture" HREF="#Chevy"/> <ELOCATOR TITLE="Honda Odyssey" HREF="#Honda"/> <ELOCATOR TITLE="Nissan Quest" HREF="#Nissan"/> <ELOCATOR TITLE="Toyota Sienna" HREF="#Toyota"/>

</MYELINK>

<REVIEW ID="Chrysler"> <TITLE="Chrysler Town and Country"</TITLE> <!--Questa è la sezione della Chrysler-- ></REVIEW>

<REVIEW ID="Ford"> <TITLE ="Ford Windstar"</TITLE> <!--Questa è la sezione della Ford-- ></REVIEW>

<REVIEW ID="Chevy"> <TITLE ="Chevrolet Venture"</TITLE> <!--Questa è la sezione della Chevrolet -- ></REVIEW>

<REVIEW ID="Honda"> <TITLE ="Honda Odyssey"</TITLE> <!--Questa è la sezione della Honda-- ></REVIEW>

REVIEW ID="Nissan"> <TITLE ="Nissan Quest"</TITLE> <!--Questa è la sezione della Nissan-- ></REVIEW>

REVIEW ID="Toyota"> <TITLE ="Toyota Sienna"</TITLE> <!--Questa è la sezione della Toyota-- ></REVIEW>

In questo esempio i localizzatori sono mantenuti nella relativa sezione e non sonovincolati ad alcuna risorsa di collegamento locale. I localizzatori contengono tutte leinformazioni necessarie per fornire le connessioni alle sezioni appropriate neldocumento, ma è compito dell’applicazione visualizzare i collegamenti per l’utente.L’applicazione potrebbe ad esempio fornire un elenco separato dal contenuto checonsenta all’utente di connettersi all’elemento desiderato in qualunque momento. Inquesto modo vengono impostati collegamenti realmente multidirezionali, eliminando icollegamenti con spostamento "avanti e indietro" che per la maggior parte degli utentiWeb è consuetudine utilizzare.

A questo punto, si immagini un documento XML contenente nella DTD le dichiarazionidegli elementi Myelink ed Elocator precedentemente utilizzati. Supponiamo inoltre che ildocumento includa nell’elemento Document i seguenti localizzatori:<MYELINK XML:LINK="extended" INLINE="false">

<ELOCATOR TITLE="Chrysler Town and Country" HREF="Chrysler.htm"/> <ELOCATOR TITLE="Ford Windstar" HREF="Ford.htm"/> <ELOCATOR TITLE="Chevrolet Venture" HREF="Chevy.htm"/> <ELOCATOR TITLE="Honda Odyssey" HREF="Honda.htm"/> <ELOCATOR TITLE="Nissan Quest" HREF="Nissan.htm"/> <ELOCATOR TITLE="Toyota Sienna" HREF="Toyota.htm"/>

XML: Capitolo IV: Ampliare i documenti XML - Collegamenti estesi nell'XML

http://www.html.it/xml/guida/estesi.htm (2 di 4) [19/06/2001 14.13.42]

Page 72: Corso-Guida - HTML.it - Corso XML

</MYELINK>

Poiché i localizzatori sono contenuti in documento distinto, qualsiasi applicazione cheutilizzi questo documento sarà in grado di rendere disponibili tali collegamenti. Anche inquesto caso, la struttura creata per i collegamenti è multidirezionale in quanto daqualunque documento sarà possibile accedere a un collegamento a qualsiasi altrodocumento. Un ulteriore vantaggio deriva dalla possibilità di gestire l’elenco deicollegamenti in maniera separata dai documenti nei quali vengono utilizzati, grazie alfatto che l’elenco dei localizzatori risiede in un documento specifico. Questo tipo distruttura consente inoltre di aggiungere collegamenti a documenti che normalmente nonpossono essere modificati in modo tale da contenere collegamenti in linea propri.L’applicazione può infine verificare che i documenti identificati nei localizzatori sianodisponibili anche prima che i collegamenti vengano visualizzati, evitando in tal modol’interruzione dei collegamenti.

La configurazione di destinazioni multiple per i collegamenti, i collegamenti non in lineaestesi e i collegamenti multidirezionali sono gestiti da un numero esorbitante dicollegamenti. L’XLink fornisce un metodo in grado di risolvere alcuni di questi aspetti: igruppi di collegamenti estesi.

GRUPPI DI COLLEGAMENTI ESTESI

I gruppi di collegamenti estesi semplificano la gestione delle informazioni suicollegamenti correlati impostando elementi contenenti elenchi di documenti correlati.Supponiamo di pubblicare mensilmente per una rivista di consumo un servizio sullenovità automobilistiche. Anziché creare un singolo documento contenente elenchi di tuttele automobili delle varie categorie per ogni mese, è possibile raggruppare gli elenchi inmodo da renderli più facilmente gestibili. Per utilizzare i gruppi di collegamento estesi,sono necessari due elementi, uno per definire il gruppo (GROUP) e l’altro per specificarei documenti appartenenti al gruppo (DOCUMENT). Ecco un esempio di dichiarazioni:<!ELEMENT GROUP (DOCUMENT*)><!ATTLIST GROUP XML:LINK CDATA #FIXED "group" STEPS CDATA #IMPLIED>

<!ELEMENT DOCUMENT EMPTY><!ATTLIST DOCUMENT XML:LINK CDATA #FIXED "document" HREF CDATA #REQUIRED>

STEPS consiste nell’indicare all’applicazione il numero di livelli dei documenti in cuieseguire la ricerca prima di terminarla. Questo attributo risulta particolarmente utilequando il gruppo contiene documenti nel quale sono inclusi altri gruppi, a loro voltacontenenti nuovi documenti che contengono ulteriori gruppi e così via. Dopo averpredisposto le dichiarazioni degli elementi, è necessario aggiungere gli elementi Group eDocument. Gli elementi Document contengono semplicemente HREF che portanol’applicazione che li elabora ai documenti all’interno dei quali devono essere cercati icollegamenti. Quando l’applicazione raggiunge uno di questi elementi, carica i documentispecificati dagli attributi HREF degli elementi Document in Group. Essa controlla quindiquesti documenti alla ricerca di collegamenti al documento originale, costruendo unatabella di collegamenti. L’applicazione di elaborazione caricherà tutti i documenti edelaborerà l’informazione di collegamento in essa contenuta; questa è la fase uno. Sel’attributo STEPS è maggiore di 1, l’applicazione caricherà i documenti ai quali idocumenti originali erano collegati dal primo gruppo di collegamenti caricati (STEPS evitache i documenti carichino centinaia di altri documenti).

In questo modo viene creato il gruppo di collegamenti:<GROUP STEP=1> <DOCUMENT HREF="cousin2.htm"/> <DOCUMENT HREF="cousin3.htm"/> <DOCUMENT HREF="cousin4.htm"/> <DOCUMENT HREF="cousin5.htm"/></GROUP>

I gruppi di collegamenti estesi rendono possibile centralizzare l’informazione dicollegamento, sostituendo un labirinto di collegamenti (figura A) con un sistema dicomunicazione centralizzato (figura B) che consente agli sviluppatori di esaminare egestire collegamenti senza dover leggere documenti senza fine. Esso inoltre riducel’occupazione del sistema consentendo agli sviluppatori di richiedere a un documentoXML di scaricare solo un ulteriore documento (o eventualmente alcuni) per creare un

XML: Capitolo IV: Ampliare i documenti XML - Collegamenti estesi nell'XML

http://www.html.it/xml/guida/estesi.htm (3 di 4) [19/06/2001 14.13.42]

Page 73: Corso-Guida - HTML.it - Corso XML

elenco completo di collegamenti.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Collegamenti estesi nell'XML

http://www.html.it/xml/guida/estesi.htm (4 di 4) [19/06/2001 14.13.42]

Page 74: Corso-Guida - HTML.it - Corso XML

 XPointer

Un altro linguaggio basato sull’XML è l’XPointer che consente di ottenerecollegamenti ancora più precisi all’interno di documenti XML.

L’obiettivo principale dell’XPointer è quello di fornire un metodo di indirizzamentodella struttura interna di un documento XML. Negli esempi precedenti, per fareriferimento a una porzione specifica di un documento, utilizzavamo un identificatore diframmento che richiedeva che l’elemento utilizzasse un attributo ID. Il linguaggioXPointer è stato realizzato in modo da fare riferimento alle strutture interne di undocumento, sia che includano o meno attributi ID.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - XPointer

http://www.html.it/xml/guida/xpointer.htm [19/06/2001 14.13.49]

Page 75: Corso-Guida - HTML.it - Corso XML

 Concetti fondamentali relativi allinguaggio XPointer

L’azione dell’XPointer è interna agli elementi e alle strutture che costituiscono ildocumento XML. Un elemento XPointer contiene una serie di termini di localizzazioneche specifica una posizione nella struttura ad albero del documento. Benché moltopiù sofisticato degli identificatori di frammento HTML, l’XPointer può essere utilizzatoin maniera analoga. I termini di localizzazione utilizzano la sintassi indicata neiseguenti esempi:HREF="uri#Xpointer"HREF="uri|Xpointer"

Se come separatore si utilizza il simbolo di cancelletto (#), tale simbolo indica che ilclient deve elaborare la connessione. Se si utilizza invece il simbolo pipe (|), ilmeccanismo della connessione rimane aperto. In questo modo, la connessione delcollegamento può essere gestita sul lato server, consentendo un potenziale risparmiodi larghezza di banda.

Un termine di localizzazione richiede un’origine di localizzazione. Si tratta di unmetodo che consente di indicare a XPointer il punto in cui iniziare ad operare nellastruttura del documento. Ogni termine di localizzazione utilizza una parola chiave epuò contenere argomenti. La parola chiave specifica l’origine di localizzazione, adesempio Root o Id, che indica a XPointer dove iniziare. Gli argomenti fornisconoulteriori informazioni sul percorso che XPointer dovrà compiere all’interno dell’origine.Un esempio di termine di localizzazione è il seguente:Child(2,PRODUCT)

In cui viene indicato il secondo elemento Product tra gli elementi secondari correnti..

I termini di localizzazione possono essere associati a posizioni assolute, posizionirelative, posizioni con spanning, posizioni di attributi o posizioni di stringhe.

TERMINI DI LOCALIZZAZIONE ASSOLUTI

Un termine di localizzazione assoluto fa riferimento a un punto specifico nellastruttura del documento. Non richiede alcuna origine di localizzazione e può essereutilizzato per stabilire un’origine di localizzazione o come elemento XPointerautonomo. I termini di localizzazione assoluti supportano le seguenti parole chiave:

Root() La parola chiave Root specifica che l’origine di localizzazione coincidecon l’elemento principale della risorsa con funzione di contenitore. Se nonvengono specificate altre parole chiave, è considerata la parola chiavepredefinita. Poiché lo scopo di un termine di localizzazione è di puntare a undocumento, questa parola chiave è raramente utilizzata.

Origin() Genera un’origine di localizzazione particolarmente utile se, a causa diuna richiesta quale un collegamento, l’XPointer è in fase di elaborazione. SeXPointer inizia con Origin, l’origine di localizzazione corrisponde alla risorsa dacui è partita la richiesta.

Id(Name) La parola chiave Id utilizza la tecnica più comune di spostamentoattraverso i documenti, ovvero la coppia ID e NAME. Lo spostamento inizia allivello dell’elemento con ID corrispondente al NAME specificato.

Html(NameValue) Questa parola chiave emula l’azione eseguitadall’identificatore di frammento in un documento HTML. Contiene un attributoNAMEVALUE. L’origine di localizzazione è il primo elemento Anchorcontenente un attributo NAME il cui valore corrisponde a quello dell’attributoNAMEVALUE nel termine di localizzazione.

Un esempio di termine di localizzazione assoluto è il seguente:HREF="http://www.foo.com/br.xml#Id(PRODUCT)"

Identifica l’elemento PRODUCT all’interno del documento br.xml.

XML: Capitolo IV: Ampliare i documenti XML - Concetti fondamentali relativi al linguaggio XPointer

http://www.html.it/xml/guida/xpoint.htm (1 di 3) [19/06/2001 14.14.07]

Page 76: Corso-Guida - HTML.it - Corso XML

TERMINI DI LOCALIZZAZIONE RELATIVI

Le parole chiave per i termini di localizzazione relativi dipendono dalla disponibilità diun’origine di localizzazione. Se non esiste alcuna origine, XPointer fa riferimentoall’elemento principale della risorsa che contiene il termine. I termini di localizzazionerelativi supportano le seguenti parole chiave:

Child Se viene specificata, la parola chiave Child identifica i nodi secondaridell’origine di localizzazione. Seleziona tutti i nodi secondari dell’origine dilocalizzazione.

Descendant Specifica i nodi del documento che si trovano a qualunque livelloall’interno del contenuto dell’origine di localizzazione.

Ancestor Specifica i nodi contenenti l’origine di localizzazione o i relativielementi principali.

Preceding Specifica i nodi che compaiono nella struttura ad albero deldocumento prima dell’origine di localizzazione.

Psibiling Specifica gli elementi di pari livello che compaiono prima dell’originedi localizzazione. Gli elementi di pari livello condividono lo stesso elementoprincipale.

Following Specifica i nodi che compaiono nella struttura ad albero deldocumento dopo l’origine di localizzazione.

Fsibling Specifica gli elementi di pari livello che compaiono dopo l’origine dilocalizzazione.

Un esempio di termine di localizzazione relativo è il seguente:Child(2,SECTION)

Identifica il secondo figlio di tipo SECTION.

TERMINI DI LOCALIZZAZIONE CON SPANNING

Un termine di localizzazione con spanning punta a una sottorisorsa individuando i datipresenti tra i due argomenti. Nell’esempio seguente, gli argomenti sono relativiall’origine di localizzazione per il termine di localizzazione con spanning:Id(PRODUCT).Span(Child(1),Child(3))

Si seleziona dal primo al terzo figlio dell’elemento PRODUCT.

TERMINI DI LOCALIZZAZIONE DI ATTRIBUTI

Il termine di localizzazione di un attributo esamina il nome di un attributo, individual’attributo e ne restituisce il valore. L’esempio seguente mostra l’utilizzo di questotermine:Id(PRODUCT).Attr(N)

Si seleziona il valore dell’attributo N dell’elemento PRODUCT.

TERMINI DI LOCALIZZAZIONE DI STRINGHE

Il termine di localizzazione di una stringa seleziona una o più stringhe o posizioni trastringhe nell’origine di localizzazione. I termini di localizzazione delle stringhesupportano le seguenti parole chiave:

InstanceOrAll Identifica l’occorrenza ordinale della stringa specificata. Se ilnumero è positivo, XPointer inizia a contare a partire dall’inizio dell’origine dilocalizzazione. Se il numero è negativo, XPointer inizia a contare in sensoinverso a partire dalla fine dell’origine di localizzazione. Se si utilizza il valoreAll, verranno utilizzate tutte le occorrenze della stringa.

SkipLit Specifica la stringa da individuare nell’origine di localizzazione.●

Position Specifica l’offset di carattere dall’inizio della stringa o delle stringheall’inizio della corrispondenza di stringa finale.

Length Specifica il numero di caratteri da selezionare nella stringa.●

Un esempio di termine di localizzazione di stringa è il seguente:Id(PRODUCT).String(3,"widget")

Si seleziona il terzo elemento di PRODUCT contenente la stringa "widget".

Infine un semplice esempio di utilizzo di un XPointer :HREF="http://www.foo.com/br.xml#id(list).child(3,item)"

XML: Capitolo IV: Ampliare i documenti XML - Concetti fondamentali relativi al linguaggio XPointer

http://www.html.it/xml/guida/xpoint.htm (2 di 3) [19/06/2001 14.14.07]

Page 77: Corso-Guida - HTML.it - Corso XML

viene selezionato il terzo elemento item che si trova all’interno dell’elemento list deldocumento br.xml.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Concetti fondamentali relativi al linguaggio XPointer

http://www.html.it/xml/guida/xpoint.htm (3 di 3) [19/06/2001 14.14.07]

Page 78: Corso-Guida - HTML.it - Corso XML

 XML-Data

L’XML è un linguaggio orientato agli oggetti e, come altri linguaggi di questo tipo,permette di creare oggetti e di specificare i loro attributi. In generale si fa riferimentoad un oggetto XML come ad un elemento XML. L’XML Data è un DTD costruitosecondo le specifiche XML, che può essere utilizzato per rappresentare strutture daticomunque complesse attraverso uno schema.

XML-Data quindi è un linguaggio utilizzato per creare uno schema, che identifica lastruttura e i vincoli per un particolare documento XML.

Molti sviluppatori che operano all’interno di aziende pensavano che il linguaggio delmeccanismo DTD non fosse adeguato alle necessità delle applicazioni XML presentie future. Di conseguenza, diverse aziende e istituti di studio di ricerca, quali Microsoft,DataChannel e l’università di Edinburgo, hanno espresso l’esigenza di un nuovomeccanismo che svolgesse le stesse funzioni di base del meccanismo DTD,fornendo allo stesso tempo maggiori potenzialità e flessibilità.

Attenendosi al vocabolario specificato nel DTD dell’XML Data, è facile rappresentarebasi di dati relazionali o ad oggetti. Un aspetto molto positivo è che utilizzando l’XMLData schema possiamo evitare di creare un nostro DTD specifico; quindi siamo sicuriche lo schema così creato sarà interpretato da qualunque DBMS che conosce il DTDXML Data.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - XML-Data

http://www.html.it/xml/guida/xmldata.htm [19/06/2001 14.14.11]

Page 79: Corso-Guida - HTML.it - Corso XML

 Gli obiettivi di XML-Data

XML-Data è stato creato per eliminare alcuni limiti della DTD. Ecco come XML-Dataraggiunge tali obiettivi.

Gestione dei documenti dello schema senza necessità di utilizzo distrumenti speciali. Le DTD vengono scritte utilizzando una sintassiparticolare specifica. Per questo motivo, la funzionalità dell’XML per l’utilizzodelle DTD richiede non solo autori esperti del linguaggio DTD, ma anchestrumenti speciali in grado di leggere e scrivere nelle DTD, per ogni strumentoXML sviluppato. Il primo obiettivo di XML-Data è quindi l’eliminazionedell’utilizzo di strumenti speciali ed è raggiunto mediante il semplice utilizzodella sintassi XML per il linguaggio.

1.

Flessibilità degli schemi. Gli schemi devono essere sufficientemente flessibiliper consentirne l’adattamento a un’applicazione specifica, eliminando i relativivincoli. In altre parole, non è necessaria la flessibilità dell’applicazione per loschema. Questa flessibilità è ottenuta mediante una sintassi di definizioneaperta dello schema, con la quale uno schema può essere reso specificoaggiungendo elementi o attributi.

2.

Semplicità del linguaggio al fine di consentirne l’implementazione in tuttigli elaboratori XML. Questo obiettivo garantisce che il linguaggio XML-Datanon sia complesso e possa quindi essere implementato da tutti gli sviluppatoridi elaboratori XML. Questo obiettivo può essere raggiunto utilizzando lasintassi XML per definire il linguaggio dello schema. In questo modo,l’implementazione viene semplificata e non è più necessario disporre di unparticolare elaboratore per analizzare lo schema.

3.

XML-Data deve soddisfare i requisiti delle applicazioni Web (ad esempiole applicazioni per scambi commerciali) che riguardano la convalida deidati aggiuntivi e di quelli espressi dalla DTD corrente. La DTD definisce lastruttura e le regole del documento, ma presenta dei limiti nella definizione deitipi di dati e nella convalida dei dati. Il linguaggio XML-Data definisce i tipi didati primitivi e permette di determinare intervalli di valori di dati, ad esempio,consentendo all’autore di determinare i valori massimi e minimi. Questo tipo dicaratteristiche sono tipiche dei linguaggi di database relazionali, come SQL(Structured Query Language), e dei linguaggi di programmazione più recenti.

4.

Il linguaggio dello schema deve supportare la funzionalità che consenteai singoli documenti di comprendere parti definite in fonti di dati diverse.I documenti XML, come sappiamo, possono comprendere altri documenti oparti di altri documenti mediante l’inserimento di puntatori all’interno della DTD.Questo obiettivo stabilisce che XML-Data, fornirà una funzionalità simile,ottenuta mediante l’utilizzo dello spazio dei nomi negli schemi XML-Data.

5.

XML-Data deve essere totalmente compatibile con XML 1.0. Lo scopo diquesto obiettivo è minimizzare i problemi relativi al superamento delletecnologie dovuto a nuove versioni o a aggiornamenti della tecnologia stessa.Lo scopo è diffondere l’utilizzo di XML-Data, grazie anche al fatto che utilizzala sintassi XML. Questo obiettivo ne amplia il campo di azione poiché prevedeche XML-Data sia compatibile con XML 1.0.

6.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Gli obiettivi di XML-Data

http://www.html.it/xml/guida/obietti.htm [19/06/2001 14.14.15]

Page 80: Corso-Guida - HTML.it - Corso XML

 Linguaggio schema XML-Data

Qualsiasi schema di XML-Data è un documento XML ben formato e, in quanto tale,può costituire anche un documento XML valido. Il linguaggio XML-Data si basa sullaDTD XML-Data. Un documento può essere valido, se fa riferimento a tale DTD, marisulta un documento ben formato anche se è conforme alla specifica XML-Data,nonostante nel prologo non vi sia alcun riferimento della DTD.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Linguaggio schema XML-Data

http://www.html.it/xml/guida/schema.htm [19/06/2001 14.14.18]

Page 81: Corso-Guida - HTML.it - Corso XML

 Struttura del documento delloschema

Un documento XML di base è composto da un prologo e da un elemento Document. Anche ildocumento dello schema XML-Data è composto da questi componenti. Esiste tuttavia unadifferenza tra i due, ossia che un documento dello schema non contiene alcuna DTD. Lastruttura del documento è infatti definita all’interno di un elemento Schema che costituiscel’elemento Document, o Root, in una definizione di schema.

Questo documento può essere utilizzato nel seguente modo:<?xml version="1.0"?><Schema name="nomeschema" xmlns="urn:schemas-microsoft-com:xml-data"> <!-- Qui vi sono le dichiarazioni --> <ElementType name="nomeelemento" content="tipocontent"/></Schema>

L’elemento Schema deve essere derivato dallo spazio del nome xml-dataurn:schemas-microsoft-com:xml-data. Non è necessario dichiarare lo spazio del nome nelprologo dello schema.

Le dichiarazioni dello schema possono avere aree di validità diverse. Questo significa chepossono essere sia dichiarazioni di primo livello sia dichiarazioni di livello locale. L’area divalidità di una dichiarazione identifica dove e come viene utilizzato un elemento dichiaratoall’interno di un documento dello schema.

DICHIARAZIONI DI PRIMO LIVELLO

Le dichiarazioni di primo livello includono qualsiasi tipo di elemento o di attributo dichiaratoall’interno dell’elemento Schema. I tipi di elemento o attributo dichiarati nell’area di validità diprimo livello possono essere indicati nella dichiarazione del contenuto di altri tipi di elementopresenti nello stesso schema. Ad esempio, nello schema che segue, il nome del tipo dielemento è dichiarato al primo livello e ne facciamo riferimento anche nella dichiarazione deltipo di elemento Plant:<Schema name="wildflowers" xmlns="urn:schemas-microsoft-com:xml-data"> <ElementType name="name" content="textOnly"/>

<ElementType name="plant"> <element type="name"/> </ElementType></Schema>

DICHIARAZIONI DI LIVELLO LOCALE

Una dichiarazione che appare all’interno di un’altra dichiarazione, che non è di primo livello, èconsiderata di area di validità di livello locale. E’ possibile fare riferimento alla dichiarazione dilivello locale solo all’interno della dichiarazione in cui è contenuta. Ad esempio, seaggiungiamo una dichiarazione dell’attributo di livello locale alla dichiarazione del tipo dielemento Plant otteniamo quanto segue:<Schema name="wildflowers" xmlns="urn:schemas-microsoft-com:xml-data"> <ElementType name="name" content="textOnly"/>

<ElementType name="plant"> <element type="name"/> <attribute name="bestseller" values="yes no"/> </ElementType></Schema>

L’attributo bestseller può essere utilizzato solo nella dichiarazione del tipo di elemento Plant.

  L e z i o n e    s u c c e s s i v a  

XML: Capitolo IV: Ampliare i documenti XML - Struttura del documento dello schema

http://www.html.it/xml/guida/schema2.htm (1 di 2) [19/06/2001 14.14.21]

Page 82: Corso-Guida - HTML.it - Corso XML

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Struttura del documento dello schema

http://www.html.it/xml/guida/schema2.htm (2 di 2) [19/06/2001 14.14.21]

Page 83: Corso-Guida - HTML.it - Corso XML

 Dichiarazioni del tipo di elemento

Il tipo di elemento è dichiarato nell’elemento ElementType. Ogni dichiarazione del tipo dielemento deve includere un attributo Name, che definisce il tipo di elemento. Adesempio. La dichiarazione del tipo di elemento riportata di seguito dichiara un tipo dielemento con il nome Plant:<ElementType name="plant">

Il tipo di contenuto di elemento può essere dichiarato con l’attributo content. In questomodo il contenuto dell’elemento è vincolato al tipo specificato.

TIPO DI CONTENUTO

Ogni tipo di elemento può contenere una delle quattro categorie relative al contenuto:vuoto, solo testo, solo sottoelementi o una combinazione di testo e sottoelementi. Ivalori possibili sono i seguenti:

empty - non contiene alcun tipo di contenuto●

textOnly - contiene solo testo●

eltOnly - contiene solo sottoelementi●

mixed - contiene una combinazione di testo e sottoelementi●

Oltre ai vincoli relativi al contenuto, una dichiarazione del tipo di elemento può anchespecificare il pattern in cui gli elementi nella dichiarazione appaiono, utilizzandol’attributo order.

ORDINAMENTO DEL CONTENUTO

L’attributo order vincola il pattern per i tipi di elementi dichiarati in una dichiarazione deltipo di elemento. I valori possibili sono i seguenti:

seq - Gli elementi devono apparire nella stessa sequenza degli elementi a cui sifa riferimento nella dichiarazione del tipo di elemento. Questo è il patternpredefinito per il contenuto eltOnly.

one - Un sottoelemento del tipo dichiarato nella dichiarazione del tipo di elementodeve essere contenuto nell’elemento principale.

all - Un elemento di ogni tipo dichiarato nella dichiarazione del tipo di elementodeve comparire come sottoelemento, ma i sottoelementi possono avere un ordinequalsiasi.

many - Ciascuno degli elementi dichiarati nella dichiarazione del tipo di elementopuò avere un ordine qualsiasi. Questo è il pattern predefinito per il contenutomixed.

L’esempio seguente mostra la dichiarazione del tipo di elemento Plant, che contiene isottoelementi che devono essere ordinati in modo sequenziale:<ElementType name="name" content="textOnly"/><ElementType name="growth" content="mixed"/><ElementType name="saleinfo" content="mixed"/>

<ElementType name="plant" content="eltOnly" order="seq"> <element type="name"/> <element type="growth"/> <element type="saleinfo"/></ElementType>

E’ possibile applicare altri vincoli raggruppando i riferimenti degli elementi mediantel’elemento Group. Questo elemento supporta l’attributo order con gli stessi valoriutilizzati per l’elemento ElementType. Ecco un esempio che utilizza l’elemento Group:<ElementType name="name" content="textOnly"/><ElementType name="zone" content="textOnly"/><ElementType name="light" content="textOnly"/>

XML: Capitolo IV: Ampliare i documenti XML - Dichiarazioni del tipo di elemento

http://www.html.it/xml/guida/dichielem.htm (1 di 3) [19/06/2001 14.14.29]

Page 84: Corso-Guida - HTML.it - Corso XML

<ElementType name="price" content="textOnly"/>

<ElementType name="plant" content="eltOnly" order="seq"> <element type="name"/> <group order="one"> <element type="zone"/> <element type="light"/> <element type="price"/> </group></ElementType>

In questo caso il tipo di elemento Plant deve contenere un nome a cui deve seguire unodegli elementi Zone, Light o Price.

QUANTITA’ DI ELEMENTI E GRUPPI

Come nelle DTD XML, è possibile applicare vincoli in modo da determinare la posizionee il numero delle volte in cui un elemento o un gruppo può essere ripetuto all’interno diun documento. Gli attributi minOccurs e maxOccurs possono essere specificati neglielementi Element e Group. L’attributo minOccurs specifica il numero minimo delleripetizioni di un elemento, mentre maxOccurs quello massimo. Nella seguente tabellaindichiamo le possibili combinazioni di valori per gli attributi minOccurs e maxOccurscon i relativi significati:

minOccurs maxOccurs Numero di ripetizioni dell’elementoo del gruppo

1 o non specificato 1 o non specificato 1 (Necessario)

0 1 o non specificato 0 o 1 (opzionale)

Maggiore di 1 Maggiore di n Almeno minOccurs ripetizione, manon più di maxOccurs

Maggiore di 1 Minore di 1 0

0 "*" Qualsiasi numero di ripetizioni

1 "*" Almeno un’occorrenza

Maggiore di 0 "*" Almeno minOccurs ripetizioni

Qualsiasi valore 0 0

Il valore predefinito per ambedue gli attributi minOccurs e maxOccurs è 1. Questosignifica che, se non specificato diversamente, gli elementi devono occorrere una solavolta all’interno di un determinato tipo di elemento. Nell’esempio che segue il gruppodeve occorrere almeno una volta, quindi anche più volte:<ElementType name="name" content="textOnly"/><ElementType name="zone" content="textOnly"/><ElementType name="light" content="textOnly"/><ElementType name="price" content="textOnly"/>

<ElementType name="plant" content="eltOnly" order="seq"> <element type="name"/>

<group minOccurs="1" maxOccurs="*" order="one"> <element type="zone"/> <element type="light"/> <element type="price"/> </group></ElementType>

XML: Capitolo IV: Ampliare i documenti XML - Dichiarazioni del tipo di elemento

http://www.html.it/xml/guida/dichielem.htm (2 di 3) [19/06/2001 14.14.29]

Page 85: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Dichiarazioni del tipo di elemento

http://www.html.it/xml/guida/dichielem.htm (3 di 3) [19/06/2001 14.14.29]

Page 86: Corso-Guida - HTML.it - Corso XML

 Dichiarazioni del tipo di attributo

Un tipo di attributo viene dichiarato all’interno di un elemento AttributeType.XML-Data supporta gli stessi tipi di attributo disponibili nella DTD XML.

ELEMENTI AttributeType

Come per l’elemento ElementType, in ogni elemento AttributeType deve esserespecificato un nome. Le dichiarazioni del tipo di attributo sono di primo livello eindipendenti dalle dichiarazioni del tipo di elemento. Si può fare riferimento inqualsiasi dichiarazione del tipo di elemento. Eccone un esempio:<AttributeType name="bestseller"/><ElementType name="plant"> <attribute type="bestseller"/></ElementType>

VALORI PREDEFINITI

Un riferimento o una dichiarazione di un tipo di attributo può includere anche unattributo default, che indica il valore predefinito dell’attributo. Ad esempio, nelloschema che segue, l’attributo default è incluso nella dichiarazione del tipo di attributo:<AttributeType name="bestseller" default="yes"/><ElementType name="plant"> <attribute type="bestseller"/></ElementType>

In questo modo viene specificato che il valore dell’attributo default verrà applicatoogniqualvolta il tipo di attributo viene utilizzato in un elemento.

ATTRIBUTO required

Un riferimento o una dichiarazione del tipo di attributo può contenere un attributorequired che specifica se è necessario che l’attributo abbia un valore.<ElementType name="plant"> <attribute type="bestseller" default="no" required="yes"/></ElementType>

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Dichiarazioni del tipo di attributo

http://www.html.it/xml/guida/dichiattr.htm [19/06/2001 14.14.33]

Page 87: Corso-Guida - HTML.it - Corso XML

 Tipi di dati

XML-Data supporta una gamma di tipi di dati più vasta rispetto ai 10 tipi di dati dell’XML.Come gli schemi sono definiti dallo spazio dei nomi xml-data, alo stesso modo i tipi di datisono definiti dallo spazio dei nomi datatypes, come il seguente esempio:<Schema name="wildflowers" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">

<AttributeType name="dateorder"/> <ElementType name="plant"> <attribute type="dateorder"/> </ElementType></Schema>

ATTRIBUTO type

Un tipo di dati viene definito riferendosi ad esso con l’attributo type nello spazio dei nomidatatypes. Nell’esempio seguente, viene specificato un tipo di dati per il tipo di attributodateorder:<AttributeType name="dateorder" dt:type="dateTime"/> <ElementType name="plant"> <attribute type="dateorder"/></ElementType>

I tipi di dati degli elementi più usati sono:char●

string●

int●

float●

boolean●

number●

uri●

uuid●

VINCOLI DEI TIPI DI DATI

E’ possibile applicare vincoli a valori dei tipi di dati. I vincoli facilitano l’identificazione del tipodei dati contenuti in un elemento o attributo.

min e max Gli attributi min e max definiscono i limiti e superiori inclusi relativi ai daticontenuti in un elemento o attributo.

enumeration A volte è necessario enumerare i valori di un elemento o attributo. Questo èpossibile mediante il tipo di dati enumeration e l’attributo values.

maxLength L’attributo maxLength specifica la lunghezza del valore in numero di caratteri.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Tipi di dati

http://www.html.it/xml/guida/tipidati.htm [19/06/2001 14.14.36]

Page 88: Corso-Guida - HTML.it - Corso XML

 Funzionamento degli schemi

Dal momento che uno degli obiettivi principali di XML-Data è di fornire una validaalternativa alle DTD, riprendiamo l’esempio di DTD del messaggio di posta elettronica etrasformiamolo in uno schema XML-Data. In questo modo sarà possibile evidenziare lecorrispondenze tra DTD e schemi.

MESSAGGIO DI POSTA ELETTRONICA

Il documento XML utilizzato nei capitoli precedenti era un messaggio di posta elettronicache comprendeva le informazioni dell’intestazione e il contenuto del documento. Ecco ilcodice XML che appartiene a quel documento:<?xml version="1.0"?><!DOCTYPE EMAIL SYSTEM "my.dtd">

<EMAIL LANGUAGE="Western" ENCRYPTED="128" PRIORITY="HIGH"> <TO>[email protected]</TO> <FROM>&SIGNATURE;@msn.com</FROM> <CC>[email protected]</CC> <BCC>[email protected]</BCC> <SUBJECT>Congratulazioni</SUBJECT> <BODY> Ciao, questo e' un esempio di file XML ! </BODY></EMAIL>

Il documento contiene attributi, entità interne e riferimenti alla DTD nel prologo.

DTD

Una delle operazioni che verranno effettuate sarà la sostituzione della DTD con unoschema. Prima di tutto sarà necessario rivedere la DTD:<?xml version="1.0"?><!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)><!ATTLIST EMAIL LANGUAGE (Western|Greek|Latin|Universal) "Western" ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL|LOW|HIGH) "NORMAL">

<!ELEMENT TO (#PCDATA)><!ELEMENT FROM (#PCDATA)><!ELEMENT CC (#PCDATA)>

<!ELEMENT BCC (#PCDATA)><!ATTLIST BCC HIDDEN CDATA #FIXED "TRUE">

<!ELEMENT SUBJECT (#PCDATA)><!ELEMENT BODY (#PCDATA)>

<!ENTITY SIGNATURE "Flavio">

Sarà necessario incorporare alcuni elementi della DTD nello schema. Oltre a definire lastruttura generale di un messaggio di posta elettronica, il DTD contiene altri elementispecifici.

L’elemento To è dichiarato con un segno (+), a indicare che dovrà occorrere unao più volte.

L’elemento From è dichiarato senza alcun simbolo, a indicare che dovràoccorrere una sola volta.

Gli elementi Cc e Bcc sono dichiarati con un asterisco (*), a indicare che gli●

XML: Capitolo IV: Ampliare i documenti XML - Funzionamento degli schemi

http://www.html.it/xml/guida/funzio.htm (1 di 5) [19/06/2001 14.14.45]

Page 89: Corso-Guida - HTML.it - Corso XML

elementi sono opzionali, ma possono occorrere più di una volta.Gli elementi Subject e Body sono dichiarati con un punto di domanda (?), aindicare che gli elementi sono opzionali, ma possono essere ripetuti più di unavolta.

Gli elementi Email e Bcc hanno attributi associati, con valori predefiniti.●

La maggior parte degli elementi sono dichiarati come elementi di testo(#PCDATA).

L’entità Signature è dichiarata e contiene un valore.●

Gli elementi indicano quanto è necessario per creare un documento dello schema chesoddisfi i criteri di corrispondenza con la DTD. L’ultimo elemento necessario perutilizzare questi esempi è una pagina XSL utilizzata come modello per visualizzare idati.

PAGINA XSL

La pagina XSL utilizzata per visualizzare il contenuto XML è la seguente:<?xml version="1.0"?><xsl:template xmlns:xsl="uri:xsl">

<DIV STYLE="font-weight:bold;font-size:20"> To: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="EMAIL/TO"/> </SPAN> </DIV> <BR></BR>

<DIV STYLE="font-weight:bold;font-size:20"> From: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="EMAIL/FROM"/> </SPAN> </DIV> <BR></BR>

<DIV STYLE="font-weight:bold;font-size:20"> Cc: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="EMAIL/CC"/> </SPAN> </DIV> <BR></BR>

<DIV STYLE="font-weight:bold;font-size:20"> Subject: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="EMAIL/SUBJECT"/> </SPAN> </DIV> <HR></HR>

<SPAN STYLE="font-style:italic;font-size:32;color:orange"> <xsl:value-of select="EMAIL/BODY"/> </SPAN>

</xsl:template>

La visualizzazione del documento è la seguente:

XML: Capitolo IV: Ampliare i documenti XML - Funzionamento degli schemi

http://www.html.it/xml/guida/funzio.htm (2 di 5) [19/06/2001 14.14.45]

Page 90: Corso-Guida - HTML.it - Corso XML

clicca qui per vedere l'esempio email.xml (solo MSIE 5.0 o superiore)

SCHEMA

A questo punto procediamo con la creazione dello schema. E’ necessario innanzituttocreare il documento dello schema. Le regole semantiche e strutturali dovranno essere lestesse utilizzate nella DTD. L’esempio seguente contiene il codice dello schema:<?xml version="1.0"?>

<Schema name="email" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

<AttributeType name="language" dt:type="enumeration" dt:values="Western Greek Latin Universal"/> <AttributeType name="encrypted"/> <AttributeType name="priority" dt:type="enumeration" dt:values="NORMAL LOW HIGH"/> <AttributeType name="hidden" default="true"/>

<ElementType name="to" content="textOnly"/> <ElementType name="from" content="textOnly"/> <ElementType name="cc" content="textOnly"/>

<ElementType name="bcc" content="mixed"> <attribute type="hidden" required="yes"/> </ElementType>

<ElementType name="subject" content="textOnly"/> <ElementType name="body" content="textOnly"/>

<ElementType name="email" content="eltOnly"> <attribute type="language" default="Western"/> <attribute type="encrypted"/> <attribute type="priority" default="NORMAL"/> <element type="to" minOccurs="1" maxOccurs="*"/> <element type="from" minOccurs="1" maxOccurs="1"/> <element type="cc" minOccurs="0" maxOccurs="*"/> <element type="bcc" minOccurs="0" maxOccurs="*"/> <element type="subject" minOccurs="0" maxOccurs="1"/> <element type="body" minOccurs="0" maxOccurs="1"/> </ElementType>

</Schema>

Lo schema è molto diverso dalla DTD, tuttavia si tratta sempre di codice XML, per cui lasintassi e l’impostazione sono familiari. A questo punto controlliamo il codice in base alseguente elenco di requisiti.

XML: Capitolo IV: Ampliare i documenti XML - Funzionamento degli schemi

http://www.html.it/xml/guida/funzio.htm (3 di 5) [19/06/2001 14.14.45]

Page 91: Corso-Guida - HTML.it - Corso XML

L’elemento To è dichiarato in modo che sia ripetuto una o più volte. I riferimentiall’elemento To sono gli attributi minOccurs="1" e maxOccurs="*", che indicano chel’elemento deve occorrere almeno una volta e che il numero di ripetizioni è illimitato.

L’elemento From è dichiarato in modo che occorra una sola volta. I riferimentiall’elemento From sono minOccurs="1" e maxOccurs="1", che indicano che l’elementodeve occorrere una sola volta.

Gli elementi Cc e Bcc sono dichiarati in modo che gli elementi siano opzionali eoccorrano più di una volta. Ambedue gli elementi devono contenere gli attributiminOccurs="0" e maxOccurs="*", che indicano che sono opzionali e che il numero dioccorrenze è illimitato.

Gli elementi Subject e Body sono dichiarati in modo che gli elementi sianoopzionali e che possano occorrere una sola volta. Gli attributi minOccurs="0" emaxOccurs="1" indicano che gli elementi sono opzioni e che possono apparire una solavolta.

Gli elementi Email e Bcc hanno attributi associati, con valori predefiniti dovenecessario. I tipi di attributi sono dichiarati nel livello superiore del documento e vi vienefatto riferimento nelle rispettive dichiarazioni dei tipi di elemento. Non occorre dichiararei tipi di attributi al livello superiore, poiché è sufficiente che siano dichiarazioni a livellolocale.

La maggior parte degli elementi è dichiarata come elementi di testo. La maggiorparte delle dichiarazioni include l’attributo content"textOnly", che indica che essecontengono solo testo. L’eccezione è rappresentata dall’elemento Email, che contienesolo sottoelementi, e dall’elemento Bcc, che contiene un attributo oltre al testo.

L’entità Signature è dichiarata e contiene un valore. Le entità non sono ancorasupportate negli schemi XML-Data, per cui non è necessario aggiungere nulla.

Se lo schema soddisfa tutti i requisiti relativi al messaggio di posta elettronica, èpossibile passare alla modifica dell’elemento XML per utilizzarlo con lo schema, nelmodo seguente:<?xml version="1.0"?>

<em:email xmlns:em="x-schema:myschema.xml" language="Western" encrypted="128" priority="HIGH"> <em:to>[email protected]</em:to> <em:from>[email protected]</em:from> <em:cc>[email protected]</em:cc> <em:subject>Congratulazioni</em:subject> <em:body>Ciao, questo e' un esempio di file</em:body></em:email>

In questo modo è possibile notare due importanti differenze rispetto alla versione DTDnel documento XML. Innanzitutto, invece del riferimento alla DTD nel prologo,nell’elemento em:email è presente lo spazio del nome dello schema. Inoltre neldocumento tutti i tag degli elementi contengono il prefisso em, che li identifica comeparte di un namespace associato. Ad eccezione di queste due piccole ma importantidifferenze, il documento è fondamentalmente lo stesso utilizzato per l’esempio delmessaggio di posta elettronica iniziale. Le regole strutturali del documento sono ugualiperché da un punto di vista funzionale lo schema corrisponde alla DTD creataprecedentemente. Per formattare il documento XML, viene utilizzato lo stesso foglio distile XSL del messaggio di posta elettronica con l’unica differenza che nei pattern vieneinserito il prefisso em.<?xml version="1.0"?><xsl:template xmlns:xsl="uri:xsl">

<DIV STYLE="font-weight:bold;font-size:20"> To: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="em:email/em:to"/> </SPAN> </DIV> <BR></BR>

<DIV STYLE="font-weight:bold;font-size:20"> From: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="em:email/em:from"/> </SPAN>

XML: Capitolo IV: Ampliare i documenti XML - Funzionamento degli schemi

http://www.html.it/xml/guida/funzio.htm (4 di 5) [19/06/2001 14.14.45]

Page 92: Corso-Guida - HTML.it - Corso XML

</DIV> <BR></BR>

<DIV STYLE="font-weight:bold;font-size:20"> Cc: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="em:email/em:cc"/> </SPAN> </DIV> <BR></BR>

<DIV STYLE="font-weight:bold;font-size:20"> Subject: <SPAN STYLE="font-weight:normal;color:red"> <xsl:value-of select="em:email/em:subject"/> </SPAN> </DIV> <HR></HR>

<SPAN STYLE="font-style:italic;font-size:32;color:orange"> <xsl:value-of select="em:email/em:body"/> </SPAN>

</xsl:template>

E’ possibile notare che nonostante il codice sia molto diverso rispetto ai documenti diorigine, il risultato è pressoché lo stesso. Inoltre si ottiene un documento convalidatocon i vantaggi offerti da uno schema, invece di una DTD, insieme alle potenzialità e allaflessibilità dell’XSL per la formattazione.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo IV: Ampliare i documenti XML - Funzionamento degli schemi

http://www.html.it/xml/guida/funzio.htm (5 di 5) [19/06/2001 14.14.45]

Page 93: Corso-Guida - HTML.it - Corso XML

 Channel Definition Format (CDF)

Channel Definition Format (CDF) è una applicazione XML sviluppata dalla Microsoftche permette di creare un file che descrive un canale Web. Nel World Wide Web uncanale è un sito Web che presenta informazioni aggiornate periodicamente; un utentepuò abbonarsi a tale canale e ricevere in modo automatico le informazioni aggiornate.Per utilizzare questo servizio l’utente ha bisogno del browser Microsoft InternetExplorer 4.0 o successive edizioni.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML

http://www.html.it/xml/guida/cdf.htm [19/06/2001 14.14.50]

Page 94: Corso-Guida - HTML.it - Corso XML

 Webcasting (tecnologia push)

CDF implementa la tecnologia Webcasting (detta anche tecnologia push) che ingenerale permette di aggiornare informazioni che risiedono sul computer di un utente.Tale aggiornamento avviene periodicamente tramite il World Wide Web. Latecnologia Webcasting è stata implementata sia dalla Microsoft (MSIE), che dallaNetscape (Netcaster, componente della suite Communicator). Nel Web esistonoanche altri servizi che implementano tale tecnologia, come Pointcast e Backweb.

In generale quando si naviga in Internet il browser recupera le pagine da un serverWWW. Questo recupero viene spesso definito pulling (estrarre): il browser estrae lepagine dal server e le invia al desktop. Con la tecnologia Webcasting si può faremolto di più: è il server WWW che "spinge" le informazioni nel client (per questo vienechiamata anche tecnologia push) senza che l’utente ne faccia specifica richiesta (aparte ovviamente la richiesta di abbonamento iniziale). In questo modo l’accesso alleinformazioni da parte dell’utente avviene senza ritardi dovuti al download. L’accessopuò avvenire anche off-line (utente non collegato ad Internet) poiché le informazionivengono memorizzate in una cache; inoltre l’utente è sicuro di rimanere sempreaggiornato.

In pratica il modo push di raccolta delle informazioni è possibile solo in ambienteintranet perché il server è sicuro di trovare i client sempre disponibili a ricevere leinformazioni aggiornate. In un ambiente home (utente che si collega saltuariamentead Internet) il modo di raccolta delle informazioni è detto smart pull: il browser estraele informazioni dal server WWW ma con due differenze molto importanti rispetto ilmodo pulling:

Il browser sa dove cercare le informazioni che interessano, quindi non sidevono più sprecare ore per la loro ricerca.

Si può impostare il browser in modo che controlli automaticamente le nuoveinformazioni sul server WWW quando ci colleghiamo ad Internet.

In una soluzione smart pull esiste sul client un programma detto scheduler cheautomaticamente controlla via HTTP la presenza di informazioni aggiornate sul serverWWW che ospita il canale a cui ci siamo abbonati. Per programmare lo schedulerdeve esistere un file che contenga informazioni sul canale, quali l’URL del canalestesso, la frequenza con cui vengono aggiornate le informazioni, etc. CDF è unaproposta della Microsoft per standardizzare file di questo tipo.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Webcasting (tecnologia push)

http://www.html.it/xml/guida/push.htm [19/06/2001 14.14.52]

Page 95: Corso-Guida - HTML.it - Corso XML

 Struttura di un file CDF

Un file CDF deve essere preparato dall’amministratore del canale; contiene tutte leinformazioni sul canale e tutte le informazioni su come il client deve eseguire lo smartpull. Vediamo un semplice esempio di file CDF:<?XML version="1.0"?><CHANNEL HREF="http://www.miosito.com/index.html" LASTMOD="1998-07-07T12.00" LEVEL="2" PRECACHE="YES"> <TITLE>Il mio sito</TITLE>

<ABSTRACT>Nel mio sito potete trovare informazioni molto utili su tutto</ABSTRACT> <SCHEDULE> <INTERVALTIME DAY="1"/> </SCHEDULE> <LOGO HREF="http://www.miosito.com/images/logo.gif" STYLE="IMAGE"/></CHANNEL>

La prima istruzione specifica che il file CDF è un documento XML. A questo proposito,MSIE 4 include al suo interno un processore XML scritto in C++ per interpretare i fileCDF. Channel è l’elemento root; l’attributo Href identifica il canale (tramite URL).L’attributo Lastmod specifica la data dell’ultimo aggiornamento del canale quindi devonoessere scaricate tutte le pagine che sono state modificate dopo le ore dodici del 7 Luglio1998; l’attributo Level specifica che devono essere scaricate anche tutte la paginecollegate alle pagine del canale (fino al secondo livello). Infine l’attributo Precachespecifica che il contenuto scaricato deve essere memorizzato nella cache del client.L’elemento Title contiene il titolo del canale e l’elemento Abstract una descrizionedettagliata del suo contenuto. L’elemento Schedule serve per specificare al client lafrequenza degli aggiornamenti; nell’esempio il client sa che ogni giorno sono disponibilinuovi aggiornamenti.

Per specificare la frequenza in base alla quale un canale deve essere aggiornato, èpossibile utilizzare un programma (schedule). È possibile utilizzare anche l’attributoHour:<SCHEDULE> <INTERVALTIME HOUR="12"/> <ERLIESTTIME HOUR="1"/> <LATESTTIME HOUR="2"/></SCHEDULE>

Il codice riportato specifica che gli aggiornamenti si verificano ogni dodici ore (ingenerale il primo aggiornamento parte sempre a mezzanotte). Per evitare che il serversubisca degli overload nelle ore specificate (nell’esempio a mezzanotte e amezzogiorno), l’amministratore del canale inserisce anche gli elementi Earliesttime eLatesttime, che obbliga il client a collegarsi fra l’una e le due e fra le tredici e lequattordici (naturalmente le ore sono riferite a questo esempio).

In Schedule è possibile specificare anche gli attributi Startdate e Stopdate perspecificare la data di inizio e di fine del programma:<SCHEDULE STARTDATE="1998-01-01" STOPDATE="1998-12-31"> <INTERVALTIME DAY="1"/></SCHEDULE>

Infine l’elemento Logo associa al canale un’immagine; l’attributo Style specifica ledimensioni dell’immagine:

Value Size

"ICON" 16H x 16W

XML: Capitolo V: Applicazioni dell'XML - Struttura di un file CDF

http://www.html.it/xml/guida/strutturacdf.htm (1 di 3) [19/06/2001 14.15.04]

Page 96: Corso-Guida - HTML.it - Corso XML

"IMAGE" 32H x 80W

"IMAGE-WIDE" 32H x 194W

Se un canale è diviso in varie sezioni, è possibile impostare delle gerarchie nel file CDF.L’elemento root Channel può contenere altri elementi Channel; ogni elemento Channelpuò contenere degli elementi Item. Vediamo un esempio:<?XML VERSION="1.0"?><CHANNEL BASE="http://www.stream.it/iechannel/" HREF="home/stream.htm"> <TITLE>I Canali Stream</TITLE> <ABSTRACT>I canali Stream: intrattenimento, viaggi, news... e molto altro!</ABSTRACT> <LOGO HREF="images/80x32.gif" STYLE="IMAGE"/> <SCHEDULE> <INTERVALTIME DAY="1"/> <EARLIESTTIME HOURS="6"/> </SCHEDULE>

<CHANNEL HREF="games/news/gamenews.htm"> <TITLE>InGame</TITLE> <ABSTRACT>Giochi sempre nuovi, insieme a tutte le news dal mondo ludico</ABSTRACT> <LOGO HREF="games/16_ingame.ico"STYLE="ICON"/> <ITEM HREF="games/fotomisteriosa/fotomisteriosa.html" LASTMOD="1997.09.30T14:49+0100" PRECACHE="YES" LEVEL="1"> <TITLE>La foto misteriosa</TITLE> <ABSTRACT>Confrontati con questo rompicapo... Buon divertimento</ABSTRACT> <LOGO HREF="games/fotomisteriosa/icona.ico" STYLE="ICON"/> </ITEM> </CHANNEL>

<CHANNEL HREF="plugintv/root.htm"> <TITLE>PlugINTV</TITLE> <ABSTRACT>La televisione a portata di click</ABSTRACT> <LOGO HREF="plugintv/16_plugintv.ico" STYLE="ICON"/> </CHANNEL>

<CHANNEL HREF="cinema/default.htm"> <TITLE>Cinematografo</TITLE> <ABSTRACT>Cinematografo: tutto sui nuovi film nelle sale e in videocassetta</ABSTRACT> <LOGO HREF="cinema/16_cinematografo.ico" STYLE="ICON"/> </CHANNEL>

<CHANNEL HREF="tecnologia/default.htm"> <TITLE>Tecnologia</TITLE> <ABSTRACT>Informazioni sulle ultime novità della tecnologia</ABSTRACT> <LOGO HREF="tecnologia/16_tecnologia.ico" STYLE="ICON"/> </CHANNEL>

<CHANNEL HREF="viaggi/viagginews.htm"> <TITLE>Canale Viaggi</TITLE> <ABSTRACT>Viaggi, con informazioni su paesi e itinerari consigliati</ABSTRACT> <LOGO HREF="viaggi/16_canaleviaggi.ico" STYLE="ICON"/> </CHANNEL>

<ITEM HREF="meteo/default.htm" LASTMOD="1997.09.30T14:06+0100" PRECACHE="YES" LEVEL="1"> <TITLE>Meteo</TITLE> <ABSTRACT>Previsioni meteorologiche sull'Italia e l'Europa aggiornate costantemente</ABSTRACT> <LOGO HREF="16_meteo.ico" STYLE="ICON"/> </ITEM></CHANNEL>

L’attributo Base dell’elemento root Channel specifica l’URL di tutti gli elementi innestati(Channel e Item). Ogni elemento innestato ha chiaramente il suo URL relativo. Per ognielemento innestato può essere specificato oltre all’URL relativo, il titolo (Title), la

XML: Capitolo V: Applicazioni dell'XML - Struttura di un file CDF

http://www.html.it/xml/guida/strutturacdf.htm (2 di 3) [19/06/2001 14.15.04]

Page 97: Corso-Guida - HTML.it - Corso XML

descrizione dettagliata (Abstract) e il logo (Logo). Gli attributi dell’elemento Item sonoHref, Lastmode, Precache e Level (già descritti per l’elemento Channel). Questo fileCDF di esempio viene visualizzato da MSIE 4 nella barra dei canali come in Fig. 5.1.

Fig. 5.1: Esempio di file CDF visualizzato nella barra dei canali di MSIE.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Struttura di un file CDF

http://www.html.it/xml/guida/strutturacdf.htm (3 di 3) [19/06/2001 14.15.04]

Page 98: Corso-Guida - HTML.it - Corso XML

 Utilizzo del file CDF

Il file CDF che descrive il canale deve semplicemente essere inserito nella directoryroot del sito Web. Quindi nella home page si inserisce l’icona caratteristica Add ActiveChannel che deve essere collegata al file CDF.

Quando l’utente accede al sito per abbonarsi al canale deve semplicemente cliccaresull’icona Add Active Channel (Fig 5.2)

Fig. 5.2 Pulsante per aggiungere un canale

Il browser MSIE 4 (necessario per questo tipo di servizio) riconosce il canale e guidal’utente nella procedura di abbonamento. La procedura di abbonamento consistenello scaricare sul client il file CDF e il relativo logo; quindi viene visualizzata unafinestra di dialogo che permette di personalizzare la modalità di abbonamento alcanale (Fig. 5.3).

Fig. 5.3: Finestra di dialogo per personalizzare l’abbonamento ad un canale

Le scelte disponibili sono le seguenti:Aggiungere alla barra dei canali: viene semplicemente aggiunto il canale allabarra dei canali; è la funzione meno interessante.

Aggiungere e comunicare: il canale viene aggiunto e viene notificato via e-mailquando il suo contenuto sul server è cambiato.

Aggiungere e scaricare: è l’opzione che sfrutta pienamente la potenza deicanali. Ogni volta che ci colleghiamo ad Internet, MSIE controllaautomaticamente se sono disponibili nuovi aggiornamenti (dall’elementoSchedule del file CDF) e in caso affermativo effettua il download delle pagine,memorizzandole nella cache, in modo che siano disponibili anche off-line.

Effettuata la scelta, la procedura di abbonamento è conclusa e da quel momento si èabbonati al canale.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Utilizzo del file CDF

http://www.html.it/xml/guida/utilizzo.htm [19/06/2001 14.15.09]

Page 99: Corso-Guida - HTML.it - Corso XML

 Esempio di un canale

Questo è un semplice esempio su come far diventare il proprio sito Web un canale contecnologia CDF. Questo è il file HTML:<HTML><HEAD> <TITLE>Marco Giannì - Canale Personale/TITLE></HEAD><BODY BGCOLOR="#FFFFFF" LINK="#800000" VLINK="#000080"> <BR><BR> <H1> Salve,</H1> <IMG SRC="casa.gif" BORDER="0" ALIGN="right"> <H3>sono Marco Giannì e questo è il mio canale personale. Qui potete trovare le informazioni sulle mie ricerche.</H3> <H2>Sottoscriviti, è gratis</H2> <BR> <A HREF="javascript:window.external.addChannel ('http://www.miosito.com/mio.cdf')"> <IMG SRC="ieaddchanne.gif" BORDER="0"> </A> <BR></BODY></HTML>

L’elemento significativo è il valore di Href dell’ancora A, che richiama una funzionejavascript che MSIE utilizza per effettuare la procedura di abbonamento. Questo è il fileCDF:<?XML VERSION="1.0"?><CHANNEL HREF="http://www.miosito.com/index.htm">

<TITLE>Marco Giannì- Canale Personale</TITLE> <ABSTRACT>Mia homepage</ABSTRACT> <SCHEDULE> <INTERVALTIME DAY="1"/> </SCHEDULE>

</CHANNEL>

La Fig. 5.4 mostra la pagina del canale.

XML: Capitolo V: Applicazioni dell'XML - Esempio di un canale

http://www.html.it/xml/guida/esempcdf.htm (1 di 2) [19/06/2001 14.15.20]

Page 100: Corso-Guida - HTML.it - Corso XML

Fig. 5.4: Un esempio di canale.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Esempio di un canale

http://www.html.it/xml/guida/esempcdf.htm (2 di 2) [19/06/2001 14.15.20]

Page 101: Corso-Guida - HTML.it - Corso XML

 Synchronized MultimediaIntegration Language (SMIL)

Il linguaggio SMIL (Synchronized Multimedia Integration Language) è stato progettatoper permettere l’integrazione di un assortimento di oggetti multimediali in modosincronizzato. SMIL permette la creazioni di presentazioni ed è progettato per mettereinsieme sul Web i componenti multimediali.

SMIL 1.0 è stato recentemente rilasciato come raccomandazione W3C. Una dellefunzioni affascinanti è che tutta la presentazione viene coordinata in una descrizionedi facile lettura. La sintassi utilizzata è il linguaggio XML.

Lo standard proposto dallo SMIL definisce i tag (per esempio, <audio> per i file audio,<video> per i file video, <text> per i file di testo, <img> per le immagini), ma lostandard non stabilisce un formato particolare per un determinato tag. Si puòdecidere di utilizzare il formato di file Wav per il suono, il formato di file Mpeg per ilvideo e i formati Gif, Jpeg e/o Png per le immagini.

Il linguaggio SMIL è stato progettato sulla base di alcune idee e su due concetti: lepresentazioni parallele e quelle in sequenza. Le prime combinanocontemporaneamente componenti multimediali per fornire un’immagine completa; leseconde vengono fornite in una serie di fasi individuali.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Synchronized Multimedia Integration Language (SMIL)

http://www.html.it/xml/guida/smil.htm [19/06/2001 14.15.23]

Page 102: Corso-Guida - HTML.it - Corso XML

 Struttura di SMIL

Una descrizione SMIL è incorporata all’interno del tag SMIL. I documenti SMIL sonocomposti da due parti: una testa e un corpo. Ognuna di queste parti potrebbecontenere istruzioni XML speciali, quali commenti e istruzioni di elaborazione. Latesta di un documento è indicata dal tipo di elemento Head, il corpo dal tipo dielemento Body.<smil> <head> <!-- questa è la parte della testa --> </head> <body> <!-- Questa è al parte del corpo --> </body></smil>

IN TESTA

La sezione della testa di un documento SMIL viene utilizzata per descrivere gli aspettilegati al layout della presentazione e contiene alcune metainformazioni sullapresentazione. I metadati possono stabilire che un documento SMIL non abbia limitiprecisi. La sintassi ufficiale per descrivere alcuni metadati è :<meta name="NomeDellaVariabile" content="ValoreDellaVariabile"/>

Il linguaggio SMIL ha alcuni nomi predefiniti per i metadati:sync: la sincronizzazione di una presentazione SMIL può essere definita comerigida o flessibile. Rigida significa che un interprete SMIL deve seguire leregole di sincronizzazione per le presentazioni per le preentazioni paralleledegli oggetti multimediali proprio come sono state definite. Flessibile significache viene data una certa libertà di azione durante l’esecuzione.

title: serve per assegnare un nome alla presentazione.●

pics-label: PICS è l’acronimo di Platform for Internet Content Selection. Leeticehtte PICS vengono utilizzate per fornire un controllo migliore sul contenutoal quale può accedere un determinato pubblico.

NEL CORPO

Si possono definire tre stili di presentazione diversi nel corpo di una presentazioneSMIL, due dei quali di particolare importanza, lo stile parallelo e quello in sequenza.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Struttura di SMIL

http://www.html.it/xml/guida/strutturasmil.htm [19/06/2001 14.15.26]

Page 103: Corso-Guida - HTML.it - Corso XML

 Stile parallelo

Lo stile parallelo viene utilizzato per descrivere come due oggetti sono presentaticontemporaneamente e come l’inizio e la fine sono correlati tra di loro (Fig. 5.5).

Fig. 5.5 Oggetti multimediali in stile parallelo

Un blocco parallelo viene indicato dal tag <par>. Per esempio, un oggetto audio e unoggetto immagine per lo stile parallelo possono essere descritti in questo modo:<par> <audio ... /> <img ... /></par>

Per default, l’ora di conclusione di una presentazione parallela è l’ora massima diconclusione di tutti gli oggetti. Tuttavia si può controllare l’ora di conclusione.L’attributo facoltativo endsync specifica che la fine della sezione parallela dipende daltempo specificato di conclusione di uno dei suoi figli. Esso può avere due valoridistinti e ha una sintassi generica:

last: questo valore conclude la presentazione quando l’ultimo oggetto termina.●

first: questo è l’opposto di last●

id-ref: il progettista può rendere la durata di questo gruppo parallelodipendente dalla conclusione dell’azione di un oggetto specifico.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Stile parallelo

http://www.html.it/xml/guida/paral.htm [19/06/2001 14.15.30]

Page 104: Corso-Guida - HTML.it - Corso XML

 Stile in sequenza

Una sequenza definisce una serie di oggetti che devono essere eseguiti in ordinesequenziale. Per esempio, prima si vede video 1 e poi video 2 (Fig. 5.6).

Fig. 5.6 Una sequenza semplice

La sintassi generale per una sequenza è la seguente :<seq> <!-- primo oggetto --> <!-- secondo oggetto --></seq>

Il primo oggetto inizia la presentazione nel momento in cui è stato programmato chetutta la sequenza abbia inizio. Il resto degli oggetti avvia la propria azione quandoterminano i suoi predecessori. La sequenza completa finisce quando l’ultimo membroha terminato la sua presentazione.

ATTRIBUTI BEGIN ED END

Gli attributi begin ed end cambiano il tempo di inizio e di fine di default di unelemento. In base al tipo di oggetto al quale sono applicati questi attributi, lasemantica è differente. I valori che questi attributi possono avere sono valori di offsetoppure eventi qualificati. Nelle sequenze, il valore di offset determina il tempo tra lafine dell’oggetto precedente e l’inizio di quello successivo.

Nella specifica parallela l’attributo begin specifica un ritardo rispetto al tempo globaledi inizio dell’oggetto parallelo.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Stile in sequenza

http://www.html.it/xml/guida/seque.htm [19/06/2001 14.15.33]

Page 105: Corso-Guida - HTML.it - Corso XML

 Specifiche dell'impostazione

La specifica SMIL afferma che è possibile utilizzare un assortimento di formati dispecifica dell’impostazione differenti insieme alla presentazione SMIL. Tuttavia, SMILviene fornito con una proposta di un semplice meccanismo di specificadell’impostazione.

SMIL utilizza il concetto dei canali per specificarne l’impostazione. Un canale definiscela posizione, le dimensioni e la scala di un oggetto multimediale. I canali che sisovrappongono sono gestiti da un processo denominato clipping (ritagliare), che sioccupa di gestire le immagini che sono troppo grandi o troppo piccole per essereinserite perfettamente in una determinata area. Ogni canale definito deve avere un IDunivoco mediante il quale viene identificato. Si può anche utilizzare l’impostazione didefault inserendo questo frammento di codice nella descrizione SMIL:<layout type="text/smil - basic"></layout>

La posizione di un canale viene definita dai valori seguenti:top: questo valore viene definito come la distanza rispetto alla parte superioredell’area di rappresentazione.

left: questo valore descrive la distanza rispetto all’angolo sinistro della finestra dirappresentazione.

Le proporzioni di un canale sono definite dalla larghezza e dall’altezza:width: questo tag, se disponibile, definisce la larghezza di un oggetto. Se nonviene specificato un valore, width viene definito come lo spazio tra la posizioneleft e l’angolo destro dell’area di rappresentazione.

height: questo tag è la controparte di width e segue le stesse regole. Se nonviene specificata un’altezza, il valore viene calcolato come lo spazio tra unacoordinata top e la parte inferiore dell’area di rappresentazione.

Figura La definizione delle coordinate dello schermo

CLIPPING

La funzione di ritaglio (clipping) permette di gestire quelle situazioni nelle quali ledimensioni effettive dell’oggetto non corrispondono alle proporzioni specificate nelladefinizione del canale. Il linguaggio SMIL fornisce un insieme di attributi che possonoessere utilizzati per controllare la strategia del ritaglio, se una cosa di questo tipodovrebbe verificarsi. Il nome dell’attributo è clip e i possibili valori sono i seguenti:

XML: Capitolo V: Applicazioni dell'XML - Specifiche dell'impostazione

http://www.html.it/xml/guida/imposta.htm (1 di 2) [19/06/2001 14.15.37]

Page 106: Corso-Guida - HTML.it - Corso XML

meet (valore di default): indica al software di presentazione scalare di unoggetto, pur mantenendo il rapporto, fino a quando l’altezza o la larghezzadell’oggetto non rientra nel canale.

slice: questo valore indica che un oggetto viene scalato, mantenendo il rapportofino a quando l’altezza o la larghezza non rientra nelle proporzioni del canale.

fill: si comporta in modo simile al tag di immagine HTML (<img>). Allunga lalarghezza e l’altezza dell’oggetto in modo ceh corrisponda alle proporzioni delcanale.

visible: questo valore significa che la larghezza e l’altezza di un elemento sonoampliate per contenere tutto il contenuto rappresentato.

hidden: è simile a slice; l’unica differenza è che il software SMIL non regola lalarghezza o l’altezza per adattare l’oggetto, perlomeno per quanto riguarda unodegli assi.

auto: questo valore lascia all’applicazione il compito di gestire le immagini chenon si adattano alle dimensioni..

scroll: questo valore indica che devono essere aggiunte le barre di scorrimentoal canale.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Specifiche dell'impostazione

http://www.html.it/xml/guida/imposta.htm (2 di 2) [19/06/2001 14.15.37]

Page 107: Corso-Guida - HTML.it - Corso XML

 Switching

Spesso la descrizione di una presentazione come quella SMIL, dovrebbe fornire unmetodo per descrivere una serie di alternative dalle quali è possibile effettuare unaselezione in base all’input dell’utente o alle variabili di ambiente. Il linguaggio SMILutilizza la primitiva switch per fornire questa funzione. Lo switching SMIL si basa sualcuni attributi predefiniti. Ma, nello spirito dell’XML, si possono specificare i propriattributi di switching.

BITRATE

Bitrate permette al progettista di una presentazione di fornire oggetti multimedialialternativi in base all’ampiezza di banda del consumatore. In questo modo, èpossibile raggiungere un maggiore equilibrio tra velocità, dimensioni e qualitàdell’output.

Per gli utenti moderni, un bitrate tipico dovrebbe essere 14.000 bps (bit per secondo),28.000 bps, 56.000 bps oppure 128.000 bps nel caso di una linea ISDN. Con questotipo di informazioni, l’applicazione potrebbe scegliere un oggetto particolare in base aquello che sa sulla velocità di downloading del proprio ambiente. In alternativa,potrebbe richiedere all’utente di scegliere un oggetto. Ecco un esempio:<switch> <par bitrate="14400"> <!-- alcuni oggetti multimediali --> </par> <par bitrate="28800"> <!-- alcuni oggetti multimediali -- > </par> <par bitrate="56000"> <!-- alcuni oggetti multimediali --> </par></switch>

LINGUA

L’attributo lang in SMIL fornisce semplicemente un elenco di opzioni ed è diversodall’attributo lang in XML, che si occupa invece della codifica delle lingue. Ecco ilcodice per la sintassi di queste specifiche di lingua :<switch> <audio src="interview-in-french" language="fr"/> <audio src="interview-in-german" language="de"/> <audio src="interview-in-english" language="en"/></switch>

DIMENSIONI DELLO SCHERMO

Il linguaggio SMIL permette di specificare un parametro per le dimensioni delloschermo disponibili per la presentazione. Il numero che si utilizza indica il numerodelle unità di pixel che sono disponibili sullo schermo. Ecco un esempio:<switch> <par screen-size="640x480"> <!-- oggetti multimediali per 640x480 --> </par> <par screen-size="1280x1024"> <!-- oggetti multimediali per 1280x1024 --> </par></switch>

PROFONDITA’ DELLO SCHERMO

La profondità della tavolozza di colori dello schermo è una caratteristica del supportodi output che rende difficile al progettista fornire una soluzione che risponda a tutte le

XML: Capitolo V: Applicazioni dell'XML - Switching

http://www.html.it/xml/guida/switch.htm (1 di 2) [19/06/2001 14.15.41]

Page 108: Corso-Guida - HTML.it - Corso XML

esigenze. I valori tipici per la profondità dello schermo sono 8, 16 e 32. Il codiceseguente è quello dell’esempio precedente con l’aggiuta dei valori di attributo perscreen-depth:<switch> <par screen-size="640x480" screen-depth="32"> <!-- oggetti multimediali per 640x480 --> </par> <par screen-size="1280x1024" screen-depth="16"> <!-- oggetti multimediali per 1280x1024 --> </par></switch>

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Switching

http://www.html.it/xml/guida/switch.htm (2 di 2) [19/06/2001 14.15.41]

Page 109: Corso-Guida - HTML.it - Corso XML

 Esempio SMIL

Benché Microsoft Internet Explorer e Netscape Navigator non siano al momento in gradodi supportare direttamente il linguaggio SMIL, diversi produttori forniscono il supportobrowser necessario. Per visualizzare quindi un file SMIL è possibile utilizzare un utilità oun plug-in separato di riproduzione, quale RealPlayer G2 sviluppato da RealNetworks.Comunque, nel tentativo di non essere completamente esclusa dal gioco, Microsoft harecentemente annunciato una controproposta di standard chiamata HTML+TIME.

Vediamo un esempio realizzato con SMIL Composer, un software gratuito che permette dicreare un file SMIL in modo semplice e veloce e che potrà poi essere visualizzato conRealPlayer.<smil> <head> <meta name="author" content="Marco"/> <meta name="title" content="Demo"/> <meta name="copyright" content="© 1999"/> <layout> <root-layout height="196" width="136"/> <region id="composer_Region" left="0" top="0" height="100" width="106" z-index="1"/> <region id="my_Region" left="0" top="0" height="196" width="136" z-index="0"/> </layout> </head> <body> <seq> <video id="composer" src="media/composer.rm" region="composer_Region" system-bitrate="13178"/> <par> <img id="my" src="media/my.rp" region="my_Region" system-bitrate="12000"/> <switch> <audio id="france" src="media/france.ra" system-language="fr" system-bitrate="8041"/> <audio id="usa" src="media/usa.ra" system-language="en" system-bitrate="8041"/> <audio id="turkey" src="media/turkey.ra" system-language="tr" system-bitrate="8041"/> </switch> </par> </seq> </body></smil>

La parte destra della schermata nella figura seguente mostra il codice SMIL dellapresentazione multimediale.

XML: Capitolo V: Applicazioni dell'XML - Esempio SMIL

http://www.html.it/xml/guida/esempsmil.htm (1 di 2) [19/06/2001 14.16.04]

Page 110: Corso-Guida - HTML.it - Corso XML

Conclusa la presentazione, il programma stesso consente di visualizzare l’anteprimalanciando automaticamente il player.

clicca qui per vedere l'esempio demo.smi (solo con RealPlayer G2)

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Capitolo V: Applicazioni dell'XML - Esempio SMIL

http://www.html.it/xml/guida/esempsmil.htm (2 di 2) [19/06/2001 14.16.04]

Page 111: Corso-Guida - HTML.it - Corso XML

 Conclusioni

L’enorme sviluppo di Internet degli ultimi anni ha creato un interesse sempremaggiore verso questa tecnologia. Sempre più persone utilizzano la rete per lavorare,comunicare, giocare, comprare, cercare informazioni di ogni genere. Grazie alla suainterfaccia attraente e amichevole, il World Wide Web è lo strumento di Internet piùutilizzato. La grande eterogeneità dei servizi che deve fornire, ha messo in crisil’HTML, il linguaggio utilizzato per condividere le informazioni nel WWW. L’origine ditale crisi è da ricercarsi nel fatto che l’HTML è un linguaggio non estensibile e quindiincapace di adattarsi a tutti i compiti che è chiamato a risolvere. Per questo motivo èstato creato un nuovo linguaggio, l’XML, che ha come punto di forza proprio lacapacità di essere estensibile, quindi di permettere ai progettisti di documenti digestire fonti multiple di dati e di creare ambienti personalizzati per tipi speciali di dati.

L’analisi svolta ha riguardato i seguenti punti:L’importanza dell’XML: partendo dai limiti dell’HTML, si è cercato di capirequali sono i punti di forza dell’XML, e come questo linguaggio potrebberisolvere molti dei problemi presenti nel Web.

Le basi dell’XML: dalla specifica del linguaggio si è cercato di capire comecostruire e utilizzare nel Web documenti XML.

L’utilizzo del linguaggio XML: dalla definizione di metalinguaggio si è cercato dicapire come ampliare i documenti XML con altri linguaggi derivati quali l’XLL,l’XSL e l’XML-Data.

Le applicazioni dell’XML: sono state studiate due applicazioni che si basanosull’XML: il CDF e lo SMIL.

Dall’analisi svolta sono emersi i seguenti importanti fattori:La semplicità del linguaggio XML: le descrizioni della sintassi nella specificaXML utilizza una grammatica formale concisa, semplice da capire e facile datrasformare in codice di programmazione.

La semplicità dei documenti XML: il concetto di documento ben formattatoconsente l’immediata comprensione della struttura dati presente neldocumento stesso. L'estensibilità dei tag permette di comprendere in modosemplice e intuitivo il significato dei dati presenti nel documento. Questi dueaspetti sono molto utili sia per le applicazioni che per gli sviluppatori software.

La semplicità degli strumenti software XML: il software XML menzionato inprecedenza è tutto scritto in Java. Questo semplifica molto la codifica di talistrumenti; inoltre, visto l’ambiente in cui si trovano ad operare, è moltoimportante che la dimensione sia contenuta (si pensi infatti ad un applet Javache deve essere scaricato assieme al dati). Pur essendo gli strumentianalizzati molto semplici, è prevedibile che in futuro anche applicazioni piùcomplesse rimangano aderenti a questa filosofia.

È chiaro allora che il grosso punto di forza del linguaggio rispetto ad altri dello stessotipo è la sua grande semplicità. Questo non è un caso visto che l’XML è unsottoinsieme dell’SGML, linguaggio molto potente e flessibile, ma anche moltocomplicato e difficile. L’XML unisce la potenza e la flessibilità dell’SGML, con lasemplicità e la facilità d’uso.

Le classi di applicazioni che trarranno il maggior beneficio dall’XML sono lo scambiodei dati e la costruzione di pagine Web.

Questo nuovo linguaggio avrà probabilmente un impatto deciso nel campo di Internetnel prossimo futuro e cambierà completamente lo scenario a cui gli utenti sono oraabituati.

  L e z i o n e    s u c c e s s i v a  

XML: Conclusioni

http://www.html.it/xml/guida/conclu.htm (1 di 2) [19/06/2001 14.16.09]

Page 112: Corso-Guida - HTML.it - Corso XML

[ S o m m a r i o ]XML: Conclusioni

http://www.html.it/xml/guida/conclu.htm (2 di 2) [19/06/2001 14.16.09]

Page 113: Corso-Guida - HTML.it - Corso XML

 Il processore XML

Un processore XML è un modulo software utilizzato per leggere documenti XML everificare che soddisfino la specifica XML. La sua funzione principale consistenell’analisi e nella convalida dei dati XML. Un processore XML fornisce anche ilcontenuto di un documento ad una eventuale applicazione; questo vuol dire che unaqualsiasi applicazione che deve interagire con documenti XML deve avere al suointerno un processore XML. Un processore può essere utilizzato in modo standalone,per verificare che un documento appena scritto soddisfi la specifica XML, quindi chesia o ben formattato (se non è accompagnato da nessun DTD) o valido (se èaccompagnato da DTD). È dunque uno strumento necessario per chi scrive file XMLin generale.

Per indicare al processore a quale specifica un documento si riferisce bisognasempre indicare nella prima istruzione il numero di versione di tale specifica:<?xml version="1.0"?>

Chiaramente un processore segnala errore se riceve un documento con un numero diversione che non supporta.

In generale gli errori che un processore riporta sono di due tipi:Error: violazione di una regola della specifica; il processore notificaall’applicazione l’errore rilevato e continua sia ad analizzare il documento, sia afornirne il contenuto all’applicazione; è quest’ultima che deve decidere ilcomportamento rispetto all’errore (ignorarlo, cercare di correggerlo, etc.).

Fatal error: grave violazione di una regola della specifica; il processore notificaall’applicazione l’errore rilevato e può o meno continuare l’analisi deldocumento per cercare altri errori; non deve però continuare a fornire ilcontenuto del documento all’applicazione.

Ad esempio una violazione di un vincolo espresso in un DTD (chiaramente non ilDTD dell’XML, ma un DTD scritto dall’utente) è considerata un "error"; una violazionedi una regola di buona formattazione è invece considerata un "Fatal error" (violareuna regola di buona formattazione vuol dire violare un vincolo espresso nel DTDdell’XML).

Ci sono due tipi di processori XML: validating e non-validating (in genere unprocessore di tipo validating viene chiamato parser). Sia i processori validating chequelli non-validating, devono riportare le violazioni delle regole di buonaformattazione incontrate nell’entità documento ed in generale in una qualsiasi entitàparsed. Un processore validating deve anche riportare le violazioni dei vincoliespressi attraverso le dichiarazioni nel DTD; per far questo deve poter leggere eprocessare l’intero DTD. Un processore non-validating deve poter accedere all’interaentità documento, incluso l’eventuale DTD interno (ma solo per verificare che anchequesta parte del documento sia ben formattata); quest’ultimo fornisce vantaggi nelleprestazioni dato che non deve leggere ed elaborare la DTD.

Allo stato attuale sono disponibili alcuni processori di pubblico dominio (shareware efreeware) che possono essere utilizzati in modo standalone. La maggior parte deglielaboratori disponibili viene creata mediante il linguaggio di programmazione Java eanche le applicazioni tendono ad essere più lente rispetto alle applicazioni basate suC++; Java consente spesso di utilizzare piattaforme multiple.

Per controllare che gli esempi forniti in questa tesi fossero conformi alle specificheXML, ho utilizzato il processore fornito dalla Microsoft, l’elaboratore Msxml. MicrosoftInternet Explorer è dotato di un elaboratore di XML incorporato. Questo elaboratore,Msxml, è progettato come componente di Windows e può essere utilizzato comecontrollo Active X nelle pagine Web o nelle applicazioni di Visual Basic o C++.Microsoft ha inoltre contribuito allo sviluppo di un elaboratore di XML su Java.

XML: Appendice A: Strumenti software - Il processore XML

http://www.html.it/xml/guida/processore.htm (1 di 2) [19/06/2001 14.16.15]

Page 114: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Appendice A: Strumenti software - Il processore XML

http://www.html.it/xml/guida/processore.htm (2 di 2) [19/06/2001 14.16.15]

Page 115: Corso-Guida - HTML.it - Corso XML

 Il parser Msxml

Il processore fornito dalla Microsoft può essere scaricato all’indirizzohttp://www.microsoft.com/xml/parser/xmlinst.exe. Questo pacchetto contiene oltre alprocessore anche un’utile serie di esempi su come utilizzare documenti XML nellepagine Web.

Il processore è di tipo validating, ed è scritto in Java; può essere utilizzato al prompt delDOS o con un applet Java fornito nel pacchetto della Microsoft. Al prompt del DOSbasta semplicemente digitare:C:\> jview msxml -d [nome del documento]

Il processore notifica eventuali errori rilevati durante l’analisi.

Se ad esempio la prima riga del documento è la seguente:<?xml version="1.0">

il processore notifica:C:\> jview msxml -d [nome del documento]Expected ?> instead of tag end(>)Location: file:/C:// [nome del documento](2,-1)Context: <xml>

Se invece il file non presenta errori il processore fornisce sullo standard output lo stessofile nel formato originale XML, mettendo in evidenza la struttura dati ivi contenutautilizzando opportune indentazioni.

Il Java applet XMLViewer fornito dalla stessa Microsoft può essere utilizzato assieme alprocessore per visualizzare la struttura dati di un file, come mostra la Fig. A.1.

Fig. A.1: Il Java applet XML Viewer visualizza la struttura dati di un file XML.

XML: Appendice A: Strumenti software - Il parser XML

http://www.html.it/xml/guida/parser.htm (1 di 2) [19/06/2001 14.16.22]

Page 116: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Appendice A: Strumenti software - Il parser XML

http://www.html.it/xml/guida/parser.htm (2 di 2) [19/06/2001 14.16.22]

Page 117: Corso-Guida - HTML.it - Corso XML

 Panorama del software

Per quanto riguarda i browser l’unica soluzione fino a pochi mesi fa consistevanell'utilizzo di appositi browser SGML, magari integrati nei tradizionali programmi dinavigazione. Attualmente sul mercato esistono sostanzialmente dei Software:Panorama, prodotto dalla SoftQuad, una delle aziende leader nel settore SGML,Multidoc PRO, della finlandese Citec e Jumbo, una applicazione Java usata perChemical Markup Language (CML), un'applicazione specifica di XML. Panorama èdisponibile in due versioni, una commerciale e l'altra gratuita. La versione commerciale,a sua volta, consiste di due moduli: Panorama Publisher, un browser stand-alone dotatodi strumenti per la creazione di fogli di stile e reti ipertestuali tra più documenti;Panorama Viewer, un plug-in per Netscape ed Explorer che può solo visualizzare idocumenti (di quest'ultimo viene distribuita una versione di prova, con alcune limitazionifunzionali, sul sito della SoftQuad). La versione gratuita è invece basata sulla release 1del browser ed è reperibile dal sito Web della OCLC al proprio indirizzo. Multidoc Pro, èdisponibile solo in versione commerciale, ma chi è interessato può scaricarne unaversione funzionante per tre settimane presso il sito della Citec. Jumbo è disponibile inversione freeware presso il sito della "Venus".

La Microsoft ha finalmente rilasciato la versione 5 del suo browser che, oltre acontenere un processore XML di tipo validating e supportare pienamente la specificaXML 1.0 i Namespace e gli schemi (XML-Data), è in grado di visualizzare le pagine XMLcome se fossero pagine HTML grazie al supporto dell’XSL.

Per quanto riguarda i parser il panorama è molto più variegato. A parte i software chepermettono anche la visualizzazione, di cui si è parlato, che ovviamente primaeseguono il controllo formale, esistono in versione freeware molti parser, tra i qualivanno ricordati Sax della "Microstar Software Ltd.", XML for Java da IBM AlphaWorks,TclXML.

Infine i tool di sviluppo. Recentemente Microsoft ha rilasciato la prima release di un toolper la costruzione di file XML; si chiama "XML Notepad" ed è disponibile freeware nelsito della società Americana. Anche la "Arbortext", che da tempo produce software perSGML ha implementato un tool di sviluppo "XML Styler, la "Vervet Logic"commercializza un tool "XML Pro" ", ed infine anche la "Architag" ha sviluppato il"Real-Time XML Editor" che è molto semplice da imparare per creare documenti XML inquanto avverte in tempo reale se si stanno commettendo errori (fig. A.2).

XML: Appendice A: Strumenti software - Panorama del software

http://www.html.it/xml/guida/softwa.htm (1 di 2) [19/06/2001 14.16.37]

Page 118: Corso-Guida - HTML.it - Corso XML

Fig. A.2: Real-Time XML Editor

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Appendice A: Strumenti software - Panorama del software

http://www.html.it/xml/guida/softwa.htm (2 di 2) [19/06/2001 14.16.37]

Page 119: Corso-Guida - HTML.it - Corso XML

 Esempio di file XML

Ecco un esempio di file XML e XSL che potrete trovare all'indirizzohttp://digilander.iol.it/oldani/HomePino.Il file XML è il seguente:<?xml version="1.0" standalone="no"?><?xml:stylesheet type="text/xsl" href="curric.xsl" ?><!DOCTYPE radice SYSTEM "Curriculum.dtd"><radice> <curriculum> <dati> <nome>Luca</nome> <cognome>Rossi</cognome> <sesso>Maschile</sesso> <indirizzo> <via>Via Degli Angeli 35</via> <cap>21057</cap> <city>Olgiate Olona</city> <provincia>VA</provincia> <nazione>Italia</nazione> </indirizzo> <telefono>03313434322</telefono> <posta>[email protected]</posta> </dati> <studi> <maturita> <titolo>Maturita' Scientifica</titolo> <voto>48/60</voto> </maturita> <laurea> <universita>Statale di Milano</universita> <facolta>Informatica</facolta> <votol>110</votol> </laurea> </studi> <esperienze>Da 3 anni responsabile tecnico "Inforscuola"</esperienze> <lingua>Inglese</lingua> </curriculum>

<curriculum> <dati> <nome>Marco</nome> <cognome>Colombo</cognome> <sesso>Maschile</sesso> <indirizzo> <via>Via De Amicis 3</via> <cap>21057</cap> <city>MILANO</city> <provincia>VA</provincia> <nazione>Italia</nazione> </indirizzo> <telefono>0231534322</telefono> <posta>[email protected]</posta> </dati> <studi> <maturita> <titolo>Maturita' Classica</titolo> <voto>54/60</voto> </maturita> <laurea>

XML: Appendice A: Strumenti software - Esempio di file XML

http://www.html.it/xml/guida/esempxml.htm (1 di 5) [19/06/2001 14.16.46]

Page 120: Corso-Guida - HTML.it - Corso XML

<universita>Statale di Milano</universita> <facolta>Filosofia</facolta> <votol>90</votol> </laurea> </studi> <esperienze>Da 2 anni collabora con l'ufficio Arte e cultura del Corriere</esperienze> <lingua>Spagnolo</lingua> </curriculum>

<curriculum> <dati> <nome>Francesca</nome> <cognome>Marillo</cognome> <sesso>femminile</sesso> <indirizzo> <via>Via Piave 7</via> <cap>21057</cap> <city>Como</city> <provincia>CO</provincia> <nazione>Italia</nazione> </indirizzo> <telefono>031634340</telefono> <posta>[email protected]</posta> </dati> <studi> <maturita> <titolo>Maturita' Scientifica</titolo> <voto>38/60</voto> </maturita> <laurea> <universita>Cattolica</universita> <facolta>Scienze Politiche</facolta> <votol>106</votol> </laurea> </studi> <esperienze>Nessuna</esperienze> <lingua>Tedesco</lingua> </curriculum>

<curriculum> <dati> <nome>Stefano</nome> <cognome>Bassi</cognome> <sesso>maschile</sesso> <indirizzo> <via>Via Piave 7</via> <cap>21057</cap> <city>Como</city> <provincia>CO</provincia> <nazione>Italia</nazione> </indirizzo> <telefono>031908765</telefono> <posta>[email protected]</posta> </dati> <studi> <maturita> <titolo>Maturita' Tecnica Industriale in meccanica</titolo> <voto>42/60</voto> </maturita> <laurea> <universita>Politecnico</universita> <facolta>Ingegneria Civile</facolta> <votol>106</votol> </laurea> </studi> <esperienze>Impiegato al comune di Como</esperienze> <lingua>Tedesco</lingua> </curriculum>

<curriculum>

XML: Appendice A: Strumenti software - Esempio di file XML

http://www.html.it/xml/guida/esempxml.htm (2 di 5) [19/06/2001 14.16.46]

Page 121: Corso-Guida - HTML.it - Corso XML

<dati> <nome>Paolo</nome> <cognome>Bellucci</cognome> <sesso>maschile</sesso> <indirizzo> <via>Via Piave 7</via> <cap>21057</cap> <city>Seregno</city> <provincia>MI</provincia> <nazione>Italia</nazione> </indirizzo> <telefono>0234546787</telefono> <posta>[email protected]</posta> </dati> <studi> <maturita> <titolo>Maturita' Artistica</titolo> <voto>60/60</voto> </maturita> <laurea> <universita>Politecnico</universita> <facolta>Architettura</facolta> <votol>101</votol> </laurea> </studi> <esperienze>Nessuna</esperienze> <lingua>Tedesco</lingua> </curriculum>

<curriculum> <dati> <nome>Camilla</nome> <cognome>Silvestri</cognome> <sesso>femminile</sesso> <indirizzo> <via>Via Piave 7</via> <cap>21057</cap> <city>Torino</city> <provincia>TO</provincia> <nazione>Italia</nazione> </indirizzo> <telefono>03434322098</telefono> <posta>[email protected]</posta> </dati> <studi> <maturita> <titolo>Maturita' Scientifica</titolo> <voto>46/60</voto> </maturita> <laurea> <universita>Cattolica</universita> <facolta>Scienze Ambientali</facolta> <votol>106</votol> </laurea> </studi> <esperienze>Lavora part-time presso uno studio veterinario</esperienze> <lingua>Inglese</lingua> </curriculum></radice>

Il DTD è il seguente:<!ELEMENT radice (curriculum+)><!ELEMENT curriculum (dati, studi, esperienze, lingua, hobbies*)><!ELEMENT dati (nome+, cognome, sesso, indirizzo, telefono*, posta*)><!ELEMENT nome (#PCDATA)><!ELEMENT cognome (#PCDATA)><!ELEMENT sesso (#PCDATA)><!ELEMENT indirizzo (via, cap, city, provincia, nazione)><!ELEMENT via (#PCDATA)><!ELEMENT cap (#PCDATA)><!ELEMENT city (#PCDATA)><!ELEMENT provincia (#PCDATA)>

XML: Appendice A: Strumenti software - Esempio di file XML

http://www.html.it/xml/guida/esempxml.htm (3 di 5) [19/06/2001 14.16.46]

Page 122: Corso-Guida - HTML.it - Corso XML

<!ELEMENT nazione (#PCDATA)><!ELEMENT telefono (#PCDATA)><!ELEMENT posta (#PCDATA)><!ELEMENT studi (maturita*, laurea*)><!ELEMENT maturita (titolo, voto)><!ELEMENT laurea (universita, facolta, votol)><!ELEMENT titolo (#PCDATA)><!ELEMENT voto (#PCDATA)><!ELEMENT universita (#PCDATA)><!ELEMENT facolta (#PCDATA)><!ELEMENT votol (#PCDATA)><!ELEMENT esperienze (#PCDATA)><!ELEMENT lingua (#PCDATA)>

Il file XSL che permette la visualizzazione con MSIE 5 è il seguente:<?xml version="1.0"?><HTML xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <BODY STYLE="font-family:Arial, helvetica, sans-serif; font-size:22pt"> <xsl:for-each select="radice/curriculum"> <DIV STYLE="background-color:teal; color:white; margin-bottom:0.5em"> <xsl:value-of select="dati/nome"/> <xsl:value-of select="dati/cognome"/> </DIV> <DIV STYLE="margin-left:20px; margin-bottom:1em; font-size:18pt;font-style:italic"> Indirizzo: <xsl:value-of select="dati/indirizzo/via"/> <DIV STYLE="margin-left:100px;font-style:italic;font-size:18pt"> <xsl:value-of select="dati/indirizzo/cap"/> <SPAN> <xsl:value-of select="dati/indirizzo/city"/> </SPAN> <SPAN> <xsl:value-of select="dati/indirizzo/provincia"/> </SPAN> </DIV> <DIV> Telefono:<xsl:value-of select="dati/telefono"/> </DIV> E-mail :<xsl:value-of select="dati/posta"/> </DIV> <DIV STYLE=" font-size:24;font-style:verdana;color:black;background-color:#EEEEEE"> Studi</DIV> <xsl:for-each select="studi/maturita"> <DIV STYLE="font-style:arial; color:black;font-size:18pt; margin-top:1em;margin-left:20px"> Media Superiore: <SPAN STYLE="color:teal"> <xsl:value-of select="titolo"/> </SPAN> - Voto : <SPAN STYLE="color:teal"&g; <xsl:value-of select="voto"/> </SPAN> </DIV> </xsl:for-each> <xsl:for-each select="studi/laurea"> <DIV STYLE="font-style:arial; color:black;font-size:18pt; margin-left:20px"> Universita': <SPAN STYLE="color:teal"> <xsl:value-of select="universita"/> </SPAN> - Corso di Laurea: <SPAN STYLE="color:teal"> <xsl:value-of select="facolta"/> </SPAN> - Voto : <SPAN STYLE="color:teal"> <xsl:value-of select="votol"/> </SPAN> </DIV> </xsl:for-each> <DIV STYLE="background-color:#EEEEEE; color:black; margin-top:1em; font-size:24"> Esperienze Lavorative </DIV> <DIV STYLE="font-style:italic; color:teal;font-size:18pt; margin-top:0.5em; margin-left:20px"> <xsl:value-of select="esperienze"/> </DIV>

XML: Appendice A: Strumenti software - Esempio di file XML

http://www.html.it/xml/guida/esempxml.htm (4 di 5) [19/06/2001 14.16.46]

Page 123: Corso-Guida - HTML.it - Corso XML

<DIV STYLE="background-color:#EEEEEE; color:black; margin-top:0.5em; font-size:24"> Lingua Straniera </DIV> <DIV STYLE="font-style:italic; color:teal;font-size:18pt; margin-top:0.5em; margin-bottom:2em; margin-left:20px"> <xsl:value-of select="lingua"/> </DIV> </xsl:for-each> </BODY></HTML>

Il risultato è questo :

clicca qui per vedere l'esempio curriculum.xml (solo MSIE 5.0 o superiore)

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Appendice A: Strumenti software - Esempio di file XML

http://www.html.it/xml/guida/esempxml.htm (5 di 5) [19/06/2001 14.16.46]

Page 124: Corso-Guida - HTML.it - Corso XML

 Bibliografia

● Extensible Markup Language (XML) 1.0, W3C Recommendation 10 February1998, http://www.w3.org/TR/1998/REC-xml-19980210.

Interessante corso sull'XML sviluppato da tre studenti milanesihttp://digilander.iol.it/oldani/HomePino.

Extensible Stylesheet Language (XSL) Specification, W3C Working Draft,http://www.w3.org/TR/1999/WD-xsl-19990421.

XML Namespace, W3C Working Draft,http://www.w3.org/TR/1998/WD-xml-names-19990114.

Synchronized Multimedia Integration Language (SMIL) 1.0 Specification, W3CRecommendation, http://www.w3.org/TR/1998/REC-smil-19980615.

XML in Action, William J.Pardi - Microsoft.●

XML Le Basi, Simon St.Laurent - Tecniche Nuove.●

Un sito interamente dedicato ad XML, http://www.xml.com.●

L’università di XML, http://www.xmlu.com.●

Il sito della Microsoft su XML, http://msdn.microsoft.com/xml/index.asp.●

Prime informazioni, approfondimenti, domande, http://xml.org,http://www.xmlinfo.com.

Software XML, http://www.xmlsoftware.com.●

Il consorzio W3C, http://www.w3c.org.●

Un enorme elenco di link a risorse relative a XML,http://www.cs.caltech.edu/~adam/local/xml.html.

Il sito di un noto esperto, Robin Cover, http://www.sil.org/sgml/xml.html.●

Le FAQ (Frequented Ask Question) dei membri dell’XML W3C,http://www.ucc.ie.xml/.

[ S o m m a r i o ]

XML: Bibliografia

http://www.html.it/xml/guida/biblio.htm [19/06/2001 14.16.51]

Page 125: Corso-Guida - HTML.it - Corso XML

di Enrico [email protected]

Con XML è possibile avere un'unica piattaforma di sviluppo per scambiarsi ed elaborare i datiprovenienti da varie fonti. Il Tutorial di Enrico Modanese per HTML.it vi condurrà all'elaborazione ealla scrittura di strumenti che utilizzano Javascript, XML e la standard DOM per accedere aidocumenti XML e manipolarli.

Percorso consigliato: espertiLivello di difficoltà:

 

Introduzione

1. Cosa potete trovare in questo tutorialProgrammare con xml dentro e fuori il web: una rapida rassegna di ciò che troverete in questo tutorial

Come manipolare dati xml tramite l'interfaccia dom

2. Cosa vuol dire usare XML in una applicazione?Introduzione al tutorial e prime indicazione sull'uso del linguaggio XML

3. Cosa vuol dire leggere e scrivere dati da un file XML?Le principali caratteristiche di manipolazione di file XML attraverso semplici esempi

4. DOM: l'interfaccia standard per usare XMLDescrizione dell'interfaccia Document Object Model che permette di accedere ai documenti XML

5. Struttura ad oggetti dell'interfaccia DOML'intefaccia DOM si comporta come un linguaggio di programmazione ad oggetti

6. Modifiche agli oggetti dell'interfaccia DOMCome manipolare o dati di un documento XML da un'interfaccia DOM

Lavorare subito (gratis) con xml: tutti gli esempi che vi servono

7. Lavorare con XML: come creare un oggetto da un file XMLGli strumenti da utilizzare per lavorare con XML li avete già tutti nel vostro Personal Computer

8. "Navigare" nel nuovo oggetto XMLCome poter operare sull'oggetto creato dal documento XML? Attraverso il DOM.

9. Importanti accorgimenti per lavorare senza erroriConsigli pratici su cosa dover sempre evitare scrivendo codice XML

10. Contenuto della libreria per JavascriptRiunendo alcune alcune righe di codice in una libreria di funzioni risparmiamo tempo e spazio

Utilizzare dom per creare applicazioni web object - oriented

HTML.it - Tutorial XML-DOM

http://www.html.it/xml/tutorial/index.html (1 di 3) [19/06/2001 14.17.03]

Page 126: Corso-Guida - HTML.it - Corso XML

11. Introduzione: i due "trucchi" di baseDue "trucchi" per poter arricchire Javascript con delle funzioni avanzate per le quali non era stato progettato.

12. Far comunicare le pagine tramite gli input di tipo "hidden"Il primo "trucco": il metodo degli input hidden.

13. Le strutture logiche di una pagina multi - oggettoUna pagina multi - oggetto è composta da un albero gerarchico di videate

14. Dichiarazione e passaggio di stringheCome poter evitare di incorrere in comuni errori di compilazione. Due esempi di gestione del codice.

15. XML come base dati: creare e scrivere fileUtilizzare gli srtumenti ActiveX di Microsoft per accedere al nostro Hard Disk: il FileSystemObject.

Esempi di codice

16. Introduzione: quali esempi potete trovareGli esempi commentati di alcune applicazioni per il web ampiamente descritte nei capitoli precedenti.

17. Esempio 1: un test per i visitatoriIl primo esempio è un semplice test, diviso in più schermate, da sottoporre ai vostri visitatori.

18. Esempio 2 e 3: il carrello accompagna il clienteIl secondo esempio è rappresentato dalla nota metafora del carrello, usata soprattutto nei siti di commercioelettronico.

19. Esempio 2: il carrello nel frame "invisibile"Un evoluzione dell'esempio precedente, il carrello questa volta viene "nascosto" in un frame invisibile.

20. Esempio 3: il carrello registrato come file fisico localeIl contenuto del carrello viene scritto sull'Hard Disk del visitatore che lo avrà disponibile accedendo nuovamenteal sito.

21. Esempio 4: panoramica del sito senza un solo "click"Un utilissimo esempio delle potenzialità dell'XML: in questo modo potrete creare una mappa del vostro sitonavigabile senza clik.

22. Esempio 5: morte al "file not found" Impariamo a rendere più user friendly le nostre pagine: manteniamo una pagina sempre aggiornata

Creare eseguibili formati da oggetti web

23. Introduzione: i vantaggi di programmare per il browser Iniziamo a conoscere i vantaggi di una programmazione di scripting orientata al browser. I vantaggi diprogrammare per i browser

24. Struttura complessiva di eseguibile ad oggetti per il browser

Iniziamo a conoscere la struttura di un software object-oriented da far girare sul nostro browser

25. La chiamata di un oggetto Vediamo cosa accade nella esecuzione di una funzione del nostro piccolo software: verifichiamo la funzione diapertura di un file

26. Esempio 6: un SW in 15 KB Un piccolo software leggibile direttamente dal browser e dal peso di soli 15 Kbyte: usiamo le librerie grafiche delbrowser

27. Bibliografia La bibliografia per saperne di più e appronfondire gli argomenti di questo tutorial

HTML.it - Tutorial XML-DOM

http://www.html.it/xml/tutorial/index.html (2 di 3) [19/06/2001 14.17.03]

Page 127: Corso-Guida - HTML.it - Corso XML

Appendice: standard e strumenti per xml

28. Caratteri speciali ed escape dell'XML 1.0 Un breve elenco dei caratteri speciali supportati da XML

29. Specifica completa del modello DOM È utile conoscere e imparare le specifiche ufficiali di un linguaggio: in questo paragrafo vengono descritti iprincipali standard per il modello DOM

30. Parserizzatori Un parserizzatore ci permette di verificare la correttezza del nostro codice e di eseguirlo. Microsoft InternetExplorer.

31. Interfaccia FSO (FileSystenObject) per creare e salvare file

Analisi del FileSystemObject, lo strumento che ci permette di accedere all'Hard Disk del nostro computer

HTML.it - Tutorial XML-DOM

http://www.html.it/xml/tutorial/index.html (3 di 3) [19/06/2001 14.17.03]

Page 128: Corso-Guida - HTML.it - Corso XML

 Cosa potete trovare in questo tutorial

È ormai comune sentire parlare di XML (eXtensible Mark-up Language) esoprattutto sentirne parlare bene, con grandi aspettative. Più difficile invece èosservare realmente XML all'opera, perchè:

su Internet solo alcuni siti specializzati usano oggi XML;●

nelle applicazioni pochi produttori fanno uso effettivo di XML e quei pochi lolimitano ad un livello molto basso, di solito invisibile all'utente.

Ma è veramente possibile usare XML anche nella programmazione? E nellaprogrammazione per il web?

Ebbene, questo tutorial è stato scritto proprio per chi ha una mezza idea di cosa siaXML e vorrebbe cominciare ad usarlo realmente, senza eccessivi impegni di tempo odenaro. Se siete interessati vi anticipiamo che:

nel 90% dei casi avrete già tutto il sofware che vi serve: Windows ed InternetExplorer 5, niente altro!

gli esempi sono realizzati tutti in Javascript, un linguaggio di scripting diffuso efacile da imparare.

CAPITOLO 1Qui troverete tutte le basi per riuscire ad utilizzare XML nel codice dei vostriprogrammi e script, in particolare il potente strumento denominato DOM (DocumentObject Model).

CAPITOLO 2Qui tutte le regole del capitolo 1 vengono applicate, in esempi realizzati in Javascript.Con questi esempi potrete cominciare immediatamente a maneggiare XML. Studiatoper rendervi subito operativi, questo capitolo può essere letto anche senza passareper il capitolo 1.

CAPITOLO 3Qui vengono finalmente descritte alcune applicazioni molto interessanti della coppiaXML + DOM per risolvere problemi comuni fra i programmatori web. In questocapitolo trovate soprattutto le tecniche di base.

CAPITOLO 4Qui trovate la descrizione degli esempi allegati al tutorial e dedicati al web. Percomprendere le tecniche è consigliabile leggere prima il capitolo 3, ma le descrizionidel funzionamento sono sufficienti per provare subito gli esempi.

CAPITOLO 5Qui trovate la descrizione dell'esempio di programmazione su browser, che spiegacome XML + DOM vi permettano di creare menu a discesa e comandi anche moltocomplessi con un semplice file html. Il tutto per sfruttare le librerie grafiche delbrowser.

BIBLIOGRAFIA

APPENDICE: STANDARD E STRUMENTI PER XMLNon solo per i più esperti, ma anche per chi desidera semplicemente saperne di più,questa parte fornisce una descrizione completa degli standard usati, indicazioni distrumenti SW, bibliografia web e cartacea. Se comincerete a "masticare" l'XML,finirete di sicuro spesso in questa sezione.

LIBRERIA JAVASCRIPTPer farvi risparmiare tempo, abbiamo preparato delle funzioni preconfezionate per leoperazioni più comuni. I nomi sono esplicativi (cerca, copia, incolla...) e gli esempi ne

XML: Cosa potete trovare in questo tutorial

http://www.html.it/xml/tutorial/xml_00.htm (1 di 2) [19/06/2001 14.17.13]

Page 129: Corso-Guida - HTML.it - Corso XML

fanno largo uso. Potete agganciare queste funzioni direttamente ai vostri scriptsalvandole in un file con estensione .js.

ELENCO DEGLI ESEMPI:1 - Un test per i visitatori2 - Il carrello nel frame "invisibile"3 - Il carrello registrato come file fisico locale4 - Panoramica del sito senza un solo click5 - Morte al "file not found"6 - Un software in 15 KB

Se non avete mai letto niente a riguardo di XML vi consigliamo di cominciare con unaguida di base. Se invece siete dei programmatori esperti potrete fare tesoro degliesempi che seguiranno, perchè la loro struttura di base può essere trasportata dallinguaggio di scripting verso qualsiasi altro linguaggio orientato agli oggetti.

Se infine siete degli appassionati di Internet e volete imparare cosa si può ottenerecon uno strumento potente come XML, allora cominciate a leggere il prossimoparagrafo.

Attenzione! In questo tutorial non compaiono per nulla XSL e DTD: abbiamoscelto di non utilizzarli per mostrare come il solo XML "nudo e crudo" sia giàun campo di sperimentazione potente e divertente. Ciò non esclude la possibilitàdi ulteriori futuri interessamenti.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: Cosa potete trovare in questo tutorial

http://www.html.it/xml/tutorial/xml_00.htm (2 di 2) [19/06/2001 14.17.13]

Page 130: Corso-Guida - HTML.it - Corso XML

 DOM: l'interfaccia standard per usare XML

Ritornando al paragone fra XML ed il filesystema del nostro PC, sappiamo bene cheè possibile inserire un file in una cartella, ma non un file dentro un altro file.Nell'insieme delle parti componenti un filesystem le cartelle ed i file appartengono adue classi separate, caratterizzate da proprietà diverse:

Alla classe generica "parte del filesystem" sono associate diverse proprietàpossedute da tutti i suoi appartenenti:

attributi (ad esempio il nome dell'elemento);●

metodi: le operazioni possibili sull'oggetto (ad esempio il copia/incolla).●

Le due sottoclassi "cartelle" e "file" ereditano dalla classe più generale questiattributi e metodi per ognuno dei propri appartenenti e ne aggiungono di ulteriori, piùspecifici.

Classi, oggetti, attributi, metodi ed eredità sono i concetti di base del modo diragionare "object oriented" (orientato agli oggetti), utilizzato dai più moderni linguaggidi programmazione. Se vogliamo utilizzare un file XML con tali linguaggi dobbiamoessere in grado di descriverlo in termini ad oggetti, come abbiamo appena abbozzatoper il filesystem. La descrizione corretta e ufficiale è stata proposta dal W3C (l'enteche cura gli standard di Internet) ed è detta interfaccia DOM (Document ObjectModel).

Perché abbiamo definito il DOM "interfaccia"? Quando il parserizzatore ha letto ilnostro file XML e ci ha restituito un oggetto utilizzabile nel codice del programma, anoi non interessa quali e quante variabili siano state utilizzate per crearlo.

L'unica nostra preoccupazione è che l'interfaccia dell'oggetto (cioè i metodi e gliattributi) con il resto del codice sia aderente alle regole DOM.Ecco quindi lo schema finale della chiamata, nel codice di un programma, di unoggetto XML parserizzato secondo le specifiche DOM:

XML: DOM: l'interfaccia standard per usare XML

http://www.html.it/xml/tutorial/xml_03.htm (1 di 2) [19/06/2001 14.17.19]

Page 131: Corso-Guida - HTML.it - Corso XML

Nel paragrafo successivo vedremo nel dettaglio i componenti dell'interfaccia DOM. Ilcodice utilizzato è universale, perché la forma di attributi e metodi di DOM dovrebbeessere valida indipendentemente dal linguaggio con cui lavorate. Gli esempi pratici inJavascript si possono trovare nel capitolo 2, ordinati per tipo di operazione.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: DOM: l'interfaccia standard per usare XML

http://www.html.it/xml/tutorial/xml_03.htm (2 di 2) [19/06/2001 14.17.19]

Page 132: Corso-Guida - HTML.it - Corso XML

 Struttura ad oggetti dell'interfaccia DOM

In questo paragrafo viene usata la notazione standard per i linguaggi ad oggetti:nomeoggetto.metodo(parametri del metodo)nomeoggetto.attributo

La notazione usata è anche "case sensitive", cioè è sensibile alla differenza fracaratteri maiuscoli o minuscoli.Gli esempi pratici in Javascript si possono trovare nel capitolo 2, ordinati per tipo dioperazione.

La struttura dell'interfaccia DOM si basa su classi a più livelli (riportiamo solo icomponenti più utili). I nomi sono quelli originali del W3C, ma la traduzione èabbastanza semplice:

La classe più importante è quella di nodo (Node), che comprende qualsiasi elementodell'albero XML: radice, ramo, foglia. Allo stesso livello della classe Node, ma senzafigli, troviamo le classi NodeList e NodeNamedMap. Si tratta di oggetti temporaneiche vengono generati durante la lettura dell'albero XML, per memorizzare dei gruppidi fratelli (ad esempio tutti i figli o tutti gli attributi di un elemento): li analizzeremo piùavanti. Intanto descriviamo attributi e metodi principali posseduti da tutti gli oggettidella classe Node:

Attributi della classe Node che danno informazioni sul nodo:- nodeName: restituisce il nome del nodo, quello indicato fra i "tag":<nome>..</nome>. Se si tratta del documento stesso il nome sarà"#document", per un nodo di testo invece "#text".- nodeType: DOM assegna un valore numerico ai diversi tipi di nodo esistenti.Potrebbe servirvi per fare alcuni controlli. Per i nodi più importanti:elemento = 1, attributo = 2, testo = 3, documento = 9.- nodeValue: restituisce il valore del nodo corrente. Serve soprattutto per inodi di testo, per la maggiorparte degli altri darà risultato "null".

Attributi della classe Node per muoversi nell'albero XML. Quando creiamo unoggetto XML possiamo usare una o più variabili come "cursori" permemorizzare posizioni nell'albero. Ogni spostamento da una posizione nota sipuò effettuare con uno degli attributi che seguono.- ownerDocument: ci permette di saltare, ovunque ci troviamo, alla radice delnostro albero.

XML: struttura ad oggetti dell'interfaccia DOM

http://www.html.it/xml/tutorial/xml_04.htm (1 di 3) [19/06/2001 14.17.24]

Page 133: Corso-Guida - HTML.it - Corso XML

- parentNode: restituisce il nodo genitore dell'attuale.- childNodes: restituisce i nodi figli del nodo attuale, racchiusi in un oggettoNodeList.- firstChild, lastChild: restituiscono rispettivamente il primo e ultimo nodo figlidell'attuale.- previousSibling, nextSibling: restituiscono rispettivamente il fratelloprecedente e seguente del nodo attuale. Precedente e seguente fannoriferimento all'ordine con cui i nodi si trovano nel testo del file XML.- attributes: restituisce gli attributi del nodo corrente, racchiusi in un oggettoNodeNamedMap.

Metodi della classe Node: la maggiorparte di questi metodi serve per crearenuovi nodi dell'albero XML e sarà descritta nel prossimo paragrafo.- hasChildNodes(): restituisce un valore booleano (true o false) in risposta alladomanda se il nodo ha dei nodi figli (compresi i nodi di testo).

La sottoclasse di nodi chiamata "Document" indica proprio il documento XML econtiene un unico (obbligatoriamente unico) oggetto, la radice dell'albero. Vediamoattributi e metodi:

Metodi della classe Document: la maggiorparte di questi metodi serve percreare nuovi nodi dell'albero XML e sarà descritta nel prossimo paragrafo.- getElementsByTagName(tag): permette di cercare tutti gli elementi con uncerto nome al di sotto della radice. Gli elementi vengono messi in un oggettoNodeList. Il carattere " * " funziona come jolly per individuare tutti gli elementi.

La sottoclasse di nodi "Element" è la più popolosa e contiene tutti i rami dell'alberoXML, in pratica ogni elemento al di sotto della radice che sia stato dichiarato con unacoppia di "tag": <elemento></elemento>.

Metodi della classe Element: la maggiorparte di questi metodi serve per crearenuovi nodi dell'albero XML e sarà descritta nel prossimo paragrafo.- getElementsByTagName(tag): equivalente all'omonimo per Document.- getAttribute (attributo): restituisce il valore, per l'elemento attuale,dell'attributo indicato.- getAttributeNode(attributo): restituisce l'attributo specificato come nodo.

La sottoclasse di nodi "Attribute" indica gli attributi degli elementi. Gli attributiereditano solo una parte delle proprietà dei nodi, perché non possono essereinnestati gli uni dentro agli altri. Non vale quindi per essi la maggiorparte dei metodiper muovere il cursore entro l'albero: nextSibling, previousSibling, firstChild etc... Perscorrere gli attributi occorre usare l'oggetto NamedNodeMap generato dal comando"attributes".Vediamo alcune proprietà caratteristiche solo degli attributi:

Attributi della classe Attribute:- name: restituisce il nome dell'attributo.- specified: restituisce un valore booleano (true o false) che indica seall'attributo è stato assegnato un valore.

La sottoclasse CharacterData è la "mamma" di testi e commenti del file XML.Nell'albero parserizzato il testo diventa un nodo di nome "#text". I metodi della classeservono per modificare il testo e saranno descritti nel prossimo paragrafo. Vediamoqui invece due attributi molto importanti:

Attributi della classe CharacterData:- data: restituisce il testo vero e proprio contenuto nel nodo #text.- length: restituisce il numero di caratteri che formano il testo.

Veniamo ora alle due classi NodeList e NamedNodeMap. Quando l'esito di unmetodo può essere composto di più parti, viene creato automaticamente un oggettodi una di queste due classi per contenere i risultati. Un oggetto Nodelist è un vettoredi elementi con un indice numerico, NamedNodeMap possiede le stesse proprietà diNodelist ed in più permette di individuare gli elementi con dei nomi oltre che con

XML: struttura ad oggetti dell'interfaccia DOM

http://www.html.it/xml/tutorial/xml_04.htm (2 di 3) [19/06/2001 14.17.24]

Page 134: Corso-Guida - HTML.it - Corso XML

l'indice. Vediamo prima attributi e metodi di NodeList:

Attributi della classe NodeList:- length: restituisce il numero di elementi del vettore.

Metodi della classe NodeList:- item(n): restituisce l'elemento nella posizione n. L'elemento può essere unoggetto della classe Node, con le relative proprietà. L'indice progressivo delleposizioni del vettore non parte da 1, bensì da 0: 0,1,2... Perciò la lunghezzadel vettore è uguale all'ultima posizione + 1.

La classe NamedNodeMap possiede le stesse proprietà di Nodelist più la seguente:

Metodi della classe NamedNodeMap:- getNamedItem(nome): restituisce l'elemento che corrisponde al nomeindicato.

Con queste due ultime classi dovrebbe ora risultare chiaro il funzionamento di tutti gliattributi e metodi visti. Per ora si è trattato di proprietà di sola lettura: nel prossimoparagrafo descriveremo come l'interfaccia DOM ci permetta anche di apportaremodifiche agli oggetti dell'albero XML.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: struttura ad oggetti dell'interfaccia DOM

http://www.html.it/xml/tutorial/xml_04.htm (3 di 3) [19/06/2001 14.17.24]

Page 135: Corso-Guida - HTML.it - Corso XML

 Modifiche agli oggetti dell'interfaccia DOM

Come abbiamo in parte anticipato lo standard DOM permette anche di modificarel'albero XML. Abbiamo riservato a queste istruzioni un paragrafo separato perché perpoterle usare occorre conoscere due facili ma importanti regole sul comportamentodel DOM:

le azioni di cancellazione o copia possono essere operate direttamente suglioggetti desiderati.

l'azione di creazione di un nuovo nodo è operata solo tramite metodidell'oggetto Document. In poche parole, un nuovo nodo può essere generatosempre e solo dalla radice dell'albero. Appena creato il nuovo nodo esiste manon ha una posizione nell'albero. Per questo il nodo va "installato", conappositi metodi, nel nodo padre scelto.

Con queste premesse vediamo ora le istruzioni. Partiamo questa volta dalla classeDocument per vedere subito come si crea un nuovo nodo.

Metodi della classe Document:- createElement(nome): crea un elemento col nome dato.- createAttribute(nome): crea un attributo col nome dato.- createTextNode(stringa): crea un nodo di testo contenente la stringa data.

Metodi della classe Node: gli oggetti maneggiati da questi metodi possonoessere nuovi nodi appena creati e non ancora posizionati oppure nodi giàpresenti. Se le operazioni hanno esito positivo, i metodi restituiscono l'oggettoappena movimentato:- appendChild(nodo): aggiunge un nodo ai figli; se il nodo era già presente inun'altra posizione viene prima rimosso.- removeChild(nome nodo): elimina un nodo figlio, restituisce il nome del nodorimosso. - replaceChild(nome nodo 1, nodo 2): sostituisce il figlio nodo 1 con ilnodo 2. Se il nodo era già presente in un'altra posizione viene prima rimosso.- insertBefore(nodo 1, nome nodo 2): inserisce il nodo 1 prima del figlio nodo2. Se il 2 non è indicato l'operazione è identica a .appenChild. Se il nodo eragià presente in un'altra posizione viene prima rimosso.- cloneNode(true/false): copia il nodo e tutto il sottoalbero (true), oppure ilnodo solo con gli attributi (false), ma non il testo (che è un nodo figlio).

Restituisce il nodo senza posizione, come se fosse stato creato.

Metodi della classe Element: riguardano tutti gli attributi. Ricordiamo cheanche se gli attributi non vengono trattati ufficialmente come figli, sonocomunque dei nodi sottostanti al loro elemento.Perciò va considerata la differenza fra "nodo" attributo e valore dell'attributostesso.- setAttribute(nome): imposta il valore dell'attributo indicato, che deve esseregià esistente.- removeAttribute(nome): resetta il valore dell'attributo.- setAttributeNode(nodo attributo): aggiunge un attributo a quelli del nodo. Seviene rimpiazzato un attributo esistente il metodo restituisce tale attributo,altrimenti il valore null.- removeAttributeNode: rimuove l'attributo ed il suo contenuto.

Metodi della classe CharacterData:- appenData(stringa): aggiunge la stringa data a quella nel nodo testo. Nonrestituisce alcun valore.- insertData(stringa, posizione): inserisce la stringa data della posizione

XML: modifiche agli oggetti dell'interfaccia DOM

http://www.html.it/xml/tutorial/xml_05.htm (1 di 2) [19/06/2001 14.17.28]

Page 136: Corso-Guida - HTML.it - Corso XML

indicata. Il contatore delle posizioni inizia da 0 e non da 1.- deleteData(posizione, lunghezza): elimina un certo numero di caratteri dopola posizione indicata.- replaceData(posizione, lunghezza, stringa): sostituisce il segmento indicatoda posizione e lunghezza con la stringa data.

Metodi della classe NodeNamedMap:- setNamedItem(nome): aggiunge al vettore un nodo col nome dato.- removeNamedItem(nome): elimina dal vettore il nodo dato.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: modifiche agli oggetti dell'interfaccia DOM

http://www.html.it/xml/tutorial/xml_05.htm (2 di 2) [19/06/2001 14.17.28]

Page 137: Corso-Guida - HTML.it - Corso XML

 Lavorare in pratica con XML: come creare un   oggetto da unfile XML

Questo paragrafo risponde alla domanda: come si crea una variabile a partire da unfile XML, per poi poterla utilizzare nel codice di un programma?

Se avete installato sul vostro computer MS Windows e MS Internet Explorer 5 alloraavete già tutto quello che vi serve per cominciare. Microsoft ha inserito nel suobrowser un "parserizzatore" (lo strumento che "legge" gli alberi di informazioni XML)sotto forma di controllo ActiveX (un componente di Windows).

Facciamo subito un esempio pratico. Di seguito trovate una pagina html con unoscript Javascript che carica e visualizza un piccolo file XML:

Javascript - XML

Se copiate il testo in un file html e lo aprite con Internet Explorer 5 vi apparirà unafinestra di messaggio con il titolo di questo tutorial ed il suo editore.Questi due nomi si trovano già nella pagina, in un mini-file XML assegnato allavariabile "testo_XML". Noi li abbiamo caricati come due elementi indipendenti e liabbiamo scritti a video. Come abbiamo fatto?Il caricamento avviene in tre passi.

Chiamare l'ActiveX "MSXML"●

var file_XML = new ActiveXObject("Microsoft.XMLDOM"); file_XML.async = false

Con questa istruzione diciamo ad Internet Explorer di richiamare l'AcvtiveX di nomeMSXML, che è un parserizzatore. MSXML prepara un oggetto (con l'interfaccia DOMche abbiamo descritto nei paragrafi precedenti della guida) utilizzabile dallo script.L'oggetto è ancora vuoto, ma ha un nome (file_XML) e possiede già una serie diproprietà che vedremo nei prossimi paragrafi.

Caricare il file XML●

file_XML.loadXML(testo_XML)

Con questa istruzione abbiamo assegnato all'oggetto file_XML un contenuto: unaradice, un ramo "titolo" ed un ramo "editore". Il contenuto è stato prelevato da unasemplice variabile di testo, ma ora il parserizzatore ha creato una struttura dati benpiù complessa e soprattutto, come vedremo, perfettamente manipolabile.

Posizionarsi alla "radice" dell'albero XML per leggerlo.●

XML: lavorare in pratica con XML: come creare un oggetto da un file XML

http://www.html.it/xml/tutorial/xml_06.htm (1 di 2) [19/06/2001 14.17.36]

Page 138: Corso-Guida - HTML.it - Corso XML

var root = file_XML.documentElement;

Questa istruzione ci serve per posizionarci alla base dell'albero che abbiamo creato(la radice o "root"). Infatti dobbiamo indicare al programma come "entrare" nellastruttura che abbiamo creato e riempito, per cominciare a leggere e scrivere.

Riassumiamo in una figura i tre momenti del caricamento del file XML.

Nel nostro esempio abbiamo messo il nostro file XML in una variabile di testo dentrolo script. Normalmente invece il file è esterno e deve essere richiamato. In questocaso il cambiamento richiesto è minimo: per prima cosa dobbiamo cambiare di pocol'istruzione 2:

file_XML.load ("Mio_file.xml")

poi dobbiamo indicare nome e posizione del file da caricare.

Create un file con Notepad o Wordpad di Windows, copiate nel file la stringa XMLdell'esempio iniziale, chiamate il file Mio_file.xml (non dimenticate l'estensione .xml!)e salvatelo come file di testo nella stessa cartella dove avete creato il file html iniziale.

Se ricaricate il file html non vedrete nessun cambiamento apparente, ma i dati cheleggete nell'avviso non provengono più dallo script, bensì dal file XML esterno. Perverificare provate a modificare Mio_file.xml mettendo al posto del titolo un'altra parola(senza cambiare la posizione dei tag!) e ricaricate di nuovo.

Quello che avete appena fatto è banale ma molto potente: avete appena caricato inuna pagina web dei dati esterni senza utilizzare fonti ODBC o altri rompicapi simili,bensì tramite un semplice, piccolo testo (XML però!).

Per riassumere il contenuto di questo paragrafo:con l'uso dell'ActiveX MSXML si carica un file XML in tre mosse;●

le sorgenti XML possono essere di due tipi: un file con estensione .xml oppureuna stringa di testo; basta inserire una piccola modifica nella secondaistruzione;

per utilizzare l'oggetto occorre posizionarsi alla sua radice.●

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: lavorare in pratica con XML: come creare un oggetto da un file XML

http://www.html.it/xml/tutorial/xml_06.htm (2 di 2) [19/06/2001 14.17.36]

Page 139: Corso-Guida - HTML.it - Corso XML

 "Navigare" nel nuovo oggetto XML

Come si utilizza l'oggetto che abbiamo creato da un file XML?

Nel capitolo 1 potete trovare la risposta teorica completa a questa domanda: il nuovo oggetto possiedeun'interfaccia standard denominata DOM (Document Object Model). Qui invece vi proponiamo uno schema moltosemplice che vi permette di cominciare subito a lavorare con codice Javascript (e non solo).

Lo schema è semplice perché le tecniche di trattamento dell'XML vi consentono di vedere il vostro file (sia che siain formato testo originale, sia che sia stato caricato in una variabile) sempre e solo come un "albero". Poteteperciò fare sempre riferimento al concetto di "nodo" dell'albero:

Consideriamo di aver inserito il nodo della figura dentro alla variabile chiamata nodo_attuale e vediamo come sieseguono tutte le operazioni più importanti indicate in figura:

● Leggere la "carta d'identità" del nodo: nome e tipo del nodo (per il significato del tipo vedi il capitolo 1)

XML: "Navigare" nel nuovo oggetto XML

http://www.html.it/xml/tutorial/xml_07.htm (1 di 4) [19/06/2001 14.17.42]

Page 140: Corso-Guida - HTML.it - Corso XML

var nome = nodo_attuale.nodeName /* restituisce il nome posseduto dal nodo dentro

il file XML, cioè fra i tag: <nome></nome> */

var tipo = nodo_attuale.nodeType /* restituisce un valore da 1 a 12 che

identifica il tipo del nodo */

● Risalire al padre: il padre è unico e l'istruzione è veramente semplice

var padre = nodo_attuale.parentNode

Volendo si può anche risalire da qualsiasi punto alla radice dell'albero, cioè all'oggetto documento, per leggeremagari il nome e la posizione del file XML originale:

var documento = nodo_attuale.ownerDocument; var file_originale = documento.url

● Cercare i figli. Purtroppo i figli possono essere numerosi: o ne scegliamo uno in particolare, oppure li riuniamotutti in un vettore:- scegliere un solo figlio: possiamo prendere il primo o l'ultimo

var figlio = nodo_attuale.firstChild var figlio = nodo_attuale.lastChild

- scegliere più figli insieme:

var vettore_figli = nodo_attuale.childNodes

XML: "Navigare" nel nuovo oggetto XML

http://www.html.it/xml/tutorial/xml_07.htm (2 di 4) [19/06/2001 14.17.42]

Page 141: Corso-Guida - HTML.it - Corso XML

Questa istruzione crea un vettore (con indice numerico che parte da 0) contenente tutti i figli. Il ciclo for riportato diseguito legge il vettore e dovrebbe essere abbastanza chiaro:

for (var contatore = 0; contatore < vettore_figli.length; contatore++) { alert (vettore_figli.item(contatore)) }

Riassumendo: le due istruzioni per il vettore dei figli sono .length per conoscere la lunghezza e .item(i) perconoscere la posizione i-esima.

- cercare nel sottoalbero: la seguente istruzione permette addirittura di cercare in tutto il sottoalbero del nodo glielementi con un certo nome, per metterli in un vettore

var vettore_sottoalbero = nodo_attuale.getElementsByTagName(nome nodo)

● Cercare i fratelli: con le seguenti istruzioni si possono cercare il fratello che precede e quello che segue ilnodo attuale nel file XML:

var fratello = nodo_attuale.nextSibling var fratello = nodo_attuale.previousSibling

● Leggere gli attributi: come i figli anche gli attributi possono essere numerosi:

- leggere un solo attributo:

var valore_attributo = nodo_attuale.getAttribute(nome)

- leggere tutti gli attributi

XML: "Navigare" nel nuovo oggetto XML

http://www.html.it/xml/tutorial/xml_07.htm (3 di 4) [19/06/2001 14.17.42]

Page 142: Corso-Guida - HTML.it - Corso XML

var vettore_attributi = nodo_attuale.attributes

Quest'ultima istruzione genera un vettore come nel caso dei figli. Ma, poiché gli attributi hanno un nome primache un valore, le posizioni di questo vettore sono richiamabili, oltre che con un indice numerico, anche col nomedell'attributo corrispondente:

vettore_attributi.item(0) vettore_attributi.getNamedItem(nome attributo)

Entrambe le istruzioni precedenti sono valide.

● Leggere il testo: nel codice il testo viene trasformato in un nodo figlio di tipo "text". Per leggerlo occorreripescare il figlio adatto: se avete la cura di scrivere il testo all'inizio basterà richiamare l'istruzione .firstChild,altrimenti dovrete scorrervi tutti i figli per trovarne uno di tipo testo. Vedremo come scorrere i figli nei prossimiparagrafi, intanto riassumiamo alcune istruzioni utili per i testi:

- leggere il contenuto del nodo testo: esistono due possibilità:

var testo = nodo_testo.data var testo = nodo_testo.nodeValue

- leggere tutto il testo contenuto nel sottoalbero: si può compiere questa strana ma potentissima operazione conl'istruzione:

var testo = nodo_attuale.text

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: "Navigare" nel nuovo oggetto XML

http://www.html.it/xml/tutorial/xml_07.htm (4 di 4) [19/06/2001 14.17.42]

Page 143: Corso-Guida - HTML.it - Corso XML

 Importanti accorgimenti per lavorare senza errori

Javascript è un linguaggio gentile e riservato: se qualche istruzione manca di sensol'esecuzione cerca di procedere senza disturbarci. L'unico caso in cui il sistema siarrabbia seriamente è quando il codice cerca di operare su di una variabile vuota.Questa situazione è molto frequente lavorando con XML: esplorandoprogressivamente l'albero si arriva prima poi a rami terminali e si può rischiare di"procedere nel vuoto". Ecco un esempio tipico di un'istruzione a serio rischio diblocco:

var figlio = nodo_attuale.firstChild;alert (figlio.nodeName)

Se nodo_attuale non ha figli la prima riga viene eseguita senza problemi, ma lavariabile figlio assume valore nullo. Al passo successivo l'esecuzione si bloccaperché figlio non è un oggetto XML e quindi non supporta l'attributo .nodeName. Ilsistema emette un segnale di errore con la spiegazione "Oggetto mancante".Come evitare questo genere di errori? In genere è più che sufficiente porsi sempredue domande mentre si scrive il codice:- in quale "mondo" esiste il mio oggetto XML?- dove termina il mio albero?

● In quale "mondo" esiste il mio oggetto XML?La risposta è semplice ma molto importante: tutte le variabili di uno script rimangonodichiarate e posseggono un valore finchè la pagina web che contiene lo script stessorimane attiva nel browser. Appena effettuiamo un click per spostarci perdiamo ogniparte del nostro codice e della sua esecuzione. Se torniamo indietro ritroviamo i nostrioggetti resettati.

L'oggetto XML dichiarato tramite l'istruzione "new ActiveXObject" segue questodestino e con esso ogni variabile che abbiamo generato nella navigazione.

Questa struttura a "scomparti stagni" è un grosso vincolo per i creatori di script.Esiste un metodo per permettere il colloquio fra scomparti? Certamente sì, se aveteletto i paragrafi precedenti lo avete già utilizzato: il file di testo XML. Una fonteesterna XML in cui leggere e scrivere permette agli script di pagine diverse dipassarsi dati. Per ora siamo capaci di leggere, nei prossimi capitoli impareremoanche a scrivere.

Riassumendo: l'oggetto XML ottenuto per parserizzazione ed ogni parte del suoalbero "vivono" finchè il nostro utilizzatore non fa click verso un'altra pagina. Tuttaviapossiamo usare il file XML di testo per salvare e riutilizzare i dati.

● Dove termina il mio albero?Esistono alcune istruzioni che ci permettono di non "avanzare nel vuoto" quando cimuoviamo verso la periferia dell'albero, cioè di verificare se un nodo ha figli o attributiprima di provare a leggerli.- Verificare l'esistenza dei figli: ecco come l'esempio visto a inizio paragrafo puòessere reso sicuro da errori:

XML: importanti accorgimenti per lavorare senza errori

http://www.html.it/xml/tutorial/xml_08.htm (1 di 2) [19/06/2001 14.17.47]

Page 144: Corso-Guida - HTML.it - Corso XML

if (nodo_attuale.hasChildNodes()) { var figlio = nodo_attuale.firstChild; alert (figlio.nodeName) } else alert ("Fine dell'albero")

Il metodo hasChildNodes() restituisce il valore booleano true se il nodo ha figli(compreso il nodo figlio di testo), false altrimenti.

Verificare che un nodo esista prima di leggerlo: abbiamo visto che assegnare unavariabile nulla, ma accorgersi del suo stato prima di operarvi, non genera errore.Questo controllo è particolarmente utile quando non possiamo interrogare il padre(con l'istruzione hasChildNodes) oppure nelle condizioni di uscita dei cicli cheleggono i vettori di nodi figli:

if (nodo attuale != null) { /* operazione sul nodo */ }

var figlio = nodo_attuale.firstChild while (figlio != null) { /* operazione sul nodo */ figlio = figlio.nextSibling }

Per concludere questo paragrafo raccomandiamo di ricordare che ognuno hai i suoialberi preferiti, cioè che i file XML degli utilizzatori possono avere forme moltodiverse, a cui un programma deve esser preparato. È nella filosofia di XML l'essereun linguaggio universale: imporre degli standard come quello di fissare i nomi dei nodio la loro posizione non rientra in questa filosofia.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: importanti accorgimenti per lavorare senza errori

http://www.html.it/xml/tutorial/xml_08.htm (2 di 2) [19/06/2001 14.17.47]

Page 145: Corso-Guida - HTML.it - Corso XML

 Contenuto della libreria per Javascript

I comandi previsti dallo standard DOM sono potenti, ma spesso diventano un po' ripetitivi. Quando inparticolare dobbiamo trovare un elemento fra molti (i figli o gli attributi di un nodo) il ciclo di ricerca richiedediverse istruzioni facilmente riutilizzabili.

Abbiamo riunito le righe di codice più ripetitive in alcune funzioni, che vi permettono di muovervi nell'alberoXML utilizzando una o due righe di codice per movimento, anche se si tratta di ricerche fra i rami figli.

Le funzioni sono dichiarate in Javascript come nuovi oggetti, aventi come attributi i risultati della funzionestessa. Ecco un piccolo esempio:

var risultato_funzione = new funzione(parametro 1, .. ,parametro n);var risultato_1 = risultato_funzione.attributo_1;var risultato_2 = risultato_funzione.attributo_2;

Nelle nostre funzioni in genere i risultati saranno due:

● funzione.Sysubrc = valore booleano (true/false) che indica che la funzione è stata eseguita con successo

● funzione.SyBuffer = risultato della funzione.

La prima variabile vi permette di programmare usando gli accorgimenti contro gli errori descritti in uno deiparagrafi precedenti, cioè assicurandovi che il risultato della funzione esista prima di utilizzarlo. Ecco unesempio di chiamata di funzione sicuro da errori:

XML: contenuto della libreria per Javascript

http://www.html.it/xml/tutorial/xml_09.htm (1 di 3) [19/06/2001 14.17.51]

Page 146: Corso-Guida - HTML.it - Corso XML

var risultato_funzione = new funzione(parametro 1, .. ,parametro n);if (risultato_funzione.sySubrc) { /* operazioni su risultato_funzione.syBuffer */ }

La libreria di funzioni è già pronta per essere utilizzata: potete leggerla come esempio oppure copiarla esalvarla in un file testuale con estensione .js. Ripetiamo brevemente la chiamata di script esterni un file html:

<head> <script language="Javascript" src="nome_file.js"> </script></head>

(la posizione in head non è obbligatoria, ma permette al vostro script di valere per tutti gli eventi generati nellapagina)

Di seguito riportiamo un elenco delle funzioni nella libreria ed una breve descrizione per ognuna di esse:

loadXMLFile(filePath)dato il percorso del file XML lo parserizza; syBuffer restituisce l'elemento documento, sySubrc assicurasia che il percorso non sia nullo sia che il file non esista, non sia vuoto o contenente XML non benformattato.

loadXMLString(string)data una stringa XML la parserizza; syBuffer restituisce l'elemento documento, sySubrc assicura siache la stringa non sia nulla sia che contenga XML ben formattato e che la parserizzazione abbia buonesito.

findChilds (currentNode, childName)dato il nodo currentNode ne ricerca il figlio di nome childName; syBuffer restituisce un vettorecontenente tutti i figli col nome richiesto, sySubrc assicura che il vettore non si vuoto o che gli input nonsiano nulli.

findAttribute (currentNode, attributeName)dato il nodo currentNode ne ricerca l'attributo di nome attributeName; syBuffer restituisce il valoredell'attributo, sySubrc assicura che l'attributo esista, che non sia vuoto o che gli input non siano nulli.

findText (currentNode)dato il nodo currentNode ne restituisce il testo; syBuffer contiene la stringa, sySubrc assicura che il

XML: contenuto della libreria per Javascript

http://www.html.it/xml/tutorial/xml_09.htm (2 di 3) [19/06/2001 14.17.51]

Page 147: Corso-Guida - HTML.it - Corso XML

testo esista o che gli input non siano nulli.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: contenuto della libreria per Javascript

http://www.html.it/xml/tutorial/xml_09.htm (3 di 3) [19/06/2001 14.17.51]

Page 148: Corso-Guida - HTML.it - Corso XML

 Introduzione: i due "trucchi" di base

Javascript, che abbiamo fin qui usato per manipolare XML, è stato studiato peressere diffuso in Internet e possiede, accanto ad una grande facilità d'uso, anchequalche aspetto un po' ostico. Per motivi di sicurezza (il web non è un posto tantotranquillo):

● due pagine web non scambiano solitamente dati tra di esse, ma solo attraverso ilDB del server che le ha generate;● lo script ha un accesso limitato al filesystem del nostro PC, permettendoci dioperare ben pochi salvataggi.

Esistono alcune eccezioni alle precedenti regole. Ne citiamo due:

● tramite le proprietà "parent" e "opener" la pagina corrente può leggere emodificare un'altra pagina aperta. In particolare gli input di tipo "hidden" possonofunzionare come dei canali di scambio dei dati senza modificare la parte visibile;● tramite l'interfaccia Microsoft "FileSystemObject", basata su di un ActiveXabbastanza diffuso, gli script possono accedere al filesystem del client per tutte leoperazioni di lettura e modifica.

I due "trucchi" citati hanno una limitazione teorica: possono trasmettere datisolamente in formato testo:

● gli input hidden possono contenere stringhe, ma non variabili complesse come gliarray;● l'interfaccia FileSystemObject può generare e leggere solamente file conestensione .txt.

Anche questa è una scelta di sicurezza: il formato testo è visto solitamente come"innocuo" e poco potente. Ebbene: cosa è XML se non testo? Utilizzando XMLpossiamo trasmettere dati strutturati ovunque sia previsto lo scambio di stringhe dicaratteri.

Nei seguenti paragrafi utilizzeremo la coppia XML + DOM ed i due trucchi precedentiper superare alcuni dei limiti dei linguaggi di scripting, permettendo alle pagineJavascript di funzionare come dei veri e propri oggetti di programmazione, dotati di unnucleo eseguibile e di un interfaccia di input- output completa.

Nel capitolo 4 queste tecniche ed altre ancora verranno applicate in esempi chetentano di risolvere alcuni dei più diffusi problemi di programmatori web e non solo.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: introduzione: i due "trucchi" di base

http://www.html.it/xml/tutorial/xml_10.htm [19/06/2001 14.17.54]

Page 149: Corso-Guida - HTML.it - Corso XML

 Far comunicare le pagine tramite gli input di tipo   "hidden"

Come promesso, vediamo i passaggi del trucco basato sugli input di tipo "hidden"(consideriamo noti la sintassi e l'uso delle proprietà "opener" e "parent").

Metodo degli input hidden, variante "parent" (pagine con frame).Questa variante si basa sulla possibilità, nelle pagine con più frame, di navigare in unasezione, mentre in un secondo settore la pagina rimane fissa e può registrare dati provenientidai nostri spostamenti. È di solito utile che i dati registrati non siano mostrati direttamenteall'utente: se il frame statico è visibile è sufficiente utilizzare campi di tipo hidden, ma il metodomigliore si basa sull'utilizzo di un frame "invisibile", poichè dichiarato di dimensione = 0.Ecco i passi necessari:

● si crea un pagina con un frame "invisibile":

<frameset rows="*" border="0"> <frameset cols="0,*"> <frame name="invisibile" src="..."> <frame name=""visibile" src="..."> </frameset> </frameset>

● nella pagina corrispondente al frame invisibile si inserisce un campo di input (non èindispensabile che sia hidden, perché la pagina è già nascosta):

<form name="..."> <input type="hidden" name="..." value=""> </form>

● le pagine nel frame visibile possono scrivere nell'input appena creato con l'istruzione:

parent.frames[0].document.nomeform.nomeinput.value = x

Metodo degli input hidden, variante "opener" (pagine generate dinamicamente).Questa variante si basa sull'insieme formato da una pagina "padre" e dalle pagine "figlie" cheessa genera dinamicamente. Salvando dei dati in campi hidden presso il padre, le figliepossono comportarsi come degli oggetti, che vengono chiamati e restituiscono un risultato.Ecco i passi necessari:

● si crea una pagina iniziale con un modulo contenente un input "hidden":

<form name="modulo"> <inpu type="hidden" name="interface" value=""> </form>

XML: far comunicare le pagine tramite gli input di tipo "hidden"

http://www.html.it/xml/tutorial/xml_11.htm (1 di 2) [19/06/2001 14.17.57]

Page 150: Corso-Guida - HTML.it - Corso XML

● si inserisce nella pagina iniziale un comando di apertura di una nuova pagina:

var nuova = window.open ("", "Nuova pagina"); var nuovaPagina = nuova.document; nuovaPagina.writeln ( /* testo HMTL della pagina */ )

● se nella nuova pagina si ottiene un dato che si vuole salvare, lo si può inviare alla pagina"genitore", con il seguente comando:

window.opener.document.modulo.interface.value = /* variabile da salvare */

In entrambe le varianti, XML + DOM rappresentano il passaggio fondamentale per sfruttare iltrucco. Un campo hidden accetta solo testo e quindi non può contenere variabili complessecome array. La soluzione è usare un oggetto XML: con il comando "variabile.xml" lo sitrasforma in una stringa e lo si invia alla pagina "genitore":

stringaXML = variabileXML.xml;window.opener.document.modulo.interface.value = stringaXML

Nella pagina "genitore" la stringa viene riparserizzata ed il trasferimento della variabile ècompletato, tramite un solo campo hidden e qualsiasi sia la complessità dei dati:

NuovaVarXML.loadXML (document.modulo.interface.value)

Nel capitolo 4 verranno descritti diversi esempi che utilizzano le due tecniche:● la variante parent sarà utilizzata per registrare dati legati alla navigazione (ad esempio ilcarrello in un sito di e-commerce);● la variante opener permetterà la creazione di pagine multi - oggetto.

Data la complessità di queste tecniche, aggiungiamo due paragrafi di spiegazioni: il primoapprofondisce il concetto di pagina multi - oggetto, il secondo raccoglie alcuni suggerimentisull'uso massiccio delle stringhe XML in html e javascript.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: far comunicare le pagine tramite gli input di tipo "hidden"

http://www.html.it/xml/tutorial/xml_11.htm (2 di 2) [19/06/2001 14.17.57]

Page 151: Corso-Guida - HTML.it - Corso XML

 Le strutture logiche che compongono una pagina  multi -oggetto

Una pagina multi - oggetto è composta da un albero gerarchico di videate. Ogni padre comanda l'aperturadelle pagine figlie tramite le chiamate window.open. Il testo delle pagine figlie può essere contenuto nelpadre o caricato dall'esterno: ovviamente lo scopo è massimizzare le pagine apribili senza collegarsi alserver.Per gestire un grosso numero di oggetti occorre creare una struttura innestabile, che valga cioè sia per ipadri che per i figli, che a loro volta potranno essere padri di altri e così via. Quella nel disegno seguente èla nostra proposta di struttura (ma non è la sola possibile):

Elementi dati: sono indispensabili tre elementi:

● Struttura di controllo: appartiene alla pagina padre, descrive la logica, l'ordine ed i contenuti nellacreazione dei figli. Ad esempio, utilizzando una variabile XML:

<controllo> <figlio1 completo="true" gerarchia="1" necessario="true"> <testo src=""><html><body>ciao</body></html></testo> </figlio1> <figlio2 completo="false" gerarchia="2" necessario="false"> <testo src="www...com/figlio2" /> </figlio2> </controllo>

Nell'esempio la pagina figlio1 è obbligatoria, va caricata per prima ed è già stata completata; la paginafiglio2 invece è facoltativa, può essere caricata per seconda e non è ancora stata aperta. Notate come laparte obbligatoria (padre + figlio1) può essere visualizzata tramite un solo download complessivo, mentre èrichiesto un secondo collegamento per figlio2 (magari una pagina di spiegazioni più "pesante" pocorichiesta).

● Strutture di input ed output: appartengono alla pagina padre ma sono condivise con gli oggetti figli.Nell'input viene trasferito ogni dato che serve per attivare l'oggetto figlio, nell'output l'oggetto deposita,durante la sua vita, i risultati necessari per il padre. L'input può essere contenuto anche nella parte di script,mentre l'output deve necessariamente essere affidato ad un campo di tipo "hidden".

Sequenza logica: sono necessari i seguenti step, nell'ordine indicato:

● lettura del campo di output: appena la pagina padre ritorna attiva occorre fare il punto della situazionecontrollando cosa è avvenuta nel frattempo (se vi sono "tracce" lasciate dai figli);● aggiornamento della struttura di controllo: se necessario la struttura di controllo viene modificata inbase agli output registrati;● lettura della struttura di controllo: viene fatto correre l'algoritmo di gestione della pagina, che in basealla situazione decide quali nuovi eventi sono possibili o necessari;● aggiornamento della struttura di input: l'algoritmo di gestione scrive le istruzioni per la prossimaazione.

La sequenza deve essere lanciata automaticamente ad ogni riattivazione, viene cioè indicata con

XML: le strutture logiche che compongono una pagina multi - oggetto

http://www.html.it/xml/tutorial/xml_12.htm (1 di 2) [19/06/2001 14.18.02]

Page 152: Corso-Guida - HTML.it - Corso XML

l'istruzione:

<body onFocus="javascript: /*function con la sequenza*/"></body>

Il tutto può sembrare molto complesso, ma non è che una copia esatta di ciò che avviene nelle pagine dicontrollo (Servlet, CGI, ASP etc...) dei server web, solamente riportato sul client. La complessità dellepagine può aumentare molto, ma aumentano di poco le dimensioni (solo 5 KB per ben cento righe dicodice!) e soprattutto diminuiscono drasticamente i collegamenti ed il carico sul server.

[ S o m m a r i o ]

XML: le strutture logiche che compongono una pagina multi - oggetto

http://www.html.it/xml/tutorial/xml_12.htm (2 di 2) [19/06/2001 14.18.02]

Page 153: Corso-Guida - HTML.it - Corso XML

 Cosa vuol dire usare XML in una applicazione ?

Ogni applicazione compie in fondo tre azioni principali: leggere dei dati, elaborarli,restituirli.

Se vogliamo che la nostra applicazione sia esportabile, ad esempio tramite Internet,dobbiamo assicurarci che ognuna delle tre azioni principali sia eseguibile sumacchine di molti tipi diversi.

Per la parte di elaborazione molto è già stato fatto ai fini dell'esportabilità: Java escript in diversi linguaggi permettono di eseguire un'applicazione su qualsiasi sistemadotato rispettivamente di una Java Virtual Machine (JVM) e di un browser recente.

Meno evoluto è invece il livello di esportabilità dei dati. Di solito la lettura e la scritturaavvengono da e verso un data-base (DB), che registra i dati in un formatoproprietario, in genere binario. Una applicazione esportabile dovrebbe quindi in teoriaessere prodotta in tante versioni, una per ognuno dei DB più diffusi. In genere invecele soluzioni adottate sono di due tipi:

se l'applicazione è destinata ad essere eseguita su di un determinato tipo dimacchina, il formato di input e di output sarà fisso e toccherà all'utente fornirsio del tipo di DB consigliato dal produttore o di un traduttore di dati, spesso aspese proprie;

se invece l'applicazione è destinata a correre su Internet, la parte eseguita sulserver utilizzerà il proprio DB, mentre la parte eseguita sul browser o sullaJVM del client dovrà fornire e ricevere dati on-line, in un lungo e dispersivocolloquio composto di tanti passaggi del tipo: modulo inviato - elaborazione -pagina html di risposta. Questa serie di scambi può essere frustrante, cometutti possiamo sperimentare quando ci connettiamo ad un sito congestionato.

Come aumentare l'esportabilità delle azioni di lettura/scrittura dati? Sarebbe idealeche ogni applicazione parlasse una sorta di "esperanto dei DB", cioè un linguaggiounico e semplice da tradurre da e verso altri formati proprietari. XML si candidaseriamente ad essere questo esperanto e lo sta progressivamente diventando, graziea degli indubbi punti di forza:

XML si basa su testo ASCII, un formato diffuso da moltissimi anni in modopraticamente ubiquitario;

XML è compattissimo, perchè si limita ad essere un contenitore di dati, senzale aggiunte legate all'elaborazione tipiche dei formati dei DB proprietari;

XML è comunque leggibile e comprensibile direttamente dall'uomo; scrivere unpiccolo DB XML a mano è un lavoro abbastanza facile.

Nei paragrafi che seguono descriveremo come utilizzare tutte le tecniche descritteper creare applicazioni pienamente esportabili. Riassumendo:

la parte eseguibile sarà in Javascript;●

i dati letti e scritti saranno in formato XML.●

Il pacchetto formato da Javascript + XML può viaggiare tranquillamente in Internet,come mostrato nella seguente figura:

XML: cosa vuol dire usare XML in una applicazione ?

http://www.html.it/xml/tutorial/xml_01.htm (1 di 2) [19/06/2001 14.18.14]

Page 154: Corso-Guida - HTML.it - Corso XML

E se invece non avessimo l'urgenza di esportare la nostra applicazione? Esistonocomunque diversi motivi per cui la coppia Javascript + XML può esserci utile:

i linguaggi di scripting sono in genere più facili da imparare ed usare epossono essere sufficienti per creare dei primi esempi funzionanti;

uno script può comunque richiamare al suo interno codice più potente (comeApplet Java o ActiveX);

il codice è già pronto per essere esportato su un'altra macchina, un altro DB oper passare in Internet.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: cosa vuol dire usare XML in una applicazione ?

http://www.html.it/xml/tutorial/xml_01.htm (2 di 2) [19/06/2001 14.18.14]

Page 155: Corso-Guida - HTML.it - Corso XML

 Cosa vuol dire leggere e scrivere dati da un file    XML?

Per elaborare un file XML un'applicazione deve compiere più o meno le stesseoperazioni che dovremmo eseguire noi a mano. Immaginiamo di creare un elenco deimembri della nostra famiglia: poichè XML è gerarchico partiremo da due classi moltogenerali (metodo top-down)

UOMINIANIMALI

Continuiamo specificando un po' meglio i dati:

UOMINI (papà, mamma, bambino)ANIMALI (gatto, cane)

Aggiungiamo i tag ed otteniamo il relativo file XML:

<famiglia> <uomini> <babbo>Aldo</babbo> <mamma>Giovanna</mamma> <bambino>Giacomino</bambino> </uomini> <animali> <cane>Bobi</cane> <gatto>Fufi</gatto> </animali></famiglia>

Questo documento XML ha molto in comune con la struttura delle cartelle del nostroPC: ecco come ci apparirebbe il file sotto forma di "filesystem":

XML: cosa vuol dire leggere e scrivere dati da un file XML ?

http://www.html.it/xml/tutorial/xml_02.htm (1 di 3) [19/06/2001 14.18.22]

Page 156: Corso-Guida - HTML.it - Corso XML

Un'applicazione che voglia accedere ai dati nel nostro file XML deve avanzare comeall'interno di un filesystem: partendo dall'origine, lungo un percorso (del tipoC:\famiglia\uomini\bambino\Giacomino.txt) che indica la posizione ricercata. Unprogramma in grado di fare tutto questo è detto "parser" (dal verbo inglese "to parse",analizzare).Esiste a portata di mano un parserizzatore gratuito per fare una prima prova? Certo,lo trovate allegato ad MS Internet Explorer 5 ed è già pronto per essere provato. Eccoil nostro primo esempio di caricamento di un file XML:

create un file con Notepad o Wordpad di Windows, copiate nel file ildocumento XML d'esempio appena visto, chiamate il file Famiglia.xml (nondimenticate l'estensione .xml!) e salvatelo in formato testo semplice. Notepad oWordpad si accorgeranno del .xml nel nome e creeranno un file con quellaestensione anziché un .txt.

aprite Famiglia.xml direttamente con Internet Explorer: vedrete un piccolofilesystem formato da rami espandibili (col segno "+") e collassabili (col segno"-") con un click. Il parser ha "parserizzato" il file e ve lo fa vedere.

Ora che abbiamo parserizzato il file XML possiamo anche leggerlo e poi modificarloin un programma? La risposta è sì, certamente, grazie ad uno standard creato dalW3C (l'ente che cura gli standard di Internet) e che è stato denominato DOM:Document Object Model.

XML: cosa vuol dire leggere e scrivere dati da un file XML ?

http://www.html.it/xml/tutorial/xml_02.htm (2 di 3) [19/06/2001 14.18.22]

Page 157: Corso-Guida - HTML.it - Corso XML

Il DOM è un insieme di comandi standard (ufficialmente una serie di metodi eproprietà per l'oggetto documento XML ed i suoi discendenti) per trattare i file XML.Microsoft, nel creare il suo parserizzatore, ha rispettato buona parte (ma non tutti) diquesti comandi standard.

In questo capitolo 1 descriveremo lo standard DOM: la sua struttura ad oggetti èfacile da comprendere e permette al programmatore un pieno controllo sull'XML.

Nel capitolo 2 passeremo all'opera, utilizzando i comandi (derivati dal DOM) messi adisposizione dal parserizzatore Microsoft.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: cosa vuol dire leggere e scrivere dati da un file XML ?

http://www.html.it/xml/tutorial/xml_02.htm (3 di 3) [19/06/2001 14.18.22]

Page 158: Corso-Guida - HTML.it - Corso XML

 Esempio 2: il carrello nel frame "invisibile"

[Tre file da salvare nella stessa cartella: Shop.htm per la pagina generale,Principale.htm per il frame centrale, Carrello.htm per il frame nascosto]

Il cliente naviga il sito rimanendo all'interno del frame visibile. Un secondo frameinvisibile accompagna la navigazione e contiene il carrello. Ecco i due componentifondamentali:● struttura carrello: nel frame invisibile

<carrello> <prod1></prod1> ... <prodn></prodn> </carrello>

● funzione compra: legge e parserizza la stringa-carrello, aggiunge all'albero unnuovo prodotto, de-parserizza l'albero e riporta la stringa modificata nel carrello

Il file di esempio è fornito vuoto di contenuti, comprendente solamente bottone escript per l'aggiornamento del carrello. Potete aggiungere le immagini dei prodotti ecreare il collegamento per la lettura finale del carrello. Se volete vedere l'esempiosubito all'opera potete aggiungere un bottone con la seguente istruzione, chevisualizza la stringa-carrello attuale:

alert(parent.frames[0].Carrello.Carrello.value)

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: esempio 2: il carrello nel frame "invisibile"

http://www.html.it/xml/tutorial/xml_18.htm [19/06/2001 14.19.28]

Page 159: Corso-Guida - HTML.it - Corso XML

 Esempio 3: il carrello registrato come file fisico   locale

[Tre file da salvare nella stessa cartella: ShopFSO.htm per la pagina generale,PrincipaleFSO.htm per il frame centrale, CarrelloFSO.htm per il frame nascosto]

In questo esempio, a differenza del precedente, la stringa-carrello viene salvata in unfile fisico residente su client tramite la tecnica FSO.

● Vantaggi: il carrello può essere conservato anche se il cliente spegne il browser oil computer. Molti siti di e-commerce forniscono piccoli SW allo scopo, scaricabili allaregistrazione dell'utente. Noi vi forniamo un esempio semplice ma completo esoprattutto molto "leggero".

● Svantaggi: intervenire sul filesystem del cliente è un'azione poco simpatica. Inoltrela tecnica FSO richiede la presenza dell'ActiveX Microsoft Scrrun.dll (comunqueabbastanza diffuso).

Nell'esempio sono predisposti due bottoni per due attività:

● generazione del carrello: viene richiesta una posizione di salvataggio per il file;

● salvataggio dei prodotti: apertura, modifica e salvataggio del carrello. Comenell'esempio 2 il carrello è una stringa XML, ogni modifica richiede unaparserizzazione ed una de-parserizzazione.

Anche in questo esempio abbiamo utilizzato un frame invisibile. Il motivo è laregistrazione del nome del file fisico dove risiede il carrello: si può scegliere fra lavariante opener oppure parent del metodo degli input hidden.Potete sperimentare il file di esempio controllando il file xx.txt del carrello, perverificare che venga effettuato il salvataggio dei dati.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: esempio 3: il carrello registrato come file fisico locale

http://www.html.it/xml/tutorial/xml_19.htm [19/06/2001 14.19.34]

Page 160: Corso-Guida - HTML.it - Corso XML

 Esempio 4: panoramica del sito senza un solo  "click"

[Un unico file Sitemap.htm e le tre immagini p1/2/3, da salvare nella stessa cartella]

Molti siti di buona qualità mettono a disposizione dell'utente, sulla homepage, una "sitemap", cheriassume per titoli l'organizzazione dei contenuti. Queste mappe sono di solito degli alberi espandibili,con brevi testi.E se la mappa anziché testi contenesse immagini, che al passaggio del mouse potessero espandersi informe fantasiose come spirali o stelle? Un elenco di titoli si trasformerebbe in un percorso sensibile almouse, che senza un solo click condurrebbe il visitatore attraverso una vera "anteprima visiva" del sito.Tramite XML + DOM questi percorsi possono essere creati, a partire da una serie di immaginipredisposte ed un algoritmo che ne gestisce l'apertura. Vediamo come questi due elementiinteragiscono nell'esempio 4:

● Aree mappabiliLe immagini che devono formare il percorso vengono distribuite nella pagina dove dovranno apparire.Ad ognuna viene assegnata un'area mappabile sensibile al passaggio del mouse:

<img name="p1" src="p1.jpg" usemap="#a1" width="70" height="70"> ... <map name="a1"> <area coords="0,0,70,70" onMouseOver="pass('p1')"> </map>

Le dimensioni coords="0,0,x,y" devono permettere di coprire tutta l'immagine correlata.Nell'esempio le immagini sono state disposte in righe e colonne di una tabella solo per ridurre la partehtml a favore della visibilità dello script. Volendo potete disporre le immagini ovunque vogliate: l'unicolimite è che formino un cammino continuo per lo spostamento del mouse.

● Algoritmo di gestione dell'apertura delle immagini.All'inizio le immagini devono essere dichiarate tutte di dimensione nulla a parte l'iniziale (si badi diaggiungere border="0", altrimenti al posto delle immagini vi saranno dei punti non proprio invisibili):

<img name="p11" border="0" src="p1.jpg" usemap="#a11" width="0" height="0">

La variabile stringa, che registra lo stato di apertura delle finestre, ha il seguente contenuto iniziale:

<control on=\"true\"> <p1 on=\"true\"> <p11 on=\"false\"> <p111 on=\"false</p131> ... </p132> </p13> </p1> </control>

Ogni volta che un'immagine aperta viene attraversata dal mouse l'algoritmo nella funzione pass() leggelo stato registrato nella stringa XML e prende una decisione:

- se le immagini "figlie" sono chiuse il passaggio del mouse ne genera l'apertura:

XML: esempio 4: panoramica del sito senza un solo "click"

http://www.html.it/xml/tutorial/xml_20.htm (1 di 2) [19/06/2001 14.19.37]

Page 161: Corso-Guida - HTML.it - Corso XML

if (img == "p112") { document.p112.width = x; document.p112.height = y }

- se le immagini "figlie" sono già aperte si possono scegliere due alternative: o chiuderle (cammino "aritroso") o lasciarle aperte, riservando la chiusura ad un tasto "reset" o al passaggio sull'immagineiniziale.Il nuovo stato viene registrato nella variabile XML e l'algoritmo procede.

Nell'esempio abbiamo scelto l'alternativa del cammino a ritroso. Si noti che l'algoritmo deve esserestudiato accuratamente: ad esempio all'apertura di un nuovo figlio il "nonno" viene "fissato", per evitareche comandi la chiusura dell'immagine intermedia, lasciando isolati i "nipoti".

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: esempio 4: panoramica del sito senza un solo "click"

http://www.html.it/xml/tutorial/xml_20.htm (2 di 2) [19/06/2001 14.19.37]

Page 162: Corso-Guida - HTML.it - Corso XML

 Esempio 5: morte al "file not found"

[File Link.htm, Target.htm, Search.js e DB.xml da salvare nella stessa cartella]

Il messaggio "File not found" che appare sul browser del nostro utente significa: "ilweb master ha spostato questa pagina, ma non ha aggiornato tutti i linkcorrispondenti!".Se il sito è veramente complesso il rapporto fra numero di link interni e numero dipagine può essere molto elevato: ciò significa "n" aggiornamenti per ogni paginaspostata! L'indirizzo fisico non è un buono strumento: in questo esempio mostriamocome gestire i link tramite codici, che accompagnano un pagina dalla nascita allamorte, ovunque essa sia. Alla base, un caso veramente esemplare di uso dellapotenza di XML.

1. Database XML delle pagine del sitoIl primo passo consiste nell'assegnare ad ogni pagina un codice. La coppiacodice-indirizzo fisico è registrata in un DB XML:

<links> <aaaa ind="H:/Home/index.htm"/> <aaab ... ... </links>

Per ogni pagina esiste una sola registrazione, quindi un solo dato da aggiornare incaso di spostamento.

2. Creazione dei link verso la paginaAl posto della classica chiamata

<a href="H:/Home/index.htm">

si inserisce il seguente comando

<a href="search('aaaa')">

3. Funzione di ricerca: la function search() apre il DB XML e recupera tramite ilcodice l'attuale indirizzo fisico. Si noti che:

● il DB XML viene trasferito al client per essere elaborato in sessione locale. Ciò nondovrebbe comunque provocare problemi: un elenco di ben cento indirizzi può arrivaread occupare al massimo 5-6 KB; al limite il DB può essere spezzato in più parti;

● è preferibile che il codice della funzione search() sia esterno alla pagina, poichécontiene l'indirizzo fisico del DB, che può così essere aggiornato centralmente;

● il file del DB e della funzione avranno ovviamente una richiesta pari alla somma ditutte le altre pagine.

XML: esempio 5: morte al "file not found"

http://www.html.it/xml/tutorial/xml_21.htm (1 di 2) [19/06/2001 14.19.41]

Page 163: Corso-Guida - HTML.it - Corso XML

Le avvertenze segnalano che l'utilizzo del DB XML può essere estremamentecomodo per le pagine oggetto di frequenti movimenti, ma va sostituito con il linkclassico appena la pagina acquisisce un indirizzo "stabile".

Per provare l'esempio aprite il file Link.htm e provate l'equivalenza dei due link. Oraspostate il file Target.htm ed aggiornate DB.xml con la nuova posizione: potretescoprire quale dei due link è basato su xml (quello ancora funzionante).

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: esempio 5: morte al "file not found"

http://www.html.it/xml/tutorial/xml_21.htm (2 di 2) [19/06/2001 14.19.41]

Page 164: Corso-Guida - HTML.it - Corso XML

 Introduzione: i vantaggi di programmare per il browser

Potreste chiedervi: che senso ha trasportare un eseguibile verso un linguaggio di scripting limitato edeseguito solo su browser? Perché utilizzare un ambiente di esecuzione dedicato al web (il browser,appunto) per una applicazione stand - alone? La risposta è una ed abbastanza elementare: per utilizzarele librerie grafiche per la resa dell'HTML.Un eseguibile realizzato con l'ausilio di varie screen (ad esempio in Visual Basic o Visual C++), anche secontiene pochissimo codice, raggiunge dimensioni notevoli (come minimo qualche centinaio di KB) acausa delle informazioni sull'aspetto grafico (le cosiddette librerie). Le stesse screen potrebbero esseregenerate con i pochi byte di un file HTML, grazie alle librerie contenute nel browser.Per convincervi di questo provate a costruire tramite un linguaggio "Visual" i menù a discesa della screenrappresentata qui sotto:

Ebbene, questa screen è stata generata con le pagine HTML riportate di seguito, per un totale dinemmeno 3,5 KB. Per provare salvate i quattro testi in altrettanti file con estensione .htm nella stessacartella; aprendo il file Main.htm apparirà una pagina con tre frame.

1. Main.htm

<html> <head> <title>Prova menu</title> </head> <frameset rows="150,*" border="0"> <frame name="Menu" scrolling="no" noresize src="Menu.htm"> <frameset cols="250,*"> <frame name="Sx" target="Dx" src="Sx.htm" scrolling="auto"> <frame name="Dx" src="Dx.htm"> </frameset> </frameset></html>

2. Menu.htm

XML: introduzione: i vantaggi di programmare per il browser

http://www.html.it/xml/tutorial/xml_22.htm (1 di 3) [19/06/2001 14.19.50]

Page 165: Corso-Guida - HTML.it - Corso XML

<html> <head> <base target="Menu"> </head> <body> <table border="1" width="100%" height="1"> <tr> <td width="100%" height="1"> <form> <table border="0" width="100%" bgcolor="#006b6b"> <tr><td width="96%" align="center"><b><font color="#FFFFFF" size="6">Nome del software</font></b></td><td width="2%" height="1" align="right"><input type="button" value=" ? "></td><td width="2%" height="1" align="right"><input type="button" value=" X "></td> </tr> </table> </form> <table border="1" width="100%" bgcolor="#C0C0C0"> <tr> <td width="9%" height="19"><b>File</b></td> <td width="9%" height="19"><b>Modifica</b></td> <td width="9%" height="19"><b>Help</b></td> <td width="93%" height="19"><b>Path</b></td> </tr> <tr> <td width="2%" bgcolor="#FFFFFF"> <form> <select> <option>Apri</option> <option>Salva....</option> <option>Chiudi</option> </select> </form> </td> <td width="9%" bgcolor="#FFFFFF"> <form> <select> <option>Copia</option> <option>Incolla</option> <option>Taglia</option> </select> </form> </td> <td width="9%" bgcolor="#FFFFFF"> <form> <select> <option>About...</option> <option>Manuale</option> </select> </form> </td> <td width="93%" bgcolor="#FFFFFF"> <form> <input type="text" size="50"> </form> </td> </tr> </table>

XML: introduzione: i vantaggi di programmare per il browser

http://www.html.it/xml/tutorial/xml_22.htm (2 di 3) [19/06/2001 14.19.50]

Page 166: Corso-Guida - HTML.it - Corso XML

</td> </tr> </table> </body></html>

3. Sx.htm

<html> <head> <base target="DX"> </head> <body> <table border="2" width="100%" height="100%" bgcolor="#808080"> <tr> <td width="100%" height="25" bgcolor="#006b6b"></td> </tr> <tr> <td width="100%" height="100%" bgcolor="#FFFFFF"></td> </tr> <tr> <td width="100%" height="25"bgcolor="#C0C0C0"></td> </tr> </table> </body></html>

4. Dx.htm

<html> <body><table border="2" width="100%" height="100%" bgcolor="#808080"> <tr> <td width="100%" height="25" bgcolor="#006b6b"> </td> </tr> <tr><td width="100%" height="100%" bgcolor="#FFFFFF"><b><p align="center"><font color="#006b6b" size="6">Welcome to my software ! This is the central screen</font> </p></b></td> </tr> <tr><td width="100%"height="25" bgcolor="#C0C0C0"></td> </tr> </table> </body></html>

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: introduzione: i vantaggi di programmare per il browser

http://www.html.it/xml/tutorial/xml_22.htm (3 di 3) [19/06/2001 14.19.50]

Page 167: Corso-Guida - HTML.it - Corso XML

 La struttura complessiva di un eseguibile ad oggetti per ilbrowser

Con le tecniche viste al capitolo 3 possiamo creare una libreria di oggetti web per unaprogrammazione object-oriented su browser. E' un progetto ambizioso, ma menocomplesso di quanto si pensi. Nell'immagine di seguito è rappresentato lo schemaqualitativo complessivo del nostro SW, in ottica object-oriented:

La dichiarazione rigorosa delle classi può essere simile alla seguente:

- webObjectcontrolWindow●

workWindow●

L'oggetto webObject è una qualsiasi pagina web, con le relative proprietà. I metodiriguardano lo scambio dati col filesystem (locale o collegato tramite la rete):

● per la lettura sono sufficienti i metodi standard javascript;

● per operazioni read/write più complesse si può ricorrere alla tecnica FSO, limitataai file di testo ma potenziata dall'uso di XML.

I figli del padre controlWindow si basano sulla tecnica degli input hidden, varianteparent. Per questo è bene distinguere fra la frame di controllo (controlWindow) e leframe di scorrimento (workWindow) (il fatto che entrambe sono contenute in unapagina HTML generale è un dettaglio tecnico, non logico).Entrambi i figli ereditano metodi e proprietà dal padre e vi aggiungono:

● controlWindow: deve possedere delle proprietà legato allo "stato" di esecuzione,registrate in campi hidden (ad esempio document.control.control,value);

● workWindow: possono possedere metodi diversi, ma la loro interfaccia diinput/output deve essere o verso il filesystem o formata dai campi hidden dedicatinell'oggetto controlWindow.

In questa struttura, che parte ha XML? XML è il formato obbligatorio per trasportaredati strutturati attraverso le interfacce di input/output, che supportano tutte solamentestringhe testuali. DOM è l'interfaccia fra le stringhe ed il codice, tramite laparserizzazione in input e la de-parserizzazione in output. All'interno del codice si puòscegliere se mantenere l'albero XML e continuare a lavorare con DOM oppurepassare i dati a variabili javascript tradizionali.

XML: la struttura complessiva di un eseguibile ad oggetti per il browser

http://www.html.it/xml/tutorial/xml_23.htm (1 di 2) [19/06/2001 14.19.59]

Page 168: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: la struttura complessiva di un eseguibile ad oggetti per il browser

http://www.html.it/xml/tutorial/xml_23.htm (2 di 2) [19/06/2001 14.19.59]

Page 169: Corso-Guida - HTML.it - Corso XML

 La chiamata di un oggetto

Ipotizziamo di avere costruito, come nell'esempio iniziale, la videata principale del SW con i menù. Nelmenù "file" abbiamo inserito la voce "Apri", che attiva l'omonima function Apri():

function Apri() {/* punto 1: videata pop-up che richiede il nome del file da aprire*//* punto 2: istanziazione di un nuovo oggetto "document"*/ new document(nomefile) }

L'oggetto "document" appartiene alla classe workWindow e la sua istanziazione genera le seguenti attività:

● tramite l'interfaccia in/out col filesystem viene caricato un file;

● tramite l'apposita interfaccia viene aggiornata la struttura di stato della controlWindow: viene segnalatoche un documento è stato aperto ed è attualmente in stato "attivo" nella frame x + "salvato".

Adesso ipotizziamo di scegliere, dal menù "modifica", una funzione per operare sul file aperto:

● viene istanziato un nuovo oggetto di tipo workWindow, destinato non alla visualizzazione maall'elaborazione;

● l'oggetto controlla sulla struttura di stato se ed in quale frame esiste un oggetto "document" attivo;

● ricevuta risposta affermativa, il nuovo oggetto lavora e poi cambia lo stato dell'oggetto "document" da"salvato" in "non salvato".

Anche se le funzionalità richieste al SW sono complesse, procedendo con questo metodo alla fineotterremo:

● una struttura ordinata, in cui la complessità è stata governata;

● un codice altamente riutilizzabile;

● un volume complessivo di pochi KB, che permette al nostro SW di essere facilmente distribuito in rete;

● un aspetto grafico pari alla nostra abilità di generare le videate HTML.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: la chiamata di un oggetto

http://www.html.it/xml/tutorial/xml_24.htm [19/06/2001 14.20.03]

Page 170: Corso-Guida - HTML.it - Corso XML

 Esempio 6: un SW in 15 KB

[Quattro file: Main.htm, Menu.htm, Dx.htm, Sx.htm, da salvare nella stessa cartella]

Per dimostrare la bellezza di un piccolo SW basato su pagine HTML abbiamo creatoun versione un po' più elaborata del "test per i visitatori" contenuto nell'esempio 1.

Nel nuovo esempio un menù a discesa permette di gestire completamente tutte leattività di chi vuole svolgere il test:

● menù "File"- comando "Nuovo": permette di ricominciare il test; - comando "Risultato":calcola il risultato del test, che è coerente anche se non avete ancora rispostoa tutte le domande;

● menù "Modifica"- comando "Domanda x": presenta la videata della domanda e vi permette diregistrare la risposta; alla registrazione viene riempito il flag corrispondentenella finestra di sinistra, per ricordarvi il percorso svolto; è possibile qualsiasisequenza delle domande.

Avete provato il funzionamento? Una bella differenza rispetto all'esempio 1! Ebbene,tutto ciò è racchiuso in soli 15 KB complessivi, grazie alle librerie grafiche delbrowser.Ora non vi resta che provare voi stessi!

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: esempio 6: un SW in 15 KB

http://www.html.it/xml/tutorial/xml_25.htm [19/06/2001 14.20.06]

Page 171: Corso-Guida - HTML.it - Corso XML

 BIBLIOGRAFIA

La bibliografia sull'XML è davvero sterminata, formata da un mix di opere di puradivulgazione della "filosofia XML" e manuali "ipertecnici" per i soli addetti ai lavori. Perquanto concerne in particolare il DOM, trattato in questo tutorial, consigliamo due veri"gioielli" in lingua italiana:

1. "Costruire siti Web con XML", di Michael Floyd, Tecniche Nuove (2000)Probabilmente l'unico riferimento pratico per il DOM esistente in commercio. Chiaro,ricco di esempi realmente utilizzabili, tratta anche di molto altro (XSL, XSLT, DTD,ASP ...), sia in ottica client che server.

2. "Usare XML", di Lee Anne Philips, Mondadori Informatica (2000)L'attuale "Bibbia" dell'XML disponibile in Italia: costoso e di difficile lettura, da usaresoprattutto per consultazione. Completa in ogni aspetto collegato all'XML.

Resta da osservare che entrambe le opere sono di autori americani: per ora labibliografia italiana sull'XML deve attingere ampiamente a fonti estere.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: BIBLIOGRAFIA

http://www.html.it/xml/tutorial/xml_26.htm [19/06/2001 14.20.09]

Page 172: Corso-Guida - HTML.it - Corso XML

 Caratteri speciali ed escape dell'XML 1.0

Il seguente elenco può essere prezioso, soprattutto perché sono indicati non solo icaratteri, ma anche il loro codice ASCII (in poche parole il numero da digitareassieme al tasto "alt"):

speciali:

à à (199)è è (199 + 249)è Ã(c) (189 + 184)ù ù (199 + 251)ò ò (199 + 253)ì à (199 + 170)

escape: identici a quelli dell'HTML

< &lt> &gt& &amp

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: caratteri speciali ed escape dell'XML 1.0

http://www.html.it/xml/tutorial/xml_27.htm [19/06/2001 14.20.12]

Page 173: Corso-Guida - HTML.it - Corso XML

 Specifica completa del modello DOM

DOM (Document Object Model) è una API (Application Program Interface) definita dalW3C in due versioni successive: Level 1 e Level 2. Lo scopo è quello di definire unmetodo univoco (soprattutto per gli script) per accedere a documenti in linguaggio dimark-up; il metodo consiste nel trasformare i tag innestati in altrettanti oggetti.Ecco lo schema completo a 4 livelli della gerarchia DOM (fissato già nel Level 1):

Tipo del nodoNode (Root) DocumentFragment 11 Document 9 Attr 2 Element 1 DocumentType 10 Notation 12 Entity 6 EntityReference 5 ProcessingInstruction 7 CharacterData Comment 8 Text 3 CDATA section 4

In realtà la gerarchia, coerentemente col fatto che DOM è una API, è composta diinterfacce, non di classi. Volendo si potrebbe dichiarare proprie classi, con attributi emetodi comprendenti anche quelli delle interfacce DOM.Esistono due modi di utilizzare la gerarchia: un primo approccio tende a nonspecificare ulteriormente il livello Node, trattando ogni parte del documento con lasola interfaccia di livello massimo (in fondo tutto è nodo, a parte i meta - oggettiausiliari NodeList e NodeNamedMap). L'approccio completo dichiara invece tutte leinterfacce specifiche.Nell'insieme delle interfacce vengono spesso distinte le interfacce fondamentali(utilizzabili anche per l'HTML: Document, Attr, Element, CharacterData) e quelleestese (tutte le altre, specifiche per XML).

Homepage W3C per lo standard DOM

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: specifica completa del modello DOM

http://www.html.it/xml/tutorial/xml_28.htm [19/06/2001 14.20.15]

Page 174: Corso-Guida - HTML.it - Corso XML

 Parserizzatori

1. MSXMLNella versione 5.0 di Internet Explorer è supportata una istanziazione diretta nello script deglioggetti ActiveX tramite la seguente sintassi (che utilizza codici mnemonici anziché numerici):

var file_XML = new ActiveXObject("Microsoft.XMLDOM"); Questa sintassi è equivalente (edalternativa in IE5) a quella delle versioni precedenti, che richiedeva due passaggi:● nel documento HTML

<OBJECT ClassID = "clsid: CFC399AF-D876-11D0-9C10-00C04FC99C8E" ID = "MSXML" Name="xmlDoc"> </OBJECT>

● nello script:

variabile = MSXML

L'ActiveX richiamato una volta era già presente in Windows, ma andava installato a mano, oggi ècompreso in MSXML.dll (assieme all'elaboratore XSL), che si installa automaticamente con IE5.Tramite MSXML.dll sono resi disponibili in Windows:

● API del DOM per scripting (Javascript e Vbscript) e programmazione (C++ e Java)

● invio e ricezione, in connessione HTTP, di file XML

● tipo MIME "text/xml", tipo file XML

Con il comando new viene richiamato l'API, il cui primo utilizzo è il metodo per l'esecuzione dellaparserizzazione del sorgente XML:

file_XML.async = false;file_XML.load (URL)

La proprietà async permette il download sincrono. Segue poi la dichiarazione della radicedell'albero:

var root = file_XML.documentElement;

Sia new (o meglio questo suo uso specifico per XML) che load sono comandi specifici Microsoft.D'altra parte DOM non definisce un metodo standard per creare un nuovo oggetto Document ecaricarne il contenuto. Microsoft aggiunge anche altre interfacce proprietarie che estendono ilDOM standard:

● XMLDOMParseError: interfaccia dell'oggetto ActiveX per segnalazione di errori nellaparserizzazione. Attributi:- validateOnParse: può essere dichiarata come booleano per attivare o meno la validazionedurante la parserizzazione. L'attivazione influisce sui risultati segnalati dagli attributi seguenti.

XML: parserizzatori

http://www.html.it/xml/tutorial/xml_29.htm (1 di 2) [19/06/2001 14.20.18]

Page 175: Corso-Guida - HTML.it - Corso XML

- parseError.errorCode: indice numerico del tipo di errore, 0 indica assenza di errore- parseError.reason: motivo dell'errore, classi standard inserite da Microsoft con testo esplicativo- parseError.line: linea di ubicazione dell'errore nel file XML- parseError.srcText: porzione di ubicazione dell'errore nel file XML

Homepage Microsoft Developer's Network

2. Altri parserizzatoriEsistono parecchi parserizzatori gratuiti, di solito scritti in Java o C++. Fra i creatori si possonoannoverare molti istituti di ricerca, IBM e Sun (in loro pacchetti di sviluppo scaricabili).

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

XML: parserizzatori

http://www.html.it/xml/tutorial/xml_29.htm (2 di 2) [19/06/2001 14.20.18]

Page 176: Corso-Guida - HTML.it - Corso XML

 Interfaccia FSO (FileSystenObject) per creare e  salvare file

Microsoft mette a disposizione il modello di oggetti FSO (FileSystemObject), che supporta lacreazione e la gestione di file di testo in ambiente Windows. FSO è un ActiveX contenutonella libreria dei tipi di scripting (Scrrun.dll), che quindi deve essere installata nel vostrosistema. Di solito questa dll viene installata assieme a MS ScriptEditor, contenuto anchenelle ultime versioni di Office.FSO ha esiti potenzialmente distruttivi su di un filesystem, di cui prende il controllo assoluto(è infatti utilizzato per creare virus html). Per questo motivo IE5 vi avverte sempre primadell'esecuzione di uno script che utilizza FSO e se il livello di protezione settato è elevato nonesegue per nulla. Comunque raccomandiamo di:

● segnalare chiaramente all'utilizzatore la presenza di questi comandi;

● limitarsi ad usare metodi di creazione anziché di modifica e modificare solamente file creatidal programma.

FSO è sicuramente meno potente di altre tecniche (CGI, ASP...), ma ha il vantaggio diessere eseguito su client, quindi potete utilizzarlo sul vostro PC senza aver installato unserver web.L'utilizzo di FSO parte con l'istanziazione dell'oggetto ActiveX corrispondente:

var fso = new ActiveXObject("Scripting.FileSystemObject")

Questo oggetto è unico: ogni altra istanziazione avrà esito negativo. Il motivo è chiaro: fso èora un operatore virtuale del vostro filesystem e un altro operatore potrebbe generarecontrasti. Le operazioni di FSO si dividono fra quelle riferite all'oggetto "operatore" (chechiameremo fso) e quelle riferite agli oggetti del filesystem (che chiameremo fsvar), chepossono essere assegnati a delle variabili del programma. L'oggetto fso individua la cartellacorrente, come se stessimo utilizzando "gestione risorse" di Windows. I percorsi usati comeparametri nei metodi possono essere assoluti o fare riferimento alla posizione attualedichiarata per fso.[Notazione: i parametri fra parentesi quadre sono facoltativi]

1. Operazioni con le cartelle:

● Attributi:- Name: di fsvar, restituisce il nome- Path: di fsvar, restituisce la posizione

● Metodi:- GetFolder(percorso e nome); di fso, permette di creare un fsvar- CreateFolder(percorso e nome[, sovrascrittura]): di fso, crea la cartella indicata,sovrascrittura può essere impostato su true o false (default)- Delete (percorso e nome[, forza]): di fsvar, cancella la cartella, se forza è impostatosu true cancella anche i contenuti di sola lettura (default = false)- DeleteFolder(percorso e nome[, forza]): di fso, cancella la cartella- Move (destinazione): di fsvar, sposta la cartella- MoveFolder (percorso e nome, destinazione): di fso, sposta una o più cartelle- Copy (destinazione[, sovrascrittura]): di fsvar, sposta la cartella- CopyFolder(percorso e nome, destinazione): di fso, copia una o più cartelle- FolderExists(percorso e nome): di fso, restituisce un booleano

2. Operazioni con i file:

XML: interfaccia FSO (FileSystenObject) per creare e salvare file

http://www.html.it/xml/tutorial/xml_30.htm (1 di 2) [19/06/2001 14.20.22]

Page 177: Corso-Guida - HTML.it - Corso XML

● Attributi:- Name- Path

● Metodi per la creazione e l'istanziazione:- CreateTextFile (percorso e nome[, sovrascrittura[, unicode]]): di fso, unicode indicacon true che il testo deve essere Unicode, con false (default) ASCII. La creazione diun file è ottenibile anche con i metodi OpenTextFile e OpenAstextStream conl'impostazione dei flag di modo I/O su sovrascrittura e formato su true.- GetFile: come per le cartelle- FileExists: come per le cartelle

● Metodi per la lettura e la scrittura: queste operazioni si basano su di un oggetto ausiliariodetto TextStream (in pratica un buffer di testo). Prima di qualsiasi operazione è necessarioeffettuare l'apertura del file. Il risultato del metodo di apertura, assegnato ad una variabilelocale, è un oggetto TextStream:

- OpenTextFile(percorso e nome[, modo I/O[, creazione[, formato]]]): di fso restituisceun oggetto TextStream;Modo I/O, valori: 1 (sola lettura, default), 2 (sovrascrittura), 8 (scrittura in coda)Creazione: se il file indicato non esiste con true viene creato (default: false)Formato, valori: -2 (apre utilizzando l'impostazione predefinita di sistema), -1 (apre informato Unicode), 0 (apre in formato ASCII, default)- OpenAstextStream([modo I/O[, formato]]): di fsvar, funziona come OpenTextFile- Read (caratteri): di TextStream, legge il numero di caratteri indicato- Readline(): di TextStream, legge una riga fino al carattere di nuova riga escluso- ReadAll(): di TextStream, legge tutto il file- Write([stringa]): di TextStream, scrive senza andare a capo- WriteLine ([stringa]): di TextStream, se non viene indicata la stinga vasemplicemente a capo- WriteBlankLines (n): di TextStream, inserisce n righe bianche- Close(): di TextStream, salva e chiude il file, svuota il buffer TextStream

[ S o m m a r i o ]

XML: interfaccia FSO (FileSystenObject) per creare e salvare file

http://www.html.it/xml/tutorial/xml_30.htm (2 di 2) [19/06/2001 14.20.22]

Page 178: Corso-Guida - HTML.it - Corso XML

Percorso rivolto a coloro che hanno una buona conoscenza degli strumenti standard del Webpublishing e che vogliano approfondire a livello professionale le proprie conoscenze. Per questopercorso è propedeutico aver seguito il percorso per apprendisti

Segui il corso Cold FusionCold Fusion estende i comandi (tag) dell'HTML standard, aggiungendone di nuovi che permettono l'interfacciamento con idatabase. Le applicazioni su server Cold Fusion si distinguono per performance, facilità d'uso e semplicità. Questa sezioneè consigliata a chiunque voglia utilizzare uno strumento potente con sforzo minimo.

Utilizza database con SQLChi ha necessità di utilizzare database sul proprio server non può prescindere dalla conoscenza di SQL, il linguaggio per lacreazione di database relazionali. Questa guida mostra come utilizzare questo linguaggio in modo chiaro e semplice.

Gestisci al meglio il tuo Webserver IIS o ApacheSe hai la possibilità di gestire il tuo Webserver questi tutorial mostrano come ottenere risultati pratici in poche semplicioperazioni. HTML.it mette a tua disposizione guide all'utlizzo di Webserver Apache e Information Server, per fornirel'informazione più completa ed equidistante sull'argomento.

Leggi le FAQ sul Web publishingLe FAQ raccolgono le domande più frequenti su argomenti legati all'HTML ed ai linguaggi ad esso collegati. HTML.itraccoglie le faq più numerose del Web italiano sugli argomenti legati al Web publishing. In questa sezione troveraisoluzione a gran parte dei tuoi dubbi.

Utilizza ogni giorno i servizi informativi di HTML.itHTML.it informa e approfondisce ogni giorno temi legati alla realizzazione siti. Puoi conoscere le ultime novità dal Webconsultando le nostre news, il libro e il servizio gratuito della settimana.

Partecipa alla comunità di HTML.itPuoi confrontare le tue esperienze o chiarire i tuoi dubbi con gli altri visitatori di HTML.it, grazie al forum di discussionegratuito e di libero accesso. Sono migliaia gli iscritti al forum ed a loro potrai chiedere spiegazioni, aiuti o semplicementescambiare idee e pareri. Puoi esprimere la tua opinione anche attraverso i sondaggi che settimanalmente HTML.it tipropone. Ancora, sottoporre il tuo sito al controllo di qualità di HTML.it.

Utilizza e modifica CGI scritti in PerlIl Perl è un linguaggio finalizzato principalmente alla trattazione di stringhe e file di testo. Perl è utilizzato pesantementenella scrittura di procedure CGI installate su un server web, o per lo sviluppo di procedure di manutenzione delle attività diun server. Questa guida è consigliata a coloro che utilizzano CGI per l'automazione di determinate procedure o voglionocrearne di propri.

Automatizza il tuo sito con PHP o ASPSe l'HTML standard ti sta stretto e necessiti di strumenti per automatizzare il tuo sito o interfacciarlo a database, ASPe PHP ti forniscono le basi per creare siti dinamici sia su IIS che Apache. Seguendo questi corsi imparerai a fardialogare server e client.

HTML.it - percorso per esperti

http://www.html.it/percorsi/esperti.htm [19/06/2001 14.22.27]

Page 179: Corso-Guida - HTML.it - Corso XML

di Lucio [email protected]

Chi ha necessità di utilizzare database sul proprio server non può prescindere dalla conoscenza diSQL, il linguaggio per la creazione di database relazionali. La guida, per l'argomento trattato, sirivolge ad un'utenza professionale.

Percorso consigliato: espertiLivello di difficoltà:

Test di preparazione in 10 domandeF.A.Q.: risposte a domande frequenti

1. Una semplice grammatica sintatticaLa grammatica sintattica utilizzata nelle varie lezioni per spiegare la sintassi dei comandi SQL.

2. Web, Database e DBMSLe caratteristiche e le funzionalita' principali secondo cui i DBMS vengono normalmente classificati.

3. Il modello relazionaleStoria e panoramica dei database relazionali.

4. Breve storia di SQLStoria e sviluppo di SQL dal 1974 ad oggi

5. Un database di esempioPresentatazione della struttura del database che verra' utilizzato per gli esempi delle successive lezioni.

6. Strumenti per interagire con un DBMSLe due modalità di interazione con DBMS: invocazione interattiva e invocazione tramite un programmaapplicativo

7. Creare il databaseLa creazione del database consiste nella creazione delle tabelle che lo compongono

8. Popolare il databaseCol termine "popolazione del database" si intende l'attivita' di inserimento dei dati al suo interno.

9. Interrogare il databaseLe istruzioni che occorrono per estrarre da un database relazionale i dati che interessano.

10. Aggiornare il databaseCome modificare i dati gia' inseriti nelle tabelle del database.

11. Modificare la struttura del databaseA volte non e' sufficiente modificare i dati, ma occorre aggiornare la struttura stessa del database per far si' chepossano essere rappresentate nuove informazioni

12. Utilizzo multiutente di un databaseNormalmente l'accesso ai dati avviene in maniera concorrente da parte di piu' utenti contemporaneamente

11. Riferimenti bibliografici e webSiti Web e volumi cartacei di approfondimento su SQL.

HTML.it - Corso SQL

http://www.html.it/sql/index.html [19/06/2001 14.22.40]

Page 180: Corso-Guida - HTML.it - Corso XML

 Una semplice grammatica sintattica

La grammatica sintattica utilizzata nelle varie lezioni per spiegare la sintassi deicomandi SQL e' molto semplice:

Il testo in maiuscolo deve comparire cosi' com'e'. Il linguaggio SQL non e'case-sensitive, quindi poi negli esempi compariranno sia lettere maiuscole cheminuscole in modo da aumentarne la leggibilita'.

Il testo in minuscolo indica elementi che devono essere ulteriormentespecificati. Ad esempio se compare vincoli_di_colonna non significa che inquella posizione bisogna scrivere esattamente quella sequenza di caratteri, mache vi troveranno posto i vincoli posti sulla colonna, specificati con la loroparticolare sintassi, che e' stata o verra' spiegata in altro luogo.

Le parentesi quadrate ([]) indicano elementi che sono opzionali e che quindinon devono necessariamente comparire.

I tre punti (...) indicano elementi che possono essere ripetuti. Ad esempio:

[ , [ vincolo_di_tabella ] ... ]

indica che l'elemento ", [vincolo_di_tabella]" puo' essere ripetuto quante voltee' necessario.

Elementi separati dal carattere "|" ed eventualmente raggruppati dalleparentesi graffe ({}) indicano elementi che sono in alternativa. Ad esempio:

{ elemento1 | elemento2 }

indica che in quella posizione andra' scritto o elemento1 o elemento2.

Il testo scritto fra apici singoli (') o doppi (") va scritto esattamente comeindicato (apici, maiuscole e minuscole comprese).

Gli altri caratteri (ad esempio, le virgole (,) o i doppi apici (")) devono comparirecosi' come sono.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Una semplice grammatica sintattica

http://www.html.it/sql/sql_01.htm [19/06/2001 14.22.52]

Page 181: Corso-Guida - HTML.it - Corso XML

 Web, Database e DBMS

Il World Wide Web e' forse una delle maggiori fonti di informazione a cui oggipossiamo attingere: avendo a disposizione un collegamento a Internet ed un browserWeb, un software ormai comune su qualsiasi computer, abbiamo la possibilita' diconsultare un patrimonio di centinaia di milioni di pagine riguardanti praticamenteogni argomento di interesse.

Spesso queste pagine non sono documenti statici, ma vengono creati dinamicamentequando noi li richiediamo e le informazioni che contengono vengono estratte da undatabase. Se il database e' un database relazionale (vedremo in seguito cosa questosignifica), probabilmente il linguaggio utilizzato per recuperare le informazioni che civengono mostrate e' SQL (Structured Query Language).

Prima di occuparci di cos'e' e come si usa SQL cerchiamo di capire cosa si intendecon la parola database, che spesso in italiano viene tradotta come "base di dati".Un database e' una collezione di dati che viene gestita e organizzata da un softwarespecifico, il DBMS (DataBase Management System, Sistema di Gestione diDataBase). Un DBMS e' sostanzialmente uno strato software che si frappone fral'utente ed i dati veri e propri. Grazie a questo strato intermedio l'utente e leapplicazioni non accedono ai dati cosi' come sono memorizzati effettivamente, cioe'alla loro rappresentazione fisica, ma ne vedono solamente una rappresentazionelogica. Cio' permette un elevato grado di indipendenza fra le applicazioni e lamemorizzazione fisica dei dati. L'amministratore del database, se ne sente lanecessita', puo' decidere di memorizzare i dati in maniera differente o anche dicambiare il DBMS senza che le applicazioni, e quindi gli utenti, ne risentano. La cosaimportante e' che non venga cambiata la rappresentazione logica di quei dati, che e'la sola cosa che i loro utilizzatori conoscono. Questa rappresentazione logica vienechiamata 'Schema del database' ed e' la forma di rappresentazione dei dati piu' abasso livello a cui un utente del database puo' accedere. Ad esempio, in Figura 1 e'rappresentata una situazione in cui l'amministratore del database ha deciso che permotivi di efficienza era necessario cambiare il disco su cui erano memorizzati alcunidati, partizionandoli inoltre su piu' dischi per permettere accessi paralleli asottoinsiemi di dati indipendenti. Dal punto di vista dell'utente non e' cambiatoassolutamente nulla e probabilmente egli non e' nemmeno a conoscenzadell'avvenuto cambiamento.

SQL: Web, Database e DBMS

http://www.html.it/sql/sql_02.htm (1 di 3) [19/06/2001 14.22.58]

Page 182: Corso-Guida - HTML.it - Corso XML

La caratteristica pricipale secondo cui i DBMS vengono normalmente classificati e'appunto la rappresentazione logica dei dati che essi mostrano ai loro utilizzatori. Nelcorso degli anni sono stati adottati numerosi modelli per i dati, a fronte dei qualiesistono quindi vari tipi di database. I tipi piu' comuni sono:

Database gerarchici: i dati vengono organizzati in insiemi legati fra loro da relazionidi "possesso", in cui un insieme di dati puo' possedere altri insiemi di dati, ma uninsieme puo' appartenere solo ad un altro insieme. La struttura risultante e' un alberodi insiemi di dati.

Database reticolari: il modello reticolare e' molto simile a quello gerarchico, ed infattinasce come estensione di quest'ultimo. Anche in questo modello insiemi di dati sonolegati da relazioni di possesso, ma ogni insieme di dati puo' appartenere a uno o piu'insiemi. La struttura risultante e' una rete di insiemi di dati.

Database relazionali: i database appartenenti a questa categoria si basano sulmodello relazionale la cui struttura principale e' la relazione, cioe' una tabellabidimensionale composta da righe e colonne. Ciascuna riga, che in terminologiarelazionale viene chiamata tupla, rappresenta un'entita' che noi vogliamomemorizzare nel database. Le caratteristiche di ciascuna entita' sono definite invecedalle colonne delle relazioni, che vengono chiamate attributi. Entita' concaratteristiche comuni, cioe' descritti dallo stesso insieme di attributi, faranno partedella stessa relazione.

Database ad oggetti (object-oriented): lo schema di un database ad oggetti e'rappresentato da un insieme di classi, che definiscono le caratteristiche ed ilcomportamento degli oggetti che popoleranno il database. La principale differenzacon i modelli esaminati finora e' la non passivita' dei dati. Infatti con un databasetradizionale (intendendo con questo termine qualunque database non ad oggetti) leoperazioni che devono essere effettuate sui dati vengono demandate alle applicazioniche li utilizzano. Con un database object-oriented, al contrario, gli oggetti memorizzatinel database contengono sia i dati che le operazioni possibili su tali dati. In un certosenso potremmo pensare agli oggetti come a dati a cui e' stata fatta una iniezione diintelligenza, che gli permette di sapere come comportarsi, senza doversi appoggiaread applicazioni esterne.

I primi due tipi di database, quelli gerarchici e reticolari, quasi appartengono ormaialla storia dell'informatica.La maggior parte dei database attualmente utilizzati appartiene alla categoria deidatabase relazionali. I motivi di questo successo (anche commerciale) vanno ricercatinella rigorosita' matematica e nella potenzialita' espressiva del modello relazionale sucui si basano, nella sua semplicita' di utilizzo e, ultima ma non meno importante, nelladisponibilita' di un linguaggio di interrogazione standard, l'SQL, che, almenopotenzialmente, permette di sviluppare applicazioni independenti dal particolareDBMS relazionale utilizzato.

SQL: Web, Database e DBMS

http://www.html.it/sql/sql_02.htm (2 di 3) [19/06/2001 14.22.58]

Page 183: Corso-Guida - HTML.it - Corso XML

I database ad oggetti sono la nuova frontiera nella ricerca sui database, infatti le lorocaratteristiche di estendibilita', derivanti dalla possibilita' di definire nuovi tipi di dati ecomportamenti, li rendono particolarmente appetibili per tutte quelle applicazioni cherichiedono dati complessi, come ad esempio immagini, suoni o coordinate. Purtroppola mancanza di un modello per gli oggetti universalmente accettato e la nondisponibilita' di un linguaggio di interrogazione standard fanno si' che ogni produttoreimplementi la propria visione specifica, di solito assolutamente incompatibile con tuttele altre. Di recente sono apparsi sul mercato alcuni database, definiti object-relational,che cercano di introdurre nel modello relazionale le caratteristiche di estendibilita'proprie dei database object-oriented.

Indipendentemente dal tipo di database, le funzionalita' principali che ci si deveaspettare da un DBMS sono quelle di:

consentire l'accesso ai dati attraverso uno schema concettuale, invece cheattraverso uno schema fisico;

permettere la condivisione e l'integrazione dei dati fra applicazioni differenti;●

controllare l'accesso concorrente ai dati;●

assicurare la sicurezza e l'integrita' dei dati.●

Grazie a queste caratteristiche le applicazioni che vengono sviluppate possonocontare su una sorgente dati sicura, affidabile e generalmente scalabile. Taliproprieta' sono auspicabili per applicazioni che usano la rete Internet comeinfrastruttura e che hanno quindi evidenti problemi di sicurezza e scalabilita'.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Web, Database e DBMS

http://www.html.it/sql/sql_02.htm (3 di 3) [19/06/2001 14.22.58]

Page 184: Corso-Guida - HTML.it - Corso XML

 Il modello relazionale

I database relazionali sono il tipo di database attualmente piu' diffuso. I motivi diquesto successo sono fondamentalmente due:

1. forniscono sistemi semplici ed efficienti per rappresentare e manipolare i dati2. si basano su un modello, quello relazionale, con solide basi teoriche

Il modello relazionale e' stato proposto originariamente da E.F. Codd in un ormaifamoso articolo del 1970. Grazie alla sua coerenza ed usabilita', il modello e'diventato negli anni '80 quello piu' utilizzato per la produzione di DBMS.La struttura fondamentale del modello relazionale e' appunto la "relazione", cioe' unatabella bidimensionale costituita da righe (tuple) e colonne (attributi). Le relazionirappresentano le entita' che si ritiene essere interessanti nel database. Ogni istanzadell'entita' trovera' posto in una tupla della relazione, mentre gli attributi dellarelazione rappresenteranno le proprieta' dell'entita'. Ad esempio, se nel database sidovranno rappresentare delle persone, si potra' definire una relazione chiamata"Persone", i cui attributi descrivono le caratteristiche delle persone (Figura 2).Ciascuna tupla della relazione "Persone" rappresentera' una particolare persona.

In realta', volendo essere rigorosi, una relazione e' solo la definizione della strutturadella tabella, cioe' il suo nome e l'elenco degli attributi che la compongono. Quandoessa viene popolata con delle tuple, si parla di "istanza di relazione". Percio' laprecedente Figura 2 rappresenta un'istanza della relazione persona. Unarappresentazione della definizione di tale relazione potrebbe essere la seguente:

Persone (nome, cognome, data_nascita, sesso, stato_civile)

Nel seguito si indicheranno entrambe (relazione ed istanza di relazione) con il termine"relazione", a meno che non sia chiaro dal contesto a quale accezione ci si riferisce.Le tuple in una relazione sono un insieme nel senso matematico del termine, cioe'una collezione non ordinata di elementi differenti. Per distinguere una tupla daun'altra si ricorre al concetto di "chiave primaria", cioe' ad un insieme di attributi chepermettono di identificare univocamente una tupla in una relazione. Naturalmente inuna relazione possono esserci piu' combinazioni di attributi che permettono diidentificare univocamente una tupla ("chiavi candidate"), ma fra queste ne verra'scelta una sola da utilizzare come chiave primaria. Gli attributi della chiave primarianon possono assumere il valore null (che significa un valore non determinato), inquanto non permetterebbero piu' di identificare una particolare tupla in una relazione.Questa proprieta' delle relazioni e delle loro chiavi primarie va sotto il nome diintegrita' delle entita' (entity integrity).Spesso per ottenere una chiave primaria "economica", cioe' composta da pochiattributi facilmente manipolabili, si introducono uno o piu' attributi fittizi, checonterranno dei codici identificativi univoci per ogni tupla della relazione.Ogni attributo di una relazione e' caratterizzato da un nome e da un dominio. Ildominio indica quali valori possono essere assunti da una colonna della relazione.Spesso un dominio viene definito attraverso la dichiarazione di un tipo per l'attributo(ad esempio dicendo che e' una stringa di dieci caratteri), ma e' anche possibiledefinire domini piu' complessi e precisi. Ad esempio per l'attributo "sesso" della nostrarelazione "Persone" possiamo definire un dominio per cui gli unici valori validi sono'M' e 'F'; oppure per l'attributo "data_nascita" potremmo definire un dominio per cuivengono considerate valide solo le date di nascita dopo il primo gennaio del 1960, se

SQL: Il modello relazionale

http://www.html.it/sql/sql_03.htm (1 di 3) [19/06/2001 14.23.03]

Page 185: Corso-Guida - HTML.it - Corso XML

nel nostro database non e' previsto che ci siano persone con data di nascitaantecedente a quella. Il DBMS si occupera' di controllare che negli attributi dellerelazioni vengano inseriti solo i valori permessi dai loro domini. Caratteristicafondamentale dei domini di un database relazionale e' che siano "atomici", cioe' che ivalori contenuti nelle colonne non possano essere separati in valori di domini piu'semplici. Piu' formalmente si dice che non e' possibile avere attributi multivalore(multivalued). Ad esempio, se una caratteristica delle persone nel nostro databasefosse anche quella di avere uno o piu' figli, non sarebbe possibile scrivere la relazionePersone nel seguente modo:

Persone (nome, cognome, data_nascita, sesso, stato_civile, figli)

Infatti l'attributo figli e' un attributo non-atomico, sia perche' una persona puo' averepiu' di un figlio, sia perche' ogni figlio avra' varie caratteristiche che lo descrivono. Perrappresentare queste entita' in un database relazionale bisogna definire due relazioni:

Persone(*numero_persona, nome, cognome, data_nascita, sesso, stato_civile)Figli(*numero_persona, *nome_cognome, eta, sesso)

Nelle precedenti relazioni gli asterischi (*) indicano gli attributi che compongono leloro chiavi primarie. Si noti l'introduzione nella relazione Persone dell'attributonumero_persona, attraverso il quale si assegna a ciascuna persona un identificativonumerico univoco che viene utilizzato come chiave primaria. Queste relazionicontengono solo attributi atomici. Se una persona ha piu' di un figlio, essi sarannorappresentati in tuple differenti della relazione Figli. Le varie caratteristiche dei figlisono rappresentate dagli attributi della relazione Figli. Il legame fra le due relazioni e'costituito dagli attributi numero_persona che compaiono in entrambe le relazioni eche permettono di assegnare ciascuna tupla della relazione figli ad una particolaretupla della relazione Persone. Piu' formalmente si dice che l'attributonumero_persona della relazione Figli e' una chiave esterna (foreign key) verso larelazione Persone. Una chiave esterna e' una combinazione di attributi di unarelazione che sono chiave primaria per un'altra relazione. Una caratteristicafondamentale dei valori presenti in una chiave esterna e' che, a meno che non sianonull, devono corrispondere a valori esistenti nella chiave primaria della relazione a cuisi riferiscono. Nel nostro esempio cio' significa che non puo' esistere nella relazioneFigli una tupla con un valore dell'attributo numero_persona, senza che anche nellarelazione Persone esista una tupla con lo stesso valore per la sua chiave primaria.Questa proprieta' va sotto il nome di integrita' referenziale (referential integrity)

Uno dei grandi vantaggi del modello relazionale e' che esso definisce anche unalgebra, chiamata appunto "algebra relazionale". Tutte le manipolazioni possibili sullerelazioni sono ottenibili grazie ala combinazione di cinque soli operatori: RESTRICT,PROJECT, TIMES, UNION e MINUS. Per comodita' sono stati anche definiti treoperatori addizionali che comunque possono essere ottenuti applicando i soli cinqueoperatori fondamentali: JOIN, INTERSECT e DIVIDE. Gli operatori relazionaliricevono come argomento una relazione o un insieme di relazioni e restituiscono unasingola relazione come risultato.Vediamo brevemente questi otto operatori:

RESTRICT: restituisce una relazione contenente un sottoinsieme delle tuple dellarelazione a cui viene applicato. Gli attributi rimangono gli stessi.

PROJECT: restituisce una relazione con un sottoinsieme degli attributi della relazionea cui viene applicato. Le tuple della relazione risultato vengono composte dalle tupledella relazione originale in modo che continuino ad essere un insieme in sensomatematico.

TIME: viene applicato a due relazioni ed effettua il prodotto cartesiano delle tuple.Ogni tupla della prima relazione viene concatenata con ogni tupla della seconda.

JOIN: vengono concatenate le tuple di due relazioni in base al valore di un insiemedei loro attibuti.

UNION: applicando questo operatore a due relazioni compatibili, se ne ottiene unacontenente le tuple di entrambe le relazioni. Due relazioni sono compatibili se hannolo stesso numero di attributi e gli attributi corrispondenti nelle due relazioni hanno lostesso dominio.

MINUS: applicato a due relazioni compatibili, ne restituisce una terza contenente letuple che si trovano solo nella prima relazione.

INTERSECT: applicato a due relazioni compatibili, restituisce una relazionecontenente le tuple che esistono in entrambe le relazioni.

SQL: Il modello relazionale

http://www.html.it/sql/sql_03.htm (2 di 3) [19/06/2001 14.23.03]

Page 186: Corso-Guida - HTML.it - Corso XML

DIVIDE: applicato a due relazioni che abbiano degli attributi comuni, ne restituisceuna terza contenente tutte le tuple della prima relazione che possono essere fattecorrispondere a tutti i valori della seconda relazione.

Nelle seguenti tabelle, a titolo di esempio, sono raffigurati i risultati dell'applicazione dialcuni operatori relazionali alle relazioni Persone e Figli. Come nomi per le relazionirisultato si sono utilizzate le espressioni che le producono.

Persone

numero_persona nome cognome data_nascita sesso stato_civile

2 Mario Rossi 29/03/1965 M Coniugato

1 Giuseppe Russo 15/11/1972 M Celibe

3 Alessandra Mondella 13/06/1970 F Nubile

Figli

numero_persona nome_cognome eta sesso

2 Maria Rossi 3 F

2 Gianni Rossi 5 M

RESTRICT (Persone)sesso='M'

numero_persona nome cognome data_nascita sesso stato_civile

2 Mario Rossi 29/03/1965 M Coniugato

1 Giuseppe Russo 15/11/1972 M Celibe

PROJECT sesso (Persone)sessoMF

RESTRICT (Persone)sesso='M'

n. nome cognome nascita sesso stato_civile nome eta' sesso

Mario Rossi cognome 29/03/1965 M Coniugato Maria Rossi 3 F

Mario Rossi cognome 29/03/1965 M Coniugato Gianni Rossi 5 M

I database relazionali compiono tutte le operazioni sulle tabelle utilizzando l'algebrarelazionale, anche se normalmente non permettono all'utente di utilizzarla. L'utenteinteragisce con il database attraverso un'interfaccia differente, il linguaggio SQL, unlinguaggio dichiarativo che permette di descrivere insiemi di dati. Le istruzioni SQLvengono scomposte dal DBMS in una serie di operazioni relazionali.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Il modello relazionale

http://www.html.it/sql/sql_03.htm (3 di 3) [19/06/2001 14.23.03]

Page 187: Corso-Guida - HTML.it - Corso XML

 Breve storia di SQL

La storia di SQL (che si pronuncia facendo lo spelling inglese delle lettere che locompongono, e quindi "ess-chiu-el" e non "siquel" come si sente spesso) inizia nel1974 con la definizione da parte di Donald Chamberlin e di altre persone chelavoravano presso i laboratori di ricerca dell'IBM di un linguaggio per la specificazionedelle caratteristiche dei database che adottavano il modello relazionale. Questolinguaggio si chiamava SEQUEL (Structured English Query Language) e venneimplementato in un prototipo chiamato SEQUEL-XRM fra il 1974 e il 1975. Lesperimentazioni con tale prototipo portarono fra il 1976 ed il 1977 ad una revisionedel linguaggio (SEQUEL/2), che in seguito cambio' nome per motivi legali, diventandoSQL. Il prototipo (System R) basato su questo linguaggio venne adottato ed utilizzatointernamente da IBM e da alcuni sui clienti scelti. Grazie al successo di questosistema, che non era ancora commercializzato, anche altre compagnie iniziarono asviluppare i loro prodotti relazionali basati su SQL. A partire dal 1981 IBM comincio' arilasciare i suoi prodotti relazionali e nel 1983 comincio' a vendere DB2. Nel corsodegli anni ottanta numerose compagnie (ad esempio Oracle e Sybase, solo percitarne alcuni) commercializzarono prodotti basati su SQL, che divenne lo standardindustriale di fatto per quanto riguarda i database relazionali.

Nel 1986 l'ANSI adotto' SQL (sostanzialmente adotto' il dialetto SQL di IBM) comestandard per i linguaggi relazionali e nel 1987 esso divento' anche standard ISO.Questa versione dello standard va sotto il nome di SQL/86. Negli anni successiviesso ha subito varie revisioni che hanno portato prima alla versione SQL/89 esuccessivamente alla attuale SQL/92.Il fatto di avere uno standard definito per un linguaggio per database relazionali, aprepotenzialmente la strada alla intercomunicabilita' fra tutti i prodotti che si basano su diesso. Dal punto di vista pratico purtroppo le cose andarono differentemente. Infatti ingenerale ogni produttore adotta ed implementa nel proprio database solo il cuore dellinguaggio SQL (il cosiddetto Entry level o al massimo l'Intermediate level),estendendolo in maniera proprietaria a seconda della propria visione del mondo deidatabase.

Attualmente e' in corso un processo di revisione del linguaggio da parte dei comitatiANSI e ISO, che dovrebbe portare alla definizione di cio' che al momento e' notocome SQL3. Le caratteristiche principali di questa nuova incarnazione di SQLdovrebbero essere la sua trasformazione in un linguaggio stand-alone (mentre oraviene usato come linguaggio ospitato in altri linguaggi) e l'introduzione di nuovi tipi didato piu' complessi per permettere, ad esempio, il trattamento di dati multimediali.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Breve storia di SQL

http://www.html.it/sql/sql_04.htm [19/06/2001 14.23.07]

Page 188: Corso-Guida - HTML.it - Corso XML

 Un database di esempio

Sara' ora presentata la struttura del database che verra' utilizzato per gli esempi dellesuccessive lezioni. Non verranno descritte le fasi di analisi e i modelli concettuali elogici che sono stati necessari per giungere a tale struttura, dal momento che cio'andrebbe al di fuori degli scopi di questo corso. La struttura del database e' quellarappresentata nel diagramma relazionale di Figura 3. Ogni rettangolo rappresentauna relazione. Il nome della relazione e' contenuto nella sezione piu' scura nella partealta del rettangolo. Il resto del rettangolo e' suddiviso in tre colonne, nelle quali sonodefinite le caratteristiche degli attributi che compongono la relazione. La colonnacentrale contiene i nomi degli attributi, quella di destra il loro tipo (sono stati utilizzati itipi dell'SQL/92) e quella di sinistra le loro proprieta'. Le proprieta' degli attributi sonoindicate con le sigle "PK" e "FK", le quali significano rispettivamente che icorrispondenti attributi fanno parte della chiave primaria della relazione (Primary Key)o di una chiave esterna (Foreign Key). Le frecce congiungono appunto le chiaviesterne con le chiavi primarie a cui si riferiscono. I nomi degli attributi in nerettoindicano che tali attributi non possono assumere il valore NULL, cioe' non possonoessere indeterminati.

Clicca sulla foto per ingrandirla

Lo scopo del database e' quello di contenere le informazioni bibliografiche di uninsieme di pubblicazioni in modo da poterle consultare facilmente ed utilizzare per lacostruzione di bibliografie anche estese. Esso e' stato modellato sulla falsa riga delsistema bibliografico del programma LaTeX, in modo da avere un ambiente benconsolidato a cui far riferimento e facilitare la realizzazione di programmi diconversione fra un sistema e l'altro.Il significato delle relazioni che compongono il database e' il seguente:

Publication: Una generica pubblicazione. Normalmente questa relazione vieneutilizzata solamente per assegnare un identificativo univoco a tutte le pubblicazionipresenti nel database, lasciando la specificazione delle altre caratteristiche inrelazioni specifiche per ogni tipo di pubblicazione. Inoltre viene usata perimplementare legami complessi fra le pubblicazioni e altre relazioni. Ad esempioquella fra una pubblicazione ed i suoi autori. Grazie alla struttura adottata si possonoavere pubblicazioni scritte da piu' autori ed autori che scrivono piu' tipi dipubblicazioni.

Author: Rappresenta l'autore di una pubblicazione. La chiave primaria e' compostadall'identificativo della pubblicazione e da quello della persona; cio' garantiscel'unicita' dell'associazione fra le due entita'.

Editor: Rappresenta il curatore di una pubblicazione. La struttura e' identica a quelladella tabella Author.

Person: Rappresenta una persona (ad esempio un autore) nel database.Attualmente le informazioni ritenute interessanti sono solo il cognome e il nome.

Publisher: La casa editrice di una pubblicazione.

Institution: L'istituzione (ad esempio un universita' o una software house)responsabile di una pubblicazione.

SQL: Un database di esempio

http://www.html.it/sql/sql_05.htm (1 di 2) [19/06/2001 14.23.11]

Page 189: Corso-Guida - HTML.it - Corso XML

Book: Un libro con una precisa casa editrice.

InBook: Una parte di un libro. La parte puo' essere caratterizzata da un titolo, dalnumero di capitolo o dal numero di pagina. Le informazioni riguardanti il libro ,e quindicomuni alle sue varie parti, vengono memorizzate nella relazione Book.

Proceedings: Gli atti di un congresso o di una conferenza.

InProceedings: Una parte degli atti di un congresso. Le informazioni riguardanti lapubblicazione che contiene la parte sono contenute nella relazione Proceedings.

Article: Un articolo pubblicato in un giornale o in una rivista.

Manual: Una pubblicazione di documentazione tecnica.

Techreport: Un rapporto tecnico pubblicato da una scuola o da un'altra

istituzione.

Thesis: Una tesi di laurea o di dottorato.

Misc: Una pubblicazione che non rientra in nessuna delle precedenti categorie.

Non spieghero' il significato degli attributi che compongono le varie relazioni, dalmomento che i loro nomi sono sufficientemente autoesplicativi. Un'unica annotazionesull'attributo "pub_month": esso e' stato definito di tipo CHAR(3), cioe' una stringadella lunghezza fissa di tre caratteri, e conterra' le abbreviazioni dei nomi dei mesi (leprime tre lettere dei nomi inglesi).

I legami fra le relazioni dovrebbero essere abbastanza semplici da capire. Comeesempio per tutti verra' spiegata quello che collega la relazione Book con la relazionePublisher. Tale legame serve per descrivere la casa editrice di un libro. Nellarelazione Book non sono presenti tutti i dati della casa editrice, ma solo unidentificativo numerico per essa. Il numero sara' la chiave primaria della relazionePublisher e come tale permettera' di identificare una ben precisa casa editrice. Nellarelazione Book l'attributo publisher e' una chiave esterna verso la relazione Publisher.Una situazione piu' complessa e' quella che coinvolge le relazioni Publication, Authore Person; infatti in Author sono presenti due chiavi esterne: una che identifica lapubblicazione a cui l'istanza di relazione si riferisce, e una che permette di risalire aidati della persona che svolge il ruolo di autore. Ci si potrebbe chiedere quale sial'utilita' della relazione Publication e perche' non si sia invece stabilito direttamente unlegame fra la relazione Author e le relazioni che rappresentano i particolari tipi dipubblicazione. La risposta e' che il modello relazionale non permette di farlo. Infattidal momento che un autore puo' scrivere piu' tipi di pubblicazioni l'attributopubblicationID avrebbe dovuto essere una chiave esterna verso tutte le relazioni dellepubblicazioni, ma questo non e' permesso dal momento che contraddice ladefinizione stessa di chiave esterna.

Nelle successive lezioni si implementera' il database di esempio utilizzando illinguaggio SQL standard. Lo specifico DBMS utilizzato sara' PostgresSQL, ma sara'possibile sostituirlo con qualunque DBMS che supporti l'Entry level dell'SQL/92.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Un database di esempio

http://www.html.it/sql/sql_05.htm (2 di 2) [19/06/2001 14.23.11]

Page 190: Corso-Guida - HTML.it - Corso XML

http://www.html.it/sql/figura3.gif

http://www.html.it/sql/figura3.gif [19/06/2001 14.23.22]

Page 191: Corso-Guida - HTML.it - Corso XML

 Interagire con un DBMS

Come si e' detto, l'interazione con un database relazionale avviene normalmenteutilizzando istruzioni SQL. L'invio delle istruzioni al DBMS puo' avvenire in due modi:

invocazione interattiva●

invocazione tramite un programma applicativo●

Nel primo caso viene utilizzato un programma il cui scopo e' quello di ricevere in inputle istruzioni SQL, trasmetterle al DBMS e visualizzare i risultati all'utente.Normalmente tutti i DBMS mettono a disposizione un programma, di solito di tipotestuale, con tali funzionalita'.Nel caso di PostgreSQL, il DBMS che utilizzero' per implementare il database diesempio, il programma si chiama "psql". La sintassi da utilizzare per invocarlo inmodalita' interattiva e' la seguente:

psql [ dbname [ user ] ]

"dbname" e' il nome del database a cui si vuole accedere, mentre "user" e' il nomedell'utente con cui si vuole accedere al database. Ad esempio, il comando:

psql mydb benfante

attiva il programma psql, accedendo al database mydb come utente benfante. Setutto e' andato bene, in particolare se il database esiste e l'utente ha i permessinecessari per accedervi, psql mostra un prompt simile al seguente:

mydb=>

A questo punto si possono digitare i comandi SQL (terminandoli con un ";" o con ilmeta-comando "\g" (go) per farli eseguire) e leggere sullo schermo i risultati cheproducono.

Normalmente i programmi come psql possono essere utilizzati anche in manieranon-interattiva. Ad esempio, invocando psql col seguente comando:

psql -f istruzioni.sql mydb benfante

il programma esegue le istruzioni SQL contenute nel file istruzioni.sql e terminaimmediatamente dopo. In questo modo e' possibile automatizzare operazioni chedevono essere ripetute di frequente o, comunque, che sono composte da lunghesequenze di comandi SQL, senza doverle digitare manualmente ogni volta.

Nel caso dell'invocazione delle istruzioni SQL tramite un programma applicativo, essesono eseguite nel corso dell'esecuzione di tale programma ed i risultati vengonoutilizzati dal programma per produrre il suo output. In questa situazione l'utente nonsottopone direttamente i comandi SQL e potrebbe anche non essere a conoscenzache il programma che sta utilizzando accede ad un database relazionale: l'unica cosache vede e' l'interfaccia che l'applicazione gli mette a disposizione. Abbiamosostanzialmente due sistemi per scrivere applicazioni di questo tipo:

utilizzare una libreria che gestisca la comunicazione con il DBMS, trasmetta leistruzioni SQL e ci permetta di manipolare i risultati prodotti. Librerie di questotipo sono ad esempio JDBC e ODBC. Spesso i produttori dei DBMS fornisconodelle librerie proprietarie, che sono specifiche per il loro prodotto. Ad esempio,nel caso di PostgreSQL la libreria per il linguaggio C si chiama "libpq". Spessosi cerca di non utilizzare librerie proprietarie perche' le applicazioni risultanomolto specifiche (funzionano solo con il database per cui la libreria e' statacostruita). Invece utilizzando librerie "standard" come JDBC o ODBC leapplicazioni funzioneranno con qualunque DBMS che esponga l'interfacciarichiesta dalla libreria (a meno di non utilizzare funzionalita' specifiche del

SQL: Strumenti per interagire con un DBMS

http://www.html.it/sql/sql_06.htm (1 di 2) [19/06/2001 14.23.33]

Page 192: Corso-Guida - HTML.it - Corso XML

DBMS).

utilizzare l'Embedded SQL (ESQL). In questo caso il codice SQL vieneinglobato nel codice di un linguaggio ospite e vengono utilizzati i normalimeccanismi del linguaggio per il passaggio dei parametri e l'utilizzo deirisultati. Normalmente il codice cosi' prodotto viene prima convertito da unpre-processore e in seguito compilato dal compilatore del linguaggio ospite. Unulteriore vantaggio nell'utilizzare l'ESQL risiede nel fatto che esiste unostandard ANSI che descrive come esso dovrebbe funzionare. In questo modoe' possibile che un programma scritto per un determinato DBMS possa esserericompilato e funzionare anche per un altro. PostgreSQL mette a disposizioneun pre-processore ESQL per il linguaggio C (ecpg).

Nelle successive lezioni utilizzeremo psql per inviare le istruzioni SQL cheimplementeranno, popoleranno e interrogheranno il database d'esempio. Nell'ultimalezione verra' invece presentata un'applet Java che utilizzera' la libreria JDBC perconsultare il database bibliografico.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Strumenti per interagire con un DBMS

http://www.html.it/sql/sql_06.htm (2 di 2) [19/06/2001 14.23.33]

Page 193: Corso-Guida - HTML.it - Corso XML

 Creare il database

Un database in un sistema relazionale e' composto da un'insieme di tabelle, checorrispondono alle relazioni del modello relazionale. Nella terminologia usata nell'SQLnon si fa accenno alle relazioni, cosi' come non viene usato il termine attributo, maviene usata la parola colonna, e non si parla di tupla, ma di riga. Nel seguito verrannousate indifferentemente le due terminologie, quindi tabella varra' per relazione,colonna per attributo, riga per tupla, e viceversa.In pratica la creazione del database consiste nella creazione delle tabelle che locompongono. In realta' prima di poter procedere alla creazione delle tabellenormalmente occorre creare in effetti il database, il che di solito significa definire unosp azio dei nomi separato per ogni insieme di tabelle. In questo modo per un DBMSe' possibile gestire piu' database indipendenti contemporaneamente, senza che cisiano dei conflitti con i nomi che vengono utilizzati in ciascuno di essi. Il sistemaprevisto dallo standard per creare degli spazi dei nomi separati consiste nell'utilizzodell'istruzione SQL "CREATE SCHEMA". Di solito tale sistema non viene utilizzato (oalmeno non con gli scopi ed il significato previsti dallo standard), ma ogni DBMSprevede una procedura proprietaria per creare un database. Normalmente vieneesteso il linguaggio SQL introducendo un'istruzione non prevista nello standard:"CREATE DATABASE".La sintassi utilizzata da PostgreSQL, ma anche dai piu' diffusi DBMS, e' la seguente:

CREATE DATABASE nome_database

Con PostgreSQL e' anche disponibile un comando invocabile dalla shell Unix (o dallashell del sistema utilizzato) che esegue la stessa operazione:

createdb nome_database

Per creare il nostro database bibliografico utilizzeremo quindi il comando:

createdb biblio

Una volta creato il database e' possibile creare le tabelle che lo compogono.L'istruzione SQL preposta a questo scopo e':

CREATE TABLE nome_tabella (nome_colonna tipo_colonna [ clausola_default ] [ vincoli_di_colonna ][ , nome_colonna tipo_colonna [ clausola_default ] [ vincoli_di_colonna ] ... ][ , [ vincolo_di tabella] ... ] )

nome_colonna: e' il nome della colonna che compone la tabella. Sarebbe meglionon esagerare con la lunghezza degli identificatori di colonna, dal momento che l'SQLEntry Level prevede nomi non piu' lunghi di 18 caratteri. Si consulti comunque ladocumentazione dello specifico database. I nomi devono iniziare con un caratterealfabetico.

tipo_colonna: e' l'indicazione del tipo di dato che la colonna potra' contenere. Iprincipali tipi previsti dallo standard SQL sono:

CHARACTER(n)Una stringa a lunghezza fissa di esattamente n caratteri. CHARACTER puo'essere abbreviato con CHAR

CHARACTER VARYING(n)Una stringa a lunghezza variabile di al massimo n caratteri. CHARACTERVARYING puo' essere abbreviato con VARCHAR o CHAR VARYING.

INTEGERUn numero intero con segno. Puo' essere abbreviato con INT. La precisione,

SQL: Creare il database

http://www.html.it/sql/sql_07.htm (1 di 4) [19/06/2001 14.23.37]

Page 194: Corso-Guida - HTML.it - Corso XML

cioe' la grandezza del numero intero che puo' essere memorizzato in unacolonna di questo tipo, dipende dall'implementazione del particolare DBMS.

SMALLINTUn numero intero con segno con precisione non superiore a INTEGER.

FLOAT(p)Un numero a virgola mobile, con precisione p. Il valore massimo di p dipendedall'implementazione del DBMS. E' possibile usare FLOAT senza indicazionedella precisione, utilizzando quindi la precisione di default, anch'essadipendente dall'implementazione. REAL e DOUBLE PRECISION sono deisinonimi per un FLOAT con una particolare precisione. Anche in questo casole precisioni dipendono dall'implementazione, con il vincolo che la precisionedel primo non sia superiore a quella del secondo.

DECIMAL(p,q)Un numero a virgola fissa di almeno p cifre e segno, con q cifre dopo lavirgola. DEC e' un'abbreviazione per DECIMAL. DECIMAL(p) e'un'abbreviazione per DECIMAL(p,0). Il valore massimo di p dipendedall'implementazione.

INTERVALUn periodo di tempo (anni, mesi, giorni, ore, minuti, secondi e frazioni disecondo).

DATE, TIME e TIMESTAMPUn preciso istante temporale. DATE permette di indicare l'anno, il mese e ilgiorno. Con TIME si possono specificare l'ora, i minuti e i secondi.TIMESTAMP e' la combinazione dei due precedenti. I secondi sono un numerocon la virgola, permettendo cosi' di specificare anche frazioni di secondo.

clausola_default: indica il valore di default che assumera' la colonna se non glieneviene assegnato uno esplicitamente nel momento della creazione della riga. Lasintassi da utilizzare e' la seguente:

DEFAULT { valore | NULL }

dove, valore e' un valore valido per il tipo con cui la colonna e' stata definita.

vincoli_di_colonna: sono vincoli di integrita' che vengono applicati al singoloattributo. Sono:

NOT NULL, che indica che la colonna non puo' assumere il valore NULL.●

PRIMARY KEY, che indica che la colonna e' la chiave primaria della tabella.●

una definizione di riferimento, con cui si indica che la colonna e' una chiaveesterna verso la tabella e i campi indicati nella definizione. La sintasi e' laseguente:

REFERENCES nome_tabella [ ( colonna1 [ , colonna2 ... ] ) ][ ON DELETE { CASCADE | SET DEFAULT | SET NULL } ][ ON UPDATE { CASCADE | SET DEFAULT | SET NULL } ]

Le clausole ON DELETE e ON UPDATE indicano quale azione deve esserecompiuta nel caso in cui una tupla nella tabella referenziata venga eliminata oaggiornata. Infatti in tali casi nella colonna referenziante (che e' quella che sista definendo) potrebbero esserci dei valori inconsistenti. Le azioni possonoessere:

CASCADE: eliminare la tupla contenente la colonna referenziante (nelcaso di ON DELETE) o aggiornare anche la colonna referenziante (nelcaso di ON UPDATE).

SET DEFAULT: assegnare alla colonna referenziante il suo valore didefault.

SET NULL: assegnare alla colonna referenziante il valore NULL.❍

un controllo di valore, con il quale si permette o meno l'assegnazione di unvalore alla colonna, in base al risultato di un espressione. La sintassi da usaree':

SQL: Creare il database

http://www.html.it/sql/sql_07.htm (2 di 4) [19/06/2001 14.23.37]

Page 195: Corso-Guida - HTML.it - Corso XML

CHECK (espressione_condizionale)

dove espressione_condizionale e' un'espressione che restituisce vero o falso.Ad esempio, se stiamo definendo la colonna COLONNA1, definendo ilseguente controllo:

CHECK ( COLONNA1 < 1000 )

in tale colonna potranno essere inseriti solo valori inferiori a 1000.

vincolo_di_tabella: sono vincoli di integrita' che possono riferirsi a piu' colonne dellatabella. Sono:

la definizione della chiave primaria:

PRIMARY KEY ( colonna1 [ , colonna2 ... ] ) Si noti che in questo caso, adifferenza della definizione della chiave primaria come vincolo di colonna, essapuo' essere formata da piu' di un attributo.

le definizioni delle chiavi esterne:

FOREIGN KEY ( colonna1 [ , colonna2 ... ] ) definizione_di_riferimento

La definizione_di_riferimento ha la stessa sintassi e significato di quella chepuo' comparire come vincolo di colonna.

un controllo di valore, con la stessa sintassi e significato di quello che puo'essere usato come vincolo di colonna.

Per chiarire meglio l'utilizzo dell'istruzione CREATE TABLE, esaminiamo alcunicomandi che implementano il database bibliografico di esempio.

CREATE TABLE Publication (ID INTEGER PRIMARY KEY,type CHAR(18) NOT NULL);

La precedente istruzione crea la tabella Publication, formata dalle due colonne ID ditipo INTEGER, e type di tipo CHAR(18). ID e' la chiave primaria della relazione.Sull'attributo type e' posto un vincolo di non nullita'.

CREATE TABLE Book (ID INTEGER PRIMARY KEY REFERENCES Publication(ID),title VARCHAR(160) NOT NULL,publisher INTEGER NOT NULL REFERENCES Publisher(ID),volume VARCHAR(16),series VARCHAR(160),edition VARCHAR(16),pub_month CHAR(3),pub_year INTEGER NOT NULL,note VARCHAR(255));

Crea la relazione Book, formata da nove attributi. La chiave primaria e' l'attributo ID,che e' anche una chiave esterna verso la relazione Publication. Sugli attributi title,publisher e pub_year sono posti dei vincoli di non nullita'. Inoltre l'attributo publisher e'una chiave esterna verso la tabella Publisher.

CREATE TABLE Author (publicationID INTEGER REFERENCES Publication(ID),personID INTEGER REFERENCES Person(ID),PRIMARY KEY (publicationID, personID));

Crea la relazione Author, composta da due attributi: publicationID e personID. Lachiave primaria in questo caso e' formata dalla combinazione dei due attributi, comeindicato dal vincolo di tabella PRIMARY KEY. PublicationID e' una chiave esternaverso la relazione Publication, mentre personID lo e' verso la relazione Person.

Il file create_biblio.sql contiene tutti i comandi necessari per creare la struttura del

SQL: Creare il database

http://www.html.it/sql/sql_07.htm (3 di 4) [19/06/2001 14.23.37]

Page 196: Corso-Guida - HTML.it - Corso XML

database bibliografico di esempio.

NOTA SU POSTGRESQLIn PotgreSQL, almeno fino alla versione 6.5.1, non sono ancora stati implementati ivincoli sulle chiavi esterne. Il parser comunque accetta le sintassi SQL che liriguardano, quindi i costrutti FOREIGN KEY e REFERENCES non producono unerrore, ma solo un warning.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Creare il database

http://www.html.it/sql/sql_07.htm (4 di 4) [19/06/2001 14.23.37]

Page 197: Corso-Guida - HTML.it - Corso XML

 Popolare il database

Col termine "popolazione del database" si intende l'attivita' di inserimento dei dati alsuo interno. In un database relazionale cio' corrisponde alla creazione delle righe checompongono le tabelle che costituiscono il database. Normalmente lamemorizzazione di una singola informazione corrisponde all'inserimento di una o piu'righe in una o piu' tabelle del database. Si prenda, ad esempio, la seguenteinformazione bibliografica:

M. Agosti, L. Benfante, M. Melucci. OFAHIR: "On-the-Fly" Automatic Authoring ofHypertexts for Information Retrieval. In S. Spaccapietra, F. Maryansky (Eds),Searching for Semantics: Data Mining, Reverse Engineering. Proc. of the 7th IFIP 2.6Working Conference on Database Semantics (DS-7), Leysin, Switzerland, October1997, 129-154.

Supponendo che nel database non sia gia' presente nessuna delle informazioni chela riguardano (come ad esempio qualcuno degli autori o gli atti del congresso a cui siriferisce), il suo inserimento nel nostro database d'esempio corrispondeall'inserimento delle seguenti righe:

● cinque righe nella tabella Person corrispondendi a ciascuno degli autori e deicuratori;

● una riga nella tabella Institution;

● due righe nella tabella Publication: una per gli atti del congresso e una per l'articolocontenuto in quegli atti;

● una riga nella tabella Proceedings;

● una riga nella tabella InProceedings;

● tre righe nella tabella Author, una per ciascun autore della pubblicazione.

● due righe nella tabella Editor, una per ciascun curatore della pubblicazione.

L'ordine delle precedenti operazioni non e' puramente casuale, infatti l'inserimentodelle righe deve essere fatto in modo da rispettare i vincoli imposti sulle tabelle. Adesempio, dato che non potra' esistere una chiave esterna senza che sia stata primainserita la riga a cui essa si riferisce, prima di poter inserire una riga nella tabellaInProceedings dovra' essere stata inserita la corrispondente riga nella tabellaProceedings. Nel caso in cui un vincolo venga violato, il DBMS impedira' l'operazionedi inserimento facendola fallire. Si veda la lezione precedente (Creare il database)per la descrizione dei vincoli che possono essere imposti su una tabella e sulle suecolonne.

L'istruzione SQL che effettua l'inserimento di una nuova riga in una tabella e'INSERT. La sintassi con cui essa viene usata piu' comunemente e':

INSERT INTO nome_tabella [ ( elenco_campi ) ]VALUES ( elenco_valori )

nome_tabella e' il nome della tabella in cui deve essere inserita la nuova riga.

elenco_campi e' l'elenco dei nomi dei campi a cui deve essere assegnato un valore,separati fra loro da una virgola. I campi non compresi nell'elenco assumeranno il lorovalore di default o NULL se non hanno un valore di default. E' un errore non inserirenell'elenco un campo che non abbia un valore di default e non possa assumere ilvalore NULL. Nel caso in cui l'elenco non venga specificato dovranno essere

SQL: Popolare il database

http://www.html.it/sql/sql_08.htm (1 di 2) [19/06/2001 14.23.42]

Page 198: Corso-Guida - HTML.it - Corso XML

specificati i valori di tutti i campi della tabella.

elenco_valori e' l'elenco dei valori che verranno assegnati ai campi della tabella,nell'ordine e numero specificati dall'elenco_campi o in quello della definizione dellatabella (se elenco_campi non viene specificato). I valori possono essereun'espressione scalare del tipo appropriato per il campo o le keyword DEFAULT oNULL, se il campo prevede un valore di default o ammette il valore NULL.

Il precedente esempio di inserimento viene quindi eseguito tramite le seguentiistruzioni SQL:

INSERT INTO Person VALUES ( 1, 'Agosti', 'Maristella' );INSERT INTO Person VALUES ( 2, 'Benfante', 'Lucio' );INSERT INTO Person VALUES ( 3, 'Melucci', 'Massimo' );INSERT INTO Person VALUES ( 4, 'Spaccapietra', 'S.' );INSERT INTO Person VALUES ( 5, 'Maryansky', 'F.' );

INSERT INTO Institution ( ID, name, city, country )VALUES ( 1, '7th IFIP 2.6 Working Conference on Database Semantics (DS-7)','Leysin', 'Switzerland' );

INSERT INTO Publication VALUES ( 1, 'Proceedings' );INSERT INTO Publication VALUES ( 2, 'InProceedings' );

INSERT INTO Proceedings ( ID, title, organization, pub_month, pub_year )VALUES ( 1, 'Searching for Semantics: Data Mining, Reverse Engineering',1, 'Oct', 1997 );

INSERT INTO InProceedings ( ID, proceedingsID, title, pages )VALUES ( 2, 1,'OFAHIR: "On-the-Fly" Automatic Authoring of Hypertexts for Information Retrieval','129-154' );

INSERT INTO Author VALUES ( 2, 1 );INSERT INTO Author VALUES ( 2, 2 );INSERT INTO Author VALUES ( 2, 3 );

INSERT INTO Editor VALUES ( 1, 4 );INSERT INTO Editor VALUES ( 1, 5 );

Un'altra forma abbastanza utilizzata dell'istruzione INSERT segue la seguentesintassi:

INSERT INTO nome_tabella [ ( elenco_campi ) ]istruzione_select

L'unica differenza con la precedente sintassi consiste nella sostituzione della clausolaVALUES con un istruzione SELECT.L'istruzione SELECT verra' esaminata in dettaglio nella successiva lezione(Interrogare il database). Per il momento ci basti sapere che SELECT permette diestrarre dalle tabelle del database dei dati che vengono organizzati in una nuovarelazione.La precedente istruzione INSERT permette quindi di inserire nella tabella e nei campispecificati dati provenienti da altre tabelle. Ovviamente, affinche' l'istruzione vengaeseguita con successo, i dati prodotti dall'istruzione SELECT dovranno esserecompatibili con i vincoli ed i domini dei campi della tabella in cui si sta effettuandol'inserimento.

Nel file popolate_biblio.sql sono presenti le istruzioni SQL che popolano il databasebibliografico con i dati che verranno utilizzati negli esempi delle successive lezioni.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Popolare il database

http://www.html.it/sql/sql_08.htm (2 di 2) [19/06/2001 14.23.42]

Page 199: Corso-Guida - HTML.it - Corso XML

 Interrogare il database

Nella precedente lezione si sono esaminati i costrutti che il linguaggio SQL mette adisposizione per inserire i dati in un database relazionale. Vedremo ora invece le istruzioniche occorrono per estrarre da esso i dati che interessano. L'istruzione SQL preposta a talescopo e' SELECT. Dal momento che l'interrogazione e' forse la funzionalita' piu' usata di undatabase, le opzioni che l'istruzione SELECT sono numerose e a volte piuttostocomplicate. Per questo motivo esse verranno descritte in maniera semplificata, utilizzandoinvece degli esempi per la presentazione delle caratteristiche piu' complesse, in particolarequelle che riguardano la specificazione delle espressioni condizionali.La sintassi con cui l'istruzione SELECT deve essere utilizzata e' la seguente:

SELECT [ ALL | DISTINCT ] lista_elementi_selezioneFROM lista_riferimenti_tabella[ WHERE espressione_condizionale ][ GROUP BY lista_colonne ][ HAVING espressione_condizionale ][ ORDER BY lista_colonne ]

L'istruzione SELECT produce una tabella ottenuta applicando il seguente procedimento(per lo meno dal punto di vista logico, ogni DBMS ottimizza l'esecuzione delleinterrogazioni secondo le proprie strategie):

produce una tabella ottenuta come prodotto cartesiano delle tabelle specificate nellaclausola FROM. Ogni elemento della lista_riferimenti_tabella segue la seguentesintassi:

riferimento_tabella [ [ AS ] alias_tabella ]

Il riferimento puo' essere il nome di una tabella o un' espressione (posta fraparentesi tonde) il cui risultato e' una tabella, quindi, ad esempio, anche un'altraSELECT. L'alias e' un nome che serve per indicare in breve un riferimento di tabella.Nel caso in cui il riferimento di tabella sia un espressione, e' obbligatorio specificareun alias.

dalla tabella precedente elimina tutte le righe che non soddisfano l'espressionecondizionale (cioe' le righe per cui l'espressione condizionale restituisce falso comerisultato) della clausola WHERE.

(se e' presente la clausola GROUP BY) le righe della tabella risultante dal passo 2vengono raggruppate secondo i valori presenti nelle colonne specificate nellaclausola GROUP BY. Righe con valori uguali vengono accorpate in un'unica riga. Lecolonne non comprese nella clausola devono contenere delle espressioni confunzioni di aggregazione (come ad esempio AVG, che calcola la media) che quindivengono calcolate producendo un singolo valore per ogni gruppo.

(se e' presente la clausola HAVING) dal risultato del punto 3 vengono eliminate lerighe che non soddisfano l'espressione condizionale della clausola HAVING.

Vengono calcolate le colonne presenti nella clausola SELECT (quelle nellalista_elementi_selezione). In particolare vengono calcolate le colonne con le funzionidi aggregazione derivanti dal raggruppamento avvenuto al punto 3. Ogni elementodella lista_elementi_selezione segue la seguente sintassi:

espressione_scalare [ [ AS ] alias_colonna ]

Un espressione scalare e' un'espressione che produce come risultato un valorescalare. I tipi di dato scalari del liguaggio SQL sono principalmente quelli descrittinella lezione 6 (Creare il database), esclusi INTERVAL, DATE, TIME eTIMESTAMP.

SQL: Interrogare il database

http://www.html.it/sql/sql_09.htm (1 di 4) [19/06/2001 14.23.49]

Page 200: Corso-Guida - HTML.it - Corso XML

Le espressioni scalari degli elementi della SELECT normalmente coinvolgono lecolonne della tabella risultante dal punto 4. Nel caso in cui siano presenti delleambiguita' a causa di colonne con nomi uguali in due o piu' tabelle comprese nellaclausola FOR, esse possono essere risolte prefissando il nome o l'alias dellacolonna con il nome o l'alias della tabella, separati da un punto. Ad esempio, T.Cindica la colonna C della tabella T. L'alias di colonna e' il nome che viene assegnatoalla colonna.L'intero elenco delle colonne di una tabella puo' essere specificato utilizzando ilcarattere '*'.

(se e' presente l'opzione DISTINCT) vengono eliminate le righe che risultanoduplicate. Nel caso non sia presente ne' ALL ne' DISTINCT, viene assunto ALL.

(se e' presente la clausola ORDER BY) le righe della tabella vengono ordinatesecondo i valori presenti nelle colonne specificate nella clausola. La sintassi dautilizzare e' la seguente:

ORDER BY nome_colonna [ ASC | DESC ] [ , nome_colonna [ ASC | DESC ] ... ]

L'ordinamento di default e' quello ascendente. Nel caso si desideri effettuare quellodecrescente bisogna specificare l'opzione DESC. Se non viene specificata la clausolaORDER BY, la tabella e' da considerarsi senza un particolare ordinamento, infatti per ladefinizione di relazione del modello relazionale, le righe della tabella formano un insiemenel senso matematico e per gli elementi di un insieme non e' definita nessuna proprieta' diordinamento. Nella pratica, invece, l'ordine che si ottiene non specificando la clausola diordinamento e' quasi sempre quello che rispecchia la loro memorizzazione fisica e quindi,di solito, quello secondo cui le righe sono state inserite nella tabella.

La sequenza di operazioni appena presentata deve essere considerata valida solo dalpunto di vista concettuale. Infatti non e' detto che esse vengano eseguite esattamente inquesto modo e in questo ordine, dal momento che ogni DBMS ottimizzera' le interrogazionisecondo le strategie piu' opportune.

Verranno ora esaminati alcuni esempi dell'istruzione SELECT. Si suppone che i datipresenti nel database di esempio siano solo quelli inseriti mediante il file[popolate_biblio.sql] presentato nella lezione 7 (Popolare il database). In caso contrario leinterrogazioni forniranno risultati differenti.

ESEMPIO 1

SELECT surname FROM PersonORDER BY surname

Estrae dalla tabella Person i cognomi e li ordina alfabeticamente. Nel nostro caso, ilrisultato e' il seguente:

surname--------------------------------AgostiBatiniBayerBenfanteCareyCochowskyDeWittKimKnuthLenzeriniMaryanskyMcCreightMcGillMelucciRichardsonSaltonSantucciShekitaSpaccapietrade Petra

Si noti l'errato ordinamento dell'ultima riga, dovuto al fatto che si e' usato il carattere ASCIIminuscolo.La precedente query restituirebbe righe duplicate nel caso in cui nella tabella fossero

SQL: Interrogare il database

http://www.html.it/sql/sql_09.htm (2 di 4) [19/06/2001 14.23.49]

Page 201: Corso-Guida - HTML.it - Corso XML

presenti persone con lo stesso cognome. Per evitare cio' occorre specificare l'opzioneDISTINCT:

SELECT DISTINCT surname FROM PersonORDER BY surname

ESEMPIO 2

SELECT * FROM PersonWHERE surname LIKE 'B%'

Produce una tabella avente tutte le colonne della tabella Person. Le righe vengono filtratein modo che siano presenti solo quelle che hanno il cognome che inizia con il carattere 'B'.L'operatore LIKE permette un confronto fra stringhe di caratteri utilizzando dei patterncostruiti con i caratteri '%' e '_'. Il primo sostituisce un numero imprecisato di caratteri(anche 0), mentre il secondo ne sotituisce uno solo.

ESEMPIO 3

SELECT PUB.*, PER.surname AS S, PER.given_namesFROM Publication PUB, Author AUT, Person PERWHERE PUB.ID = AUT.publicationIDAND AUT.personID = PER.IDAND PUB.type = 'Book'ORDER BY S

In questo caso la tabella risultante contiene tutte le colonne della tabella Publication(indicata con l'alias PUB definito nella clausola FROM) e le colonne surname egiven_names della tabella Person. La clausola FROM genera il prodotto cartesiano delletabelle Publication, Author e Person, di cui vengono selezionate solo le righe in cuil'identificativo della pubblicazione e quello dell'autore corrispondono. Inoltre ci si limita aconsiderare solo le pubblicazioni di tipo 'Book'. Per finire la tabella viene ordinata secondoil cognome dell'autore, indicato mediante l'alias S, definito nella clausola SELECT.

ESEMPIO 4

SELECT title, volume, pub_yearFROM BookWHERE ID IN( SELECT PUB.IDFROM Publication PUB, Author AUT, Person PERWHERE PUB.ID = AUT.publicationIDAND AUT.personID = PER.IDAND PUB.type = 'Book'AND PER.surname = 'Knuth' )

SQL: Interrogare il database

http://www.html.it/sql/sql_09.htm (3 di 4) [19/06/2001 14.23.49]

Page 202: Corso-Guida - HTML.it - Corso XML

In questo esempio si vede l'utilizzo di un espressione condizionale che contiene l'operatoreIN, il quale restitisce il valore vero se il valore dell'operando alla sua sinistra e' contenutonella tabella risultato dell'espressione alla sua destra. La query fra parentesi produce unatabella di un'unica colonna contentente gli identificativi delle pubblicazioni di tipo 'Book' dicui Knuth e' authore. La query piu' esterna quindi estrae dalla tabella Book le informazionidei libri con tali identificativi.

ESEMPIO 5

SELECT COUNT(*) FROM Publication

count-----12

Conta il numero di righe presenti nella tabella Publication.

ESEMPIO 6

SELECT type, COUNT(ID) FROM PublicationGROUP BY type

Conta il numero di pubblicazioni presenti nel database suddividendole per tipo.Le funzioni di aggregazione previste dallo standard SQL sono COUNT, SUM, AVG, MAX eMIN, i quali calcolano rispettivamente la numerosita', la somma, la media aritmetica, ilmassimo e il minimo dei valori scalari presenti nella colonna a cui vengono applicate.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Interrogare il database

http://www.html.it/sql/sql_09.htm (4 di 4) [19/06/2001 14.23.49]

Page 203: Corso-Guida - HTML.it - Corso XML

 Aggiornare il database

Normalmente le informazioni presenti in un database non sono statiche, ma evolvononel tempo. C'e' quindi la necessita' non solo di aggiungere nuovi dati, ma dimodificare quelli che sono gia' inseriti nelle tabelle del database. Le istruzioni SQLche vengono utilizzate a questo scopo sono UPDATE e DELETE. La prima modifica ivalori presenti in una o piu' colonne di una o piu' righe di una tabella. La secondaelimina una o piu' righe di una tabella.La sintassi di UPDATE e' la seguente:

UPDATE nome_tabellaSET elenco_assegnamenti[ WHERE espressione_condizionale ]

Gli assegnamenti vengono specificati nella forma:

nome_colonna = espressione_scalare

L'istruzione UPDATE aggiorna le colonne della tabella che sono state specificatenella clausola SET, utilizzando i valori che vengono calcolati dalle corrispondentiespressioni scalari. Se viene espressa anche la clausola WHERE, vengonoaggiornale solo le righe che soddisfano l'espressione condizionale. Si noti chel'espressione scalare utilizzata per aggiornare una colonna puo' anche essere ilrisultato di una query scalare, cioe' una query che restituisce una sola riga e una solacolonna.

Vediamo un esempio:

UPDATE PersonSET given_names = 'Stefano'WHERE surname = 'Spaccapietra'

La precedente istruzione cambia il valore della colonna given_name della tabellaPerson nelle righe (nel nostro caso e' una sola) in cui la colonna surname ha valore'Spaccapietra'.

La sintessi di DELETE e':

DELETE FROM nome_tabella[ WHERE espressione_condizionale ]

L'istruzione delete elimina da una tabella tutte le righe che soddisfano l'espressionecondizionale della clausola WHERE. Se WHERE non viene specificata, vengonocancellate tutte le righe della tabella.

Se nella definizione della tabella si sono specificate le clausole ON UPDATE o ONDELETE, nel momento in cui vengono eseguite queste operazioni viene eseguitaanche l' azioni che era stata prevista sulle colonne referenziate (CASCADE, SETDEFAULT o SET NULL).

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Aggiornare il database

http://www.html.it/sql/sql_10.htm [19/06/2001 14.23.52]

Page 204: Corso-Guida - HTML.it - Corso XML

 Modificare la struttura del database

Nel corso della precedente lezione si e' visto come modificare i dati gia' presenti neldatabase. A volte pero' non e' sufficiente modificare i dati, ma occorre aggiornare lastruttura stessa del database per far si' che possano essere rappresentate nuoveinformazioni. Dal momento che la struttura del detabase e' data sostanzialmentedall'insieme delle tabelle che lo compongono, il suo aggiornamento corrispondeall'eliminazione di tabelle o alla modifica delle loro caratteristiche.Per eliminare una tabella da un database il comando SQL da utilizzare e' DROPTABLE:

DROP TABLE nome_tabella { RESTRICT | CASCADE }

nome_tabella e' il nome della tabella che deve essere eliminata.Se si specifica la clausola CASCADE vengono automaticamente eliminati i vincoli diintegrita' e le viste (view) in cui la tabella e' coinvolta. Viceversa, se si specifica laclausola RESTRICT ed esistono dei vincoli di integrita' o delle viste che si riferisconoalla tabella, l'operazione fallisce.Ad esempio, si siano definite le seguenti due tabelle:

CREATE TABLE Prova1 (Id INTEGER PRIMARY KEY,Nome VARCHAR(50))

CREATE TABLE Prova2 (Id INTEGER PRIMARY KEY,Nome VARCHAR(50),toProva1 INTEGER REFERENCES Prova1(Id))

Volendo eliminare la tabella Prova1, l'istruzione:

DROP TABLE Prova1 RESTRICT

fallira' dal momento che esiste un vincolo di integrita' che lega una chiave esternadella tabella Prova2 con la tabella Prova1.Invece l'istruzione:

DROP TABLE Prova1 CASCADE

verra' eseguita con successo e produrra' anche l'eliminazione del vincolo di integrita'referenziale presente sulla tabella Prova2.

Nel caso in cui si voglia modificare una tabella esistente nel database, l'istruzione dautilizzare e' ALTER TABLE. Dal momento che la sintassi di questa istruzione e'piuttosto complessa, essa verra' spiegata scomponendola in base alle funzionalita'che si vogliono ottenere:

Aggiunta di una nuova colonna nella tabella

ALTER TABLE nome_tabella ADD [ COLUMN ] definizione_colonna

nome_tabella e' il nome della tabella che si vuole modificare.La definizione della colonna segue la stessa sintassi vista nella lezione "Creare ildatabase" nella spiegazione dell'istruzione CREATE TABLE. Dovranno quindi esserespecificati il nome della colonna, il suo tipo ed eventualmente il suo valore di default ei vincoli imposti sulla colonna.La parola chiave COLUMN puo' essere omessa (qui e in tutti i casi successivi).

Eliminazione di una colonna dalla tabella

ALTER TABLE nome_tabellaDROP [ COLUMN ] nome_colonna { RESTRICT | CASCADE }

SQL: Modificare la struttura del database

http://www.html.it/sql/sql_11.htm (1 di 2) [19/06/2001 14.23.56]

Page 205: Corso-Guida - HTML.it - Corso XML

nome_colonna e' il nome della colonna che si vuole eliminare. Le clausoleRESSTRIC e CASCADE si comportano esattamente come nell'istruzione DROPTABLE vista precedentemente.L'istruzione fallira', oltre che nei casi gia' visti per RESTRICT, se si tenta di eliminareuna colonna che e' l'unica colonna di una tabella.

Modifica del valore di default di una colonna

ALTER TABLE nome_tabellaALTER [ COLUMN ] nome_colonna { SET clausola_default | DROP DEFAULT }

La sintassi ed il significato della clausola che definisce il nuovo valore di default sonoidentici a quelli della clausola_default che si usa nel comando CREATE TABLE.

Eliminazione di un vincolo della tabella

ALTER TABLE nome_tabellaDROP CONSTRAINT nome_vincolo { RESTRICT | CASCADE }

Elimina il vincolo identificato dal nome specificato. L'operazione fallisce se e' stataspecificata la clausola RESTRICT ed esistono altri vincoli che dipendono da quelloche si intende eliminare. Specificando la clausola CASCADE l'operazione verra'sempre completata con successo, cancellando inoltre i vincoli dipendenti da quelloeliminato.Spesso si vuole eliminare un vincolo a cui non e' stato assegnato un nomeesplicitamente, facendo precedere la definizione del vincolo dalla clausola opzionale[CONSTRAINT nome_vincolo]. In tal caso, dal momento che il DBMS avra'comunque assegnato un nome al vincolo per poterlo identificare, occorrera'interrogare le tabelle di sistema del DBMS ed ottenere da esse il suo nome. Laparticolare interrogazione richiesta dipende dallo specifico DBMS utilizzato.

Aggiunta di un vincolo alla tabella

ALTER TABLE nome_colonnaADD vincolo_di_tabella

La sintassi da utilizzare per la definizione del vincolo e' la stessa utilizzata nelcomando CREATE TABLE per i vincoli di tabella.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

SQL: Modificare la struttura del database

http://www.html.it/sql/sql_11.htm (2 di 2) [19/06/2001 14.23.56]

Page 206: Corso-Guida - HTML.it - Corso XML

 Utilizzo multiutente di un database

Fino ad ora abbiamo esaminato le caratteristiche del linguaggio SQL che riguardanola definizione e la manipolazione dei dati presenti in un database, senza preoccuparcidel fatto che normalmente l'accesso a tali dati avviene in maniera concorrente daparte di piu' utenti contemporaneamente.I meccanismi a sostegno di tale metodo di accesso riguardano principalmente lasicurezza dei dati, la gestione delle transazioni e la possibilita' di definire delle vistesulle tabelle del database.

1. Sicurezza

L'esecuzione di un operazione sui dati del database da parte di un utente e'subordinata al possesso da parte dell'utente dei necessari privilegi per la particolareoperazione eseguita sullo specifico insieme di dati.In generale i privilegi vengono attribuiti nella seguente maniera:

● Un utente che crea una tabella o qualunque altro oggetto del database ne e' ilproprietario e gli vengono automaticamente garantiti tutti i privilegi applicabili a taleoggetto, con la possibilita' di impostare anche ad altri utenti tali privilegi (privilegio diconcessione).

● Un utente che abbia un privilegio ed abbia in oltre su di esso il privilegio diconcessione puo' assegnare tale privilegio ad un altro utente e passare ad essoanche il privilegio di concessione.

● I privilegi sono concessi da chi ne abbia il permesso (cioe' dal proprietariodell'oggetto e da chi abbia il privilegio di concessione) mediante il comando GRANT erevocati mediante il comando REVOKE.

La sintassi del comando GRANT e' la seguente:

GRANT elenco_privilegi ON oggetto TO elenco_utenti [ WITH GRANT OPTION ]

Esso assegna all'utente i privilegi presenti nell'elenco_privilegi sull'oggettospecificato.I privilegi assegnabili sono i seguenti (con le relative sintassi):

USAGEPrivilegio per usare uno specifico dominio o altro oggetto del database.

SELECTPrivilegio per accedere a tutte le colonne di una tabella o di una vista.

INSERT [ (nome_colonna) ]Se viene specificata l'opzione nome_colonna, e' il privilegio per inserire valori nellacolonna indicata di una tabella o di una vista. Senza il nome_colonna e' il privilegioper inserire valori in tutte le colonne, comprese quelle che saranno aggiunte inseguito.

UPDATE [ (nome_colonna) ]Se viene specificata l'opzione nome_colonna, e' il privilegio per aggiornare il valorenella colonna indicata di una tabella o di una vista. In caso contrario permette diaggiornare il valore di tutte le colonne, comprese quelle che saranno aggiunte inseguito.

DELETEPrivilegio per eliminare righe da una tabella o da una vista.

REFERENCES [ (nome_colonna) ]Se viene specificata l'opzione nome_colonna, e' il privilegio di riferirsi alla colonna

SQL: Utilizzo multiutente di un database

http://www.html.it/sql/sql_12.htm (1 di 4) [19/06/2001 14.24.01]

Page 207: Corso-Guida - HTML.it - Corso XML

indicata di una tabella o di una vista nella definizione di un vincolo di integrita'. Senzal'opzione concede tale privilegio per tutte le colonne, comprese quelle aggiunte inseguito.

L'oggetto a cui il privilegio si riferisce e' generalmente una tabella o una vista. Lasintassi per la sua specificazione e' in tal caso:

[TABLE] nome_tabella

Nel caso di altri oggetti segue la sintassi:

tipo_oggetto nome_oggetto

dove tipo_oggetto puo' essere DOMAIN, CHARACTER SET, COLLATION oTRANSLATION (si veda C.J. Date - "A Guide to The SQL Standard" per unaspiegazione di tali oggetti).Nel caso di oggetti diversi da tabelle o viste, l'unico privilegio applicabile e' quello diUSAGE.

L'elenco_utenti e' un elenco di identificativi di utenti o gruppi di utenti. Puo' ancheessere utilizzata la parola chiave PUBLIC, che indica tutti gli utenti e i gruppiconosciuti nel sistema.

Se e' presente l'opzione [ WITH GRANT OPTION ], viene assegnato inoltre ilprivilegio di concessione, che permette agli utenti di trasferire ulteriormente i privilegiloro assegnati.

Ad esempio:

GRANT SELECT, INSERT, UPDATE(nome) ON persona TO benfante WITH GRANTOPTION

assegna all'utente benfante i privilegi di SELECT e INSERT su tutte le colonne dellatabella persona e quello di UPDATE sulla sola colonna nome di tale tabella. Gli vieneinoltre garantito il privilegio di assegnare tali permessi ad altri utenti.

Per togliere i privilegi agli utenti si usa invece REVOKE:

REVOKE [ GRANT OPTION FOR ] elenco_privilegi ON oggetto FROM elenco_utenti{ RESTRIC | CASCADE }

elenco_privilegi, oggetto ed elenco_utenti hanno le stesso significato dellecorrispondenti opzioni di GRANT. L'opzione GRANT OPTION FOR revoca il privilegiodi concessione. Se viene specificata la clausola RESTRICT, il comando REVOKEpuo' fallire nel caso in cui l'utente a cui vengono revocati i privilegi li abbiaulteriormente concessi ad altri utenti. Se e' presente invece la clausola CASCADE,l'istruzione verra' sempre completata con successo e verranno revocati i privilegianche di quegli utenti e di tutti gli utenti a cui essi li hanno concessi (...e cosi' via,finche' non ci saranno piu' permessi "abbandonati", cioe' concessi senza che chi li haconcessi ne sia ancora in possesso). Verranno inoltre distrutti gli oggetti del databasecostruiti grazie a tali permessi.

2. Gestione delle transazioni

Le transazioni SQL sono insiemi di istruzioni che devono essere trattati come delleunita' atomiche, cioe' non scomponibili nelle singole istruzioni da cui sono formate.Grazie a tale atomicita' le transazioni permettono di eseguire operazioni complessesul database mantenendone l'integrita'. Infatti una transazione viene eseguita consuccesso se e solo se tutte le operazioni che la compongono terminano consuccesso. In caso contrario, cioe' se una delle operazioni fallisce o se la transazioneviene esplicitamente annullata, tutte le operazioni precedenti vengono annullateanch'esse. Le operazioni di una transazione non hanno alcun effetto sul databasefino a quando la transazione non viene completata con successo.Dal momento che ad un database possono accedere piu' utenti contemporanamente,in ogni istante potremmo avere piu' transazioni che manipolano il database inmaniera concorrente. Lo standard SQL prevede che normalmente le transazionidebbano essere eseguite nel "livello di isolamento serializzabile" (isolation levelSERIALIZABLE), cioe' in una modalita' di esecuzione che garantisca la"serializzabilita'" delle transazioni. Il fatto che le transazioni siano serializzabilisignifica che il loro effetto complessivo sul database e' quello che si otterrebbe seesse venissero eseguite in maniera non concorrente l'una di seguito all'altra.Nel linguaggio SQL standard non esiste un'istruzione che faccia iniziareesplicitamente una transazione. Le istruzioni vengono divise in due classi: quelle che

SQL: Utilizzo multiutente di un database

http://www.html.it/sql/sql_12.htm (2 di 4) [19/06/2001 14.24.01]

Page 208: Corso-Guida - HTML.it - Corso XML

possono iniziare una transazione e quelle che non la fanno iniziare. Nel momento incui si cerca di eseguire un'istruzione della prima classe, se non e' gia' in corso unatransazione, ne viene cominciata una. La transazione continua fino a quando unadelle istruzioni fallisce, causando l'annullamento dell'intera transazione, o se vengonoeseguite le istruzioni COMMIT WORK o ROLLBACK WORK. L'istruzione COMMITWORK termina la transazione confermandola, rendendo quindi definitivi gli effettidelle sue istruzioni sul database. L'istruzione ROLLBACK WORK invece la terminaannullandola.Spesso i DBMS che si trovano in commercio implementano la gestione delletransazioni in maniera differente da quanto previsto dallo standard (almeno nelle loroimpostazioni di default). In tal caso, di solito e' previsto un comando che iniziaesplicitamente una transazione (BEGIN TRANSACTION, START WORK, o altro). Seuna transazione non e' stata iniziata esplicitamente, le singole istruzioni necompongono una ciascuna.Per capire meglio quali potrebbero essere le conseguenze della manipolazioneconcorrente dei dati di un database senza l'utilizzo delle transazioni, vediamoneun'esempio. Supponiamo di avere un database con il quale gestiamo gli ordini deiprodotti che vendiamo. In particolare, quando un cliente ci sottopone una richiesta perun prodotto, ne verifichiamo la disponibilita' e nel caso in cui possiamo soddisfarel'ordine, sottraiamo alla quantita' in giacenza la quantita' che ci e' stata richiesta.Traducendo tutto cio' in SQL, otteniamo la quantita' in giacenza con l'istruzione(istruzione A):

SELECT giacenza FROM prodottiWHERE prodottoID=1453

L'aggiornamento della giacenza, una volta verificata la disponibilita', e' ottenuta dallaseguente istruzione (istruzione B):

UPDATE prodottiSET giacenza=giacenza-1WHERE prodottoID=1453

Se due utenti cercano di eseguire questa operazione, senza che le due istruzioni chela compongono siano state raggruppate in una transazione, potrebbe accadere che leistruzioni vengano eseguite nell'ordine e con i risultati seguenti :

Istruzione A eseguita dall'utente 1: viene restituita una giacenza del prodottopari a 1, quindi l'ordine verra' approvato.

Istruzione A eseguita dall'utente 2: come prima la giacenza e' 1 e anche inquesto caso l'ordine verra' approvato.

Istruzione B eseguita dall'utente 1: a questo punto nel database la giacenzaper il prodotto vale 0.

Istruzione B eseguita dall'utente 2: ora la giacenza vale -1, che e' ovviamenteun valore errato.

Come si vede il risultato finale e' che uno dei due clienti non potra' ricevere (almenonon subito) la merce, dato che non ne avevamo in giacenza una quantita' sufficienteper entrambi i clienti. Se le due istruzioni fossero state inserite in una transazione, ilproblema non sarebbe sorto, dato che la transazione del secondo utente non avrebbepotuto leggere il valore della giacenza fino a quando non fosse stata completata latransazione del primo utente. A quel punto, la giacenza avrebbe avuto valore 0 el'ordine non sarebbe stato erratamente approvato.

3. Viste

Fino ad ora le uniche tabelle con cui abbiamo avuto a che fare sono state quelledefinite con il comando CREATE TABLE. Il linguaggio SQL mette anche adisposizione la possibilita' di definire delle tabelle "virtuali", le viste, calcolate a partireda altre tabelle. Esse sono virtuali nel senso che non occupano spazio su disco, masono il risultato di interrogazioni su altre tabelle e quindi sempre allineate con i valoricontenuti in tali tabelle.L'istruzione SQL per definire una vista e' la seguente:

CREATE VIEW nome_vista [ ( elenco_nomi_colonne ) ]AS espressione_tabella

Essa crea una vista chiamata nome_vista definita dall'espressione_tabella.Tipicamente espressione_tabella e' un'instruzione select che produrra' la tabella cheinteressa. l'elenco_nomi_colonne puo' essere usata per assegnare dei nomi allecolonne della vista. Cio' e' utile nel caso in cui le colonne derivanti dall'espressionetabella siano il risultato di un calcolo (ad esempio COUNT(nome_colonna)) e non

SQL: Utilizzo multiutente di un database

http://www.html.it/sql/sql_12.htm (3 di 4) [19/06/2001 14.24.01]

Page 209: Corso-Guida - HTML.it - Corso XML

abbiano quindi un nome esplicito. Una volta creata, una vista puo' essere utilizzatacome una normale tabella. Le uniche limitazioni riguardano le operazioni chemodificano i dati in essa contenuti. Infatti, non tutte le viste sono aggiornabili. Leregole che discriminano fra una vista aggiornabile e una non aggiornabile sonopiuttosto complesse e non e' questa la sede per descriverle (si vedano i libri inbibliografia, in particolare quello di C.J. Date). Qui ci limiteremo a cercare di capire,mediante un esempio, perche' questo accade.Proviamo ad utilizzare la seguente vista sul nostro database bibliografico:

CREATE VIEW book_publisher89AS SELECT B.title, P.nameFROM Book B, Publisher PWHERE B.publisher = P.IDAND B.pub_year=1989

Essa ci permette di eseguire la query che la definisce semplicemente utilizzandol'istruzione:

SELECT * FROM book_publisher89

Possiamo anche impostare ulteriori condizioni (o fare in modo che il risultato siaordinato secondo una particolare colonna della vista, ecc...):

SELECT title FROM book_publisher89WHERE name = "ACM Press"

Quest'ultima interrogazione ci fornisce l'elenco dei titoli dei libri pubblicati dall'ACMPress nel 1989.

Come si vede per quanto riguarda operazioni di interrogazione una vista si comprtacome una normale tabella. Le differenze sorgono quando si cerca di applicare ad unavista delle operazioni di aggiornamento. Ad esempio, se cerchiamo di eseguire laseguente istruzione:

INSERT INTO book_publisher89VALUES( "Nuovo libro", "publisher")

Il DBMS non riuscira' ad eseguirla, restituendo un errore tipo "No INSERTpermission". Il motivo e' che non e' in grado di creare le righe corrispondendi al nostronuovo record nelle due tabelle "reali" da cui la vista e' originata (i problemi sono vari:deve creare solo una righa nella tabella Book e collegarla ad una particolare riganella tabella Publisher, o creare una riga in entrambe le tabelle; come decidere qualivalori assegnare alle chiavi primarie degli eventuali nuovi record; quali valoriassegnare agli altri campi delle due tabelle; ecc...)

Grazie alle viste (e all'assegnazione oculata dei permessi agli utenti) e' possibile farein modo che utenti diversi abbiano una percezione della struttura del database anchemolto diversa da quella che ha realmente e impedire che particolari categorie di utentipossano accedere ad informazioni che non competono loro.Ad esempio, supponiamo di avere una tabella in cui sono memorizzati i datianagrafici dei dipendenti di una ditta e l'ammontare del loro stipendio mensile.Ovviamente si vorrebbe impedire la consultazione dei dati relativi agli stipendi a tuttigli utenti, eccetto a quelli che si devono occupare dell'erogazione/amministrazionedegli stessi. Un sistema per fare cio' e' quello di definire una vista contenente solo lecolonne dei dati anagrafici. In questo modo tutti gli utenti autorizzati ad accedere aidati anagrafici, ma non a quelli degli stipendi, lo potranno fare solo attraverso talevista. Ulteriori partizionamenti potrebbero essere fatti in senso orizzontale, creandoad esempio un vista che contiene solo le informazioni sui dirigenti ed una checontiene i dati degli altri dipendenti. Inoltre, le viste spesso contribuiscono a facilitarequella indipendenza fra applicazioni e struttura dei dati, che rende i database deglistrumenti tanto utili. Infatti se ad un certo punto fosse necessario cambiare la strutturadel database (scomponendo, ad esempio, una tabella in due tabelle per motivi diefficienza), non sarebbe necessario modificare tutte le applicazioni adattandole allanuova struttura, ma sarebbe sufficiente creare delle opportune view, in modo che dalpunto di vista delle applicazioni niente sia stato cambiato.

[ S o m m a r i o ]

SQL: Utilizzo multiutente di un database

http://www.html.it/sql/sql_12.htm (4 di 4) [19/06/2001 14.24.01]

Page 210: Corso-Guida - HTML.it - Corso XML

 Riferimenti bibliografici e web

International Organization for Standardization (ISO) - "Database LanguageSQL", Document ISO/IEC 9075:1992

American National Standards Institute - "Database Language EmbeddedSQL", Document ANSI X3.168-1989

R. Elmasri and S.B. Navathe - "Fundamentals of Database Systems", SecondEdition, The Benjamin/Cummings publishing company, 1994

F.D. Rolland - "The essence of databases", Prentice Hall, 1998

E.F. Codd - "A Relational Model of Data for Large Shared Data Banks",Communications of the ACM 13, No. 6, June 1970

C.J. Date with Hugh Darwen - "A Guide To The SQL Standard", Fourth Edition,Addison-Wesley, 1997

Jan L. Harrington - "SQL Clearly Exmplained", AP Professional, 1998

Helmut Kopka and Patrick W. Daly - "A Guide to LaTeX 2e", Second Edition,Addison-Wesley, 1995

Jason Hunter with William Crawford - "Java Servlet Programming", O'Reilly,1998

ftp://gatekeeper.dec.com/pub/standards/sqlRaccolta di Working Draft del linguaggio SQL3 in formato ps e txt

http://www.jcc.com/SQLPages/jccs_sql.htmlLa pagina riguardante lo standard SQL della JCC Consulting, Inc.

http://www.postgresql.orgIl sito dedicato a PostgreSQL. Vi si puo' inoltre trovare una versione elettronicadel libro di Bruce Momjian - "PostgreSQL: Introduction and Concepts"

[ S o m m a r i o ]

SQL: Riferimenti bibliografici e web

http://www.html.it/sql/bibliografia.htm [19/06/2001 14.24.42]

Page 211: Corso-Guida - HTML.it - Corso XML

di Edoardo [email protected]

Il Perl è un linguaggio finalizzato principalmente alla trattazione di stringhe e file di testo,soprattutto in procedure CGI. Questa guida, scritta da Edoardo Valsesia, è consigliata a coloro cheutilizzano CGI per l'automazione di determinate procedure o vogliono crearne di propri.

Percorso consigliato: espertiLivello di difficoltà:

Test di preparazione in 10 domandeF.A.Q.: risposte a domande frequenti

1. Introduzione al PerlScopo di questo documento e finalita' del presente corso

2. Cos'è il Perl e come lo si può utilizzareUtilizzo del Perl e vantaggi per i Webmaster

3. Invocazione del PerlMetodi per lanciare uno script in Perl

4. Variabili e struttura dei datiNegli script in perl, i dati temporanei sono tenuti in variabili; queste si comportano a grandi linee come le variabilid'ambiente, ma non sono la stessa cosa.

5. Variabili specialiIl perl mette a disposizione un insieme piuttosto ricco di variabili speciali, ossia variabili gestite direttamentedall'interprete che contengono parametri assai utili.

6. Alcune funzioniTutte le funzioni in ordine alfabetico del Perl

7. SubroutinesE' possibile definire le nostre funzioni in perl, e poi richiamarle come si richiamano le normali funzioni del perl.

8. OperatoriPanoramica sugli operatori presenti nel Perl

9. BlocchiEsempi e liste di blocchi.

10. Test sui fileIntroduzione al concetto di "verifica" sui file

11. Espressioni regolariLe espressioni regolari sono una sorta di linguaggio interno al perl, ma non solo ...

12. Variabili localiIn ogni momento si possono dichiarare le variabili locali, così una sub può lavorare su queste variabili senzainterferire su altre usate da altre sub.

13. StileE' importante scrivere il codice in maniera che questo mostri la sua struttura ...

14. Qualche utile consiglio ..

HTML.it - Guida al Perl

http://www.html.it/perl/index.html (1 di 2) [19/06/2001 14.25.13]

Page 212: Corso-Guida - HTML.it - Corso XML

Consigli sulla scrittura di uno script in Perl

15. Dove trovare informazioniWebsite, newsgroup e libri cartacei sul Perl.

16. Utilizzare i moduliUn modulo è un insieme di operazioni che possono essere utilizzate all'interno di qualsiasi script in Perl.

Tutorial 01. l'accoppiata Perl - databaseUtilizzare congiuntamente le conoscenze di Perl e dei database per i progetti personali o per doveri lavorativi:interagire con i database, pratica peraltro molto utilizzata sul web a vari livelli, dal commercio elettronico ai motoridi ricerca.

HTML.it - Guida al Perl

http://www.html.it/perl/index.html (2 di 2) [19/06/2001 14.25.13]

Page 213: Corso-Guida - HTML.it - Corso XML

 Introduzione al Perl

Lo scopo di questo documento è di spiegare le basi della programmazione in perl.Cercheremo di farlo per linee generali e di focalizzarci sulle "idee" invece che suidettagli, comparandoli quando possibile ai linguaggi C e di shell scripting. Fine ultimodi questo documento è di rendervi capaci di leggere, capire, modificare gli script inperl, e, alla fine, di scrivere i vostri.

Non si assume che voi siate dei programmatori, ma non vi sarà certamente spiegatocos'è un file o una pipe; una minima conoscenza del mondo Unix è necessaria perpotervi programmare. Infatti il linguaggio Perl si sposa perfettamente con il sistemaUNIX; anche se oggi ne sono stati effettuati dei porting su numerose altre piattaforme(Windows 9x/NT, OS/2, MS-DOS, ecc ...) l'ambiente più naturale per sviluppare edeseguire script in Perl rimane UNIX, dove è possibile integrare e far interagire gliscript con i numerosi strumenti presenti nel sistema (sed, awk, grep, mail ecc. ) edottenere il meglio dal linguaggio.In questo documento c'è molto materiale, anche abbastanza condensato; una buonaidea può essere quella di leggerlo dall'inizio alla fine senza memorizzare, all'inizio,nulla se non le basi, giusto per farsi un'idea generale; il secondo passo è quello dileggere più attentamente, cercando di capire precisamente come funziona il perl. Nondimenticatevi, durante la lettura, di provare gli esempi forniti a corredo del testo pertestarne il funzionamento ed, evantualmente, provare a modificarli per scoprire leinnumerevoli possibilità offerte da questo linguaggio.

Ovviamente, questo tutorial non è completo, è solo una selezione dei principalicomandi; il perl ha molti più comandi di quelli qui spiegati, e molti hanno molte piùopzioni o possibilità di quelle che presenteremo. Probabilmente ci saranno anchedelle disattenzioni sulla semantica del linguaggio, perdonatecele! In ogni caso,riferitevi sempre alla documentazione.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Introduzione al Perl

http://www.html.it/perl/perl_01.htm [19/06/2001 14.25.16]

Page 214: Corso-Guida - HTML.it - Corso XML

 Cos'è il Perl ...

Prima di tutto, un po' di filosofia. Il perl è spesso chiamato "linguaggio di scripting", adifferenza dei linguaggi di programmazione, perchè fu originariamente pensato nonper grandi lavori, ma per l'automatizzazione di determinati tasks. Con gli anni, il perl èdiventato sempre più potente ed è stato utilizzato per progetti sempre più grandi,anche se non è nato per questo.

Il Perl ("Processing Estraction Report Language" per chi lo apprezza, "PathologicallyElectric Rubbish Lister" per chi lo ama, suggerisce l'autore!) è un linguaggiofinalizzato principalmente alla trattazione di stringhe e file di testo. Ciò che in Perl èestremamente naturale fare è effettuare ricerche di sequenze di caratteri all'interno distringhe (pattern matching), sostituzioni di sottostringhe (pattern substitution),operazioni su file di testo strutturati in campi e record oppure non strutturati. Perquesti motivi il Perl è utilizzato pesantemente nella scrittura di procedure CGIinstallate su un server web, o per lo sviluppo di procedure di manutenzione delleattività di un server. Per gli stessi motivi il Perl non è invece indicato per sviluppareprocedure di puro calcolo scientifico o comunque programmi che richiedano unaelevata velocità e precisione nell'effettuare calcoli o elaborazioni numerichecomplesse.Certamente, quindi, il Perl diventa quasi una necessità per chi debba gestire un sitoweb che non sia solamente testo ed immagini: con questo linguaggio, infatti, èpossibile automatizzare alcune utili operazioni, dalle più semplici (richiesta di unindirizzo e-mail) alle più complesse (come registrazione di dati di utenti ecc.). A quantinon è mai capitato di imbattersi in un sito nel quale veniva richiesto di inserire ilnostro indirizzo e-mail per l'iscrizione ad una mailing-list, oppure di vedere in alcunepagine qualcosa tipo "Visitatore numero nnnnnnn", o ancora di riempire moduli diadesione o registrazione? Credo nessuno!Ebbene, sotto a tutto questo ci sono linee e linee di Perl (nella maggior parte deicasi!) che elaborano ciò che l'utente ha digitato e restituendolo al webmaster informato intellegibile o meglio (soprattutto per registrazioni e adesioni, in cui ci sonoparecchi campi da riempire: nome, cognome e via dicendo) formattato in diversicampi ( a mò di database) oppure, nel migliore dei casi, facendo tutto da solo:prendiamo ad esempio un utente che voglia avere uno spazio web gratuito e chedebba registrarsi: si troverà davanti a parecchie domande alle quali rispondere, edalla fine dovrà premere il bottone "invia" e passare le grane al webmaster, che dovràsuccessivamente confermare l'adesione. Chi abbia fatto ciò almeno una volta, si saràsicuramente reso conto che la conferma di avvenuta adesione arriva prestissimo (siparla di qualche minuto al massimo!!): ebbene, qui non è il webmaster che lavora allavelocità della luce, ma un complesso script che riceve le informazioni e le sceltedell'utente, assegnandogli un username ed una password, approntando una directorysul server pronta a ricevere i file dell'utente che tra l'altro sarà protetta contro altriutenti che volessero modificarla ecc.; infine, si preoccupa di mandare una mail (che disolito è un modello nel quale vengono inseriti i dati dell'utente) all'utente per avvertirloche l'operazione è stata svolta con successo! E non dimentichiamoci che lo stessoscript controla che le scelte dell'utente siano sensate: ad esempio, controllando chel'indirizzo e-mail sia valido (nel senso che sia nella forma utente@dominio e nonutente_dominio, ad esempio).

Insomma, il Perl è sicuramente una miniera d'oro per il webmaster che abbiadeterminate esigenze, ed impararne le basi è utile per poter iniziare a scrivere i propriscript di automatizzazione (ma non solo, si possono scrivere anche veri e propriprogrammi) e successivamente implementarli sul proprio server, locale o non che sia.

L'interprete perl non compila mai il codice in codice-macchina, come fanno icompilatori C: ogni volta che si esegue uno script in perl, questo viene interpretato "alvolo".

Ci sono 2 versioni di perl: il perl4 ed il suo successore, il perl5. Questo è in linea dimassima compatibile con il perl4, ed ha inoltre features addizionali. In questodocumento si farà riferimento soprattutto al perl5, visto che ormai dovrebbe essere larelease più utilizzata.

PERL: Cos'è il Perl e come lo si può utilizzare

http://www.html.it/perl/perl_02.htm (1 di 2) [19/06/2001 14.25.19]

Page 215: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Cos'è il Perl e come lo si può utilizzare

http://www.html.it/perl/perl_02.htm (2 di 2) [19/06/2001 14.25.19]

Page 216: Corso-Guida - HTML.it - Corso XML

 Invocazione del Perl

Dal momento che ogni script deve essere interpretato dal programma 'perl', e datoche gli script non sono altro che semplici file di testo, devono iniziare con i caratteri #!seguiti con il percorso completo del binario perl sul sistema, tipicamente:

#!/usr/bin/perl

oppure #!/usr/local/bin/perl

(per localizzare dove risiede, nel vostro sistema, l'interprete perl, scrivete 'which perl'in un terminale anche se, solitamente, l'interprete viene installato in /usr/bin; ma nonsi può mai sapere con certezza).Questo, una volta che il file è reso eseguibile (con chmod 755 nome_script.pl), fa inmodo che quando lo script viene eseguito, il kernel legga la prima linea e vada acercare l'interprete, che poi provvederà all'interpretazione del resto del codice.

Un metodo alternativo per lanciare uno script in perl, è quello di chiamare 'perl' con ilnome dello script come argomento:

perl script.pl

Perl riconosce molte opzioni, le più utili sono:-h visualizza una pagina di help;●

-d esegue lo script sotto il debugger;●

-l aggiunge automaticamente il line-feed, aggiungendolo alla fine di ognicomando 'print';

-v visualizza la versione della versione del perl installato sulla vostra macchinaed esce;

-w visualizza alcuni warnings sullo script; molto utile per scoprire gli errori.●

Tutte queste (e molte altre opzioni) sono documentate in "man perl" per il perl4, ed in"man perlrun" per il 5 (perl 5 divide l'immensa manpage del 4 in circa 25 sezioni) Inuno script perl, il cancelletto ( # ) introduce un commento, e tutto quello che vienedopo di esso in una riga viene ignorato.

print "Hello world\n"; # Questo è un commento e verrà ignorato; verrà# eseguito solo il comando "print"

I comenti sono spesso utili per sè e per chi legge il vostro codice: per voi per il fattoche potete utilizzarli come degli "appunti" per, ad esempio, ricordarvi di fare qualcosache avete dimenticato o lasciato indietro; per gli altri per la maggiore facilità diinterpretare il vostro codice, ammesso che inseriate i vostri commenti al suo interno.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Invocazione del Perl

http://www.html.it/perl/perl_03.htm [19/06/2001 14.25.24]

Page 217: Corso-Guida - HTML.it - Corso XML

 Variabili e struttura dei dati

Negli script in perl, i dati temporanei sono tenuti in variabili; queste si comportano agrandi linee come le variabili d'ambiente, ma non sono la stessa cosa.

Il tipo principale di variabile, in perl, è lo scalare. Uno scalare è una stringa o unnumero, che non ha bisogno di essere convertito come in C. Inoltre, tutti gli scalaripossono essere interi o numeri in virgola mobile, che il perl proverà a rappresentarecome interi, se possibile, per migliorare la velocità di esecuzione.

Ogni variabile ha un nome, che inizia sempre con un carattere speciale, che ne indicail tipo, seguito da un nome di almeno una lettera. Tutti i nomi delle variabili sonocase-sensitive, per cui $variabile è diverso da $Variabile e da $VaRiAbIlE.

Il carattere speciale di cui si parlava è $, ed è utilizzato sia quando si assegna unavariabile che quando si usa il suo valore.

$bla = 1; assegna 1 alla variabile scalare $bla

$bla = "1";assegna a bla la stringa "1", che è equivalente a sopra

$ops = $bla +1;$ops è 2

$bla = "ciao\n";\n è un ritorno a capo

print $bla;visualizza ciao

Negli script di shell, il carattere $ è utilizzato solo quando si richiede il valore di unavariabile, non quando lo si assegna:

bla = 1 echo $bla Negli script, le stringhe sono racchiuse tra "" o '' , con la differenzache tra "" le variabili verranno interpolate, tra '' le variabili verranno considerateletteralmente. Ogni volta che può nascere un'ambiguità come quanto lungo puòessere il nome di una variabile, $variabile può essere scritto come ${variabile}.

$bla = "eeek!";

$blabla = "uff!";

print "$blabla\n";visualizza "uff"

print "${bla}bla\n"visualizza "eeek!bla"

$bla = "eek!";

$msg = "$bla mi hai spaventato";$msg contiene "eeek! mi hai spaventato

$msg2 = '$bla mi hai spaventato';adesso contiene "$bla mi hai spaventato

In perl, come anche nello shell scripting (e diversamente dal C) le variabili non hannobisogno di essere dichiarate prima di essere usate: la prima volta che si utilizza unavariabile, la si dichiara. Tentare di leggere un valore inesistente porta ad avere unastringa vuota che, in contesto numerico, è interpretata come 0.Le variabili il cui nome inizia (dopo il canonico $) con un carattere speciale, che non è

PERL: Variabili e struttura dei dati

http://www.html.it/perl/perl_04.htm (1 di 4) [19/06/2001 14.25.28]

Page 218: Corso-Guida - HTML.it - Corso XML

una lettera sono considerate 'riservate' (una lista la si può trovare in man perlvar inperl5). Queste variabili cambiano alcuni comportamenti del perl a seconda del propriovalore. Una di queste è la variabile $_ , che è lasciata libera in modo da permettereall'utente di inserirvi dati in modo temporaneo, ed ha inoltre la proprietà che moltefunzioni operano con $_ se non è fornito alcun valore.

$_ = "bla bla bla\n";

print;visualizza il contenuto di $_

Notate che non tutte le funzioni assumono $_ come default, anche se questofunziona con tutte le funzioni incui ha senso assumere la variabile $_ . In caso didubbio, si può ricorrere ad un piccolo script di un paio di righe per vedere se lafunzione che interessa può lavorare con $_ Altre importanti variabili riservate sono:

$$ visualizza il PID del programma$< visualizza l'UID dell'utente che ha eseguito il programma$0 visualizza il nome del programma$! visualizza lo stato dell'ultima chiamata del programma$? visualizza lo stato di ritorno dell'ultima operazione di esecuzione di un processoesterno$@ visualizza l'ultimo messaggio di errore prodotto dallo script

Un altro tipo di dato è l'array; un array è una lista numerata di scalari. L'array èidentificato dal simbolo @, allo stesso modi in cui $ indica lo scalare. Tutti gli arraysono numerati a partire da 0: il primo elemento assume il numero 0, il secondo 1 ecosì via. Gli elementi sono inseriti in un array sotto forma di una lista separata davirgole e tra parentesi. L'elemento n del generico array @array è definito come$array[n]. In questo caso si utilizza $ al posto di @ perchè ci si riferisce ad unoscalare, e non a tutto l'array.

$var = 1;definisce una variabile

@array = ("bla", 34, "uff", $var);definisce l'array; notate che un elemento è definito con il valore di $var

$secondo = $array[1];prende il secondo valore dell'array e lo assegna a $secondo, che diventa 34

@eek = @array[0, 2];@eek diventa ("bla", "uff"), poichè prende il primo e terzo valore di @array

@urka = (@array, @eek);questo NON è un array di array, poichè gli array sono sempre array di scalari. Quelloche succede, è che tutti i valori di @array e @eek sono copiati in @urka, che diventa("bla", 34, "uff", 1, "bla", "uff")

Ci sono funzioni che operano sugli array, aggiungendo elementi alla fine, togliendone,estraendo quelli che soddisfano una data condizione, ordinandoli ecc.Quella che viene detta "size" di un array (ovvero il numero di elementi meno uno)chiamato @array è data da $#array. Per gli array vuoti, questa viene assunta come-1.

@array = ("bla", "bla", "bla", "bla");print $#array, "\n";visualizzerà 3, e non 4

(Notate che il simbolo # in $#array non introduce un commento).Abbiamo visto che in una stringa tra "", le variabili sono interpolate, in modo che"bla$eek" significa "blabla" se $eek è bla. Questo si applica anche agli array.

Bisogna fare però attenzione ad una cosa:

print "il mio indirizzo è root@localhost\n"; <- NON funzionaprint "il mio indirizzo è root\@localhost\n"; <- funziona

Questo perchè il carattere @ è considerato speciale e, se si vuole che esso siavisualizzato letteralmente (ovvero sia considerato come un semplice carattere, noncome un array), bisogna introdurlo con \ , che protegge il carattere seguente daun'interpretazione diversa da quella letterale, come succede con altri caratteri come "o \.

PERL: Variabili e struttura dei dati

http://www.html.it/perl/perl_04.htm (2 di 4) [19/06/2001 14.25.28]

Page 219: Corso-Guida - HTML.it - Corso XML

In questo caso, \@ è detto carattere di escape; vediamone altri:

\\     \\"    "\$     $\@     @\'     '\a     BELL\b     BS (backspace)\e     ESC\n     LF (Line - feed)\r     CR (Carriage return)\0n    Numero ottale rapresentato da 'n'\xn    Numero decimale

Se volete divertirvi, provate a lanciare questo script:

#!/usr/bin/perlprint "\a";

Qui \a è considerato un carattere di escape, e non verrà visualizzato \a, come visareste potuti aspettare. Per visualizzare \a, lo script deve essere:

#!/usr/bin/perlprint "\\a\n";\n non è strettamente necessario, ma è utile per visualizzare \a su una linea vuotasenza il prompt

In alternativa, si può scrivere quanto segue:

print 'il mio indirizzo è root@localhost', "\n";

che visualizza il mio indirizzo è root@localhost. Attenzione però di non introdurrenell'espressione precedente variabili che devono essere interpolate: semplicementenon si avrebbe l'interpolazione! Il terzo (ed ultimo, per quanto ci riguarda) tipo di datiin perl è l'hash, detto anche array associativo. Gli hash sono introdotti dal simbolo %e contengono scalari indicizzati da altri scalari. Il modo migliore per capire gli hash èdi pensare ad un vocabolario: ogni hash contiene valori (le definizioni nelvocabolario), assegnati agli identificatori (le parole), e le operazioni base sonoaggiungere o rimuovere parole o cambiare il loro valore, controllando se ognuna diqueste parole esiste o meno nel vocabolario.

%bla = ("eek", 34, "uff", 18, "zero", "niente);nota che nell'espressione precedente tutte le stringhe avrebbero potuto essere scritteanche tra ''

Per chiarezza, gli hash possono essere scritti anche come:

%bla = ("eek" => 34,"uff" => 18,"zero" => niente,)

Continuiamo con gli esempi:

print $bla{"eek"}, "\n";visualizza 34

$s = 'zero';

@arr = ($bla{"uff"},$bla{$s};@arr diventa (18, "niente")

Questi tre tipi di variabili (scalari, array e hash) possono benissimo avere lo stessonome: nello stesso codice si possono trovare lo scalare $abc, l'array @abc e l'hash%abc.Vediamo un'ultima cosa: provate ad eseguire questo script:

#!/usr/bin/perlprint "Come ti chiami?\n";$nome = <STDIN>;

PERL: Variabili e struttura dei dati

http://www.html.it/perl/perl_04.htm (3 di 4) [19/06/2001 14.25.28]

Page 220: Corso-Guida - HTML.it - Corso XML

print "Ciao $nome\n";

Come avrete notato, lo script si interrompe chiedendoci il nostro nome (ma potrebbechiedere qualunque altra informazione). Cosa sta succedendo? Beh, basterà sapereche il simbolo <STDIN> è l'handler del file di input standard, ovvero un file sempreaperto durante lesecuzione del programma e che rappresenta la tastiera delterminale di chi esegue lo script. Con la linea $nome = <STDIN> si dice allo script diimmagazzinare nella variabile $nome quello che l'utente batte da tastiera finchèconclude con il tasto invio. I canali standard di comunicazione sono 3 ed ad ognunodi questi è associato ad un handler:

<STDIN> standar input<STDOUT> standard output<STDERR> standard error

Stdout si può vedere come il canale attraverso il quale viene emesso l'output.STDERR è simile a STDIN ma viene solitamente utilizzato per visualizzare imessaggi di errore.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Variabili e struttura dei dati

http://www.html.it/perl/perl_04.htm (4 di 4) [19/06/2001 14.25.28]

Page 221: Corso-Guida - HTML.it - Corso XML

 Variabili speciali

Il perl mette a disposizione un insieme piuttosto ricco di variabili speciali, ossiavariabili gestite direttamente dall'interprete che contengono parametri assai utili.In molti casi può essere utile passare dei parametri sulla linea di comando al nostroscript Perl, ad esempio con:

perl script.pl argomento

Questo può essere benissimo fatto, ricordando che i parametri che noi passiamosono immagazzinati nell'array @ARGV (maiuscolo!!); questo array è speciale ma sicomporta esattamente come tutti gli altri array: $ARGV[0] indica il primo elementodell'array, $#ARGV indica l'ultimo ecc. Vediamo come esempio la "riscrittura" delcomando 'grep' dei sistemi Unix: questo comando visualizza le righe del file di testoche contengono la stringa passata come argomento al programma; si scriverà quindiuno script che cerca nel file di testo l'argomento che noi passiamo al nostro script.

#!/usr/bin/perl$ARGV[0] || die "Devi specificare la stringa da cercare\n";@file = `ls -1`;chop(@file);foreach $file (@file) {-T $file || next;open(FILE, "<$file") ||next;while ($r = <IN>) {$r =~ /$ARGV[0]/ && print "$file: $r";}close (IN);}

Magari l'esempio è un po' ampio, ma può essere utile per illustrare le potenzialità di@ARGV; non preoccupatevi se non capite foreach, open e altro: più avanti sarannospiegati. Un esempio più semplice può essere:

#!/usr/local/bin/perl$filename = $ARGV[0];open(FILE, "< $filename") || die "Errore!\n\n";while ($riga = <FILE>) {print "$riga";}

In questo esempio, lo script aspetta che gli venga passato come argomento il nomedel file (seconda riga), sul quale esegue determinate operazioni (nello specifico, apreil file in lettura o, se non esiste, viene visualizzato un messaggio d'errore; poi stampaogni riga di tal file) Un altro tipo interessante di variabili sono le variabili d'ambiente,che l'interprete prende dal sistema e memorizza nell'hash %ENV. Tale hash contienetutte le variabili d'ambiente del sistema, che possono essere richiamate con$ENV{variabile}. Per vederne il funzionamento, si provi il seguente script:

#!/usr/bin/perlprint "Path è: $ENV{PATH}\n";

Ovviamente tale script funziona con tutte le variabili, ed è altresì possibile modificarle(attenzione a non combinare casino). Per vedere su quali variabili potete agire,lanciate il comando:

$ set |more

che visualizzerà le variabili con il loro valore.

PERL: Variabili speciali

http://www.html.it/perl/perl_05.htm (1 di 2) [19/06/2001 14.25.32]

Page 222: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Variabili speciali

http://www.html.it/perl/perl_05.htm (2 di 2) [19/06/2001 14.25.32]

Page 223: Corso-Guida - HTML.it - Corso XML

 Alcune funzioni

Le cosiddette "builtin functions" sono i normali 'comandi' del perl, che accettanoargomenti, fanno qualcosa a livello degli argomenti o di sistema, e danno in ritornodei valori. Per informazioni più dettagliate, si veda "man perlfunc".Molte funzioni non hanno bisogno di argomenti tra (), ma nelle operazioni piùcomplicate le parentesi tonde sono necessarie per chiarire cosa è riferito a cosa.Tipicamente, quindi, le () si evitano nelle linee più semplici, come print $bleah; , madevono essere incluse quando c'è più di una funzione che viene invocata nella stessadichiarazione.

Le dichiarazioni in perl terminano sempre con il segno ;

Funzioni (in ordine alfabetico):

atan2 Funzione matematica: restituisce l'arcotangente di un valore. La si puòanche trovare con

sub tan { sin($_[0]) / cos($_[0]) }

binmode Apre un file in modalità binaria; deve essere invocato dopo ilcomando open (che apre il file):

open (FILE, file.bin);binmode FILE;

chdir Cambia la directory di lavoro con quella indicata come argomento dellafunzione

chdir ($HOME) or die "You're homeless!\n";

chmod Accetta come argomenti un numero e una lista di file, e setta ilpermesso su quei file in funzione del numero assegnato. Il numero deveessere espresso in notazione ottale.Il valore di uscita è false se è 0 o '', true in qualsiasi altro caso:

chmod 0644, "README", "INSTALL";

@list = ( "abc", "def", "ghi")chmod 755, @list;

chop Prende come argomento uno scalare, ed elimina l'ultimo carattere,restituendolo. Spesso è utilizzato per eliminare il carattere \n dai file e dagliinput da tastiera.

$a = "scalare"; $b = chop($a);

Nella maggior parte dei casi, non ci interessa il valore restituito, quindi bastasemplicemente dare:

chop $a; oppure solamente:

chop;

che opera con $_ . Si noti che, ai nostri fini, chomp è equivalente a chop.

chown Analogo al comando chown dei sistemi Unix: cambia il proprietario diuno o più file. I primi 2 argomenti che si devono passare a questa funzionesono l'uid (user id) ed il gid (group id) numerici, poi il file o i file da sottoporre

PERL: alcune funzioni

http://www.html.it/perl/perl_06.htm (1 di 6) [19/06/2001 14.25.39]

Page 224: Corso-Guida - HTML.it - Corso XML

alla funzione. In generale, la sintassi è:

chown $uid, $gid, @filenames;

oppure

chown $uid, $gid, 'file1', 'file2' ...... ;

cos Funzione matematica. Restituisce il coseno del parametro (espresso inradianti) passato alla funzione. Se si omette il parametro, cos opera su $_

do Esegue un blocco di comandi e restituisce il valore dell'ultima espressionepresa in considerazione. La sintassi è:

do BLOCCO;

Un'utile implementazione di "do" può essere quella di ripetere una porzionedicodice finchè una certa condizione sia verificata. Vediamo come:

do {print "Scegli 1 o 2\n";chop($sel=<STDIN>);until " 1 2 " =~ / $sel /;if ($sel == '1') {print "Hai scelto 1\n";} elsif ($sel == '2') {print "Hai scelto 2\n";}

In pratica, questo script visualizza "hai scelto 1" o "hai scelto 2" a seconda deltasto premuto dall'utente, a meno che questi abbia premuto qualsiasi altrotasto: in questo caso, lo script si disinteressa del tasto premuto e continua avisualizzare "Scegli 1 o 2". A cosa può servire tutto questo? Semplice: toglieteda questo script le prime quattro linee e premete "3" quando vi viene chiesto discegliere 1 o 2: lo script si blocca ed esce: non succede niente di male, siachiaro, ma se avete uno script di qualche centinaio di righe che si blocca peruna simile piccolezza, la cosa può dare fastidio.

die Prende come argomento una stringa ed esce immediatamente dalprogramma visualizzando tale stringa come messaggio d'errore.

if ($num != 18) {die "Non è 18\n";}

eval Prende un'espressione come argomento e la esegue come fosse unpiccolo programma. Se non viene indicato alcu argomento, eval valuta $_ .Eval restituisce il valore dell'ultima espressione considerata, ma si puòricorrere a return per restituire il valore ad un determinato punto del blocco. Nelseguente esempio si vede come è possibile eseguire la stessa operazione condo e con eval:

do 'script.pl';eval `cat script.pl`;

Attenzione agli apici inversi: ' questo è un apostrofo ` questo è l'apice inverso

exec Esce dallo script Perl eseguendo un altro progrmamma. Normalmente,exec non rientra in perl, ma se anche dovesse farlo, restituisce il valore falso,controllando cos'è successo tramite l'analisi di $! . Se si volesse ritornareall'interno dello script, è consigliato utilizzare la funzione system

exit Prende un numero come argomento, ed esce con quel numero comecodice di stato.

exit 0; per uscire con successo

exit 1; o qualsiasi valore diverso da 0

esce senza successo.

PERL: alcune funzioni

http://www.html.it/perl/perl_06.htm (2 di 6) [19/06/2001 14.25.39]

Page 225: Corso-Guida - HTML.it - Corso XML

La differenza con die è che die viene utilizzato nei casi tipo "questo nonsarebbe dovuto succedere".

exp Funzione matematica. Calcola il valore di e elevato al parametro fornitocon exp: in mancanza di questo, agisce su $_

getpgrp Utilizzato con la sintassi 'getpgrp PID' restituisce i/l processo/iappartenente/i al PID specificato. Se si utilizza questa funzione su sistemi chenon implementano la chiamata getgpgrp (si veda man getpgrp), produce unerrore irreversibile.

goto Sintassi: goto label: ricerca la riga contrassegnata da label e riprendel'esecuzione da essa. La sintassi può anche essere goto expr oppure goto&name (si veda la manpage per ulteriori approfondimenti)

grep Esegue la stessa cosa del comando 'grep' nei sistemi Unix. In pratica,ricerca una stringa e restituisce gli elementi per i quali l'espressione risultavera. Si veda la solita man perlfunc e man perl (nei sistemi Unix)

join Prende una stringa ed una lista di valori di uno o più array, e produce unastringa ottenuta con tutti i valori dell'array, usando la stringa come separatore.

$bah = (":", "eek", "niente", 34); $bah diventa "eek:niente:34"

@array = ("uff", "abc", "foo");

print (join(" ", @array, "eek"), "\n");visualizza "uff abc foo eek"

keys Restituisce una lista costituita da tutte le chiavi dell'hash indicato:

$bla{'eek'} = "*pat*";

$bla{'uff'} = "erp";

@thekeys = keys(%bla);@thekeys è ("eek", "uff")

print (join(" ", keys(%bla)), "\n";);visualizza "eek uff"

kill Invia un segnale ad un processo. La si può utilizzare come kill 'STOP'processo; per i segnali, is veda man 7 signal.

last interrompe l'esecuzione il ciclo in questione (simile al BREAK del C). Senon viene specificato il ciclo, last is riferisce al più interno.

LINE: while <STDIN> {

last LINE if /^$/;esce quando ha terminato con gli headers

.......il resto del ciclo

}

lenght Prende una stringa e restituisce la sua lunghezza $n = "blip";

$l = $lenght($n);$l è 4

print (lenght(34), "\n");restituisce 2

link Crea un link al file specificato, con la sintassi uguale a quella dei sistemiUnix:

PERL: alcune funzioni

http://www.html.it/perl/perl_06.htm (3 di 6) [19/06/2001 14.25.39]

Page 226: Corso-Guida - HTML.it - Corso XML

link OLDFILE, NEWFILE

local Modifica le variabili elencate in modo da diventare locali limitatamente alblocco corrente. Se in lista ci sono più variabili, queste devono essereracchiuse tra parentesi. In alternativa a local, si può utilizzare anche my.

local $variabile;dichiara $variabile locale

local (@array, %hash);dichiara la lista di variabili locali

local $var = "valore";dichiara $var locale e le assegna un valore

Per una trattazione più completa, si veda la sezione 'Temporary Values vialocal()' in man perlsub.

log Funzione matematica: restituisce il logaritmo in base e dell'argomentopassato alla funzione (o, come sempre, agisce su $_ )

mkdir Crea una directory, di cui il primo elemento è il nome, il secondo ipermessi su di essa:

mkdir "files", 0755;

o meglio:

if (!mkdir("files", 0755)) {die "failed to create directory\n";}

my Dichiara che le variabili considerate sono locali rispetto al blocco che lecontiene, alla subroutine o al file corrente; se vengno specificate più variabili,queste devono essere racchiuse tra parentesi. A differenza delle variabilicreate con 'local', queste rendono completamente 'invisibili' le variabili globalicon lo stesso nome. Per informazioni più dettagliate, si veda Private Variablesvia my() in man perlsub

next Analogo all'istruzione CONTINUE del C, permette di passaredirettamente l'interazione del ciclo contrassegnata da dall'etichetta LABEL

LINE: while (<STDIN>) {next LINE if /^#/;altro}

oct Interpreta l'argomento passato come parametro della funzione come unvalore ottale e lo restituisce in valore decimale

open Apre il file indicato come argomento della funzione. Il file può essereaperto in diversi modi:

con < viene aperto in lettura●

con >> viene aperto in scrittura●

con >> il contenuto non viene sovrascritto, ma i nuovi dati vengono aggiunti incoda al file

con + davanti a < o > per indicare che il file deve essere aperto in lettura escrittura

se inizia con | , viene visto come un comando a cui l'output viene passato●

se termina con | , viene visto come un comando da cui viene prelevato l'input

open /usr/src/linux/READMEApre il file

open log >> /tmp/logApre il file log e ne passa il contenuto a /tmp/log, senza sovrascriverlo

PERL: alcune funzioni

http://www.html.it/perl/perl_06.htm (4 di 6) [19/06/2001 14.25.39]

Page 227: Corso-Guida - HTML.it - Corso XML

open <file;Apre il file per la modifica

open(FILE, "<miofile;");Come sopra, solo che poi sarà possibile agire su FILE

pop Estrae e restituisce l'ultimo valore di un array riducendone di 1 ledimensioni. Se l'array è vuoto, restituisce ''

print Stampa una stringa o una lista di stringhe. Restituisce 1 se eseguito consuccesso, 0 altrimenti

print "Hello world\n";quante volte vedrete questo esempio!

$bla = 3print "Il valore di 'bla' è $bla\n";visualizza "il risultato di 'bla è 3"

push Aggiunge uno o più elementi in coda all'array ampliandone la lunghezza

@bla = ("a");

$arr = "xterm";

push(@bla, "eek", $arr, 12.5)@bla risulta ( "a","eek", $arr, 12.5);

quotemeta Restituisce una variante dell'argomentoin cui gli eventualimetacaratteri sono resi con l'aggiunta del carattere backslash ( \ )

quotemeta ".*" restituisce "\.\*"

rand La funzione random. Passando un argomento numerico alla funzione,questa restituirà un valore casuale compreso tra 0 e il numero indicato. Se nonè fornito alcun argomento, restituirà un valore compreso tra 0 e 1, estremiinclusi

readlink Passandogli un link come argomento, la funzione restituisce il nomedel file ( o directory) a cui quel file punta

rename Rinomina un file: restituisce 1 se l'operazione è stata svolta consuccesso, 0 in caso contrario

rmdir Rimuove la directory indicata come argomento della funzione

rmdir "temp_dir";

shift Estrae il primo valore dell'array e lo restituisce, accorciando di 1 lalunghezza dell'array e facendo slittare i restanti elementi. In un certo senso, èl'opposto di push. Se l'array è vuoto, lo lascia vuoto e restituisce un valore"undef".

@bla = ("a", "xterm", 12.5);

$v = shift @bla;# @bla è ("xterm", 12.5) e $v è "a"

sin Funzione matematica: restituisce il seno di un determinato valore●

sleep Aspetta il numero di secondi indicati come argomento della funzione.●

split Cerca particolari sequenze di caratteri e scompone la stringa in una seriedi sottostringhe, restituendo la lista generata (in contesto scalare) o il numerodi sottostringhe generate. Verrà meglio spiegato più avanti, dopo le spiegazionisulle espressioni regolari.

sqrt Funzione matematica: calcola la radice quadrata.●

PERL: alcune funzioni

http://www.html.it/perl/perl_06.htm (5 di 6) [19/06/2001 14.25.39]

Page 228: Corso-Guida - HTML.it - Corso XML

symlink Crea un link simbolico. La sintassi è:

symlink OLDFILE, NEWFILE

Nei sistemi che non prevedono i link simbolici, la funzione uscirà con un errore.In questo caso si veda la funzione link().

system Esegue un programma. E' simile a exec, ma dopo la finedell'esecuzione del programma ritorna invece di uscire.

system ("comando", "istruzioni")

undef Prende il nome di una variabile e la imposta come indefinita. Senzaargomenti, restituisce un valore indefinito. Undef non restituisce mai '' o 0.

undef %bla;si sbarazza dell'hash %bla

undef $eek;si sbarazza dello scalare $eek

$eek = undef;come sopra

unlink Cancella un file o una lista di file.

unlink "tempfile";unlink "tempfile", "altrifile";

unshift Aggiunge una lista di elementi in testa all'array e restituisce il numerodi elementi.

@bla = ("a", "b");$arr = "xterm";unshift(@bla, "eek", $arr, 12.5); # @bla è ("eek", "xterm", 12.5,

warn Emette un 'warning' nel canale STDERR, come fa die ma senza uscire.

warn "debugger enebled" if $debug;

<> Legge una riga da STDIN e la restituisce.

$_ = <>;legge una linea in $_

chop;esegue chop su \n

print "Hai scritto '$_'\n";visualizza l'output, ovvero quello che si è digitato preceduto da "Hai scritto"

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: alcune funzioni

http://www.html.it/perl/perl_06.htm (6 di 6) [19/06/2001 14.25.39]

Page 229: Corso-Guida - HTML.it - Corso XML

 Subroutines

Fino ad adesso, tutti i "programmi" che siamo in grado di scrivere sono abbastanza'lineari', verrebbero cioè eseguiti dall'inizio alla fine, riga dopo riga, senza alcun test oloop, tutti in un unico blocco.E' comunque possibile definire le nostre funzioni (o procedure, o subroutines o comevolete chiamarle) in perl, e poi richiamarle come si richiamano le normali funzioni delperl.

Il modo di definire una funzione è questo:

sub nome_della_funzione {contenuti;della;funzione;}

Tale funzione verrà richiamato come &nome_della_funzione se non si voglionoaggiungere argomenti, &nome_della_funzione($argomenti, @vanno, %qui) perrichiamarla con gli argomenti.La "&" è il carattere che identifica le subroutines, allo stesso modo in cui $ definiscegli scalari.

Le subroutines possono essere definite in qualsiasi punto del programma, eccettoall'interno di altre. [Questo vale per il perl4, nel 5 si possono avere subroutine in altresubroutines, sub (= subroutines) senza nome, e non è necessario il "&" perrichiamarle].

Le sub possono essere utilizzate prima di essere definite.

ex: #!/usr/bin/perl$bla=3;&showbla;$bla=4;sub showbla {print "bla è $bla\n";}&showbla

Questo esempio assegna 3 a $bla, chiama la sub, assegna 4 a $bla, poi la richiama;non importa il posto in cui essa è definita.Nella pratica le sub si tengono all'inizio dello script, attorniate con l'inizializzazionedella variabili che servono, ed in seguito il resto del codice. Ma il perl non obbliga maiad essere logici o chiari.

All'interno di una sub, possiamo aver accesso ai parametri passati (se ce ne sono)tramite lo speciale array @_ . Così il primo valore passato alla sub sarà $_[0], ilsecondo $_[1] e così via.

sub printfirstargument {print $_[0], "\n";}

sub printnumberofarguments {print $#_ +1, "\n";}

sub addone {$_[0] = $[0] +1;}$bla = 3;&addone($bla);

PERL: Subroutines

http://www.html.it/perl/perl_07.htm (1 di 2) [19/06/2001 14.25.44]

Page 230: Corso-Guida - HTML.it - Corso XML

Inoltre, ogni funzione restituisce un valore. che è l'ultima espressione che era statavalutata. Da una sub, si può ritornare indietro ad un determinato punto con ilcomando "return", che tornerà al punto fornito come argomento.

sub one {

if ($_[0] == 1) {controlla che il primo argomento sia 1

return "one";se è cosi', restituisce la stringa "one"

} else {altrimenti ...

return "not one";restituisce la stringa "not one"

}chiude "if/else"

}chiude la sub

print &one(1), ", ", &one(3), "\n";visualizza "one, not one"

Vediamo ora un esempio più "alla mano": questo script leggerà i valori in input e nestamperà la media aritmetica.

#!/usr/bin/perlsub media {local($n, $somma, $media);foreach $n (@_) {$somma += $n;}$media = $somma/($#_ +1);return ($media);}print "Inserisci i numeri:\n";@numeri = <STDIN>;chop (@numeri);$media = &media(@numeri);print "Media = $media\n";

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Subroutines

http://www.html.it/perl/perl_07.htm (2 di 2) [19/06/2001 14.25.44]

Page 231: Corso-Guida - HTML.it - Corso XML

 Operatori

Abbiamo visto che il perl utilizza i normali operatori matematici utilizzati per i numeri:+ per l'addizione, - per la sottrazione, * per la moltiplicazione, / per la divisione.Inoltre, == è utilizzato per l'uguaglianza, e ritorna "vero" o "falso" a seconda che inumeri siano uguali o meno. L'opposto è != .

Come ci si aspetta, < è il simbolo di minore e > quello di maggiore, <= è il simbolo diminore o uguale e => quello di maggiore o uguale.

Utilizzare questi simboli con operatori non matematici, produrrà, se lo script èchiamato con l'opzione -w, un warning.

Ci sono anche operatori che operano a livello di stringa:

.(si', proprio il punto) esegue la concatenazione

eqcontrolla che le stringhe siano uguali

neè l'opposto di eq

3 == 3è vero

3 == "03"è vero

"bla" eq "arr"è falso

"bla" ne "arr"è vero

"bla".3è equivalente a "bla"."3", che restituisce "bla3"

"bla eek!"è lo stesso di $bla."eek!"

Ci sono poi gli operatori logici: && (AND), || (OR), ! (NOT). && e || vanno tra dueespressioni, mentre ! va all'inizio dell'espressione (poichè la nega)

3 == "03" && "bla"ne "arr"è vera

Questa espressione funziona perchè == e ne hanno una precedenza più alta rispettoa &&, ma la stessa espressione avrebbe potuto essere scritta più chiaramente come:

(3 == 03) && ("bla" ne "arr")

!("eek" eq $bla)è lo stesso di ("eek" ne $bla)

Una particolarità degli operatori && e || è che possono essere utilizzati comescorciatoie per "se è verificata la condizione fai questo".

unlink "dumbfile" || die "Couldn't remove file\n";

In questo modo prima viene valutato unlink() e, se questo ha successo, la condizione

PERL: operatori

http://www.html.it/perl/perl_08.htm (1 di 3) [19/06/2001 14.25.48]

Page 232: Corso-Guida - HTML.it - Corso XML

introdotta da || viene ignorata, altrimenti (in caso di insuccesso) tale condizione vieneeseguita.L'operatore =~ è particolare: questo guarda che 2 pattern siano uguali e li sostituisce.La sintassi è:

valore =~ /pattern/;Controlla se le variabili sono uguali

valore !~ /pattern/Forma corta per !($variabile=~/pattern/;). Controlla che non siano uguali

$variabile =~ s/pattern/replacement/;Cerca il pattern nella variabile, e la sostituisce con replacement

Se la variabile è omessa, =~ e !~ agiscono su $_Nella prima forma, senza la s/ , =~ e !~ non modificano gli argomenti, ma testano solose combaciano. Nella seconda forma, il pattern "replacement" è sostituito a pattern sequesto viene trovato.

Ancora, alcuni modificatori possono essere aggiunti prima del ; per specificare come ipattern devono combaciare:

i - case-insensitiveg - match globale. Controlla e restituisce anche più di un valore

I pattern sono espressioni regolari abbastanza simili a quelle di grep. Questo verràspiegato in seguito.

"bla" =~ /bl/;vero perchè bla contiene bl

"blabla" =~ /bl/;idem

"blabla" =~ /bl/g;trova 2 matches

"bla" !~ /c/i;vero

$var = "blabla";

$var =~ s/bl/QQ/;vero, e cambia $var in "QQahbla"

$var =~ s/BL/qq/ig;vero, e $var diventa "qqahqqah"

L'operatore = assegna il secondo elemento al primo. Ci sono delle scorciatoie perutilizzare questo operatore.

$var += $value:aggiunge $value a $var

$var -= $value;sottrae $value da $var

$var *= $value;moltiplica $var per $value

$var /= $value;divide $var per $value

Queste espressioni sono invece utilizzate per incrementare il valore delle variabili:

$counter += $step;

$var ++aggiunge 1 a $var

++$varvaluta $var+1

PERL: operatori

http://www.html.it/perl/perl_08.htm (2 di 3) [19/06/2001 14.25.48]

Page 233: Corso-Guida - HTML.it - Corso XML

Tutti questi operatori (tranne =~) ed il matching dei pattern si applicano anche in C, inmaniera quasi identica.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: operatori

http://www.html.it/perl/perl_08.htm (3 di 3) [19/06/2001 14.25.48]

Page 234: Corso-Guida - HTML.it - Corso XML

 Blocchi

Tutti questi blocchi possono ovviamente essere raggruppati:

● if esegue il test di una condizione, e agisce in conseguenza della verità o meno diquesta.

La sintassi è:

if (condizione) {cose;da;fare;} elsif (condizione2) {altre;cose;da;fare;} else {altro;ancora;}

Questo esempio parla da solo: il perl testa la prima condizione, se questa è veraesegue il blocco. Se questa è falsa, passa a elsif ed esamina la seconda condizione:se è vera esegue il blocco. Se nessuna delle precedenti è vera, passa all'else.

Un ulteriore esempio:

print "Scegli un numero\n";$num=<STDIN>;if ($num == '0') {print "Hai premuto 0\n";} elsif ($num == '1') {print "Hai premuto uno\n";} elsif ($numero == '2') {print "Hai premuto due\n";} elsif ($num == '3') {print "Hai premuto tre\n";} else {print "Non hai premuto nè zero nè uno nè due nè tre!\n";}

Chiaro, no?? Abbiamo scelto di fare l'esempio così lungo per dimostrare che cipossono essere benissimo più di un elsif: qui ce ne sono ben tre, ed avrebbero potutoessere molti di più, senza un tetto massimo; invece vi può essere solamente un elseed un if, almeno che non siano concatenati:

if (condizione) {if (condizione2) {fai questo;}fai quest'altro;}L'esempio sopra funziona, ma è totalmente diverso dal precedente: questo si leggecome " se succede una certa cosa (condizione) e se ne succede un'altra(condizione2) .....", non è una serie di alternative come l'esempio dei tre elsif.Non è necessario introdurre un elsif() o un else(); la struttura può anche esseresemplice come:

if (condizione) {

PERL: Blocchi

http://www.html.it/perl/perl_09.htm (1 di 4) [19/06/2001 14.25.52]

Page 235: Corso-Guida - HTML.it - Corso XML

cose_da_fare;}

oppure:

if (condizione) {cose_da_fare;} else {altre_cose;}

Le {} sono sempre necessarie in questi costrutti. Un modo per sintetizzare almassimo l'esempio:

if (condizione) {cose_da_fare;}

è

cose_da_fare if condizione;

Esempio:

if ($cmd eq 'ECHO') {&print($args);} elsif ($cmd eq 'CLEAR' || $cmd eq 'CL) {print $cls if $ansi;print "`#ssfe#l\n" if $ssfe;}● unless fa le stesse cose di if, solo che rovescia il risultato del test.

print "Non è uno\n" unless $number ==1;

● while Ripete un loop finchè una condizione è vera Un esempio può essere:

#!/usr/local/bin/perlprint STDERR "nome del file: ";$nome_del_file = <STDIN>;open(FILE, "< $nome_del_file");while (!eof(FILE)) {$riga = <FILE>;print "$riga";}Questo script non fa altro che chiedervi il nome del file da aprire, e, finchè non arrivaalla fine (la condizione 'while(!eof(FILE)'), visualizza sullo schermo.

until Ripete un loop finchè una condizione è falsa.

La sintassi è:

until (condizione) { # si può sostituire con while per avere la# condizione oppostacose;da;fare;

} Questo costrutto testa la condizione, e se è vera esegue tutto ciò che è contenuto in{}, poi esegue un nuovo test sulla condizione e così via finchè la condizione è falsa.

All'interno del blocco, ci possono essere altri 2 utili comandi:

● next skippa il resto del blocco e va direttamente a ri-testare la condizione.

● last skippa il resto del blocco e ne esce:

$i = 0;while ($i < 18) {print "$i ";$i++;}

PERL: Blocchi

http://www.html.it/perl/perl_09.htm (2 di 4) [19/06/2001 14.25.52]

Page 236: Corso-Guida - HTML.it - Corso XML

print "\n";

$i = 0;while ($i < 18) {next if $i == 4;print "$i ";$i++;}print "\n";

Anche qui si può utilizzare la sintassi.

fai_qualcosa while condizione

● foreach Esegue determinate operazioni su ogni valore di ogni lista/array.La sintassi è:

foreach $variabile (array o scalare) {fai_qualcosa;fai_qualcos'altro;}

Come sempre, $variabile non è indispensabile, e, se questa non è specificata, verràutilizzata $_ Gli argomenti tra () possono essere un array, più array o una lista divariabili, o chiamate di funzioni che restituiscono valori, o un misto di tutto questo.

Tutti questi scalari e array sono spediti in un array (come fa push() ), dopo di cheviene eseguito il blocco tra {} per ogni valore.

Attenzione: se il codice tra {} modifica il valore di una variabile anche il valorenell'array verrà modificato.

Come con while/until, anche con foreach è possibile utilizzare last e next.

@bla = ("ick", 3, "arr", "bleargh");%eek = (10, "no", 5, "yes", 7.5, "maybe");

foreach (@bla, keys(%eek), "heh") {print "|", $_, "| ";}print "\n"; # Visualizza# "|ick| |3| |arr| |bleargh| |10| |5| |7.5| |heh|"

foreach (@bla, keys(%eek), "heh") {$_ = "bla" if $_ == 3;}print join(":", @bla)."\n"; # Visualizza "ick:3:arr:bleargh"

foreach $i (@bla) {$i = "bleh" if $i == 3;}print join(":", @bla)."\n"; # Visualizza "ick:bleh:arr:bleargh"

● for Può essere utilizzato come sinonimo di foreach, solo che la sintassi risulta piùchiara:

for (statement1; condizione, statement2) {cose;da;fare;}

for ($i = 0; $i < 18; $i++) {print "$i ";}print "\n";

for ($i = 0; $i < 18; $i++) {next if $i == 4;print "$i ";}print "\n";

PERL: Blocchi

http://www.html.it/perl/perl_09.htm (3 di 4) [19/06/2001 14.25.52]

Page 237: Corso-Guida - HTML.it - Corso XML

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Blocchi

http://www.html.it/perl/perl_09.htm (4 di 4) [19/06/2001 14.25.52]

Page 238: Corso-Guida - HTML.it - Corso XML

 Test sui file

Dopo aver parlato dei blocchi, può essere utile introdurre il concetto di "verifica" suifile. Ad esempio, avendo uno script del tipo:

#!/usr/bin/perlprint "Inserisci il nome del file che vuoi modificare\n";chomp($file=<STDIN>);.....

E' probabile che l'utente indichi il file correttamente e che lo script proceda consuccesso; ma se ciò dovesse non accadere? Cosa succederebbe se l'utenteinserisse come nome del file "caio" invece di "ciao"? Semplicemente lo scriptandrebbe ad editare un nuovo file (vuoto), che non è certo quello che volevamo! Taleinconveniente può essere superato come segue:

#!/usr/bin/perlprint "Inserisci il nome del file che vuoi modificare\n";chomp($file=<STDIN>);if (-e $file) {....} else {die "File non trovato\n";}

Cosa c'è di diverso da prima? A parte il blocco if/else, notate quel "if (-e $file)":rendendolo in italiano potrebbe essere "se esiste $file". Quindi l'interprete perl andràprima a vedere se tal file esiste, ed in caso positivo passerà alla modifica. Dovessenon esistere, si blocca e visualizza un messaggio (il file non è stato trovato).Ovviamente vi sono altri operatori oltre a "-e" ; vediamo i più importanti:

-z il file ha dimensioni nulle

-s il file ha dimensioni non nulle (restituisce le dimensioni

-f il file è un file regolare

-d il file è una directory

-l il file è un link

-r il file è leggibile

-w il file è scrivibile

-x il file è eseguibile

-T il file è un file di testo

-B il file è un file binario (opposto di -B)

Sintetizziamo tutto con un esempio:

#!/usr/bin/perlprint "Inserisci il nome del file\n";chomp($file=<STDIN>);print "Leggibile\n" if -r $file;print "Scrivibile\n" if -w $file;print "Eseguibile\n" if -x $file;print "Il file ha dimensioni nulle\n" if -z $file;print "E' una directory\n" if -d $file;

PERL: Test sui file

http://www.html.it/perl/perl_10.htm (1 di 2) [19/06/2001 14.25.56]

Page 239: Corso-Guida - HTML.it - Corso XML

print "E' un link\n" if -l $file;

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Test sui file

http://www.html.it/perl/perl_10.htm (2 di 2) [19/06/2001 14.25.56]

Page 240: Corso-Guida - HTML.it - Corso XML

 Espressioni regolari

Le espressioni regolari sono una sorta di linguaggio interno al perl, ma non solo (adesempio si ritrovano in comandi come grep, sed awk). Comunque, non ci sono 2programmi che hanno a che fare con le espressioni regolari le interpretano allostesso modo.Un'espressione regolare è rinchiusa tra / , sebbene questa sia più una convenzioneche una regola! E' comune vedere un'espressione regolare rinchiusa tra | o # oqualche altro carattere, per evitare di mettere il simbolo \ davanti a tutti i / in regexp.

Un'espressione regolare definisce un pattern che verrà cercato. Nelle espressioniregolari, i caratteri alfanumerici (dalla a alla z, dalla A alla Z, da 0 a 9 e _ ) hannocorrispondenza univoca, mentre altri caratteri hanno caratteristiche speciali.

Un \ seguito da un carattere non alfanumerico corrisponde esattamente a quelcarattere; in particolare, \\ corrisponde a \ .

^ -- (solo all'inizio dell'espressione) fa in modo che il testo corrisponda al pattern solose il pattern è all'inizio del testo.

$ -- (solo alla fine dell'espressione) fa in modo che il testo corrisponda al pattern solose il pattern è alla fine del testo.

Qualche esempio chiarirà un po' le cose.

"bla" =~ /\//falso, poichè cerca in "bla" il carattere /

"blh" =~ /\$/falso, poichè cerca in "bla" il carattere £

Quindi per cercare un carattere speciale (o, se volete, riservato) bisogna chiariretramite il simbolo \ che si ricerca proprio quel carattere, e non il suo valore. E lastessa cosa per la ricerca con grep ma anche con editor (vi, ad esempio)

"bla" =~ /la/ vero"bla" =~ /^la/ falso"bla" =~ /^bl/ vero"bla" =~ /h$/ vero"bla" =~ /ls$/ falso"bla" =~ /^bla$/ vero

Altri caratteri speciali sono:. -- cerca ogni singolo carattere\t -- cerca una tabulazione\s -- cerca uno spazio o una tabulazione\S -- cerca ogni carattere che non sia una tabulazione\n -- cerca una "newline"\w -- cerca ogni singola lettera, cifra ma anche _\W -- cerca ogni cosa che non sia una lettera, una cifra o _\d -- cerca ogni singola cifra da 0 a 9\D -- cerca ogni carattere che non sia una cifra

"bla" =~ /b.a/ vero"bla" =~ /b.la/ falso"bla" =~ /b\w.h$/ vero"bla" =~ /\w\D/ vero"bla" =~ /\d/ falso

[caratteri] -- cerca ogni carattere che sia tra [ ]

PERL: Espressioni regolari

http://www.html.it/perl/perl_11.htm (1 di 3) [19/06/2001 14.26.00]

Page 241: Corso-Guida - HTML.it - Corso XML

Inoltre, un campo di ricerca può essere specificato con - , ad esempio [a-m] cerca lelettere tra la a e la m.Se il primo carattere tra [ ] è ^ , il significato è rovesciato, e verrà cercato tutto ciò cheNON è quello che è compreso tra [ ]

[-.0.9] cerca esattamente un - un . o una cifra

[^\@ \t] cerca qualsiasi carattere che non sia un @, una tabulazione o uno spazio. Danotare che il \ davanti a @ è opzionale, poichè il simbolo @ non ha particolarisignificati in questo contesto; ma funziona anche con \@

Quantificatori:determinano il numero minimo e massimo di volte che un determinato elemento devericorrere consecutivamente:

( ) -- raggruppa più elementi in un pattern da cercare una volta* -- Corrisponde all'intervallo {0, } ovvero da un minimo di 0 volte ad un massimoindefinito+ -- Corrisponde all'intervallo {1, }? -- Corrisponde all'intervallo {0, 1}s -- Opera una sostituzionetr -- Opera una traduzione nella forma 'tr [a-z] [A-Z]' (ovvero rende maiuscoli icaratteri minuscoli e viceversa)

"bla" =~ /c*k*z?b+.l/ vero, visto che la c, la k e la z non ci sono, la b appare unavolta e la l anche

"ccckkzbbb8lZOINX" =~ /c*k*z?b+.l/ vero "blabla" =~ /ah(EEK)?bl/ vero"blaEEKbla" =~ /ah(EEK)?bl/ vero "blaEEKEEKbla" =~ /ah(EEK)?bl/ falso"blaEEKEEKbla" =~ /ah(EEK)+bl/ vero

/^([^\@ \t]+\@[^\@ \t])+\s+([-.0-9]+)$/

L'ultimo esempio corrisponde ad una riga che inizia con un numero diverso da 0 dicaratteri che non sono nè @ nè spazi nè tabulazioni, poi una @, poi altri caratteri chenon sono @ nè spazi nè tabulazioni, poi alcuni spazi e tabulazioni, poi qualsiasimistura di '-', '.' e cifra. In parole povere, qualcosa di simile ad un indirizzo e-mailseguito da spazi e qualcosa che si può ragionevolmente pensare come un numero! Inparole ancora più povere, una volta capito come funzionano le espressioni regolari, èpiù facile scriverle che spiegarle.

/^\s*(\d+)\.(\d+)\.(\d+)\.(\d+)\s*$/

Questo invece potrebbe corrispondere ad un indirizzo IP.Inoltre, se il pattern ha dei sub-pattern (), questi sono assegnati a variabili numerate,$1 per la prima, $2 per la seconda ecc.

"129.199.129.13" =~ /^\s*(\d+)\.(\d+)\.(\d+)\.(\d+)\s*$/;$1 è 129, $2 è 199, $3 è 129, $4 è 13

Un pattern con sostituzione è scritto nella forma:

$variabile =~ s/pattern/replacement/;

Il pattern è, come prima, un'espressione regolare, ed il replacement è una normalestringa, tranne per il fatto che le variabili sono interpolate al suo interno.Nella maggior parte dei casi, si può aggiungere il carattere 'g' dopo il replacement, inmodo che le parole che corrispondono al pattern siano tutte cambiate, non solo laprima.

$waitops{$c} =~ s/:${oldnick}:/:${newnick}:/g

Le espressioni regolari lavorano con la funzione split, che prende come argomentoun'espressione regolare , una variabile scalare e, volendo, un secondo scalare chespecifica il numero massimo di campi in cui splittare il pattern.

@array = split(/pattern/, expression);

Nel caso più tipico, si può voler splittare una linea in parole, come segue:

@words = split(/\s+/, $some_line); # se $some_line era "a b c", ora@words è ("a", "b", "c")

PERL: Espressioni regolari

http://www.html.it/perl/perl_11.htm (2 di 3) [19/06/2001 14.26.00]

Page 242: Corso-Guida - HTML.it - Corso XML

oppure

($val1, $val2) = split(/\s+/, $whatever); # setta $val1 con il primovalore di $whatever e $val2 con il secondo. Eventuali altri valori (terzo, quarto ecc.)vengono scartati

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Espressioni regolari

http://www.html.it/perl/perl_11.htm (3 di 3) [19/06/2001 14.26.00]

Page 243: Corso-Guida - HTML.it - Corso XML

 Variabili locali

In ogni momento si possono dichiarare le variabili locali, così una sub può lavorare suqueste variabili senza interferire su altre usate da altre sub.Il modo per farlo è questo:

local($variable, $anothervar, @even_an_array);

Questo crea queste nuove variabili nel momento dell'esecuzione, salvando iprecedenti valori delle variabili con lo stesso nome (se esistono); in seguito, alla finedel blocco {} in cui erano incluse, queste variabili locali vengono distrutte, ed il lorovalore iniziale viene ripristinato. Le variabili locali possono essere inizializzate anchecome

local($variable, $anothervar)=(value, anothervalue);

In particolare, è molto comune per le sub iniziare definendo le variabili locali per daredei nomi agli argomenti che gli sono stati passati:

sub addhelp {A questa sub sono passati 2 argomenti, il nome di un comando ed un testo di aiuto

local ($cmd, $txt) = @_;$cmd =~ tr/A-Z/a-z/;In questo caso A diventa a, B diventa b ecc., così il comando è reso tutto con lettereminuscole

foreach (split(/\n+/, $txt) {next unless $_;skippa le linee vuote

push (@help, $_);}}

A questo punto le variabili $cmd e $txt scompaiono, così se la sub addhelp avesseavuto anch'essa una variabile chiamata $cmd, il suo valore originale sarebberipristinato

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Variabili locali

http://www.html.it/perl/perl_12.htm [19/06/2001 14.26.04]

Page 244: Corso-Guida - HTML.it - Corso XML

 Stile

Il linguaggio Perl, come il C e molti altri, è abbastanza strutturato, con i loopsolitamente tra delimitatori come {}.E' abbastanza importante scrivere il codice in maniera che questo mostri la suastruttura, in modo che ognuno possa immediatamente vedere dove ogni bloccofinisce, e cosa si riferisce a cosa.

Ci sono molte possibilità di scrivere la stessa cosa; alcuni scriverebbero così:

sub bla{print "something";if ($something_else){&do_something;return;}even_more_stuff;}

mentre altri scriverebbero così:

sub bla {print "something";if ($something_else) {&do_something;return;}even_more_stuff;}

La cosa importante è essere il più chiari possibile, e mantenere sempre lo stesso"stile"; l'interprete perl non si interessa assolutamente di come il codice viene scritto,occupandosi solo della sua correttezza e del suo contenuto; inoltre, non bada a spazivuoti ($abc = 3 è identico a $abc=3), tabulazioni e simili che sono utilizzate solo perrendere il codice più chiaro.Il codice sopra, potrebbe addirittura essere scritto così:

sub bla { print "something"; if (something_else) {&do_something ; return; } even_more_stuff; }

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Stile

http://www.html.it/perl/perl_13.htm [19/06/2001 14.26.06]

Page 245: Corso-Guida - HTML.it - Corso XML

 Qualche utile consiglio ..

Per prima cosa, utilizzate spesso (soprattutto in fase di editing) l'opzione -w (come giàdetto, la si può inserire o come '#!/usr/bin/perl -w' oppure come $ perl -w script.pl ;questo vi faciliterà non poco le cose, visto che se l'esecuzione del codice si blocca,tramite l'opzione -w avrete più possibilità di capire dov'è l'errore.

Se scrivete un file di codice che comprende più comandi concatenati, vi convienespesso testare il tutto un paio di istruzioni alla volta, non tutto d'un fiato. Come si fa?Semplice, editate un nuovo file con le 4/5 linee di codice che dovete testare,eseguitelo e vedete se fila tutto liscio. Poi basterà solamente reinserire il codiceappena testato nel file originale. Sembra un po' una cavolata, ma è spesso utilissimo.

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Qualche utile consiglio ..

http://www.html.it/perl/perl_14.htm [19/06/2001 14.26.09]

Page 246: Corso-Guida - HTML.it - Corso XML

 Dove trovare informazioni

Sicuramente la documentazione di Perl, tanto mastodontica quanto completa. I sitiwww.perl.com/perl (l'homepage del perl, che contiene le novità dal mondo perl,documentazione, faq, codice sorgente, moduli prodotti da terze parti e altreinformazioni) e www.perl.org (l'homepage del Perl Institute, che offre vari servizi allacomunità perl).Inoltre, se state utilizzando Windows provate a dare un'occhiata alle risorse perl perWindows (toh, un CGI!)

Libri:

- "programmare in perl" di Larry Wall, Christiansen e Schwartz, edito da O'Reilly epubblicato in italiano da Jackson Libri- "learning perl" di R. Schwartz, edito anch'esso da O'Reilly (questo è più una giudaper chi inizia, mentre "programmare in perl" è più un libro di riferimento- "Perl 5 Desktop Reference" di J. Vromans, un manuale di riferimento veloce

Usenet:

In italiano si trova it.comp.lang.perl, newgroup molto "aperto" al cui interno sitrovano (almeno al momento in cui scriviamo) molte persone preparate e disponibiliad aiutare chi si trovi in difficoltà.C'è poi tutta la gerarchia comp.lang.perl.*, tra i quali il più interessante (a livello diperl in generale) sembra essere comp.lang.perl.misc. Ovviamente, tutto in inglese!

  L e z i o n e    s u c c e s s i v a  

[ S o m m a r i o ]

PERL: Dove trovare informazioni

http://www.html.it/perl/perl_15.htm [19/06/2001 14.26.12]

Page 247: Corso-Guida - HTML.it - Corso XML

 Utilizzare i moduli

Partiamo innanzitutto dalla domanda che qualcuno potrebbe porgersi: cosa sono imoduli?

Un modulo è un insieme di operazioni che possono essere utilizzate all'interno diqualsiasi script in Perl semplicemente richiamando il modulo a cui si fa riferimento ele operazioni che di questo ci interessa utilizzare. Ovviamente, all'interno di uno scriptsi possono richiamare diversi moduli a seconda di ciò che effettivamente serve achi sta programmando; inoltre, alcuni moduli sono dipendenti a loro volta da altrimoduli: se, ad esempio, si vuole utilizzare il modulo "A" che necessita del modulo "B",sarà necessario all'interno dello script richiamare solamente il modulo "A" con lasicurezza che esso stesso andrà a cercare ed utilizzare il modulo "B".

I moduli, all'interno degli script, si richiamano semplicemente con una riga simile a :use Modulo;

equivalente alla scrittura:BEGIN {        require "Modulo.pm"; # indica all'interprete la necessità diprecaricare il modulo        Modulo->import();     # importa la lista completa di simboli contenutinel modulo}

Ma cosa significa veramente utilizzare un modulo?Se andiamo a leggere il codice di qualsiasi modulo, è possibile che sia presente unalista con il nome @EXPORT: utilizzare quindi il modulo significa utilizzare i simboliche in essa sono contenuti, precaricandone la lista completa (nel caso si utilizzi "useModulo;") oppure solamente quelli che ci interessano (utilizzando "use Modulo LIST",dove LIST è la lista dei simboli che ci interessa usare) in fase di compilazione delloscript.

Solitamente, i moduli hanno un nome che termina con ".pm" (English.pm, Apache.pme via dicendo, che comunque va omessa nel caso si utilizzi "use Modulo", comeabbiamo visto sopra) per cui possono essere semplicemente localizzabili all'internodella directory "lib" o equivalente del Perl (potrebbe essere  /usr/lib/perl5). In questadirectory, inoltre, sono presenti alcune directory: Apache, CGI, DBI, WWW, Text ecc.I moduli presenti in queste directory sono tutti legati all'argomento deducibile dalnome della directory: ad esempio, nella directory CGI sono presenti tutti i moduli chehanno a che fare con i CGI (processano i dati del form ecc.), nella directory Apachetutti quelli che hanno a che fare con Apache e via di seguito. Prendiamo ad esempio ilmodulo Form.pm contenuto nella directory CGI: questo sarà comunemente chiamatoCGI::Form per indicare che esso è contenuto nella directory CGI e che, quindi, ha ache fare con i CGI.

Inoltre, per molti moduli è presente della documentazione (POD) inclusa direttamentenel codice del modulo nella forma: 

=head1 NAME

Modulo.pm - Serve per fare ...

=head1 ABSTRACT

Con questo modulo è possibile fare ...

=head1 INSTALLATION:

Questo modulo si installa .....

Questo formato di documentazione (che viene ignorata dall'interprete nella lettura del

PERL: Utilizzare i moduli

http://www.html.it/perl/perl_16.htm (1 di 4) [19/06/2001 14.26.16]

Page 248: Corso-Guida - HTML.it - Corso XML

modulo se richiamato all'interno di uno script) è leggibile a fatica: per leggerlacomodamente sarà necessario il comando

perldoc nome_modulo.pmche formatterà la documentazione visualizzandola come solitamente avviene per lepagine di manuale, rendendola quindi umanamente leggibile! Il risultato sarà moltosimile a: 

Modulo.pm(3pm)   User Contributed Perl Documentation  Modulo.pm(3pm) 

NAME                  Modulo.pm  - Serve per fare ecc. ecc. ecc. ecc. ecc. ecc.ecc. ecc.                  ecc. ecc. ecc. ecc. ....

ABSTRACT                  Con questo modulo è possibile fare ...

INSTALLATION:                  Questo modulo si installa .....

Senza dubbio, molto più comoda da leggere nonchè impaginata a dovere! 

Prendiamo ora un modulo completo e vediamo qualche esempio pratico su come sipuò con questo operare.

Prima di tutto, vediamo la documentazione: utilizzeremo qui il modulo "English.pm",che utilizza i nomi inglesi per le variabili di punteggiatura (ad esempio, $! diventa$OS_ERROR, $< diventa $REAL_USER_ID e via dicendo), alquanto stringata mautile ai nostri scopi.

Leggendo il file, la documentazione è (per non dilungarci troppo e inutilmente neabbiamo tagliato alcune parti!):

 =head1 NAME

English - use nice English (or awk) names for ugly punctuation variables

=head1 SYNOPSIS

    use English;    ...    if ($ERRNO =~ /denied/) { ... }

=head1 DESCRIPTION

This module provides aliases for the built-in variables whosenames no one seems to like to read.  Variables with side-effectswhich get triggered just by accessing them (like $0) will stillbe affected.

Letta invece con perldoc English.pm risulta:NAME       English - use nice English (or awk) names for ugly       punctuation variables

SYNOPSIS           use English;           ...           if ($ERRNO =~ /denied/) { ... } 

DESCRIPTION       This module provides aliases for the built-in variables       whose names no one seems to like to read.  Variables with       side-effects which get triggered just by accessing them       (like $0) will still be affected.

PERL: Utilizzare i moduli

http://www.html.it/perl/perl_16.htm (2 di 4) [19/06/2001 14.26.16]

Page 249: Corso-Guida - HTML.it - Corso XML

Non credo serva aggiungere altro se non che, con il comando "pod2man" potreteconvertire la documentazione nel formato classico delle pagine di manuale,redirigendo il tutto ad un file che potrà essere poi letto con "man -l nomefile". Unveloce esempio:

pod2man Modulo.pm > fileper creare il file;

man -l fileper leggerlo tramite il comando "man"

Ora vediamo brevemente come utilizzare i moduli all'interno degli script: utilizzeremoqui un modulo che mi piace molto, ossia "perlmenu.pm" che permette di creare deicomodi menu per gli script. Prendete questo codice d'esempio:

#!/usr/bin/perl

$| = 1;

BEGIN { $Curses::OldCurses = 1; }use Curses;use perlmenu;

&menu_init(1, " Scegli: ");&menu_item("Prima opzione", "1");&menu_item("Seconda opzione", "-b");$sel=&menu_display_mult("$ppppp");if ($sel eq '1') {    # Fai una determinata cosa} elsif ($sel eq '2') {    # Fai un'altra cosa} else {exit}

Vediamo di sottolinearne le peculiarità, senza soffermarci sulle specifiche richiestedel modulo in questione quali "$|=1" oppure "BEGIN { $Curses::OldCurses = 1; }" oancora "use Curses" (richieste dal modulo per alcune sue funzioni).La riga dove il modulo "perlmenu.pm" viene richiamato è la quarta: semplicemente,abbiamo utilizzato la sintassi "use Modulo", dove a Modulo abbiamo sostituito il nome"perlmenu".Iniziano poi delle subroutines: ma dove sono definite? Andate a leggere il codice delmodulo alla riga 343 (circa) dove verrà spiegato cos'è menu_init e, poco sotto, saràpossibile vedere il codice della suboutine nella forma:

sub menu_init { ... }e capire a fondo la sua funzione; in due parole, questa sub non fa altro che dare vitaad un menu utilizzando le librerie Curses.La stessa cosa avviene per &menu_item, solo che questa subroutine ha il compito diinserire degli elementi nel menu.Il resto del codice è un semplice blocco if/else e l'output dello script su terminalerisullterà:

 

 Scegli: 

       1) (Done with selections)->   2) [X] Prima opzione       3) [  ] Seconda opzione   

 (All)   h)elp q)uit u)p a)ll m)atchc)lear b)egin e)nd r)efresh

La cosa che qui più ci interessa, comunque, non è il layout dello script risultante, macome può essere richiamato un modulo e come possono essere utilizzati i simboli, leoperazioni e le funzioni che esso contiene.

Per sapere utilizzare correttamente un modulo è comunque necessario leggereattentamente la documentazione a suo corredo: se ad alcuni potrà sembrare unabanale perdita di tempo, soprattutto per i moduli "semplici", sottolineiamo qui che nevarrà la pena per diminuire il tempo necessario per la scrittura del vostro codice con

PERL: Utilizzare i moduli

http://www.html.it/perl/perl_16.htm (3 di 4) [19/06/2001 14.26.16]

Page 250: Corso-Guida - HTML.it - Corso XML

la sicurezza di utilizzare funzioni ed operazioni già testate da persone preparate equindi affidabili sotto tutti i punti di vista; perchè quindi perdere tempo a scriverefunzioni quando queste esistono già in determinati moduli e possono essere piùsicure o almeno più performanti di quelle che andremo noi a scrivere? 

Un'ultima cosa prima di chiudere: intanto, se utilizzate un modulo all'interno di unoscript, ovviamente anche le altre persone che utilizzeranno lo script avranno bisognodello stesso modulo per la corretta escuzione dello script: in caso contrario l'interpretePerl visualizzerà un messaggio d'errore simile a:

Can't locate Modulo.pm in @INC (@INC contains:/usr/lib/perl5/i386-linux/5.004 /usr/lib/perl5/usr/local/lib/site_perl/i386-linux /usr/local/lib/site_perl .) at prova.pl line2.BEGIN failed--compilation aborted at prova.pl line 2.

Quindi, se il vostro script utilizza dei moduli e sarà utilizzato anche da terzi, nondimenticate di ricordare loro che devono procurarsi il modulo in questione o nonriusciranno mai ad eseguire lo script.

[ S o m m a r i o ]

PERL: Utilizzare i moduli

http://www.html.it/perl/perl_16.htm (4 di 4) [19/06/2001 14.26.16]

Page 251: Corso-Guida - HTML.it - Corso XML

 

http://www.html.it/linguaggi.htm [19/06/2001 14.26.38]

Page 252: Corso-Guida - HTML.it - Corso XML

 PROGRAMMAZIONE | HARDWARE | MAC | LINUX | WAP | PALMARI | ADSL |  FLASH5 |  FREEASP | CGI | GIF | FONT     

PARTNEREDITORIALI 

  HARDWAREZONE  

  TUTTOGRATIS    MATCH MUSIC  

  CWW  

TECNOLOGICI 

  OMNIBIT    SWISSCOM    HARDWARE

UPGRADE  

LINK 

  Web HostingItaliano  

  Hosting di qualità    Web

Hosting/Housing    Domini .it  

  Internet-Service    Domini a 25.000

lire    Guadagnate il 51%    Hosting di qualità  

 

FORUM   CHAT   EDICOLA    DOWNLOAD

HTML.it su cd-romE' in vendita il cd-rom di HTML.it, comodamente navigabile off-line esenza pubblicità. GLi script, le guide, i tutorial, i download e tutto il resto

>>

Guida a Corel DrawPrime 9 lezioni della guida alprogramma di grafica

  Download di oggi: Auto Graphics Html  •  Servizio free di oggi: Eudoramail

GUIDE DI BASEGuida HTML, fogli di stile, XML,usabilità, accessibilità disabili, HTMLper bambini

GUIDE SOFTWAREFront Page, Dreamweaver, 1st Page2000, IIS, Apache, CFusion

HOSTING E HOUSINGHosting, housing, domini, guidaall'acquisto

SERVIZI PER WEBMASTERControllo di qualità, servizi free,sondaggi, Webmaster finder, Chat, test

MAILING LISTGIF, Javascript, pillole, archivio arretrati

FORUM DI DISCUSSIONEHTML, Flash, Asp/Php/Javascript,webgrafica, cgi, hosting/housing,off-topic

DOWNLOADEditor HTML, grafica, FTP, XML, Css...

LINGUAGGI PER IL WEBJavascript, ASP, PHP, JSP, CGI, Perl,Dhtml, SQL, VBscript, Smil, WML

RACCOLTE SCRIPT300 Javascript, 550 applet Java, 130Dhtml, 264 script Cgi

GRAFICA PER IL WEBPhotoshop, Psp, Fireworks, Corel Draw

FAQHTML, Css, Javascript, ASP, PHP, Perl,SQL, Coldfusion, Apache, Smil

APPROFONDIMENTIDiritto, fisco, marketing, advertising,libri

OSSERVATORIBrowser, domini, portali, motori diricerca, lavoro, leggi, pubblicità,ecommerce

PERCORSI DI NAVIGAZIONE Principianti, avanzato,

professionale

STIAMOCERCANDO

- Collaboratori  Per articoli, guide e  altri contenuti da  pubblicare on-line

HTML.it

http://www.html.it/ (1 di 2) [19/06/2001 14.27.00]

Page 253: Corso-Guida - HTML.it - Corso XML

Dossier: HDSLCos'è, come funziona e a chiserve realmente una connessione

HDSL.

Nessun accordo fra Microsofte AolSalta la trattativa fra Microsoft e

America on line-Time Warner

  Edicola on-line del articoli hi-tech selezionati e proposti dalla Redazione

ULTIM'ORA Oracle in ripresa  Microsoft entra nella telefonia mobile  UE: privacy anche fuori dall’Unione  ePlanet salvata da Angel Venture  Microsoft si compra il marchio Xbox  Il Numtel ancora a picco: meno 3,96%  Le tastiere wireless a rischio sicurezza

ULTIMI FOCUSMaghun contro l'ICANNNetscape è vivoLargo a chi masterizzaWall Street Journal vs MicrosoftFormazione e Net EconomySun sfida MicrosoftExcite lascia l'Europa

DOSSIERNewsletter, Webpromotion, MP3,WebTv, Statistiche, flat rate, pubblicità,lavoro ...

ALTRE RUBRICHEEdicola Off-line, storie della settimana,editoriali, verba volant, Forum

Le distribuzioni LinuxLe maggiori dieci distribuzioniLinux commentate da HTML.it.

Guida a LinuxChe cos'è e come si installa ilsistema operativo Linux

HARDWAREArticoli e prove, news dal Web,download

LINUXArticoli, news dal Web, download

WAPGuida WML, WMLscript, HDML, faq,test

DOWNLOADHardware, macintosh, Linux ...

FORUM DI DISCUSSIONEHardware, Mac, Linux, palmari,software, programmazione, Wap

PROGRAMMAZIONEVisual Basic, Delphi, C++, C, Java

MACINTOSHArticoli e tutorial, news dal Web, download

PALMARIPalm, Pocket, Psion, confronta, articoli, news

ALTRI SERVIZISiti del giorno, glossario

ADSLTutte le offerte, le migliori, le più cliccate,le più economiche, faq, articoli

Pubblicità | Supportaci | HTML.it in Home page | contatti | staff | Copyright |Privacy

HTML.it

http://www.html.it/ (2 di 2) [19/06/2001 14.27.00]


Recommended