Wie eine ODF-Datei zu identifizieren?
Frage
Ich muß in der Lage sein zu erkennen, dass eine bestimmte Datei eine ODF-Datei auf dem Inhalt der Datei, und nicht auf der Dateierweiterung basiert.
ODF-Dateien wirklich eine Sammlung von XML-Dateien in einem Zip-Containern sind, was bedeutet, dass ich nicht die Datei magische Zahl verwenden kann, da sie nur zeigen, dass es sich um eine ZIP-Datei ist.
Also, was ich wirklich bin gefragt ist gibt es irgendwelche Dateien, die erforderlich in einem ODF Behälter vorhanden sein? Wenn ja das Vorhandensein dieser Datei in einem Zip Behälter zeigen an, dass es wahrscheinlich ist, zeigt eine ODF-Datei, und das Fehlen dieser Datei sein, dass es auf jeden Fall ist nicht eine ODF-Datei.
Lösung
Beachten Sie auch die ODF Technische Daten ? Die Mimetype-Datei aufgelistet es wahrscheinlich ein idealer Weg (Blick nur für die vnd.oasis.opendocument
Zeichenfolge im MIME-Typ) zu prüfen wäre.
Andere Tipps
Wie ich es verstehe, wird es immer .xml-Datei (en) in der Wurzel des Archivs sein, und diese / diese XML-Dateien werden immer die Zeichenfolge <office:document
sehr in der Nähe von Anfang an enthalten.
Alle, die ich gesehen habe, scheinen eine Datei namens „content.xml“ in der Wurzel enthalten, die diese Zeichenfolge enthält.
Es gibt nicht so viele Anwendungen ODF-Dokumente zu schreiben, und in der Vergangenheit gibt es im Grunde nur ein. So soll es nicht allzu schwierig sein, eine alte Version von Openoffice zu installieren, ein paar Dateien speichern, und prüfen, ob diese Regel gilt, wie es funktioniert auf aktuellen ODF-Dateien.
Ich mag diese auf einer Charge mit etwas testen Know ODF-Dateien, um zu überprüfen, ob es zuverlässig ist:
$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO
die Build-ID Lesen -., Wenn sie fehlt, wird das Dokument nicht ODF ist
oDoc = ThisComponent
If oDoc.BuildID = "" Then
bIsNotODF = TRUE
Endif