# Office Open XML

    No debe confundirse con el formato OpenDocument creado y popularizado mucho antes por programas como LibreOffice o Google Docs. Tampoco debe confundirse con OpenOffice.org XML (formato obsoleto usado por versiones anteriores de OpenOffice.org), o Microsoft Office XML (formato de archivo usado por versiones anteriores de Microsoft Office).
Office Open XML (también llamado OOXML u OpenXML) es un formato de archivo abierto y estándar cuyas extensiones más comunes son .docx, .xlsx y .pptx. Se le utiliza para representar y almacenar hojas de cálculo, gráficas, presentaciones y documentos de texto. Un archivo Office Open XML contiene principalmente datos basados en el lenguaje de marcado XML, comprimidos en un contenedor .zip específico.
La especificación fue definida originalmente por Microsoft para reemplazar sus formatos binarios protegidos, además de los rudimentarios formatos de archivo basados en XML de Office 2003 (Microsoft Office XML). Dicha especificación fue luego entregada a Ecma International bajo la supervisión del Comité Técnico TC45 de Ecma International para ser desarrollada como el estándar ECMA-376, proceso que culminó en 2006.
Tras un par de años de trabajo y luego de incorporar algunos de los cambios propuestos por miembros de las organizaciones ISO/IEC, se publicó una versión corregida de la especificación como estándar internacional «ISO/IEC 29500:2008, Information technology – Office Open XML formats», y como «ECMA-376 Office Open XML File Formats - 2a edición». La normativa ISO/IEC 29500 publicada en noviembre de 2008, consta de 4 partes que pueden ser descargadas libremente para su consulta. Esta aprobación fue realizada por la vía rápida, sin seguir el procedimiento normal que sí tuvo que seguir el formato ODF (OpenDocument Format).
Este formato es criticado por desarrolladores de suites que han querido añadir compatibilidad con OOXML. El estándar presenta dificultades técnicas para su implementación imposibilitando la creación de implementaciones alternativas a la de Microsoft, que no es abierta ni tampoco está documentada. También crea incompatibilidades (pérdida de información) al usarlo para intercambiar información entre distintas versiones de Microsoft Office.

## Antecedentes y proceso de estandarización

Antes de la versión 2007, las aplicaciones principales de la suite de programas Microsoft Office (primariamente Word, Excel y PowerPoint) almacenaban sus datos de manera predeterminada en archivos binarios. Históricamente, era difícil para otras aplicaciones interoperar con éstos, debido a la carencia de información disponible públicamente. Para el año 2007, Microsoft ofreció las especificaciones para estos formatos binarios bajo una licencia libre de derechos y desde ese año, la documentación de uso de estos formatos es descargable desde su sitio web bajo un acuerdo de licencia Microsoft Open Specification Promise. Debido a que Microsoft mantenía en secreto los formatos de archivo mencionados anteriormente, otros productores de programas ofimáticos tenían grandes dificultades en alcanzar una total interoperabilidad. Microsoft fue blanco de presiones para adoptar un formato de archivo abierto, ya que muchas naciones en particular adoptaron reglamentos que exigían que sus documentos oficiales debían encontrarse disponibles en formatos abiertos.
En el año 2000, Microsoft publicó una versión inicial de un formato basado en XML para Microsoft Excel y que luego fue incorporado a Office XP. En el 2002 le siguió un formato similar para Microsoft Word. Estos formatos de Word y Excel – conocidos como formatos Microsoft Office XML – serían incluidos en la versión 2003 de Microsoft Office.
Para mayo de 2004, algunos gobiernos además de la Unión Europea, hicieron la recomendación a Microsoft para que publicara y estandarizara sus formatos XML de Office a través de una organización especializada en esos procesos. Microsoft anunció en noviembre de 2005 que iba a hacerlo con una nueva versión de sus formatos basados en XML mediante la intervención de Ecma International y que serían anunciados como "Ecma Office Open XML". El estándar fue publicado como ECMA-376 y lanzado en diciembre de 2006. La documentación puede ser descargada para su consulta desde el sitio web de Ecma International.
Una versión corregida del formato recibió los votos necesarios para aprobarse como estándar ISO/IEC luego de un proceso de estandarización rápido realizado por el JTC 1 y que concluyó en abril de 2008.

