WebCast Introduzione ad XML Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT [email protected] Italian BLog: http://blogs.devleap.com/paolo.blog www.devleap.com Agenda • • • • • • • Cosa è XML? Documenti well-formed e documenti validi Namespace XML XML InfoSet DTD e Xml Schema Definition XML Document Object Model (DOM) Presentare XML: CSS, XSL, XSLT e XPath, XSL-FO • Ricercare XML con XQuery www.devleap.com Cosa è XML ? • XML = eXtensible Markup Language • • • • • • METALINGUAGGIO permette di rappresentare informazioni in un formato testuale trasmissibile via Internet tra piattaforme diverse chiunque può leggerlo e scriverlo www.devleap.com C’erano già i file ASCII?!!! • • • • • • • Sì! Ma sono davvero comodi? I classici file CSV e/o tab delimited Non indicano la natura delle informazioni Non rappresentano dati gerarchici Non esistono regole di validazione E’ facile commettere errori Non hanno una struttura flessibile • Aggiungere o togliere un campo è un problema per il codice che li utilizza www.devleap.com XML invece • Presenta le informazioni in modo gerarchico • Utilizza dei marcatori (tag) per identificarle • Fornisce delle regole e degli strumenti per verificarne l’applicazione • Può descrivere in automatico la sua struttura • Possiamo trasformare XML da un formato ad un altro senza “troppo” sforzo • Separa completamente l’informazione da come sarà presentata www.devleap.com Il primo documento XML <?xml version=“1.0”?> <webCast id=“WCXML01”> <titolo>Introduzione ad XML</titolo> <data>17/02/2004</data> <note>Speriamo non sia troppo noioso !</note> </webCast> P.S.: Non è poi così diverso dall’HTML ... www.devleap.com XML 1.0 è una specifica del W3C • Cronologia di XML: • • • • 10 Febbraio 1998: W3C Recommendation 6 Ottobre 2000: Second Edition 4 Febbraio 2004: Third Edition 4 Febbraio 2004: XML 1.1 • Derivato da SGML (Standard Generalized Markup Language) www.devleap.com Obiettivi di “XML Working Group” • • • • • • • • • Deve essere utilizzabile in modo semplice su Internet. Deve supportare un gran numero di applicazioni. Deve essere compatibile con SGML. Deve essere facile lo sviluppo di programmi che elaborino documenti XML. Il numero di caratteristiche opzionali deve essere mantenuto al minimo possibile, idealmente a zero. I documenti XML dovrebbero essere leggibili da un uomo e ragionevolmente chiari. La progettazione XML dovrebbe essere rapida. La progettazione XML deve essere formale e concisa. I documenti XML devono essere facili da creare. www.devleap.com Quando conviene? • Scambio di informazioni • Gestione contenuti separati dal loro layout (anche Web) • Rappresentazione di (poche!) righe che provengono da un database e devono essere scambiate/persistite temporaneamente • Definizione di protocolli di dialogo multipiattaforma www.devleap.com Regole XML • Ci sono Regole sintattiche • COME dobbiamo scrivere le informazioni all’interno dei documenti • Ci possono essere Regole semantiche • COSA possiamo scrivere in un documento XML. www.devleap.com Regole di XML • Un documento XML che rispetta le regole sintattiche si dice Well-Formed • Un documento XML che rispetta le regole sintattiche e le regole semantiche si dice Valido www.devleap.com Regole sintattiche • Prologo (<?xml version=“1.0” encoding=“...”?><!-- commenti --><!DOCTYPE ...>) • Gerarchia di tag con elemento (=tag) radice • Tutti i tag devono essere chiusi • Nomi dei tag • I tag possono avere attributi • In alcuni casi i caratteri devono usare degli alias (entity name) • • • • • • • • • <note></note> => chiusura esplicita <note/> => chiusura implicita Iniziano con: _ o lettere (o altri caratteri Unicode 4.0 in XML 1.1) Possono contenere: lettere, cifre, -, _, . I nomi sono case sensitive: <note/> è diverso da <Note/> Unici come nome per ciascuno singolo tag Contenuto delimitato da “” o ‘’ I nome degli attributi rispettano le stesse regole dei nomi dei tag <, >, &, ecc. devono essere rappresentati come < > & www.devleap.com Documento XML Well-Formed? <?xml version="1.0"?> <webCast id='WCXML01"> <titolo>Introduzione ad XML</titolo> <data>17/02/2004</data> <agenda> <argomento>Cosa è XML?</argomento> <argomento>Documenti well-formed e documenti validi</argomento> <argomento>Namespace XML</argomento> <argomento>XML InfoSet</argomento> <argomento>DTD e Xml Schema Definition <argomento>XML Document Object Model (DOM)</argomento></argomento> <argomento>Presentare XML: CSS, XSL, XSLT e XPath, XSL-FO</argomento> <argomento>Ricercare XML: XQuery </Agenda></argomento> </webCast> www.devleap.com Documento XML Well-Formed? <?xml version="1.0"?> <webCast id='WCXML01"> <titolo>Introduzione ad XML</titolo> <data>17/02/2004</data> <agenda> <argomento>Cosa è XML?</argomento> <argomento>Documenti well-formed e documenti validi</argomento> <argomento>Namespace XML</argomento> <argomento>XML InfoSet</argomento> <argomento>DTD e Xml Schema Definition <argomento>XML Document Object Model (DOM)</argomento></argomento> <argomento>Presentare XML: CSS, XSL, XSLT e XPath, XSL-FO</argomento> <argomento>Ricercare XML: XQuery </Agenda></argomento> </webCast> www.devleap.com Documento XML Well-Formed! <?xml version="1.0" encoding="ISO-8859-1"?> <webCast id="WCXML01"> <titolo>Introduzione ad XML</titolo> <data>17/02/2004</data> <agenda> <argomento>Cosa è XML?</argomento> <argomento>Documenti well-formed e documenti validi</argomento> <argomento>Namespace XML</argomento> <argomento>XML InfoSet</argomento> <argomento>DTD e Xml Schema Definition</argomento> <argomento>XML Document Object Model (DOM)</argomento> <argomento>Presentare XML: CSS, XSL, XSLT e XPath, XSL-FO</argomento> <argomento>Ricercare XML: XQuery</argomento> </agenda> </webCast> www.devleap.com Validazione in base a • La struttura può essere definita con: • DTD (Document Type Definition) • XML Schema Definition (XSD) • Contengono gli elementi, gli attributi e i valori consentiti all’interno del documento • DTD viene usato per esempio per validare l’HTML www.devleap.com Esempio: quali sono... • I tag HTML ammessi... • Si può mettere un <TD> fuori da una <TABLE> ? • Può esserci una <TABLE> senza <TR> e <TD> • Queste regole semantiche sono definite da una DTD • http://www.w3.org/ www.devleap.com Document Type Definition • Specifica formale del “vocabolario” a nostra disposizione per comporre un documento • Serie di regole • cosa si può • cosa non si può • scrivere in un documento SGML (quindi anche HTML e XML • Sono scritti con una sintassi particolare www.devleap.com Esempio di DTD <!DOCTYPE webCast [ <!ELEMENT webCast (titolo, data, agenda) > <!ATTLIST webCast id ID #REQUIRED> <!ELEMENT titolo (#PCDATA) > <!ELEMENT data (#PCDATA) > <!ELEMENT agenda (argomento+) > <!ELEMENT argomento (#PCDATA) > ]> www.devleap.com Document Type Definition • Sono difficili da comprendere • Sono in un linguaggio diverso da quello usato per descrivere le informazioni • Ma ? • Se XML può descrivere tutto… www.devleap.com www.devleap.com ...Può descrivere anche lo • Schema di un documento • XML Schema infatti • Nasce dall’idea di utilizzare XML per descrivere la struttura di XML • Descrive le regole di validazione di un documento • Ci permette di tipizzare i nostri dati (intero, stringa, ecc.) • Sono estendibili ed aperti alla possibilità di supportare modifiche www.devleap.com XML Schema • Cosa è XML Schema Definition Language (XSD) ? • un meccanismo per definire la struttura, il contenuto e la semantica di un documento XML • un sistema basato su XML per tipizzare i dati • Una raccomandazione del W3C: http://www.w3.org/XML/Schema • Sta diventando il denominatore comune di ogni applicazione basata su XML • Ci permette di definire classi di documenti XML www.devleap.com Elementi di XSD • Namespace di riferimento: http://www.w3.org/2001/XMLSchema • Dichiarazione di istanze • Elementi • Attributi • Definizione di tipi • Semplici • Complessi • Restrizioni/Estensioni www.devleap.com Elementi ed Attributi <xsd:element name=“argomento” type=“xsd:string” /> <xsd:attribute name=“posizione” type=“xsd:int” /> <xsd:element name=“agenda” type=“agendaType” /> www.devleap.com Tipi Semplici • XSD contiene: • 19 tipi di dati di base • 25 tipi di dati derivati http://www.w3.org/TR/xmlschema-2/ www.devleap.com Definizione di un tipo semplice <xsd:simpleType> <xsd:restriction base="xsd:int"> <xsd:maxInclusive value=“1500"/> </xsd:restriction> </xsd:simpleType> www.devleap.com Tipi Complessi • Sono la descrizione di blocchi informativi costituiti da: • elementi • attributi • gruppi, sequenze, elenchi, ecc. <xsd:complexType name=“webCast"> <xsd:sequence> <xsd:element name=“titolo“ type="xsd:string"/> <xsd:element name=“data“ type="xsd:string"/> <xsd:element name=“agenda“ type=“agendaType"/> </xsd:sequence> <xsd:attribute name=“id” type=“xsd:ID” use=“required” /> </xsd:complexType> www.devleap.com Restrizioni sui tipi Enumerazioni: <xsd:attribute name=“valore" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value=“Valore1" /> <xsd:enumeration value=“Valore2" /> </xsd:restriction> </xsd:simpleType> </xsd:attribute> www.devleap.com Restrizioni sui tipi Regular Expressions: <xsd:attribute name=“codice" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value=“ [A-Z]{2} \d{4}" /> </xsd:restriction> </xsd:simpleType> </xsd:attribute> Forzo l’attributo codice ad avere una maschera tipo “PP2305” cioè 2 caratte e 4 cifre. www.devleap.com Restrizioni sui tipi Enumerazioni: <xsd:element name=“Peso"> <xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value=“50" /> <xsd:maxInclusive value=“130" /> </xsd:restriction> </xsd:simpleType> </xsd:element> Definisco un tag <Peso /> il cui valore dovrà essere compreso fra 50 e 130 Kg, estremi compresi. www.devleap.com Sequenze <xsd:element name=“products"> <xsd:complexType> <xsd:sequence minOccurs="0“ maxOccurs="unbounded"> <xsd:element name=“product"> ... </xsd:element> </xsd:sequence> </xs:complexType> </xs:element> www.devleap.com Conflitti di nomi ? • Ma se possiamo inventarci i nomi dei TAG a piacere • E possiamo costruire i documenti XML secondo le nostre esigenze nel solo rispetto delle regole sintattiche (Well-Formed) come facciamo a capirci ? • Cioè: come distinguo • <codice>88-8331-129-9</codice> (Codice ISBN) • <codice>PLRPLA75L03B157T</codice> (Codice Fiscale) www.devleap.com Conflitti di nomi ? No ! • Possiamo utilizzare nomi di TAG uguali con significati diversi • È sufficiente indicare nel documento XML quale significato stiamo dando ai nomi degli elementi e degli attributi • Questo si ottiene tramite i Namespace • I Namespace definiscono grammatiche www.devleap.com Nomi unici per i Namespace • Come possiamo assegnare nomi unici ai Namespace per non avere ulteriori conflitti ? • URI: • URL: http://www.nomeazienda.com/NS/Qualcosa • URN: urn:schemas-azienda-com:qualcosa www.devleap.com Definire i Namespace • Per definire un Namespace in un documento XML dobbiamo usare la parola chiave xmlns. • Se dobbiamo usare più Namespace nel nostro documento ne avremo uno di default e potremo indicarne di opzionali. <elemento xmlns=“URI”> <elemento xmlns=“URI” xmlns:due=“URI2”> www.devleap.com Un esempio concreto <?xml version="1.0"?> <ordine xmlns:prodotto=“http://www.azienda.com/” xmlns:cliente=“http://www.cliente.com/”> <prodotto:codice>1321</prodotto:codice> <cliente:codice>PP2301</cliente:codice> </ordine> www.devleap.com XML InfoSet • Pensiamo al documento XML come ad una gerarchia di nodi (attributi, elementi, testo, ecc.) • Pensiamo a trattare la gerarchia in memoria e non preoccupiamoci della sua natura fisica (file, stream, foglio di carta ...) • XML InfoSet 1.0 (e dal 4/2/2004 anche 1.1) è una Recommendation del W3C • Per pensare ad XML come albero di nodi informativi • E non più soltanto come file di testo con tag • Possiamo creare dei nostri formati (compressi, criptati, ecc.) che in memoria siano InfoSet ... www.devleap.com Ancora ragionamenti • E’ simile a HTML ? • Sì • Possiamo scrivere HTML come XML ? • Sì anche se non è proprio HTML … • Si può affermare che HTML è una grammatica XML ? • Insomma … quasi …. se fosse scritto “meglio” … SGML XML www.devleap.com HTML XML vs HTML => XHTML • In HTML si scrive <p>abc</p> • In XML <p>abc</p> • Ma in HTML si scrive <br> • In XML o <br></br> o <br /> • I tag devono sempre chiudersi per essere Wellformed, gli attributi devono avere i valori delimitati, ecc. • Idea: XHTML ... www.devleap.com SGML XHTML XML: Usiamolo ! • Ma dobbiamo sempre lavorare con Notepad ? • No! • Per esempio abbiamo il DOM (Document Object Model) • modello ad oggetti definito dal W3C per navigare e creare contenuti XML • è indipendente dalla piattaforma • esistono diverse implementazioni del DOM (Microsoft, IBM, Oracle, ecc.) www.devleap.com Document Object Model • Livello 1 • Raccomandazione W3C del 1-Oct-1998 • Implementato da Microsoft, IBM e altri • Livello 2 • Raccomandazione W3C del 13-Nov-2000 • Implementato da: MSXML 4.0 e .NET Framework • Livello 3 • Proposed Recommendation 05-Feb-2004 … www.devleap.com Come funziona ? • Rappresenta il contenuto di un documento XML tramite un in-memory tree • Ci permette di navigare il tree ragionando per gradi di parentela (nodi figli, nodo padre, ecc.) • Possiamo creare nuova informazione modificando il tree. www.devleap.com In-Memory Tree webCast @id titolo data agenda <?xml version=“1.0”?> <webCast id=“WCXML01”> <titolo>Introduzione ad XML</titolo> <data>17/02/2004</data> <agenda> <argomento>XML Schema</argomento> </agenda> </webCast> argomento argomento www.devleap.com XML DOM in-memory tree Legenda tipologie di Nodo Documento documentElement Elemento Attributo Text ... Text Text Text Testo E molti altri ... tutti che ereditano dall’interfaccia Node. www.devleap.com XML DOM : Document Document Molti { Solo 1 { Processing Instruction Comment Document Type Comment Processing Instruction root document.documentElement document.doctype www.devleap.com XML DOM : Node parentNode previousSibling nodeType = Element nodeName = customer nodeValue = null hasChildNodes = true nextSibling attributes firstChild childNodes NodeList lastChild ... www.devleap.com NamedNodeMap ... Presentare XML (CSS, XSL, XSLT e XPath, XSL-FO) www.devleap.com Cascading Style Sheets • Sono gli stessi che usiamo in HTML • Permettono di applicare dei colori e delle formattazioni ai tag • Sono comodi solo in rari casi • in cui non abbiamo attributi o non dobbiamo mostrarli • ci basta cambiare relativamente poco (font, colore, posizione) • Sono molto limitanti per XML ... ma ci sono www.devleap.com XSL, XSLT, XSL-FO e XPath • XSL = eXtensible Stylesheet Language Si occupa della trasformazione e della impaginazione di contenuti XML. (W3C Recommendation 15 October 2001) Si basa principalmente su: • XSLT = XSL for Transformation (Gestisce la trasformazioni e non la impaginazione dei contenuti) • XSL-FO = XSL Formatting Objects (Orientato alla visualizzazione ed impaginazione dei contenuti) • XPath = XML Path Language (Serve per costruire percorsi di ricerca di informazioni all’interno di documenti XML) www.devleap.com Perché XSLT? catalog item @SKU prodotti @Dex prodotto @Value codice item descrizione prezzo giacenza @SKU X @Dex … prodotto codice descrizione … www.devleap.com Funzionamento di XSLT XML Doc. XSLT Doc. Processore XSLT XML Doc. HTML Doc. TXT Doc. www.devleap.com XSLT è un linguaggio • Versione 1.0 del 16 Novembre 1999 • Namespace http://www.w3.org/1999/XSL/Transform • Si tratta di un linguaggio di programmazione a tutti gli effetti • Permette di gestire variabili, parametri, cicli, condizioni, funzioni • È una grammatica XML (ricordiamoci che XML è un METALINGUAGGIO) www.devleap.com Come funziona XSLT? • Lavora sulla struttura del documento • Costruisce l’albero del documento • Lo attraversa cercando le informazioni indicate • Produce un nuovo documento – XML, HTML, TXT - applicando le regole definite • Per cercare i nodi all’interno del documento XML vengono utilizzate regole XPath www.devleap.com XSL-FO • È una grammatica XML dell’ottobre 2001 pensata per formattare il contenuto dei documenti XML XSLT Doc. Processore XSLT XSL-FO Doc. Processore XSL-FO XML Doc. PDF Doc. www.devleap.com RTF Doc. Ricercare XML con XQuery • XQuery 1.0: An XML Query Language (W3C Working Draft 12 November 2003 http://www.w3.org/TR/xquery/) • Linguaggio basato su espressioni per eseguire selezioni di nodi sul data model (XML InfoSet) di uno o più documenti XML • È un linguaggio di selezione strongly-typed in quanto utilizza i tipi di dati XSD • Si tratta di un linguaggio fortemente legato a XPath 2.0 e XSLT 2.0 (tutti di imminente rilascio come W3C Recommendation) • Si basa sull’equivalenza: XQuery : XML = SQL : DataBase www.devleap.com Community • news.microsoft.com microsoft.public.it.dotnet.xml microsoft.public.it.dotnet.* • Comunità degli sviluppatori http://www.microsoft.com/italy/msdn/community/default.asp www.devleap.com MSDN Webcasts in italiano • Stay tuned: http://www.microsoft.com/italy/msdn/webcast/ • Prossimi WebCast su XML: XML e .NET Framework 24 Febbraio 2004 dalle 14.30 alle 16.00 Applicazioni reali di XML 2 Marzo 2004 dalle 14.30 alle 16.00 www.devleap.com Altre Informazioni • Dove posso ottenere maggiori informazioni • http://www.devleap.it/ • http://www.gotdotnet.com/ • http://www.microsoft.com/italy/msdn/ • Developer resources • Microsoft Visual Studio.NET • Microsoft .NET Framework SDK • Microsoft Developer Network www.devleap.com Introduzione ad XML I vostri feedback sono importanti • Scriveteci Grazie della partecipazione – A presto – [email protected] www.devleap.com