Introducción al formato de archivo de Visio 2013 (.vsdx)

Office 2013

Obtenga información sobre el nuevo formato de archivo en Visio 2013, explore algunos conceptos de alto nivel para trabajar con el formato de archivo Visio 2013 mediante programación y cree una aplicación de consola sencilla que examina un archivo Visio 2013.

Visio 2013 presenta un nuevo formato de archivo (.vsdx) para Visio que reemplaza el formato de archivo binario de Visio (.vsd) y el formato de archivo XML de dibujo de Visio (.vdx). Dado que el formato de archivo de Visio 2013 se basa en convenciones de empaquetado abierto y XML, los desarrolladores familiarizados con estas tecnologías pueden aprender rápidamente a trabajar con archivos de Visio 2013 mediante programación. Los desarrolladores familiarizados con el formato de archivo de dibujo XML de Visio (.vdx) de versiones anteriores de Visio encontrarán muchas de las mismas estructuras de XML en partes del formato de archivo .vsdx. La interoperatiblidad con los archivos Visio ha mejorado significativamente, ya que el software de terceros puede manipular archivos de Visio en el nivel de formato de archivo. El formato de archivo de Visio 2013 se admite en Servicios de Visio en Microsoft SharePoint Server 2013 sin la necesidad de formato de archivo "intermediario" para la publicación en SharePoint Server.

Existen varios tipos de archivo, por extensión, que componen el formato de archivo de Visio 2013. Entre estas extensiones se incluye lo siguiente:

  • .vsdx (dibujo Visio)

  • .vsdm (dibujo habilitado con macros de Visio)

  • .vssx (galería de símbolos de Visio)

  • .vssm (galería de símbolos habilitada con macros de Visio)

  • .vstx (plantilla de Visio)

  • .vstm (plantilla habilitada con macros de Visio)

Nota Nota

Solo los archivos habilitados con macros (.vsdm, .vssm, .vstm) pueden almacenar macros de VBA. No es posible almacenar macros en archivos con la extensión .vsdx, .vssx ni .vstx.

El formato de archivo de Visio 2013 usa convenciones de empaquetado abierto (OPC), que define una manera estructurada para almacenar los datos de aplicación juntos con los recursos relacionados mediante un contenedor de algún tipo, por ejemplo, un archivo ZIP. En un nivel básico, un archivo de Visio 2013 es, en realidad, un contenedor ZIP que incluye otros tipos de archivo. De hecho, puede guardar un dibujo en Visio 2013 como un archivo .vsdx, cambiar el nombre de la extensión de archivo a "*.zip" en Explorador de Windows y luego abrir el archivo como carpeta para ver su contenido.

Nota Nota

En este artículo se incluye solamente una introducción a las convenciones de empaquetado abierto. Puede encontrar información más detallada sobre las convenciones en otros artículos:

Paquetes y elementos del paquete

Tal como se mencionó anteriormente, los archivos de Visio 2013 son contenedores o "paquetes" ZIP que contienen otros archivos (llamados "elementos del paquete"). Un elemento del paquete puede ser un archivo XML, una imagen o incluso una solución VBA. Los elementos del paquete se pueden dividir aún más en dos categorías amplias, "elementos de documento" y "elementos de relación". Los elementos de documento contienen el contenido y los metadatos reales del archivo de Visio, tales como el nombre del archivo, la primera página y todas las formas que contienen, e incluso las conexiones de datos de las formas. Las imágenes y los archivos de texto del paquete se consideran como elementos de documento. Los elementos de relación se describen en mayor detalle más adelante en este artículo.

Nota Nota

Si abre un archivo de Visio 2013 mediante una utilidad ZIP, probablemente verá varias carpetas incluidas en el interior del paquete ZIP. Incluso puede manipular estas subdirecciones como carpetas mediante una utilidad ZIP. Sin embargo, estas "carpetas" representan subdirecciones dentro del paquete ZIP y no son carpetas reales. No puede usar los equivalentes de carpeta de programación para trabajar con estas subdirecciones en la solución.

Los elementos de paquete, tanto los de documento como los de relación, también tienen tipos de contenido asociado. Estos tipos de contenido son cadenas que definen un tipo de medio MIME. Estos tipos de contenido especifican y establecen el alcance de la clase de tipos MIME que se pueden obtener en el archivo.

Relaciones

Los elementos de relación (que terminan con la extensión "*.rels" y se almacenan en una carpeta "_rels") describen cómo los elementos de un paquete se relacionan entre sí y proporcionan la estructura del archivo. Un documento XML independiente usa la relación principal/secundario de los elementos para determinar la relación de las entidades entre sí. Otros archivos pueden usar otras jerarquías o estructuras de carpeta de archivos para describir la interacción del contenido del archivo. Para el formato de archivo de Visio 2013, el paquete es un archivo de Visio válido si contiene el conjunto correcto de elementos y el paquete contiene las relaciones entre ellos.

