SlideShare une entreprise Scribd logo
1  sur  36
XML-Schema


    Eidon School
Agenda
 Introduzione e richiami formali
 Più in dettaglio
 Esempi

 PAUSA

 Esercitazione con l’aiuto di xmllint
 Esercitazione con l’aiuto di carta e penna
 Controllo del'esercitazione con xmllint
XSL-Schema
 Raccomandazione del W3C (1.0 del maggio
  2001, 1.1 è candidate racommendation)
 È uno linguaggio XML like (primo a
  raggiungere la W3C recommendation) per
  validare un documento XML
 Validare un documento XML significa
  verificare che è conforme ai requisiti richiesti
  dallo schema (presenza/assenza di nodi e
  restrizioni sui tipi di dati presenti)
 Viene usato anche per documentazione
Nomenclatura
 Esistono diversi XML schema con cui
  validare:
   W3C XML Schema o semplicemente XML
    Schema (o anche WXS o XSD, notale la “S” in
    grande di schema) usato in questa sede
   Relax NG (REgular LAnguage for XML Next Generation)
   Schematron
   XML-Data Reduced (XDR) di Microsoft
   altri minori
DEMO
Validiamo il nostro file XML

xmllint --schema Elenco.xsd Elenco.xml
Annotations
 Documentazione
 Istruzioni al sistema


<xs:annotation>
      <xs:documentation xml:lang="it-IT">
            Nodo Radice
      </xs:documentation>
      <xs:appinfo>root-node</xs:appinfo>
</xs:annotation>
Dichiarazione di un elemento
 È la tipica dichiarazione di un elemento che
  contiene testo (o un tipo specificato in type)

<xs:element name="fullName" type="xs:string">
Tipi di dati (alcuni) 1/2
 boolean
 byte
 dateTime
 integer
 string
 language
Tipi di dati 2/2
 E’ possibile aumentare i tipi di dato unendo o
  restringendo i tipi base:

<xs:restriction base="xs:string">
      <xs:enumeration value="casa"/>
      <xs:enumeration value="ufficio"/>
</xs:restriction>
Definizioni di tipo
 la definizione di un elemento o di un attributo
  avviene definendo un ComplexType o un
  SimpleType
 la definizione può avvenire globalmente
  (inserendo il tipo sotto la radice dello
  schema) e dandogli un nome con cui riferirlo,
  o dichiararlo inline senza nome (viene
  utilizzato solo una volta)
 Vedi il SimpleType scontoType
  nell’Esempio.xsd
SimpleType e ComplexType
 Un elemento che non contiene sotto elementi
  né attributi può essere definito attraverso un
  SimpleType, altrimenti occorre usare un
  ComplexType.
 Gli attributi sono sempre SimpleType
 Vedi Indirizzo nel file di esempio.
Occorrenze
La dichiarazione di un element prevede un
limite al numero di occorrenze di un elemento:

minOccurs  da 0 a x
maxOccurs  da 1 a unbounded
default per entrambi è 1

<xs:element name="record"
               maxOccurs="unbounded">
Il contenuto degli elementi
 Un elemento può contenere:
   altri elementi
   essere vuoto
   contenere semplicemente testo
   essere a contenuto misto (mixed content, vi
    ricordare il seminario XML…???)
   non definito
Elementi vuoti (Empty)
 A cosa servono?
   marcatori di posizione
   presenza/assenza
   contenitori di attributi



  Esempio di elemento vuoto e opzionale:
  <xs:element name="preferito" minOccurs="0">
    <xs:complexType/>
  </xs:element>
Elementi con solo testo
 Hanno un contenuto di tipo semplice
  (simpleContent) e adottano come tipi base
  quelli definiti dallo schema con la possibilità
  di ridefinirli con un meccanisco chiamato
  Facets.
 Controlli possibili: length, minLength,
  maxLength, pattern, enumeration,
  whiteSpace, maxInclusive, maxExclusive,
  minInclusive, minExclusive …
Limitare la lunghezza (Facet)
<xs:simpleType name="nomeType">
  <xs:restriction base="xs:string">
  <xs:maxLength value="50"/>
  </xs:restriction>
</xs:simpleType>
Enumerare (Facet)
<xs:simpleType name="locationType">
  <xs:restriction base="xs:string">
  <xs:enumeration value="work"/>
  <xs:enumeration value="home"/>
  <xs:enumeration value="mobile"/>
  </xs:restriction>
</xs:simpleType>
Espressioni regolari (Facet)
<xs:simpleType name=“indirizzowebType">
   <xs:restriction base="xs:string">
        <xs:pattern value="(http|https|ftp)://(((((([0-1])?
   ([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-
   9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?
   [0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0-
   9])|(2[0-4][0-9])|(2[0-5][0-5]))))|((([a-z0-9-])+.)+([a-z]
   {2}.[a-z]{2}|[a-z]{2,4})))"/>
   </xs:restriction>
