Esempio XML con XSD: Ricetta torta al cioccolato spiegata passo-passo

Voglio rappresentare una ricetta di una torta in formato XML. Una ricetta può essere descritta come una serie di informazioni strutturate che includono il nome del piatto, gli ingredienti, il procedimento e il tempo necessario per la preparazione e la cottura.

La specifica progettuale del file XML

Una ricetta è quindi caratterizzata da:

  • Un titolo, che indica il nome del dolce.
  • Un autore, che specifica chi ha scritto la ricetta.
  • Un insieme di ingredienti, ognuno dei quali ha un nome e una quantità associata a un’unità di misura (ad esempio grammi, pezzi, millilitri).
  • Una procedura, ovvero una sequenza di passaggi da seguire per preparare la torta.
  • Due informazioni numeriche che rappresentano il tempo di preparazione e il tempo di cottura, entrambi espressi in minuti.

Per semplicità, consideriamo la ricetta della Torta al Cioccolato, scritta dall’autore Gabriele D’Annunzio. La torta richiede i seguenti ingredienti:

  • 250 grammi di farina
  • 200 grammi di zucchero
  • 3 uova
  • 100 grammi di burro
  • 50 grammi di cacao

Il procedimento prevede quattro passaggi principali:

  1. Mescolare farina, zucchero e cacao in una ciotola.
  2. Aggiungere le uova e il burro fuso.
  3. Mescolare fino a ottenere un impasto omogeneo.
  4. Versare in una teglia imburrata e cuocere a 180°C per 30 minuti.

Il tempo di preparazione stimato è di 15 minuti, mentre la cottura richiede 30 minuti.

Come strutturare un file XML per le ricette

Leggendo con attenzione la specifica e basandoci un po’ sull’esperienza anche pratica, possiamo definire un file XML come il seguente. La cosa più complessa per l’alunno da afferrare è l’elemento che si ripete: nella maggior parte dei casi se ho più elementi che possono ripetersi, occorre inserirli in un elemento contenitore del tipo :

<contenitore>
      <contenuto>1</contenuto> 
      <contenuto>2</contenuto>
      <contenuto>3</contenuto>
</contenitore>

Questa dinamica qui la troviamo per gli ingredienti e i passi delle procedure

<?xml version="1.0" encoding="UTF-8"?>
<ricetta>
	<titolo>Torta al Cioccolato</titolo>
	<autore>Giuseppe Garibaldi</autore>
	<ingredienti>
    	<ingrediente>
        	<nome>Farina</nome>
        	<quantita>250</quantita>
			<unita>grammi</unita>
    	</ingrediente>
    	<ingrediente>
        	<nome>Zucchero</nome>
        	<quantita>200</quantita>
			<unita>grammi</unita>
    	</ingrediente>
    	<ingrediente>
        	<nome>Uova</nome>
        	<quantita>3</quantita>
			<unita>pz</unita>
    	</ingrediente>
    	<ingrediente>
        	<nome>Burro</nome>
        	<quantita>100</quantita>
			<unita>grammi</unita>
    	</ingrediente>
    	<ingrediente>
        	<nome>Cacao</nome>
        	<quantita>50</quantita>
			<unita>grammi</unita>
    	</ingrediente>
	</ingredienti>
	<procedura>
    	<passo>Mescolare farina, zucchero e cacao in una ciotola.</passo>
    	<passo>Aggiungere le uova e il burro fuso.</passo>
    	<passo>Mescolare fino a ottenere un impasto omogeneo.</passo>
    	<passo>Versare in una teglia imburrata e cuocere a 180°C per 30 minuti.</passo>
	</procedura>
	<tempoPreparazione>15</tempoPreparazione>
	<tempoCottura>30</tempoCottura>
</ricetta>

Come creare un file XSD per la validazione XML

Per il nostro file XSD non ci sono particolari criticità .La cosa complessa potrebbe essere comprendere la necessità di un contenitore ingredienti che diventa gioco forza un tipo complesso e sequenza di tre elementi nome, quantità e unità. Quantità ed unità potrebbero anche essere fusi in un solo elemento quantità con attributo unità/tipo unità. Analogamente il tipo complesso per il contenitore procedura che include più elementi passo.

Il codice XSD che valida questo XML potrebbe essere il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xs:element name="ricetta">
    	<xs:complexType>
        	<xs:sequence>
            	<xs:element name="titolo" type="xs:string"/>
            	<xs:element name="autore" type="xs:string"/>
            	<xs:element name="ingredienti">
                	<xs:complexType>
                    	<xs:sequence>
                        	<xs:element name="ingrediente" maxOccurs="unbounded">
                            	<xs:complexType>
                                	<xs:sequence>
                                    	     <xs:element name="nome" type="xs:string"/>
                                    	     <xs:element name="quantita" type="xs:integer" />
					     <xs:element name="unita" type="xs:string" />
                                	</xs:sequence>
                            	</xs:complexType>
                        	</xs:element>
                    	</xs:sequence>
                	</xs:complexType>
            	</xs:element>
            	<xs:element name="procedura">
                	<xs:complexType>
                    	<xs:sequence>
                        	<xs:element name="passo" type="xs:string" maxOccurs="unbounded"/>
                    	</xs:sequence>
                	</xs:complexType>
            	</xs:element>
            	<xs:element name="tempoPreparazione" type="xs:integer"/>
            	<xs:element name="tempoCottura" type="xs:integer"/>
        	</xs:sequence>
    	</xs:complexType>
	</xs:element>

</xs:schema>

Conclusioni e risorse utili

L’esercizio può essere svolto in diversi modi, probabilmente con sfumature tutte esatte. L’alunno può cimentarsi nel complicare ulteriormente il file XSD o nello strutturare un file XML con più ricette tutte sempre validate.

Ultima modifica 19 Marzo 2025