<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%