[Dizionario] Prova DB -> XML

Andrea Sivieri andrea.sivieri a libero.it
Mer 25 Set 2002 22:29:59 CEST


> Riassumento il mio parere e' questo:
> 
> - Database di raccolta dati (gestione) -> PostgreSQL
> - Database operativo -> file indicizzato, Berkeley DB o XML

L'XML, se non indicizzato, e` piu` adatto all'interscambio
di dati, che non all'estrazione real-time di parole e attributi
collegati. Lo affiancherei quindi piu` che altro al database SQL 
per la raccolta e l'interscambio di dati, visto anche che e` possibile 
in modo banale esportare una tabella di database sottoforma di XML
e viceversa. Per spostare grandi blocchi di dati (anche tra
db completamente diversi) e` molto comodo passare
per l'XML, invece che inserirli ad uno ad uno, ad esempio.

Quindi qualcosa tipo:
- raccolta dati: interfaccia web <-> database sql <-> XML
- database operativo: file indicizzato | Berkeley DB | formato MySpell |
   Embedded-DB | ...

Il flusso dati sarebbe in definitiva cosi` (il simbolo "|" indica "OR"):

(Interfaccia Web | XML) -> SQL-DB -> XML -> (file indicizzato | E-DB | ...)

Al posto delle frecce ci sarebbero dei programmi di trasformazione,
ma in alcuni casi ci sono gia` dei buoni ausili pronti per sperimentare
qualche prototipo. Ad esempio il phpMyAdmin puo` fare da interfaccia 
web generica per il MySQL e permette anche di esportare in XML le tabelle.
Il phppgadmin dovrebbe fare cose simili per il PostgreSQL, ma non
l'ho ancora provato: http://phppgadmin.sourceforge.net/?page=home
E` vero comunque che queste interfaccie non essendo specializzate
sul problema, mancano di molte cose che potrebbero essere utili...


Visto che oggi ero particolarmente ispirato ho provato a creare
una piccola tabella di prova e a popolarla.

Questa e` una definizione che ricalca un po' i miei ragionamenti 
del pomeriggio (lo so che i tipi sono stati dati in modo un po'
grossolano, ma questa e` solo una prova. L'attributo category 
potrebbe essere un ENUM ad esempio):

#
# Table structure for table `base_forms`
#

CREATE TABLE base_forms (
  word varchar(255) NOT NULL default '',
  omonim int(11) NOT NULL default '0',
  comment varchar(255) NOT NULL default '',
  category varchar(63) NOT NULL default '',
  class varchar(63) NOT NULL default ''
) TYPE=MyISAM;

E` da considerare chiave della tabella la combinazione
dell'attributo word con il codice omonim, perche` ad occhio
credo che esistano parole base omonime con forme derivate
che seguono regole diverse (pero` non mi vengono in mente
esempi).

Questo e` quello che si ottiene esportando in XML da 
phpMyAdmin il database di prova "diz" che ho popolato 
con un po' di forme base:

<?xml version="1.0" encoding="ISO-8859-1"?>
<diz>
<!-- table  base_forms -->
  <base_forms>
    <word>amare</word>
    <omonim>0</omonim>
    <comment/>
    <category>verb</category>
    <class>-are</class>
  </base_forms>
  <base_forms>
    <word>cercare</word>
    <omonim>0</omonim>
    <comment>questo e` solo un commento</comment>
    <category>verb</category>
    <class>-care</class>
  </base_forms>
  <base_forms>
    <word>seguire</word>
    <omonim>0</omonim>
    <comment/>
    <category>verb</category>
    <class>-ire</class>
  </base_forms>
  <base_forms>
    <word>finire</word>
    <omonim>0</omonim>
    <comment/>
    <category>verb</category>
    <class>-ire-isco</class>
  </base_forms>
  <base_forms>
    <word>contrarre</word>
    <omonim>0</omonim>
    <comment/>
    <category>verb</category>
    <class>-trarre</class>
  </base_forms>
  <base_forms>
    <word>detrarre</word>
    <omonim>0</omonim>
    <comment/>
    <category>verb</category>
    <class>-trarre</class>
  </base_forms>
  <base_forms>
    <word>amo</word>
    <omonim>0</omonim>
    <comment/>
    <category>noun</category>
    <class>m:-o-i</class>
  </base_forms>
  <base_forms>
    <word>circo</word>
    <omonim>0</omonim>
    <comment/>
    <category>noun</category>
    <class>m:-co-chi</class>
  </base_forms>
  <base_forms>
    <word>amico</word>
    <omonim>0</omonim>
    <comment/>
    <category>noun</category>
    <class>m:-co-ci</class>
  </base_forms>
  <base_forms>
    <word>libro</word>
    <omonim>0</omonim>
    <comment/>
    <category>noun</category>
    <class>m:-o-i</class>
  </base_forms>
  <base_forms>
    <word>cittą</word>
    <omonim>0</omonim>
    <comment/>
    <category>noun</category>
    <class>f:INV</class>
  </base_forms>
  <base_forms>
    <word>bar</word>
    <omonim>0</omonim>
    <comment/>
    <category>noun</category>
    <class>m:INV</class>
  </base_forms>
  <base_forms>
    <word>allegro</word>
    <omonim>0</omonim>
    <comment/>
    <category>adjective</category>
    <class>-o-i-a-e</class>
  </base_forms>
  <base_forms>
    <word>unico</word>
    <omonim>0</omonim>
    <comment/>
    <category>adjective</category>
    <class>-co-ci</class>
  </base_forms>
  <base_forms>
    <word>carico</word>
    <omonim>0</omonim>
    <comment/>
    <category>adjective</category>
    <class>-co-chi</class>
  </base_forms>
  <base_forms>
    <word>lungo</word>
    <omonim>0</omonim>
    <comment/>
    <category>adjective</category>
    <class>-go-ghi</class>
  </base_forms>
  <base_forms>
    <word>felice</word>
    <omonim>0</omonim>
    <comment/>
    <category>adjective</category>
    <class>-e-i</class>
  </base_forms>
</diz>

L'esempio non e` eccezionale, ma magari puo` favorire altre idee...  :-)

Ciao,
           Andrea




Maggiori informazioni sulla lista Dizionario