viernes, 13 de julio de 2007

El formato Open XML de Microsoft Office

Yo utilizo Word, Excel y PowerPoint con enorme frecuencia – tal vez como quienes lean esto - y me toca estar en presencia de un cambio significativo en herramientas de trabajo cotidiano. Estoy empeñado en colaborar con este cambio llamado Open XML.

Imperceptiblemente, gradualmente esos archivos de Microsoft Office se guardarán de un nuevo modo y detrás de ese cambio está el hecho de que la información que voy incorporando a los mismos es verdaderamente procesable, analizable, transferible con o sin la estética que he utilizado para presentarla.

El conflicto entre datos y formato disminuye cada vez más. Nuestras horas de trabajo pueden quedar expuestas o ser aprovechadas de otra manera.

A eso yo llamo cambio.

      
1. La información quedará “desprendible” del formato que adopta

       2. Mi información queda disponible para ser reprocesada eficientemente

       3. El cambio comprende a todos los documentos Word, Excel y PowerPoint producidos desde el cambio de siglo y más aún.

Lo primero que cambia es el modelo informativo de los documentos.

Un archivo de Excel 2003 (extensión xls), por ejemplo, era una caja fuerte binaria dependiente de Excel. El archivo era prácticamente imposible de manipular fuera de Office.

Eso era natural. ¿Sí? ¿Por qué debería ser de otra manera?

Porque la tecnología de la información está cambiando todo el tiempo. Porque ese paquete no sirve para el cable, que es el lugar en el que está la información que importa.

No sirve porque guarda la información de una manera ininteligible para un adecuado proceso automático y no sirve porque es propietaria, demasiado propietaria para la cantidad de información que se acumula en los escritorios de todo el planeta en forma de presentaciones, documentos de texto y hojas de cálculo.

Microsoft abrió el juego, el formato de estos documentos dejó de ser propietario, es ahora un estándar abierto y su uso es gratuito.

Ante este cambio se me ofrecen 2 puntos de vista diferentes:

       1. El punto de vista del desarrollo: cómo se crea, se analiza o se modifica un archivo Word, Excel o PowerPoint a partir de Open XML sin utilizar Office, sin licencia de Office, sin VBA, sin nada más que nuestra plataforma habitual de desarrollo.

       2. El punto de vista del significado: de qué sirve y por qué es importante.

El primer punto de vista, el del desarrollo, el punto de vista técnico, de grano fino no es impactante porque - justamente - se trata de utilizar nuestras herramientas habituales de programación.

Para los programadores .Net voy a mostrar un poco de Packaging, el namespace de .Net destinado a Open XML.

Voy a guardar una copia de este mismo documento que están leyendo en el escritorio de otra máquina: un Windows Server 2003 que no tiene Office en ninguna de sus versiones.

Windows no reconocerá el formato de archivo (.docx en este caso) ya que Office no está instalado.

¡Vamos a renombrar el archivo con extensión .zip para poder abrirlo!

Lo descomprimimos aprovechando el cambio de extensión. Y ¿qué vemos? Una carpeta de Windows con subcarpetas y archivos.

¡En realidad el archivo es una carpeta comprimida que contiene carpetas y archivos (mayormente XML aunque hay algunos binarios como las imágenes y los proyectos VBA)!

¿Entienden ahora lo de OPEN?

· Una carpeta _rels contiene información de relaciones entre partes del documento (en qué lugar se inserta una imagen, por ejemplo)

· docProps trae información básica del documento en archivos XML

· Word (según podemos ver en la ilustración 3) trae la información que esperamos encontrar

o Estilos

o Fuentes

o El contenido del documento

o Etc.

Esa información que estamos observando aquí es accesible, obviamente, por vía de programación.

No podría ser de otro modo: son documentos XML dentro de un archivo ZIP.

Hagamos un rápido paso a paso utilizando .Net.

Creamos una aplicación de consola y agregamos una referencia a WindowsBase para poder importar System.IO.Packaging.

Abrimos el archivo:

C#

private Package ObtenerPaquete(string NombreArchivo, FileAccess TipoAcceso)

{

Package paquete;

try

{

paquete = Package.Open(NombreArchivo, FileMode.Open, TipoAcceso);

}

catch (IOException ex)

{

//Manejar excepciones aquí…..

throw;

}

return paquete;

}

VB

Private Function ObtenerPaquete(ByVal NombreArchivo As String, ByVal TipoAcceso As FileAccess) As Package

Dim paquete As Package

Try

paquete = Package.Open( _

NombreArchivo, FileMode.Open, TipoAcceso)

Catch ex As IOException

‘Manejar excepciones aquí…..

End Try

Return paquete

End Function

Obtenemos un XmlDocument de un archivo XML dentro del paquete:

C#

