XML - alfredocentinaro.it https://www.alfredocentinaro.it/category/lezioni/xml/ Sito personale di Alfredo Centinaro, ingegnere informatico, insegnante, musicista. Programmazione, appunti, esercizi, sistemi e reti, tpsit, esami di stato, arduino Wed, 19 Mar 2025 14:07:53 +0000 it-IT hourly 1 https://wordpress.org/?v=6.9.4 https://www.alfredocentinaro.it/wp-content/uploads/2022/01/logo_alfredocentinaro-150x150.png XML - alfredocentinaro.it https://www.alfredocentinaro.it/category/lezioni/xml/ 32 32 Esempio XML con XSD: Ricetta torta al cioccolato spiegata passo-passo https://www.alfredocentinaro.it/lezioni/xml/esempio-xml-xsd-ricetta-torta/ Wed, 12 Feb 2025 12:27:30 +0000 https://www.alfredocentinaro.it/?p=8281 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: Per semplicità, ... Leggi tutto

L'articolo Esempio XML con XSD: Ricetta torta al cioccolato spiegata passo-passo proviene da alfredocentinaro.it.

]]>
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.

L'articolo Esempio XML con XSD: Ricetta torta al cioccolato spiegata passo-passo proviene da alfredocentinaro.it.

]]>
Esempio XML con XSD: alunno https://www.alfredocentinaro.it/lezioni/xml/esempio-xml-con-xsd-alunno/ Thu, 12 Dec 2024 18:22:23 +0000 https://www.alfredocentinaro.it/?p=8161 Un esempio molto semplice introduttivo per comprendere l’uso di XML, dello XML Schema, il suo file XSD e delle regole quindi di validazione. Vogliamo provare ad inviare i dati relativi ad un alunno con banali informazioni anagrafiche. Un esempio potrebbe essere il seguente quindi. Trovi una guida di come creare un file XML anche qui ... Leggi tutto

L'articolo Esempio XML con XSD: alunno proviene da alfredocentinaro.it.

]]>
Un esempio molto semplice introduttivo per comprendere l’uso di XML, dello XML Schema, il suo file XSD e delle regole quindi di validazione. Vogliamo provare ad inviare i dati relativi ad un alunno con banali informazioni anagrafiche. Un esempio potrebbe essere il seguente quindi. Trovi una guida di come creare un file XML anche qui sulle nostre pagine, mentre una valida guida alternativa, asciutta e sintetica sugli Schema XSD la trovate qui.

Esempio foglio dati di esempio XML

Il foglio xml è piuttosto semplice. Prevede solo un annidamento dentro il tag alunno. Ci sono tag che si riferiscono a dati testuali, numero, un carattere, un booleano. Proponiamo un esempio con dati per la successiva validazione.

<alunno>
  <cognome>Centinaro</cognome>
  <cognome>Rossi</cognome>
  <nome>Alfredo</nome>
  <anno>1982</anno>
  <sesso>M</sesso>
  <celibe>true</celibe>
</alunno>

Il file XSD ver.1

Partendo dal file XML, proviamo a costruire un foglio di schema XSD. In molti casi questa operazione potrebbe generare XSD differenti poiché prevede o meno determinate casistiche non immediatamente riscontrabili nel foglio dati. Vediamo una prima versione semplificata che ci porta però a fare qualche considerazione e qualche elemento più stringente.

Tolte le due righe di intestazione classiche che richiamano gli standard XML e XML Schema, il primo elemento è proprio alunno. In particolare poi questo non è un elemento secco singolo ma ha dei sotto elementi, come ci aspettiamo da un nodo radice del resto. Definiamo quindi il tag complexType che si apre e chiude, badate bene. Al suo interno i campi espressi non sono liberi ma ricadono in una sequenza ordinata che si aspetterà il parser che riceve il file dati.

