cerca
Appello d'esame di Tecnologie Web - 06/11/2007
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Appello d'esame di Tecnologie Web - 06/11/2007

Torna alla pagina di Tecnologie Web


 :: Appello d'esame di Tecnologie Web - 06/11/2007 ::

Esercizio 1

Considerate il seguente documento XML:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="poesia.xslt"?> 
<TEI.2> 

<teiHeader type="text" status="new" TEIform="teiHeader"> 

<fileDesc TEIform="fileDesc"> 
<title TEIform="title">Odi e sonetti</title> 
<author TEIform="author">Ugo Foscolo</author> 
<extent TEIform="extent">19 Kb in UTF-8</extent> 
<publisher TEIform="publisher">Biblioteca Italiana</publisher> 
</fileDesc> 

<sourceDesc default="NO" TEIform="sourceDesc"> 
<title TEIform="title">Le opere</title> 
<author TEIform="author">Foscolo, Ugo</author> 
<publisher TEIform="publisher">F. Le Monnier</publisher> 
<pubPlace TEIform="pubPlace">Firenze</pubPlace> 
<date TEIform="date">1985</date> 
</sourceDesc> 

</teiHeader> 

<text><body> 
<div1 type="sonetto" org="uniform" sample="complete" part="N" TEIform="div1">
<head TEIform="head">[1]</head> 

<lg org="uniform" sample="complete" part="N" TEIform="lg"> 
<l part="N" TEIform="l">Forse perchè della fatal quiete</l> 
<l part="N" TEIform="l">Tu sei l'imago a me sì cara vieni</l> 
<l part="N" TEIform="l">O Sera! E quando ti corteggian liete</l> 
<l part="N" TEIform="l">Le nubi estive e i zeffiri sereni,</l> 
<l part="N" TEIform="l">E quando dal nevoso aere inquiete</l> 
<l part="N" TEIform="l">Tenebre e lunghe all'universo meni</l> 
<l part="N" TEIform="l">Sempre scendi invocata, e le secrete</l> 
<l part="N" TEIform="l">Vie del mio cor soavemente tieni.</l> 
<l part="N" TEIform="l">Vagar mi fai co' miei pensier su l'orme</l> 
<l part="N" TEIform="l">Che vanno al nulla eterno; e intanto fugge</l> 
<l part="N" TEIform="l">Questo reo tempo, e van con lui le torme</l> 
<l part="N" TEIform="l">Delle cure onde meco egli si strugge;</l> 
<l part="N" TEIform="l">E mentre io guardo la tua pace, dorme</l> 
<l part="N" TEIform="l">Quello spirto guerrier ch'entro mi rugge.</l> 
</lg> 
</div1></body></text></TEI.2> 

1.a Scrivete almeno due XML Schema che consentino di validare il documento.

SOLUZIONE

  • PRIMO XML SCHEMA (PARECCHIO CICCIONE):
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"?>

<xsd:element name="TEI.2">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element ref="teiHeader"/>
   <xsd:element ref="text"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

<xsd:element name="teiHeader">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element ref="fileDesc"/>
   <xsd:element ref="sourceDesc"/>
  </xsd:sequence>
 <xsd:attribute name="type" type="xsd:string"/>
 <xsd:attribute name="status" type="xsd:string"/>
 <xsd:attribute name="TEIform" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="fileDesc">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="title">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="author">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="extent">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="publisher">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
  <xsd:attribute name="TEIform" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="sourceDesc">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="title">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="author">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="publisher">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="pubPlace">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element name="date">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
  <xsd:attribute name="default" type="xsd:string"/>
  <xsd:attribute name="TEIform" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="text">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element minOccurs="1" maxOccurs="1" ref="body"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

<xsd:element name="body">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element ref="div1"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

<xsd:element name="div1">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="head">
    <xsd:complexType mixed="true">
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
   <xsd:element ref="lg"/>
  </xsd:sequence>
  <xsd:attribute name="type" type="xsd:string"/>
  <xsd:attribute name="org" type="xsd:string"/>
  <xsd:attribute name="sample" type="xsd:string"/>
  <xsd:attribute name="part" type="xsd:string"/>
  <xsd:attribute name="TEIform" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>

<xsd:element name="lg">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="l" minOccurs="1" maxOccurs="unbounded">
    <xsd:complexType mixed="true">
     <xsd:attribute name="part" type="xsd:string"/>
     <xsd:attribute name="TEIform" type="xsd:string"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
  <xsd:attribute name="org" type="xsd:string"/>
  <xsd:attribute name="sample" type="xsd:string"/>
  <xsd:attribute name="part" type="xsd:string"/>
  <xsd:attribute name="TEIform" type="xsd:string"/>
 </xsd:complexType>
</xsd:element>
</xsd:schema>

1.b Discutete le motivazioni per cui è possibile avere diverse dichiarazioni di schema per un singolo documento.

SOLUZIONE

