XML & ObjectReplacements d'un .odt (désarchivé)

Discussion à propos de l'éditeur de formule mathématique et d'équation Math

Modérateur : Vilains modOOs

Règles du forum
Attention : cette section n'est pas consacrée au tableur Calc mais à l'éditeur de formule mathématique et d'équation.
Avatar de l’utilisateur
jmb
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 08 mars 2008 21:51
Localisation : Paris

XML & ObjectReplacements d'un .odt (désarchivé)

Message par jmb »

Bonsoir à tous,

Ce message ne concerne pas les fonctionnalités du logiciel OpenOffice mais la structure d'un document texte .odt (contenant lui-même une formule .odf) que je désirerais comprendre ; mes recherches Internet ont été infructueuses.

J'ai, dans un document .odt vierge, inséré « x » à l'intérieur d'une formule. J'ai enregistré, fermé, puis renommé le document avec l'extension .zip et ai enfin désarchvée (ou décompressé) cette archive : elle contient des fichiers XML, un fichier texte et des dossiers contenant eux aussi des fichiers XML ainsi qu'un fichier image dont j'ignore la nature ('Object 1' dans le dossier 'ObjectReplacements') ; même Gimp ne peut pas l'ouvrir ('Type de fichier inconnu').

En particulier, le fichier XML principal, 'content.xml', décrit le contenu de tout le document et a alors la structure suivante :

Code : Tout sélectionner

<office:document-content office:version="1.1">
    <office:scripts/>
    <office:font-face-decls>
        <!-- contenu effacé pour épurer -->
    </office:font-face-decls>
    <office:automatic-styles/>
    <office:body>
        <office:text>
            <text:sequence-decls>
                <!-- contenu effacé pour épurer -->
            </text:sequence-decls>
            <text:p text:style-name="Standard">
                <draw:frame draw:style-name="fr1" draw:name="Objet1" text:anchor-type="as-char" 
                 svg:width="0.422cm" svg:height="0.504cm" draw:z-index="0">
                    <draw:object xlink:href="./Object 1" xlink:type="simple" 
                     xlink:show="embed" xlink:actuate="onLoad"/>
                    <draw:image xlink:href="./ObjectReplacements/Object 1" xlink:type="simple" 
                     xlink:show="embed" xlink:actuate="onLoad"/>
                </draw:frame>
            </text:p>
        </office:text>
    </office:body>
</office:document-content>
Autrement dit, il y a, dans un paragraphe standard ('<text:p text:style-name="Standard">'), un cadre ('<draw:frame>') qui contient :
  • ⋅ un objet simple ('<draw:object>') implanté ('embed') & autochargeable (' xlink:actuate="onLoad"') décrit dans le dossier 'Object 1' associé à…
    ⋅ une image simple implantée & autochargeable qu'on trouve dans le dossier 'ObjectReplacements' et qui s'appelle (elle aussi) 'Object 1'.
L'objet contenu dans le dossier 'Object 1' est le fichier MathML 'content.xml' (+ un autre fichier 'settings.xml') :

Code : Tout sélectionner

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE math:math PUBLIC "-//OpenOffice.org//DTD Modified W3C MathML 1.01//EN" "math.dtd">
<math:math xmlns:math="http://www.w3.org/1998/Math/MathML">
  <math:semantics>
    <math:mi>x</math:mi>
    <math:annotation math:encoding="StarMath 5.0">x</math:annotation>
  </math:semantics>
</math:math>
Et j'imagine que l'image 'Object 1' dessine ce code ; mais je n'arrive pas à l'ouvrir directement...

Si, dans 'Object 1/content.xml', on remplace les x par des y et qu'on recompresse en .zip, qu'on renome tout ça en .odt et qu'on ouvre... il ne s'est apparemment rien passé, on voit x dans une formule ; sauf que si on l'ouvre en double-cliquant dessus, elle se transforme en y dans la page et dans l'éditeur d'équtions ! J'ai l'impression que, tant qu'on ne fait pas appel à l'éditeur d'équations, OpenOffice affiche l'image 'Object 1' du dossier 'ObjectReplacements' et dès qu'on essaie de modifier l'équation, c'est le dossier 'Object 1' auquel OpenOffice fait appel. Si on ferme alors tout, on nous demande d'enregistrer alors qu'aucune modif n'a été faite avec OpenOffice. Et le fichier Obtenu est valide et contient à part entière un y.

Si on remplace 'ObjectReplacements/Object 1' par une image de son choix (une .jpg) à laquelle on donne le nom de 'Obect 1' alors c'est bien cette photo qu'on voit (redimensionnée) en ouvrant le document...
Je désirerais pouvoir modifier un tel document par action d'un programme mais je ne sais pas comment générer cette image. Quel genre de fichier est l'image 'Object 1' ? Peut-on la générer avec un script php et éventuellement un autre programme ? Y a-t-il une façon de demander à OpenOffice de générer automatiquement, à l'ouverture du document, cette image à partir du code MathML de 'Object 1/content.xml' ?

Cordialement,
J.-M. B.
Dernière modification par Bidouille le 25 janv. 2009 10:11, modifié 2 fois.
Raison : Titre modifié : "formule" est implicite ici
[OpenOffice 2.4.1 sous Linux UBUNTU 8] Luttez contre l'HADOPI !
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: XML & ObjectReplacements d'un .odt (désarchivé) avec formule

Message par Pierre-Yves Samyn »

Bonjour

Je n'ai jamais creusé dans cette direction...