</xs:simpleType>
Elemento contenente altri elementi
 E’ di tipo complesso e definisce altri elementi
  che possono apparire come figli attraverso:
 xs:sequence  i figli devono apparire
  nell’ordine specificato
 xs:choice  deve essere presente uno e solo
  uno dei figli descritti
 xs:any  i figli possono apparire una e una
  solo volta in qualunque ordine
Qualunque contenuto
 E’ necessario a volte poter far includere
  qualunque cosa dentro un elemento (es:
  rendering di XHTML):
   xs:any
   xs:anyAttribute
Univocità dei campi

<xs:unique name="codice_cliente_unique">
      <xs:selector xpath="record"/>
      <xs:field xpath="codice_cliente"/>
</xs:unique>
ESERCITAZIONI
Numeri
 Arricurarsi che il codice cliente sia un numero
  da 1 a 9999.

…<codice_cliente>5</codice_cliente>…

Suggerimento: xs:restriction,
  xs:minInclusive, xs:maxInclusive
Soluzione
<xs:element name="codice_cliente">
  <xs:simpleType>
      <xs:restriction base="xs:short">
            <xs:minInclusive value="1"/>
            <xs:maxInclusive value="9999"/>
      </xs:restriction>
  </xs:simpleType>
</xs:element>
Testo
 Limitare l’attributo tipo di indirizzo a “casa” e
  “ufficio”

 Suggerimento: xs:restriction e
  xs:enumeration
Soluzione
<xs:attribute name="tipo" use="required">
  <xs:simpleType>
      <xs:restriction base="xs:string">
             <xs:enumeration value="casa"/>
             <xs:enumeration value="ufficio"/>
      </xs:restriction>
  </xs:simpleType>
</xs:attribute>
Formato string
 Rendere obbligatorio che il codice_fiscale
  inizi con “IT…”

 Suggerimento: regex ‘IT.*’
Soluzione
<xs:element name="codice_fiscale">
  <xs:simpleType>
      <xs:restriction base="xs:string">
            <xs:pattern value="IT.*"/>
      </xs:restriction>
  </xs:simpleType>
</xs:element>
Tag obbligatorio
 Rendere obbligatorio il tag sconto di record
Soluzione
<xs:element name="sconto" type="scontoType"
  minOccurs="0"/>
Univocita del codice_cliente
 Inserire nel file XSD il controllo dell’univocità
  del campo codice_cliente dell’elemento
  record.

 Suggerimento: xs:unique
Soluzione
<xs:element name="anagrafica">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="testata">
        ...
    </xs:element>
    <xs:element name="record" maxOccurs="unbounded">
        ....
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:unique name="codice_cliente_unique">
     <xs:selector xpath="record"/>
     <xs:field xpath="codice_cliente"/>
   </xs:unique>
…
Dichiarazioni di tipi globali
 Rendere globale il tipo definito in linea per
  codice_fiscale
Soluzione
  <xs:simpleType name="scontoType">
      <xs:restriction base="xs:string">
            <xs:enumeration value="si"/>
            <xs:enumeration value="no"/>
      </xs:restriction>
  </xs:simpleType>
…
<xs:element name="codice_fiscale"
  type="codicefiscaleType"/>
Key e KeyRef
Riferimenti
http://www.w3.org/TR/xmlschema-0/
http://www.w3.org/TR/xmlschema-1/
http://www.w3.org/TR/xmlschema-2/
XML in a Nutshell, Third Edition by Elliotte
  Rusty Harold and W. Scott Means
  (Paperback - Sep 23, 2004)

Contenu connexe

Similaire à XML Schema (XSD)

Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
Sandro Marcon
 
XPath Injection
XPath InjectionXPath Injection
XPath Injection
jekil
 

Similaire à XML Schema (XSD) (20)

XSLT
XSLT XSLT
XSLT
 
XML &amp; XSLT
XML &amp; XSLTXML &amp; XSLT
XML &amp; XSLT
 
Fast Wsdl Tutorial
Fast Wsdl TutorialFast Wsdl Tutorial
Fast Wsdl Tutorial
 
Xaml su Xamarin
Xaml su XamarinXaml su Xamarin
Xaml su Xamarin
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
Javascript - 8 | WebMaster & WebDesigner
Javascript - 8 | WebMaster & WebDesignerJavascript - 8 | WebMaster & WebDesigner
Javascript - 8 | WebMaster & WebDesigner
 
ZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFXZoeFX: un framework MVC per JavaFX
ZoeFX: un framework MVC per JavaFX
 
Sawsdl Restriced
Sawsdl RestricedSawsdl Restriced
Sawsdl Restriced
 
