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.
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:
- Mescolare farina, zucchero e cacao in una ciotola.
- Aggiungere le uova e il burro fuso.
- Mescolare fino a ottenere un impasto omogeneo.
- 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.
Il file XML
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>
Il file XSD
Per il nostro file XSD non ci son oparticolari 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 i lcntenitore procedura che include più elmenti 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>
Ultima modifica 13 Febbraio 2025