<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:element name="alunno">
    <xs:complexType>
      <xs:sequence>

      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Le restanti voci sono elementi semplici, quindi possono essere classificati nello schema semplicemente con la voce singola element che possiamo chiude o con il tag </element> o col il semplice slash finale. Il file completo potrebbe quindi essere quello sotto riportato.

<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="alunno">
    <xs:complexType>
      <xs:sequence>
    	<xs:element name="cognome" type="xs:string" />
      	<xs:element name="nome" type="xs:string" />
      	<xs:element name="anno" type="xs:positiveInteger" />
        <xs:element name="sesso" type="xs:string" />
      	<xs:element name="celibe" type="xs:boolean" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
 </xs:schema>

Il file XSD ver.2

Se proviamo il nostro XML e XSD in un validatore online o notepad o visual studio code, il file sicuramente passa ma vogliamo renderlo un po’ più specifico ed accurato.

Ad esempio potrebbe capitare che un alunno abbia più cognomi. In questo caso possiamo utilizzare gli attributi minOccurs e maxOccurs che specificano il numero minimo e massimo, in questo caso, di cognomi che un xml può contenere. Se specifichiamo minimo zero, vuol dire che il tag è opzionale mentre sul limite max possiamo inserire il numero congruo che vogliamo o digitare unbounded che signica che nel xml possono essere riportati infiniti cognomi (qui sarebbe ragionevole mettere 2).

<xs:element name="cognome" type="xs:string" minOccurs="1" maxOccurs="unbounded" />

Anno vogliamo che sia un numero positivo, quindi invece di intero potrebbe essere più ragionevole type=”xs:positiveInteger”.

Sul sesso vogliamo essere certi che il dato che arriva a mezzo di XML sia di una sola lettera. Possiamo allora ridefinire il tag element con uno di apertura/chiusura e specificare al suo interno che è un tipo semplice ma con dei vincoli quindi inseriamo simpleType, restriction specificandoci il tipo e finalmente il tax maxLenght che ha valore 1 per indicar il singolo carattere ammesso.

        <xs:element name="sesso">
          <xs:simpleType>
          	<xs:restriction base="xs:string">
            	<xs:maxLength value="1" />
          	</xs:restriction>
          </xs:simpleType>
        </xs:element>

Quest’ultima parte complica un po’ il nostro schema ma come spesso accade, è una questione di esercitazione, abitudine e sapere dove cercare tra manuali ed esercizi svolti.

Il file XSD completo:

<?xml version="1.0" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="alunno">
    <xs:complexType>
      <xs:sequence>
    	<xs:element name="cognome" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
      	<xs:element name="nome" type="xs:string" />
      	<xs:element name="anno" type="xs:positiveInteger" />
        <xs:element name="sesso">
          <xs:simpleType>
          	<xs:restriction base="xs:string">
            	<xs:maxLength value="1" />
          	</xs:restriction>
          </xs:simpleType>
        </xs:element>
      	<xs:element name="celibe" type="xs:boolean" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
 </xs:schema>

L'articolo Esempio XML con XSD: alunno proviene da alfredocentinaro.it.

]]>
Esempio XML con XSD: ordine e carrello spesa https://www.alfredocentinaro.it/lezioni/xml/esempio-xml-con-xsd-ordine-e-carrello-spesa/ Wed, 16 Nov 2022 01:07:42 +0000 https://www.alfredocentinaro.it/?p=3076 Facciamo un esempio al contrario: assegnano un nutrito flle XML e chiediamo all’alunno di costruire lo schema XSD. Proviamo ad individuare le criticità e le commentiamo insieme. Il file XML Il file XSD Procediamo per step incrementali. La radice è semplice da individuare come anche l’elemento carrello. E’ palese che siano tipi complessi Possiamo quindi ... Leggi tutto

L'articolo Esempio XML con XSD: ordine e carrello spesa proviene da alfredocentinaro.it.

]]>
Facciamo un esempio al contrario: assegnano un nutrito flle XML e chiediamo all’alunno di costruire lo schema XSD. Proviamo ad individuare le criticità e le commentiamo insieme.

