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 &lt; &gt; &amp;
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
Scarica

WebCast Introduzione ad XML