TL;DR: Du vil ha denne i verktøykassa for å validere OOXML.
OOXML er et arkivformat*, til forskjell fra PDF, som etter min mening er et formidlingsformat. Tidligere har jeg selv vært tilbakeholden med å akseptere flere formater, men har etter en del lesing kommet til at filer i OOXML er mer bevaringsvennlige, på lik linje med f.eks.: Typst og LaTeX. Altså, formater som kan kompileres til vilkårlige formidlingsformater uten uønsket tap av informasjon.
En gyldig OOXML-fil er en fil som følger IEC 29500. Du kan manuelt validere dette ved å åpne en docx-fil i f.eks. 7zip eller PKZip. Docx er egentlig bare en arkivpakke som inneholder word-dokumentet fordelt på flere xml, bilder og andre medietyper du har inkludert, la meg forklare:
Office Open XML-dokumenter er lagret i Open Packaging Conventions (OPC)-pakker, som er ZIP-filer som inneholder XML og andre datafiler, sammen med en spesifikasjon av relasjonene mellom dem. Avhengig av dokumenttypen, har pakkene forskjellige interne katalogstrukturer og navn. En applikasjon vil bruke relasjonsfilene for å finne individuelle seksjoner (filer), med hver seksjon som har tilhørende metadata, spesielt MIME-metadata.
* Dersom filen inneholder essensielle elementer som skrifttype i ISO/IEC 14496-22:2007 format osv.
Utrolig lang forklaring:
En grunnleggende pakke inneholder en XML-fil kalt [Content_Types].xml
i roten, sammen med tre kataloger: _rels
, docProps
, og en katalog spesifikk for dokumenttypen (for eksempel, i en .docx tekstbehandlingspakke, ville det være en word
-katalog). Word-katalogen inneholder document.xml
-filen som er kjernen i innholdet i dokumentet.
[Content_Types].xml
Denne filen gir MIME-type informasjon for deler av pakken, ved å bruke standarder for visse filutvidelser og overstyringer for deler spesifisert av IRI.
_rels
Denne katalogen inneholder relasjoner for filene i pakken. For å finne relasjonene for en spesifikk fil, se etter _rels-katalogen som er et søsken av filen, og deretter etter en fil som har det opprinnelige filnavnet med .rels som filformat. For eksempel, hvis filen for innholdstyper hadde noen relasjoner, ville det være en fil kalt [Content_Types].xml.rels
inne i _rels
-katalogen.
_rels/.rels
Denne filen er hvor pakkerelasjonene er lokalisert. Applikasjoner ser her først. Ved å se i en teksteditor, vil man se at den beskriver hver relasjon for den seksjonen. I et minimalt dokument som bare inneholder den grunnleggende document.xml
-filen, er de detaljerte relasjonene metadata og document.xml
.
docProps/core.xml
Denne filen inneholder kjernepropsene for ethvert Office Open XML-dokument.
word/document.xml
Denne filen er hoveddelen for ethvert Word-dokument. Det er her all teksten ligger.
Relasjoner
Et eksempel på en relasjonsfil (word/_rels/document.xml.rels) er (hentet fra wikipedia):
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Relationships xmlns="http://schemas.microsoft.com/package/2005/06/relationships">
<Relationship Id="rId1"
Type="http://schemas.microsoft.com/office/2006/relationships/image"
Target="http://en.wikipedia.org/images/wiki-en.png"
TargetMode="External"
/>
<Relationship Id="rId2"
Type="http://schemas.microsoft.com/office/2006/relationships/hyperlink"
Target="http://www.wikipedia.org"
TargetMode="External"
/>
</Relationships>
Slik sett, kan bilder som er referert i dokumentet finnes i relasjonsfilen ved å se etter alle relasjoner som er av typen http://schemas.microsoft.com/office/2006/relationships/image.
Følgende XML viser et eksempel på inline markup for en hyperlink:
<w:hyperlink r:id="rId2" w:history="1"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
>
I dette eksempelet er Uniform Resource Locator (URL) i relasjonens «target»-attributt referert gjennom relasjonsidentifikatoren, rId2
. Lenkede bilder, maler og andre elementer refereres på samme måte.
Bilder kan være innebygde eller lenket ved hjelp av en tag:
<v:imagedata w:rel="rId1" o:title="example" />
Dette er referansen til bildefilen. Alle referanser håndteres via relasjoner. For eksempel har en document.xml
en relasjon til bildet. Det er en _rels
-katalog i samme katalog som document.xml
, inne i _rels
er det en fil kalt document.xml.rels
. I denne filen vil det være en relasjonsdefinisjon som inneholder type, ID og plassering. ID-en er den refererte ID-en brukt i XML-dokumentet. Typen vil være en referanseskjemadefinisjon for medietypen og plasseringen vil være en intern plassering i ZIP-pakken eller en ekstern plassering definert med en URL.
Dokumentegenskaper
Office Open XML bruker Dublin Core Metadata Element Set og DCMI Metadata Terms for å lagre dokumentegenskaper. Dublin Core er en standard for tverrdomene informasjonsressursbeskrivelse og er definert i ISO 15836:2003.
Et eksempel på en dokumentegenskapsfil (docProps/core.xml
) som bruker Dublin Core-metadata, er:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties"
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<dc:title>Office Open XML</dc:title>
<dc:subject>File format and structure</dc:subject>
<dc:creator>Wikipedia</dc:creator>
<cp:keywords>Office Open XML, Metadata, Dublin Core</cp:keywords>
<dc:description>Office Open XML uses ISO 15836:2003</dc:description>
<cp:lastModifiedBy>Wikipedia</cp:lastModifiedBy>
<cp:revision>1</cp:revision>
<dcterms:created xsi:type="dcterms:W3CDTF">2008-06-19T20:00:00Z</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2008-06-19T20:42:00Z</dcterms:modified>
<cp:category>Document file format</cp:category>
<cp:contentStatus>Final</cp:contentStatus>
</cp:coreProperties>
Dokumentmarkeringsspråk
En Office Open XML-fil kan inneholde flere dokumenter kodet i spesialiserte markeringsspråk som tilsvarer applikasjoner i Microsoft Office. Office Open XML definerer flere vokabular ved bruk av 27 navneområder og 89 skjemamoduler.
De primære markeringsspråkene er:
- WordprocessingML for tekstbehandling
- SpreadsheetML for regneark
- PresentationML for presentasjoner
Delt markeringsspråkmateriale inkluderer:
- Office Math Markup Language (OMML)
- DrawingML brukt for vektortegning, diagrammer, og for eksempel tekstkunst (tillegg, selv om det er avskrevet, støttes VML for tegning)
- Utvidede egenskaper
- Egendefinerte egenskaper
- Varianttyper
- Egendefinerte XML-datategenskaper
- Bibliografi
I tillegg til de ovennevnte markeringsspråkene, kan egendefinerte XML-skjemaer brukes til å utvide Office Open XML.
Ned i kaninhullet
Patrick Durusau, redaktøren av ODF, har sett på markeringsstilen til OOXML og ODF som representasjon av to sider av en debatt: «element-siden» og «attributt-siden». Han bemerker at OOXML representerer «element-siden av denne tilnærmingen» og peker ut KeepNext-elementet som et eksempel:
<w:pPr>
<w:keepNext/>
…
</w:pPr>
I kontrast bemerker han at ODF ville bruke et enkelt attributt fo:keep-next, i stedet for et element, for samme semantikk.
XML-skjemaet til Office Open XML legger vekt på å redusere lastetid og forbedre parsinghastighet. I en test med applikasjoner gjeldende i april 2007, var XML-baserte kontordokumenter tregere å laste enn binære formater. For å forbedre ytelsen bruker Office Open XML veldig korte elementnavn for vanlige elementer, og regneark lagrer datoer som indeksnumre (startende fra 1900 eller fra 1904). For å være systematisk og generisk, bruker Office Open XML typisk separate barneelementer for data og metadata (elementnavn som slutter på Pr for egenskaper) i stedet for å bruke flere attributter, noe som tillater strukturerte egenskaper. Office Open XML bruker ikke blandet innhold, men bruker elementer for å sette en serie tekstkjøringer (elementnavn r
) inn i avsnitt (elementnavn p). Resultatet er kortfattet og sterkt nøstet i kontrast til HTML, for eksempel, som er ganske flatt, designet for mennesker å skrive i tekstredigerere og er mer hyggelig for mennesker å lese.
Navngivningen av elementer og attributter i teksten har trukket noe kritikk. Det er tre forskjellige syntakser i OOXML (ECMA-376) for å spesifisere fargen og justeringen av tekst avhengig av om dokumentet er en tekst, regneark eller presentasjon. Rob Weir (en IBM-ansatt og medleder av OASIS OpenDocument Format TC) spør «Hva er den tekniske begrunnelsen for denne skrekken?». Han kontrasterer med OpenDocument: "«ODF bruker W3C's XSL-FO vokabular for tekststil, og bruker dette vokabularet konsekvent».
Noen har argumentert for at designet er basert for nært på Microsoft-applikasjoner. I august 2007 publiserte Linux Foundation et blogginnlegg som oppfordret ISO nasjonale organer til å stemme «Nei, med kommentarer» under internasjonal standardisering av OOXML. Det sa,
«OOXML er en direkte port av en enkelt leverandørs binære
dokumentformater. Den unngår gjenbruk av relevante eksisterende
internasjonale standarder (f.eks. flere kryptografiske algoritmer,
VML, etc.). Det er bokstavelig talt hundrevis av tekniske feil som bør
adresseres før standardisering av OOXML inkludert fortsatt bruk av
binær kode knyttet til plattformspesifikke funksjoner, formidling av
feil i MS-Office til standarden, proprietære enheter, referanser til
proprietære/konfidensielle tagger, uklare IP- og patenrettigheter, og
mye mer».
Versjonen av standarden som ble sendt til JTC 1 var 6546 sider lang. Behovet og hensiktsmessigheten av en slik lengde har blitt stilt spørsmål ved. Google uttalte at "ODF-standarden, som oppnår det samme målet, er bare 867 sider".
Uansett, det er mye å dykke ned i rundt OOXML. Det finnes også flere programvarer som kan validere om noe er OOXML, blant annet er det en plug-in til vscode, eller denne .NET CLI-pakken fra samme utvikler.