Il file XML

<ordine>
    <carrello>
        <articolo>
            <categoria>latte</categoria>
            <confezioni>2</confezioni>
            <confezione>
                <tipologia>parzialmente scremato</tipologia>
                <grandezza unita="lt">1</grandezza>
                <scadenza unita="gg" giorno_riferimento="consegna">4</scadenza>
            </confezione>
        </articolo>
        <articolo>
            <categoria>gelato</categoria>
            <marca>Slurp</marca>
            <gusto>Limone</gusto>
            <confezioni>1</confezioni>
            <confezione>
                <peso unita="gr">500</peso>
            </confezione>
        </articolo>
        <articolo>
            <categoria>caffè</categoria>
            <marca>Hug</marca>
            <confezioni>1</confezioni>
            <confezione>
                <quantita unita="bustine">20</quantita>
            </confezione>
        </articolo>
        <articolo>
            <categoria>pane</categoria>
            <confezioni>2</confezioni>
            <confezione>
                <peso unita="gr">500</peso>
                <ingrediente modalita="assente">sale</ingrediente>
            </confezione>
        </articolo>
        <articolo>
            <categoria>pomodoro</categoria>
            <confezione>
                <tipologia>oblungo rosso</tipologia>
                <peso unita="kg">0.5</peso>
            </confezione>
        </articolo>
        <articolo>
            <categoria>acqua</categoria>
            <confezioni>1</confezioni>
            <confezione>
                <tipologia>naturale</tipologia>
                <quantita unita="bottiglie">6</quantita>
            </confezione>
        </articolo>
    </carrello>
</ordine> 

Il file XSD

Procediamo per step incrementali. La radice è semplice da individuare come anche l’elemento carrello. E’ palese che siano tipi complessi Possiamo quindi cominciare a buttare giù qualche riga del nostro schema xml.

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="ordine">
  <xs:complexType>
    <xs:element name="carrello">
          <xs:complexType>
           ...
          </xs:complexType> 
  </xs:complexType>    
</xs:element>

</xs:schema> 

E’ il turno del tag articolo. E’ un tag senza particolari attributi quindi lo possiamo dichiarare generico ma pare si possa ripetere più volte e contiene più elementi complessi. La parte un po’ più delicata. Per ogni articolo vediamo come i marcatori dei tag non siano esattamente uguali, ma variano tra articolo ed articolo. Controlliamo se sono messi in modo opzionale ma seguono comunque un criterio di ordine tracciabile. Intanto tutti hanno una categoria espressa. Possiamo procedere con inserirlo attraverso un element di tipo stringa senza specificare minOccurs che ne caratterizza l’opzionalità ma al più maxOccurs pari ad 1. Poi possiamo individuare senza ordine preciso o obbligatorietà gli elementi marca, gusto, confezioni, confezione. Di questi, i primi quattro sono elementi in cui fornire solo il tipo, il numero minimo di occorrenze pari a zero per indicare l’opzionalità ma massimo pari ad 1.

            <xs:element name="articolo" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="categoria" type="xs:string" maxOccurs="1" />
                  <xs:element name="marca" type="xs:string" minOccurs="0" maxOccurs="1" />
                  <xs:element name="gusto" type="xs:string" minOccurs="0" maxOccurs="1" />
                  <xs:element name="confezioni" type="xs:integer" minOccurs="0" maxOccurs="1" />
                  <xs:element name="confezione" minOccurs="0" maxOccurs="1">
                        ...                   
                  </xs:element>
                </xs:sequence>
              </xs:complexType>                    
            </xs:element>

Discorso più complesso per l’elemento confezione. Questo è un tipo a sua volta complesso con una sequenza di elementi tipologia, peso, quantita, ingrediente, grandezza e scadenza. Di questi tutti sono opzionali con una occorrenza max pari ad 1 tranne ingrediente che può essere ripetuto più volte. Ognuno di questi è un tipo complesso ma dal contenuto semplice per poter specificare il tipo e gli attributi.

