Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
XML-Schema    Eidon School
Agenda Introduzione e richiami formali Più in dettaglio Esempi PAUSA Esercitazione con l’aiuto di xmllint Esercitazi...
XSL-Schema Raccomandazione del W3C (1.0 del maggio  2001, 1.1 è candidate racommendation) È uno linguaggio XML like (pri...
Nomenclatura Esistono diversi XML schema con cui  validare:   W3C XML Schema o semplicemente XML    Schema (o anche WXS ...
DEMOValidiamo il nostro file XMLxmllint --schema Elenco.xsd Elenco.xml
Annotations Documentazione Istruzioni al sistema<xs:annotation>      <xs:documentation xml:lang="it-IT">            Nodo...
Dichiarazione di un elemento È la tipica dichiarazione di un elemento che  contiene testo (o un tipo specificato in type)...
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...
Definizioni di tipo la definizione di un elemento o di un attributo  avviene definendo un ComplexType o un  SimpleType l...
SimpleType e ComplexType Un elemento che non contiene sotto elementi  né attributi può essere definito attraverso un  Sim...
OccorrenzeLa dichiarazione di un element prevede unlimite al numero di occorrenze di un elemento:minOccurs  da 0 a xmaxOc...
Il contenuto degli elementi Un elemento può contenere:   altri elementi   essere vuoto   contenere semplicemente testo...
Elementi vuoti (Empty) A cosa servono?   marcatori di posizione   presenza/assenza   contenitori di attributi  Esempio...
Elementi con solo testo Hanno un contenuto di tipo semplice  (simpleContent) e adottano come tipi base  quelli definiti d...
Limitare la lunghezza (Facet)<xs:simpleType name="nomeType">  <xs:restriction base="xs:string">  <xs:maxLength value="50"/...
Enumerare (Facet)<xs:simpleType name="locationType">  <xs:restriction base="xs:string">  <xs:enumeration value="work"/>  <...
Espressioni regolari (Facet)<xs:simpleType name=“indirizzowebType">   <xs:restriction base="xs:string">        <xs:pattern...
Elemento contenente altri elementi E’ di tipo complesso e definisce altri elementi  che possono apparire come figli attra...
Qualunque contenuto E’ necessario a volte poter far includere  qualunque cosa dentro un elemento (es:  rendering di XHTML...
Univocità dei campi<xs:unique name="codice_cliente_unique">      <xs:selector xpath="record"/>      <xs:field xpath="codic...
ESERCITAZIONI
Numeri Arricurarsi che il codice cliente sia un numero  da 1 a 9999.…<codice_cliente>5</codice_cliente>…Suggerimento: xs:...
Soluzione<xs:element name="codice_cliente">  <xs:simpleType>      <xs:restriction base="xs:short">            <xs:minInclu...
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...
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...
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  r...
Soluzione<xs:element name="anagrafica">  <xs:complexType>    <xs:sequence>      <xs:element name="testata">        ...    ...
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"/...
Key e KeyRef
Riferimentihttp://www.w3.org/TR/xmlschema-0/http://www.w3.org/TR/xmlschema-1/http://www.w3.org/TR/xmlschema-2/XML in a Nut...
Upcoming SlideShare
Loading in …5
×

XML Schema (XSD)

1,437 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

XML Schema (XSD)

  1. 1. XML-Schema Eidon School
  2. 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 delesercitazione con xmllint
  3. 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. 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. 5. DEMOValidiamo il nostro file XMLxmllint --schema Elenco.xsd Elenco.xml
  6. 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. 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. 8. Tipi di dati (alcuni) 1/2 boolean byte dateTime integer string language
  9. 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. 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. 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. 12. OccorrenzeLa dichiarazione di un element prevede unlimite al numero di occorrenze di un elemento:minOccurs  da 0 a xmaxOccurs  da 1 a unboundeddefault per entrambi è 1<xs:element name="record" maxOccurs="unbounded">
  13. 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. 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. 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. 16. Limitare la lunghezza (Facet)<xs:simpleType name="nomeType"> <xs:restriction base="xs:string"> <xs:maxLength value="50"/> </xs:restriction></xs:simpleType>
  17. 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. 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. 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. 20. Qualunque contenuto E’ necessario a volte poter far includere qualunque cosa dentro un elemento (es: rendering di XHTML):  xs:any  xs:anyAttribute
  21. 21. Univocità dei campi<xs:unique name="codice_cliente_unique"> <xs:selector xpath="record"/> <xs:field xpath="codice_cliente"/></xs:unique>
  22. 22. ESERCITAZIONI
  23. 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. 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. 25. Testo Limitare l’attributo tipo di indirizzo a “casa” e “ufficio” Suggerimento: xs:restriction e xs:enumeration
  26. 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. 27. Formato string Rendere obbligatorio che il codice_fiscale inizi con “IT…” Suggerimento: regex ‘IT.*’
  28. 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. 29. Tag obbligatorio Rendere obbligatorio il tag sconto di record
  30. 30. Soluzione<xs:element name="sconto" type="scontoType" minOccurs="0"/>
  31. 31. Univocita del codice_cliente Inserire nel file XSD il controllo dell’univocità del campo codice_cliente dell’elemento record. Suggerimento: xs:unique
  32. 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. 33. Dichiarazioni di tipi globali Rendere globale il tipo definito in linea per codice_fiscale
  34. 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"/>
  35. 35. Key e KeyRef
  36. 36. Riferimentihttp://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)

×