E' possibile avere più dichiarazioni di schema per lo stesso documento perché ci sono più metodi per rappresentare la stessa cosa.
Infatti ad esempio una dichiarazione di schema che già va bene per un certo documento XML può essere ulteriormente approfondita con dei limiti maggiori che magari vengono inseriti per un ritocco futuro del documento XML. Ad esempio il fatto di aggiungere ad un certo elemento dei limiti maggiori nei valori che può assumere.
Inoltre i vari Schema possono essere composti dagli stessi elementi, ma questi possono essere ordinati in modo diverso.
Si possono scrivere Schema tutti annidati (come quelli visti a lezione) oppure costruire lo Schema in modo più ordinato tramite il comando REF (quello visto nell'esempio sopra).

Esercizio 2

Considerate il seguente documento XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.1"> 

<xsl:output method="xml" doctype-
system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"  
     doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"/>  

<xsl:variable name="title" select="/TEI.2/teiHeader/fileDesc/title" /> 

<xsl:template match="/"> 

 <html xmlns="http://www.w3.org/1999/xhtml"> 
 <head> 
   <title><xsl:value-of select="$title"/></title> 
 </head>   
 <body> 

  <h1><xsl:value-of select="$title" /></h1> 
  <h3>di <xsl:value-of select="/TEI.2/teiHeader/fileDesc/author" /></h3> 

 <xsl:for-each select="/TEI.2/text/body/div1"> 
 <div class="{@type}"> 
   <xsl:for-each select="/TEI.2/text/body/div1/lg/l"> 
      <xsl:if test="position() = 1"> 
    <h4><xsl:value-of select="."/> ... </h4> 
     </xsl:if> 
     <p><xsl:value-of select="."/></p> 
   </xsl:for-each>   

 </div>   
 </xsl:for-each> 

 </body> 
 </html> 
</xsl:template> 
</xsl:stylesheet> 

2.a Nel caso fossero presenti, evidenziate eventuali errori di sintassi.

SOLUZIONE

Non sono presenti errori di sintassi.

2.b Mostrate quale risultato produrrebbe se applicato al documento XML dell’esercizio1 .

SOLUZIONE

Esercizio 3

3a. Discutete le principali caratteristiche del WWW, evidenziando in modo più dettagliato il ruolo dei linguaggi di marcatura.

SOLUZIONE

Il WWW (world wide web) serve per presentare a schermo i documenti ipertestuali e multimediali.
Il punto di forza del WWW è la scalabilità, ottenuta tramite il meccanismo dei link, che semplifica il protocollo e semplifica la navigazione ipertestuale.
Un altro fattore che ne determinò il successo è stato l'URI, cioè lo standard per gli identificatori univoci nella rete. È indipendente dal protocollo, facilmente memorizzabile e scambiabile.
Il protocollo di comunicazione utilizzato è l'HTTP, che permette di scambiare messaggi su una rete informatica (TCP/IP).
Le due componenti principali legate al WWW sono:

  • browser(client): permette di visualizzare i documenti.
  • server: meccanismo di accesso a risorse locali, in grado di trasmettere via socket TCP documenti identificati da un nome univoco. Può anche collegarsi ad applicazioni lato server(tramite protocollo CGI) agendo da tramite tra il browser e l'applicazione, quindi il browser diventa l'interfaccia dell'applicazione.

I linguaggi di markup (ad es. SGML, HTML, XHTML) sono i più opportuni per strutturare e marcare i documenti in maniera indipendente dall’applicazione, favorendo la riusabilità, la flessibilità e l’apertura ad applicazioni complesse dei documenti, quindi si va a risolvere il problema della portabilità dei dati.

3b. Spiegate la differenza tra XPath XLink e XPointer.

SOLUZIONE

  • XLink: è un vocabolario XML per definire link in modo più ricco dell’ancora HTML. Ha una sua DTD e può essere usato dalle applicazioni che la supportano.
  • XPointer: è uno standard che permette di riferirsi o localizzare frammenti di XML, pensato per essere associato a XLink. Può essere definito come URI+XPath.
  • XPath: è una sintassi che consente di riferirsi a parti di documenti XML (sia associati che non a un XML Schema o DTD). Generalmente viene inserito in un documento XML come valore di un attributo.
    XPath vede un documento come un albero di nodi:
    • nodo radice: contiene l’intero documento e informazioni relative all'intero documento.
    • nodi elemento: ha come padre un altro elemento o il nodo radice e come figli eventuali sottonodi, testo e istruzioni contenuti al suo interno.
    • nodi attributo: ha come padre un altro elemento, ma non si considera figlio di quell’elemento.
    • nodi testo
    • nodi commento
    • nodi per le processing instructions
    • nodi namespaces

Esercizio 4

CGI: cosa sono, come funzionano e che limiti hanno.

SOLUZIONE

CGI (Common Gateway Interface) è un’interfaccia standard che permette ad un web server di comunicare con altre applicazioni e programmi autonomi.
Funzionamento:

  1. Il client esegue una richiesta al web server.
  2. Il web server passa la richiesta ad un programma esterno.
  3. Il programma esterno riceve la richiesta, crea contenuti dinamici che tramite il server vengono inviati al client.

Problemi:

  1. Vengono mischiate presentazione e logica: formato scomodo sia per gli sviluppatori che per i programmatori. Difficile fusione tra HTML e linguaggi di programmazione.
  2. Velocità: ad ogni richiesta del client, il server deve inoltrare questa richiesta al programma CGI che nel frattempo era stato chiuso.
  3. Stateless: non viene tenuta traccia di nessun dato tra una richiesta e l'altra.
  4. Consumo di risorse: ad ogni richiesta di risorsa alla CGI, il web server crea un nuovo processo, quindi c'è un numero limitato di processi concorrenti e di utenti contemporanei.

Per risolvere il problema della velocità e del consumo sono state introdotte le Fast CGI (seconda generazione di CGI) che mantengono un pool di processi sempre attivo, evitando quindi di creare e terminare ad ogni richiesta un nuovo processo. Questo permette anche di mantenere traccia dello stato. La richiesta e la risposta viaggiano sullo stesso canale di comunicazione Socket.

Esercizio 5

Direttive JSP: cosa sono? Spiegare l’uso della direttiva include, facendo un esempio.

SOLUZIONE

Le JSP sono formate da codice HTML + frammenti di codice Java. Le componenti di una JSP sono gli elementi ed i template.
Le direttive sono una delle tre categorie degli elementi e consistono in istruzioni per il container che specificano gli aspetti specifici dell’esecuzione di una JSP. Si dividono in 3 categorie:

  1. direttiva page: specifica informazioni relative alla pagina (tipo di contenuto, linguaggio di script, librerie da importare…).
    <%@page att1=“val1”,…,attN=“valN”%>
  2. direttiva taglib: viene utilizzata in JSTL per informare la jsp su quali librerie di tag vengono utilizzate e devono essere importate. Ad esempio le librerie Core, Xml, Sql ecc...
  3. direttiva include: serve per includere testo o codice nella JSP a tempo di traduzione, quindi quando viene convertita in servlet, ma prima che venga compilata. Ciò che viene incluso deve far parte della stessa applicazione Web.
    <%@include file=“URL relativa” %>

    Un esempio tipico della direttiva include è l'inserimento di un header ed un footer nella pagine web.
    Ad es. <%@ include file=“header.jsp” %>
    Il fatto che la direttiva include venga inserita a tempo di traduzione significa che:
    - non c'è perdita di performance.
    - se vengono effettuate delle modifiche ai file inclusi queste modifiche non vengono visualizzate fino a quando non si riesegue la traduzione.

Esercizio 6

Descrivere in sintesi lo scopo del seguente codice, descrivendone i diversi comportamenti quando viene invocato all'interno di un'applicazione.

<c:choose>
<c:when test="${not empty param.login and not empty param.pw}">
…
<sql:query var="result">
select * from utente where login = ?;
<sql:param value = "${param.login}"/>
</sql:query>
<sql:query var="res">
select * from admin where login = ?;
<sql:param value = "${param.login}"/>
</sql:query>
<c:choose>
<c:when test="${result.rowCount > 0 or res.rowCount > 0 or param.login ==
'admin'}">
<c:out value="Spiacente nome utente utente già in uso."/>
<br><a href="registrazione.jsp">Torna</a>
</c:when>
<c:otherwise>
<sql:update >
INSERT INTO utente (login, pw) VALUES(?, ?)
<sql:param value = "${param.login}"/>
<sql:param value = "${param.pw}"/>
</sql:update>
<c:out value="Registrazione avvenuta con successo"/>
<br><a href="index.jsp">Torna</a>
</c:otherwise>
</c:choose>
</c:when>
…