Introduzione ai css
Introduzione ai cssIntroduzione ai css
Introduzione ai css
 
phpday 2006 - WS in PHP
phpday 2006 - WS in PHPphpday 2006 - WS in PHP
phpday 2006 - WS in PHP
 
Corso eBIZ -Modulo 01 - introduzione (CW513-004)
Corso eBIZ -Modulo  01 - introduzione (CW513-004)Corso eBIZ -Modulo  01 - introduzione (CW513-004)
Corso eBIZ -Modulo 01 - introduzione (CW513-004)
 
Java Advanced
Java AdvancedJava Advanced
Java Advanced
 
jQuery - 2 | WebMaster & WebDesigner
jQuery - 2 | WebMaster & WebDesignerjQuery - 2 | WebMaster & WebDesigner
jQuery - 2 | WebMaster & WebDesigner
 
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
Breve introduzione alle tecnologie HTML5 + (DOM) + CSS
 
Write less do more...with jQuery
Write less do more...with jQueryWrite less do more...with jQuery
Write less do more...with jQuery
 
XPath Injection
XPath InjectionXPath Injection
XPath Injection
 
HTML e CSS
HTML e CSSHTML e CSS
HTML e CSS
 
HTML (+ DOM) + CSS
HTML (+ DOM) + CSSHTML (+ DOM) + CSS
HTML (+ DOM) + CSS
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
Office & VBA - Giorno 6
Office & VBA - Giorno 6Office & VBA - Giorno 6
Office & VBA - Giorno 6
 

