WebCast Introduzione ad XML Paolo Pialorsi MCSD.NET MCAD MCSE2000 MCSA MCT paolo@devleap.com Italian BLog: http://blogs.devleap.com/paolo.blog
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 multi-piattaforma 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 <note></note> => chiusura esplicita <note/> => chiusura implicita Nomi dei tag 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/> I tag possono avere attributi Unici come nome per ciascuno singolo tag Contenuto delimitato da “” o ‘’ I nome degli attributi rispettano le stesse regole dei nomi dei tag In alcuni casi i caratteri devono usare degli alias (entity name) <, >, &, 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
XML XML 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> <?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> <?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 ? 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 HTML XML www.devleap.com
XML vs HTML => XHTML SGML 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 /> SGML XHTML I tag devono sempre chiudersi per essere Well-formed, gli attributi devono avere i valori delimitati, ecc. Idea: XHTML ... www.devleap.com
XML: Usiamolo ! Ma dobbiamo sempre lavorare con Notepad ? 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 Livello 2 Livello 3 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 argomento argomento <?xml version=“1.0”?> <webCast id=“WCXML01”> <titolo>Introduzione ad XML</titolo> <data>17/02/2004</data> <agenda> <argomento>XML Schema</argomento> </agenda> </webCast> @id titolo data agenda argomento argomento www.devleap.com
XML DOM in-memory tree Legenda tipologie di Nodo Documento documentElement Elemento Attributo Text Testo ... Text E molti altri ... tutti che ereditano dall’interfaccia Node. Text Text www.devleap.com
XML DOM : Document document.documentElement document.doctype Molti { Processing Instruction Processing Instruction Comment Comment Solo 1 { Document Type root document.documentElement document.doctype www.devleap.com
XML DOM : Node ... ... NamedNodeMap NodeList parentNode nodeType = Element nodeName = customer nodeValue = null hasChildNodes = true previousSibling nextSibling firstChild NamedNodeMap ... attributes ... NodeList childNodes lastChild www.devleap.com
Presentare XML (CSS, XSL, XSLT e XPath, XSL-FO)
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 … descrizione codice prodotto prezzo giacenza prodotti … X www.devleap.com
Funzionamento di XSLT Processore XSLT XML Doc. XSLT Doc. HTML Doc. XML 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. XSL-FO Doc. Processore XSL-FO Processore XSLT XML Doc. PDF Doc. RTF Doc. www.devleap.com
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 Comunità degli sviluppatori 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 info@DevLeap.it www.devleap.com