SOLUZIONE

Questo codice descrive una pagina di accesso ad un sito tramite userid e password. E' diviso in due parti: la prima riguarda il caso dell'utente già registrato per il quale controlla che l'utente in questione non sia già attivo (viene attivata se login e pw sono campi non vuoti). Se i dati (userid di utente qualsiasi o di admin) inseriti sono già presenti rimanda alla pagina jsp di registrazione.
La seconda parte invece conferma che i dati inseriti dall'utente nella pagina di registrazione non sono presenti nel database e riferisce che la registrazione è avvenuta con successo e rimanda alla index.jsp

6a. In quale caso viene generato il messaggio " Spiacente nome utente utente già in uso "? Spiegare il significato delle variabili associate.

SOLUZIONE

Il messaggio viene generato nel caso in cui i campi res e result sono maggiori di zero (cioè è già attivo quell'utente); oppure il parametro di login è uguale a quello di amministratore.
Le due variabili associate res e result contengono il dato userid inserito dall'utente nella form della pagina jsp di registrazione.

6b. Spiegare il significato di " VALUES(?, ?)". Quali valori vengono gestiti?

SOLUZIONE

VALUES(?, ?) passa i valori prendendoli dalle due espressioni che seguono.
Il primo punto di domanda prende il valore:
<sql:param value = "${param.login}"/>
Il secondo punto di domanda:
<sql:param value = "${param.pw}"/>

e quindi li inserisce nella tabella utente presente nel database.


Torna alla pagina di Tecnologie Web