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 (XSD)

1,488 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)

×