## Versiones del estándar

La especificación Office Open XML existe en un número determinado de versiones.

### ECMA-376 1a edición (2006)

El estándar ECMA está estructurado en cinco partes para lograr los requerimientos de distintas audiencias.

#### Parte 1. Fundamentos

    Vocabulario, convenciones de notación y abreviaturas
    Resumen de los lenguajes de marcado principales y de soporte
    Condiciones de adhesión y guías de interoperatividad
    Restricciones del formato de empaquetado OPC que aplican a cada tipo de documento

#### Parte 2. Open Packaging Conventions

    Define el formato Open Packaging Conventions (OPC), su modelo del paquete y empaquetado físico en las diversas aplicaciones que lo utilicen
    Define las propiedades principales, miniaturas, firmas digitales, autorizaciones de acceso y cifrado
    Los esquemas XML para OPC se declaran como XML Schema Definitions (XSD) y (no incluido en la normativa) utilizando RELAX NG (ISO/IEC 19757-2)

#### Parte 3. Cartilla

    Introducción informativa (no normativa) a WordprocessingML, SpreadsheetML, PresentationML, DrawingML, VML y otros ML compartidos, proporcionando un contexto e ilustrando elementos a través de ejemplos y diagramas
    Describe la institución de almacenamiento para los datos XML personalizados dentro de un contenedor, para soportar la integración con datos de negocios

#### Parte 4. Referencia del lenguaje de marcado

    Contiene el material de referencia para WordprocessingML, SpreadsheetML, PresentationML, DrawingML, otros ML compartidos y esquemas XML personalizados, definiendo cada elemento y atributo e incluyendo la jerarquía del elemento (relaciones de parentesco)
    Esquemas XML para los lenguajes de marcado, declarados como XSD y (no incluido en la normativa) utilizando RELAX NG
    Define el mecanismo de almacenamiento para XML personalizado

#### Parte 5. Compatibilidad de marcado y extensibilidad

    Describe los mecanismos de extensión de los documentos OpenXML y especifica los elementos o atributos por medio de los cuales las aplicaciones con extensiones distintas pueden interoperar.

### ISO/IEC 29500:2008

El estándar ISO/IEC está estructurado en cuatro partes, siendo cada una de ellas estándares independientes.

#### Parte 1. Fundamentos y referencia del lenguaje de marcado (5560 páginas)

    Contiene definiciones de conformación
    Contiene el material de referencia para WordprocessingML, SpreadsheetML, PresentationML, DrawingML, otros ML compartidos y esquemas XML personalizados, definiendo cada elemento y atributo e incluyendo la jerarquía del elemento (relaciones de parentesco)
    Esquemas XML para los lenguajes de marcado, declarados como XSD y (no incluido en la normativa) utilizando RELAX NG
    Define la institución de almacenamiento para los datos XML personalizados
    Se incluyen los esquemas XML en el texto

#### Parte 2. Open Packaging Conventions (129 páginas)

    Define el formato Open Packaging Conventions (modelo del paquete, empaquetado físico)
    Define las propiedades principales, miniaturas y firmas digitales
    Los esquemas XML para OPC son declarados como XML Schema Definitions (XSD) y (no incluido en la normativa) utilizando RELAX NG (ISO/IEC 19757-2)

#### Parte 3. Compatibilidad de marcado y extensibilidad (40 páginas)

    Describe los mecanismos de extensión de los documentos OpenXML y especifica los elementos o atributos por medio de los cuales, las aplicaciones con extensiones distintas pueden interoperar
    Las reglas de extensibilidad son expresadas utilizando NVDL (ISO/IEC 19757-4)

#### Parte 4. Características de migración transicionales (1464 páginas)

    Contiene material de referencia de interés transicional
    Contiene material controvertido como la configuración de compatibilidad y el lenguaje de marcado gráfico VML
    Contiene una lista de diferencias entre ECMA-376 e ISO/IEC 29500:2008
