<XML...
UNIVERSITÀ DI MODENA E
REGGIO EMILIA
Facoltà di Ingegneria – Sede di Modena
Corso di Laurea in Ingegneria Informatica
Serializzazione di oggetti in formato XML
nell’ambito del sistema MOMIS
Tesi di:
Relatore:
Controrelatore:
Modena, 22/03/2001
Davide Lenzi
Chiar.mo Prof. Sonia Bergamaschi
Chiar.mo Prof. Michele Colajanni
...MOMIS/>
<XML...
Obiettivi
• Garantire l’interoperabilità con altri sistemi a mediatore
mediante l’uso di una lingua franca.
• Serializzare in XML lo stato del sistema MOMIS.
...MOMIS/>
0
100%
<XML...
Il sistema MOMIS
...MOMIS/>
0
100%
<XML...
Caratteristiche del linguaggio ODLI3
• Descrive schemi di basi di dati in maniera indipendente
dalla sorgente (relazionale, ad oggetti, semistrutturata)
• Estensione del linguaggio standard ODL di ODMG
• Linguaggio Object Oriented ricco di aspetti semantici.
• Definisce costrutti per la rappresentazione della
conoscenza: vincoli di integrità, relazioni intensionali
ed estensionali tra concetti.
• Definisce chiavi primarie, candidate e foreign key.
• supporta multiple definizioni per una stessa classe, utile
per rappresentare sorgenti semistrutturate.
...MOMIS/>
0
100%
<XML...
MOMIS produce il Global Virtual Schema
(GVS)
• Lo schema integrato è costruito partendo dalle varie
sorgenti e viene espresso in ODLI3 .
• Il GVS contiene un insieme di classi globali costruite a
partire dalle classi presenti negli schemi locali.
• per ogni classe globale viene definita una mapping
table: una struttura tabellare che descrive come i vari
attributi globali vengono costruiti a partire dagli
attributi locali.
...MOMIS/>
0
100%
<XML...
MOMIS come sorgente integrata di dati XML
• Esportare uno schema ODLI3 in XML 1.0 significa
creare una DTD che descriva la struttura dello schema
sorgente cercando di limitare perdite di conoscenza.
• La DTD prodotta potrà essere utilizzata:
– per validare i dati ritornati.
– come fonte di informazioni su un generico documento XML
sul quale porre delle query utilizzando un linguaggio di
interrogazione per XML: es. XML-QL
...MOMIS/>
0
100%
<XML...
ODLI3 vs DTD di XML 1.0
DTD:
ODLI3
• relazioni
fondamentali:
• relazioni fondamentali:
– Part-of
– Part-of
– Kind-of
– Is a
– Kind-of solo in forma implicita
• vincoli di integrità,
relazioni intensionali,
relazioni estensionali,
chiavi
Non ci sono altri strumenti! Parte
della conoscenza viene
necessariamente perduta.
...MOMIS/>
0
100%
<XML...
Aspetti tradotti direttamente o comunque
supportati dalla DTD:
•
•
•
•
Struttura delle entità definite in ODLI3
Mapping table
Ereditarietà
traduzione della relazione “is a”
– algoritmo per l’esplorazione ricorsiva della discendenza per
costruire la lista di tutte le possibili alternative.
•
•
•
•
Definizioni di interfacce in union. (operatore | )
Template types (uso dell’operatore “*”)
attributi opzionali (uso dell’operatore “?”)
Relationship ODL
...MOMIS/>
0
100%
<XML...
Semantica solamente descritta:
• Viene prodotto un elemento XML che riporta meta
informazioni
– Chiavi primarie
– Chiavi candidate
– Foreign Key
• Altre informazioni:
– Tipi ODLI3
– Mapping tra nomi ODLI3 e nomi usati nella DTD
– Nomi delle relationship inverse
...MOMIS/>
0
100%
<XML...
Conoscenza perduta:
• relazioni intensionali ed estensionali
• vincoli di integrità
...MOMIS/>
0
100%
<XML...
Esempio: classe ODLI3
class course ( source relational
university
key (name)
) {
attribute boolean difficult;
attribute string name;
}
course
spec_course
class spec_course : course (
) {
attribute set<course> requires;
}
...MOMIS/>
0
100%
<XML...
Esempio: traduzione DTD
class course (
source relational university
key (name)
) {
attribute boolean difficult;
attribute string name;
}
<!ELEMENT course (difficult, name)>
<!ATTLIST course
id_xml
ID
#REQUIRED
...>
<!ELEMENT difficult EMPTY>
<!ATTLIST difficult value (true|false)
#REQUIRED >
<!ELEMENT name (#PCDATA)>
class spec_course : course (
) {
attribute set<course>
requires;
}
<!ELEMENT spec_course (course, requires)>
<!ELEMENT requires (course | spec_course |
odli3_reference)*>
<!ELEMENT odli3_reference EMPTY>
<!ATTLIST odli3_reference
reference
IDREF
#IMPLIED
>
...MOMIS/>
0
100%
<XML...
Conclusioni
• Il traduttore ODLI3-DTD sono state scritte 3073 linee
di codice commentato
– Per tradurre gli aspetti semantici si sta studiando la possibilità
di utilizzare RDF e RDF Schema
– Per supportare la traduzione diretta dei tipi ODLI3 si pensa di
scrivere un traduttore anche per XML schema.
...MOMIS/>
0
100%
<XML...
Serializzare lo stato di MOMIS in XML
• In realtà si è risolto un problema più generale: la
serializzazione di qualunque grafo di oggetti Java in
XML.
• Gli oggetti sono entità software caratterizzate da:
– uno stato, formato da vari componenti (campi)
– operazioni, unico strumento per modificare lo stato interno
• Serializzare significa ordinare, mettere in sequenza i
vari componenti dello stato, al fine di ottenerne uno
stream.
...MOMIS/>
0
100%
<XML...
Serializzare in XML:
• facilita lo scambio di informazioni tra ambienti
eterogenei e si permette l’impiego del proprio software
per scopi differenti da quelli per cui era stato progettato.
– la deserializzazione è possibile solo se si conosce il protocollo
utilizzato (significato dei nomi dei tag e degli attributi)
• ma...
– le informazioni risultano comunque accessibili grazie allo
standard XML.
• Problema: alto livello di ridondanza insito nella sintassi
XML.
– Sono stati studiati degli accorgimenti per ridurla
...MOMIS/>
0
100%
<XML...
Il package XmlTools:
• Serializzazione/deserializzazione di grafi di oggetti Java
– l’uso del linguaggio Java è un vincolo di progetto.
• Trasparente all’utilizzatore.
– Oggetti visti come “black box”
• Flessibile e personalizzabile: il codice XML prodotto
varia in base ai desideri dell’utente.
• Basato sulle “Java Object Serialization Specification”
per ottenere una forte integrazione con il meccanismo
standard fornito dal linguaggio.
• Forte insensibilità all’evoluzione delle classi (Class
versioning).
...MOMIS/>
0
100%
<XML...
XmlTools: Architettura.
...MOMIS/>
0
100%
<XML...
Quali classi sono serializzabili?
• Da un punto di vista tecnico XmlTools è in grado di
serializzare qualunque classe.
• Tuttavia per questioni di protezione e per uniformarsi al
meccanismo standard di Java, vengono serializzate solo
le classi che implementano l’interfaccia “Serializable” o
una delle sue estensioni.
• “Serializable” è un’interfaccia vuota! Serve solo a
distinguere le classi che possono essere serializzate
dalle altre.
...MOMIS/>
0
100%
<XML...
Il processo di serializzazione (grafi)
• Problema:
– Non si serializzano singoli oggetti ma grafi di oggetti.
– Lo stato di un oggetto può contenere riferimenti ad altri
oggetti o riferimenti ricorsivi a se stesso.
– Tutti gli oggetti accessibili a partire dalla radice del grafo
vanno anch’essi serializzati.
...MOMIS/>
0
100%
<XML...
Il processo di serializzazione (grafi)
• Soluzione
– Ogni singolo oggetto viene serializzato un’unica volta:
nell’elemento che contiene la definizione del suo stato viene
scritto un attributo contenente un identificatore numerico:
<object object_ID=“123” class=“Person”>
<object field=“Name” class=“java.lang.String”...
– Ogni successivo riferimento allo stesso oggetto provoca la
scrittura di un elemento XML vuoto con un riferimento alla
definizione vera e propria.
<object field=“owner” object_REF=“123” />
...MOMIS/>
0
100%
<XML...
Personalizzazione dell’output.
• Supporto di tutti gli strumenti standard di
personalizzazione presenti nelle specifiche java: metodi
writeObject/readObject, interfaccia “Externalizable”.
• Supporto di interfacce analoghe specifiche per XML.
• oppure tramite l’impostazione di semplici proprietà
booleane è possibile scegliere vari formati senza
scrivere linee di codice. Esempi:
– <object field=“name” class=“java.lang.String” object_ID=“000”>
– <java.lang.String field=“name” object_ID=“000”>
– <String field=“name” class=“java.lang.String”>
...MOMIS/>
0
100%
<XML...
Serializzazione: Altre Caratteristiche
• riduzione della ridondanza:
– Uso di valori di default: eliminazione dei valori null negli
array
– eliminazione dei tag che descrivono superclassi prive di
campi serializzabili.
• Bilanciamento facoltativo della struttura XML per
limitarne la profondità e favorire la ricerca di
informazioni.
• Protezione delle informazioni sensibili: supporto alla
parola riservata transient del linguaggio Java
...MOMIS/>
0
100%
<XML...
Il processo di ricostruzione
(object deserialization)
• XmlReader implementa un algoritmo di ricostruzione
delle istanze che può essere riassunto in due passi
principali:
– Allocare una nuova istanza appartenente alla classe
specificata nel documento XML.
– Ripristinare lo stato serializzato mantenendo se possibile la
compatibilità con le versioni precedenti della stessa classe.
• La difficoltà maggiore nella realizzazione di
XmlReader è stata la progettazione di un algoritmo che
consentisse una comunicazione bidirezionale tra
versioni differenti delle stesse classi.
...MOMIS/>
0
100%
<XML...
XmlReader, altre caratteristiche
• Supporta la ricostruzione di istanze anche per i
documenti Bilanciati.
• Possibilità di registrare dei callback per effettuare
ulteriori validazioni o inizializzazioni prima che il
grafo di oggetti sia ritornato all’utilizzatore. (Es:
apertura di file)
...MOMIS/>
0
100%
<XML...
Conclusioni XmlTools
• Per XmlTools sono state digitate 5564 linee di codice
commentato.
– XmlTools è attualmente utilizzato per serializzare e
deserializzare lo stato dell’intero sistema MOMIS in XML
• Durante la tesi sono state prodotte 8637 linee di codice
totali.
...MOMIS/>
0
100%
Scarica

- DBGroup