private static System.Xml.XmlDocument PartToXMLDocument(PackagePart parte)

{

System.Xml.XmlDocument doc=new XmlDocument();

doc.Load(parte.GetStream());

return doc;

}

VB

Private Shared Function PartToXMLDocument(ByVal parte As PackagePart) As System.Xml.XmlDocument

Dim doc As System.Xml.XmlDocument = New XmlDocument()

doc.Load(parte.GetStream())

Return doc

End Function

Localizamos el archivo (la parte) deseado dentro del paquete:

C#

private static System.Xml.XmlDocument doc(Package paquete)

{

foreach (PackagePart var in paquete.GetParts())

{

if(var.Uri.OriginalString==@"/word/document.xml")

{

return PartToXMLDocument(var);

}

}

return null;

}

VB


Private Shared Function doc(ByVal paquete As Package) As System.Xml.XmlDocument

For Each var As PackagePart In paquete.GetParts()

If var.Uri.OriginalString = "/word/document.xml" Then

Return PartToXMLDocument(var)

End If

Next

Return Nothing

End Function

Integrando todo, este código nos muestra todo el texto escrito en el documento en una ventana de consola:

static void Main(string[] args)

{

Package paquete = ObtenerPaquete(@"F:\Deploy\Office 2007 Open XML.docx", FileAccess.ReadWrite);

System.Xml.XmlDocument Texto = doc(paquete);///

XmlNameTable nt = new NameTable();

XmlNamespaceManager nsMgr = new XmlNamespaceManager(nt);

nsMgr.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");

foreach (System.Xml.XmlNode var in Texto.SelectNodes("w:document/w:body/w:p/w:r/w:t",nsMgr))

{

Console.WriteLine(var.InnerXml);

}

Console.Read();

}

Como vemos en el código fuente nunca utilizamos Office sino algunas utilidades específicas de .Net alrededor de la compresión Zip para obtener el paquete y de XML para analizar contenidos.

Antes era binario y necesitábamos Word para editar Word, Excel para editar Excel. Ahora que es Zip + XML lo abrimos con múltiples herramientas al alcance de cualquiera.

Obviamente un proceso ZIP/XML como este no excluye casi ninguna plataforma actual de desarrollo, podemos procesar esta información con variadísimas herramientas de desarrollo en cualquier sistema operativo sin - obviamente - disponer de Office.

Tienes la opción de buscar el código escrito ya en http://openxmldeveloper.org en donde hoy puedo ver – a modo de ejemplo - código para crear una hoja de cálculo Excel en PHP, la noticia de que Altova XML Spy soporta edición directa de Open XML y de que Novell soporta el formato en Open Office, creación de documentos Office en un servidor Windows que no tiene Office instalado (usando sólo código .Net), conversiones de Excel a HTML o XBRL, código fuente Java, generación dinámica de documentos Office obtenibles como servicio, etc.

Lo difícil es lo fácil: cualquier buen programador con experiencia en XML puede corroborar lo que digo. Trabajar la tecnología es de una complejidad no más que media.

¿Es una jugada fuerte no?

Antes los documentos eran ininteligibles y ahora son transparentes como peceras.


El jueves pasado en la subsidiaria de Microsoft en Buenos Aires presenté una charla sobre Open XML.


Creo que llegué a algo cuando dije que – en Open XML - "lo fácil es lo difícil y lo difícil es lo fácil".

Lo difícil no es codificar sino entender el nuevo paradigma de “documentos transparentes”.

No vayan por el lado de la seguridad en este momento por favor: claro que podemos firmar, encriptar, proteger, asegurar, etc. Claro que sí.

También la seguridad de macros queda controlada de una manera mucho más drástica. Hay extensiones de archivos Office que no van a ejecutar macros de ningún modo, ni siquiera las firmadas. Esos documentos enviados por email serán tan seguros como un archivo de texto plano.

Todo lo contrario: los nuevos archivos son más seguros y más pequeños. La iniciativa incluye la conversión necesaria (de uso libre) para trabajar con Open XML desde Office 2000 en adelante como formato normal y reemplazar en el uso cotidiano el formato anterior por el nuevo.

Es todo ganancia. Todo, sin duda. Quienes trabajen en versiones anteriores de Office podrán guardar sus documentos y leer/escribir los nuevos sin otro sacrificio que instalar un liviano plug-in gratuito descargable desde http://www.microsoft.com/downloads/details.aspx?FamilyId=941b3470-3ae9-4aee-8f43-c6bb74cd1466&displaylang=es .

La apertura de los archivos va más allá aún. Como los documentos Open XML son de esquema abierto podemos agregar información XML que Office no entienda simplemente porque queremos que este allí como metadata, como información sobre la información.

Un recurso poderoso si deseamos que estos documentos formen parte de desarrollos que manejen librerías o flujos o lo que la necesidad dicte.

Por ejemplo un documento que genera un alta de operación podría ir acompañado de información precisa firmada digitalmente e incluida en el documento como una “parte” más.

¿Cómo haríamos esto de otro modo? Nunca con esta limpieza y claridad.

Otro concepto importante es lo que yo denomino el “rompecabezas”.

Hay una decisión de diseño en el formato de Office 2007 distinta a las versiones XML anteriores.

En aquellos casos los documentos consistían de un solo documento XML, lo cual traía consecuencias no deseadas como por ejemplo la incrustación de las imágenes como binarios codificados, la dificultad para incluir otras características (este es el primer formato XML de Office que soporta totalmente todo lo que Office proporciona y – más aún - es el formato por defecto en Office 2007; las versiones XML anteriores tenían límites y no soportaban algunas características de Office como escenarios, VBA, etc.) y el crecimiento del tamaño de archivo.

La solución Open XML de 1 sólo archivo apunta a 2 características sustanciales:

1. A que no cambie la experiencia del usuario no avanzado

2. A la modularidad (el “rompecabezas”)

Esta modularidad define archivos específicos para características precisas (hojas de cálculo, imágenes, texto del documento, cadenas de texto reutilizables, fuentes, estilos) dentro de carpetas de archivos y un esquema de relaciones que pone todo junto.

Todo especificadito (Open Packaging Conventions) y claro.

Si – por ejemplo - quiero cambiar una imagen en un documento Word abro el paquete y cambio el archivo específico de esa imagen (GIF/PNG/JPG, etc.) o si deseo cambiar los datos de un gráfico Excel voy a la hoja de cálculo (hay un documento XML específico para cada hoja de cálculo) que los contiene y así sucesivamente.

Si deseo generar documentos en Runtime puedo “juntar” información de diferentes orígenes a la hora de componer el archivo (una imagen en el disco + una consulta a una base de datos + archivos específicos de estilos y formato).

Si deseo quitar los comentarios de un documento, o extraer sólo determinadas cosas adopto la política de usar sólo lo necesario sin inconvenientes.

¡Si deseo que los documentos Word, Excel o PowerPoint sean servicios SOA que compongo a pedido puedo hacerlo!

La plataforma Open XML es un estándar abierto con acuerdo explícito de uso libre (Covenant not to sue). Es útil navegar a http://www.openxmlcommunity.org/ y observar esta característica en detalle:

   ü Descargar la especificación ECMA completa

   ü Estado del proceso ISO

   ü Beneficios de la plataforma

   ü La necesidad de múltiples estándares (avalada por el acuerdo con Novell para soporte de estos estándares y por la disponibilidad de conversores para las aplicaciones Linux de oficina)

   ü No dejen – si son desarrolladores - de seguir este vinculo: http://openxmldeveloper.org/default.aspx

Open XML es – de hecho - un nuevo protocolo que se agrega a la estrategia de programar la Web iniciada con la utilización del estándar XML.

¿Donde está mayormente la información útil hoy?

Está viajando, está en el cable, con frecuencia multiplicada y replicada.

Ese es el mundo de hoy.

¿Cuánto vale la información acumulada de un estudio contable?

Si un contador quiere poner información disponible para ser transformada en XBRL, si un docente toma un examen utilizando Word, si tengo cualquier tipo de información almacenada y definida con claridad…

¿Copio y pego, imprimo, tomo nota?

Eso era antes.

domingo, 3 de junio de 2007

Sólo se trata de las personas I

Sólo se trata de las personas

Memorias de un miembro de Grupos de Usuarios

El Club de Microsoft

Creo que voy a iniciar esta historia en algún momento del año 1994 cuando en una revista de “computación” - una palabra casi irrelevante – apareció un aviso que invitaba a formar parte del “Club de Microsoft”: una asociación que prometía brindar un ámbito de información a un costo relativamente bajo (U$S 20).

Se prometían eventos de tecnología con disertantes especializados, descuentos en software y algunas cosas más que francamente no recuerdo.

La persona aquí era, esta vez, Carlos “Billy” Reinoso (aún hoy un eminente en temas de arquitectura de Software y en aquélla época Senior Advisor de Microsoft).

Podría dedicarle este Blog a Billy, alguien con quien tuve poca relación en realidad pero espectacularmente brillante y con una conversación con un nivel de información e interés pasmoso. Tal vez la persona más brillante que conocí en estos años.

También la experiencia del Grupos de Usuarios tiene que ver con personas a las cuales admirar o de las cuales aprender, mucho de lo que he tratado de hacer en todos estos años es parecerme a personas como Billy.

Algo bueno de lo relativo a communities es la posibilidad de que estos "bichos" aparezcan juntos en un mismo lugar.