<xs:element name="confezione" minOccurs="0" maxOccurs="1">
  <xs:complexType>
    <xs:sequence> 
      <xs:element name="tipologia" type="xs:string" minOccurs="0" />
      <xs:element name="peso" minOccurs="0" maxOccurs="1">
        ...       
      </xs:element>                         
      <xs:element name="quantita" minOccurs="0" maxOccurs="1">
        ...                  
      </xs:element>
      <xs:element name="ingrediente" minOccurs="0" maxOccurs="unbounded" >
        ...
      </xs:element>                        
      <xs:element name="grandezza" minOccurs="0" maxOccurs="1">
        ...
      </xs:element>
      <xs:element name="scadenza" minOccurs="0" maxOccurs="1">
       ...
      </xs:element>
    </xs:sequence>
  </xs:complexType>                                           
</xs:element>

Listato XSD completo

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="ordine">
  <xs:complexType>
    <xs:sequence>

      <xs:element name="carrello">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="articolo" maxOccurs="unbounded">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="categoria" type="xs:string" maxOccurs="1" />
                  <xs:element name="marca" type="xs:string" minOccurs="0" maxOccurs="1" />
                  <xs:element name="gusto" type="xs:string" minOccurs="0" maxOccurs="1" />
                  <xs:element name="confezioni" type="xs:integer" minOccurs="0" maxOccurs="1" />
                  <xs:element name="confezione" minOccurs="0" maxOccurs="1">
                    <xs:complexType>
                      <xs:sequence> 
                        <xs:element name="tipologia" type="xs:string" minOccurs="0" />
                        <xs:element name="peso" minOccurs="0" >
                          <xs:complexType>
                            <xs:simpleContent>
                              <xs:extension base="xs:decimal">
                                <xs:attribute name="unita" type="xs:string"/>
                              </xs:extension>
                            </xs:simpleContent>
                          </xs:complexType>                          
                        </xs:element>                         
                        <xs:element name="quantita" minOccurs="0" >
                          <xs:complexType>
                            <xs:simpleContent>
                              <xs:extension base="xs:integer">
                                <xs:attribute name="unita" type="xs:string"/>
                              </xs:extension>
                            </xs:simpleContent>
                          </xs:complexType>                          
                        </xs:element>
                        <xs:element name="ingrediente" minOccurs="0" maxOccurs="unbounded" >
                          <xs:complexType>
                            <xs:simpleContent>
                              <xs:extension base="xs:string">
                                <xs:attribute name="modalita" type="xs:string"/>
                              </xs:extension>
                            </xs:simpleContent>
                          </xs:complexType>  
                        </xs:element>                        
                        <xs:element name="grandezza" minOccurs="0">
                          <xs:complexType>
                            <xs:simpleContent>
                              <xs:extension base="xs:integer">
                                <xs:attribute name="unita" type="xs:string"/>
                              </xs:extension>
                            </xs:simpleContent>
                          </xs:complexType>
                        </xs:element>
                        <xs:element name="scadenza" minOccurs="0">
                          <xs:complexType>
                            <xs:simpleContent>
                              <xs:extension base="xs:integer">
                                <xs:attribute name="unita" type="xs:string"/>
                                <xs:attribute name="giorno_riferimento" type="xs:string"/>
                              </xs:extension>
                            </xs:simpleContent>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>                                           
                  </xs:element>
                </xs:sequence>

              </xs:complexType>                    
            </xs:element>
            
          </xs:sequence>
        </xs:complexType>            
      </xs:element>

    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>  

Listato completo

Li trovate su github.com