Si cela peut t'avancer, le manifest.xml indique :

Code : Tout sélectionner

<manifest:file-entry manifest:media-type="application/x-openoffice-gdimetafile;windows_formatname="GDIMetaFile"" manifest:full-path="ObjectReplacements/Object 1"/>
Tu trouveras peut-être de l'information ici : http://www.w3.org/TR/2003/REC-MathML2-20031021/
Avatar de l’utilisateur
jmb
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 08 mars 2008 21:51
Localisation : Paris

Re: XML & ObjectReplacements d'un .odt (désarchivé) avec formule

Message par jmb »

Bonjour,

Merci pour cette précision.

Il ne me semble pas qu'on puisse trouver des renseignements au sujet de cet image 'Object 1' dans la spécification W3C du langage de balisage MathML ; j'ai l'impression que l'association entre le code MathML de 'Object 1/content.xml' et cette image est réalisée par OpenOffice hors de cadre du MathML.

Il ne s'agit quand même pas d'un fichier binaire dans un “format ouvert” !

En revanche je vais suivre ta piste du 'gdimetafile'…

Cordialement,
J.-M. B.
[OpenOffice 2.4.1 sous Linux UBUNTU 8] Luttez contre l'HADOPI !
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: XML & ObjectReplacements d'un .odt (désarchivé) avec formule

Message par Pierre-Yves Samyn »

Toujours pas creusé mais... testé un bidouillage qui semble fonctionner (pour le très peu de tests effectués).

Ce que j'ai fait :
  • Créer un odf (ne comprenant pas de dossier ObjectReplacements) avec comme contenu un simple x
  • Créer un odt comprenant un objet formule avec comme contenu un simple y (il comprend un dossier ObjectReplacements)
  • J'ai remplacé le content.xml du sous-dossier Object 1 par le content.xml de l'odf et
  • J'ai supprimé du META-INF > manifest.xml les lignes faisant référence à ObjectReplacements :

    Code : Tout sélectionner

    <manifest:file-entry manifest:media-type="application/x-openoffice-gdimetafile;windows_formatname="GDIMetaFile"" manifest:full-path="ObjectReplacements/Object 1"/>
    <manifest:file-entry manifest:media-type="" manifest:full-path="ObjectReplacements/"/>
  • Rezipper le tout (en résumé : les constituants de l'odt moins le dossier ObjectReplacements et ses référénces, en remplaçant le content.xml de la formule)
  • Rouvrir le document... qui affiche bien le x (comme objet formule bien sûr)
Nota : le dossier ObjectReplacements n'est recréé que si on modifie la formule

Conclusion (si des tests plus approfondis ou des plus avertis que moi te le déconseillent...) il est peut-être possible... ne ne pas devoir créer ce dossier et sont contenant... :?:
Avatar de l’utilisateur
jmb
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 08 mars 2008 21:51
Localisation : Paris

Re: XML & ObjectReplacements d'un .odt (désarchivé)

Message par jmb »

Bonsoir,

Désolé d'avoir mis autant de temps à répondre…

Ton « bidouillage », comme tu l'appelles, m'aide beaucoup ! En effet, il semble qu'on puisse carrément supprimer ce fichier 'ObejctReplacements/Object 1' avec ses références et, qu'à l'ouverture, OpenOffice.org recrée l'image contenue à partir du code MathML du fichier 'Object 1/content.xml' *. Et c'est pour moi une grande avancé.

J'ai refait à peu près la manip que tu décris sur un fichier contenant la formule 14/28+1/7 que j'ai remplacé (au niveau du code MathML de 'Object 1/content.xml' dans FichierAvecFormuleOriginal.odt) par 2/7+4/7+1/7 en supprimant le fichier 'ObejctReplacements/Object 1' et ses références dans 'META-INF/manifest.xml' : le fichier obtenu est FichierAvecFormuleModifie.odt.

Il subsiste trois difficultés :
  • l'image n'est pas correctement redimensionnée, ce qui est embêtant. La seule façon que j'ai trouvée pour la redimensionner est de l'ouvrir en double-cliquant dessus avec OOo ; j'aurais préféré adpater directement le xml, toujours dans la perspective d'écrire des modifications avec un script php ou autre…
  • si on ouvre FichierAvecFormuleModifie.odt et qu'on ouvre l'équation puis qu'on referme l'équation puis le document, OOo demande si on veut réenregistrer alors qu'il n'y a pas eu de modifications, du moins en apparence ! Cela témoigne que ce « bidouillage » en est bien un et que le document résultant n'est pas très propre au niveau de sa structure interne.
  • Il me semble que c'est seulement si on réenregistre FichierAvecFormuleModifie.odt avec OOo que, dans l'archive correspondante, le fichier 'ObjectReplacements/Object 1' est recréé et que les deux éléments correspondants dans 'META-INF/manifest.xml' sont réécrits. Et ce, indépendemment du fait d'avoir ouvert l'équation ou pas, dans OOo. De nouveau, c'est que le document FichierAvecFormuleModifie.odt ne doit pas être totalement satisfaisant.
Merci tout de même de tes conseils.

Cordialement,
J.-M. B.

* Il est à remarquer que le navigateur FireFox ouvre aussi ce fichier ('Object 1/content.xml') en affichant correctement la formule mathématique attendue à partir du nouveau code MathML remplacé.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
[OpenOffice 2.4.1 sous Linux UBUNTU 8] Luttez contre l'HADOPI !