Nei paragrafi precedenti abbiamo appreso che i Web service si avvalgono di diversi standard web. Abbiamo anche visto quali sono. XML Schema, WSDL e SOAP sono i tre standard principali che vedremo nelle prossime sezioni della guida e sono gli standard che bisogna assolutamente conoscere per comprendere nel dettaglio il funzionamento di un servizio web. In questa guida non vedremo invece XML. Si assume che tu lo conosca già. Poichè è indispensabile per proseguire (se non lo conosci) ti consiglio di leggere le guide sull'argomento presenti su HTML.it.
6,7,8 - XML Schema
Abbiamo detto che un Web service è auto-descrittivo. Con XML Schema cominceremo a capire come fa un servizio web a disporre di questa caratteristica. XML Schema serve per definire qual è la costruzione legale di un documento XML, come fanno per esempio i DTD con le pagine web. Posto così questo argomento può sembrare campato in aria, ma appena arriveremo ad approfondire WSDL capirete la sua utilità.
Vediamo una lista delle principali funzioni di XML Schema:
- Definire gli elementi (tag) che possono apparire in un documento
- Definire gli attributi che possono apparire in un elemento
- Definire quali elementi devono essere inseriri in altri elementi (da ora in avanti li chiameremo child)
- Definire il numero degli elementi child
- Definire quando un elemento dev'essere vuoto o può contenere testo, elementi, oppure entrambi
- Definire il tipo per ogni elemento e per gli attributi (intero, stringa, ecc, ma anche tipi personalizzati)
- Definire i valori di default o fissi per elementi ed attributi
Ora che abbiamo capito cosa fa e a cosa serve, vediamo come lo fa.
Supponiamo di avere un documento XML come quello che segue:
<?xml version="1.0"?> <libro> <titolo>Al di là del bene e del male</titolo> <autore>Nietzsche</autore> <numeroDiPagine>272</numeroDiPagine> </libro>
Ecco un esempio di XML Schema in grado di descriverlo:
<!-- anche questo è un documento XML, lo precisiamo -->
<?xml version="1.0"?>
<!-- iniziamo lo schema -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.html.it/Guida_ai_Webservice"
xmlns="https://www.html.it/Guida_ai_Webservice" elementFormDefault="qualified">
<!-- definiamo l'elemento libro -->
<xs:element name="libro">
<xs:complexType>
<xs:all>
<!-- definiamo i vari elementi child di libro -->
<xs:element name="titolo" type="xs:string" />
<xs:element name="autore" type="xs:string" />
<xs:element name="numeroDiPagine" type="xs:integer" />
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
Per ora concentriamoci sul primo elemento: schema
. Questo è l'elemento che racchiude tutti i tipi di dato che andiamo a descrivere. Il tag <schema>
può avere diversi attributi, e noi ne abbiamo usati quattro nel nostro esempio:
- xmlns:xs="..." stabilisce che gli elementi che iniziano con 'xs' provengono dal namespace http://www.w3.org/2001/XMLSchema
- targetNamespace="..." definisce a quale namespace appartengono gli elementi definiti con questo schema
- xmlns="..." definisce il namespace di default (quello applicato se non ne escplicitiamo uno)
- elementFromDefault="qualified" indica che ogni elemento usato nel documento XML che utilizzerà questo schema dovrà essere qualificato