Sviluppare template con Ariadne WCM
Transcript
Sviluppare template con Ariadne WCM
SVILUPPARE TEMPLATE CON ARIADNE WCM Linguaggi e tecnologie per sviluppare siti web 1 Le componenti da considerare XML XSL + XPATH TEMPLATE REPOSITORY ACM 2 Sviluppare Template con Ariadne WCM 1. INTRODUZIONE A XML XML: eXtensible Markup Language » Linguaggio di marcatura (mark-up) » Enstensibile: definisce una sintassi che consente di estendere altri linguaggi di marcatura, creando tag a seconda delle esigenze » Svincolato dalla presentazione (diversamente da HTML) 4 XML “ben formato” e “valido” » » » » I tag non possono iniziare con numeri o caratteri speciali I tag non possono contenere spazi L’annidamento deve essere corretto Il documento deve aprirsi con un prologo tipo XML ben formato <?xml version="1.0" encoding="ISO-8859-1"?> » Deve esserci un unico elemento radice (root) che contiene tutti i nodi » Un documento XML si dice valido se, oltre ad essere “ben formato” rispetta i vincoli strutturali definiti nella DTD (Document Type Definition) 5 XML valido Sintassi e entità » La prima riga indica la versione di XML in uso e specifica la codifica UTF-8 per la corretta interpretazione dei dati. » I caratteri speciali che renderebbero il documento mal formato vanno sostituiti con le rispettive entità XML. <?xml version="1.0" encoding="UTF-8"?> & & < > < > " ' " ' » L' xml è case-sensitive. <tag> è diverso da <TAG> » E' possibile definire tag vuoti. <tag></tag> oppure <tag/> 6 XML: definizioni Nodo radice Attributo Valore dell’attributo <catalogo> <libro genere=“tragedia”> <autore> <nome>William</nome> Nodo <cognome>Shakespeare</cognome> </autore> <lingua>English</lingua> <titolo> <titolo-originale>True Chronicle History of the Life and Death of King Lear anf His Three Valore del nodo Daughters(Quarto) - The Tragedy of King Lear (First Folio) Titolo </titolo-originale> <titolo-italiano>Re Lear</titolo-italiano> </titolo> <anno>1605</anno> </libro> </catalogo> 7 XML e XHTML XHTML è l’HTML basato su XML (stessa struttura e stesse regole) e prevede un uso più restrittivo dei tag: » I tag vuoti vanno chiusi con slash finale (/) » I tag vanno annidati correttamente » I caratteri speciali vanno gestiti Una pagina XHTML scritta in modo errata viene comunque interpretata ma non gode dei vantaggi dello standard XML, primo tra i quali la portabilità su browser e client differenti. 8 Sviluppare Template con Ariadne WCM 2. L’XML DI ARIADNE WCM Ariadne WCM come XML Engine Ariadne WCM espone in XML valido e ben formato i dati relativi alla struttura del sito (Navigazione, Categorie, ecc.) e ai contenuti di pagina: Albero delle Categorie Contenuto di un Articolo 10 Modello generale di funzionamento Database XML JSP SERVLET Lato applicativo XSL Lato template 11 XHTML Funzionamento in dettaglio XML XML XML XHTML Database JSP Trasformata.xsl Pagina.xsl SERVLET 12 Struttura.xsl XML e debug ?xml=3 ?xml=1 ?xml=2 » XML generato direttamente dall’applicazione. » Se non è visibile indica un (grave) malfunzionamento. » XML generato da trasformata.xsl. » Se restituisce errore indica errori nel file trasformata. » XML generato dal template interno (di pagina, di articolo o di scheda). » Se restituisce errore indica errori nel template interno. 13 Integrazione di XML esterno Ariadne WCM permette di importare dati XML provenienti da fonti esterne, e di esportare i propri contenuti. XML integrato nel componente feed 14 Sviluppare Template con Ariadne WCM 3. XSL E XPATH XSL e XPATH XSL XPATH XSL definisce le regole di trasformazione di un documento XML in un documento in altro formato (es. XML, XHTML, ecc.). XPath localizza gli elementi ai quali applicare le regole di trasformazione. 16 Trasformare un documento XML: XSL e XPath Le espressioni XSL e XPath servono per trasformare l’xml: <catalogo> <libro> <autore>William Shakespeare</autore> <titolo>Re Lear</titolo> <anno>1605</anno> </libro> </catalogo> <xsl:value-of select=“/catalogo/libro/autore”/> William Shakespeare Risultato 17 Documento Sorgente Trasformazione XPath » XPath è un linguaggio parte della famiglia XML che permette di individuare i nodi all'interno di un documento XML. » Il tipo più comune di espressione XPath (e quella che ha dato origine al suo nome) è la path expression: una sequenza di passi per raggiungere un nodo XML, partendo dal nodo corrente (percorso "relativo"). In alternativa è possibile utilizzare dei percorsi "assoluti" utilizzando come riferimento la radice del documento. » Il nodo in cui mi trovo si chiama contesto. 18 XPath: axis disponibili » attribute = @ (legge l'attributo del tag) » descendant-or-self = // (richiamiamo tutti i nodi indipendentemente dalla loro posizione) » Parent = .. (usato per riferirsi al nodo padre) » self = . (usato per riferirsi al nodo attualmente selezionato) 19 XPath: operatori e funzioni » Operatori booleani "and" e "or" e la funzione "not()". Le espressioni booleane possono essere unite con le parentesi () e combinate con operatori booleani and, or e not() » Operatori aritmetici + , - , * , div e mod. » Operatori di confronto: = , != , < , > , <= , >= . » Position() = restituisce un numero che rappresenta la posizione di questo nodo rispetto ai relativi fratelli dal XPath a questo punto. » count(node-set) = restituisce il numero di nodi che corrispondono alla relativa richiesta » concat(string, string, string*) = concatena tutte le stringhe. » contains(s1, s2) = restituisce true se s1 contiene s2. 20 XPath: esempi pratici <catalogo> <libro genere=“tragedia”> <autore>William Shakespeare</autore> <titolo>Re Lear</titolo> <anno tipo=“composizione”>1605</anno> <anno tipo=“rappresentazione”>1610</anno> </libro> <libro genere=“commedia”> <autore>Jean Racine</autore> <titolo>I litiganti</titolo> <anno tipo=“composizione”>1667</anno> <anno tipo=“rappresentazione”>1668</anno> </libro> </catalogo> /catalogo/libro/autore /catalogo/libro/@genere /catalogo/libro[2]/anno[1] /catalogo/libro*@genere=‘commedia’+/autore /catalogo/libro*position() = 1+/anno*@tipo=‘composizione’+ //anno /catalogo//libro//autore /catalogo/libro*@genere=‘tragedia’+/anno*@tipo=‘rappresentazione’+ //anno*@tipo=‘rappresentazione’+ /anno*@tipo=‘rappresentazione’+ 21 William Shakespeare tragedia 1677 Jean Racine 1605 1605 1610 1667 1668 William Shakespeare Jean Racine 1610 1610 1668 1610 Costrutti XSL | 1 Copiare <xsl:value-of select=”XPATH” /> <xsl:copy-of select=”XPATH” /> Fare cicli <xsl:for-each select=”XPATH”> ... </xsl:for-each> Fare controlli <xsl:if test=”XPATH”> ... </xsl:if> <xsl:choose> <xsl:when test=”XPATH”> ... </xsl:when> <xsl:when test=”XPATH”> ... </xsl:when> <xsl:otherwise> ... </xsl:otherwise> </xsl:choose> 22 Costrutti XSL | 2 Definire macro <xsl:template name=”STRING”> ... </xsl:template> <xsl:template match=”PATTERN”> ... </xsl:template> Richiamare macro <xsl:call-template name=”STRING” /> <xsl:apply-templates /> Definire variabili <xsl:variable name=”STRING”> ... </xsl:variable> Aggiungere attributi ai nodi <xsl:attribute name=”STRING”> ... </xsl:variable> 23 Uso delle graffe Quando si vuole assegnare un valore ad un attributo di un tag HTML, è preferibile specificare il percorso xpath all’interno dell’ATTRIBUTO mediante le graffe { }. Documento Sorgente <root> <sito label=“Google” link=“http://www.google.com” /> </root> <a href=“http://www.google.it”>Google</a> Risultato desiderato <a href=“{/root/sito/@link}“> <xsl:value-of select=“/root/sito/@label”/> </a> Soluzione <a> <xsl:attribute name=“href”>http://www.google.it</xsl:attribute> <xsl:value-of select=“/root/sito/@label”/> </a> 24 XSL: errori comuni PAGINA IN ERRORE: » Mancanza di una chiusura di un tag <a><b> ..<a> , <a><b></b> … etc. » Anche per tag particolari: <br> <hr> …. vanno scritti in questo modo: <br/> <hr/> … » Ordine chiusura tag: <a><b></a></b> … » Assenza totale o parziale di virgolette/apici: <img src=immagine.jpg/> , <img src=immagine.jpg"/> ERRORI DI VISUALIZZAZIONE: Tag aperti/chiusi in modo esplicito senza un contenuto: » <div></div> diventa <div> </div> » <script></script> diventa <script>…</script> 25 Namespace è, nella terminologia relativa all'informatica, una collezione di nomi di entità, definite dal programmatore, omogeneamente usate in uno o più file sorgente. Lo scopo dei namespace è quello di evitare confusione ed equivoci nel caso siano necessarie molte entità con nomi simili, fornendo il modo di raggruppare i nomi per categorie. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 26 DTD è uno strumento utilizzato dai programmatori il cui scopo è quello di definire le componenti ammesse nella costruzione di un documento XML. » Definisce gli elementi leciti all'interno del documento. Una specie di "vocabolario" per i file che lo useranno. » Definisce la struttura di ogni elemento. La struttura indica cosa può contenere ciascun elemento, l'ordine, la quantità di elementi che possono comparire e se sono opzionali o obbligatori. Una specie di "grammatica". » Dichiara una serie di attributi per ogni elemento e che valori possono o devono assumere questi attributi. » Fornisce infine alcuni meccanismi per semplificare la gestione del documento, come la possibilità di dichiarare entity e la possibilità di importare parti di altri DTD. <xsl:output doctype-system=“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd” /> 27 Sviluppare Template con Ariadne WCM 4. ASPETTI TECNICI AVANZATI INT, EXT, OUT: forrzare template e output E’ possibile"forzare" dei template, sia di pagina che di struttura, a una determinata pagina. TEMPLATE DI PAGINA - INT: http://www.dominio.it/site/home.html?int=feed/filenamexsl » » » int = parametro per modificare il template di pagina feed = percorso directory dove sarà presente il template da utilizzare a partire dalla cartella "xsl" (ved. repository) filenamexsl = nome dei file .xsl da utilizziare senza estensione. TEMPLATE DI STRUTTURA - EXT: http://www.dominio.it/site/home.html?ext=feed/filenamexsl » ext = parametro per modificare il template di struttura INT e EXT possono essere combinati: /site/home.html?int=feed/filenamexsl&ext=feed/filenamexsl PARAMETRO PER MODIFICARE LA RESPONSE - OUT: http://www.dominio.it/site/home.html?int=feed/filenamexsl&out=xml » out = forza il "content-type html/xml" della response 29 JSP di Ariadne WCM » » » » » » » » index.jsp (pagine impaginabili) articleCategory.jsp cardCategori.jsp documentCategory.jsp article.jsp card.jsp calendar.jsp getXslAssociation.jsp (per vedere l'associazione tra pagina ed xsl utilizzato) Vengono chiamate nel seguente modo: http://[dominio]/[webapp]/[jsp]?[paramentri] (Iparametri sono presi dal component "params" dell'xml) Es. http://zoroastro.ariadne.it/site/getXslAssociation.jsp?instance=1&channel=1 » Le .jsp non vengono "cacheate". 30 Il Repository in sintesi Root dell’istanza (instanceID) box : Template di impaginazione css1 : CSS layout sito files: documenti/immagini caricati nel CMS images: immagini statiche usate x il sito javascript : javascript utilizzati per il sito Template (versione on-line) del Canale article: Template XSL di Articolo card: Template XSL di Scheda node: Template XSL di Pagina template: Template XSL di Struttura transform: trasformata.xsl 31 La Cache di Ariadne WCM Per attivare/disattivare la cache: Configurazione --> Instanze --> Modifica --> "Cache HTML abilitata" --> Si/No WCM salva la cache tramite URL e la "disabilita" ogni volta che la pagina viene pubblicata. Per disattivare la cache » aggiungo all'URL un paramentro con una stringa casuale (disabilita la cache temporaneamente) » aggiungo all'URL il paramentro "flushCache“ (svuota la cache di istanza) » pubblico dalla redazione la pagina, modifico l'articolo impaginato o la categoria » presente nella pagina che ha subito una modifica. » modifico la data nella tabella "utility" del database. 32 Canonicalizzazione dell’URL Una pagina canonica è la versione preferita di una serie di pagine con contenuti molto simili. Aggiungi un link rel="canonical" alla sezione <head> della versione non canonica di ogni pagina HTML. Aggiungendo questo link e questo attributo, i proprietari del sito possono identificare i contenuti identici e suggerire a Google la pagina più utile tra tutte le pagine con contenuti identici, indicando quale mantenere in indice. Il link da utilizzare è generato da WCM e presente nell'xml: <link href="/on-line/formazione/home/tecnologia/lavatrici.html" rel="canonical"/> ES: nell'xsl di struttura: <xsl:copy-of select="/content/component[@type='page-title']/link"/> 33 Offset Lo si trova nel componente "installation-path“ (tag "instance-offset") ed è un numero. Questo numero va sommato ad ogni ID presente nei template (controlli statici su pagine,formati immagini, categorie..etc. etc.) in quanto rende flessibile il template in caso di esportazione/installazioni di instanze su macchine diverse. <xsl:variable name="offset“> <xsl:value-of select="//component[@type='installation-path']/instanceoffset"/> </xsl:variable> <xsl:for-each select="photo[@format=123+$offset]"> …. </xsl:for-each> 34 Output dei caratteri L'attributo "disable-output-escaping": » E' opzionale (di default è "no"). » "yes" indica che i caratteri speciali (come "<") usciranno così come sono. » "no" indica che i caratteri speciali (come "<") usciranno come " <". » ES: <xsl:value-of select="title" disable-output-escaping="yes" /> Il termine CDATA è usato per i dati di testo che non devono essere analizzati dal parser XML. Caratteri come "<" e "&" non sono validi in elementi XML perché: » "<" Genererà un errore perché il parser lo interpreta come l'inizio di un nuovo elemento. » "&" Genererà un errore perché il parser lo interpreta come l'inizio di una entità carattere. » Se inseriti all'interno di un CDATA questi elementi non vengono analizzati dal parse XML e quindi non generano errori. Un classico esempio di questa situazione può essere la scrittura di javascript all'interno del template. » Il CDATA inizia con "<![CDATA[" e termina con "]]>" 35 Sviluppare Template con Ariadne WCM 5. LINK DI APPROFONDIMENTO Link di approfondimento TUTORIAL W3SCHOOLS: » http://www.w3schools.com/xsl/default.asp » http://www.w3schools.com/xpath/ DOCUMENTAZIONE UFFICIALE DEI LINGUAGGI: » http://www.w3.org/TR/xsl/ » http://www.w3.org/TR/xpath/ TOOL ON-LINE PER TESTARE LE ESPRESSIONI: » http://markbucayan.appspot.com/xslt/index.html » http://www.shell-tools.net/index.php?op=xslt 37