L'articolo Esempio XML con XSD: ordine e carrello spesa proviene da alfredocentinaro.it.

]]>
Esempio XML con XSD: gestione libro https://www.alfredocentinaro.it/lezioni/xml/esempio-xml-con-xsd-gestione-libro/ Wed, 05 Oct 2022 12:40:44 +0000 https://www.alfredocentinaro.it/?p=3072 Per l’implementazione di un sito di una libreria online, si vuole usare l’XML per descrivere l’entità libro,così definita: “un libro è caratterizzato da un titolo, un’edizione (prima, seconda, ecc.), uno o più autori ma almeno uno con nome e cognome,un codice ISBN a 13 cifre, una casa editrice, un anno di pubblicazione, un prezzo decimale, ... Leggi tutto

L'articolo Esempio XML con XSD: gestione libro proviene da alfredocentinaro.it.

]]>
Per l’implementazione di un sito di una libreria online, si vuole usare l’XML per descrivere l’entità libro,
così definita: “un libro è caratterizzato da un titolo, un’edizione (prima, seconda, ecc.), uno o più autori ma almeno uno con nome e cognome,
un codice ISBN a 13 cifre, una casa editrice, un anno di pubblicazione, un prezzo decimale, un eventuale sconto (percentuale intero) in un certo periodo temporale e dalla disponibilità (numero di pezzi in magazzino). Si definiscano dei tag e degli attributi opportuni di esempio in grado di caratterizzare l’entità e il relativo XSD. Validarlo con l’ausilio di un validatore online (es qui) o Visual Studio Code.

Il file XSD

Premesso come sempre che non esiste una soluzione unica ad una specifica di progetto, in questo caso le scelte sono abbastanza pilotate. La vera finezza sta nell’individuare tutti i parametri e le condizioni per ripulire i dati obbligando a inserire dei valori il più possibile oggettivi: lunghezza dei codici, inserimento di numeri positivi, numero di occorrenze sono tutti elementi non obbligatori nella realizzazione di un XSD ma che ne caratterizzano una grande qualità. Ricordiamo XSD è la contrazione di XML Schema Definition. Potete trovare una infarinatura di XML e XSLT qui.

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="libro">
  <xs:complexType>
    <xs:sequence>
        <xs:element name="titolo" type="xs:string"/>
        <xs:element name="edizione" type="xs:string"/>
        <xs:element name="autori" minOccurs="1" maxOccurs="unbounded" >
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="cognome" type="xs:string"/>
                    <xs:element name="nome" type="xs:string"/>
                </xs:sequence>                
            </xs:complexType>
        </xs:element>
        <xs:element name="ISBN" minOccurs="1">   
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="13"/>
                </xs:restriction>
            </xs:simpleType> 
        </xs:element>         
        <xs:element name="casaeditrice" type="xs:string"/> 
        <xs:element name="anno" type="xs:positiveInteger"/> 
        <xs:element name="scontistica" minOccurs="0" maxOccurs="1">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="sconto" type="xs:positiveInteger" />
                    <xs:element name="datainizio" type="xs:date" />
                    <xs:element name="datafine" type="xs:date" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="disponibilita" type="xs:positiveInteger" />
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema> 

Il file XML

Non ci resta che provare a realizzare un file XML con attributi di prova. Sarà un ottimo ausilio anche in realtà per testare la bontà del nostro XSD. Se usate Visual Studio Code, ha una funzionalità interessante che permette di aprire a lato i due file XSD e XML, basta cliccare col tasto destro sull’albero di navigazione e selezionare sul file la voce “Apri lateralmente”.

<libro>
    <titolo>Il nome della rosa</titolo>
    <edizione>Prima</edizione>
    <autori>
        <cognome>Eco</cognome>
        <nome>Umberto</nome>
    </autori>
    <ISBN>1234567890123</ISBN>
    <casaeditrice>Juvenila</casaeditrice>
    <anno>2022</anno>
    <scontistica>
        <sconto>10</sconto>
        <datainizio>2022-10-05</datainizio>
        <datafine>2022-11-05</datafine>
    </scontistica>
    <disponibilita>10</disponibilita>
</libro>

L'articolo Esempio XML con XSD: gestione libro proviene da alfredocentinaro.it.

]]>