XML Schema (XSD)

  • 1. XML-Schema Eidon School
  • 2. Agenda  Introduzione e richiami formali  Più in dettaglio  Esempi  PAUSA  Esercitazione con l’aiuto di xmllint  Esercitazione con l’aiuto di carta e penna  Controllo del'esercitazione con xmllint
  • 3. XSL-Schema  Raccomandazione del W3C (1.0 del maggio 2001, 1.1 è candidate racommendation)  È uno linguaggio XML like (primo a raggiungere la W3C recommendation) per validare un documento XML  Validare un documento XML significa verificare che è conforme ai requisiti richiesti dallo schema (presenza/assenza di nodi e restrizioni sui tipi di dati presenti)  Viene usato anche per documentazione
  • 4. Nomenclatura  Esistono diversi XML schema con cui validare:  W3C XML Schema o semplicemente XML Schema (o anche WXS o XSD, notale la “S” in grande di schema) usato in questa sede  Relax NG (REgular LAnguage for XML Next Generation)  Schematron  XML-Data Reduced (XDR) di Microsoft  altri minori
  • 5. DEMO Validiamo il nostro file XML xmllint --schema Elenco.xsd Elenco.xml
  • 6. Annotations  Documentazione  Istruzioni al sistema <xs:annotation> <xs:documentation xml:lang="it-IT"> Nodo Radice </xs:documentation> <xs:appinfo>root-node</xs:appinfo> </xs:annotation>
  • 7. Dichiarazione di un elemento  È la tipica dichiarazione di un elemento che contiene testo (o un tipo specificato in type) <xs:element name="fullName" type="xs:string">
  • 8. Tipi di dati (alcuni) 1/2  boolean  byte  dateTime  integer  string  language
  • 9. Tipi di dati 2/2  E’ possibile aumentare i tipi di dato unendo o restringendo i tipi base: <xs:restriction base="xs:string"> <xs:enumeration value="casa"/> <xs:enumeration value="ufficio"/> </xs:restriction>
  • 10. Definizioni di tipo  la definizione di un elemento o di un attributo avviene definendo un ComplexType o un SimpleType  la definizione può avvenire globalmente (inserendo il tipo sotto la radice dello schema) e dandogli un nome con cui riferirlo, o dichiararlo inline senza nome (viene utilizzato solo una volta)  Vedi il SimpleType scontoType nell’Esempio.xsd
  • 11. SimpleType e ComplexType  Un elemento che non contiene sotto elementi né attributi può essere definito attraverso un SimpleType, altrimenti occorre usare un ComplexType.  Gli attributi sono sempre SimpleType  Vedi Indirizzo nel file di esempio.
  • 12. Occorrenze La dichiarazione di un element prevede un limite al numero di occorrenze di un elemento: minOccurs  da 0 a x maxOccurs  da 1 a unbounded default per entrambi è 1 <xs:element name="record" maxOccurs="unbounded">
  • 13. Il contenuto degli elementi  Un elemento può contenere:  altri elementi  essere vuoto  contenere semplicemente testo  essere a contenuto misto (mixed content, vi ricordare il seminario XML…???)  non definito
  • 14. Elementi vuoti (Empty)  A cosa servono?  marcatori di posizione  presenza/assenza  contenitori di attributi Esempio di elemento vuoto e opzionale: <xs:element name="preferito" minOccurs="0"> <xs:complexType/> </xs:element>
  • 15. Elementi con solo testo  Hanno un contenuto di tipo semplice (simpleContent) e adottano come tipi base quelli definiti dallo schema con la possibilità di ridefinirli con un meccanisco chiamato Facets.  Controlli possibili: length, minLength, maxLength, pattern, enumeration, whiteSpace, maxInclusive, maxExclusive, minInclusive, minExclusive …
  • 16. Limitare la lunghezza (Facet) <xs:simpleType name="nomeType"> <xs:restriction base="xs:string"> <xs:maxLength value="50"/> </xs:restriction> </xs:simpleType>
  • 17. Enumerare (Facet) <xs:simpleType name="locationType"> <xs:restriction base="xs:string"> <xs:enumeration value="work"/> <xs:enumeration value="home"/> <xs:enumeration value="mobile"/> </xs:restriction> </xs:simpleType>
  • 18. Espressioni regolari (Facet) <xs:simpleType name=“indirizzowebType"> <xs:restriction base="xs:string"> <xs:pattern value="(http|https|ftp)://(((((([0-1])? ([0-9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0- 9])?[0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])? [0-9])|(2[0-4][0-9])|(2[0-5][0-5]))).(((([0-1])?([0-9])?[0- 9])|(2[0-4][0-9])|(2[0-5][0-5]))))|((([a-z0-9-])+.)+([a-z] {2}.[a-z]{2}|[a-z]{2,4})))"/> </xs:restriction> </xs:simpleType>
  • 19. Elemento contenente altri elementi  E’ di tipo complesso e definisce altri elementi che possono apparire come figli attraverso:  xs:sequence  i figli devono apparire nell’ordine specificato  xs:choice  deve essere presente uno e solo uno dei figli descritti  xs:any  i figli possono apparire una e una solo volta in qualunque ordine
  • 20. Qualunque contenuto  E’ necessario a volte poter far includere qualunque cosa dentro un elemento (es: rendering di XHTML):  xs:any  xs:anyAttribute
  • 21. Univocità dei campi <xs:unique name="codice_cliente_unique"> <xs:selector xpath="record"/> <xs:field xpath="codice_cliente"/> </xs:unique>
  • 23. Numeri  Arricurarsi che il codice cliente sia un numero da 1 a 9999. …<codice_cliente>5</codice_cliente>… Suggerimento: xs:restriction, xs:minInclusive, xs:maxInclusive
  • 24. Soluzione <xs:element name="codice_cliente"> <xs:simpleType> <xs:restriction base="xs:short"> <xs:minInclusive value="1"/> <xs:maxInclusive value="9999"/> </xs:restriction> </xs:simpleType> </xs:element>
  • 25. Testo  Limitare l’attributo tipo di indirizzo a “casa” e “ufficio”  Suggerimento: xs:restriction e xs:enumeration
  • 26. Soluzione <xs:attribute name="tipo" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="casa"/> <xs:enumeration value="ufficio"/> </xs:restriction> </xs:simpleType> </xs:attribute>
  • 27. Formato string  Rendere obbligatorio che il codice_fiscale inizi con “IT…”  Suggerimento: regex ‘IT.*’
  • 28. Soluzione <xs:element name="codice_fiscale"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="IT.*"/> </xs:restriction> </xs:simpleType> </xs:element>
  • 29. Tag obbligatorio  Rendere obbligatorio il tag sconto di record
  • 31. Univocita del codice_cliente  Inserire nel file XSD il controllo dell’univocità del campo codice_cliente dell’elemento record.  Suggerimento: xs:unique
  • 32. Soluzione <xs:element name="anagrafica"> <xs:complexType> <xs:sequence> <xs:element name="testata"> ... </xs:element> <xs:element name="record" maxOccurs="unbounded"> .... </xs:element> </xs:sequence> </xs:complexType> <xs:unique name="codice_cliente_unique"> <xs:selector xpath="record"/> <xs:field xpath="codice_cliente"/> </xs:unique> …
  • 33. Dichiarazioni di tipi globali  Rendere globale il tipo definito in linea per codice_fiscale
  • 34. Soluzione <xs:simpleType name="scontoType"> <xs:restriction base="xs:string"> <xs:enumeration value="si"/> <xs:enumeration value="no"/> </xs:restriction> </xs:simpleType> … <xs:element name="codice_fiscale" type="codicefiscaleType"/>
  • 36. Riferimenti http://www.w3.org/TR/xmlschema-0/ http://www.w3.org/TR/xmlschema-1/ http://www.w3.org/TR/xmlschema-2/ XML in a Nutshell, Third Edition by Elliotte Rusty Harold and W. Scott Means (Paperback - Sep 23, 2004)