Come identificare un file ODF?
Domanda
Devo essere in grado di identificare che un determinato file è un file ODF basato sul contenuto del file e non sull'estensione del file.
I file ODF sono in realtà una raccolta di file XML in un contenitore zip, il che significa che non posso usare il numero magico del file poiché indicherà semplicemente che si tratta di un file zip.
Quindi quello che sto veramente chiedendo è ci sono dei file che sono richiesti per essere presenti in un contenitore ODF? In tal caso la presenza di quel file in una zip Il contenitore indica che è probabile che sia un file ODF e l'assenza di quel file indica che sicuramente non è non un file ODF.
Soluzione
Perché non dai un'occhiata alle Specifiche tecniche ODF ? Il file mimetype elencato probabilmente sarebbe un modo ideale per verificare (basta cercare la vnd.oasis.opendocument
stringa nel mimetype).
Altri suggerimenti
A quanto ho capito, ci saranno sempre file .xml nella radice dell'archivio e questo / questi file xml conterranno sempre la stringa <office:document
molto vicino all'inizio.
Tutti quelli che ho visto sembrano contenere un file chiamato " content.xml " nella radice, che contiene questa stringa.
Non ci sono molte applicazioni che scrivono documenti ODF e in passato ce n'era praticamente una. Quindi non dovrebbe essere troppo difficile installare una versione antica di OpenOffice, salvare alcuni file e verificare che questa regola si applichi come sui file ODF correnti.
Proverei con qualcosa del genere su un batch di file ODF conosciuti, per verificare se è affidabile:
$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO
Leggi l'ID build - se mancante, il documento non è ODF.
oDoc = ThisComponent
If oDoc.BuildID = "" Then
bIsNotODF = TRUE
Endif