El estándar especifica un total seis niveles de tolerancia del documento o aplicación. Niveles strict (estricto) y transitional (de transición) para cada lenguaje (WordprocessingML, PresentationML y SpreadsheetML). El estándar también especifica las descripciones de aplicaciones tales como base y full (completo).

## Compatibilidad

A día de hoy Microsoft Office sigue sin soportar el formato OOXML establecido por el estándar ISO/IEC 29500 por defecto. Aunque aparentemente se puede seleccionar manualmente que guarde los documentos en dicho formato a partir de Microsoft Office 2013, la configuración de Microsoft Office provoca incompatibilidades e imposibilidad de intercambiar documentos en OOXML de forma ágil. Hay múltiples versiones distintas del estándar (ECMA, ISO, por cada versión de Microsoft Office), pudiéndose implementar en teoría solamente una versión (la «Strict») por agentes externos a Microsoft. En la práctica, la versión «Strict» del estándar sin extensiones no la utiliza nadie ya que Microsoft usa su implementación con extensiones propias. Esto es problemático puesto que la implementación «Strict» de Microsoft y sus extensiones no están documentadas, no son abiertas, se pueden cambiar sin previo aviso y tienen el potencial de crecer en número indefinidamente. La especificación «Markup Compatibility and Extensibility» (MCE, partes 5 y 3 del estándar ECMA e ISO, respectivamente) permite respetar el estándar, incluido el «Strict» aunque se introduzcan etiquetas adicionales, sean propietarias o no. Las extensiones de Microsoft son propietarias. La forma de ser compatible con las extensiones si no son soportadas por el programa consiste en ignorar esos contenidos o degradarlos, ocasionando pérdida de información. Se puede interpretar como un caso de Adoptar, Extender y Extinguir, presentando una filosofía cuyo objetivo es operar sólo con entornos Microsoft sin tener en cuenta el resto de suites ofimáticas.

## Aplicaciones que soportan el formato

Comenzando con Microsoft Office 2007, los formatos de archivo Office Open XML (ECMA-376) son el formato predeterminado para guardar documentos de Microsoft Office. Aunque se dijo en un principio, la versión 2010 no implementa el formato compatible con ISO de Office Open XML (ISO 29500) y por ende, se incluye sólo una variante de transición del estándar, la ECMA. Declaraciones hechas por Doug Mahugh, profesional del equipo de interoperabilidad de Microsoft, indican que el soporte a su formato «estricto» del estándar estará disponible en una futura versión 15 de la suite ofimática de la empresa, y probablemente se añada soporte a Microsoft Office 2010 mediante un plug-in o Service Pack.
La suite Office 2010 de SoftMaker indica que puede leer y escribir archivos .DOCX y .XLSX en sus aplicaciones de procesador de textos y hoja de cálculo.
La suite OpenOffice.org puede importar archivos Office Open XML (.docx, .xlsx, .pptx, etc.) desde su versión 3.
La suite LibreOffice puede importar archivos Office Open XML (.docx, .xlsx, .pptx, etc.) desde su versión 3.3.
Otros productos ofimáticos que han comenzado a soportar el formato son TextEdit de Apple (incluido en Mac OS X) e iWork, IBM Lotus Notes, Corel Wordperfect y Google docs.
Restricciones al soporte de funcionalidad o compatibilidad son aplicables en función del archivo OOXML.

## Características técnicas del formato

El formato Office Open XML utiliza un contenedor basado en Open Packaging Conventions. Este formato utiliza mecanismos heredados del formato de compresión ZIP y contiene los archivos individuales que forman la base del documento. Además de lenguaje de marcado, el contenedor también puede integrar otros archivos como imágenes, vídeos u otros documentos.

### Lenguajes de marcado

Un archivo Office Open XML puede contener muchos documentos codificados en lenguajes de marcado especializados, correspondientes a diversas aplicaciones dentro de la línea de productos de Microsoft Office. El formato Office Open XML define vocabularios múltiples utilizando para ello módulos de 27 espacios de nombres y 89 lenguajes de esquema.
Los lenguajes de marcado principales son:
* WordprocessingML para documentos de texto
* SpreadsheetML para hojas de cálculo
* PresentationML para presentaciones
Algunos materiales compartidos con los lenguajes de marcado incluyen:
* Lenguaje de marcado Office Math (OMML)
* DrawingML, utilizado para dibujar vectores, gráficos, y text art (además, aunque no aprobado, VML se soporta como lenguaje de dibujo)
* Propiedades extendidas
* Propiedades personalizadas
* Tipos variables
* Propiedades de datos XML personalizadas
* Bibliografía
Además de los lenguajes de marcado mencionados, se pueden usar esquemas XML personalizados para extender aún más Office Open XML.
El esquema XML de Office Open XML enfatiza el reducir el tiempo de carga y mejorar la velocidad de análisis sintáctico. Para mejorar el rendimiento, Office Open XML utiliza nombres de elementos muy cortos para aquellos elementos comunes y las hojas de cálculo guardan datos como números de índice (comenzando la numeración desde 1899 o desde 1904). Para lograr ser sistemático y genérico, Office Open XML usa típicamente elementos derivados separados para datos y metadatos (nombres de elementos que terminan en Pr para propiedades) en lugar de usar atributos múltiples que permitan propiedades estructuradas. Office Open XML no utiliza contenido mixto, pero utiliza algunos elementos para colocar series de text runs (nombre de elemento, r) en párrafos (nombre de elemento, p). En contraste, el resultado es conciso y altamente jerarquizado al compararse, por ejemplo con HTML que es bastante plano, ya que fue diseñado para escribir en editores de texto siendo a la vez más agradable de leer.

#### Office MathML (OMML)

El lenguaje de marcado Office Math es un lenguaje de marcado matemático el cual puede integrarse dentro de WordprocessingML, y que incluye soporte intrínseco para otros lenguajes de marcado de procesamiento de palabras como marcas de revisión, notas al pie, comentarios, imágenes y otros estilos de contenido. El formato OMML es distinto a la recomendación del World Wide Web Consortium (W3C), MathML, el cual, aunque no soporta esas características ofimáticas es parcialmente compatible a través de transformaciones XSL relativamente simples.
El siguiente ejemplo de Office MathML define la fracción: ${\frac {\pi }{2}}$

#### DrawingML

DrawingML es el lenguaje de marcado para gráficos vectoriales utilizado en documentos Office Open XML. Sus papel principal es renderizar los gráficos de elementos de texto, formas gráficas basadas en vectores, tablas y diagramas.
DrawingML es el tercer modelo de tablas en Office Open XML (luego de los modelos de tablas en WordprocessingML y SpreadsheetML) y está optimizado para efectos gráficos como sombras y reflejos que pueden ser utilizadas en diferentes elementos gráficos. Fue creado para un uso principal por parte del lenguaje PresentationML. Es posible crear efectos 3d en DrawingML para por ejemplo, mostrar diversos elementos gráficos mediante un ángulo de visión flexible. También es posible crear temas de diseño separados mediante DrawingML en un contenedor Office Open XML. Estos temas pueden ser aplicados a elementos gráficos a través de todo el contenido dentro del contenedor Office Open XML.
El lenguaje DrawingML no está relacionado con otros formatos de gráficos vectoriales como SVG, aunque pueden ser convertidos a DrawingML para incluirse nativamente en un documento Office Open XML. Esta es una aproximación distinta a la del formato OpenDocument, el cual utiliza un subconjunto de SVG e incluye los gráficos vectoriales en archivos separados.
Las dimensiones de un gráfico DrawingML están especificadas en Unidades Métricas Inglesas (del inglés English Metric Unit o EMUs). Esta unidad se define como la 1/360.000 parte de un centímetro y por ende, hay 914.400 EMUs en una pulgada y 12.700 EMUs por punto. Se escogió esta unidad con aras de que se pudiesen utilizar números enteros para representar con precisión la mayoría de dimensiones encontradas en un documento. Las operaciones de coma flotante no pueden representar adecuadamente una fracción que no sea resultado de la suma de las potencias de dos y ese error se amplifica cuando las fracciones se suman juntas varias veces resultando en un desajuste. Ya que una pulgada equivale a 2.54 centímetros o 127/50, la pulgada debe ser dividida en 127 para que los valores de pulgada y centímetro se conviertan en enteros. Para representar de manera precisa un decimal en dos dígitos, se necesita un divisor de 100. Para representar un punto, es necesario un divisor de 72, lo cual permite también a divisiones de 2, 3, 4, 6, 8, 9, 12, 18, 24, y 36 ser exactas. Al multiplicar estos valores da como resultado 127×72×100 = 914.400 unidades por pulgada (el mínimo común múltiplo daría valores de 228.600 por pulgada y 90.000 por centímetro). De acuerdo con Rick Jelliffe, programador y activista de estándares (ISO, W3C, IETF), las EMUs son una solución racional para un conjunto de criterios de diseño.

