Schemas openxmlformats org что это
Файлы MS Office «изнутри». Open Packaging Conventions. Базовые принципы. Компоненты и связи
Сегодняшним постом я хочу начать серию материалов. В ней я планирую немного поговорить о том, что представляют собой файлы MS Office “изнутри”, а также об инструментах (утилитах и библиотеках) для их создания, изучения, изменения, …
Сегодняшним постом я хочу начать еще одну серию. В ней я планирую немного поговорить о том, что представляют собой файлы MS Office “изнутри”, а также об инструментах (утилитах и библиотеках) для их создания, изучения, изменения, …
Прежде чем перейти к содержательной части некоторый предваряющий disclaimer (традиционно ):
● Я в основном буду касаться современных офисных форматов, тех что появились в редакции Office 2007. Их еще называют XML-based форматами, в противовес старым бинарным (и это закрепилось в расширении файлов: docx, pptx, xlsx, … – в противовес doc, ppt, xls, …), ну или просто Open XML
● Некоторая часть статей (по крайней мере в самом начале) будет основана на материалах Open XML Developer Workshop (контент и видео), который вел Doug Mahugh. Если вам не хочется ждать моих статей рекомендую обратиться к этим материалам
● Еще одним хорошим подспорьем для изучающих Open XML будет книга Воутер Ван Вугт. OpenXML. Кратко и доступно. Ранее она в электронном виде была доступна в блоге евангелиста Microsoft Владимира Габриеля, но теперь – увы. Так что, если вам интересно и не хочется тратить время на поиск, можете взять здесь.
Вроде бы все. Можно приступать.
Что такое Open Packaging Conventions?
В двух словах, это формат контейнеров, поддерживающих хранение как структурированных (XML), так и неструктурированных компонентов (картинки, видео, бинарные компоненты, …) в одном файле.
Краткая но довольно информативная статья об OPC есть на wikipedia.
Что можно сказать в общем об этом стандарте/формате? Я бы выделил такие моменты:
● Формальное описание является частью ECMA-376. Office Open XML File Formats, более конкретно – второй частью Part 2 — Open Packaging Conventions.
● Сам стандарт описывает только структуру хранения и самые общие метаданные (типа автора, даты,…) поэтому потенциально в таком контейнере можно хранить практически что угодно.
Например, вот несколько форматов, основанных на OPC от самого Microsoft:
Что представляют собой контейнеры в OPC?
Тут нужно сделать одну существенную оговорку: сам стандарт разбивает описание контейнеров на 2 части: абстрактную модель (которая описывает из каких элементов состоят контейнеры, но ни слова не говорит о том как это должно храниться физически) и физический формат пакета, т.е. конкретную реализацию.
Т.е. в чистой теории, контейнер в OPC может храниться единый файл, а может, например, как набор отдельных ресурсов на Web-сервере. Но (!) на текущий момент определена только 1 реализация – в виде единого файла ZIP-архива.
Структура контейнеров в OPC
Вообще говоря, концептуальная схема пакетов в Open Packaging Conventions очень проста, она включает в себя всего два элемента:
● компоненты (parts), которые собственно и содержат хранящийся контент (любой: xml, image, video, …)
● отношения (relationships), которые определяют
o предназначение (смысл/семантику) каждой части
o отношения между частями, а также между частями и пакетом целиком
Как уже было сказано выше компонент в OPC это и есть основная единица хранения контента. Каждый компонент характеризуется 2-я составляющими: именем и типом содержимого.
Имя компонента состоит из набора сегментов, начинающихся с прямого слэша (“/”), вот несколько примеров:
В спецификации приведены более формальные правила построения имен, из которых я укажу только основные (на мой взгляд):
● все имена должны начинаться с прямого слэша (“/”) и не должны им заканчиваться
● имя недолжно содержать пустых сегментов (т.е. /images//image1.jpg – неправильное имя)
● сегменты могут состоять из букв, цифр и знаков «!«, «$«, «&«, «‘«, «(«, «)«, «*«, «+«, «,«, «;«, «=«, «-«, «.«, «_«, «
● ни одно имя компонента не должно строиться как имя уже существующего компонента + новый сегмент. Т.е. если есть компонент с именем /abc/abc, то компонент с именем /abc/abc/a существовать не может, зато вполне может существовать компонент с именем /abc/abcde
● имена могут записываться Unicode-символами или использовать кодирование в виде /a/%D1%86.xml
Тип содержимого компонента задается в соответствии с RFC 2616 (раздел Media Types) т.е. в виде / :
Связи
Любой компонент в пакете (а также сам пакет) может ссылаться на другие компоненты или некоторые ресурсы за пределами пакета. Для представления этих ссылок введен специальный механизм связей. По большому счету, связи позволяют решить 2 задачи:
● получить список связанных с компонентом ресурсов, без необходимости анализировать его содержимое (которое может быть очень большим, иметь разную структуру, быть зашифрованным или вообще не поддерживать хранение ссылок)
● поменять набор связей компонента, не меняя его содержимого (которое может быть, например, зашифровано или защищено цифровой подписью)
Создавая свой пакет вы, конечно же, можете не использовать связи. Вместо этого везде в коде использовать фиксированные имена компонент, а где нужны списки связанных ресурсов, ссылаться на них прямо из самих компонент. Однако, рекомендации “лучших собаководов” все же советуют использовать связи везде, где это возможно.
Информация о связях для каждого компонента (а также самого пакета), хранится в специальных компонентах связей (relationships parts) тип содержимого которых application/vnd.openxmlformats-package.relationships+xml
Имена компонентов связи строятся из имени исходных компонент, к которым:
● добавляется предпоследний сегмент с именем _rels
Связи самого пакета хранятся в специальном компоненте с именем /_rels/.rels
Например, если в пакете у нас есть компонент с именем /document/mainPart.xml и два связанных компонента с картинками (пусть их мена будут /images/image1.png и /images/image2.jpeg), то пакет для них будет иметь следующую структуру:
Содержимое компонента связи представляет собой XML следующего формата:
Как уже наверняка понятно из приведенного фрагмента, каждый тэг определяет одну связь. Его атрибуты:
Идентификатор связи. На него ссылаются из содержимого компонент, когда необходимо использовать конкретную связь.
Тип связи. По сути дела тип указывает семантику связи. Например, две разных связи могут указывать на 2 компонента типа image/jpeg, но одно изображение будет картинкой в тексте документа, а второе – миниатюрой (thumbnail) всей страницы целиком.
В качестве типа может использоваться любой валидный URI
(Необязательный) Принимает одно из возможных значений:
· Internal (значение по умолчанию) – указывает, что связь ссылается на компонент пакета
· External – связь указывает на ресурс за пределами пакета
Адрес ресурса или компонента на который ссылается связь
Важный момент: для обращения к компонентам и внешним ресурсам можно использовать как абсолютные адреса (для компонент это будет их полное имя), так и относительные. В последнем случае полное имя компоненты рассматривается как путь в файловой системе, каждый сегмент, кроме последнего – имя “папки”, а последний – имя “файла”. Вот несколько примеров такой адресации:
Имя исходного компонента
Вот, по большому счету и все, что касается модели пакета в OPC. Осталось сказать несколько слов о физической реализации пакетов
Пакеты на основе ZIP-архивов
Как уже было сказано выше, в спецификации OPC определена только одна реализация пакетов – на основе ZIP архивов. Она достаточно проста, поэтому я приведу её обзорно:
● все компоненты, как обычные, так и компоненты связей, хранятся в виде одного или нескольких файлов внутри архива (при этом логически они все равно адресуются как единое целое)
● для хранения типа контента каждого компонента в архиве создается специальный файл с именем [Content_Types].xml
Внутри файла [Content_Types].xml хранится XML следующего вида:
Собственно, общая схема, я думаю, понятна и так: для описания типов используется два подхода:
● указание типа по расширению (тэг )
● явное указание типа для конкретного компонента (тэг )
Как заглянуть внутрь OPC-пакета?
Итак, надеюсь вас уже заинтриговало мое объяснение базовых принципов и вы уже жаждите приступить к практическому изучению (т.е. взять и разобрать по косточкам какой-нибудь офисный файл) .
Вот несколько способов как это можно сделать:
● Прямой (“рукопашный”) способ. Т.к. физическая реализация OPC есть ни что иное, как обычный ZIP-архив, то самый простой способ его изучить – распаковать и работать как с обычной папкой (ну или воспользоваться любимым архиватором).
o Плюс подхода – будете глубже понимать устройство.
▪ Сложно отслеживать связи между компонентами (а именно они образуют структуру, а вовсе не “папки” архива)
▪ Довольно муторно редактировать, если захочется экспериментов (нужно добавлять файлы для компонентов, править файлы связей да еще и не забывать про указание типа контента, если он не стандартный)
● Open XML Package Editor Power Tool for Visual Studio 2010. Расширение для Visual Studio. Умеет открывать файлы в формате OPC, показывать и редактировать их логическую структуру (добавлять/удалять/редактировать компоненты и связи). Для редактирования содержимого компонент используется редакторы самой VS, что очень удобно для экспериментов (XML редактор в VS явно не самый плохой, особенно если в наличии есть хорошие XSD-описания).
▪ Так и не нашел способа создать пакет с 0 (но это редко нужно, да и обходится созданием пакета вручную).
▪ Требует Visual Studio.
▪ Работает только в 2010 версии VS. Увы, для более новых версий студии пакет так и не обновился, хотя почти наверняка он заработает без доработок в любой последующей. А доработать установщик пакета руками не получается, т.к. это не обычный vsix
Пара слов в заключение
Как видите, стандарт OPC в своей основе довольно прост и функционален. Однако остались еще ряд нераскрытых тем. В частности мы не рассмотрели ряд возможностей, заложенных в формат OPC:
● базовые метаданные пакета (core properties)
● иконки пакета (thumbnails)
● цифровые подписи (digital signatures)
Ну и, конечно, мы еще ни слова не проговорили об API для работы с OPC пакетами.
Свойства документа и области сведений о документах
Дата последнего изменения: 7 июля 2010 г.
Применимо к: SharePoint Server 2010
В этой статье
Основные свойства документа
Зависящие от приложения
Настраиваемые свойства документа
Свойства документа типа контента
Свойства документа, вводимые пользователем в области сведений о документах, сохраняются в специальных разделах файлов форматов Open XML. Для документов, хранящихся в Microsoft SharePoint Foundation, значения этих свойств при обновлении их в документе повышаются до уровня библиотеки документов в виде значений столбцов. Аналогичным образом, при обновлении значений столбцов типа контента в пользовательском интерфейсе SharePoint Foundation новые значения понижаются до уровня документа в виде свойств документа.
Дополнительные сведения о работе с Open XML см. в описании сценариев Open XML (Возможно, на английском языке).
Основные свойства документа
Основные свойства документа являются общими для всех приложений Office 2010. К ним относятся название, тема и категория документа. Эти свойства хранятся в части основных свойств файла в документе форматов Open XML. В этой части содержится элемент coreProperties.
В SharePoint Foundation представлены следующие сопоставления столбцов и основных свойств документа:
Автор (сопоставляется с основным свойством документа «Создатель»)
Комментарии (сопоставляется с основным свойством документа «Описание»)
Если тип контента, назначенный документу, содержит любой из этих столбцов, значение соответствующего свойства документа повышается или понижается из документа до уровня библиотеки документов, в которой он находится.
В следующем примере показана часть основных свойств файла для документа форматов Open XML.
Зависящие от приложения
Зависящие от приложения свойства документа являются уникальными для документа на уровне приложения. К ним относятся число страниц, число строк текста и версия приложения. Эти свойства содержатся в части расширенных свойств файла в форматах Open XML.
По умолчанию в SharePoint Foundation не включаются столбцы, сопоставленные с расширенными свойствами документа. В общем случае значения таких свойств определяются автоматически на основе контента документа (например, на основе числа страниц или строк в документе).
В следующем примере показаны расширенные свойства документа Microsoft Word. В этом примере документ Microsoft Word содержит одну страницу с тремя абзацами текста общим объемом в 45 слов.
Настраиваемые свойства документа
Определяемые пользователем свойства, которые содержатся в части настраиваемых свойств файла в форматах Open XML. Для документов, хранящихся в библиотеке SharePoint Foundation, эта часть содержит настраиваемое свойство, определяющее идентификатор типа контента, назначенного документу, как показано в следующем примере.
Свойство идентификатора типа контента никогда не повышается из документа до уровня библиотеки документов, в которой он располагается.
Примечание |
---|
Примечание |
---|