¿Cómo identificar un archivo ODF?
Pregunta
Necesito poder identificar que un archivo dado es un archivo ODF basado en el contenido del archivo y no en la extensión del archivo.
Los archivos ODF son realmente una colección de archivos XML en un contenedor zip, lo que significa que no puedo usar el número mágico del archivo, ya que solo indicará que es un archivo zip.
Entonces, lo que realmente pregunto es ¿hay algún archivo que sea requerido para estar presente en un contenedor ODF? Si es así, la presencia de ese archivo en un archivo zip contenedor indica que es probable que sea un archivo ODF, y la ausencia de ese archivo indica que definitivamente no es no un archivo ODF.
Solución
¿Por qué no echa un vistazo a la especificación técnica ODF ? El archivo mimetype enumerado allí probablemente sería una forma ideal de verificar (solo busque la cadena vnd.oasis.opendocument
en el tipo mime).
Otros consejos
Según tengo entendido, siempre habrá archivos .xml en la raíz del archivo, y estos / estos archivos xml siempre contendrán la cadena <office:document
muy cerca del principio.
Todos los que he visto parecen contener un archivo llamado " content.xml " en la raíz, que contiene esta cadena.
No hay tantas aplicaciones que escriban documentos ODF, y en el pasado, básicamente había solo una. Por lo tanto, no debería ser demasiado difícil instalar alguna versión antigua de OpenOffice, guardar algunos archivos y verificar que esta regla se aplique como lo hace en los archivos ODF actuales.
Probaría con algo como esto en un lote de archivos ODF conocidos, para verificar si es confiable:
$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO
Lea la ID de compilación: si falta, el documento no es ODF.
oDoc = ThisComponent
If oDoc.BuildID = "" Then
bIsNotODF = TRUE
Endif