www.devleap.comwww.devleap.com
WebCastWebCastIntroduzione ad Introduzione ad
XMLXML
Paolo PialorsiPaolo PialorsiMCSD.NET MCAD MCSE2000 MCSA MCTMCSD.NET MCAD MCSE2000 MCSA MCT
[email protected]@devleap.comomItalian BLog: Italian BLog: http://blogs.devleap.com/paolo.bloghttp://blogs.devleap.com/paolo.blog
www.devleap.com
AgendaAgenda• Cosa è XML?Cosa è XML?• Documenti well-formed e documenti Documenti well-formed e documenti
validivalidi• Namespace XMLNamespace XML• XML InfoSetXML InfoSet• DTD e Xml Schema DefinitionDTD e Xml Schema Definition• XML Document Object Model (DOM)XML Document Object Model (DOM)• Presentare XML: CSS, XSL, XSLT e XPath, Presentare XML: CSS, XSL, XSLT e XPath,
XSL-FOXSL-FO• Ricercare XML con XQueryRicercare XML con XQuery
www.devleap.com
Cosa è XML ?Cosa è XML ?
• XML = eXtensible Markup LanguageXML = eXtensible Markup Language
• METALINGUAGGIOMETALINGUAGGIO • permette di rappresentare informazionipermette di rappresentare informazioni• in un formato testuale in un formato testuale • trasmissibile via Internet trasmissibile via Internet • tra piattaforme diversetra piattaforme diverse• chiunque può leggerlo e scriverlochiunque può leggerlo e scriverlo
www.devleap.com
C’erano già i file ASCII?!!!C’erano già i file ASCII?!!!
• Sì! Ma sono davvero comodi?Sì! Ma sono davvero comodi?• I classici file CSV e/o tab delimitedI classici file CSV e/o tab delimited• Non indicano la natura delle informazioniNon indicano la natura delle informazioni• Non rappresentano dati gerarchiciNon rappresentano dati gerarchici• Non esistono regole di validazioneNon esistono regole di validazione• E’ facile commettere erroriE’ facile commettere errori• Non hanno una struttura flessibileNon hanno una struttura flessibile
• Aggiungere o togliere un campo è un Aggiungere o togliere un campo è un problema per il codice che li utilizzaproblema per il codice che li utilizza
www.devleap.com
XML inveceXML invece• Presenta le informazioni in modo gerarchicoPresenta le informazioni in modo gerarchico• Utilizza dei marcatori (tag) per identificarleUtilizza dei marcatori (tag) per identificarle• Fornisce delle regole e degli strumenti per Fornisce delle regole e degli strumenti per
verificarne l’applicazioneverificarne l’applicazione• Può descrivere in automatico la sua strutturaPuò descrivere in automatico la sua struttura• Possiamo trasformare XML da un formato ad Possiamo trasformare XML da un formato ad
un altro senza “troppo” sforzoun altro senza “troppo” sforzo• Separa completamente l’informazione da Separa completamente l’informazione da
come sarà presentatacome sarà presentata
www.devleap.com
Il primo documento XMLIl primo documento XML
<?xml version=“1.0”?><?xml version=“1.0”?>
<webCast id=“WCXML01”><webCast id=“WCXML01”>
<titolo>Introduzione ad XML</titolo><titolo>Introduzione ad XML</titolo>
<data>17/02/2004</data><data>17/02/2004</data>
<note>Speriamo non sia troppo noioso <note>Speriamo non sia troppo noioso !!</note></note>
</webCast></webCast>
P.S.: Non è poi così diverso dall’HTML ...P.S.: Non è poi così diverso dall’HTML ...
www.devleap.com
XML 1.0 è una specifica del XML 1.0 è una specifica del W3CW3C
• Cronologia di XML:Cronologia di XML:• 10 Febbraio 1998: W3C Recommendation10 Febbraio 1998: W3C Recommendation• 6 Ottobre 2000: Second Edition6 Ottobre 2000: Second Edition• 4 Febbraio 2004: Third Edition4 Febbraio 2004: Third Edition• 4 Febbraio 2004: XML 1.14 Febbraio 2004: XML 1.1
• Derivato da SGML (Standard Derivato da SGML (Standard Generalized Markup Language)Generalized Markup Language)
www.devleap.com
Obiettivi di “XML Working Obiettivi di “XML Working Group”Group”
• Deve essere utilizzabile in modo semplice su Deve essere utilizzabile in modo semplice su Internet. Internet.
• Deve supportare un gran numero di applicazioni. Deve supportare un gran numero di applicazioni. • Deve essere compatibile con SGML. Deve essere compatibile con SGML. • Deve essere facile lo sviluppo di programmi che Deve essere facile lo sviluppo di programmi che
elaborino documenti XML. elaborino documenti XML. • Il numero di caratteristiche opzionali deve essere Il numero di caratteristiche opzionali deve essere
mantenuto al minimo possibile, idealmente a zero. mantenuto al minimo possibile, idealmente a zero. • I documenti XML dovrebbero essere leggibili da un I documenti XML dovrebbero essere leggibili da un
uomo e ragionevolmente chiari. uomo e ragionevolmente chiari. • La progettazione XML dovrebbe essere rapida. La progettazione XML dovrebbe essere rapida. • La progettazione XML deve essere formale e concisa. La progettazione XML deve essere formale e concisa. • I documenti XML devono essere facili da creare. I documenti XML devono essere facili da creare.
www.devleap.com
Quando conviene?Quando conviene?
• Scambio di informazioniScambio di informazioni• Gestione contenuti separati dal loro Gestione contenuti separati dal loro
layout (anche Web)layout (anche Web)• Rappresentazione di (poche!) righe che Rappresentazione di (poche!) righe che
provengono da un database e devono provengono da un database e devono essere scambiate/persistite essere scambiate/persistite temporaneamentetemporaneamente
• Definizione di protocolli di dialogo Definizione di protocolli di dialogo multi-piattaformamulti-piattaforma
www.devleap.com
Regole XMLRegole XML
• Ci sono Ci sono Regole sintattiche Regole sintattiche • COME dobbiamo scrivere le informazioni COME dobbiamo scrivere le informazioni
all’interno dei documentiall’interno dei documenti
• Ci possono essereCi possono essereRegole semantiche Regole semantiche • COSA possiamo scrivere in un documento COSA possiamo scrivere in un documento
XML.XML.
www.devleap.com
Regole di XMLRegole di XML
• Un documento XML che rispetta le Un documento XML che rispetta le regole regole sintattichesintattiche si dice si dice Well-FormedWell-Formed
• Un documento XML che rispetta le Un documento XML che rispetta le regole sintattiche e le regole regole sintattiche e le regole semantichesemantiche si dice si dice ValidoValido
www.devleap.com
Regole sintatticheRegole sintattiche• Prologo (<?xml version=“1.0” encoding=“...”?><!-- commenti --><!Prologo (<?xml version=“1.0” encoding=“...”?><!-- commenti --><!
DOCTYPE ...>)DOCTYPE ...>)
• Gerarchia di tag con elemento (=tag) radiceGerarchia di tag con elemento (=tag) radice
• Tutti i tag devono essere chiusiTutti i tag devono essere chiusi• <note></note> => chiusura esplicita<note></note> => chiusura esplicita• <note/> => chiusura implicita<note/> => chiusura implicita
• Nomi dei tagNomi dei tag• Iniziano con: _ o lettere (o altri caratteri Unicode 4.0 in XML 1.1)Iniziano con: _ o lettere (o altri caratteri Unicode 4.0 in XML 1.1)• Possono contenere: lettere, cifre, -, _, .Possono contenere: lettere, cifre, -, _, .• I nomi sono case sensitive: <note/> è diverso da <Note/>I nomi sono case sensitive: <note/> è diverso da <Note/>
• I tag possono avere attributiI tag possono avere attributi• Unici come nome per ciascuno singolo tagUnici come nome per ciascuno singolo tag• Contenuto delimitato da “” o ‘’Contenuto delimitato da “” o ‘’• I nome degli attributi rispettano le stesse regole dei nomi dei tagI nome degli attributi rispettano le stesse regole dei nomi dei tag
• In alcuni casi i caratteri devono usare degli alias (entity name)In alcuni casi i caratteri devono usare degli alias (entity name)• <, >, &, ecc. devono essere rappresentati come < > &<, >, &, ecc. devono essere rappresentati come < > &
www.devleap.com
Documento XML Well-Formed?Documento XML Well-Formed?<?xml version="1.0"?><?xml version="1.0"?><webCast id='WCXML01"><webCast id='WCXML01">
<titolo>Introduzione ad XML</titolo><titolo>Introduzione ad XML</titolo><data>17/02/2004</data><data>17/02/2004</data><agenda><agenda>
<argomento>Cosa è XML?</argomento><argomento>Cosa è XML?</argomento><argomento>Documenti well-formed e documenti <argomento>Documenti well-formed e documenti
validi</argomento>validi</argomento><argomento>Namespace XML</argomento><argomento>Namespace XML</argomento><argomento>XML InfoSet</argomento><argomento>XML InfoSet</argomento><argomento>DTD e Xml Schema Definition<argomento>DTD e Xml Schema Definition<argomento>XML Document Object Model <argomento>XML Document Object Model
(DOM)</argomento></argomento>(DOM)</argomento></argomento><argomento>Presentare XML: CSS, XSL, XSLT e XPath, <argomento>Presentare XML: CSS, XSL, XSLT e XPath,
XSL-FO</argomento>XSL-FO</argomento><argomento>Ricercare XML: XQuery<argomento>Ricercare XML: XQuery
</Agenda></argomento></Agenda></argomento></webCast></webCast>
www.devleap.com
Documento XML Well-Formed?Documento XML Well-Formed?<?xml version="1.0"?><?xml version="1.0"?><webCast id=<webCast id=''WCXML01WCXML01"">>
<titolo>Introduzione ad XML</titolo><titolo>Introduzione ad XML</titolo><data>17/02/2004</data><data>17/02/2004</data><<aagenda>genda>
<argomento>Cosa <argomento>Cosa èè XML?</argomento> XML?</argomento><argomento>Documenti well-formed e documenti <argomento>Documenti well-formed e documenti
validi</argomento>validi</argomento><argomento>Namespace XML</argomento><argomento>Namespace XML</argomento><argomento>XML InfoSet</argomento><argomento>XML InfoSet</argomento><argomento><argomento>DTD e Xml Schema DefinitionDTD e Xml Schema Definition<argomento><argomento>XML Document Object Model XML Document Object Model
(DOM)(DOM)</argomento></argomento></argomento></argomento><argomento>Presentare XML: CSS, XSL, XSLT e XPath, <argomento>Presentare XML: CSS, XSL, XSLT e XPath,
XSL-FO</argomento>XSL-FO</argomento><argomento><argomento>Ricercare XML: XQueryRicercare XML: XQuery
</</AAgenda>genda></argomento></argomento></webCast></webCast>
www.devleap.com
Documento XML Well-Formed!Documento XML Well-Formed!<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><webCast id="WCXML01"><webCast id="WCXML01">
<titolo>Introduzione ad XML</titolo><titolo>Introduzione ad XML</titolo><data>17/02/2004</data><data>17/02/2004</data><agenda><agenda>
<argomento>Cosa è XML?</argomento><argomento>Cosa è XML?</argomento><argomento>Documenti well-formed e documenti <argomento>Documenti well-formed e documenti
validi</argomento>validi</argomento><argomento>Namespace XML</argomento><argomento>Namespace XML</argomento><argomento>XML InfoSet</argomento><argomento>XML InfoSet</argomento><argomento>DTD e Xml Schema Definition</argomento><argomento>DTD e Xml Schema Definition</argomento><argomento>XML Document Object Model (DOM)</argomento><argomento>XML Document Object Model (DOM)</argomento><argomento>Presentare XML: CSS, XSL, XSLT e XPath, <argomento>Presentare XML: CSS, XSL, XSLT e XPath,
XSL-FO</argomento>XSL-FO</argomento><argomento>Ricercare XML: XQuery</argomento><argomento>Ricercare XML: XQuery</argomento>
</agenda></agenda></webCast></webCast>
www.devleap.com
Validazione in base a Validazione in base a
• La struttura può essere definita con:La struttura può essere definita con:• DTD (Document Type Definition) DTD (Document Type Definition) • XML Schema Definition (XSD)XML Schema Definition (XSD)
• Contengono gli elementi, gli attributi e i Contengono gli elementi, gli attributi e i valori consentiti all’interno del documentovalori consentiti all’interno del documento
• DTD viene usato per esempio per validare DTD viene usato per esempio per validare l’HTMLl’HTML
www.devleap.com
Esempio: quali sono...Esempio: quali sono...
• I tag HTML ammessi...I tag HTML ammessi...• Si può mettere un <TD> fuori da una Si può mettere un <TD> fuori da una
<TABLE> ?<TABLE> ?• Può esserci una <TABLE> senza <TR> Può esserci una <TABLE> senza <TR>
e <TD>e <TD>• Queste regole semantiche sono definite Queste regole semantiche sono definite
da una DTDda una DTD
• http://www.w3.org/http://www.w3.org/
www.devleap.com
Document Type DefinitionDocument Type Definition
• Specifica formale del “vocabolario” a nostra Specifica formale del “vocabolario” a nostra disposizione per comporre un documentodisposizione per comporre un documento
• Serie di regoleSerie di regole• cosa si può cosa si può • cosa non si può cosa non si può • scrivere in un documento SGML (quindi anche scrivere in un documento SGML (quindi anche
HTML e XMLHTML e XML
• Sono scritti con una sintassi particolareSono scritti con una sintassi particolare
www.devleap.com
Esempio di DTDEsempio di DTD
<!DOCTYPE webCast [<!DOCTYPE webCast [
<!ELEMENT webCast (titolo, data, <!ELEMENT webCast (titolo, data, agenda) >agenda) >
<!ATTLIST webCast id ID #REQUIRED><!ATTLIST webCast id ID #REQUIRED>
<!ELEMENT titolo (#PCDATA) ><!ELEMENT titolo (#PCDATA) >
<!ELEMENT data (#PCDATA) ><!ELEMENT data (#PCDATA) >
<!ELEMENT agenda (argomento+) ><!ELEMENT agenda (argomento+) >
<!ELEMENT argomento (#PCDATA) ><!ELEMENT argomento (#PCDATA) >
]>]>
www.devleap.com
Document Type DefinitionDocument Type Definition
• Sono difficili da comprendereSono difficili da comprendere• Sono in un linguaggio diverso da quello Sono in un linguaggio diverso da quello
usato per descrivere le informazioniusato per descrivere le informazioni
• Ma ? Ma ? • Se XML può descrivere tutto…Se XML può descrivere tutto…
www.devleap.com
XMXMLL
XMXMLL
www.devleap.com
...Può descrivere anche lo...Può descrivere anche lo
• SSchema di un documentochema di un documento• XML Schema infattiXML Schema infatti
• Nasce dall’idea di utilizzare XML per Nasce dall’idea di utilizzare XML per descrivere la struttura di XMLdescrivere la struttura di XML
• Descrive le regole di validazione di un Descrive le regole di validazione di un documentodocumento
• Ci permette di tipizzare i nostri dati Ci permette di tipizzare i nostri dati (intero, stringa, ecc.)(intero, stringa, ecc.)
• Sono estendibili ed aperti alla possibilità di Sono estendibili ed aperti alla possibilità di supportare modifichesupportare modifiche
www.devleap.com
XML SchemaXML Schema
• Cosa è XML Schema Definition Language Cosa è XML Schema Definition Language (XSD) ?(XSD) ?• un meccanismo per definire la struttura, il un meccanismo per definire la struttura, il
contenuto e la semantica di un documento XMLcontenuto e la semantica di un documento XML• un sistema basato su XML per tipizzare i datiun sistema basato su XML per tipizzare i dati• Una raccomandazione del W3C:Una raccomandazione del W3C:
http://www.w3.org/XML/Schemahttp://www.w3.org/XML/Schema
• Sta diventando il denominatore comune di ogni Sta diventando il denominatore comune di ogni applicazione basata su XMLapplicazione basata su XML
• Ci permette di definire classi di documenti XMLCi permette di definire classi di documenti XML
www.devleap.com
Elementi di XSDElementi di XSD• Namespace di riferimento:Namespace di riferimento:
http://www.w3.org/2001/XMLSchemahttp://www.w3.org/2001/XMLSchema
• Dichiarazione di istanzeDichiarazione di istanze• ElementiElementi• AttributiAttributi
• Definizione di tipiDefinizione di tipi• SempliciSemplici• ComplessiComplessi• Restrizioni/EstensioniRestrizioni/Estensioni
www.devleap.com
Elementi ed AttributiElementi ed Attributi
<xsd:element name=“argomento” <xsd:element name=“argomento” type=“xsd:string” />type=“xsd:string” />
<xsd:attribute name=“posizione” <xsd:attribute name=“posizione” type=“xsd:int” />type=“xsd:int” />
<xsd:element name=“agenda” <xsd:element name=“agenda” type=“agendaType” />type=“agendaType” />
www.devleap.com
Tipi SempliciTipi Semplici• XSD contiene:XSD contiene:
• 19 tipi di dati di 19 tipi di dati di basebase
• 25 tipi di dati 25 tipi di dati derivatiderivati
http://www.w3.org/TR/xmlschema-http://www.w3.org/TR/xmlschema-2/ 2/
www.devleap.com
Definizione di un tipo sempliceDefinizione di un tipo semplice
<xsd:simpleType><xsd:simpleType>
<xsd:restriction base="xsd:int"><xsd:restriction base="xsd:int">
<xsd:maxInclusive value=“1500"/><xsd:maxInclusive value=“1500"/>
</xsd:restriction></xsd:restriction>
</xsd:simpleType></xsd:simpleType>
www.devleap.com
Tipi ComplessiTipi Complessi• Sono la descrizione di blocchi informativi costituiti Sono la descrizione di blocchi informativi costituiti
da:da:• elementielementi• attributiattributi• gruppi, sequenze, elenchi, ecc.gruppi, sequenze, elenchi, ecc.
<xsd:complexType name=“webCast"><xsd:complexType name=“webCast"> <xsd:sequence><xsd:sequence> <xsd:element name=“titolo“ type="xsd:string"/><xsd:element name=“titolo“ type="xsd:string"/> <xsd:element name=“data“ type="xsd:string"/><xsd:element name=“data“ type="xsd:string"/> <xsd:element name=“agenda“ type=“agendaType"/><xsd:element name=“agenda“ type=“agendaType"/> </xsd:sequence></xsd:sequence> <xsd:attribute name=“id” type=“xsd:ID” use=“required” /><xsd:attribute name=“id” type=“xsd:ID” use=“required” /></xsd:complexType></xsd:complexType>
www.devleap.com
Restrizioni sui tipiRestrizioni sui tipi
Enumerazioni: Enumerazioni:
<xsd:attribute name=“valore" use="required"><xsd:attribute name=“valore" use="required"><xsd:simpleType><xsd:simpleType>
<xsd:restriction base="xsd:string"><xsd:restriction base="xsd:string">
<xsd:enumeration value=“Valore1" /> <xsd:enumeration value=“Valore1" />
<xsd:enumeration value=“Valore2" /> <xsd:enumeration value=“Valore2" />
</xsd:restriction></xsd:restriction>
</xsd:simpleType></xsd:simpleType>
</xsd:attribute></xsd:attribute>
www.devleap.com
Restrizioni sui tipiRestrizioni sui tipi
Regular Expressions: Regular Expressions:
<xsd:attribute name=“codice" use="required"><xsd:attribute name=“codice" use="required"><xsd:simpleType><xsd:simpleType>
<xsd:restriction base="xsd:string"><xsd:restriction base="xsd:string">
<xsd:pattern value=“ [A-Z]{2} \d{4}" /> <xsd:pattern value=“ [A-Z]{2} \d{4}" />
</xsd:restriction></xsd:restriction>
</xsd:simpleType></xsd:simpleType>
</xsd:attribute></xsd:attribute>
Forzo l’attributo codice ad avere una maschera tipo Forzo l’attributo codice ad avere una maschera tipo “PP2305” cioè 2 caratte e 4 cifre.“PP2305” cioè 2 caratte e 4 cifre.
www.devleap.com
Restrizioni sui tipiRestrizioni sui tipi
Enumerazioni: Enumerazioni:
<xsd:element name=“Peso"><xsd:element name=“Peso"><xsd:simpleType><xsd:simpleType>
<xsd:restriction base="xsd:integer"><xsd:restriction base="xsd:integer">
<xsd:minInclusive value=“50" /> <xsd:minInclusive value=“50" />
<xsd:maxInclusive value=“130" /> <xsd:maxInclusive value=“130" />
</xsd:restriction></xsd:restriction>
</xsd:simpleType></xsd:simpleType>
</xsd:element></xsd:element>
Definisco un tag <Peso /> il cui valore dovrà essere compreso fra Definisco un tag <Peso /> il cui valore dovrà essere compreso fra 50 e 13050 e 130Kg, estremi compresi.Kg, estremi compresi.
www.devleap.com
SequenzeSequenze
<xsd:element name=“products"><xsd:element name=“products">
<xsd:complexType><xsd:complexType>
<xsd:sequence minOccurs="0“ <xsd:sequence minOccurs="0“ maxOccurs="unbounded">maxOccurs="unbounded">
<xsd:element name=“product"><xsd:element name=“product">
......
</xsd:element></xsd:element>
</xsd:sequence></xsd:sequence>
</xs:complexType></xs:complexType>
</xs:element> </xs:element>
www.devleap.com
Conflitti di nomi ?Conflitti di nomi ?• Ma se possiamo inventarci i nomi dei TAG a Ma se possiamo inventarci i nomi dei TAG a
piacerepiacere
• E possiamo costruire i documenti XML secondo le E possiamo costruire i documenti XML secondo le nostre esigenze nel solo rispetto delle regole nostre esigenze nel solo rispetto delle regole sintattiche (Well-Formed) come facciamo a sintattiche (Well-Formed) come facciamo a capirci ?capirci ?
• Cioè: come distinguoCioè: come distinguo• <codice>88-8331-129-9</codice> (Codice ISBN)<codice>88-8331-129-9</codice> (Codice ISBN)• <codice>PLRPLA75L03B157T</codice> (Codice <codice>PLRPLA75L03B157T</codice> (Codice
Fiscale)Fiscale)
www.devleap.com
Conflitti di nomi ? No !Conflitti di nomi ? No !• Possiamo utilizzare nomi di TAG uguali con Possiamo utilizzare nomi di TAG uguali con
significati diversisignificati diversi
• È sufficiente indicare nel documento XML È sufficiente indicare nel documento XML quale significato stiamo dando ai nomi degli quale significato stiamo dando ai nomi degli elementi e degli attributielementi e degli attributi
• Questo si ottiene tramite i Questo si ottiene tramite i NamespaceNamespace
• I Namespace definiscono grammaticheI Namespace definiscono grammatiche
www.devleap.com
Nomi unici per i NamespaceNomi unici per i Namespace
• Come possiamo assegnare nomi unici Come possiamo assegnare nomi unici ai Namespace per non avere ulteriori ai Namespace per non avere ulteriori conflitti ?conflitti ?
• URI:URI:• URL: URL:
http://www.nomeazienda.com/NS/Qualcosahttp://www.nomeazienda.com/NS/Qualcosa• URN:URN:
urn:schemas-azienda-com:qualcosaurn:schemas-azienda-com:qualcosa
www.devleap.com
Definire i NamespaceDefinire i Namespace• Per definire un Namespace in un Per definire un Namespace in un
documento XML dobbiamo usare la documento XML dobbiamo usare la parola chiave xmlns.parola chiave xmlns.
• Se dobbiamo usare più Namespace nel Se dobbiamo usare più Namespace nel nostro documento ne avremo uno di nostro documento ne avremo uno di default e potremo indicarne di opzionali.default e potremo indicarne di opzionali.
<elemento xmlns=“URI”><elemento xmlns=“URI”>
<elemento xmlns=“URI” xmlns:due=“URI2”><elemento xmlns=“URI” xmlns:due=“URI2”>
www.devleap.com
Un esempio concretoUn esempio concreto
<?xml version="1.0"?><?xml version="1.0"?>
<ordine <ordine xmlns:prodotto=“http://www.azienda.comxmlns:prodotto=“http://www.azienda.com/” /” xmlns:cliente=“http://www.cliente.com/”>xmlns:cliente=“http://www.cliente.com/”>
<prodotto:codice>1321</prodotto:codice><prodotto:codice>1321</prodotto:codice>
<cliente:codice>PP2301</cliente:codice><cliente:codice>PP2301</cliente:codice>
</ordine></ordine>
<?xml version="1.0"?><?xml version="1.0"?>
<ordine <ordine xmlns:xmlns:prodottoprodotto=“http://www.azienda.co=“http://www.azienda.com/” m/” xmlns:cliente=“http://www.cliente.com/”xmlns:cliente=“http://www.cliente.com/”>>
<<prodottoprodotto:codice>1321</:codice>1321</prodottoprodotto:codice>:codice>
<cliente:codice>PP2301</cliente:codice><cliente:codice>PP2301</cliente:codice>
</ordine></ordine>
<?xml version="1.0"?><?xml version="1.0"?>
<ordine <ordine xmlns:xmlns:prodottoprodotto=“http://www.azienda.co=“http://www.azienda.com/” m/” xmlns:xmlns:clientecliente=“http://www.cliente.com/”=“http://www.cliente.com/”>>
<<prodottoprodotto:codice>1321</:codice>1321</prodottoprodotto:codice>:codice>
<<clientecliente:codice>PP2301</:codice>PP2301</clientecliente:codice>:codice>
</ordine></ordine>
www.devleap.com
XML InfoSetXML InfoSet• Pensiamo al documento XML come ad una Pensiamo al documento XML come ad una
gerarchia di nodi (attributi, elementi, testo, gerarchia di nodi (attributi, elementi, testo, ecc.)ecc.)
• Pensiamo a trattare la gerarchia in memoria e Pensiamo a trattare la gerarchia in memoria e non preoccupiamoci della sua natura fisica (file, non preoccupiamoci della sua natura fisica (file, stream, foglio di carta stream, foglio di carta ...) ...)
• XML InfoSet 1.0 (e dal 4/2/2004 anche 1.1) è XML InfoSet 1.0 (e dal 4/2/2004 anche 1.1) è una Recommendation del W3Cuna Recommendation del W3C• Per pensare ad XML come albero di nodi informativiPer pensare ad XML come albero di nodi informativi• E non più soltanto come file di testo con tagE non più soltanto come file di testo con tag• Possiamo creare dei nostri formati (compressi, Possiamo creare dei nostri formati (compressi,
criptati, ecc.) che in memoria siano InfoSet ...criptati, ecc.) che in memoria siano InfoSet ...
www.devleap.com
Ancora ragionamentiAncora ragionamenti
• E’ simile a HTML ?E’ simile a HTML ?• SìSì
• Possiamo scrivere HTML come XML ?Possiamo scrivere HTML come XML ?• Sì anche se non è proprio HTML …Sì anche se non è proprio HTML …
SGML
HTML
XML
• Si può affermare che Si può affermare che HTML è una grammatica HTML è una grammatica XML ? XML ? • Insomma … quasi …. se Insomma … quasi …. se
fosse scritto “meglio” …fosse scritto “meglio” …
www.devleap.com
XML vs HTML => XHTMLXML vs HTML => XHTML• In HTML si scrive <p>abc</p>In HTML si scrive <p>abc</p>• In XML <p>abc</p>In XML <p>abc</p>
• Ma in HTML si scrive <br>Ma in HTML si scrive <br>• In XML o <br><In XML o <br><//br> o <br br> o <br //>>
• I tag devono sempre I tag devono sempre chiudersi per essere chiudersi per essere Well-formed, gli attributi Well-formed, gli attributi devono avere i valori devono avere i valori delimitati, ecc.delimitati, ecc.
• Idea: XHTML ...Idea: XHTML ...
SGML
XHTML
www.devleap.com
XML: Usiamolo !XML: Usiamolo !
• Ma dobbiamo sempre lavorare con Notepad Ma dobbiamo sempre lavorare con Notepad ??• No!No!
• Per esempio abbiamo il DOM (Document Per esempio abbiamo il DOM (Document Object Model)Object Model)• modello ad oggetti definito dal W3C per modello ad oggetti definito dal W3C per
navigare e creare contenuti XMLnavigare e creare contenuti XML• è indipendente dalla piattaformaè indipendente dalla piattaforma• esistono diverse implementazioni del DOM esistono diverse implementazioni del DOM
(Microsoft, IBM, Oracle, ecc.)(Microsoft, IBM, Oracle, ecc.)
www.devleap.com
Document Object ModelDocument Object Model• Livello 1Livello 1
• Raccomandazione W3C del 1-Oct-1998Raccomandazione W3C del 1-Oct-1998• Implementato da Microsoft, IBM e altriImplementato da Microsoft, IBM e altri
• Livello 2Livello 2• Raccomandazione W3C del 13-Nov-2000Raccomandazione W3C del 13-Nov-2000• Implementato da: MSXML 4.0 e .NET FrameworkImplementato da: MSXML 4.0 e .NET Framework
• Livello 3Livello 3• Proposed Recommendation 05-Feb-2004 …Proposed Recommendation 05-Feb-2004 …
www.devleap.com
Come funziona ?Come funziona ?
• Rappresenta il contenuto di un Rappresenta il contenuto di un documento XML tramite un in-memory documento XML tramite un in-memory treetree
• Ci permette di navigare il tree ragionando Ci permette di navigare il tree ragionando per gradi di parentela (nodi figli, nodo per gradi di parentela (nodi figli, nodo padre, ecc.)padre, ecc.)
• Possiamo creare nuova informazione Possiamo creare nuova informazione modificando il tree.modificando il tree.
www.devleap.com
In-Memory TreeIn-Memory Tree
titolotitolo
@id@id
webCastwebCast
datadata
agendaagenda
<?xml version=“1.0”?>
<webCast id=“WCXML01”>
<titolo>Introduzione ad XML</titolo>
<data>17/02/2004</data>
<agenda> <argomento>XML Schema</argomento>
</agenda>
</webCast>
argomentoargomento
argomentoargomento
www.devleap.com
......
Attributo
Documento
TextTextTextText
TextText
XML DOM in-memory treeXML DOM in-memory tree
Elemento
Testo
Legenda tipologie di Nodo
TextText
E molti altri ... tutti che ereditano dall’interfaccia Node.
documentElement
www.devleap.com
XML DOM : DocumentXML DOM : Document
CommentComment
root
ProcessingProcessingInstructionInstruction
Document
DocumentDocumentTypeType
CommentCommentProcessingProcessingInstructionInstructionMoltiMolti {{
Solo 1Solo 1 {{
document.doctypedocument.documentElement
www.devleap.com
XML DOM : NodeXML DOM : Node
nodeType = Element
nodeName = customer
nodeValue = null
hasChildNodes = truepreviousSibling nextSibling
parentNode
NamedNodeMapNamedNodeMap
...
attributesfirstChild
lastChild
...
NodeListNodeList
childNodes
www.devleap.comwww.devleap.com
Presentare XMLPresentare XML (CSS, XSL, XSLT e XPath, XSL-FO)(CSS, XSL, XSLT e XPath, XSL-FO)
www.devleap.com
Cascading Style SheetsCascading Style Sheets• Sono gli stessi che usiamo in HTMLSono gli stessi che usiamo in HTML
• Permettono di applicare dei colori e delle Permettono di applicare dei colori e delle formattazioni ai tagformattazioni ai tag
• Sono comodi solo in rari casiSono comodi solo in rari casi• in cui non abbiamo attributi o non dobbiamo in cui non abbiamo attributi o non dobbiamo
mostrarlimostrarli• ci basta cambiare relativamente poco (font, colore, ci basta cambiare relativamente poco (font, colore,
posizione)posizione)
• Sono molto limitanti per XML ... ma ci sono Sono molto limitanti per XML ... ma ci sono
www.devleap.com
XSL, XSLT, XSL-FO e XPathXSL, XSLT, XSL-FO e XPath• XSL = eXtensible Stylesheet LanguageXSL = eXtensible Stylesheet Language
Si occupa della trasformazione e della impaginazione di contenuti Si occupa della trasformazione e della impaginazione di contenuti XML.XML.(W3C Recommendation 15 October 2001)(W3C Recommendation 15 October 2001)
Si basa principalmente su:Si basa principalmente su:
• XSLT = XSL for TransformationXSLT = XSL for Transformation(Gestisce la trasformazioni e non la impaginazione dei contenuti)(Gestisce la trasformazioni e non la impaginazione dei contenuti)
• XSL-FO = XSL Formatting ObjectsXSL-FO = XSL Formatting Objects(Orientato alla visualizzazione ed impaginazione dei contenuti)(Orientato alla visualizzazione ed impaginazione dei contenuti)
• XPath = XML Path LanguageXPath = XML Path Language(Serve per costruire percorsi di ricerca di informazioni (Serve per costruire percorsi di ricerca di informazioni all’interno di documenti XML)all’interno di documenti XML)
www.devleap.com
Perché XSLT?Perché XSLT?
descrizionedescrizione
codicecodice
prodottoprodotto
prezzoprezzo
giacenzagiacenza
prodottiprodotti
prodottoprodotto
codicecodice
descrizionedescrizione
……
@Dex@Dex
@SKU@SKU
itemitem
@Value@Value
catalogcatalog
itemitem
@SKU@SKU
@Dex@Dex
……
XX
www.devleap.com
Funzionamento di XSLTFunzionamento di XSLT
XMLDoc.
XSLTDoc.
HTMLDoc.
XMLDoc.
TXTDoc.
Processore
XSLT
www.devleap.com
XSLT è un linguaggioXSLT è un linguaggio
• Versione 1.0 del 16 Novembre 1999Versione 1.0 del 16 Novembre 1999• NamespaceNamespace
http://www.w3.org/1999/XSL/Transformhttp://www.w3.org/1999/XSL/Transform• Si tratta di un linguaggio di Si tratta di un linguaggio di
programmazione a tutti gli effettiprogrammazione a tutti gli effetti• Permette di gestire variabili, parametri, Permette di gestire variabili, parametri,
cicli, condizioni, funzionicicli, condizioni, funzioni• È una grammatica XML È una grammatica XML
(ricordiamoci che XML è un METALINGUAGGIO)(ricordiamoci che XML è un METALINGUAGGIO)
www.devleap.com
Come funziona XSLT?Come funziona XSLT?
• Lavora sulla Lavora sulla strutturastruttura del documento del documento• Costruisce l’albero del documentoCostruisce l’albero del documento• Lo attraversa cercando le informazioni Lo attraversa cercando le informazioni
indicateindicate• Produce un nuovo documento – Produce un nuovo documento – XML, XML,
HTML, TXTHTML, TXT - applicando le regole definite - applicando le regole definite• Per cercare i nodi all’interno del Per cercare i nodi all’interno del
documento XML vengono utilizzate documento XML vengono utilizzate regole XPathregole XPath
www.devleap.com
XSL-FOXSL-FO
• È una grammatica XML dell’ottobre 2001 pensata È una grammatica XML dell’ottobre 2001 pensata per formattare il contenuto dei documenti XMLper formattare il contenuto dei documenti XML
XMLDoc.
XSLTDoc.
XSL-FODoc.
PDFDoc.
RTFDoc.
Processore
XSLT
Processore
XSL-FO
www.devleap.com
Ricercare XML con XQueryRicercare XML con XQuery• XQuery 1.0: An XML Query LanguageXQuery 1.0: An XML Query Language
(W3C Working Draft 12 November 2003(W3C Working Draft 12 November 2003 http://www.w3.org/TR/xquery/) http://www.w3.org/TR/xquery/)
• Linguaggio basato su espressioni per eseguire selezioni di nodi Linguaggio basato su espressioni per eseguire selezioni di nodi sul data model (XML InfoSet) di uno o più documenti XMLsul data model (XML InfoSet) di uno o più documenti XML
• È un linguaggio di selezione strongly-typed in quanto utilizza i È un linguaggio di selezione strongly-typed in quanto utilizza i tipi di dati XSDtipi di dati XSD
• Si tratta di un linguaggio fortemente legato a XPath 2.0 e XSLT Si tratta di un linguaggio fortemente legato a XPath 2.0 e XSLT 2.02.0(tutti di imminente rilascio come W3C Recommendation)(tutti di imminente rilascio come W3C Recommendation)
• Si basa sull’equivalenza: Si basa sull’equivalenza: XQuery : XML = SQL : DataBaseXQuery : XML = SQL : DataBase
www.devleap.com
CommunityCommunity
• news.microsoft.comnews.microsoft.commicrosoft.public.it.dotnet.xmlmicrosoft.public.it.dotnet.xml
microsoft.public.it.dotnet.*microsoft.public.it.dotnet.*
• Comunità degli sviluppatoriComunità degli sviluppatorihttp://www.microsoft.com/italy/msdn/community/default.asphttp://www.microsoft.com/italy/msdn/community/default.asp
www.devleap.com
MSDN Webcasts in italianoMSDN Webcasts in italiano• Stay tuned:Stay tuned:
http://www.microsoft.com/italy/msdn/webcast/http://www.microsoft.com/italy/msdn/webcast/
• Prossimi WebCast su XML:Prossimi WebCast su XML:
XML e .NET FrameworkXML e .NET Framework24 Febbraio 2004 dalle 14.30 alle 16.0024 Febbraio 2004 dalle 14.30 alle 16.00
Applicazioni reali di XMLApplicazioni reali di XML2 Marzo 2004 dalle 14.30 alle 16.002 Marzo 2004 dalle 14.30 alle 16.00
www.devleap.com
Altre InformazioniAltre Informazioni
• Dove posso ottenere maggiori Dove posso ottenere maggiori informazioniinformazioni• http://www.devleap.it/http://www.devleap.it/• http://www.gotdotnet.com/http://www.gotdotnet.com/• http://www.microsoft.com/italy/msdn/http://www.microsoft.com/italy/msdn/
• Developer resourcesDeveloper resources• Microsoft Visual Studio.NETMicrosoft Visual Studio.NET• Microsoft .NET Framework SDKMicrosoft .NET Framework SDK• Microsoft Developer NetworkMicrosoft Developer Network
www.devleap.com
Introduzione ad XMLIntroduzione ad XML
I vostri feedback sono importantiI vostri feedback sono importanti•ScriveteciScriveteci
Grazie della partecipazione– A presto
Top Related