Los elementos de relación son documentos XML que describen las relaciones entre los distintos elementos de documento de un paquete. Definen la asociación entre dos elementos: un origen especificado (definido por el nombre y la ubicación del archivo de relación) y un elemento de documento de destino especificado. Por ejemplo, los elementos de relación se usan para describir los maestros de forma que están asociados con el archivo, el modo en que las páginas se relacionan con el archivo y entre sí o el modo en que las imágenes y los objetos se relacionan con una página concreta.

Similitudes y diferencias con el esquema VDX de Visio

Tal como se mencionó, las versiones anteriores de Visio también incluían un formato de archivo basado en XML, el formato de dibujo XML de Visio o .vdx. (En versiones anteriores de Visio, el esquema que se usa para el formato de dibujo XML de Visio XML se llama DatadiagramML). Algunos elementos del esquema XML de Visio no han cambiado entre los dos formatos de archivo. Por ejemplo, el elemento Windows y sus elementos secundarios no han cambiado, con la excepción de que el elemento de Windows ahora es un elemento raíz de un documento XML (window.xml).

La principal diferencia entre el formato de dibujo XML y el formato de archivo de Visio 2013 es el empaquetado. Un archivo de formato de dibujo XML se podría manipular como XML normal independiente; el archivo de formato de Visio 2013 se debe manipular como paquete. En Visio 2013, el XML se ha dividido en elementos para facilitar su consumo. Otro cambio notable es que el formato de archivo de Visio 2013 almacena toda las propiedades del documento en elementos de documento descritos por el estándar OPC (app.xml, core.xml, custom.xml).

No obstante, hay un cambio importante que todos los desarrolladores de Visio deben tener en cuenta: la introducción de los elementos Cell, Row y Section. En el esquema de formato de archivo de dibujo XML, las filas y celdas individuales de la hoja de formas ShapeSheet se presentan mediante elementos con nombre. Por ejemplo, imagine que tiene un documento con una sola página que contiene una forma con un valor de PinX de "2" (lo que significa que el pin de rotación de la forma se encuentra a 2 pulgadas desde el borde izquierdo del dibujo). El marcado pertinente de esa configuración en el formato de archivo de dibujo XML se muestra en el código siguiente.


<Shape ID=”1” TextStyle=”3” FillStyle=”3” LineStyle=”3” Type=”Shape”>
    <XForm> 
        <PinX Unit=”IN”>2</Pinx>
        <!--- Other cells in the Shape Transform section -->
    </XForm>
    <!--- Other rows and cells in the ShapeSheet -->
</Shape>

Aquí, el elemento PinX es un elemento secundario del elemento XForm, que es, a su vez, un elemento secundario del elemento Shape. Esto modela la UI de ShapeSheet de Visio, donde la celda PinX se incluye en la sección Shape Transform de una forma.

En el formato de archivo de Visio 2013, todas las celdas de la ShapeSheet (PinX, LinePattern, una celda X de una fila MoveTo en la sección Geometría) se representan mediante un tipo de elemento XML, el elemento Cell. Los distintos elementos Cell se hacen individuales entre sí mediante el valor de su atributo N. Por lo tanto, en el ejemplo anterior, los datos incluidos en la celda PinX de la ShapeSheet se almacenan en un archivo VSDX, tal como se indica en el código siguiente.


<Shape TextStyle=”3” FillStyle=”3” LineStyle=”3” Type=”Shape” ID=”1”>
    <Cell N=”PinX” U=”IN” V=”2”/>
    <!--- Other cells in the ShapeSheet --> 
</Shape>

El elemento Cell de PinX (así como otras celdas individuales con nombre, llamadas "celdas singleton", tal como LinePattern o LockSelect) es un elemento secundario directo del elemento Shape. No se necesita ningún elemento único para representar la fila que contiene la celda PinX, ya que cada forma puede tener solo un PinX.

¿Y qué sucede con las secciones que incluyen datos tabulares, como las secciones Geometría? Para las celdas en esas secciones, el esquema de formato de archivo de Visio 2013 usa elementos Section y Row (que también se distinguen mediante su atributo N o T, tal como se muestra a continuación) para contener los datos. Por ejemplo, la misma forma del ejemplo anterior podría contener datos en la sección Geometría 1 que tiene el aspecto del código siguiente en el esquema de dibujo XML.


<Shape TextStyle=”3” FillStyle=”3” LineStyle=”3” Type=”Shape” ID=”1”>
    <!--- Other cells in the ShapeSheet -->
    <Geom IX="0">
        <!--- Other cells and rows in the Geometry 1 section -->
        <LineTo IX="1">
            <X F="Width*0">0</X>
            <Y F="Height*0">0</Y>
        </LineTo>
    </Geom>
</Shape>

Sin embargo, tiene el aspecto del código siguiente en el archivo Visio 2013.


<Shape TextStyle=”3” FillStyle=”3” LineStyle=”3” Type=”Shape” ID=”1”>
    <!--- Other cells in the ShapeSheet -->
    <Section N="Geometry" IX="0"> 
        <!--- Other cells and rows in the Geometry 1 section -->
        <Row IX="1" T="LineTo">
            <Cell V="0" N="X" V=”Width*0” />
            <Cell V="0" N="Y" V=”Height*0” />
        </Row>
    </Section>
