Skip to topic | Skip to bottom
Home

Sandbox
Sandbox.AlessioRolfiniSandboxr1.3 - 27 Apr 2010 - 00:02 - AlessioRolfinitopic end

Start of topic | Skip to actions

Overlapping nel change tracking di OpenOffice?.org e Microsoft Office

Abstract

Il problema dell'overlapping si può presentare quando, ad uno stesso documento, vengono associate più gerarchie distinte. Ad esempio, nella gestione del change tracking di editor di documenti: qualsiasi editor prevede la possibilità di identificare ogni modifica effettuata da ogni singolo autore, ed effettuare operazioni su di essa (ad esempio validarla, rigettarla, etc..). Ad un singolo contenuto (il documento), viene quindi aggiunta una nuova gerarchia (le informazioni di change tracking), che si sovrappone all'esistente e si interseca con essa.

L'overlapping nei formati documentali è un problema noto, e nel passato è sempre stato gestito con tecniche ad hoc, facenti leva sul particolare formato dei dati di ogni singola applicazione.

Nel caso in cui i dati siano rappresentati in XML il problema assume proporzioni importanti. La gestione delle gerarchie multiple non è una caratteristica prevista dall'XML, che necessita di un'organizzazione dei dati strutturata ad albero. E stiamo assistendo in questi anni all'introduzione di formati XML in una moltitudine di ambiti applicativi che prima facevano uso di formati ad hoc. Questo perchè l'XML è facilmente gestibile ed elaborabile con una moltitudine di strumenti, ed uno stesso documento può essere fruito in diversi ambiti (ad esempio redatto con un word processor, pubblicato su un sito web e letto online da un browser su un palmare).

L'introduzione di gerarchie in overlap all'interno di un file XML può generare diversi problemi (ad esempio l'XML può non essere più ben formato) e sono state studiate diverse tecniche per risolverli.

Questo documento si propone di definire cos'è l'overlapping, di elencare le diverse tecniche conosciute per gestire l'overlapping in documenti XML, focalizzandosi sull'ambito del change tracking. Verranno introdotti brevemente i formati di dati Open Document Format (Openoffice.org) e OpenXML? (Microsoft Office 2007) con particolare enfasi sui meccanismi del change tracking.

Verranno presentati degli esempi di overlapping in formato OpenOffice?.org e Microsoft Office 2007.

Introduzione

In generale, si parla di overlapping quando esiste una situazione nella quale, ad un unico contenuto, si vogliono associare più gerarchie, ovvero, in XML/SGML, quando si rende necessario applicare più elementi di markup sullo stesso contenuto, e questi elementi sono indipendenti l'uno dall'altro [4].

Focalizzandoci sull'XML, questo è un problema di espressività del linguaggio: i singoli elementi del documento devono essere organizzati gerarchicamente in un unico albero, ed ogni frammento del documento deve essere contenuto in uno ed un solo elemento XML. Ogni elemento XML deve essere contenuto in uno ed un solo elemento padre, il quale deve essere contenuto in uno ed un solo elemento padre a sua volta, così fino al raggiungimento dell'elemento radice. Questi vincoli hanno più a che fare con la facilità di elaborazione dell'XML che non con le caratteristiche e gli scopi dei linguaggi di markup in generale [1]. Infatti esistono numerosi casi nei quali un singolo frammento di documento deve essere associato a descrittori di markup differenti e gerarchicamente incompatibili. E' uno scenario comune nella bioinformatica, nella linguistica, nel change tracking, etc...

In letteratura il problema è noto da tempo, e sono numerosi gli studi per gestire documenti con gerarchie in sovrapposizione. Alcune risposte possono essere trovate nell'SGML stesso, con un opportuno tag (CONCUR) che non è stato però implementato nell'XML, oppure facendo uso di modelli differenti, sia astratti (GODDAG), che linguaggi di markup alternativi (LMNL) all'XML.

Possiamo riconoscere diverse tipologie di overlapping:

  • Overlapping classico: quando due frammenti di uno stesso documento, annotati con due identificatori generali differenti, si sovrappongono.

  • Self overlap: quando due componenti della stessa struttura, con lo stesso nome, si sovrappongono. Questo può essere il caso, ad esempio, di due revisioni su due regioni di testo che si sovrappongono. Le revisioni apparterranno alla stessa struttura (la struttura delle revisioni, appunto). Si avranno quindi elementi dello stesso tipo con gli stessi nomi che si sovrapongono. Se si implementassero questi casi forzando un rilassamento delle restrizioni di buona formattazione dell'XML, sarebbe impossibile determinare i commenti in maniera univoca, ad esempio [1]: John likes Mary

  • Elementi virtuali: si tratta di elementi usati per definire elementi il cui contenuto è un riordinamento di materiale presente altrove nel documento. Sono anche usati per definire elementi il cui contenuto non è una regione di testo continuo. In questo caso sono chiamati elementi discontinui.

  • Contenimento/Dominanza: la dominanza è la relazione tra parti del documento, dove una domina l'altra se è un'antenata nella struttura del documento. Il contenimento è una relazione che identifica quale parte del documento ingloba fisicamente un'altra parte, senza relazione gerarchica tra le parti. Ancora più semplicemente, una parte a contiene un'altra parte b se a contiene tutti i caratteri del contenuto di b.

Tecniche per la gestione dell'overlapping

Nei primi lavori sul problema degli overlap, uno dei metodi per la loro gestione era semplicemente l'ignorare le regole di annidamento dei tag dell'SGML/XML, creando dei documenti che non potevano essere validati, perchè malformati, e per i quali non poteva essere scritto alcun DTD, rendendo impossibile la loro elaborazione per mezzo degli strumenti XML.

Successivamente sono state identificate diverse tecniche. Vediamo di seguito alcuni concetti importanti e le principali sul dominio dei documenti XML.

Gerarchie sacre e profane

In documenti aventi più di una gerarchia è utile fare distinzione tra i nodi (tag di markup) condivisi tra tutte le gerarchie (cosiddetti “sacri”) ed i nodi specifici di una determinata gerarchia (“profani”).

Esemplificando, se avessimo a che fare con un documento HTML con più gerarchie, i tag

<HTML>
e
<BODY>

necessari alla corretta formattazione del documento per ogni gerarchia, sarebbero nodi “sacri”. I nodi specifici di ogni altra gerarchia sarebbero “profani”.

Possiamo quindi definire “sacra” la gerarchia composta dai nodi “sacri”. Di contro, “profana” è ogni gerarchia composta dai propri nodi “profani”.

Si può notare che non possono esservi problemi di overlapping all'interno del markup sacro, nè all'interno delle singole gerarchie profane, nè all'interno dell'unione della gerarchia sacra con una gerarchia profana.

Invece, possono esservi problemi di overlap in caso di unione tra la gerarchia sacra e più di una gerarchia profana nello stesso documento.

Linee Guida TEI

Gli approcci al problema

Milestones

L'approccio Milestones rappresenta una gerarchia primaria in XML standard, delimitando i tag di inizio e di fine delle gerarchie secondarie utilizzando elementi vuoti [1].

L'idea alla base è che tra le varie gerarchie che competono implicitamente in una struttura in overlap, una sia scelta come gerarchia dominante. L'inzio e la fine di quelli che avrebbero dovuto essere gli elementi delle altre gerarchie sono rappresentati utilizzando elementi vuoti [3].

In alcuni casi può essere necessario introdurre elementi vuoti sia per il tag di inizio che per quello di fine degli elementi appartenenti a gerarchie secondarie.

Le linee guida TEI, che descrivono la tecnica, chiamano milestones gli elementi vuoti.

Utilizzando le milestones, l'elemento rappresentato con questo approccio si appiattisce nell'albero XML, ed è necessario utilizzare del software specifico per il suo riconoscimento e la ricostruzione della sua struttura.

Per vedere l'appiattimento dovuto all'utilizzo delle milestones, utilizziamo l'esempio in [1] creando un piccolo albero XML:

<TEI>
...
  <l>
    <sp>
      <speaker>Tibère</speaker>
      Poursuivez...
    </sp>
    <sp>
      <speaker>Agrippine</speaker>
      Quoi, Seigneur?
    </sp>
    <sp clix:role=”start-range” clix:sID=”sp1” />
    <speaker>Tibère</speaker>
    Le propos détestable
  </l>
  <l>
    où je vous ai surprise.
    <sp clix:role=”end-range” clix:eID=”sp1” />
    <sp clix:role=”start-range” clix:sID=”sp2” />
    <speaker>Agrippine</speaker>
    A ! Ce propos damnable
  </l>
  <l>
    d'une si grande horreur tous mes sens travailla
    <sp clix:role=”end-range” clix:eID=”sp2” />
  </l>
 ...
</TEI>

Un semplice albero potrebbe essere:

Milestones_appiattimento.png

Dove, nei rettangoli rossi, è evidente l'appiattimento degli elementi espressi con milestones.

Fragmentation

Quando un elemento che appartiene ad un vocabolario secondario si sovrappone ad elementi appartenenti al vocabolario primario, è spezzato in tanti piccoli frammenti quanti sono necessari a risolvere la sovrapposizione.

Come per l'approccio milestones, viene scelta una gerarchia come dominante. Gli elementi nelle altre gerarchie sono rappresentati normalmente, sempre che si inseriscano correttamente all'interno della gerarchia dominante. Se un elemento subordinato si estende oltre i propri limiti e si sovrappone ad un elemento della gerarchia dominante, l'elemento subordinato è spezzato in tanti frammenti quanti sono necessari per far sì che ogni frammento sia correttamente annnidato agli elementi della gerarchia dominante.

Vengono utilizzate opportune convenzioni sintattiche per distinguere tra elementi parziali e non parziali e per riconoscere i frammenti di uno stesso elemento, come ad esempio attributi specifici.

La fragmentation è utile per rappresentare segmenti discontinui di testo che non abbiano particolari requisiti di ordinamento, in quanto il parser non può assicurare che un eventuale ordinamento dei frammenti sia rispettato.

Flattened

L'approccio flattened esprime ogni elemento del documento tramite milestones, sia la gerarchia principale che le gerarchie secondarie, indipendentemente dal fatto che gli elementi siano in overlap tra loro oppure no.

Con questa tecnica vengono sicuramente risolti tutti gli overlapping, ma l'intero documento si appiattisce completamente nell'albero XML, e saltano le gerarchie di dominanza, che devono essere ricostruite con software specifico.

Twin documents

Nei twin documents ogni gerarchia è un documento XML distinto, con la propria struttura ad albero.

Non è necessario scegliere alcuna gerarchia principale, e non sono necessari strumenti particolari per esaminare separatamente ogni gerarchia.

Lo svantaggio di questo approccio è che copie multiple dello stesso markup “sacro” devono essere mantenute e che la relazione tra le gerarchie “profane” non può essere osservata guardando un singolo documento.

Stand-off markup

Lo stand-off markup è una tecnica che associa ad un documento sorgente uno o più documenti esterni, ognuno con il proprio markup. Questi documenti esterni puntano a porzioni del documento sorgente.

Secondo gli standard adottati attualmente, i documenti esterni possono essere inseriti in apposite sezioni all'interno dello stesso file del documento sorgente.

Da notare che il markup del documento sorgente non conterrà alcun markup o riferimento ai documenti esterni.

Vantaggi e svantaggi di ogni approccio

Jeni Tennison, in [2], descrive i vantaggi e gli svantaggi di ogni tecnica:

Il formato dati del change tracking in ODF (Open Document Format)

Il formato dati del change tracking in OOXML (Office Open XML - Microsoft)

Alcuni esempi

References

  1. Claus HuitFeldt? C. M. Sperberg-McQueen. Goddag: A data structure for overlapping hierarchies. Proc. of DDEP/PODDP, pages 139-160, 2000.
  2. Angelo Di Iorio, Silvio Peroni, and Fabio Vitali. Taming wild overlaps in a disciplined way with earmark. to be published, 2010.
  3. Paolo Marinelli, Fabio Vitali, and Stefano Zacchiroli. Towards the unication of formats for overlapping markup. New Rev. Hypermedia Multimedia, 14(1):57-94, 2008.
  4. Jeni Tennison. Representing overlap in xml. Article from "Jeni's Musings" blog: http://www.jenitennison.com/blog/node/97, 2008.

to top

You are here: Sandbox > TWikiUsers > AlessioRolfini > AlessioRolfiniSandbox

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Fabio's Wiki? Send feedback