Conversione tra formati documentali aperti

Transcript

Conversione tra formati documentali aperti
Indice
1.
INTRODUZIONE ................................................................................... 3
2.
LA CONVERSIONE TRA FORMATI .................................................... 6
2.1
La rappresentazione del testo ............................................................. 7
2.2
Il markup .......................................................................................... 9
2.3
Segmentazione dei documenti ......................................................... 12
2.4
Modelli generali di conversione....................................................... 15
2.4.1
Modello diretto ........................................................................ 15
2.4.2
Modello ad anello .................................................................... 16
2.4.3
Modello con formato intermedio .............................................. 17
2.5
3.
2.5.1
Microsoft Office e OpenXML .................................................. 19
2.5.2
OpenXML/ODF Translator 1.0 ................................................ 20
2.5.3
Microsoft Office Compatibility Pack ........................................ 21
2.5.4
OpenXML File Format Converter for Mac 0.1.1 (Beta) ............ 21
2.5.5
docXConverter 1.3 ................................................................... 22
CONVERSIONE DA OFFICE OPENXML........................................... 23
3.1
4.
Office OpenXML e convertitori ...................................................... 18
Office OpenXML ............................................................................ 23
3.1.1
Specifiche tecniche .................................................................. 23
3.1.2
Basi di WordprocessingML ...................................................... 25
3.2
IML ................................................................................................ 29
3.3
Si-ConForMi OpenXML ................................................................. 31
3.3.1
Uso di Si-ConForMi OXML .................................................... 33
3.3.2
Obiettivi raggiunti .................................................................... 34
3.3.3
Esempi di conversione ............................................................. 35
IMPLEMENTAZIONE DI “SI-CONFORMI OXML”........................... 40
1
5.
4.1
API in Java per XML ...................................................................... 40
4.2
Il motore di conversione (Java) ....................................................... 41
4.2.1
DocumentConverter.java ......................................................... 42
4.2.2
ZipCompressor.java ................................................................. 43
4.2.3
DocumentMapper.java ............................................................. 43
4.2.4
XmlParser.java ........................................................................ 44
4.2.5
MapParser.java ........................................................................ 44
4.2.6
RelParser.java .......................................................................... 44
4.2.7
XSLTransformer.java .............................................................. 44
4.2.8
ImlParser.java .......................................................................... 44
4.3
MappingML.................................................................................... 45
4.4
XSLT .............................................................................................. 46
4.4.1
Trasformazione OOXML(MappingML) – IML ........................ 46
4.4.2
Trasformazione IML-OOXML(MappingML) .......................... 47
4.5
Conversione OOXML – IML .......................................................... 47
4.6
Conversione IML - OOXML .......................................................... 49
4.7
Limiti dell‟implementazione ........................................................... 50
CONCLUSIONI.................................................................................... 51
Elenco delle figure ........................................................................................ 53
Bibliografia ................................................................................................... 54
Ringraziamenti.............................................................................................. 57
2
1. INTRODUZIONE
Lo scopo di questa tesi è dimostrare che la conversione dei formati
documentali è un problema che può essere risolto mediante la risoluzione dei
suoi sottoproblemi di conversione, raggiungendo in questo modo un risultato
più funzionale. In particolare viene proposto un approccio di conversione tra
documenti digitali basato su segmentazione, ossia su scomposizione e
conversione sistematica di sotto-componenti.
La conversione di un formato documentale è quindi un problema che può
essere frammentato in più parti, che sono l‟identificazione e la conversione
delle singole sotto-componenti che descrivono il documento, e la
scomposizione del processo di trasformazione verso il formato di arrivo
(utilizzando un formato intermedio per il mapping dei vari tipi di dati). Questo
sistema consente di ottenere un maggiore controllo sulla gestione della
conversione stessa, poiché permette di agire in maniera diretta sulle singole
componenti di interesse del documento. Inoltre, seguendo un modello di
conversione che passa attraverso un formato intermedio viene semplificata
notevolmente l‟architettura generale permettendo di creare un convertitore
versatile, ed aperto a nuovi sviluppi con la possibilità di gestire potenzialmente
un qualsiasi formato target.
L‟argomento di questa tesi è incentrato su di un progetto che prevede la
realizzazione di un convertitore bidirezionale tra formati documentali XML
aperti, in particolare da Office OpenXML, un formato che cerca di imporsi
come standard per la rappresentazione dei documenti, e un formato intermedio
che apre le porte alla portabilità e alla pluralità dei formati.
La conversione dei dati è sempre stato un problema cardine sin da quando
esiste la necessità dello scambio di informazioni tra applicazioni diverse. Tale
problema si è poi accentuato con la nascita ed il moltiplicarsi delle tipologie di
documenti, soprattutto con lo sviluppo di Internet e del World Wide Web nei
primi anni novanta. Internet ha infatti aumentato in modo esponenziale lo
scambio dei documenti e subito si è sentita la necessità di creare degli standard.
Uno dei più importanti per Internet è stato ovviamente l’HyperText Markup
Language (HTML) [W3C07] che grazie anche alla sua semplicità, ha ottenuto
una rapida diffusione. L‟altra faccia della medaglia si vide però quando
l‟HTML cominciò ad essere utilizzato più per l‟aspetto presentazionale che per
quello semantico. In aggiunta si scorsero ben presto i suoi limiti progettuali e
3
nacque la necessità di trovare soluzioni che permettessero di aumentare le
potenzialità grafiche cercando di separarle quanto più possibile dai contenuti.
Con la standardizzazione di Extensible Markup Language (XML) [W3C06] si
videro le potenzialità che questo meta-linguaggio di markup poteva offrire
anche come sostituto dell‟HTML nel ruolo di standard per il World Wide Web.
In particolare l‟XML porta con sé l‟innegabile vantaggio della creazione di
documenti auto-descrittivi che trasformati poi attraverso l‟uso di fogli di stile
permettono un maggior controllo sull‟aspetto presentazionale e una maggiore
indipendenza del contenuto a vantaggio di una maggiore leggibilità del codice.
Grazie a questa caratteristica e per come è stato progettato, l‟XML va al di là
del semplice obiettivo di sostituzione di un linguaggio, ma si presenta come la
soluzione per l‟interscambio dei dati.
XML è tuttora diventato il fondamento dei più moderni formati documentali.
E‟ utilizzato non solo per la descrizione di documenti di word processing
(formati come Open Document Format e Office OpenXML), ma per la
creazione di formati appartenenti a molteplici campi di applicazione, come la
grafica (Scalable Vector Graphics, Vector Markup Language) la musica
(MusicXML) e la matematica (Mathematical Markup Language).
Grazie a questa intercompatibilità e al supporto di una vera e propria famiglia
di linguaggi derivati che ne permettono la gestione e la trasformazione, XML
ha fornito un notevole contributo al settore della conversione dei dati.
La principale necessità degli utenti è quella infatti di poter passare da un
formato all‟altro in base alle proprie esigenze. Il più delle volte un documento
per essere processato ha bisogno di un software dedicato, e questo comporta
generalmente un problema per chi non dispone dell‟applicativo specifico.
Multinazionali del software, come ad esempio Microsoft ed Adobe, hanno
sempre cercato di mantenere una politica chiusa verso la compatibilità dei loro
formati con altre applicazioni, questo per cercare di vincolare in un qualche
modo le scelte degli utenti all‟uso dei loro programmi proprietari.
Un altro problema è quello della riutilizzabilità dei documenti, quando si ha la
necessità di recuperare un documento esistente per poterlo riadoperare in un
diverso ambito, oppure nel più semplice dei casi, per poter effettuare dei
cambiamenti sugli stili o la formattazione senza la necessità di dover apportare
manualmente le modifiche.
Per questi motivi la ricerca e lo sviluppo di software per la conversione dei dati
ha acquisito col tempo notevole importanza.
4
I software di conversione tuttora più diffusi sono quelli che operano in
modalità diretta da un formato all‟altro, ma purtroppo questi sono limitati
poiché non offrono quella versatilità di impiego desiderata, ed un utente ha
sempre l‟obbligo di dover cercare un programma specifico che attui la
conversione da lui richiesta.
Per questo si sente l‟esigenza di usufruire di convertitori di tipo universale che
operino la conversione verso un qualunque formato di destinazione. Come
discuteremo nel capitolo successivo per poter sviluppare un convertitore di
questo genere è però necessario rinunciare ad un modello di trasformazione
diretta a causa dei ragguardevoli costi di sviluppo e della sua architettura
complessa che sfavorisce il supporto di nuovi formati (uno svantaggio
abbastanza rilevante, dato dal fatto che l‟introduzione di nuovi formati sul Web
è un evento abbastanza frequente).
Per questo è fondamentale scomporre il processo di trasformazione in due fasi:
la prima che trasforma il documento da un formato sorgente ad un formato
intermedio, la seconda dal formato intermedio a quello target. Un convertitore
che segue questo tipo di modello è potenzialmente universale, vale a dire che
apportando i relativi aggiornamenti è possibile supportare con costi di sviluppo
limitati nuovi formati senza la necessità di dover modificare in modo rilevante
l‟architettura esistente.
Sviluppando poi un convertitore con un approccio basato sulla segmentazione
dei documenti, come nel caso del mio progetto, il processo di conversione di
un documento viene ulteriormente semplificato, poiché si suddivide nei relativi
processi di trasformazione delle sue sotto-componenti. Avendo un maggiore
controllo sulla gestione delle singole parti è possibile, oltre a migliorare la
qualità dell‟output nel formato finale, poter interscambiare tali componenti con
altre dello stesso tipo. Ciò rende possibile anche la modifica o la sostituzione di
una sola componente del documento originale ottenendo un documento
completamento diverso. Inoltre si aprono nuove opportunità che consistono
nella possibilità di utilizzare il convertitore anche per scopi diversi da quello
della conversione.
L‟esempio più calzante è quello del formatter, che ha il compito di cambiare gli
elementi di presentazione mantenendo lo stesso contenuto del documento di
partenza.
Nel successivo capitolo approfondiremo il tema della conversione tra i formati
cercando di analizzare il problema sin dalle sue origini.
5
2. LA CONVERSIONE TRA
FORMATI
Non ci sono parole per descrivere come la rivoluzione tecnologica portata da
Internet ha cambiato la nostra vita e di come può ancora evolvere. Da un‟idea
innovativa, un sogno , quello di poter condividere documentazione scientifica
in formato digitale, è nato nei primi anni novanta per mano del CERN
(Consiglio Europeo di Ricerca Nucleare) il World Wide Web. Allora non si
sarebbe mai immaginato che un progetto di questo tipo per quanto ambizioso
potesse essere, avrebbe acquisito l‟importanza e il successo odierno.
L‟opportunità di distribuire e reperire documenti, immagini, video, contenuti
multimediali e condividerli con il mondo in modo facile, veloce ed economico
è oggi divenuta una realtà per chiunque. Questa opportunità ci è stata data non
solo grazie all‟infrastruttura informatica mondiale, ma anche dall‟adozione di
formati come l‟HTML che ci permettono di descrivere i nostri dati in un
linguaggio di espressione comune, superando così le diversità delle piattaforme
e dei sistemi informativi.
La diffusione del Web e del suo sviluppo in molti settori di varia natura (che va
da quello della ricerca, a quello privato fino a quello commerciale) ha fatto sì
che venissero impiegati formati di memorizzazione dei dati sempre diversi per
venire incontro a differenti esigenze applicative. La molteplicità dei formati
che si possono trovare in rete hanno spesso bisogno di applicazioni dedicate in
grado di processarli, e questo comporta generalmente un problema per chi non
dispone del software necessario. Inoltre se si ha la necessità di modificare un
documento esistente oppure semplicemente riutilizzarlo in un diverso campo di
applicazione non è sempre possibile in maniera diretta.
Una soluzione idealizzata a questa difformità potrebbe essere quella di definire
un formato universale, cioè un formato standard di memorizzazione alla quale
tutti si dovrebbero attenere. Purtroppo la storia ci insegna che un consenso
globale è molto difficile da ottenere, specialmente quando si ha a che fare con
esigenze molto diverse. Ciò la rende una soluzione pressoché improponibile.
Per questi motivi nasce l‟esigenza di una conversione automatizzata dei dati fra
formati documentali.
Tuttavia la presenza meta-linguaggi in grado di generare linguaggi di markup
(argomento che affronteremo nella sezione successiva) fornisce un notevole
6
supporto al lavoro di conversione, in quanto agevola l‟identificazione della
struttura dei dati, in modo da rendere più facile la trasposizione fra formati. Fin
dapprima la nascita del Web diversi enti internazionali come ad esempio
l‟International Organization for Standardization (ISO) e l‟Institute of Electrical
and Electronics Engineers (IEEE) si muovono da sempre in questa direzione,
proponendo, concordando e ratificando nuovi standard nei diversi ambiti
cercando di agevolare la compatibilità delle tecnologie. Un traguardo
importante è stato raggiunto ad esempio da Standard Generalized Markup
Language (SGML, ISO 8879) [W3C95] dalla quale è derivato in seguito anche
l‟attuale HTML.
La vera rivoluzione però è stata rappresentata da XML, anch‟esso uno un metalinguaggo standard derivato da SGML ma con le caratteristiche necessarie per
diventare la base di tutti i più moderni formati documentali come Office
OpenXML [ECM06] e Open Document Format [OAS07].
In generale la conversione dei dati è un problema che ha soluzione tanto
complessa quanto sono strutturalmente differenti i formati da convertire. Per
capire meglio come affrontarlo in questo capitolo analizzeremo i principali
metodi di rappresentazione di un documento in formato elettronico, di come si
può scomporre un documento in varie parti fino ad arrivare ai modelli generali
di conversione. Infine parleremo di Office OpenXML e porteremo anche alcuni
esempi di convertitori che interessano il formato.
2.1
La rappresentazione del testo
Esistono vari metodi di riprodurre un documento cartaceo in formato
elettronico. I principali sono i seguenti [DDMR90]:
testo come bitmap: il documento è memorizzato in un file grafico ed è
descritto come griglia ortogonale di punti. La digitalizzazione di un
documento con uno scanner è l‟esempio più lampante per questo tipo di
rappresentazione. Un modello di questo tipo non permette alcun tipo di
accesso o modifica diretta al contenuto, esistono però tecnologie basate sul
riconoscimento del testo in grado di catturare dalle immagini sequenze
testuali e di interpretarle come sequenze di caratteri;
testo come stream di caratteri: è la forma più semplice per memorizzare un
flusso di testo. Essa prevede una semplice sequenza di caratteri con
l‟utilizzo di pochi caratteri separatori (come whitespaces e line breaks). E‟
la forma più comune di documento testuale non strutturato;
7
testo come stream di caratteri ed istruzioni di formattazione: è il modello
più utilizzato dai semplici editor di testo. Il modello prevede la
memorizzazione di stream di caratteri e di qualche istruzione per una
formattazione minimale. La strutturazione è comunque molto limitata in
quanto le informazioni presentazionali sono facoltative e strettamente
dipendenti dall‟applicazione di editing;
testo come stream di oggetti non gerarchici: questo tipo di modello è
utilizzato nella rappresentazione di documenti come Open XML. Essi
possiedono una struttura di elementi piatta e priva di gerarchia, con un
livello di annidamento degli elementi prestabilito. La categorizzazione del
ruolo degli elementi esiste ma è solo emulata con l‟assegnazione di attributi
di stile, utilizzati al solo scopo di definirne le caratteristiche presentazionali.
<w:p>
<w:pPr>
<w:pStyle w:val=”Titolo”/>
</w:pPr>
<w:r>
<w:t>Il titolo del mio documento</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val=”Sottotitolo”/>
</w:pPr>
<w:r>
<w:t>Il sottotitolo del mio documento</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:pStyle w:val=”Normale”/>
</w:pPr>
<w:r>
<w:t>Contenuto del mio paragrafo</w:t>
</w:r>
</w:p>
testo come stream di oggetti gerarchici: è il modello definito come
Ordered Hiercal of Content Object (OHCO) il quale categorizza il
contenuto in elementi che sono totalmente indipendenti dalla loro
forma presentazionale.
8
<titolo>Il titolo del mio documento</titolo>
<sottotitolo>Il sottotitolo del mio
documento</sottotitolo>
<paragrafo>Contenuto del mio paragrafo</paragrafo>
I formati più diffusi sono basati sugli ultimi due modelli poiché il documento
ha una disposizione naturale alla suddivisione in parti ed oggetti. Tutt‟ora vi
sono però opinioni discordanti su quale sia la semantica che tali oggetti
debbano assumere. Gli sviluppatori del modello OHCO sono convinti che la
struttura gerarchica sia la forma migliore di espressione perché permette di
individuare e definire il ruolo degli elementi all‟interno del documento in modo
indipendente dalla presentazione [DDMR90] [DDMR96]. Altri (come ad
esempio gli sviluppatori di word processor) preferiscono disporre di una
struttura piatta, categorizzando gli elementi in base alla tipologia del contenuto
e a come devo apparire, poiché l‟aspetto è spesso quello che interessa
maggiormente all‟utente al momento della stampa.
Non esiste quindi un modello più corretto dell‟altro, esiste solo un approccio
migliore in base al contesto di utilizzo.
2.2
Il markup
Se volessimo ideare la forma di un documento come stream di testo dovremmo
innanzitutto pensare ad una struttura logica (che per noi abbia un significato
ben preciso) per esprimere le varie parti del nostro contenuto, in modo da
poterla interpretare all‟occorrenza; il primo istinto sarebbe quello di cercare di
descrivere le caratteristiche di ogni frammento del documento al fine di
esplicitare cosa sono, cosa devono rappresentare e come devono apparire.
L‟obiettivo sarebbe quindi “marcare” le varie parti del nostro contenuto per
definire che cosa per noi esse rappresentano.
In conclusione al termine del lavoro avremmo definito un nostro linguaggio di
markup. Markup è infatti definito in [CRD87] come ogni mezzo per rendere
esplicita una particolare interpretazione di un testo, ossia tutti quegli elementi
logici che ci permettono di agevolare la comprensione di un testo. Quindi
anche la punteggiatura è markup, in quanto non è testo ma ci serve per renderlo
più leggibile.
Vengono fatte varie classificazioni dei markup, fra le quali la diversificazione
fra binari (in linguaggio macchina) e human-readable (creato per poter essere
9
compreso da persone) e fra interni (markup inseriti all‟interno del contenuto
stesso) ed esterni (netta distinzione fra markup e contenuto). Un‟ulteriore
classificazione universalmente riconosciuta è quella effettuata da Coombs e
DeRose [CRD87] che distingue i markup in base alla loro funzionalità:
Markup Puntuazionale: aggiunge informazioni sintattiche al testo
(punteggiatura);
Markup Presentazionale: racchiude informazioni riguardanti la
presentazione del contenuto (come formattazione, stili ed effetti grafici);
Markup Procedurale: contiene una sequenza di comandi e procedure per il
sistema per la visualizzazione del contenuto;
Markup Descrittivo: identifica strutturalmente il contenuto assegnandogli un
ruolo all‟interno del documento;
Markup Referenziale: fa riferimento ad un‟entità esterna per fornire
significato o effetto grafico al contenuto;
Metamarkup: fornisce regole per l‟interpretazione del markup permettendo
di estendere e gestire markup;
L‟utilizzo dei markup descrittivi (soprattutto con l‟introduzione di SGML ed in
seguito XML) ha prevalso quello dei procedurali poiché col tempo hanno
dimostrato di possedere diverse caratteristiche qualitative. Ad esempio la
possibilità di definire il ruolo di un elemento all‟interno del documento senza la
necessità di ridefinire ad ogni occorrenza le sue proprietà di visualizzazione
(come invece esige la sintassi di un markup di tipo procedurale); questa è una
proprietà importante poiché ogni sistema di visualizzazione impone le proprie
regole sintattiche ed il markup descrittivo permette appunto di eludere la
problematica di creare codice incompatibile con altre piattaforme editoriali
(ovvero ogni sistema prevede una propria gestione presentazionale del markup
e del contenuto relativo associando gli elementi a categorie ben definite). Un
altro vantaggio di questo approccio è la possibilità di imporre dei vincoli sulla
correttezza di un documento (cioè avere la possibilità di definire regole sulla
struttura e sugli elementi a seconda del contesto specifico).
Il markup descrittivo è quindi una tecnica che predilige l‟identificazione della
struttura del documento, ed è utile anche dal punto di vista pratico dell‟editing:
per esempio l‟autore si può concentrare sulla stesura del testo e dei ruoli dei
frammenti, e magari preoccuparsi solo in seguito della gestione dei vari
elementi presenti e delle relative caratteristiche di formattazione; se il risultato
presentazionale non gli sarà gradito egli potrà scegliere di cambiare la forma in
10
modo semplice e veloce, anche nella circostanza che voglia riutilizzare la sua
opera in un diverso ambito.
Nel campo della conversione dei dati il markup descrittivo occupa un ruolo
estremamente importante perché proprio trasformando la struttura da esso
delineata possiamo convertire un formato in un altro. Infatti quando si cerca di
studiare un formato non si fa altro che analizzare il suo schema di markup.
Attualmente il principale strumento per la generazione di markup descrittivo è
XML, uno standard del World Wide Web Consortium (W3C). XML è un
metalinguaggio di markup derivato da SGML creato e progettato per lo
scambio e l‟interusabilità di documenti strutturati su Internet. I suoi punti
cardine sono:
Platform-independence: XML è uno standard aperto e chiunque può
realizzare strumenti che lo usino come formato di dati;
Documenti auto-descrittivi: permette la personalizzazione dei nomi degli
elementi, inoltre è possibile esplicitare regole di composizione fra le varie
parti dei documenti con la definizione di Document Type Definitions (DTD)
[W3C06];
Compatibilità con formati Web: la sua natura derivata da SGML lo rendono
facilmente convertibile con i moderni formati Web;
Generico: grazie ad una sintassi minima e rigorosa XML permette la
definizioni di linguaggi applicabili in un qualsiasi ambito;
Content-model misto: XML trova un punto di equilibrio tra i formati per
l‟interscambio dei dati e quelli per la strutturazione dei documenti di testo. I
content model misti (elementi che possono contenere sia testo che altri
elementi) permettono di inserire caratterizzazioni semantiche non solo per
interi elementi ma anche all‟interno di elementi di testo contenitori.
Strutturazione gerarchica degli elementi: mentre i precedenti documenti di
interscambio erano lineari XML ha permette strutture ad albero;
Navigabilità dei documenti: la sintassi rigorosa e la gerarchia garantita lo
rendono interfacciabile con varie tecnologie (DOM, XPATH) che ne
rendono semplice l‟analisi.
In supporto a questo formato è nata una vera famiglia di tecnologie fra cui una
delle più importanti è Extensible Stylesheet Language Trasformations (XSLT)
[W3C99b] che rende la trasformazione di documenti basati su XML
un‟operazione semplice ed efficace.
11
2.3
Segmentazione dei documenti
Un documento non è un‟entità indivisibile e può essere sezionata in più parti
che ne descrivono il contenuto nelle varie prospettive. Con il termine
segmentazione indichiamo quindi il processo di separazione di queste sue
componenti.
Questo principio è molto utile sia in fase di progettazione che di sviluppo di un
sistema di conversione. In primo luogo ci aiuta a definire meglio quali sono gli
obiettivi che si vogliono raggiungere in termini di qualità di trasformazione,
facendo una distinzione delle componenti logiche che si ha intenzione di
trasporre nel nuovo formato. In secondo luogo può ridurre la complessità del
lavoro in fase di sviluppo suddividendo le problematiche di conversione. Per
esempio se si utilizza un modello di conversione con formato intermedio
(argomento che affronteremo meglio in seguito) possiamo tentare di separare
fisicamente questi dati in modo da facilitare la loro trasposizione da un formato
all‟altro.
Andiamo ora ad analizzare come vengono classificate queste componenti. Il
classico modello di suddivisione che è generalmente riconosciuto in letteratura
è quello descritto da Glusko e Mcgrath [GM02], che identifica tre frammenti
principali:
Contenuto: l‟insieme di informazioni che il documento ha lo scopo di
trasmettere al lettore;
Componenti strutturali: l‟organizzazione del contenuto e della sua struttura;
Componenti presentazionali: la formattazione egli elementi che hanno lo
scopo di definire l‟aspetto grafico del documento;
Tuttavia si possono trovare molti casi in cui questa classificazione non è
sufficiente a categorizzare tutti i dati necessari. Se prendiamo come riferimento
il Web possiamo notare come le più moderne pagine HTML, i portali ed i
motori di ricerca variano i loro contenuti in modo del tutto dinamico
trasgredendo le vecchie concezioni di documento di tipo statico. Inoltre nel
modello precedente non trovano spazio tutte quelle varietà di informazioni
utilizzate per raccogliere, classificare ed indicizzare i documenti mettendoli in
relazioni con altre risorse dello stesso genere.
Per questo motivo nella tesi si prenderà come riferimento un modello di
classificazione più completo: il Pentaformato [DI07].
12
Figura 2.3-1: Il modello Pentaformato
Il Pentaformato è un modello di classificazione ideato dai ricercatori della
facoltà di Scienze Matematiche, Fisiche e Naturali di Bologna. Esso riconosce
la presenza di cinque dimensioni di informazione all‟interno del documento
che sono:
Contenuto: è rappresentato dal testo e dalle immagini (il modello per ora
tralascia i contenuti multimediali come audio e video);
Struttura: l‟insieme dei blocchi strutturati che esprimono l‟organizzazione
logica del contenuto. La struttura individua il ruolo degli elementi in
relazione al documento stesso;
Presentazione: l‟insieme delle caratteristiche visuali e tipografiche presenti
per massimizzare l‟impatto del documento sul lettore;
Behaviour: le informazioni che rendono il documento interattivo e dinamico
nell‟espressione del contenuto;
Metadati: l‟insieme di informazioni che descrivono il documento stesso e lo
mettono in relazione con risorse esterne;
Secondo questo modello qualsiasi documento può essere segmentato in queste
cinque parti. Le proprietà di tale generalizzazione sono:
Separazione logica: ogni dimensione contiene informazioni specifiche che
descrivono una prospettiva diversa del documento. Per separazione logica
non si intende necessariamente la separazione fisica dei dati, ma un concetto
astratto di categorizzazione delle informazioni;
13
Mutua connessione: ogni componente è interconnessa con le altre allo scopo
di interagire per la definizione del documento. Ognuna di queste è
indispensabile per descrivere il documento nella sua completezza;
Rilevanza basata sul contesto: non esiste gerarchia di queste dimensioni.
Ognuna di esse acquisisce una certa importanza in riferimento ad un
contesto specifico. Ad esempio la presentazione può risultare fondamentale
per un software per l‟editing di presentazioni multimediali, ma essere
totalmente trascurabile in un semplice applicativo per la correzione della
grammatica del testo;
Intercambiabilità basata sul contesto: ogni componente è indipendente,
ovvero è possibile la modifica di una singola dimensione senza che le altre
percepiscano gli effetti di tale cambiamento. Ciò rende possibile anche
l‟intercambiabilità di dimensioni dello stesso tipo. Per esempio un word
processor può contenere più stili di formattazione da applicare al documento
in modo interscambiabile, oppure una pagina HTML dinamica può
sostituire in modo regolare il suo contenuto;
Indipendenza dal linguaggio: ogni dimensione può essere espressa in
differenti linguaggi, tuttavia il significato delle informazioni contenute resta
invariato e può essere normalizzato;
Riassumendo questo modello permette di riconoscere le varie componenti di un
documento, di estrarle e di riformulare in base alle proprie necessità. I vantaggi
della sua applicazione in un sistema di conversione si possono riepilogare in:
Riduzione della complessità: il problema della conversione è scomposto nei
sotto-problemi di conversione delle singole componenti;
Adattabilità: ogni tipo di documento può essere adattato al modello
indipendentemente dalla piattaforma. In questo modo è possibile sviluppare
convertitori documentali di tipo universale;
Alta qualità dell’output: è possibile produrre documenti di alta qualità
potendo effettuare conversioni quasi complete (che non si limitano al solo
contenuto ed alla presentazione), ed alla possibilità di rimpiazzare le
componenti nel caso non si disponga delle informazioni necessarie;
14
2.4
Modelli generali di conversione
Ora che abbiamo analizzato come un documento può essere rappresentato in
forma digitale e le componenti in cui può essere scomposto possiamo
introdurre finalmente l‟argomento della conversione.
La conversione dei formati è un problema che può essere affrontato in diversi
modi. Se si vuole progettare un convertitore occorre prima effettuare uno
studio dei modelli di conversione esistenti per capire qual è la soluzione
migliore a seconda delle esigenze e degli obiettivi prefissati.
Una prima distinzione generica può essere effettuata sul tipo di approccio
utilizzato per la conversione [MBO93]:
string-oriented: il convertitore ha un approccio string-matching, ricerca un
particolare tag nello schema di partenza e lo rimpiazza con un altro
equivalente nello schema di destinazione;
structured-oriented: il convertitore oltre ad effettuare string-matching ha
anche il compito di modificare la struttura gerarchica dello schema;
I convertitori orientati alle stringhe sono utili nel caso si debbano effettuare
conversioni tra formati con poche regole di tipo strutturale e si debbano
effettuare principalmente semplici operazioni di traduzione da sintassi a
sintassi. Nelle conversioni più complicate dove occorre mutare non solo i nomi
dei tag ma anche la struttura interna vengono impiegati convertitori della
seconda tipologia.
I convertitori possono essere classificati in tre categorie principali che
riflettono il loro schema di conversione:
modello diretto (pairwise model) [DBW02] [MBO93]
modello ad anello (ring structure) [DBW02]
modello con formato intermedio (intermediate-form model) [DBW02]
[MBO93]
2.4.1 Modello diretto
Il modello di conversione diretto è sicuramente il più diffuso ed il più
utilizzato. Esso prevede due meccanismi di conversione (andata e ritorno) per
ogni coppia di formati di dati, cioè per
formati il costo di sviluppo è di
convertitori.
15
Figura 2.4-1: Modello diretto
Il pregio di questo modello è permettere la trasformazione da un formato
all‟altro in un solo passaggio di conversione ottenendo rapidamente un risultato
ottimale. I convertitori sono implementati ad hoc e non si subiscono alcuna
perdita di informazioni, oltretutto senza formati intermedi la conversione è
veloce ed efficiente. Tale architettura implica però non pochi svantaggi: il
costo di sviluppo è ingente, e per estendere il meccanismo al supporto di un
ulteriore formato è necessario implementare
convertitori (andata e ritorno
verso ogni formato presente nel sistema).
Riassumendo il modello è quello che offre i risultati migliori ma è quello che
ha anche il costo di sviluppo e di estendibilità più elevato.
2.4.2 Modello ad anello
Il modello ad anello è la più semplice e probabilmente la più obsoleta fra le
tecniche di conversione. Esso necessita dell‟utilizzo di
convertitori
monodirezionali per formati disposti astrattamente in un anello. L‟operazione
di conversione da un formato all‟altro avviene effettuando trasformazioni in
serie spostandosi lungo l‟anello nella direzione prestabilita fino a raggiungere il
corretto formato di destinazione.
16
Figura 2.4-2: Modello ad anello
Il vantaggio di questo modello è quello di essere il più economico poiché è
quello che richiede il minor numero di meccanismi di conversione, inoltre è
facilmente espandibile (richiede l‟aggiunta di solo 2 convertitori per il supporto
di un nuovo formato ). I difetti di questa struttura però sono più che evidenti:
nel caso medio si necessita di passaggi di conversione per poter ottenere il
formato desiderato e nel caso pessimo ben
. Questo implica scarsa
efficienza ed una consistente perdita di informazioni nella trasformazione. Se
poi nella catena di convertitori è presente un anello debole tutto il sistema è
compromesso.
2.4.3 Modello con formato intermedio
Il modello con formato intermedio si basa sul concetto di Superior Standard
[DBW02], cioè sull‟utilizzo di un formato generico che copre il ruolo di
intermediario nella conversione. Il sistema prevede l‟utilizzo di un formato
intermedio e
convertitori per formati.
In pratica le conversioni avvengono sostanzialmente in due passi: prima viene
trasformato il formato di partenza nel formato intermedio, il risultato viene poi
in seguito convertito nel formato di destinazione.
17
Figura 2.4-3: Modello con formato intermedio
Il modello con formato intermedio rappresenta senza dubbio la scelta migliore
in quanto mantiene pressoché ottime la qualità di conversione e le performance
ad un costo di implementazione più che sostenibile. Inoltre ha un basso costo di
estendibilità poiché necessita solamente dell‟integrazione di 2 convertitori
all‟introduzione di un nuovo formato.
Il principale obiettivo che ci si pone nella definizione del Superior Standard è
di trovare un formato che riduca al minimo la perdita di informazioni nella
conversione mantenendo allo stesso tempo una forma il più generale possibile.
Ci sono due tipi di approccio: quello minimalista e quello esaustivo [NP03]. Il
primo punta alla definizione di un formato basilare contenente la quantità di
strutture sintattiche essenziali ad effettuare la conversione. La seconda invece
mira alla costruzione di tutti i costrutti necessari per evitare ogni tipo di perdita
di informazione creando un formato complesso e difficile da gestire.
2.5
Office OpenXML e convertitori
Ora che abbiamo affrontato il problema della conversione dei dati
introduciamo il formato oggetto di questa tesi.
18
Office OpenXML (OOXML) [ECM06] è stato introdotto da Microsoft per la
sua suite Microsoft Office 2007 ed è uno standard ECMA. OOXML è una vera
e propria famiglia di formati (*.docx, *.pptx, *.xlsx) che permettono la
descrizione di una grande varietà di documenti (come relazioni, curriculum
vitae, libri, grafici, fogli di calcolo, presentazioni multimediali, ecc).
2.5.1 Microsoft Office e OpenXML
Microsoft Office fece la sua prima comparsa sugli scaffali nel 1989 sulla
piattaforma Macintosh seguita da una per Windows nel 1990. Il suo successo
fu inizialmente conseguito grazie ad una strategica scelta commerciale: Office
non era nient‟altro che un insieme di programmi già esistenti e venduti
separatamente e sbaragliò la concorrenza solo quando Microsoft cominciò a
distribuire un pacchetto unico, dando ai consumatori la possibilità di acquistare
l‟intero set di applicazioni ad un prezzo nettamente ridotto. La prima versione
del pacchetto Microsoft conteneva Word, Excel e PowerPoint con la possibilità
di avere Access e Schedule Plus acquistando la versione “Pro” della suite.
Da questa unione le applicazioni sono sostanzialmente cresciute in modo
congiunto condividendo tecnologie e caratteristiche come il correttore
grammaticale, l‟integrazione dei dati basata su Object Linking and Embedding
(OLE, utilizzato per trasferire i dati fra diverse applicazioni) ed il linguaggio
Visual Basic per lo scripting. Grazie a questa intercompatibilità fra le sue
applicazioni, la loro semplicità di utilizzo ed il pieno supporto da parte dei
sistemi operativi Windows, hanno permesso a Microsoft Office di raggiungere
una posizione di predominanza fra gli applicativi per la creazione di documenti
elettronici.
Col passare degli anni si ha assunto uno stato di dipendenza da tali software. In
questa condizione gli enti pubblici e privati hanno continuato a scambiare ed
archiviare i loro dati servendosi di formati proprietari Microsoft senza
preoccuparsi delle conseguenze che avrebbe comportato questo tipo di
decisione. Microsoft ha sempre tratto vantaggio da tale situazione ed ha sempre
mantenuto oscure le specifiche tecniche dei suoi formati binari in modo che
non potessero nascere applicativi in grado di interpretarli e di contrastare il suo
monopolio di mercato, vincolando così le future scelte dei suoi clienti.
Con l‟idea di OpenOffice.org [SM07] però qualcosa è cambiato, è nata
un‟alternativa. Il progetto ha risvegliato nella comunità Open Source il
desiderio di porre fine a questa situazione di stallo ed ha prodotto un nuovo
formato totalmente aperto e privo da ogni vincolo di licenza: Open Document.
19
Il formato OASIS Open Document Format for Office Applications (ODF) è
stato soggetto ad anni di continui e laboriosi sviluppi ed ha acquisito col tempo
notevole importanza fino a diventare standard OASIS.
Microsoft si è sentita in questo modo minacciata ed ha cercato di competere
con ODF usando le sue stesse armi. Così per la prima volta la multinazionale
del software viene incontro al mondo Open Source promuovendo un formato
aperto: Office OpenXML, il nuovo formato della suite Microsoft Office 2007.
La sua scelta si è basata essenzialmente sul fatto che un formato proprietario
non sarebbe mai potuto diventare uno standard internazionale.
E‟ nata così una vera e propria guerra dei formati che si è combattuta nella
corsa alla standardizzazione. ODF è divenuto standard ISO/IEC 26300 e
successivamente standard UNI. Microsoft OpenXML è diventato standard
ECMA 376 ed è tuttora in processo di standardizzazione ISO.
Si dice che questa guerra abbia avuto fine con il supporto da parte di Microsoft
e Novell del progetto Open Source OpenXML/ODF Translator [SO07] che ha
rappresentato la volontà delle società multinazionali di rendere interoperabili i
formati, rendendo plausibile una loro coesistenza .
Facciamo ora una breve panoramica dei convertitori per OpenXML
attualmente esistenti.
2.5.2 OpenXML/ODF Translator 1.0
E‟ un importante progetto Open Source nato per la interoperabilità fra le
applicazioni basate sul formato Microsoft OpenXML e lo standard ODF
(Open Document) 1.0. Questo pacchetto non è altro che un add-ins per le
applicazioni di Microsoft Office Word (documenti), Excel (fogli di calcolo)e
PowerPoint (presentazioni multimediali) e permette di aprire e salvare i file nei
rispettivi formati di OpenDocument (*.odt, *.ods e *.odp). Inoltre il
convertitore è dotato di un‟utility per la conversione a linea di comando.
Il convertitore segue un modello a conversione diretta, il motore è
implementato in .NET 2.0 ed è basato su trasformazioni XSLT. I processi di
trasformazione vengono preceduti da una fase di decompressione dei dati
(poiché i file XML che descrivono il documento sono compressi in un archivio
ZIP) e vengono successivamente mappati in un unico file. Dopo l‟applicazione
dei fogli di stile per passare poi al formato di destinazione viene effettuata
l‟operazione contraria, ovvero la suddivisione dei dati in più file XML che
verranno successivamente compressi in un archivio.
20
Figura 2.5-1: Lo schema di conversione di OpenXML/ODF Translator
Il software è compatibile con le versioni 2007/XP/2003 di Microsoft Office.
Inoltre l‟applicazione ha una controparte che può essere integrata nell‟ultima
versione Novell di OpenOffice.org e rende possibile la conversione verso i
formati Microsoft OpenXML. Dopo vari test di conversione effettuati da
diverse redazioni giornalistiche di informatica il plug-in risulta però essere più
inefficiente della versione per Microsoft Office causando vari errori
all‟apertura dei file convertiti nelle rispettive applicazioni e la perdita quasi
totale di stili e formattazione nei documenti.
Hanno contribuito alla realizzazione del progetto Celever Age (Francia e
Polonia), Aztecsoft (India) e DIaLOGIKa (Germania). Hanno collaborato
Microsoft (appoggio finanziario e co-coordinazione Tecnica e Architetturale) e
Novell (supporto in Linux ed integrazione con OpenOffice.org).
2.5.3 Microsoft Office Compatibility Pack
[MIC07a] E‟ un plug-in rilasciato dalla Microsoft per permettere agli utenti di
Microsoft Office 2000/XP/2003 di interagire con il formato OpenXML
aggiungendo i relativi filtri per le estensioni .
2.5.4 OpenXML File Format Converter for Mac 0.1.1 (Beta)
[MIC07b] E‟ un altro pacchetto freeware di Microsoft e permette la
conversione dal formato OpenXML (più in particolare il formato di Word
*.docx) al formato RTF (Rich Text Format). L‟applicativo è stato
appositamente creato per permettere agli utenti Mac che usufruiscono delle
versioni Microsoft Office 2004/v.X for Mac di aprire e convertire il nuovo
formato standard di Microsoft. Essendo una versione beta il software è tuttavia
ancora incompleto.
21
2.5.5 docXConverter 1.3
docXConverter [PAN07] è un software a pagamento rilasciato dalla Panergy e
permette la conversione ad RTF (Rich Text Format) del fomato di Microsoft
Word 2007 (*.docx). L‟applicativo è stato progettato per quegli utenti che
dispongono di documenti del nuovo formato e non sono in grado di leggerli. La
conversione ad RTF è completa e accurata e permette di ottenere quindi
documenti di alta qualità. Il pacchetto è disponibile sia per Windows che per
Mac OS X.
22
3. CONVERSIONE DA OFFICE
OPENXML
In questo capitolo verrà proposto un modello di soluzione al problema della
conversione da OpenXML, più in particolare da WordprocessingML. La mia
soluzione prevede l‟implementazione del processo di segmentazione basandosi
sul modello Pentaformato.
A questo punto è necessario introdurre come prossimo argomento il formato
sorgente oggetto della conversione.
3.1
Office OpenXML
Office OpenXML, di cui abbiamo già discusso nel capitolo precedente, è un
formato per la memorizzazione dei documenti elettronici sviluppato e
introdotto dalla Microsoft con la suite Microsoft Office 2007. Il formato è
standard ECMA 376 ed è tuttora in processo di standardizzazione ISO.
3.1.1 Specifiche tecniche
OpenXML è un formato basato su XML ed adotta un diverso linguaggio di
markup per ogni documento da delineare:
WordprocessingML: per documenti di word processing;
SpreadsheetML: per fogli di calcolo;
PresentationML: per presentazioni multimediali;
DataDiagramingML: per grafici e diagrammi;
FormTemplate: per moduli elettronici;
L‟obiettivo principale di Microsoft nella creazione di questo formato è stato
quello di cercare di massimizzare le performance, poiché l‟adozione di XML
(al posto del vecchio formato binario) ha notevolmente diminuito la velocità di
caricamento dei documenti nelle sue applicazioni. Per questo motivo sono state
prese diverse decisioni sintattiche anche a discapito della leggibilità del codice,
come:
Adottare nomi corti per gli elementi più ricorrenti;
Memorizzare i dati nei fogli di calcolo sottoforma di indici numerici;
23
Prediligere l‟utilizzo di tag per metadati anziché attributi (per permettere
l‟utilizzo di proprietà strutturate degli elementi);
Utilizzare un content-model non misto;
I file XML necessari alla descrizione del documento sono contenuti in un
archivio compresso ZIP conforme al modello Open Packaging Convention
(OPC) ideato da Microsoft. Il package in aggiunta può contenere molti altri tipi
di file binari (come immagini, audio, clip multimediali o altri documenti) che
possono essere allegati come parte del documento stesso. Secondo la
terminologia OPC ogni file contenuto nel pacchetto è definita come una parte.
Ogni parte può essere accompagnata dai relativi metadati.
Figura 3.1-1: Esempio di struttura di un pacchetto Word Office OpenXML
Ora analizziamo quali sono le parti principali di un documento di Word 2007
minimale:
[Content_Types].xml: descrive i file contenuti nel pacchetto, ovvero con
l‟utilizzo di MIME (Multipurpose Internet Mail Extensions) elenca le
estensioni dei file che si trovano al suo interno e ne definisce il tipo;
24
_rels/.rels: contiene le relazioni di [Content_Types].xml, ovvero un insieme
di URI che precisano la posizione delle altre parti principali all‟interno del
pacchetto (in un documento di word minimale è presente la relazione con il
file document.xml);
word/document.xml: contiene il body con il contenuto del documento, è la
parte più importante del pacchetto;
word/_rels/document.xml.rels: contiene le relazioni di document.xml, un
insieme di URI che specificano la posizione delle parti che lo aiutano a
descrivere meglio il contenuto del documento;
Per ulteriori informazioni sul contenuto di un pacchetto Office OpenXML
leggere le specifiche in [ECM06]. Ora che ci siamo fatti un‟idea di come è
fatto un pacchetto facciamo alcuni esempi dei principali costrutti che si
possono trovare in WordprocessingML.
3.1.2 Basi di WordprocessingML
Un documento WordprocessingML è composto da una collezione di storie.
Ogni storia rappresenta una distinta regione di testo all‟interno del documento.
Tutte le storie del documento (a parte alcuni casi molto particolari che non è
importante specificare) utilizzano un proprio set di proprietà stilistiche e
presentazionali . Queste proprietà includono informazione sul tipo di carattere,
definizione degli stili, definizioni di enumerazione ed altre impostazioni
generali.
Gli costrutti di base che possono costituire un semplice documento
WordprocessingML sono i seguenti:
document: la radice del documento il quale definisce la storia principale;
body: il contenitore che include la serie di blocchi che comprende la storia
principale;
p (paragraph): un paragrafo;
r (run): una regione di testo con un comune set di proprietà;
t (text): un ramo di testo;
Vediamo ora il più semplice esempio di documento espresso con questa
sintassi:
<w:document xmlns:w=”…”>
<w:body>
25
<w:p>
<w:r>
<w:t>Hello world!</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
Come abbiamo accennato in precedenza ogni storia può possedere un comune
set di proprietà, che possono essere espresse all‟interno di un elemento
properties (il nome del tag è quello del blocco contesto con l‟aggiunta del
prefisso Pr, per esempio pPr per il blocco p). Nell‟esempio successivo viene
creato un paragrafo e gli viene assegnato lo stile presentazionale “Titolo”:
<w:p>
<w:pPr>
<w:pStyle w:val=”Titolo”/>
</w:pPr>
<w:r>
<w:t xml:space=”preserve”>Sono un </w:t>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:t>Titolo</w:t>
</w:r>
</w:p>
Un‟osservazione importante è che WordprocessingML per ovviare al fatto che
non adotta content-model misto suddivide il contenuto dei paragrafi in
sottoelementi (run) in modo da poter definire delle sottocategorie di storie con
proprietà diverse. Lo svantaggio di questo approccio è la necessità di ridefinire,
per ogni elemento run che ha anche solo una proprietà diversa (dalla storia
corrente), l‟intero set di proprietà.
Cerchiamo ora di analizzare le principali strutture dati di un documento (liste e
tabelle) e come vengono rappresentate nel linguaggio.
Le definizione delle liste avviene in modo simile a quello degli stili definendo
all‟interno delle proprietà del paragrafo un elemento numPr (che sta appunto
ad indicare numbering properties). Vediamo un esempio di lista:
26
1. Primo Elemento
a. Elemento Annidato
2. Secondo Elemento
Il relativo codice in WordprocessingML:
<w:p>
<w:pPr>
<w:numPr>
<w:numId w:val=”1”/>
<w:ilvl w:val=”0”/>
</w:numPr>
</w:pPr>
<w:r>
<w:t>Primo Elemento</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:numPr>
<w:numId w:val=”1”/>
<w:ilvl w:val=”1”/>
</w:numPr>
</w:pPr>
<w:r>
<w:t>Elemento Annidato</w:t>
</w:r>
</w:p>
<w:p>
<w:pPr>
<w:numPr>
<w:numId w:val=”1”/>
<w:ilvl w:val=”0”/>
</w:numPr>
</w:pPr>
<w:r>
<w:t>Secondo Elemento</w:t>
</w:r>
</w:p>
Come si può notare dall‟esempio i paragrafi elenco possiedono un
identificatore di enumerazione numId. Il valore di tale identificatore
categorizza gli elementi come appartenenti ad una lista specifica. Inoltre nelle
proprietà di enumerazione è presente un tag ilvl il cui attributo indica il livello
27
di annidamento dell‟elemento lista. Questa organizzazione degli elenchi
permette così di definire altri blocchi indipendenti tra un elemento e l‟altro
delle liste (altri paragrafi, tabelle, ecc) rendendo più versatile la strutturazione
del documento.
Ora facciamo un esempio di tabella:
Cella numero 1
Cella numero 4
Cella numero 2
In WordprocessingML:
<w:tbl>
<w:tblPr>
...
</w:tblPr>
<w:tr>
<w:tc>
<w:p>
<w:r>
<w:t>Cella numero 1</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:p>
<w:r>
<w:t>Cella numero 2</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:vMerge w:val=”restart”>
</w:tcPr>
<w:p>
<w:r>
<w:t>Cella numero 3</w:t>
</w:r>
</w:p>
<w:tc>
</w:tr>
<w:tr>
<w:tc>
<w:tcPr>
28
Cella numero 3
<w:gridSpan w:val=”2”/>
</w:tcPr>
<w:p>
<w:r>
<w:t>Cella numero 4</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:vMerge/>
</w:tcPr>
</w:tc>
</w:tr>
</w:tbl>
Dal codice si può certamente notare un‟evidente somiglianza con il linguaggio
HTML. Il blocco tabella è definito dall‟elemento tbl (simile al tag table). Al
suo interno si possono trovare gli elementi tblPr (per le proprietà
presentazionali della tabella), tr (riga della tabella) ed annidato nell‟ultimo il
tag tc (cella della tabella). La struttura della griglia è equivalente a quella di
HTML anche per la gestione del merge orizzontale delle celle (la cella contesto
possiede una proprietà gridSpan equivalente a quella dell‟attributo colspan).
Diversa invece è la gestione del merge verticale, che implica la presenza nelle
righe sottostanti alla cella contesto di elementi vuoti tc (al posto delle celle
unificate) con proprietà di vMerge.
Ora che abbiano analizzato a grandi linee la struttura del formato e dei suoi
costrutti principali introduciamo il formato IML, una parte della soluzione
proposta da questa tesi per la conversione da Office OpenXML.
3.2
IML
Intermediate Markup Language (IML) è un linguaggio di markup ideato dai
ricercatori della facoltà di Scienze Matematiche, Fisiche e Naturali
dell‟università di Bologna. IML è un linguaggio di markup di tipo descrittivo e
si basa sui concetti di segmentazione dei documenti e normalizzazione delle
strutture.
Secondo il principio di segmentazione ogni documento è scomponibile in
cinque parti che descrivono il documento nelle varie prospettive: contenuto
(testo e immagini), struttura (organizzazione del contenuto), presentazione
29
(formattazione e caratteristiche grafiche), behaviour (comportamento dinamico
del documento) e metadati (informazioni per la gestione e per l‟indicizzazione
del documento). Ognuna di queste dimensioni varia in modo consistente da
documento a documento, ma la struttura assume spesso delle forme limitate e
piuttosto ricorrenti [DGV05].
L‟idea è quindi di associare queste strutture ricorrenti a schemi generalizzati in
grado di esprimere con costrutti specifici predefiniti il medesimo significato: i
design pattern. Per normalizzazione si intende quindi la possibilità di
descrivere, indipendentemente dal formato di memorizzazione, il contenuto
strutturato di qualunque documento con l‟utilizzo di design pattern.
In particolare i design pattern riconosciuti in IML sono:
Marker: è un elemento vuoto la cui importanza risiede nella posizione che
assume all‟interno documento e/o dal valore dei suoi attributi. I marker
possono essere distinti in milestone (la cui informazione signficativa
dipende esclusivamente dalla sua locazione, per esempio il tag br in HTML)
e marker con attributi (l‟informazione risiede anche negli attributi posseduti,
per esempio il tag img di HTML);
Atomo: un elemento che può contenere solo testo e non può essere
ulteriormente strutturato;
Blocco ed Inline: è una struttura a content-model misto utilizzata per
marcare blocchi di testo. Al suo interno può contenere elementi inline
ripetibili in un qualunque ordine che possiedono lo stesso content-model del
blocco;
Contenitore: è un elemento generico utilizzato per l‟organizzazione logica
della struttura del documento. Esso può contenere una sequenza di altri
elementi opzionali e ripetibili, ma non direttamente testo ed inline;
Tabella: è un elemento utilizzato per descrivere strutture tabellari e
sequenze di elementi raggruppati in modo omogeneo (come liste,
contenitori, ecc);
Record: una lista non-ordinata di elementi non ripetibili. Un record è
utilizzato per esprimere informazioni strutturate (spesso estratte da un
database), e sono generalmente insiemi di coppie nome-valore;
IML è un linguaggio sintatticamente molto semplice essendo un sottoinsieme
molto ristretto di XHTML. Il linguaggio mappa i pattern descritti in sintassi
XHTML, utilizzando attributi per esprimere proprietà aggiuntive. Il risultato è
quindi una sequenza di oggetti, ognuno dei quali specifica il pattern utilizzato
per la descrizione del contenuto (se è un blocco, un contenitore, ecc) e la classe
30
di appartenenza dell‟oggetto stesso (ovvero il tipo dell‟oggetto e le sue
proprietà aggiuntive).
In sostanza il linguaggio è basato sull‟utilizzo di pochi tag XHTML come p
(per i blocchi), span (per gli inline), table, ul, li e div (per le varie tabelle ed i
contenitori) e sull‟uso sistematico dell‟attributo @class per la diversificazione
dei ruoli (già parzialmente effettuata con l‟identificazione del pattern in uso).
Tuttavia difficilmente le eterogeneità dei dati che si possono trovare in un
documento (come ad esempio form, equazioni matematiche, ecc) sono sempre
adattabili ad un modello così semplice. Per questo motivo IML è stato ideato
per essere un linguaggio espandibile che può essere facilmente esteso al
supporto di domini specifici, aggiungendo nella sintassi gli elementi e gli
attributi necessari alla descrizione dei nuovi modelli, pur mantenendo invariata
la strutturazione dei design pattern.
La qualità principale di IML è quella di essere un linguaggio minimale e
generale, e di conseguenza estremamente semplice da gestire, caratteristica che
lo rende un potente formato intermedio per la conversione automatica di
formati documentali.
3.3
Si-ConForMi OpenXML
Il prototipo Simple Converter For Microsoft OpenXML (Si-ConForMi
OpenXML) è un convertitore bidirezionale che si basa sul modello di
conversione con formato intermedio. Esso si basa sul principio di
segmentazione dei documenti (in particolare il modello Pentaformato), ed è
stato creato per la conversione di contenuto e struttura di un documento di
word processing Office OpenXML verso altri formati documentali o viceversa.
Il formato intermedio utilizzato per il modello di conversione è IML, la cui
funzione è appunto quella di mappare il contenuto strutturato dei documenti
digitali.
Questa applicazione è stata progettata per essere espandibile (o parte di
un‟applicazione che utilizza lo stesso tipo di architettura) e per permettere la
realizzazione di un convertitore di formati documentali di tipo universale.
31
Figura 3.3-1: Il modello di conversione di Si-ConForMi OXML
I vantaggi di questo tipo di approccio si possono riassumere in:
scomposizione dei problemi di conversione: seguendo il principio di
segmentazione dei documenti è possibile scomporre il problema della
conversione nei sottoproblemi di conversione delle componenti . Se si deve
sviluppare un convertitore che effettui una trasformazione completa è
possibile utilizzare IML per il contenuto e la struttura, ed altri linguaggi
intermedi per trasporre le componenti rimanenti del documento;
espandibilità: non essendo un convertitore diretto ma con modello
intermedio un nuovo formato può essere integrato facilmente
nell‟architettura (è necessario lo sviluppo di due soli convertitori);
buona qualità e prestazioni: il modello di conversione intermedio mantiene
pressoché ottime qualità di conversione e efficienza (sono necessari solo
due passi di conversione per raggiungere il formato di destinazione
desiderato);
bassi costi di sviluppo: inizialmente il modello richiede l‟implementazione
di solo
meccanismi di conversione contro gli
del modello a
conversione diretta;
versatilità di impiego: il convertitore può essere adattato facilmente ad altri
impieghi differenti da quello della conversione tra formati documentali. Per
32
esempio il convertitore può essere utilizzato anche per estrarre da un
documento informazioni (content extractor) sul contenuto strutturato per poi
memorizzarle come campi separati in una base di dati, o darle in pasto ad un
classificatore che in base ai tag ottenuti categorizzano i contenuti. Un altro
ruolo applicativo potrebbe essere quello del formatter in cui il convertitore
permette di estrarre il contenuto di un documento per ripresentarlo con un
differente layout.
3.3.1 Uso di Si-ConForMi OXML
Si-ConForMi OXML è un‟applicazione Java che può essere invocata a linea di
comando.
Figura 3.3-2: Esempio di invocazione di Si-ConForMi OXML
Il pacchetto permette di convertire un documento di Word OpenXML nel
formato IML (o viceversa) e di salvare il risultato della trasformazione in un
file nella cartella corrente di lavoro dell‟utente. Il convertitore riceve in input
due argomenti:
[-oi|-io] (direzione di conversione): per specificare il tipo di conversione
che l‟applicazione deve effettuare (-oi per la conversione da OpenXML a
IML, -io per la conversione inversa da IML a OpenXML);
[filepath]: il percorso relativo o assoluto del file da convertire;
Il prerequisito per il corretto funzionamento dell‟applicativo è Runtime Java
Sun JRE 1.5.0 o successivi.
33
3.3.2 Obiettivi raggiunti
L‟applicativo supporta la conversione delle parti più importanti per la
comprensione di un documento di Word 2007. Esso riconosce e gestisce
correttamente nella conversione i seguenti elementi:
testo e paragrafi
grassetto, corsivo, apice e pedice
nomi degli stili di utilizzo
link ipertestuali
segnalibri
immagini (e oggetti immagine bitmap)
tabelle
liste con annidamenti
contenuto delle caselle di testo
note a piè pagina
sezioni del documento
sottodocumenti
oggetti documento Word 2007
lingua dei frammenti
Inoltre nella conversione di un file IML a OpenXML vengono assegnati ai
blocchi stili presentazionali predefiniti, in base al loro ruolo assunto nel
documento.
34
3.3.3 Esempi di conversione
Facciamo ora qualche esempio di trasformazione con Si-ConForMi OXML.
Convertiremo il seguente documento di WordprocessingML in IML:
Figura 3.3-3: Esempio di conversione (documento generico)
Il risultato della conversione è il seguente codice IML:
<?xml version="1.0" encoding="UTF-8"?>
<iml xmlns="http://www.cs.unibo.it/2006/iml">
<head/>
<body lang="it">
<div class="Section">
<h1 class="Title" lang="it">Questo è il titolo</h1>
<p lang="it" class="Subtitle">Questo è un
sottotitolo.</p>
<p lang="it" class="Normal">Prova con gli inline: <b
lang="it">grassetto</b>, <i lang="it">corsivo</i>, <b
lang="it"><i lang="it">grassetto con corsivo</i></b>, <sup
lang="it">apice</sup>, <sub lang="it">pedice</sub>.</p>
35
<p lang="it" class="Normal">Prova link: <a lang="it"
href="http://informatica.unibo.it"
class="Hyperlink">http://informatica.unibo.it</a> .</p>
<p lang="it" class="Normal">Prova immagine:</p>
<p lang="it" class="Normal"><img src="media/0_image1.gif"
class="Internal"/></p>
<p lang="it" class="Normal">Prova tabella:</p>
<table class="Table Grid">
<tr>
<td>
<p lang="it" class="Normal">Prima cella</p>
</td>
<td>
<p lang="it" class="Normal">Seconda cella</p>
</td>
<td rowspan="2">
<p lang="it" class="Normal">Terza cella</p>
</td>
</tr>
<tr>
<td colspan="2">
<p lang="it" class="Normal">Quarta cella</p>
</td>
</tr>
</table>
<p lang="it" class="Normal">Prova lista:</p>
<ul level="0" type="number" value="1">
<li>
<p lang="it" class="List Paragraph">Primo
elemento</p>
</li>
<li>
<p lang="it" class="List Paragraph">Secondo
elemento</p>
</li>
<li>
<ul level="1" type="number" value="1">
<li>
<p lang="it" class="List Paragraph">Elemento
annidato</p>
</li>
</ul>
</li>
<li>
<p lang="it" class="List Paragraph">Terzo
elemento</p>
36
</li>
</ul>
</div>
</body>
</iml>
Un altro esempio più particolare esplicita come Si-ConForMi OXML mappa le
liste contenenti altri blocchi estranei fra un elemento e l‟altro:
Figura 3.3-4: Esempio di conversione (caso particolare di lista)
Nel codice IML risultante si può osservare come il paragrafo fra gli elementi
della lista è considerato nella struttura parte della lista stessa:
<?xml version="1.0" encoding="UTF-8"?>
<iml xmlns="http://www.cs.unibo.it/2006/iml">
<head/>
<body lang="it">
<div class="Section">
<p lang="it" class="Normal">Inizio della lista:</p>
<ul level="0" type="number" value="1">
<li>
<p lang="it" class="List Paragraph">Primo
elemento</p>
</li>
<li>
<p lang="it" class="List Paragraph">Secondo
elemento</p>
<p lang="it" class="Normal">Paragrafo in mezzo alla
lista.</p>
</li>
<li>
<p lang="it" class="List Paragraph">Terzo
elemento</p>
</li>
</ul>
</div>
37
</body>
</iml>
Un ultimo esempio mostra come avviene la conversione dei sottodocumenti:
Figura 3.3-5: Esempio di conversione (documento con sottodocumenti)
In IML vengono creati dei contenitori generici contenenti i sottodocumenti:
<?xml version="1.0" encoding="UTF-8"?>
<iml xmlns="http://www.cs.unibo.it/2006/iml">
<head/>
<body lang="it">
<div class="Section">
<h1 class="heading 1" lang="it">Master Document</h1>
<p lang="it" class="Normal">Questo è il contenuto del
documento principale.</p>
</div>
<div class="Section">
<div class="Subdocument" lang="it">
<div class="Section">
<h1 class="heading 1" lang="it">Subdocument1</h1>
<p lang="it" class="Normal">Questo è il contenuto del
sottodocumento1.</p>
</div>
</div>
</div>
<div class="Section">
<div class="Subdocument" lang="it">
<div class="Section">
<h1 class="heading 1" lang="it">Subdocument2</h1>
38
<p lang="it" class="Normal">Questo è il contenuto del
sottodocumento2.</p>
</div>
</div>
</div>
</body>
</iml>
39
4. IMPLEMENTAZIONE DI “SICONFORMI OXML”
Il prototipo Si-ConForMi OXML è un‟applicazione sviluppata in linguaggio
Java ed è basata su trasformazioni XSLT. Queste scelte progettuali sono state
effettuate per i seguenti motivi:
Indipendenza dalla piattaforma: Java non è in alcun modo legato alla
piattaforma poiché è un linguaggio interpretato dalla Java Virtual Machine
presente nel sistema su cui è installato. Ciò rende l‟applicazione
indipendente dall‟architettura locale in cui viene eseguita;
Modularità del progetto: essendo Java un linguaggio ad oggetti è stato
possibile implementare varie classi per la risoluzione dei sottoproblemi di
implementazione. In caso di necessità sarà così possibile estendere,
modificare o sostituire singoli moduli senza il bisogno di effettuare un
refactoring completo. Inoltre i fogli di stile sono esterni al pacchetto, è
quindi possibile modificarli mantenendo inalterato il codice Java;
Maggiore semplicità di conversione: OpenXML è basato su XML, e questo
rende XSLT il linguaggio più naturale (e più semplice) per effettuare
trasformazioni complesse con il formato. Inoltre sono presenti delle librerie
scritte in Java che implementano DOM e SAX (vedi paragrafo seguente) e
altre API (JDOM, TrAX, JAXP), che permettono di interagire con file di tipo
XML e di effettuare su di essi trasformazioni con XSLT.
4.1
API in Java per XML
Come accennato esistono diverse API in Java per processare i file XML. E‟
necessario quindi, prima di addentrarci nella spiegazione del progetto,
presentare quelle che sono state utilizzate nella sua realizzazione:
Simple API for XML (SAX): è un parser utilizzato per la lettura di un file
XML. E‟ un modello basato su un insieme di funzioni che vengono invocate
al verificarsi di eventi specifici (event-handler model), ovvero al parsing dei
vari elementi costitutivi di un XML (elementi, testo, ecc). In pratica
implementando la classe interfaccia ContentHandler di SAX è possibile
personalizzare queste funzioni ed estrarre così le informazioni desiderate. I
vantaggi di SAX sono l‟utilizzo estremamente ridotto di memoria ed una
40
considerevole velocità di parsing. Purtroppo il parser può solo essere
utilizzato per la lettura e non permette la navigazione diretta del documento;
Document Object Model (DOM): è un‟interfaccia di programmazione per
file XML. DOM definisce la struttura logica di un documento XML in
modo da consentirne la navigazione, permettendo all‟utente la creazione, la
lettura e la modifica degli elementi. Il principale svantaggio di questa API è
che necessita della presenza in memoria dell‟intero documento di utilizzo,
causando delle grosse perdite di efficienza con file di grandi dimensioni.
Perciò è preferibile limitare il suo impiego alla scrittura dei file XML;
Trasformations API for XML (TrAX): è un‟interfaccia di programmazione
specifica per effettuare trasformazioni con XSLT;
4.2
Il motore di conversione (Java)
L‟obiettivo del motore di conversione, non è solo quello di applicare i fogli di
stile XSLT, ma è di risolvere tutta una serie di problematiche.
Per prima cosa il formato OpenXML è un archivio ZIP. Questo implica la
necessità di un sistema di compressione e decompressione dei dati, prima di
effettuare la conversione.
Sorgono poi alcune complicazioni dovute al fatto che ci sono diversi file
all‟interno del pacchetto OOXML, ed ognuno di essi ha un compito ben
preciso nella descrizione del documento. Al momento della trasformazione con
XSLT dovremo disporre di un unico file XML contenente tutte le informazioni
necessarie. Occorre quindi che il motore di conversione preveda il mapping
delle varie parti del pacchetto (ossia dei vari file inclusi) in un solo file, e
l‟operazione inversa (cioè la suddivisione delle informazioni nelle varie
componenti del pacchetto, per la conversione inversa da IML a OOXML).
Un altro problema è che al momento della decompressione dei dati non siamo a
conoscenza della tipologia di file dei quali disponiamo. Alcuni di essi
sappiamo che sono XML (per la loro posizione predefinita all‟interno del
pacchetto come spiegato nel capitolo precedente), ma altri possono essere file
binari, utili o inutili al nostro scopo, oppure ancora altri pacchetti OOXML che
vanno individuati e processati in maniera ricorsiva. E‟ necessario quindi un
processo attraverso cui il motore identifichi il tipo di file e la categoria di
appartenenza, in modo da poterli successivamente gestire.
41
Nelle prossime sezioni entreremo nel dettaglio degli oggetti costituenti il
motore di conversione. Esso è composto da 8 classi Java, ognuna delle quali
ha un ruolo ben preciso nel processo di trasformazione.
4.2.1 DocumentConverter.java
E‟ la classe principale poiché è quella che possiede il metodo main() ed i due
metodi per l‟avvio dei differenti processi di conversione. I metodi della classe
sono i seguenti:
main(): è il metodo principale per l‟invocazione a riga di comando. A
seconda degli argomenti passati all‟applicazione avrà lo scopo di richiamare
una funzione fra convertOXMLToIML () e convertIMLToOXML() per la
conversione del file specificato dall‟utente;
convertOXMLToIML(): è il metodo principale che innesca la procedura per
la conversione di un file OOXML a IML;
convertOXMLToIMLRecurrence(): è una funzione ricorsiva necessaria per
far fronte alla possibile presenza di sottodocumenti. Ha lo scopo di
estendere il processo di conversione a tutti i pacchetti di tipo OOXML legati
al documento in trasformazione;
filesSelector(): è una funzione molto importante per la conversione a IML.
Essa ha lo scopo di accedere con SAX ai file delle relazioni del pacchetto
OOXML ed individuare i file di interesse (file XML per la descrizione del
documento, immagini, sottodocumenti ed oggetti documento allegati). Il
metodo utilizza un‟istanza della classe RelParser come ContentHandler del
parser SAX;
copyImages(): è una funzione che crea una cartella “media” nella directory
corrente di lavorazione dell‟utente (dove si trova al termine della
conversione il file IML) e copia al suo interno le immagini allegate nel
documento di partenza, rendendole così accessibili all‟IML. Inoltre il nome
delle immagini viene modificato con un prefisso numerico (per evitare
conflitti di nome con le immagini dei sottodocumenti);
convertIMLToOXML(): è il metodo principale che innesca la procedura per
la conversione di un file IML a OOXML;
copyImagesTwo(): è la controparte del metodo copyImages(). La sua
funzione è quella di copiare le immagini nella cartella “word/media” del
pacchetto OOXML in costruzione;
42
delFiles(): è un metodo generico per la cancellazione di file presenti sul
disco rigido. E‟ necessario principalmente alla cancellazione dei file
temporanei al termine dei processi di conversione (ma anche nel caso si sia
verificato un errore di trasformazione);
4.2.2 ZipCompressor.java
E‟ la classe che si occupa delle operazioni di compressione e decompressione
dei file nel formato ZIP. Dispone dei seguenti metodi:
zip(): è una funzione utilizzata per la compressione di un elenco di file
in un archivio;
unzip(): è una funzione utilizzata per la decompressione di un archivio
nella cartella specificata;
4.2.3 DocumentMapper.java
La classe ha il compito di interagire con i file di mapping, ovvero dei file
specifici che descrivono le parti ed il contenuto di un pacchetto OOXML con il
linguaggio di markup MappingML (vedere paragrafo 4.3). La classe possiede i
seguenti metodi:
map(): è il metodo principale per la creazione di un file di mapping da un
elenco di file XML. Il file è creato con l‟ausilio di DOM;
fillDocmap(): è una funzione utile nel processo di creazione di un file di
mapping ed ha lo scopo di inserire gli elementi di MappingML necessari
alla descrizione del pacchetto;
existChild(): è un metodo di supporto per verificare l‟esistenza di un
elemento MappingML all‟interno del file di mapping in creazione;
writeDocmap(): è una funzione che serve per scrivere un file di mapping sul
file system una volta completata la sua creazione con DOM;
fillTagFile(): è utilizzato per copiare il contenuto di un file XML all‟interno
di un file di mapping nella posizione corretta. Una volta invocato il metodo
viene istanziata la classe XmlParser, viene utilizzata come ContentHandler
SAX ed al parsing dell‟XML verrà effettuata la copia;
unmap(): la funzione ha il compito di creare la struttura di file e cartelle
descritta in un file di mapping passato come parametro. In realtà la funzione
istanzierà la classe MapParser utilizzandola come ContentHandler SAX,
saranno poi i suoi metodi a svolgere il compito al parsing del file;
43
4.2.4 XmlParser.java
E‟ un implementazione della classe ContentHandler di SAX. I metodi della
classe hanno lo scopo di leggere e copiare al parsing l‟intero contenuto di un
file XML passato come parametro. Viene utilizzato DOM per la creazione e la
scrittura degli elementi.
4.2.5 MapParser.java
E‟ un implementazione della classe ContentHandler di SAX. Essa ha lo scopo
di riconoscere i vari elementi di MappingML presenti in un file di mapping e di
ricreare sul file system la stessa situazione descritta, copiando anche il
contenuto dei tag nei vari file XML creati. Il suo ruolo è in pratica quello di
ricreare i vari file di un pacchetto OOXML partendo da un solo file di
mapping.
4.2.6 RelParser.java
E‟ un implementazione della classe ContentHandler di SAX. Il suo scopo è
quello di accedere ai file delle relazioni di un pacchetto OOXML e restituire,
con l‟ausilio di vettori, un elenco dei file di interesse relazionati col documento
in analisi. Grazie al parsing SAX con RelParser possiamo individuare i file
XML da mappare, le immagini ed i sottodocumenti in modo da poterli
successivamente gestire.
4.2.7 XSLTransformer.java
La classe ha il compito di effettuare le trasformazioni XSLT con l‟ausilio
dell‟API TrAX. Essa possiede un solo metodo trasform() che applica un foglio
di stile ad un file XML, entrambi passati come parametri.
4.2.8 ImlParser.java
E‟ un‟altra implementazione della classe interfaccia ContentHandler di SAX.
La classe ha il compito di effettuare il parsing di un file IML e di individuare le
immagini presenti nel documento, in particolare quelle che sono classificate
come interne al documento (@class = „Internal‟), in modo da poterle
successivamente copiare all‟interno del pacchetto OOXML risultante.
44
4.3
MappingML
Mapping Markup Language (MappingML) è un linguaggio di markup molto
semplice e minimale ideato per questo progetto. Esso ha lo scopo di riflettere la
struttura fisica di un archivio (o pacchetto) generico contenente molteplici file
XML, e mappare così il loro contenuto.
Il linguaggio si basa sull‟utilizzo di tre elementi fondamentali:
PACKAGE: è la radice del documento e rappresenta l‟istanza di un
pacchetto. Esso è caratterizzato da due attributi obbligatori che sono @id
(identificatore univoco del pacchetto) e @name (il nome del pacchetto).
L‟elemento può contenere una sequenza di elementi facoltativi PACKAGE,
FOLDER e FILE ripetibili in un qualunque ordine;
FOLDER: l‟elemento rappresenta una directory di un package ed è
caratterizzato dall‟attributo @name (il nome della directory). FOLDER ha
lo stesso content-model di PACKAGE;
FILE: è l‟elemento foglia del linguaggio. E‟ caratterizzato dall‟attributo
@name (il nome del file) ed ha lo scopo di includere il contenuto del file
XML ad esso relativo. Ovviamente FILE non può contenere al suo interno
altri elementi di MappingML;
Un ulteriore vincolo sintattico è che gli elementi non possono avere dei fratelli
con l‟attributo @name con lo stesso valore, poiché non è possibile avere su un
file system un percorso corrispondente a più file o cartelle.
L‟impiego di MappingML in questo progetto è stato fondamentale per mappare
i file XML contenuti in un archivio OOXML in un solo file di mapping, in
modo così da poter effettuare trasformazioni XSLT. Vediamo un piccolo
esempio:
<map:package id=”0” name=”Documento.docx” xmlns:map=”…”>
<map:file name=”[Content_types].xml”>
<!-- Contenuto del file [Content_types].xml -->
</map:file>
<map:folder name=”_rels”>
<map:file name=”.rels”>
<!-- Contenuto del file .rels -->
</map:file>
45
</map:folder>
<map:folder name=”word”>
<map:file name=”document.xml”>
<!-- Contenuto del file document.xml -->
</map:file>
<map:folder name=”_rels”>
<map:file name=”document.xml.rels”>
<!-- Contenuto del file document.xml.rels -->
</map:file>
</map:folder>
</map:folder>
</map:package>
4.4
XSLT
I fogli di stile per le trasformazioni XSLT sono suddivisi in due categorie
principali corrispondenti alle direzioni di conversione di Si-ConForMi OXML.
4.4.1 Trasformazione OOXML(MappingML) – IML
I seguenti fogli di stile effettuano la trasformazione di un pacchetto Office
OpenXML (descritto con MappingML) ad IML. Ognuno dei file ha un certo
ruolo nella trasformazione e si occupa di un certo tipo di pattern o struttura:
OX-iMLconv.xsl: è il file principale che viene applicato alle trasformazioni
ed è quello che include tutti gli altri fogli di stile. Ha il compito di definire la
radice ed i contenitori principali del file IML;
Document.xsl: il suo ruolo è quella di suddividere il documento in vari
contenitori corrispondenti alle interruzioni di sezione;
Paragraph.xsl: contiene i template relativi a tutti gli elementi che sono
definiti mediante un tag paragrafo WordprocessingML. Ovvero vengono
gestiti i paragrafi e tutti i suoi sottoelementi relativi, le immagini ed i
sottodocumenti;
List.xsl: contiene i template relativi alla trasformazione delle liste;
Table.xsl: contiene i template relativi alla trasformazione delle tabelle;
Footnote.xsl: ha il ruolo di gestire le note a piè di pagina.
46
4.4.2 Trasformazione IML-OOXML(MappingML)
I fogli di stile elencati successivamente si occupano dell‟altro verso di
conversione, ovvero della trasformazione di un file IML in un pacchetto
OOXML (descritto con MappingML):
iML-OXconv.xsl: è il file principale che viene applicato alle trasformazioni
ed è quello che include tutti gli altri fogli di stile. Esso ha il ruolo di definire
la radice e gli elementi MappingML necessari per la descrizione del
pacchetto. Viene anche creato dinamicamente il contenuto dei file delle
relazioni, delle proprietà di enumerazione (numbering.xml) e delle note a
piè pagina (footnotes.xml). Invece il contenuto di altri file (come
[Content_types].xml e styles.xml) viene semplicemente copiato da altri file
di supporto ai fogli di stile;
Document.xsl: si occupa della creazione dei contenitori principali di
document.xml e possiede un template per la creazione di interruzioni di
sezione;
Paragraph.xsl: ha il ruolo di effettuare la conversione dei blocchi di testo e
degli elementi inline;
List.xsl: contiene i template relativi alla trasformazione delle liste;
Table.xsl: contiene i template relativi alla trasformazione delle tabelle;
DefaultFiles.xml: questo è un file di supporto a iML-OXconv.xsl, ed allega
un contenuto predefinito per i file [Content_types].xml e styles.xml;
NumberingSupport.xml: è un altro file di supporto al foglio di stile
principale e contiene informazioni utili per la creazione del file
numbering.xml.
4.5
Conversione OOXML – IML
I passi effettuati in una conversione da OOXML ad IML sono i seguenti:
1. Decompressione del pacchetto: un file OpenXML è un archivio compresso
ZIP e per avere accesso ai file del pacchetto è quindi necessaria una fase
iniziale di decompressione;
2. Selezione dei files: accedendo con SAX ai file delle relazioni è possibile fare
una selezione dei file necessari per il loro prossimo utilizzo. Per ogni
oggetto documento o sottodocumento esterno individuato si dovrà ripetere
il procedimento svolto fino ad ora (in modo ricorsivo ripartendo dalla
decompressione al punto 1). Tutto per disporre al termine del processo di
47
tutti i file decompressi dell‟albero di documenti, degli elenchi completi dei
file XML necessari per il mapping e delle immagini da rendere accessibili
all‟IML;
Figura 4.5-1: Conversione OOXML - IML
3. Creazione file di mapping: come spiegato nel punto precedente occorre
mappare i file XML che descrivono il documento in un solo file, per poterlo
così trasformare con XSLT. Il contenuto dei file viene letto con SAX e
scritto con DOM all‟interno del file di mapping;
48
4. Trasformazione in IML: una volta che si dispone di un unico file XML
contenente tutte le informazioni necessarie, esso viene utilizzato per la
trasformazione con XSLT (utilizzando l‟API di JAVA TrAX). Il risultato è
un file IML;
5. Copia files immagine: ultimo passo per completare la conversione è la copia
delle immagini del documento (individuate al punto 2) in una cartella
predefinita accessibile dal file IML;
4.6
Conversione IML - OOXML
La conversione da IML a OOXML avviene nella maniera inversa, solo che il
procedimento è relativamente più semplice poiché non si presenta il problema
della gestione di sottodocumenti. Le fasi di conversione sono le seguenti:
1. Selezione delle immagini: la prima fase di elaborazione necessaria è
l‟identificazione delle immagini che si devono includere nel pacchetto
finale. Viene quindi effettuato un parsing del file IML (con SAX) in cerca
delle immagine presenti classificate come interne al documento;
2. Creazione file di mapping: il file IML viene trasformato con XSLT e viene
convertito in un file MappingML, contenente una descrizione dettagliata di
come dovrà essere composto il pacchetto finale a livello fisico;
3. Creazione files del pacchetto: il file di mapping viene letto con SAX ed in
base agli elementi presenti vengono creati i file necessari alla creazione del
pacchetto OOXML. Nello stesso tempo con l‟ausilio di DOM vengono
riempiti i file con il loro contenuto relativo;
4. Copia files immagine: in questa fase vengono copiate le immagini che
dovranno essere incluse nel documento nella posizione corretta sul file
system dove risiedono gli altri file del pacchetto;
5. Compressione dei files: ultima fase della conversione è la compressione dei
files in un archivio ZIP;
49
Figura 4.6-1: Conversione IML - OOXML
4.7
Limiti dell’implementazione
Allo stato attuale i limiti dell‟implementazione di Si-ConForMi OXML
consistono nell‟impossibilità di specificare a linea di comando l‟utilizzo di
fogli di stile diversi da quelli predefiniti per le trasformazioni XSLT (occorre
quindi andare a modificare il codice Java) e la mancanza di parametri per
definire i percorsi del risultato delle conversioni e della cartella per i file
temporanei (in entrambi i casi viene utilizzata cartella corrente di lavorazione
dell‟utente).
50
5. CONCLUSIONI
Nel corso di questa tesi abbiamo affrontato il tema della conversione dei
documenti. Per prima cosa abbiamo cercato di studiare a fondo le origini del
problema, partendo dalle necessità che si sono venute a creare con Internet e la
digitalizzazione dei documenti fino all‟introduzione dei sistemi di conversione
tra formati documentali.
In seguito abbiamo poi analizzato i vari tipi di linguaggi di markup per cercare
di comprendere come un documento può essere rappresentato in forma
elettronica e, in particolare con il principio di segmentazione, può essere
scomposto nelle varie dimensioni che lo descrivono. In entrambi i casi abbiamo
potuto notare come i principali modelli descritti in letteratura hanno puntato
alla separazione dei dati per cercare di astrarre e frammentare il problema
della rappresentazione di un documento.
Successivamente abbiamo esaminato i vari schemi di conversione e abbiamo
potuto osservare che il modello che utilizza il formato intermedio scompone il
processo di trasformazione in due fasi al fine di rendere più agevole il
passaggio da un formato all‟altro, semplificando l‟architettura e risparmiando
in termini di costo di sviluppo.
Come ci hanno dimostrato in passato la politica, la matematica e anche
l‟informatica, anche in questo ambito si è potuto constatare che con un
approccio “divide et impera” (dal latino “dividi e domina”), scomponendo
ricorsivamente un problema nei relativi sottoproblemi, si ottiene una soluzione
vincente con innumerevoli vantaggi applicativi, come una miglior gestione
delle sottoparti ed una maggiore funzionalità complessiva.
Sfruttando questo criterio nella realizzazione del progetto e cercando di mettere
insieme questi principi (segmentazione dei documenti con il modello
Pentaformato e conversione con formato intermedio) ho sviluppato un
convertitore per OpenXML che opera in modo specifico su un sottoproblema
di conversione (relativo alla mappatura del contenuto strutturato di un
documento) rendendo possibile una migliore gestione della conversione stessa
da questo formato.
Questo non significa necessariamente che con questo approccio risolutivo si
possa ottenere sempre un convertitore qualitativamente superiore di quelli
esistenti creati ad hoc, ma permette sicuramente di raggiungere un risultato
maggiormente aperto e non vincolato dalle scelte progettuali. Si-ConForMi
51
OXML è tutt‟altro che limitato: è estendibile (sia in termini di qualità di
trasformazione che nel supporto di nuovi formati documentali) ed
estremamente versatile (può essere adattato a diversi impieghi, come
formattatore ed estrattore dati per database).
Questo approccio risolutivo è stato utilizzato per realizzare un convertitore per
Office OpenXML ma può essere anche adottato nella progettazione di
convertitori per domini specifici.
Gli sviluppi futuri di questo convertitore hanno come obiettivi principali:
il perfezionamento delle conversioni, cercando di includere gli elementi di
un documento WordprocessingML non ancora mappati in IML (come ad
esempio gli header, i footer ed i commenti);
il supporto alla conversione delle componenti del documento mancanti
(presentazione, behaviour e metadati), prime fra tutte le caratteristiche di
presentazione e formattazione. Per tale componente si potrebbe ad esempio
sviluppare un meccanismo di conversione parallelo adottando un ulteriore
formato intermedio per la mappatura. Un formato che potrebbe essere
impiegato è Cascading Style Sheets (CSS) [W3C99a], una raccomandazione
del W3C per la stesura delle regole di formattazione delle pagine HTML;
l’estensione del convertitore a nuovi formati, primo fra tutti lo standard
OpenDocument, che assieme ad Office OpenXML rappresentano i formati
più utilizzati per la descrizione di documenti di word processing.
52
Elenco delle figure
Figura 2.3-1: Il modello Pentaformato ........................................................... 13
Figura 2.4-1: Modello diretto......................................................................... 16
Figura 2.4-2: Modello ad anello ..................................................................... 17
Figura 2.4-3: Modello con formato intermedio .............................................. 18
Figura 2.5-1: Lo schema di conversione di OpenXML/ODF Translator ......... 21
Figura 3.1-1: Esempio di struttura di un pacchetto Word Office OpenXML ... 24
Figura 3.3-1: Il modello di conversione di Si-ConForMi OXML ................... 32
Figura 3.3-2: Esempio di invocazione di Si-ConForMi OXML ...................... 33
Figura 3.3-3: Esempio di conversione (documento generico) ......................... 35
Figura 3.3-4: Esempio di conversione (caso particolare di lista)..................... 37
Figura 3.3-5: Esempio di conversione (documento con sottodocumenti) ........ 38
Figura 4.5-1: Conversione OOXML - IML .................................................... 48
Figura 4.6-1: Conversione IML - OOXML .................................................... 50
53
Bibliografia
[AJ97]
A. Aiken, M. Jacoby, "Data Format Conversion Using Pointer
Tree Automata", Technical Report, UC Berkeley, 1997
[DDMR90]
S. J. DeRose, D. Durand, E. Mylonas and A. H. Renear, "What
is Text, Really?”, Journal of Computing in Higher Education,
1990
[DDMR96]
S. J. DeRose, D. Durand, E. Mylonas and A. H. Renear,
“Refining our Notion of What Text Really is: The Problem of
Overlapping Hierarchies”, Research in Humanities Computing,
1996
[CRD87]
J. H. Coombs, A. H. Renear, and S. J. DeRose, ”Markup systems
and the future of scholarly text processing. Commun.”,
November 1987
[DBW02]
L. M. Diaz, E. Wϋstner, P. Buxmann, “Inter-organizational
Document Exchange - Facing the convertion problem with
XML”, Proceedings of the ACM Symposium on Apllied
Computing (SAC 2002), Madrid, 2002
[DFFV06]
A. Di Iorio, A. A. Feliziani, L. Furini, F. Vitali, A cross-format
architecture for professional publishing, 2006
[DGV05]
A. Di Iorio, D. Gubellini, F. Vitali, “Desing Patterns for
descriptive substructures”, Proceedings of Extreme Markup
Languages, Montreal (Canada), Agosto 1-5, 2005
[DI07]
A. Di Iorio, “Pattern-based Segmentation of Digital Documents:
Model and Implementation”, Technical Report, 2007
[ECM06]
ECMA International, “Standard ECMA-376: Office OpenXML
File Formats”, 2006, http://www.ecmainternational.org/publications/standards/Ecma-376.htm
54
[GM02]
R. J. Glushko, T. McGrath, "Document Engineering for eBusiness", DocEng '02: Proceedings of the 2002 ACM
Symposium on Document Engineering - ACM Press, McLean
(Virginia, USA), 2002
[HA02]
E. R. Harold, Processing XML with Java – A Guide to SAX,
DOM, JDOM, JAXP and TrAX, Addison-Wesley, 2002,
http://www.ibiblio.org/xml/books/xmljava/
[MAR06]
D. Marcantoni, “Dalla struttura piatta alla struttura gerarchica:
modelli di conversione in un CMS”, Phd thesis, 2006
[MBO93]
S. A. Mamrak, J. Barnes, C. O‟Connels, “Benefits of Automatic
Data Translation”, IEEE Software, July 1993
[MIC07a]
Microsoft Corporation, Microsoft Office Compatibility Pack for
Word, Excel, and PowerPoint 2007 file formats, 2007,
http://office.microsoft.com/enus/products/HA101686761033.aspx
[MIC07b]
Microsoft Corporation, Microsoft Office OpenXML File
Format
Converter
for
Mac
0.1.1
(Beta),
2007,
http://www.microsoft.com/mac/downloads.aspx?pid=download
&location=/mac/download/Office2004/ConverterBeta.xml&seci
d=4&ssid=34&flgnosysreq=True
[NAN03]
P. Nanni, “Editing collaborativo: motore di conversione”, PhD
thesis, 2003
[OAS07]
OASIS, “OASIS Open Document Format for
Applications (OpenDocument)”, 2007,
http://www.oasisopen.org/committees/tc_home.php?wg_abbrev=office
[PAN07]
Panergy, docXConverter 1.3, 2007, http://www.panergysoftware.com/products/docxconverter/features.html
[SM07]
Sun Microsystems, OpenOffice.org, 2007,
http://www.openoffice.org
[SO07]
SourceForge, OpenXML/ODF Translator Add-ins for Office,
55
Office
2007, http://odf-converter.sourceforge.net
[W3C95]
W3C, Overview of SGML Resources, November 1995,
http://www.w3.org/MarkUp/SGML/
[W3C99a]
W3C, Cascading Style Sheets, level 1, January 1999,
http://www.w3.org/TR/REC-CSS1
[W3C99b]
W3C, XSL Transformations (XSLT) Version 1.0, November
1999, http://www.w3.org/TR/xslt
[W3C06]
W3C, Extensible Markup Language (XML) 1.0 (Fourth Edition),
16 August 2006, http://www.w3.org/TR/REC-xml/
[W3C07]
W3C, XHTML2 Working
http://www.w3.org/MarkUp/
56
Group
Home
Page,
2007,
Ringraziamenti
Sin da quando sono al mondo ho attraversato con la mia famiglia periodi molto
belli, ma anche brutti a volte, momenti in cui litigavamo e facevamo fatica a
sopportarci a vicenda. Una costante però è sempre stata quella di restare uniti,
di volerci bene l‟un l‟altro, cercando in ogni modo di superare quei piccoli e
grandi problemi che la quotidianità ci ha presentato. Con la mia famiglia
accanto ho potuto affrontare i più grandi ostacoli della mia vita, e sono arrivato
a concludere che quando in casa c‟è l‟amore nessuna difficoltà è insuperabile.
Per questo gli dedico questa tesi, sperando quando un domani dovrò “passare il
testimone“, di poter dare ai miei figli almeno la metà di quello che ho ricevuto.
Voglio ringraziare babbo per i sacrifici che ha fatto per me, per avermi dato
fiducia anche quando forse meno me la meritavo, e perché grazie alle sue
strigliate ho appreso quando era l‟ora di cominciare a lavorare sul serio.
A mamma per avermi sempre incoraggiato, coccolato in questi periodi di stress
(in realtà da sempre) e per aver continuamente cercato di darmi una mano nel
momento in cui ne avevo più bisogno.
A mio fratello Cesare (ma anche a sua moglie Serena!), che grazie ai suoi
buoni consigli mi ha guidato, e addirittura negli ultimi giorni di lavoro mi ha
aiutato a scrivere ed ultimare la tesi. Senza di lui non credo che ce l‟avrei fatta
in tempo.
Voglio ringraziare la mia ragazza Maria, perché da quando ci siamo conosciuti
ha saputo vedere oltre quel ragazzo pigro ed immaturo che mi ritrovo di essere
e grazie al suo affetto mi ha aiutato a tirare fuori il meglio di me.
Un grazie al prof. Fabio Vitali per la sua fiducia e disponibilità e perché mi ha
permesso di conoscere le tecnologie delle quali oggi sono affascinato, e che in
futuro potrebbero influenzarmi nella scelta di un lavoro. Un caloroso
ringraziamento anche ad Angelo Di Iorio, Paolo Marinelli ed Antonio Feliziani
che mi hanno seguito nella fase di sviluppo del progetto e di stesura della
dissertazione, in caso di necessità sono sempre stati presenti.
Un grandissimo omaggio al famoso DrillTeam (il mio gruppo di progetto
dell‟università), più precisamente a Piergiorgio Pallotti, Enrico Sasdelli e
Jacopo Zingoni. Dopo tante avventure e tanti esami affrontati insieme non
57
credo che avrei potuto trovare dei compagni di università migliori di loro. Il
nome del mio progetto è interamente dedicato al nostro stile.
A tutti i miei amici e tutti coloro che mi sono stati vicino in questi anni, che mi
hanno incoraggiato, che hanno creduto in me: grazie di cuore!
58