Rappresentazione in XML di una semplice base di dati

Il linguaggio XML può essere utilizzato come fonte di dati. Vediamo come rappresentare in XML una semplice base di dati, definendone lo schema e i tipi di dati contenuti in essa. Ci serviremo di XML-Data, un'applicazione XML ideata dalla Microsoft per sostituire le DTD.

IMPIEGATO (Matricola, Nome, Cognome, Dipart, Ufficio, Stipendio)

DIPARTIMENTO (Nome, Indirizzo, Città)

Sono sottolineate le chiavi primarie delle due tabelle. I database consentono la definizione di chiavi primarie multiparte, costituite da più di una colonna. Questa possibilità è prevista nella bozza di lavoro di XML-Data presentata al W3C, ma, al momento, non è ancora implementata in Explorer 5. Per questo motivo ci limitiamo ad utilizzare colonne singole come chiavi, realizzandole per mezzo degli identificatori univoci di XML.

Supponiamo che le tabelle definite precedentemente siano riempite da questi dati:

IMPIEGATO

Matricola

Nome

Cognome

Dipart

Ufficio

Stipendio

RSSMRA
BNCCRL
VRDGSP
NREFRN
RSSCRL
LNZLRN
BRRPLA
FRNMRC

Mario
Carlo
Giuseppe
Franco
Carlo
Lorenzo
Paola
Marco

Rossi
Bianchi
Verdi
Neri
Rossi
Lanzi
Borroni
Franco

Amministrazione
Produzione
Amministrazione
Distribuzione
Direzione
Direzione
Amministrazione
Produzione

10
20
20
16
14
7
75
20

45
36
40
45
80
73
40
46


DIPARTIMENTO

Nome

Indirizzo

Città

Amministrazione
Produzione
Distribuzione
Direzione
Ricerca

Via Tito Livio, 27
P.le Lavater, 3
Via Segre, 9
Via Tito Livio, 27
Via Morone, 6

Milano
Torino
Roma
Milano
Milano

Definizione dello schema Espandi

Vediamo lo schema XML-Data che descrive la nostra base di dati:

<?xml version="1.0"?>
<Schema name="
DataBase"
        xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <ElementType name="
DATABASE" content="eltOnly">
    <element type="
IMPIEGATI"/>
    <element type="
DIPARTIMENTI"/>
  </ElementType>
  <ElementType name="
IMPIEGATI" content="eltOnly">
    <element type="
IMPIEGATO" maxOccurs="*"/>
  </ElementType>
  <AttributeType name="
Matricola" dt:type="id" required="yes"/>
  <AttributeType name="
Dipart" dt:type="idref" required="yes"/>
  <ElementType name="
IMPIEGATO" content="eltOnly">
    <element type="
Nome"/>
    <attribute type="
Matricola"/>
    <element type="
Cognome"/>
    <attribute type="
Dipart"/>
    <element type="
Ufficio"/>
    <element type="
Stipendio"/>
  </ElementType>
  <ElementType name="
Nome" content="textOnly"/>
  <ElementType name="
Cognome" content="textOnly"/>
  <ElementType name="
Ufficio" dt:type="ui1"/>
  <ElementType name="
Stipendio" dt:type="r4"/>
  <ElementType name="
DIPARTIMENTI" content="eltOnly">
    <element type="
DIPARTIMENTO" maxOccurs="*"/>
  </ElementType>
  <AttributeType name="
Nome" dt:type="id" required="yes"/>
  <ElementType name="
DIPARTIMENTO" content="eltOnly">
    <attribute type="
Nome"/>
    <element type="
Indirizzo"/>
    <element type="
Citta"/>
  </ElementType>
  <ElementType name="
Indirizzo" content="textOnly"/>
  <ElementType name="
Citta" content="textOnly"/>
</Schema>

Abbiamo utilizzato lo schema di XML-Data, anziché la DTD, per sfruttare lo spazio dei nomi:

urn:schemas-microsoft-com:datatypes

che permette di specificare il formato dei dati contenuti negli elementi e negli attributi

La scarsa compatibilità con gli spazi dei nomi è uno dei difetti principali delle DTD, e deriva dal fatto che le DTD sono nate con SGML, mentre gli spazi dei nomi sono una tecnologia molto più recente. È evidente, pertanto, la necessità di implementare un linguaggio per la definizione degli schemi pienamente compatibile con gli spazi dei nomi e che offra le potenzialità dei moderni database, altrimenti sarà impossibile realizzare delle vere basi di dati tramite XML. Non sappiamo se XML-Data risolverà tutti questi problemi, poiché il W3C sta lavorando su un altro linguaggio per la definizione degli schemi, chiamato XML-Schema.

Documento XML contenente i dati Espandi

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="
DB.xsl"?>
<DATABASE xmlns="x-schema:
DBschema.xml">
  <IMPIEGATI>
    <IMPIEGATO Matricola="
RSSMRA" Dipart="Amministrazione">
      <Nome>
Mario</Nome>
      <Cognome>
Rossi</Cognome>
      <Ufficio>
10</Ufficio>
      <Stipendio>
45</Stipendio>
    </IMPIEGATO>
[…]
  </IMPIEGATI>
  <DIPARTIMENTI>
    <DIPARTIMENTO Nome="
Amministrazione">
      <Indirizzo>
Via Tito Livio, 27</Indirizzo>
      <Citta>
Milano</Citta>
    </DIPARTIMENTO>
[…]
  </DIPARTIMENTI>
</DATABASE>

Listato completo
Foglio di stile per la visualizzazione dei dati

Struttura ad albero del documento XML Espandi

Dal grafo si nota che l'attributo Dipart dell'elemento IMPIEGATO è un riferimento ad uno degli elementi DIPARTIMENTO.

Slide precedenteProssima slideIndiceBibliografia

Altre slides: