Общие сведения о формате файлов Visio (VSDX)Introduction to the Visio file format (.vsdx)

Узнайте о новом формате файлов в Visio 2013, изучите некоторые высокоуровневые концепции программной работы с форматом файлов Visio 2013 и создайте простое консольное приложение, которое проверяет файл Visio 2013.Learn about the new file format in Visio 2013, explore some high-level concepts for working with the Visio 2013 file format programmatically, and create a simple console application that examines a Visio 2013 file.

В этой статье Введение Что из себя представляет формат файлов Visio 2013?In this article Introduction What is the Visio 2013 file format "under the hood"? Сценарии разработчика для работы с форматом файлов Visio 2013 Программное изучение формата файлов Visio 2013 Дополнительные ресурсыDeveloper scenarios for working with the Visio 2013 file format Exploring the Visio 2013 file format programmatically Additional resources

ВведениеIntroduction

Visio 2013 представляет новый формат файла (.vsdx) для Visio, который заменяет формат двоичного файла Visio (.vsd) и файл документа Visio в формате XML (.vdx).Visio 2013 introduces a new file format (.vsdx) for Visio that replaces the Visio binary file format (.vsd) and Visio XML Drawing file format (.vdx). Так как формат файла Visio 2013 основывается на соглашениях Open Packaging Conventions и XML, разработчики, имеющие представление об этих технологиях, могут быстро научиться программной работе с файлами Visio 2013.Because the Visio 2013 file format is based upon Open Packaging Conventions and XML, developers who are familiar with these technologies can quickly learn how to work with Visio 2013 files programmatically. Разработчики, знакомые с файлами документов Visio в формате XML (.vdx) из предыдущих версий Visio, могут найти множество одинаковых XML-структур внутри частей файла в формате VSDX.Developers who are familiar with the Visio XML Drawing file format (.vdx) from previous versions of Visio can find many of the same XML structures within the parts of .vsdx file format. Взаимодействие с файлами Visio значительно повысилось, поскольку стороннее программное обеспечение может работать с файлами Visio на уровне формата файлов.Interoperability with Visio files is greatly increased since third-party software can manipulate Visio files at a file format level. Формат файлов Visio 2013 поддерживается в службах Visio в Microsoft SharePoint Server 2013, при этом использование промежуточного формата файлов для публикации в SharePoint Server не требуется.The Visio 2013 file format is supported on Visio Services in Microsoft SharePoint Server 2013, without the need of an "intermediary" file format for publishing to SharePoint Server.

Существует несколько типов (расширений) файлов, которые входят в формат файла Visio 2013.There are several file types, by extension, that comprise the Visio 2013 file format. Эти расширения перечислены ниже.These extensions include:

  • VSDX (документ Visio);.vsdx (Visio drawing)

  • VSDM (документ Visio с поддержкой макросов);.vsdm (Visio macro-enabled drawing)

  • VSSX (набор элементов Visio);.vssx (Visio stencil)

  • VSSM (набор элементов Visio с поддержкой макросов);.vssm (Visio macro-enabled stencil)

  • VSTX (шаблон Visio);.vstx (Visio template)

  • VSTM (шаблон Visio с поддержкой макросов)..vstm (Visio macro-enabled template)

Примечание

Макросы VBA можно хранить только в файлах с поддержкой макросов (VSDM, VSSM, VSTM).Only the macro-enabled files (.vsdm, .vssm, .vstm) can store VBA macros. Хранение макросов в файлах с расширением VSDX, VSSX или VSTX невозможно.You cannot store macros in files with a .vsdx, .vssx, or .vstx extension.

Что из себя представляет формат файлов Visio 2013?What is the Visio 2013 file format "under the hood"?

Формат файлов Visio 2013 использует соглашения Open Packing Conventions (OPC), которые определяют структурированные средства для хранения данных приложения вместе со связанными ресурсами с помощью контейнера, например ZIP-файла.The Visio 2013 file format uses the Open Packing Conventions (OPC), which defines a structured means to store application data together with related resources using a container of some sort─for example, a ZIP file. На базовом уровне файл Visio 2013 действительно представляет собой ZIP-контейнер, содержащий файлы других типов.At a basic level, a Visio 2013 file is really a ZIP container that contains other types of files. Фактически вы можете сохранить чертеж в Visio 2013 в виде VSDX-файла, в проводнике переименовать расширение на "*.zip", а затем открыть этот файл как папку, чтобы просмотреть его содержимое.In fact, you can save a drawing in Visio 2013 as a .vsdx file, rename the file extension to "*.zip" in Windows Explorer, and then open the file like a folder to see the contents inside.

Примечание

В этой статье приведен краткий обзор Open Packaging Conventions.This article contains only a brief overview of the Open Packaging Conventions. Более подробное описание этих соглашений можно найти в других статьях. > Дополнительные сведения непосредственно об Open Packaging Conventions см. в статье OPC: новый стандарт упаковки данных.You can find more detailed coverage of the conventions in other articles: > For more information about the Open Packaging Conventions themselves, see OPC: A New Standard for Packaging Your Data. > Дополнительные сведения о соглашениях Open Packaging Conventions и их использовании в файлах Microsoft Office см. в статьях Основные понятия Open Packaging Conventions и Общие сведения о форматах файлов Office (2007) Open XML.> For more information about the Open Packaging Conventions and their use in Microsoft Office files, see Essentials of the Open Packaging Conventions and Introducing the Office (2007) Open XML File Formats.

Пакеты и части пакетовPackages and Package Parts

Как уже говорилось ранее, файлы Visio 2013 являются ZIP-контейнерами или "пакетами", в которых находятся другие файлы (называемые "частями пакета").As started earlier, Visio 2013 files are ZIP containers or "packages" that hold other files (called "package parts") within them. Часть пакета может быть XML-файлом, изображением или даже решением VBA.A package part can be an XML file, an image, even a VBA solution. Части, находящиеся в пакете, можно разделить на две большие категории: "части документов" и "части отношений".The parts within the package can be further divided into two broad categories, "document parts" and "relationship parts." Части документов содержат фактическое содержимое и метаданные файла Visio, такие как имя файла, первая страница и все содержащиеся на ней фигуры, а также соединения данных для этих фигур.The document parts contain the actual content and metadata of the Visio file, like the name of the file, the first page and all of the shapes that it contains, and even the data connections for the shapes. Изображения и текстовые файлы в пакете считаются частями документа.Images and text files within the package are considered document parts. Более подробное описание частей отношений будет приведено далее в этой статье.Relationship parts are described in more detail later in this article.

Примечание

Если открыть файл Visio 2013 с помощью служебной программы ZIP, скорее всего вы увидите, что в этом ZIP-пакете находится несколько папок.If you open a Visio 2013 file using a ZIP utility, you can probably see several folders contained inside of the ZIP package. Вы даже сможете управлять этими подадресами как папками, используя служебную программу ZIP.You can even manipulate these sub-addresses like folders using a ZIP utility. Однако эти "папки" являются подадресами в пакете ZIP, а не реальными папками.However, these "folders" represent sub-addresses within the ZIP package, not actual folders. Вы не сможете использовать программные эквиваленты папок, чтобы работать с этими подадресами в вашем решении.You cannot use the programmatic equivalents of folders to work with these sub-addresses in your solution.

Части пакета (как части документов, так и части отношений) также имеют связанные типы контента.Package parts─both document parts and relationship parts─also have associated content types. Этими типами контента являются строки, которые определяют тип мультимедиа MIME.These content types are strings that define a MIME media type. Эти типы контента устанавливают и определяют MIME-типы, которые могут содержаться в файле.These content types specify and scope the kind of MIME types that can be contained in the file.

ОтношенияRelationships

Части отношений (оканчивающиеся расширением "*.rels" и хранимые в папке "_rels") описывают, каким образом эти части в пакете связаны друг с другом, и определяют структуру файла.The relationship parts (which end with the extension "*.rels" and are stored in a "_rels" folder) describe how the parts within the package relate to each other and provide the structure of the file. Отдельный XML-документ использует иерархическое ("родитель — потомок") отношение элементов для определения связи объектов друг с другом.A standalone XML document uses the parent/child relationship of elements to determine the relationship of entities to each other. Другие файлы могут использовать другую иерархию или структуру папок с файлами для описания взаимодействия содержимого в файле.Other files may use other hierarchies or file folder structure to describe the interaction of content in the file. В формате файлов Visio 2013 допустимым файлом Visio является пакет, содержащий правильный набор частей и отношения между частями.For the Visio 2013 file format, the package is a valid Visio file if it contains the correct set of parts and the package contains the relationships between the parts.

Части отношений — это XML-документы, описывающие отношения между различными частями документа в пакете.Relationship parts are XML documents that describe the relationships between different document parts within the package. Они определяют связь между двумя элементами: указанным источником (который задается именем и расположением файла отношений) и указанной частью целевого документа.They define an association between two items: a specified source (defined by the name and location of the relationship file) and a specified target document part. Например, части отношений используются для описания того, какие мастеры форм связаны с файлом, как страницы связаны с файлом и друг с другом или как изображения и объекты связаны с конкретной страницей.For example, relationship parts are used to describe which shape masters are associated with the file, how pages relate to the file and to each other, or how images and objects relate to a specific page.

Сходства и различия со схемой Visio VDXSimilarities and differences with Visio VDX schema

Как уже было сказано, предыдущие версии Visio также имели формат файлов на основе XML, т. е. документ Visio в формате XML (VDX).As mentioned, past versions of Visio also included an XML-based file format, the Visio XML Drawing Format or .vdx. (В предыдущих версиях Visio схема, используемая для документов Visio в формате XML, называлась DatadiagramML.) Некоторые фрагменты схемы Visio XML не изменились.(In previous versions of Visio, the schema used for the Visio XML Drawing Format is called DatadiagramML.) Some pieces from the Visio XML schema have stayed the same between the two file formats. Например, элемент Windows и его дочерние элементы остались неизменными, за исключением того, что теперь элемент Windows является корневым элементом документа XML (window.xml).For example, the Windows element and its children remain unchanged─with the exception that the Windows element is now a root element of an XML document (window.xml).

Самое большое различие между документом в формате XML и форматом файлов Visio 2013 заключается в упаковке.The largest difference between the XML Drawing Format and the Visio 2013 file format is the packaging. С файлом документа в формате XML можно работать как с обычным автономным XML-файлом; файл в формате Visio 2013 необходимо обрабатывать как пакет.An XML Drawing Format file could be manipulated like a normal stand-alone XML; the Visio 2013 file format must be manipulated as a package. Для удобства использования в Visio 2013 код XML разделен на две части.In the Visio 2013, the XML has been divided up into parts for easier consumption. Еще одно значимое изменение состоит в том, что формат файлов Visio 2013 хранит все свойства документа в частях документа, которые описаны стандартом OPC (app.xml, core.xml, custom.xml).Another noticeable change is that the Visio 2013 file format stores all document properties in document parts described by the OPC standard (app.xml, core.xml, custom.xml).

Однако есть одно существенное изменение, которое должны учитывать все разработчики Visio: появление элементов Cell, Row и Section.However, there is one significant change that all Visio developers must be aware of: the introduction of the Cell, Row, and Section elements. В схеме файла документа в формате XML отдельные строки и ячейки в ShapeSheet представлены именованными элементами.In the XML Drawing File Format schema, individual rows and cells in the ShapeSheet are represented by named elements. Предположим, что у вас есть одностраничный документ, содержащий фигуру, элемент PinX которой имеет значение "2" (это означает, что ось вращения фигуры находится в 2 дюймах от левого края чертежа).For example, imagine that you have a document with a single page that contains a shape with a PinX value of "2" (meaning that the rotation pin of the shape is 2 inches from the left edge of the drawing). Соответствующая разметка для этого параметра в файле документа в формате XML представлена в следующем коде.The relevant markup for that setting in the XML Drawing File Format is shown in the following code.

<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>

Здесь элемент PinX является дочерним по отношению к элементу XForm, который, в свою очередь, является дочерним по отношению к элементу Shape.Here, the PinX element is a child of the XForm element, which is in turn a child of the Shape element. Этот код строит модель пользовательского интерфейса Visio ShapeSheet, где ячейка PinX включена в раздел Shape Transform фигуры.This models the Visio ShapeSheet UI, where the PinX cell is included in the Shape Transform section of a shape.

В формате файлов Visio 2013 все ячейки в ShapeSheet (PinX, LinePattern, ячейка X в строке MoveTo из раздела Geometry и т. д.) представлены одним типом XML-элемента — элементом Cell.In the Visio 2013 file format, all cells in the ShapeSheet─ PinX, LinePattern, an X cell in a MoveTo row in a Geometry section, etc.─are represented by one type of XML element, the Cell element. Различные элементы Cell отличаются друг от друга значением атрибута N.Different Cell elements are individuated from each other by the value of their N attribute. Таким образом, данные, содержащиеся в ячейке PinX в ShapeSheet в приведенном выше примере, хранятся в VSDX-файле, как представлено в следующем коде.Thus, in the example from above, the data contained in the PinX cell in the ShapeSheet is stored in a VSDX file as shown in the following code.

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

Элемент Cell для PinX (а также другие отдельные именованные ячейки, называемые "singleton-ячейками", например LinePattern или LockSelect) является прямым потомком элемента Shape.The Cell element for PinX (as well as other individual, named cells called "singleton cells" like LinePattern or LockSelect) is a direct child of the Shape element. Для представления строки, содержащей ячейку PinX, уникальный элемент не требуется, поскольку каждая фигура может иметь только один элемент PinX.No unique element is needed to represent the row that contains the PinX cell, as each shape can only have one PinX.

Что насчет разделов, которые содержат табличные данные, например раздел Geometry?What about sections that include tabular data, like Geometry sections? В ячейках из этих разделов для хранения данных схема формата файлов Visio 2013 использует элементы Section и Row, которые различаются атрибутами N или T, как показано нижеFor the cells in those sections, the Visio 2013 file format schema uses Section and Row elements─also distinguished by their N attribute or T attribute as shown below─to contain the data. Например, фигура из предыдущего примера может содержать данные в разделе Geometry 1, код которого в схеме документа в формате XML выглядит следующим образом.For example, the same shape from the previous example might contain data in the Geometry 1 section that looks like the following code in the XML Drawing schema.

<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>

Но в файле Visio 2013 код выглядит следующим образом.However, it looks like the following code in the Visio 2013 file.

<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>

Сценарии разработчика для работы с форматом файлов Visio 2013Developer scenarios for working with the Visio 2013 file format

Как было пояснено выше, формат файлов Visio 2013 использует для хранения данных несколько широко известных технологий, таких как ZIP-файлы и XML.As explained above, the Visio 2013 file format leverages several well-understood technologies like ZIP files and XML to store data. Для обработки документов Visio 2013 на уровне файлов решение должно использовать только пространства имен и классы .NET Framework, которые связаны с работой с файлами ZIP или XML, например System.IO.Packaging или System.Xml.To manipulate a Visio 2013 drawing at the file level, a solution need only to use the .NET Framework namespaces and classes associated with working with ZIP files or XML, like System.IO.Packaging or System.Xml.

Ключевое преимущество для разработчиков формата файлов Visio 2013 заключается в том, что чтение и запись файлов Visio 2013 можно выполнять без автоматизации клиентского приложения Visio.The key benefit to developers of the Visio 2013 file format is that you can read and write to Visio 2013 files without automating the Visio client application. Вот некоторые сценарии, которыми может воспользоваться разработчик при работе с форматом файлов Visio 2013:Some scenarios that you might consider as a developer for working with Visio 2013 file format include:

  • Проверка отдельных файлов Visio 2013 на наличие определенных данных.Checking individual Visio 2013 files for specific data. Вы можете выборочно прочитать один элемент из ZIP-контейнера, не извлекая содержимое всего файла.You can selectively read one item out of the ZIP container without having to extract the whole file.

  • Обновление библиотек файлов Visio 2013 с определенным содержимым.Updating libraries of Visio 2013 files with specific content. Вы можете программно изменить логотип на всех фоновых страницах, чтобы отразить новые рекомендации по фирменной символике.You can programmatically change the logo in all of the background pages to reflect new branding guidelines.

  • Создание приложений, использующих файлы Visio 2013.Creating applications that consume Visio 2013 files. Например, вы можете создать инструмент, который считывает схему рабочего процесса Visio, а затем на основе этого рабочего процесса выполняет собственную бизнес-логику.For example, you can build a tool that reads a Visio workflow diagram and then executes its own business logic based upon that workflow.

Помните, что поскольку в этих решениях используются стандартные сборки .NET Framework, большинство решений, которые могут быть запущены на клиентском компьютере, также могут выполняться на сервере!Be aware that because these solutions use standard .NET Framework assemblies, most solutions that can be run on a client machine can also be run on a server!

Программное изучение формата файлов Visio 2013Exploring the Visio 2013 file format programmatically

Основная и фундаментальная задача любого разработчика, работающего с форматом файлов Visio 2013, заключается в том, чтобы открыть файл как пакет, а затем получить доступ к отдельным частям в пакете.The most basic and fundamental task for any developer working with the Visio 2013 file format is opening the file as a package and then accessing individual parts within the package. Класс System.IO.Packaging.Package в WindowsBase.dll содержит множество классов, которые позволяют открывать пакеты и части и работать с ними.The System.IO.Packaging.Package in the WindowsBase.dll contains many classes that enable you to open and manipulate packages and parts.

В следующем примере кода вы увидите, как открыть VSDX-файл, прочитать список частей в пакете и получить информацию о каждой части.In the following code sample, you can see how to open a .vsdx file, read the list of parts in the package, and get information about each part.

Открытие VSDX-файла и просмотр частей документаTo open a .vsdx file and view the document parts

  1. Откройте Visio 2013 и создайте новый документ.Open Visio 2013 and create a new document.

  2. Создайте новый документ и сохраните его на рабочем столе.Create a new document and save it to the Desktop.

  3. Откройте Visual Studio 2012.Open Visual Studio 2012.

  4. В меню Файл выберите команду Создать, а затем пункт Проект.On the File menu, choose New, and then choose ** Project **.

  5. В разделе Visual C# или Visual Basic разверните узел Windows и выберите пункт Консольное приложение.Under Visual C# or Visual Basic, expand Windows, and then select Console Application.

  6. В поле Имя введите "VisioFileExplorer".In the Name box, type 'VisioFileExplorer'. Откроется проект консольного приложения.The Console Application project opens.

  7. В обозревателей решений щелкните правой кнопкой мыши пункт VisioFileExplorer, а затем выберите команду Добавить ссылку.In the Solution Explorer, right-click VisioFileExplorer, and then click Add Reference.

  8. В диалоговом окне Добавление ссылки в разделе Сборки разверните узел Платформа, а затем выберите пункт WindowsBase.In the Add Reference dialog box, under Assemblies, expand Framework, and then choose WindowsBase.

  9. Вставьте в решение следующий код.Paste the following code into the solution.

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();
            }   
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.IO
Imports System.IO.Packaging
Imports System.Diagnostics
Module Module1
    Sub Main()
        Try
            Console.WriteLine("Opening the VSDX file ...")
            ' Need to get the folder path for the Desktop
            ' or where the file is saved.
            Dim dirPath As String = System.Environment.GetFolderPath( _
                System.Environment.SpecialFolder.Desktop)
            Dim myDir As New DirectoryInfo(dirPath)
            ' It is a best practice to get the file name string
            ' using a FileInfo object, but it isn't necessary.
            Dim fInfos As FileInfo() = myDir.GetFiles("*.vsdx")
            Dim fi As FileInfo = fInfos(0)
            Dim fName As String = fi.FullName
            ' We don't need 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 fPackage As Package = Package.Open( _
                fName, FileMode.Open, FileAccess.Read)
                ' The way to get a reference to a document part is
                ' by using its URI. Thus, we're reading the URI
                ' for each document part in the package.
                Dim fParts As PackagePartCollection = fPackage.GetParts()
                For Each fPart As PackagePart In fParts
                    Console.WriteLine("Package part: {0}", fPart.Uri)
                Next
            End Using
        Catch err As Exception
            Console.WriteLine("Error: {0}", err.Message)
        Finally
            Console.Write(vbLf &amp; "Press any key to continue ...")
            Console.ReadKey()
        End Try
    End Sub
End Module

  1. Нажмите клавишу F5, чтобы отладить решение.Press F5 to debug the solution. По завершении работы программы выйдите из нее, нажав любую клавишу.When the program has completed running, press any key to exit.

См. такжеSee also

Дополнительные сведения о формате файлов Visio 2013, соглашении Open Packaging Convention и программной работе с файлами Visio 2013 или Office OpenXML см. в следующих ресурсах.For more information about the Visio 2013 file format, the Open Packaging Convention, or how to work with Visio 2013or Office OpenXML files programmatically, see the following resources: