cerca
Appello d'esame di Tecnologie Web - 15/07/2008
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Appello d'esame di Tecnologie Web - 15/07/2008

Torna alla pagina di Tecnologie Web


 :: Appello d'esame di Tecnologie Web - 15/07/2008 ::

Esercizio 1

Considerate la seguente istanza XML:

<?xml version="1.0" encoding="UTF-8"?> 

<vxml version="1.0"> 
 <form id="getChoice"> 
  <var# name="noDialogProblems" expr="0"/> 
  <field name="choiceVoice" type="number"> 
   <prompt count="1" timeout="4s">Please look at the list of flights. From that 
list, what is the flight number you prefer?</prompt> 
   <prompt count="2" timeout="4s">Please take you time. I will wait for up to 1 
minute for you to make up your mind.</prompt> 
   <catch event="nomatch noinput"> 
    <goto nextitem="resultIM"/> 
   </catch> 
   <help> 
    <prompt>Please say the flight number.</prompt> 
   </help> 
   <filled> 
    <prompt>Thank you for choosing flight <value class="digits" 
expr="choiceVoice"/>.</prompt> 
    <goto next="#topMenu"> 
   </filled> 
  </field> 
 </form> 
</vxml> 

1.a Nel documento esistono due errori che lo renderebbero non ben formato. Individuateli e commentateli.

SOLUZIONE

  • primo errore: <var# non si può mettere il cancelletto nel nome dell'elemento.
  • secondo errore: <goto next="#topMenu"> questo elemento viene aperto, ma non viene chiuso, quindi non rispetta le regole dei documenti XML ben formati perché deve essere chiuso per forza tramite </goto> oppure tramite />

1.b Scrivete un schema che renderebbe valido questo documento.

SOLUZIONE

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xsd:element name="vxml">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element ref="form" maxOccurs="unbounded"/>
  </xsd:sequence>
  <xsd:attribute name="version" type="xsd:double"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="form">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="var">
    <xsd:complexType>
     <xsd:attribute name="name" type="xsd:string"/>
     <xsd:attribute name="expr" type="xsd:int"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element ref="field"/>
  </xsd:sequence>
  <xsd:attribute name="id" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="field">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="prompt" maxOccurs="unbounded">
    <xsd:complexType mixed="true">
     <xsd:attribute name="count" type="xsd:int"/>
     <xsd:attribute name="timeout" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element ref="catch"/>
   <xsd:element ref="help"/>
   <xsd:element ref="filled"/>
  </xsd:sequence>
  <xsd:attribute name="name" type="xsd:string"/>
  <xsd:attribute name="type" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="catch">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="goto">
    <xsd:complexType>
     <xsd:attribute name="nextitem" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
  <xsd:attribute name="event" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="help">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="prompt" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

<xsd:element name="filled">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element ref="prompt"/>
   <xsd:element name="goto">
    <xsd:complexType>
     <xsd:attribute name="next" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

<xsd:element name="prompt">
 <xsd:complexType mixed="true">
  <xsd:sequence>
   <xsd:element name="value">
    <xsd:complexType>
     <xsd:attribute name="class" type="xsd:string"/>
     <xsd:attribute name="expr" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>
</xsd:schema>

Esercizio 2

Considerate la seguente istanza XML e le espressioni Xpath sottostanti:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="myfile.xsl" ?> 
<bookstore speciality="novel"> 
  <book style="textbook"> 
    <author> 
      <first-name>Mary</first-name> 
      <last-name>Bob</last-name> 
      <publication>Selected Short Stories of 
        <first-name>Mary</first-name> 
        <last-name>Bob</last-name> 
      </publication> 
    </author> 
    <editor> 
      <first-name>Britney</first-name> 
      <last-name>Bob</last-name> 
    </editor> 
    <price>55</price> 
  </book> 
  <magazine style="glossy" frequency="monthly"> 
    <price>2.50</price> 
    <subscription price="24" per="year"/> 
  </magazine> 
  <book style="novel" id="myfave"> 
    <author> 
      <first-name>Toni</first-name> 
      <last-name>Bob</last-name> 
      <degree from="Trenton U">B.A.</degree> 
      <degree from="Harvard">Ph.D.</degree> 
      <award>Pulitzer</award> 
      <publication>Still in Trenton</publication> 
      <publication>Trenton Forever</publication> 
    </author> 
    <price intl="Canada" exchange="0.7">6.50</price> 
    <excerpt> 
      <p>It was a dark and stormy night.</p> 
      <p>But then all nights in Trenton seem dark and 
      stormy to someone who has gone through what 
      <emph>I</emph> have.</p> 
      <definition-list> 
        <term>Trenton</term> 
        <definition>misery</definition> 
      </definition-list> 
    </excerpt> 
  </book> 
</bookstore> 

Xpath1: book[/bookstore/@specialty=@style] 
Xpath2: book/*/last-name 
Xpath3: @* 
Xpath4: my:book 
Xpath5: book/author[last()] 
Xpath6: author[* = "Bob"] 

2.a Listate per ogni espressione Xpath i nodi XML ritornati.

SOLUZIONE

  • Xpath1: [/bookstore/book[2]]
  • Xpath2:
    • [/bookstore/book[1]/author/last-name]
    • [/bookstore/book[1]/editor/last-name]
    • [/bookstore/book[2]/author/last-name]
  • Xpath3:
    • speciality [/bookstore/@speciality]
    • style [/bookstore/book[1]/@style]
    • style [/bookstore/magazine/@style]
    • frequency [/bookstore/magazine/@frequency]
    • price [/bookstore/magazine/subscription/@price]
    • per [/bookstore/magazine/subscription/@per]
    • style [/bookstore/book[2]/@style]
    • id [/bookstore/book[2]/@id]
    • intl [/bookstore/book[2]/price/@intl]
    • exchange [/bookstore/book[2]/price[@exchange]
    • from [/bookstore/book[2]/author/degree[1]/@from]
    • from [/bookstore/book[2]/author/degree[2]/@from]
  • Xpath4:
    • book [/bookstore/book[1]]
    • book [/bookstore/book[2]]
  • Xpath5:
    • [/bookstore/book[1]/author]
    • [/bookstore/book[2]/author]
  • Xpath6:
    • [/bookstore/book[1]/author]
    • [/bookstore/book[2]/author]

2.b Scrivete un tipo di espressione Xpath non proposta nell’esercizio.

SOLUZIONE

  • /bookstore/book/author/excerpt/p/text()
    • it was a dark and... [/bookstore/book[2]/excerpt/p[1]/text()]
    • but then all night... [/bookstore/book[2]/excerpt/p[2]/text()]

Esercizio 3

3.a Illustrate brevemente le principali tappe della storia del WWW.

SOLUZIONE

Il WWW è un sistema per la presentazione a schermo di documenti ipertestuali e multimediali.
1958 Eisenhower chiede al congresso i fondi per ARPA, la nuova agenzia americana per lo sviluppo scientifico.
1967 nasce ARPAnet che interconnette 4 università americane.
1989 un gruppo di ricercatori del CERN di Ginevra riceve l'incarico di realizzare un meccanismo per la diffusione rapida di articoli e appunti tra i fisici del centro.
Tim Berners-Lee, Robert Cailliau identificarono Internet. la navigazione ipertestuale, come elemento chiave per questo meccanismo.
1991 alla conferenza sugli ipertesti, Berners-Lee e Cailliau mostrarono il primo prototipo della loro applicazione, realizzata in client-server su architettura NeXT.
I principali concorrenti su Internet erano:

  • FTP: meccanismo di scambio file che non gestisce la visualizzazione.
  • ARCHIE: programma in grado di indicizzare il contenuto di molti archivi pubblici di file presenti su Internet e sino ad allora sparsi per la rete.
  • WAIS: server che forniva servizi di ricerca avanzati per documenti di solo testo.
  • GOPHER: meccanismo di organizzazione di documenti di testi in gerarchie distribuite su più server.

Invece i principali concorrenti come applicazioni ipertestuali erano:

  • Hypercard e Toolbook: strumenti di produttività individuale.
  • Microcosm: semplice server su rete locale, con identificazione degli utenti, e una serie di moduli da applicare ad applicazioni comuni(MS Word...) per permettere la ricerca e la creazione di link.
  • Hyper-G: un sistema client-server complesso e completo, con un protocollo di comunicazione sofisticato, un modello di dati completo, ma senza il concetto di indirizzamento completo.

Come abbiamo già visto il punto di forza che ha portato alla "vittoria" del WWW è la scalabilità.

3.b Spiegate la differenza tra i fogli di stile CSS e XSL.

SOLUZIONE

XSL(eXtensible Stylesheet Language) è uno standard per definire fogli di stile XML in altri formati.
I possibili usi sono:

  • trasformare documenti XML in documenti XHTML
  • filtrare ed ordinare dati XML
  • definire parti di un documento XML
  • formattare i dati in base al loro valore

Un foglio di stile XSL è formato da un insieme di template. Ogni elemento <xsl:template> contiene delle regole da applicare quando uno specifico nodo viene trovato.

Il CSS(Cascading Style Sheets) è una tecnica che permette di fissare gli stili (tipo di carattere, colori e spaziature) da applicare ai documenti XHTML.
Fu introdotto per separare il contenuto e la presentazione per ottenere una maggior leggibilità del codice, la facilità nella manutenzione e la personalizzazione dell’output.

Esercizio 4

Cookies: cosa sono, vantaggi e svantaggi.

SOLUZIONE

I Cookie sono dei file di testo non interpretabili lasciati in consegna ad un client che può grazie ad essi mantenere lo stato di precedenti connessioni.
Alla prima richiesta di un client, il server fornisce la risposta più un header aggiuntivo, il cookie, con dati arbitrari, e con la specifica di usarlo per ogni successiva richiesta.
Prima di effettuare ogni richiesta al server, il client verifica se ha sul suo disco un cookie di quel server; se lo trova ne copia il contenuto nell'header della richiesta HTTP.
In sostanza i cookie permettono di simulare una sessione.

Esempi di campi contenuti in un cookie:
Comment: una stringa leggibile di descrizione del cookie.
Domain: il dominio per cui il cookie è valido.
Max-Age: la durata di validità del cookie in secondi.
Path: l'URI per il quale il cookie è valido.
Secure: la richiesta che il client contatti il server usando soltanto un meccanismo sicuro(HTTPS).
Version: la versione della specifica a cui il cookie aderisce.


Lo svantaggio dei cookie è che possono portare ad una violazione della privacy e, nel caso si riuscisse a leggere i cookie di un determinato utente, provocare spamming.
Nota: i cookie essendo file di testo non possono essere portatori di virus, perché non possono essere eseguiti, cosa necessaria per qualsiasi codice dannoso.

Esercizio 5

Spiegare il ciclo di vita di una servlet.

SOLUZIONE

Il ciclo di vita di una servlet è caratterizzata da 4 fasi:
1. Caricamento:
Una servlet può essere caricata quando:

  • viene avviato il server
  • l'amministratore di sistema richiede al server di caricare la servlet
  • il browser tenta l'accesso alla servlet

Per caricare una servlet, il server ha bisogno di conoscere il classname della servlet, cioè il nome della servlet richiesto dal browser. Se presente anche il nome del package.nomeDellaServlet

2. Inizializzazione:
Consiste nella creazione e inizializzazione delle risorse che verranno utilizzate per rispondere alle richieste. Il container invoca il metodo init(), prima di poter servire richieste e produrre risposte . Questo metodo è definito dall'interfaccia javax.servlet.Servlet', che ovviamente ogni servlet dovrà implementare.

3. Servizio:
Durante questa fase la servlet:

  • interagisce con le richieste provenienti dai client
  • interagisce con altre servlet o risorse
  • produce risposte

Il metodo che entra in gioco è service()(anche questo definito dall'interfaccia javax.sevlet.Servlet), invocato per ogni richiesta in arrivo, da thread del processo container.
Il metodo service() richiede due parametri che rappresentano la richiesta da servire e la risposta da produrre, questi due parametri sono identificati dai due oggetti Java javax.servlet.ServletRequest e javax.servlet.ServletResponse.

Nella fase di servizio vengono utilizzati vari metodi HTTP, i due principali sono doGet() e doPost(), la differenza che intercorre tra i due è sempre la stessa:
nel primo caso le informazioni vengono accodate sotto forma di query string(? seguito dalla coppia nome=valore) alla URL, con eventuale perdita di informazione se il web server limita i caratteri della URL a 255.
Nel secondo caso non si può avere perdita di informazione perché la risposta viene inviata nel body e non nella URL.

4. Deattivazione:
Durante questa fase una servlet viene rimossa dall'ambiente di esecuzione rilasciando ogni risorsa creata per gestire le richieste.
Il container per deattivare la servlet invoca il metodo destroy(). Il metodo fa sempre parte dell'interfaccia javax.servlet.Servlet.

Esercizio 6

Spiegare il funzionamento e commentare dettagliatamente il seguente codice.

Attach:esercizio6.txt

Oh non riuscivo a mettere su il testo dell'esercizio senza che mi sfasasse la pagina!

SOLUZIONE

Se il parametro titolo è vuoto appare a video la scritta riempire il campo. Successivamente viene incluso li file cinema.xml, ne viene effettuato il parsing, dal quale vengono estratti il titolo del film richiesto dalla variabile test e la locandina dello stesso che verranno visualizzati a video. Se nessun film riporta quel titolo verrà visualizzata a video la scritta "Spiacente, nessun film trovato il titolo" e visualizzato quale titolo era stato cercato.


Torna alla pagina di Tecnologie Web