### Estructura del contenedor

Los documentos Office Open XML son almacenados en contenedores Open Packaging Convention (OPC), los cuales son archivos ZIP que guardan XML y otros archivos de datos, junto con las especificaciones de relación entre ellos. Dependiendo del tipo de documento, los contenedores difieren en sus estructuras y nombres de directorios. Una aplicación usará los archivos de relación para localizar secciones individuales (en archivos), cada una con metadatos adjuntos, en particular metadatos MIME.
Un contenedor básico incluye en su raíz un archivo XML denominado [Content_Types].xml, junto con tres directorios: _rels, docProps, y uno específico para el tipo de documento (por ejemplo, en un paquete de texto .docx, habrá un directorio llamado word). El directorio word contendrá un archivo document.xml el cual incluye el texto base del documento.

#### [Content_Types].xml

    Este archivo describe los contenidos globales. También contiene estructuras de mapeo para extensiones de archivos y reemplazos para URIs específicas.

#### _rels

    Estos directorios contienen las relaciones de los archivos dentro del contenedor. Contendrá los mismos nombres de archivo que indican relaciones pero con una extensión .rels añadida. Por ejemplo, si el archivo content types tuviese alguna relación, existirá una archivo de nombre [Content_Types].xml.rels dentro del directorio _rels.

#### _rels/.rel

    En este archivo se localizan las relaciones del contenedor. Las aplicaciones miran aquí primero. En un documento de contenido mínimo que sólo incluya el archivo básico document.xml, las relaciones detalladas son metadatos y document.xml.

#### docProps/core.xml

    Este archivo contiene las propiedades base de cualquier documento Office Open XML.

#### Relaciones
##### Archivos de relación en Office Open XML

A continuación, un ejemplo de archivo de relación (word/_rels/document.xml.rels):
Con ello, las imágenes referenciadas en el documento pueden encontrarse en el archivo de relaciones si se busca por las relaciones que son de tipo http://schemas.microsoft.com/office/2006/relationships/image. Para cambiar la imagen usada, es necesario editar la relación.

##### Relaciones de hipervínculos

El siguiente código muestra un ejemplo de marcado entre líneas para un hipervínculo:
En este ejemplo, el Localizador Uniforme de Recursos (URL) está representado por "rId2". La URL realmente se encuentra en el archivo de relaciones que le acompaña, localizado por su elemento "rId2" correspondiente. Las imágenes, plantillas y otros elementos vinculables son referenciados de la misma manera.

##### Relaciones para archivos de medios integrados o vinculados

Las imágenes pueden ser incorporadas o vinculadas usando una etiqueta:
Esta es la referencia al archivo de imagen. Todas las referencias son administradas mediante relaciones. Por ejemplo, el archivo document.xml se relaciona con la imagen. Hay un directorio _rels en el mismo directorio que document.xml; dentro de _rels hay un archivo llamado document.xml.rels. En ese archivo hay definiciones de relación que contiene tipo, ID y ubicación. La ID es la utilizada como referencia en el documento XML. El tipo será un esquema de definición para los tipos de medios y la ubicación será definida como la localización interna dentro del contenedor ZIP o externa, definida con una URL.

#### Propiedades del documento

Office Open XML utiliza el conjunto de elementos de metadatos Dublin Core y definiciones de metadatos DCMI para almacenar las propiedades del documento. Dublin Core es un estándar para descripción de recursos entre dominios y como tal, está definido en ISO 15836:2003.

##### Metadatos

El siguiente es un ejemplo del archivo de propiedades (docProps/core.xml) que utiliza metadatos Dublin Core: