400 likes | 514 Views
TEI e Fogli di stile. Il teiHeader: elementi fondamentali (per l’esame). <fileDesc> Titolo del documento, autore, responsabile della codifica: <titleStmt> Responsabile della distribuzione del documento <publicationStmt> Descrizione della fonte <sourceDesc> <bibl> </fileDesc>
E N D
Il teiHeader: elementi fondamentali (per l’esame) <fileDesc> • Titolo del documento, autore, responsabile della codifica: <titleStmt> • Responsabile della distribuzione del documento <publicationStmt> • Descrizione della fonte <sourceDesc> <bibl> </fileDesc> <profileDesc> • Descrizione delle lingue del testo: <LangUsage> </profileDesc> <revisionDesc> • Storia del documento <change> </revisionDesc>
Citazioni bibliografiche • <bibl>: Può contenere • <title>: Orlando Furioso • <author>: Ludovico Ariosto • <biblScope>: Canto II, vv. 1-16 • <editor>: Cesare Segre • <publisher>: Einaudi • <pubPlace>: Torino • <date>: 1986 • <extent>: 687 pp.
Struttura testo unitario <TEI.2> <teiHeader> <!-- metadati --> </teiHeader> <text> <front> <!-- il materiale prefatorio va qui --> </front> <body> <!-- il corpo del testo va qui --> </body> <back> <!-- il materiale finale va qui --> </back> </text> </TEI.2>
Attributi globali • id = identificativo • n = per numerazione e altro • rend = rappresentazione grafica • lang = codice lingua (IDREF)
Elementi per la segmentazione del testo 1. Paragrafi <p> • Attributi • globali 2. Divisioni strutturali <div> <div0> <div1> <div2> <div3> <div4> <div5> <div6> <div7> • Attributi • type: tipologia • globali
Titoli e chiusure • <head>: titolo • Attributi • type: tipologia • globali • <trailer>: chiusura (es.: Fine Atto Primo) • Attributi • globali
Struttura dei testi in versi • <lg>: gruppo di versi (strofa) • Attributi: part indica se la strofa è incompleta • Valori legali: I | N | M | F |Y • <l>: singolo verso • Attributi: part indica se il verso è incompleto • Valori legali: I | N | M | F |Y
Divisioni strutturali testi drammatici <sp>: contiene la battuta di un testo drammatico. Non può contenere testo. Può contenere un elemento <speaker> e poi o <p> o <lg> o <l>, ma anche <stage> • attributi: • globali • who di tipo IDREFS, deve puntare a un ID (lista dei personaggi, <teiHeader>
<speaker>: contiene il nome dell’interlocutore (ma anche di più interlocutori) così come si trova nella fonte <stage>: contiene una didascalia di scena • attributi: • globali • type
Altre caratteristiche testuali: Liste • <list> • <item> • <label> Es: <list> <item><label id=‘dnt’>Dante</label>: primo interlocutore</item> <item><label id=‘mcv’>Machiavelli</label>: secondo interlocutore</item> </list>
Enfatizzazioni • <hi>: generica <l>di te portai sola quell’eco:</l> <l><hi rend='sc'>per sempre!</hi></l> • <emph>: enfatizzazione semantica <p>E così col bicchiere in mano, seguendo il ragionamento, venne in su uno parlare <emph>divino</emph>, dicendo a' compagni:</p> • <foreign>: parola straniera <p>...Nel diritto forense friulano l'astuzia degli amministrati faceva l'uffizio dell'<foreign lang='lat'>equitas</foreign> nel diritto romano....>
Allegare un foglio di stile a un documento XML • XSL • <?xml-stylesheet type=”text/xsl” href=”mioxsl.xsl”?> • CSS • <?xml-stylesheet type=”text/css” href=”miocss.css”?>
Elemento ROOT di un XSL <?xml version=”1.0”?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"?> <!-- qui il contenuto del foglio di stile --> </xsl:stylesheet>
xsl:template <xsl:template match=“qui il nodo”> <!--Qui le regole per il nodo selezionato --> </xsl:template>
Selezionare nodi per l’attributo match di <xsl:template> • Nodo radice <xsl:template match="/"> ... </xsl:template> • Elementi <xsl:template match=“verso"> ... </xsl:template>
Selezionare nodi per l’attributo match di <xsl:template> -2- • Figli nipoti o discendenti 1. <xsl:template match=“strofa/verso"> ... </xsl:template> operatore / 2. <xsl:template match=“poesia/*/verso"> ... </xsl:template> operatore * (salta un elemento) 3. <xsl:template match=“poesia//verso"> ... </xsl:template> //salta n elementi
Selezionare nodi per l’attributo match di <xsl:template> -3- • Attributi 1. <xsl:template match=“verso[@rima]"> ... </xsl:template> tutti i “verso” con attributo “rima” 2. <xsl:template match=“verso[@rima=‘A’]"> ... </xsl:template> tutti i “verso” con attributo “rima” e valore “A”
Selezionare nodi per l’attributo match di <xsl:template> -4- • OR <xsl:template match="strofa | verso"> ... </xsl:template> operatore |
xsl:apply-templates • Serve per applicare le regole descritte al nodo selezionato e a tutti i suoi figli. • Se si vuole che i figli abbiano una visualizzazione diversa, bisogna dichiarare una nuova regola
select • Attributo select • Selezionare un attributo • @nomeAttributo select=“@rima”
Selezioni multiple • <xsl:for-each>: serve per applicare una regola in modo ricorsivo a nodi figli dell’elemento contestuale. Attributo select obbligatorio • <xsl:value-of>: serve per selezionare a quali fra gli elementi selezionati da <xsl:for-each> si deve applicare la regola. Attributo select obbligatorio
Espressioni XPath: percorsi di locazione • Un percorso di locazione è costituito da passi di locazione separati da / o da // • Locazioni: • Assolute: cominciano con / parte dal nodo radice • Es: “/verso” tutti gli elementi <verso> figli diretti dell’elemento radice • Relative: cominciano senza / parte dal nodo contestuale • Es: “verso” tutti gli elementi <verso> figli del nodo contestuale
Un passo di locazione è costituito da: • un asse: esprime la relazione di parentela del nodo da selezionare rispetto al nodo contestuale o all’elemento radice • un nodo test: il nodo di cui si vuole testare l’esistenza e a cui si vuole applicare una regola • zero o più predicati: una caratteristica del nodo selezionato
Esempio child::verso[position() = 1] • child:: è l’asse (qui: figlio del nodo contestuale) • verso è il nodo test (il nodo da selezionare) • [position() =1] è il predicato (qui: il primo elemento) = “fra tutti gli elementi <verso> figli del nodo contestuale, selezionare il primo”
Visualizzare il teiHeader <xsl:template match="fileDesc"> <h2> <xsl:apply-templates select="titleStmt/title" /> </h2> <h3> <xsl:apply-templates select="titleStmt/author" /> </h3> </xsl:template> <xsl:template match="profileDesc"> così non visualizza niente </xsl:template>
<xsl:template match="revisionDesc"> <h4>Storia del documento:</h4> <ul> <xsl:for-each select="change"> <li><b> <xsl:value-of select="date" /></b>: <xsl:value-of select="respStmt/resp" /> <xsl:text> </xsl:text> <xsl:value-of select="respStmt/name" /> — <xsl:value-of select="item" /> </li> </xsl:for-each> </ul> </xsl:template>
<xsl:apply-templates> quando: • Quando si vuole processare tutti i nodi figlio allo stesso modo <xsl:template match="/"> <html> <head> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template>
<xsl:apply-templates> quando: 2. Quando si vuole selezionare un particolare nodo figlio e si vuole ignorare gli altri <xsl:template match="fileDesc"> <h2> <xsl:apply-templates select="titleStmt/title" /> </h2> <h3> <xsl:apply-templates select="titleStmt/author" /> </h3> <!-- manca respStmt --> <p><b>Edizione pubblicata da:</b> <xsl:apply-templates select="publicationStmt/publisher" /></p> <xsl:apply-templates select="sourceDesc" /> </xsl:template>
<xsl:apply-templates> quando: 3. Quando si vuole selezionare i figli di un nodo e disporli in ordine diverso rispetto a quello che hanno nel documento XML <xsl:template match="fileDesc"> <h3> <xsl:apply-templates select="titleStmt/author" /> </h3> <h2> <xsl:apply-templates select="titleStmt/title" /> </h2> <xsl:apply-templates select="sourceDesc" /> <p><b>Edizione pubblicata da:</b> <xsl:apply-templates select="publicationStmt/publisher" /></p> </xsl:template>
<xsl:apply-templates> quando: 4. Quando si vuole richiamare un template definito dopo <xsl:template match="fileDesc"> <h2> <xsl:apply-templates select="titleStmt/title" /> </h2> <xsl:apply-templates select="sourceDesc" /> </xsl:template> <xsl:template match="sourceDesc"> <xsl:for-each select="bibl"> <b>Fonte:</b><br /> <xsl:value-of select="author" /> <br /> </xsl:for-each> </xsl:template>
<xsl:for-each> quando: • Quando si vuole processare tutte le istanze di un figlio di un nodo separatamente e ricorsivamente <xsl:template match="revisionDesc"> <h4>Storia del documento:</h4> <ul> <xsl:for-each select="change"> <li><b> <xsl:value-of select="date" /></b>: <xsl:value-of select="respStmt/resp" /> <xsl:text> </xsl:text> <xsl:value-of select="respStmt/name" /> — <xsl:value-of select="item" /> </li> </xsl:for-each> </ul> </xsl:template>
Immagini <xsl:template match="figure"> <img> <xsl:attribute name="src"> <xsl:apply-templates select="@entity" /> </xsl:attribute> <xsl:attribute name="alt"> <xsl:apply-templates select="figDesc" /> </xsl:attribute> <xsl:attribute name="border">0</xsl:attribute> <xsl:attribute name="width">100%</xsl:attribute> <xsl:attribute name="heigth">100%</xsl:attribute> </img> </xsl:template>
Note: il rimando… <xsl:template match="note"> <sup> <a> <xsl:attribute name="href"> # <xsl:apply-templates select="@n"/> </xsl:attribute> <xsl:apply-templates select="@n"/> </a> </sup> </xsl:template>
…e il testo <xsl:template match="body"> <body> <xsl:apply-templates /> <div> <hr/> <xsl:for-each select="//note"> <p> <a> <xsl:attribute name="name"> <xsl:value-of select="@n" /> </xsl:attribute> </a> <b> <xsl:value-of select="@n" />. </b> <xsl:text> </xsl:text> <xsl:value-of select="." /> </p> </xsl:for-each> </div> </body> </xsl:template> mummie2.xml
Sezioni condizionali • IF: booleano, qualora si verifichi una condizione si esegue una istruzione; se la condizione non si verifica l’istruzione non si esegue.Attributo test (sintassi XPath) obbligatorio • CHOOSE : si danno più opzioni • WHEN: booleano, qualora si verifichi una condizione si esegue una istruzione; se la condizione non si verifica l’istruzione non si esegue; ripetibile all’interno di choose; equivale a tanti ifAttributo test (sintassi XPath) obbligatorio • OTHERWISE ( else): contempla tutti i casi non definiti dai vari when
Visualizzare solo poesie con titolo test non definisce un nuovo nodo contestuale. Il nodo contestuale è sempre poesia <xsl:template match="//poesia"> <xsl:if test="titolo"> <xsl:for-each select="titolo"> <b><xsl:value-of select="." /></b><br/> </xsl:for-each> <xsl:for-each select="verso"> <xsl:value-of select="." /><br/> </xsl:for-each> <br/> </xsl:if> </xsl:template>
Se il titolo non c’è lo inseriamo test non definisce un nuovo nodo contestuale. Il nodo contestuale è sempre poesia <xsl:template match="poesia"> <xsl:choose> <xsl:when test="titolo"> <xsl:for-each select="titolo"> <b><xsl:value-of select="." /></b><br/> </xsl:for-each> </xsl:when> <xsl:otherwise> [<b>Poesia</b>]<br/> </xsl:otherwise> </xsl:choose> <xsl:for-each select="verso"> <xsl:value-of select="." /><br/> </xsl:for-each> <br/> </xsl:template>
CSS: un esempio di gestione INPUT Elementi XML poesia{ background-color: transparent; proprietà di sfondo } titolo{ display: block; proprietà di posizionamento e di blocco font-weight: bold; proprietà di carattere text-align: center; proprietà di testo font-size: large; proprietà di carattere } stanza{ display: block; proprietà di posizionamento e di blocco margin-left: 12px; proprietà di riquadro margin-bottom: 10px; proprietà di riquadro } verso{ display: block; proprietà di posizionamento e di blocco }
XSL <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999 XSL/Transform“ version="1.0"> <xsl:output method="html" /> <xsl:template match="/"> <html> <head> <link rel="stylesheet" type="text/css" href="antologia.css" /> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="titolo"> <h1><xsl:apply-templates /></h1> </xsl:template> </xsl:stylesheet> CSS body { font-family: Verdana, Helvetica, Arial; font-size: 10pt; } h1 { background-color: #D2D2D2; } CSS: gestione dell’OUTPUT