Me acerqué a la Editorial MP Ediciones (la cual había publicado el aviso y formaba parte de la iniciativa) y Billy fue lo primero importante que vi, parado al frente del salón, contiguo a la imagen del proyector, hablando de ¡Lo nuevo en Access 2.0! :) .

Sentí que no estaba solo y que esas decenas de personas en la oscuridad del auditorio interesadas en aquéllos temas que me interesaban a mí habían pasado en unos minutos a ser casi amigos míos.

Definitivamente me encantó y me asocié.

Había salido de la soledad informática y el “club” era muy parecido a lo que había vivido como miembro de Fotoclubes (amantes de la fotografía).

Internet era una palabra desconocida para el gran público, eso vendría poco después.

En esa época existían los BBS (había uno muy bueno creado por Daniel Seara - otra persona clave de la galería - y alguien más cuyo nombre era Diego, creo) y no se comparaban de ningún modo a lo que hoy podríamos llamar “tecnología on-line” pero eran definitivamente precursores.

En aquélla época reinaba el D.O.S. y una de las discusiones era (sic) “¿Conviene pasar nuestras aplicaciones a Windows?”.

En ese momento comencé a vivir un fenómeno clave para mí de los Grupos de Usuarios: faltar a una reunión era perderse algo para siempre.

Nos conocíamos y reconocíamos entre nosotros, aprendíamos, nos reíamos y discutíamos de las cosas que “seguramente” sólo a nosotros nos interesaban.

Otra cosa interesante era el acercamiento a la posibilidad de licenciar el software: la primera vez que fui estaba inquieto acerca del tema licencias (yo tenía una licencia de Office pero tan sólo una copia sin licencia de Visual Basic 3, herramienta que me interesaba especialmente).

De la primera reunión salí corriendo a conseguir mi copia (con 3 manuales, guau) de Visual Basic 3 a sólo U$S 120.

En ningún lugar estaba tan bien explicado el acceso a datos en VB3 como en el manual de Data Access que venía en la caja.

Recomienzo

Ayer vi la película “Bobby”, la cual disfruté de principio a fin.

Me impactó en varios aspectos lo suficiente como para despertar mi necesidad de volver a bloguear.

En principio la calidad y cantidad de los actores es demoledora (amo a Sharon Stone, sí), el tema es mucho más universal que lo que pudiera parecer (aparece como sumamente norteamericano pero aquí en Argentina sufrimos tanto o más que allí la falta de ideales y de calidad de nuestra clase dirigente, la violencia como estrategia, el racismo y otras bellezas que terminan por arruinarnos).

Recordé mi experiencia con los Grupos de Usuarios de Microsoft y en qué medida demostramos ciertas carencias hagamos lo que hagamos a la hora de manifestarnos como un conjunto.

Y finalmente siempre termino en el mismo punto y en el mismo valor: las personas.

Por eso es que voy a empezar hoy con una serie de notas que voy a titular “Solamente se trata de las personas” y a subtitular, más específicamente, “Memorias de un miembro de Grupos de Usuarios”.

martes, 13 de febrero de 2007

Primera Entrada

Bien, no estoy dispuesto a pensar demasiado en lo que voy a escribir.
Mi idea es escribir combinadamente de diferentes temas que son de mi interés: tecnología .Net, negocios en Internet, cine, algunas reflexiones…
En este momento no quiero dejar de señalar el informe que prevee un crecimiento de hasta 60 cm en el nivel de las aguas del planeta en el próximo siglo.
Este año espero cumplir con el deseo de hacer cosas diferentes.
Ya ha salido mi nota para ASP Today en http://www.asptoday.com/Content.aspx?id=2444 con un poco de atraso.
Realmente estoy muy interesado en el cuerpo tecnológico que está generando Microsoft alrededor de Office.
Estaré preparando una nota para Technet sobre Open XML próximamente.
Mañana estaremos presentando a un nuevo grupo de gente la iniciativa MVTech’s que hemos generado conjuntamente con Esteban Fabiani.
Tendremos un invitado de lujo junto a nosotros dos y a Isaac Rubinstein de Consulta Group.
Finalmente luego de tanto tiempo estoy oficializando mi separación definitiva del Microsoft Users Group de Argentina.
Han sido 12 años y he pasado por todos los estadios, me siento orgulloso de lo que he podido hacer y nada nostálgico, por el contrario, es algo finalizado para lo cual ya no tengo entusiasmo desde hace un tiempo.
Ni la tecnología ni la participación han ido por los caminos que yo esperaba, creo que ya vendrá otra gente a continuar nuestra tarea. Todo pasa y todo queda.
Estoy a full dentro de Microsoft Sharepoint y espero concretar una gran aplicación utilizando dicha tecnología unida a Windows Workflow Foundation y Windows Communication Foundation.