Librerie digitali Uso di XML per memorizzare i metadati Descrizione generale Ad ogni dato associo un file XML che descrive il contenuto del dato stesso Memorizzo su file system sia il dato sia il file XML associato al dato Oppure Memorizzo in un DB multimediale il dato all interno di un attributo (di tipo video, testo,..) e il file XML all interno di un attributo di tipo XMLType Tipo apposito usato per memorizzare e interrogare dati XML Motivi dell uso di XML XML permette il facile scambio di informazioni tra sistemi diversi Interoperabilità tra librerie digitali e strumenti di annotazione e ricerca XML per memorizzare i metadati In un unico file XML rappresento tutti i metadati di un dato grazie alla struttura gerarchica dei file XML Vantaggio Non ho (o non sono obbligato ad avere) file XML separati per i diversi tipi di metadati (singolo valore, multivalore) e per gli oggetti Svantaggio Rischio di ripetere più volte le stesse informazioni Solitamente ho un file XML per ogni dato Esempio di memorizzazione di metadati di testi File XML (che usa un formato non standard) per rappresentare un documento testuale <DescrizioneTesto> <IDT>T1</IDT> <FileContenuto>Testo1.txt</FileContenuto> <Titolo>Titolo doc di prova</titolo> <NumeroPagine>20</NumeroPagine> <Autori> <Autore>Paolo Garza</Autore> <Autore>Silvia Chiusano</Autore> </Autori> Esempio <DescrizioneTesto> <IDT>T2</IDT> <FileContenuto>Testo2.txt</FileContenuto> <Titolo>Titolo doc non significativo</titolo> <NumeroPagine>10</NumeroPagine> <Autori> <Autore>Paolo Garza</Autore> </Autori> 5 6 1
Interrogazione dei file XML Per trovare tutti i dati che hanno certe caratteristiche devo interrogare più file XML Ripeto la stessa interrogazione su ogni file e poi unisco i risultati Oppure uso delle funzioni apposite che eseguono l interrogazione su una collezione di file Non sempre funziona Dipende del motore di interrogazione XQuery utilizzato E dalla eventuale presenza di join tra file XML diversi Esempio di interrogazioni 1. Trovare l identificatore (IDT) di tutti i testi che hanno Paolo Garza come autore 2. Trovare l identificatore (IDT) di tutti i testi che hanno Paolo Garza e Vincenzo D elia come autori 3. Trovare l identificatore (IDT) di tutti i testi che hanno Paolo Garza come autore e sono più lunghi di 5 pagine Interrogazione unica su tutti i file for $i in collection(./filexml )/DescrizioneTesto Stessa interrogazione ripetuta singolarmente su ogni documento XML for $i in doc(./filexml/descrizionetestoxy.xml )/DescrizioneTesto 9 Interrogazione unica su tutti i file for $i in collection(./filexml )/DescrizioneTesto and $i/autori/autore= Vincenzo D Elia Funziona perché Autore è un attributo multivalore Stessa interrogazione ripetuta singolarmente su ogni documento XML for $i in doc(./filexml/descrizionetestoxy.xml )/DescrizioneTesto and $i/autori/autore= Vincenzo D Elia 10 Soluzione interrogazione n 3 Interrogazione unica su tutti i file for $i in collection(./filexml )/ DescrizioneTesto and $i/numeropagine>5 11 Esempio di interrogazione Trovare l identificatore (IDT) di tutti i testi che contengono la parola significativo Se il contenuto è di tipo stringa di caratteri ed è salvato nel file XML allora posso usare XQuery con le estensioni per la ricerca di parole nei testi (valori assunti dai tag) Se invece il testo è in un file esterno allora non mi basta XQuery Mi servono delle funzionalità estese da includere in XQuery per cerca le parole nei testi esterni Non esistono tali funzionalità per XQuery 12 2
Esempio di interrogazioni Esempio di memorizzazione di metadati di immagini 1. Trovare l identificatore (IDT) di tutti i testi che assomigliano al testo Il data mining si occupa di analizzare il contenuto dei dati 2. Trovare l identificatore (IDT) di tutti i testi che assomigliano al testo che ha come IDT il valore T1 Mi serve utilizzare delle funzioni per il confronto tra testi che XQuery non offre Identifico i testi e poi uso uno strumento esterno Soluzione basata sull uso di XML per memorizzare i metadati Ipotetica di voler creare una base di dati per gestire le informazioni relative a delle immagini e ai relativi metadati Voglio memorizzare inoltre gli oggetti presenti nelle diverse immagini e la loro posizione Per semplicità specifico per ogni oggetto qual è la posizione nell immagine del rettangolo più piccolo che contiene interamente l oggetto per fare i confronti 13 14 Esempio (schema non standard) <DescrizioneImmagine> <IDI>I1</IDI> <FileContenuto>Immagine1.jpg</FileContenuto> <Titolo>Panorama di Roma</Titolo> <DimensioneMB>20.5</DimensioneMB> <Autori> <Autore>Paolo Garza</Autore> <Autore>Vincenzo D Elia</Autore> </Autori> <Oggetti> <Oggetto> <Nome>Sole</Nome> <PosizioneAlto><X>10</X><Y>10</Y></PosizioneAlto> <PosizioneBasso><X>15</X><Y>15</Y></PosizioneBasso> </Oggetto>... </Oggetti> </DescrizioneImmagine> Esempio di interrogazioni 1. Trovare l identificatore (IDI) di tutte le immagini che hanno Paolo Garza come autore 2. Trovare l identificatore (IDI) di tutte le immagini che hanno Paolo Garza come autore e sono più piccole di 1MB Soluzioni analoghe a quelle proposte per i testi 15 16 for $i in collection(./filexmlimmagini )/DescrizioneImmagine return $i/idi for $i in collection(./filexmlimmagini )/DescrizioneImmagine and $i/dimensionemb<1 return $i/idi 17 18 3
Esempio di interrogazioni 1. Trovare l identificatore (IDI) di tutte le immagini che hanno Paolo Garza come autore e contengono una barca e l acqua 2. Trovare l identificatore (IDI) di tutte le immagini che contengono una barca sull acqua for $i in collection(./filexmlimmagini )/DescrizioneImmagine and $i/oggetti/oggetto/nome= Barca and $i/oggetti/oggetto/nome= Acqua return $i/idi Mi basta verificare la presenza degli oggetti 19 20 for $i in collection("./filexmlimmagini")/descrizioneimmagine/oggetti /Oggetto[Nome="Barca"] where $i/../../autori/autore="paolo Garza and $i/../oggetto[nome="acqua" and number(posizionealto/x)<=number($i/posizionealto/x) and number(posizionealto/y)<=number($i/posizionealto/y) and number(posizionebasso/x)>=number($i/posizionebasso/x) and number(posizionebasso/y)>=number($i/posizionebasso/y)] return $i/../../idi La necessità di verificare anche la posizione complica la soluzione 21 Esempio di interrogazione Trovare l identificatore (IDI) di tutte le immagini che hanno almeno il 10% dei pixel neri (colore=nero) Se voglio gestire solo il nero associo ad ogni immagine un metadato relativo alla percentuale di pixel neri Se voglio poter fare questa interrogazione per un colore qualunque (non noto in fase di progettazione della base di dati) mi servono delle funzionalità estese che non ho in XQuery 22 Esempio di interrogazione Trovare l identificatore (IDI) di tutte le immagini che assomigliano all immagine presente nel file immagineesempio.jpg passata come parametro all interrogazione Mi serve utilizzare delle funzioni per il confronto tra immagini In XQuery tali funzionalità non esistono Posso lavorare solo sui metadati Uso di DMBS + XMLType Base di dati dotata di un attributo XMLType in cui sono memorizzate le descrizioni XML dei dati Ogni tupla contiene il dato (campo BLOB, immagine, video, testo) e la sua descrizione (campo XMLType) 23 24 4
Salvataggio di testi e metadati Possibile soluzione per il salvataggio di dati e metadati in un DBMS dotato di attributi di tipo XMLType Testo(IDT, Contenuto, Metadati) /* Contenuto = testo Metadati = attributo XMLType contenente un documento XML con i metadati relativi all oggetto presente in Contenuto */ Esempio Testo IDT T1 T2 Contenuto Testo in formato binario o link al file esterno Testo in formato binario o link al file esterno Metadati <DescrizioneTesto>... <DescrizioneTesto>... 25 26 Interrogazioni Combinazione di SQL e XQuery Funzioni per eseguire una interrogazione XQuery sull attributo di una tabella La query viene ripetuta per ogni tupla della tabella Posso verificare per ogni tupla se la query Xquery eseguita ha ritornato oppure no dei risultati e imporre delle condizioni di filtro nella where Non sempre è facile sfruttare al massimo le potenzialità dei due linguaggi quando sono utilizzati insieme Esempio di interrogazioni 1. Trovare l identificatore (IDT) di tutti i testi che hanno Paolo Garza come autore 2. Trovare l identificatore (IDT) di tutti i testi che hanno Paolo Garza e Vincenzo D elia come autori 3. Trovare l identificatore (IDT) di tutti i testi che hanno Paolo Garza come autore e sono più lunghi di 5 pagine 27 28 SELECT IDT FROM Testo WHERE Metadati.exist( /DescrizioneTesto/Autori/Autore= Paolo Garza )=1; La funzione exist eseguita su un campo XMLType restituisce 1 se la query XQuery passata come parametro restituisce un insieme non vuoto in seguito alla sua esecuzione Viene eseguita solo sulla tupla attualmente in esame SELECT IDT FROM Testo WHERE Metadati.exist( for $i in /DescrizioneTesto where $i/autori/autore= Paolo Garza and $i/autori/autore= Vincenzo D\ Elia )=1; 29 30 5
Soluzione interrogazione n 3 SELECT IDT FROM Testo WHERE Metadati.exist( for $i in /DescrizioneTesto where $i/autori/autore= Paolo Garza and $i/numeropagine>5 )=1; 31 6