Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Dichiarazione di tipi

Semplificare ls struttura di un XML Schema e renderlo modulare.
Semplificare ls struttura di un XML Schema e renderlo modulare.
Link copiato negli appunti

XML Schema prevede la possibilità di rendere modulare la definizione della struttura di un documento XML tramite la dichiarazione di tipi e di elementi.

Nel corso della creazione di uno schema XML possiamo analizzare ciascun sottoelemento significativamente complesso e fornire una definizione separata come elemento o come tipo di dato.

Questo contribuisce a fornire una struttura modulare allo schema, più ordinata, più comprensibile e semplice da modificare. Sfruttando la struttura modulare delle dichiarazioni, il contenuto di uno XML Schema diventa una sequenza di dichiarazioni di tipi ed elementi.

Possiamo definire un tipo complesso in base al seguente schema:

<xs:complexType name="nome_tipo">
...
</xs:complexType>

Il riferimento ad una dichiarazione di tipo viene fatta come se fosse un tipo predefinito, come mostrato nel seguente esempio:

<xs:element name="nome_elemento" type="nome_tipo" />

La possibilità di dichiarare elementi e tipi di dato implica l'esistenza di un ambito di visibilità o contesto dei componenti dichiarati. I componenti di uno schema dichiarati al livello massimo, cioè come sottoelementi diretti dell'elemento root, sono considerati dichiarati a livello globale e possono essere utilizzati nel resto dello schema.

Nella dichiarazione di un tipo complesso è possibile fare riferimento ad elementi già esistenti dichiarati a livello globale oppure si possono definire nuovi elementi. La definizione di nuovi elementi all'interno di una definizione di tipo o di elemento costituisce una dichiarazione a livello locale. Ciò vuol dire che l'utilizzo di questi elementi è limitato alla definizione del tipo complesso in cui sono dichiarati e non possono essere utilizzati in altri punti dello schema.

I nomi degli elementi devono essere univoci nel contesto in cui compaiono. Questo significa, però, che in contesti diversi possiamo avere elementi con lo stesso nome ma con struttura diversa senza rischio di conflitti.

Per fare un'analogia con i classici linguaggi di programmazione, le dichiarazioni globali e locali di componenti di uno schema corrispondono alle dichiarazioni di variabili globali e locali in un'applicazione.

Il seguente codice riporta lo XML Schema per un linguaggio di descrizione di articoli visto nel paragrafo precedente, riorganizzato alla luce della possibilità di definire tipi di dato.

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

 <xs:element name="articolo">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="paragrafo" type="paragrafoType"
    maxOccurs="unbounded"/>
   </xs:sequence>
  <xs:attribute name="titolo" type="xs:string"
  use="required"/>
  </xs:complexType>
 </xs:element>

 <xs:complexType name="paragrafoType">
  <xs:all maxOccurs="unbounded">
   <xs:element name="immagine" type="immagineType"
   minOccurs="0"/>
   <xs:element name="testo"/>
   <xs:element name="codice" minOccurs="0"/>
  </xs:all>
  <xs:attribute name="titolo" type="xs:string"
  use="optional"/>
  <xs:attribute name="tipo" use="optional">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="abstract"/>
     <xs:enumeration value="bibliografia"/>
     <xs:enumeration value="note"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
 </xs:complexType>

 <xs:complexType name="immagineType">
  <xs:attribute name="file" use="required">
   <xs:simpleType>
    <xs:restriction base="xs:string"/>
   </xs:simpleType>
  </xs:attribute>
 </xs:complexType>

</xs:schema>

Come si può vedere, la leggibilità dello schema è molto maggiore rispetto alla prima versione. Inoltre, i tipi definiti a livello globale possono essere riutilizzati nel caso servisse modificare lo schema e quindi la struttura dei documenti XML risultanti.

Ti consigliamo anche