2009-11-30 1 views
2

Мне нужно уметь идентифицировать, что данный файл является файлом ODF на основе содержимого файла, а не на расширении файла.Как определить файл ODF?

ODF-файлы - это действительно коллекция XML-файлов в zip-контейнере, что означает, что я не могу использовать магический номер файла, поскольку он просто укажет, что это zip-файл.

Так что я действительно прошу Есть ли файлы быть в контейнере ODF? Если это так, то присутствие этого файла в zip-контейнере указывает на то, что он, скорее всего, является файлом ODF, а отсутствие этого файла указывает, что оно равно , а не - файл ODF.

ответ

3

Почему бы не проверить ODF Technical Specification? Файл mimetype, указанный там, вероятно, будет идеальным способом проверить (просто найдите строку vnd.oasis.opendocument в mimetype).

+0

Является ли файл mimetype ** обязательным ** для работы в действительном файле ODF? – jwaddell

+1

Не в ODF1.0: 17.4 MIME Type Stream: Если существует тип MIME для документа, который использует пакеты, то пакет ДОЛЖЕН содержать поток, называемый «mimetype». – Managu

0

Как я понимаю, в корневом архиве всегда будут файлы .xml, и эти/эти файлы xml всегда будут содержать строку <office:document очень близко к началу.

Все, что я видел, похоже, содержат файл с именем «content.xml» в корне, который содержит эту строку.

Существует не так много приложений, пишущих документы ODF, и в прошлом было в основном только одно. Поэтому не стоит устанавливать слишком старую версию OpenOffice, сохранять несколько файлов и проверять, что это правило применяется так же, как и к текущим файлам ODF.

Я бы проверить что-то вроде этого на партию ноу ODF файлов, чтобы проверить, надежно:

$ unzip -c $FILE content.xml | grep -q '<office:document' && echo yes || echo NO 
0

Читать сборки ID - если отсутствует, то документ не ODF.

oDoc = ThisComponent 
If oDoc.BuildID = "" Then 
    bIsNotODF = TRUE 
Endif