XML - Schemi

XML Schema è comunemente noto come XML Schema Definition (XSD). Viene utilizzato per descrivere e convalidare la struttura e il contenuto dei dati XML. Lo schema XML definisce gli elementi, gli attributi e i tipi di dati. L'elemento dello schema supporta gli spazi dei nomi. È simile a uno schema di database che descrive i dati in un database.

Sintassi

È necessario dichiarare uno schema nel documento XML come segue:

Esempio

L'esempio seguente mostra come utilizzare lo schema:

<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   <xs:element name = "contact">
      <xs:complexType>
         <xs:sequence>
            <xs:element name = "name" type = "xs:string" />
            <xs:element name = "company" type = "xs:string" />
            <xs:element name = "phone" type = "xs:int" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

L'idea alla base degli schemi XML è che descrivono il formato legittimo che un documento XML può assumere.

Elementi

Come abbiamo visto nel capitolo XML - Elementi , gli elementi sono i mattoni del documento XML. Un elemento può essere definito all'interno di un XSD come segue:

<xs:element name = "x" type = "y"/>

Tipi di definizione

È possibile definire gli elementi dello schema XML nei seguenti modi:

Tipo semplice

L'elemento di tipo semplice viene utilizzato solo nel contesto del testo. Alcuni dei tipi semplici predefiniti sono: xs: integer, xs: boolean, xs: string, xs: date. Ad esempio:

<xs:element name = "phone_number" type = "xs:int" />

Tipo complesso

Un tipo complesso è un contenitore per altre definizioni di elementi. Ciò consente di specificare quali elementi figlio un elemento può contenere e di fornire una struttura all'interno dei documenti XML. Ad esempio:

<xs:element name = "Address">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "name" type = "xs:string" />
         <xs:element name = "company" type = "xs:string" />
         <xs:element name = "phone" type = "xs:int" /> 
      </xs:sequence> 
   </xs:complexType>
</xs:element>

Nell'esempio precedente, l' elemento Address è costituito da elementi figlio. Questo è un contenitore per altri<xs:element> definizioni, che permette di costruire una semplice gerarchia di elementi nel documento XML.

Tipi globali

Con il tipo globale, puoi definire un singolo tipo nel tuo documento, che può essere utilizzato da tutti gli altri riferimenti. Ad esempio, supponi di voler generalizzare la persona e la società per diversi indirizzi della società. In tal caso, è possibile definire un tipo generale come segue:

<xs:element name = "AddressType">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "name" type = "xs:string" />
         <xs:element name = "company" type = "xs:string" />
      </xs:sequence> 
   </xs:complexType>
</xs:element>

Ora usiamo questo tipo nel nostro esempio come segue:

<xs:element name = "Address1">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "address" type = "AddressType" />
         <xs:element name = "phone1" type = "xs:int" /> 
      </xs:sequence> 
   </xs:complexType>
</xs:element> 

<xs:element name = "Address2">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "address" type = "AddressType" />
         <xs:element name = "phone2" type = "xs:int" /> 
      </xs:sequence> 
   </xs:complexType>
</xs:element>

Invece di dover definire il nome e la società per due volte (una volta per Indirizzo1 e una volta per Indirizzo2 ), ora abbiamo una definizione unica. Ciò semplifica la manutenzione, ovvero, se si decide di aggiungere elementi "Codice postale" all'indirizzo, è necessario aggiungerli in un unico punto.

Attributi

Gli attributi in XSD forniscono informazioni aggiuntive all'interno di un elemento. Gli attributi hanno proprietà di nome e tipo come mostrato di seguito:

<xs:attribute name = "x" type = "y"/>