</Shape>

Como se explicó anteriormente, el formato de archivo de Visio 2013 saca provecho de varias tecnologías bien conocidas, como los archivos ZIP y el código XML, para almacenar datos. Para manipular un dibujo de Visio 2013 en el nivel de archivo, una solución solo debe usar las clases y los espacios de nombres de .NET Framework asociados con el trabajo con archivos ZIP o código XML, como System.IO.Packaging o System.Xml.

La principal ventaja para los desarrolladores del formato de archivo de Visio 2013 es que pueden leer y escribir archivos Visio 2013 sin automatizar la aplicación Visio cliente. Entre algunos de los escenarios que podría tener en cuenta como desarrollador a la hora de trabajar con el formato de archivo de Visio 2013 se incluye lo siguiente:

  • Comprobación de archivos de Visio 2013 individuales en búsqueda de datos específicos. Puede leer de manera selectiva un elemento del contenedor ZIP sin tener que extraer todo el archivo.

  • Actualización de las bibliotecas de los archivos Visio 2013 con contenido específico. Puede cambiar mediante programación el logotipo en todas las páginas de fondo para reflejar nuevas pautas de marca.

  • Creación de aplicaciones que consumen archivos de Visio 2013. Por ejemplo, puede crear una herramienta que lee un diagrama de flujo de trabajo de Visio y luego ejecuta su propia lógica empresarial según dicho flujo de trabajo.

Tenga en cuenta que dado que estas soluciones usan ensamblados .NET Framework estándar, la mayoría de las soluciones que se pueden ejecutar en un equipo cliente también se pueden ejecutar en un servidor.

La tarea más básica y fundamental para cualquier desarrollador que trabaje con el formato de archivo de Visio 2013 es abrir el archivo como paquete y luego tener acceso a los elementos individuales de dicho paquete. El System.IO.Packaging.Package en WindowsBase.dll contiene varias clases que permiten abrir y manipular paquetes y elementos.

En el código de ejemplo siguiente, se puede ver cómo abrir un archivo .vsdx, leer la lista de elementos del paquete y obtener información sobre cada elemento.

Procedimiento para abrir un archivo .vsdx y ver los elementos de documento

  1. Abra Visio 2013 y cree un documento nuevo.

  2. Cree un documento nuevo y guárdelo en el escritorio.

  3. Abra Visual Studio 2012.

  4. En el menú Archivo, seleccione Nuevo y elija Proyecto.

  5. En Visual C# o Visual Basic, expanda Windows y seleccione aplicación de consola.

  6. En el cuadro Nombre, escriba ‘VisioFileExplorer’. Se abrirá el proyecto Aplicación de consola.

  7. En el Explorador de soluciones, haga clic con el botón secundario del mouse en VisioFileExplorer y haga clic en Agregar referencia.

  8. En el cuadro de diálogo Agregar referencia, Ensamblados, expanda Framework y seleccione WindowsBase.

  9. Pegue el código siguiente en la solución.

    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.IO.Packaging;
    using System.Diagnostics;
    
    namespace VisioFileExplorer
    {
        class Program
        {
            static void Main(string[] args)
            {    
                try
                {
                    Console.WriteLine("Opening the VSDX file ...");
    
                    // Need to get the folder path for the Desktop
                    // where the file is saved.
                    string dirPath = System.Environment.GetFolderPath(
                        System.Environment.SpecialFolder.Desktop);
                    DirectoryInfo myDir = new DirectoryInfo(dirPath);
    
                    // It is a best practice to get the file name string
                    // using a FileInfo object, but it isn’t necessary.
                    FileInfo[] fInfos = myDir.GetFiles("*.vsdx");
                    FileInfo fi = fInfos[0];
                    string fName = fi.FullName;
    
                    // We’re not going to do any more than open
                    // and read the list of parts in the package, although
                    // we can create a package or read/write what's inside.
                    using (Package fPackage = Package.Open(
                        fName, FileMode.Open, FileAccess.Read))
                    {
                        
                        // The way to get a reference to a package part is
                        // by using its URI. Thus, we're reading the URI
                        // for each part in the package.
                        PackagePartCollection fParts = fPackage.GetParts();
                        foreach (PackagePart fPart in fParts)
                        {
                            Console.WriteLine("Package part: {0}", fPart.Uri);
                        }
                    }   
                }
                catch (Exception err)
                {
                    Console.WriteLine("Error: {0}", err.Message);
                }
                finally
                {
                    Console.Write("\nPress any key to continue ...");
                    Console.ReadKey();
                }   
            }
        }
    }
    
  10. Presione F5 para depurar la solución. Cuando el programa haya completado su ejecución, presione cualquier tecla para salir.

Para obtener más información sobre el formato de archivo de Visio 2013, la convención de empaquetado abierto o cómo trabajar con archivos de Visio 2013 u Office OpenXML mediante programación, consulte los recursos siguientes:

Mostrar:
© 2014 Microsoft