Skip to topic
|
Skip to bottom
Jump:
ProtocolloACDSv7
Tecnologie Web - A.A. 2005/06
TechWeb06
TechWeb06
Home TechWeb06
Changes
Index
Search
Tools
Edit
Attach
Other topic actions
Webs
Bibliometrics
BioTech
BioTech1415
BioTech1516
BioTech1617
BioTech1718
DHDK18
Elite
Glas
InterPC06
InterPC07
InterPC08
InterPC09
InterPC10
InterPC12
InterPC13
InterPC14
InterPC15
InterPC16
InterPC17
LabInt08
LabInt09
Main
NIR
PAS14
Progetti
ProgettoA3
Sandbox
TWiki
TechWeb06
TechWeb07
TechWeb08
TechWeb09
TechWeb10
TechWeb11
TechWeb12
TechWeb13
TechWeb14
TechWeb15
TechWeb16
TechWeb17
TechWebSdF
Trash
UUX16
UUX17
WorkshopHT09
Create
personal sidebar
Edit
Attach
Printable
TechWeb06.ProtocolloACDSv7
r1.2 - 09 Oct 2006 - 12:00 -
GiuseppeVizziello
topic end
Start of topic |
Skip to actions
<style> .null{ display:none; } .change { display: block; color: blue; font-weight: 600; } .empty{ display: none; } #stampabreve { border: 1px solid #666; padding: 5px; color: #666; font-size: 90%; background-color: #fff; } </style> <script type="text/javascript"> <!-- Hide JavaScript and <pre> escape TWiki rendering //JacK'a'Script Copyright 2006 function getElementsByClassName(elementName,className) { var allElements = document.getElementsByTagName(elementName); var elemColl = new Array(); for (var i = 0; i< allElements.length; i++) { if (allElements[i].className == className) elemColl[elemColl.length] = allElements[i]; } return elemColl; } function showHideChanges() { var buttonChanges = document.getElementById("buttonChanges"); if ( buttonChanges.value == "1" ) { buttonChanges.value = "0"; buttonChanges.innerHTML ="Mostra modifiche"; var changesElements = getElementsByClassName('p','change'); for (var i=0; i<changesElements.length; i++) changesElements[i].className="empty"; } else { buttonChanges.value = "1"; buttonChanges.innerHTML ="Nascondi modifiche"; var changesElements = getElementsByClassName('p','empty'); for (var i=0; i<changesElements.length; i++) changesElements[i].className="change"; } } window.onload = function summarizeChanges() { // Elemento da cui partire, scelto solo perche' e' il piu' "vicino" all'inizio della parte variabile del documento var current = document.getElementById("begin"); // Div in cui vanno riassunte le modifiche var summaryDiv = document.getElementById("summaryDiv"); var title = 0; var curTitle = ""; var oldTitle = ""; var curChange = ""; var curAllChange = ""; var stop = 0; var oldLevel = 0; var curLevel = 0; while(current) { nomeNodo = current.nodeName; if ( nomeNodo == "H2" ) { curLevel = 2; title = 1; } else if ( nomeNodo == "H3" ) { curLevel = 3; title = 1; } else if ( nomeNodo == "H4" ) { curLevel = 4; title = 1; } else { curLevel = 0; title = 0; } if ( curLevel != 0 && curLevel <= oldLevel ) { oldTitle = curTitle; stop = 1; } if ( title == 1 ) { oldLevel = curLevel; curTitle = current.innerHTML; } if ( nomeNodo == "P" && (current.className == "empty" | current.className == "change") ) { curChange = current.innerHTML; } // "current.id == "summaryDiv"" per finire if ( current.id == "summaryDiv" ) stop = 1; if ( curChange != "" | stop == 1 ) { if ( stop == 0 ) { curAllChange = curAllChange + "<li>" + curChange + "</li>"; } else { if ( curAllChange != "" ) // "current.id == "summaryDiv"" per finire { summaryDiv.innerHTML = summaryDiv.innerHTML + "<br>" + oldTitle + "<ul>" + curAllChange + "</ul>"; curAllChange = ""; } stop = 0; } curChange = ""; } current = current.nextSibling; } } function htmlExtractor() { var all = getElementsByClassName('div','twikiTopic'); var result = all[0].innerHTML; //var allDiv = all[0].cloneNode(true); var generator = window.open('','name',"width=400,height=200,toolbar=yes, location=yes,directories=yes,status=yes,menubar=yes,scrollbars=yes,copyhistory=yes, resizable=yes"); // rimuovo i <p></p> inseriti dal "wiki" nelle righe vuote result = result.replace(/<p>(\s*)<\/p>/g,""); // rimuovo i <p class="empty"></p> e <p class="change"></p> result = result.replace(/<p class="(empty|change)">(.*)<\/p>/g,""); // pulisce parti inutili //result = result.replace(/^.+<div id="summary[D]iv">/g,""); //var div = document.getElementById('summaryDiv'); //visitTree(allDiv); // generator.document.write(allDiv.innerHTML); generator.document.write(result); generator.document.close(); } function visitTree(curEl) { if (curEl) { var i=0; var curElChild = curEl.childNodes[i]; while (curElChild) { if ( curElChild.id == "summaryDiv" ) { // rimuove il contenuto delle modifiche curElChild.innerHTML = ""; } else if ( curElChild.className == "empty" | curElChild.className == "change" ) { curEl.removeChild(curElChild); } else if ( curElChild.nodeName == "P" && curElChild.innerHTML.match(/^\s*$/) ) { curElChild.parentNode.removeChild(curElChild); } else { visitTree(curElChild); } i++; curElChild = curEl.childNodes[i]; } } } // Stop hiding and stop </pre> escaping TWiki rendering --> </script> <h1 align="center">Protocollo AC-DS</h1> <p align="center"><i>Versione 7 – 21/09/2006</i></p> <br /> <br /> <br /> <div id="stampabreve"> </div> <br /> <button id="buttonChanges" value="0" onclick="showHideChanges();"> Mostra modifiche </button><br/ > Le modifiche vengono visualizzate nella posizione piu' "comoda/vicina" rispetto alle parti cui fanno riferimento, indicando prima il tipo di modifica (SINTASSI, PROPOSTA, CORREZIONE, ecc.), e poi la descrizione dettagliata delle modifiche stesse (per il futuro, farle piu' esplicative possibili poiché sono quelle che compaiono automaticamente nel riassunto in fondo). In fondo alla pagina, nell'apposita sezione, viene generato automaticamente il riassunto delle modifiche apportate al documento rispetto alla versione precedente. Pertanto, bisogna avere Javascript attivo. <div id="begin"> </div> <h2>0. Linee guida *ASSOLUTAMENTE DA LEGGERE*</h2> In questa sezione si vogliono elencare (in ordine sparso) delle nozioni che hanno una valenza più o meno generale: * l'encoding da utilizzare per i caratteri è UTF-8; * le date devono essere nel formato yyyymmgg (quindi, 4 cifre per l'anno, 2 per il mese e 2 per il giorno; *non* sono ammesse abbreviazioni come 200611 al posto di 20060101); * i valori booleani sono espressi con le stringhe "true" e "false"; * gli URL di risorse esterne alla scheda devono essere assoluti (ad esempio, l'url di una copertina). * *i content model corretti non sono _necessariamente_ quelli presenti in questo documento, quindi fate riferimento agli schemi di validazione in <nop>RelaxNG+Schematron*. <h2>3. Query al Data Source</h2> <p>Come specificato in sezione 2, l’applicazione può inoltrare tre tipi di richieste al Data Source: </p> <ul type=disc> <li><i>catalogo</i> ossia le metainformazioni relative al DS</li> <li><i>elenco</i> ragionato sui dati presenti nel DS, costruito in base ai parametri della query specificati dall’utente. </li> <li><i>scheda</i> delle informazioni associate ad un documento o di una pagina intermedia. </li> </ul> <p>Nelle sottosezioni successive sono riportate le specifiche dettagliate e complete per l’inoltro delle query verso il DS.</p> <h3>3.1 Il catalogo</h3> <p>Tale richiesta è realizzata con una GET HTTP di un documento con URL stabilito e reso pubblico da ogni DS al momento della registrazione (nella sezione 8 sono riportate le regole per la registrazione dei data-source e dei formatter). Si assuma ad esempio che nel wiki sia registrato il seguente DS:</p> <div align=center> <table border=1 cellspacing=0 cellpadding=5> <tr> <th>NOME</th> <th>CATALOGO XML</th> <th>CATALOGO HTML</th> </tr> <tr> <td>TWDataSource</td> <td>http://tw.web.cs.unibo.it/TWds.xml</td> <td>http://tw.web.cs.unibo.it/TWds.html</td> </tr> </table> </div> <p>L’URL da utilizzare per la richiesta è appunto</p> <pre>http://tw.web.cs.unibo.it/TWds.xml</pre> <p>Il DS risponde con una auto-descrizione espressa in sintassi XML secondo le specifiche riportate nella sezione 4.1. Si noti che il catalogo può essere un documento statico o dinamico e che è necessario fornire anche una versione human-readable (HTML) dello stesso.</p> <p>Il ruolo del catalogo di un DS è fondamentale: per <strong>ogni</strong> richiesta l'AC <strong>deve</strong> consultare il catalogo del DS e recuperare l'URL completo per richiedere un'elenco di dati o una singola scheda. Sebbene sia possibile implementare meccanismi di caching, è <strong>obbligatorio</strong> recuperare dinamicamente l'indirizzo dello script del DS dal catalogo. La modifica degli URL relativi ad un DS, quindi (tranne l'URL del catalogo) deve essere automicamente gestita dall'AC, senza nessuna modifica manuale al codice dell'applicazione.</p> <h3>3.2 L’elenco</h3> <p>Tale richiesta è realizzata con una GET HTTP all’URL specificato nel catalogo dall’elemento <code>elenco,</code>inserito nella parte globale. Il contenuto dell’elenco è parametrizzato: i parametri di costruzione dell’elenco vengono specificati al momento della richiesta da parte del AC attraverso una query string e devono essere fra quelli supportati dal DS. I parametri supportati dal DS sono a loro volta specificati all’interno della parte query nella descrizione del catalogo. Si rimanda alla sezione 4.1 per una descrizione dettagliata dei meccanismo di accesso e query specificati all’interno del catalogo.</p> <p>L’applicazione potrebbe richiedere, ad esempio, la risorsa:</p> <pre>http://tw.web.cs.unibo.it/get.php?req=elenco&anno=1999</pre> <p>a cui il DS risponderà con l’elenco delle schede disponibili dell’anno 1999, in sintassi XML secondo le specifiche riportate in sez. 4.2.</p> <h3>3.3 La scheda</h3> <p>Tale richiesta è realizzata con una GET HTTP all’URL specificato nel catalogo dall’elemento <code>scheda,</code>inserito nella parte globale. Con questa richiesta è necessario specificare nella query string l’identificativo univoco della scheda richiesta (contenuto nell’elemento id della scheda) *come valore della keyword predefinita "id"*. </p> <p>Ad esempio la richiesta di una scheda potrebbe essere:</p> <pre>http://tw.web.cs.unibo.it/get.php?req=scheda&id=23</pre> <p>Si rimanda alla sezione 4.3 per una descrizione dettagliata dei meccanismo di accesso specificati all’interno del catalogo. </p> <h2>4. Output del Data Source</h2> <p>Il data source (o DS) è un modulo indipendente (cioè scollegato da qualunque altra applicazione) e passivo (cioè non ha comportamenti proattivi, ma risponde soltanto ad esplicita richiesta) che fornisce contenuti in formato XML</p> <p>I data source possono essere <i>data storage</i> (cioè posseggono effettivamente i dati che sono in grado di restituire) oppure <i>data intermediary</i> (cioè estraggono i dati da qualche fonte su Internet e la restituiscono nel formato richiesto). </p> <p>Ogni data source deve obbligatoriamente fornire tre servizi: il catalogo, l’elenco e la scheda.</p> <h3>4.1 Il catalogo</h3> <p>Il catalogo è un documento statico in cui vengono elencate le funzionalità fornite dal modulo. Attraverso il catalogo un’applicazione o un utente a valle può decidere cosa utilizzare del modulo e come. Il catalogo è sempre accessibile via un URI fisso obbligatoriamente registrato (vedi cap. 8).</p> <h4>4.1.1 Elementi costitutivi il catalogo</h4> Gli elementi che costituiscono il catalogo sono: <table border=1 cellspacing=0 cellpadding=5> <tr> <th>Nome</th> <th>Descrizione</th> </tr> <tr> <td><code>catalogoDataSource</code></td> <td>L’elemento radice del catalogo del DS</td> </tr> <tr> <td><code>globale</code></td> <td>Contenitore per elementi che descrivono il tipo di catalogo e come raggiungerlo. Ha come attributo "tipo", che può assumere i valori "storage" o "intermediary".</td> </tr> <tr> <td><code>query</code></td> <td>Contenitore per le keyword supportate dal data source. Vedi dopo.</td> </tr> <tr> <td><code>nome</code></td> <td>Il nome del data source</td> </tr> <tr> <td><code>descrizione</code></td> <td>Una descrizione del contenuto del data source</td> </tr> <tr> <td><code>accesso</code></td> <td>Contiene gli elementi che indicano come accedere ad un elenco o ad una scheda.</td> </tr> <tr> <td><code>elenco</code></td> <td>L'URI dello script tramite il quale ottenere un elenco, concatenato a "?req=elenco"</td> </tr> <tr> <td><code>scheda</code></td> <td>L'URI dello script tramite il quale ottenere una scheda, concatenato a "?req=scheda"</td> </tr> <tr> <td><code>keyword</code></td> <td>Elemento vuoto che ha come attributi: "nome", per indicare il nome della keyword per cui si può effettuare la ricerca; "descrizione", per indicare il significato della keyword; "tipo", per indicare il tipo di dato supportato dalla keyword (di default è "stringa" e può assumere anche i valori "intero", "data" e "booleano").</td> </tr> </table> <p>Ogni URI è assoluto, e deve avere la seguente forma:</p> <pre><scheda>http://golem.web.cs.unibo.it/get.php?req=scheda</scheda></pre> <pre><elenco>http://golem.web.cs.unibo.it/get.php?req=elenco</elenco></pre> <p>Un vincolo aggiuntivo consiste nel fatto che entrambe le richieste <strong>devono avere lo stesso URL di base</strong> e possono differenziarsi solo nei parametri della query string, come mostrato nell'esempio precedente.</p> <p>Per effettuare, ad esempio, la ricerca di una scheda l'AC dovrà concatenare all'URL reperito dal catalogo l'identificativo della scheda come segue:</p> <pre>http://golem.web.cs.unibo.it/get.php?req=scheda&id=42</pre> <p>Si noti dunque che l'unica parte aggiunta all'URL è *&id=42*. Analogamente per l'elenco si dovrà concatenare una o più keyword. *ATTENZIONE: per evitare qualsiasi incomprensione, tengo a precisare che se si utilizzano delle <nop>RewriteRule ovviamente non è obbligatorio che nell'URI presente nel catalogo compaiano le due stringhe nel formato suddetto*. <p class="empty">DECISIONE: è stato deciso come devono essere formati esattamente gli URL per effettuare richieste per ottenere una scheda ed un elenco.</p> <p>La parte query contiene la lista delle keyword rispetto alle quali il DS permette di eseguire una query per ottenere un elenco. Di ogni keyword va specificato il nome e il tipo (stringa, intero, data o booleano). In particolare, le date andranno espresse nel formato yyyymmgg, mentre i valori booleani con le stringhe "true" e "false".</p> *Si noti che il "nome" utilizzato per le keyword deve essere scelto tra quelli degli elementi costitutivi della "scheda" (si veda la sezione 4.3).* <h4>4.1.2 Content model degli elementi costitutivi il catalogo</h4> Legenda: * empty = elemento vuoto * text = testo semplice; * URI = un URI; * X+ = X deve essere presente almeno una volta; * X, Y = devono essere presenti X e Y in quel preciso ordine; * X | Y = possono essere presenti X o Y; * attributo X m = un attributo di nome X che ha contenuto di tipo m; Content model di "catalogoDataSource": * catalogoDataSource: globale, query * globale: attributo tipo ("storage" | "intermediary"), nome, descrizione, accesso * nome: text * descrizione: INLINEMODEL * INLINEMODEL: (text | INLINE) * INLINE: a | abbr | acronym | br | cite | code | del | dfn | em | ins | kbd | q | samp | strong | var * a: attributo href URI, INLINEMODEL * abbr: INLINEMODEL * acronym: INLINEMODEL * br: empty * cite: INLINEMODEL * code: INLINEMODEL * del: INLINEMODEL * dfn: INLINEMODEL * em: INLINEMODEL * ins: INLINEMODEL * kbd: INLINEMODEL * q: INLINEMODEL * samp: INLINEMODEL * strong: INLINEMODEL * var: INLINEMODEL * accesso: elenco, scheda * elenco: URI * scheda: URI * query: keyword+ * keyword: attributo nome text, atttributo descrizione text, attributo tipo ("stringa" | "intero" | "data" | "booleano") <h4>4.1.3 Esempio di catalogo</h4> <verbatim> <catalogoDataSource> <globale tipo="storage"> <nome>AreaDS42</nome> <descrizione>DataSource per libri <em>a</em> <strong>fantasy</strong>, <strong>fantascienza</strong>, <strong>Science-Fiction</strong>.</descrizione> <accesso> <elenco>http://gboccard.cs.unibo.it/html/TWeb/DS/DSstorage42.php?req=elenco</elenco> <scheda>http://gboccard.cs.unibo.it/html/TWeb/DS/DSstorage42.php?req=scheda</scheda> </accesso> </globale> <query> <keyword nome="titolo" descrizione="Il titolo di un libro."/> <keyword nome="autore" descrizione="L'autore di un libro."/> <keyword nome="anno" descrizione="Anno di pubblicazione di un libro." tipo="intero"/> <keyword nome="genere" descrizione="Genere letterario di un libro."/> <keyword nome="personaggio" descrizione="Un personaggio di un libro."/> </query> </catalogoDataSource> </verbatim> <h3>4.2 L’elenco </h3> <p>L’elenco è un documento generato come risposta ad una query. La query è sempre una espressione della forma <code>campo1=val1&campo2=val2…</code> in cui <code>campo1</code> e <code>campo2</code> sono keyword ammesse alla query, e <code>val1</code> e <code>val2</code> sono valori compatibili con i tipi dei campi 1 e 2.</p> <p>Esistono le keyword predefinite <code>autore</code> e <code>titolo</code> per richiedere rispettivamente l'elenco dei libri pubblicati da un certo autore o aventi un certo titolo. *Tutti i DS devono gestire queste keyword obbligatoriamente*.</p> <p>Per quanto riguarda la gestione delle wildcard si è deciso di limitarsi ai seguenti due casi: se la stringa da cercare non presenta al suo interno wildcard, la sua ricerca viene effettuata come sottostringa del valore dell'elemento cercato (i.e., Ada => <verbatim>*</verbatim>Ada<verbatim>*</verbatim>), mentre se la stringa è presente tra doppi apici deve fare match esattamente (i.e., "Ada" => ^Ada$)</p> <p>Quindi l'elenco corrispondente alla richiesta</p> <pre>http://www.sito.com/techweb_ds.php?req=elenco&titolo=lli</pre> <p>conterrà informazioni su <strong>tutti e soli</strong> i libri il cui titolo *contiene* 'lli'. Ci sarà quindi un item relativo a "Il Signore degli Ane<strong>lli</strong>" e "Il Silmari<strong>lli</strong>on".</p> <p>Contrariamente, ad una richiesta del tipo:</p> <pre>http://www.sito.com/techweb_ds.php?req=elenco&titolo="Lo Hobbit"</pre> <p>verrà restituito un elenco contenente informazioni su <strong>tutti e soli</strong> i libri il cui titolo fa esattamente match con 'Lo Hobbit'. Ci sarà quindi un item relativo a "Lo Hobbit", ma non a "Lo Hobbit Annotato".</p> <p>Il DS restituisce alla query un documento composto da un elemento radice <code>elenco</code> che contiene tanti elementi <code>scheda</code> tutti uguali. L’elemento <code>elenco</code> riporta nell’attributo <code>query</code> la query che è stata effettuata per generare l’elenco stesso. Per concatenare più keyword in base alle quali è stata svolta la ricerca si è deciso di utilizzare il separatore "&" (ad es. <elenco query="titolo=XXX&autore=YYY">). </p> Content model di "elenco": * elenco: attributo query text, scheda* * scheda: attributo cod text, dati * dati: *vedi il content model dell'elemento "dati" di "scheda"*. <p>Ogni elemento voce contiene una sequenza di elementi tratti dal vocabolario ODALISK e utili per la visualizzazione dell’elenco. Si è deciso di permettere l'utilizzo, all'interno dell'elemento "voce", di tutti quegli elementi che sono presenti nel campo dati di "scheda", lasciando libertà al formatter di ciascun gruppo di gestire opportunamente l'output.</p> <p>L’attributo <code>richiediCon</code> contiene un identificativo utile per richiedere al DS la scheda completa associata alla voce: in particolare, contiene un identificativo della scheda creato dall'AC come giustapposizione di un id assegnato dall'AC stesso a ciascun DS che gestisce e dell'identificativo contenuto nella scheda stessa</p> <p>Ad esempio, il seguente è un elenco di libri di Tolkien: </p> <pre><elenco query="autore=Tolkien"> <scheda cod="ds1-1723"> <titolo>Il Signore degli Anelli</titolo> <genere>Fantasy</genere> <autore>Tolkien</autore> <testo> <contenuto>bla..bla...bla...</contenuto> </testo> </scheda> <scheda cod="ds2-1040"> <titolo>I Racconti Perduti</titolo> <genere>Fantasy</genere> <autore>Tolkien</autore> <testo> <contenuto>bla..bla...bla...</contenuto> </testo> </scheda> <scheda cod="ds3-671"> <titolo>I Racconti Ritrovati</titolo> <genere>Fantasy</genere> <autore>Tolkien</autore> <testo> <contenuto>bla..bla...bla...</contenuto> </testo> </scheda> </elenco></pre> <p>Gli elenchi sono costruiti dinamicamente, secondo i criteri dichiarati nel catalogo del DS. Tuttavia esistono due elenchi predefiniti che tutti i DS devono gestire e corrispondenti alle keyword <code>autore</code> e <code>titolo</code>.</p> <h4>4.2.1 Elenco dei libri pubblicati da un determinato autore</h4> <p>La keyword <code>autore</code> è utilizzata per richiedere l'elenco di tutti i libri di un determinato autore. La seguente richiesta produce, ad esempio, l'elenco di tutti i libri di Tolkien:</p> <pre>http://www.sito.com/techweb_ds.php?req=elenco&autore=Tolkien</pre> <p>Il DS risponde a questa richiesta con l'elenco richiesto e per ogni libro specifica <strong>almeno</strong> titolo e autore. Di seguito un esempio della risposta:</p> <pre><elenco query="autore=Tolkien"> <scheda cod="ds1-1723"> <titolo>Il Signore degli Anelli</titolo> <genere>Fantasy</genere> <autore>Tolkien</autore> <testo> <contenuto>bla..bla...bla...</contenuto> </testo> </scheda> <scheda cod="ds2-1040"> <titolo>I Racconti Perduti</titolo> <genere>Fantasy</genere> <autore>Tolkien</autore> <testo> <contenuto>bla..bla...bla...</contenuto> </testo> </scheda> <scheda cod="ds3-671"> <titolo>I Racconti Ritrovati</titolo> <genere>Fantasy</genere> <autore>Tolkien</autore> <testo> <contenuto>bla..bla...bla...</contenuto> </testo> </scheda> </elenco></pre> <h4>4.2.2 Elenco dei libri aventi un determinato titolo</h4> <p>La keyword <code>titolo</code> è utilizzata per richiedere l'elenco di tutti i libri aventi un determinato titolo. Per ogni libro, la risposta deve contenere <strong>almeno</strong> titolo e autore.</p> <h3>4.3 La scheda</h3> <p>La scheda contiene tutte le informazioni associate ad un documento. Queste sono organizzate in sezioni che raggruppano informazioni tra loro omogenee per uso. Importante notare che tutte le pagine prodotte dall'AC devono essere codificate come schede e formattate dal DF.</p> <p><strong>Ogni pagina prodotta dall'AC, inclusi il catalogo e gli elenchi, è un documento che deve essere formattato dal DF. </strong></p> <p><strong>Questo vincolo impone che sia la home-page sia ogni eventuale altra pagina statica o dinamica, help, ringraziamenti, motore di ricerca, ecc., siano sempre gestite attraverso il DF.</strong></p> <h4>4.3.1 Elementi (non XHTML) costituenti una scheda</h4> Nella seguente tabella sono descritti gli elementi (non XHTML) che costituiscono una scheda: <table border=1 cellspacing=0 cellpadding=5> <tr> <th>Nome</th> <th>Descrizione</th> </tr> <tr> <td><code>scheda</code></td> <td>L’elemento radice del documento scheda</td> </tr> <tr> <td><code>info</code></td> <td>Metadati informativi sulla scheda in quanto prodotto di un determinato DS</td> </tr> <tr> <td><code>dati</code></td> <td>Dati strutturati (tutti atomici) di descrizione della scheda. Dipendono dal tipo di dato richiesto e fornito dal DS. Può essere facoltativo nel caso di pagine intermedie, che non sono descritte da elementi atomici.</td> </tr> <tr> <td><code>testo</code></td> <td>Testi di media lunghezza (recensioni, commenti, ecc.)</td> </tr> <tr> <td><code>recensione</code></td> <td>Una recensione di un libro</td> </tr> <tr> <td><code>commento</code></td> <td>Un commento individuale ad un libro, o ad un testo di altro tipo sull’opera stessa.</td> </tr> <tr> <td><code>biografia</code></td> <td>Una biografia di un autore, traduttore, curatore, etc.</td> </tr> <tr> <td><code>contesto</code></td> <td>Un commento sul contesto (storico, artistico) all’interno del quale l'autore opera o ha operato. </td> </tr> <tr> <td><code>curiosita</code></td> <td>Aneddoti e curiosità su un libro, autore, personaggio.</td> </tr> <tr> <td><code>contenuto</code></td> <td>il contenuto di un libro</td> </tr> <tr> <td><code>team</code></td> <td>Il team a cui appartiene l’autore</td> </tr> <tr> <td><code>origine</code></td> <td>l’URI originale del documento su Internet da cui è tratto il contenuto della scheda, o la stringa "originale" altrimenti. </td> </tr> <tr> <td><code>dataUltimaVersione</code></td> <td>La data dell'ultima versione di una scheda</td> </tr> <tr></tr> <tr> <td><code>titolo</code></td> <td>Il titolo di un libro</td> </tr> <tr> <td><code>sottotitolo</code></td> <td>Il sottotitolo di un libro</td> </tr> <tr> <td><code>titoloOriginale</code></td> <td>Il titolo di un libro in lingua originale</td> </tr> <tr> <td><code>sottotitoloOriginale</code></td> <td>Il sottotitolo di un libro in lingua originale</td> </tr> <tr> <td><code>autore</code></td> <td>Nome e cognome di un autore ed eventuale pseudonimo.</td> </tr> <tr> <td><code>illustratore</code></td> <td>Autore dei disegni</td> </tr> <tr> <td><code>ciclo</code></td> <td>Il ciclo (deciso dall'autore) cui appartiene un libro.</td> </tr> <tr> <td><code>editore</code></td> <td>L'editore del libro (nell'attributo NON si puo' specificare il sito dell'editore)</td> </tr> <tr> <td><code>collana</code></td> <td>La collana (scelta dall'editore) cui appartiene un libro.</td> </tr> <tr> <td><code>anno</code></td> <td>L’anno di pubblicazione di un libro</td> </tr> <tr> <td><code>numeroEdizione</code></td> <td>Il numero di edizione di un libro.</td> </tr> <tr> <td><code>annoPrimaPubblicazione</code></td> <td>L’anno di *prima* pubblicazione del libro</td> </tr> <tr> <td><code>traduttore</code></td> <td>Il traduttore di un libro</td> </tr> <tr> <td><code>lingua</code></td> <td>La lingua in cui è scritto un libro (nel formato dello standard [[http://www.loc.gov/standards/iso639-2/englangn.html][ISO 639-1]]): italiano = IT, inglese = EN, ecc.</td> </tr> <tr> <td><code>linguaOriginale</code></td> <td>La lingua originale in cui è scritto un libro (nel formato dello standard [[http://www.loc.gov/standards/iso639-2/englangn.html][ISO 639-1]]): italiano = IT, inglese = EN, ecc.</td> </tr> <tr> <td><code>genere</code></td> <td>Il genere di un libro. </td> </tr> <tr> <td><code>sottogenere</code></td> <td>Il sottogenere di un libro. </td> </tr> <tr> <td><code>pagine</code></td> <td>Il numero di pagine che compongono un libro</td> </tr> <tr> <td><code>isbn</code></td> <td>Il codice isbn di un libro</td> </tr> <tr> <td><code>materiale</code></td> <td>La tipologia di copertina (brossura (paperback), brossura con alette, copertina rigida (hardcover), pelle (leather bound))</td> </tr> <tr> <td><code>personaggio</code></td> <td>Il nome di un personaggio</td> </tr> <tr> <td><code>mezzo</code></td> <td>Il mezzo di trasporto con cui viene effettuato un viaggio (dedicato a chi tratta libri di viaggi)</td> </tr> <tr> <td><code>luogo</code></td> <td>Il luogo meta di un viaggio (dedicato a chi tratta libri di viaggi)</td> </tr> <tr> <td><code>copertina</code></td> <td>L’URL dell’immagine della copertina di un libro.</td> </tr> <tr> <td><code>premio</code></td> <td>Un premio vinto da un libro.</td> </tr> </table> <p class="empty">DECISIONE: a grande richiesta, e' stato eliminato l'elemento EXTRA.</p> <h4>4.3.2 Content model di (quasi?) tutti gli elementi che costituiscono una scheda</h4> Di mia spontanea volontà (ovvero dietro le minacce di Stefania :D) ho provato a riassumere in breve i content model degli elementi che costituiscono una scheda. Se incontrate delle incongruenze, controllate anche negli schemi di validazione i quali dovrebbero essere ben più controllati e validabili di un elenco puntato. Naturalmente nel seguente elenco non sono espressi vincoli di Schematron. Legenda: * empty = elemento vuoto * text = testo semplice; * URI = un URI; * X? = X è opzionale; * X+ = X deve essere presente almeno una volta; * X* = X può essere presente 0 o più volte; * X, Y = devono essere presenti X e Y in quel preciso ordine; * X & Y = devono essere presenti X e Y in qualsiasi ordine; * X | Y = possono essere presenti X o Y; * attributo X m = un attributo di nome X che ha contenuto di tipo m; Content model di "scheda": * scheda: info, dati, attributo cod text * info: team & origine & dataUltimaVersione * dati: NONRIPETIBILI & RIPETIBILI & testo * NONRIPETIBILI: titolo? & sottotitolo? & titoloOriginale? & sottotitoloOriginale? & anno? & numeroEdizione? & annoPrimaPubblicazione? & lingua? & linguaOriginale? & pagine? & isbn? & materiale? & editore? & collana? * RIPETIBILI: (autore | illustratore | traduttore | genere | ciclo | sottogenere | personaggio | luogo | mezzo | luogo | copertina | premio )* * testo: (recensione+ | commento+ | biografia+ | contesto+ | contenuto+ | curiosita+) * recensione: { ATTRIBUTICOMUNI, CONTENUTOTESTO } * commento: { ATTRIBUTICOMUNI, CONTENUTOTESTO } * biografia: { ATTRIBUTICOMUNI, CONTENUTOTESTO } * contesto: { ATTRIBUTICOMUNI, CONTENUTOTESTO } * contenuto: { ATTRIBUTICOMUNI, CONTENUTOTESTO } * curiosita: { ATTRIBUTICOMUNI, CONTENUTOTESTO } * ATTRIBUTICOMUNI: * attributo originale? ("true" | "false") * attributo autore? text * attributo fonte? text * attributo urlFonte? URI * CONTENUTOTESTO: NONRIPETIBILI* & RIPETIBILI* & FLOW* * FLOW: (text | INLINE | BLOCCOMODEL)* * INLINEMODEL: (text | INLINE | NONRIPETIBILI | RIPETIBILI) * INLINE: a | abbr | acronym | br | cite | code | del | dfn | em | ins | kbd | q | samp | strong | var * a: attributo href URI, attributo title? text, INLINEMODEL * abbr: INLINEMODEL * acronym: INLINEMODEL * br: empty * cite: INLINEMODEL * code: INLINEMODEL * del: INLINEMODEL * dfn: INLINEMODEL * em: INLINEMODEL * ins: INLINEMODEL * kbd: INLINEMODEL * q: INLINEMODEL * samp: INLINEMODEL * strong: INLINEMODEL * var: INLINEMODEL * BLOCCOMODEL: BLOCCO+ * BLOCCO: address | blockquote | del | dl | ins | ol | p | pre | table | ul | HEADING * address: INLINEMODEL * blockquote: BLOCCOMODEL * del: INILINEMODEL * dl: (dt | dd)+ * dt: INLINEMODEL * dd: FLOW*, INLINEMODEL* * ins: INILINEMODEL * ol: li+ * li: FLOW*, INLINEMODEL* * p: INLINEMODEL * pre: INLINEMODEL * table: $guardateviUnQualsiasiSitoCheTrattaXHTML * ul: li+ * li: FLOW * HEADING: h1 | h2 | h3 | h4 | h5 | h6 * h1: HEADINGCONTENT * h2: HEADINGCONTENT * h3: HEADINGCONTENT * h4: HEADINGCONTENT * h5: HEADINGCONTENT * h6: HEADINGCONTENT * HEADINGCONTENT: (text | INLINE)* Elementi (quasi) foglia non-XHTML: * team: text * origine: text | URI * dataUltimaVersione: text * anno: text * annoPrimaPubblicazione: text * autore: text * illustratore: text * ciclo: text * collana: text * copertina: attributo src URI, attributo alt text, empty * editore: text * genere: text * isbn: text * lingua: text * linguaOriginale: text * luogo: text * materiale: text * mezzo: text * luogo: text * numeroEdizione: text * pagine: text * personaggio: text * premio: attributo nome text, attributo anno? text, text * sottogenere: text * sottotitolo: text * sottotitoloOriginale: text * titolo: text * titoloOriginale: text * traduttore: text <h4>4.3.3 La scheda di un libro</h4> <p>I dati contenuti in una scheda dipendono dalle informazioni memorizzate nel DS. Tuttavia esistono alcune informazioni di base che ogni DS deve gestire. In particolare ogni DS è obbligato a fornire una scheda per ogni libro, contenente un set minimale di informazioni, in particolare "titolo" e "autore". </p> <p>Il seguente esempio mostra una possibile scheda:</p> <verbatim> <scheda cod="1234567890"> <info> <team>42</team> <origine>originale</origine> <dataUltimaVersione>20060504</dataUltimaVersione> </info> <dati> <titolo>Il Signore degli Anelli</titolo> <titoloOriginale>The Lord of the Rings</titoloOriginale> <autore>John Ronald Reuel Tolkien</autore> <genere>Fantascienza</genere> <sottogenere>Horror</sottogenere> <editore>Bompiani</editore> <collana>I Libri di Tolkien</collana> <isbn>88-452-9005-0</isbn> <pagine>1380</pagine> <materiale>Brossura, con sovraccoperta</materiale> <anno>2000</anno> <annoPrimaPubblicazione>1966</annoPrimaPubblicazione> <lingua>IT</lingua> <linguaOriginale>EN</linguaOriginale> <traduttore>Vicky Alliata di Villafranca</traduttore> <personaggio>Frodo Baggins</personaggio> <personaggio>Bilbo Baggins</personaggio> <personaggio>Samvise Gamgee</personaggio> <personaggio>Peregrino Tuc</personaggio> <personaggio>Meriadoc Brandybuck</personaggio> <personaggio>Gandalf</personaggio> <personaggio>Aragorn</personaggio> <personaggio>Legolas</personaggio> <personaggio>Gimli</personaggio> <personaggio>Boromir</personaggio> <personaggio>Gollum</personaggio> <personaggio>Saruman</personaggio> <personaggio>Sauron</personaggio> <personaggio>Galadriel</personaggio> <personaggio>Elrond</personaggio> <personaggio>Arwen</personaggio> <personaggio>Faramir</personaggio> <personaggio>Théoden</personaggio> <personaggio>Tom Bombadil</personaggio> <personaggio>Éomer</personaggio> <personaggio>Éowyn</personaggio> <personaggio>Denethor</personaggio> <personaggio>Grima Vermilinguo</personaggio> <personaggio>Shelob</personaggio> <copertina src="http://www.lafeltrinelli.it/upl/d@y/album/orig/productImages/00/00/03/66/44.jpg" alt="Copertina Il Signore degli Anelli"/> <testo> <contenuto originale="true" autore="Giacomo Boccardo"> Il <em>Signore degli Anelli</em> è un romanzo d'eccezione... </contenuto> <contenuto originale="true" autore="Giacomo Boccardo"> Il <em>Signore degli Anelli</em> è un romanzo eccezionale... </contenuto> <recensione originale="false" autore="Manuela Di Pietro" fonte="Sito PIù" urlFonte="http://www.librando.net/dev/projects/read.asp?pid=8&docid=154"> Pensiamo ad un mondo: un mondo in cui ogni cosa è possibile... </recensione> </testo> </dati> </scheda> </verbatim> <h3>4.4 Gestione Errori</h3> <p>Le richieste inoltrate al DS possono generare diversi errori. Per gestirli il protocollo ASD prevede un messaggio di errore che riporta un codice ed una descrizione human-readable per l’errore. Il messaggio deve essere validato dal seguente DTD:</p> <pre> <!ELEMENT errori (errore)> <!ELEMENT errore (codice, descrizione)> <!ELEMENT codice (#PCDATA)> <!ELEMENT descrizione %inline;> </pre> <p>Il seguente frammento XML riporta un esempio di messaggio di errore:</p> <pre><errori> <errore> <codice>00</codice> <descrizione>DS non disponibile.</descrizione> </errore> ... </errori></pre> <p>Viene riportata di seguito una tabella con gli errori e le relative descrizioni:</p> <table border=1 cellspacing=0 cellpadding=5> <tr> <th>Codice errore</th> <th>Descrizione Errore</th> </tr> <tr> <td>00</td> <td>Non disponibile</td> </tr> <tr> <td>10</td> <td>Dati in input errati</td> </tr> <tr> <td>21</td> <td>Scheda inesistente (id non valido)</td> </tr> </table> <h2>Modifiche rispetto alla versione precedenti</h2> Abbiamo modificato alcuni tag: * Modifica al content model di "errori", in particolare abbiamo deciso di eliminare la ripetibilità del tag "errore". <br /> <br /> %HIDE% * Set ALLOWTOPICVIEW = * Set ALLOWTOPICCHANGE = %E%
to top
End of topic
Skip to action links
|
Back to top
Edit
|
Attach image or document
|
Printable version
|
Raw text
|
More topic actions
Revisions: | r1.2 |
>
|
r1.1
|
Total page history
|
Backlinks
You are here:
TechWeb06
>
ProtocolloACDSv7
to top
Copyright
© Fabio Vitali +
TechWeb
students 2006