Неофициальный полный русский перевод ECMA-376, часть 2, 5-е издание (декабрь 2021). Первоисточник: Ecma International. Официальная английская версия имеет преимущественную силу. Перевод не объявляется переводом ISO.
Форматы файлов Office Open XML — соглашения об открытой упаковке
Декабрь 2021 г.
Signature — 47SignedInfo — 48CanonicalizationMethod — 48SignatureMethod — 48Reference — 49Transform — 49RelationshipReference — 50RelationshipsGroupReference — 50DigestMethod — 51Object — 51Manifest — 51SignatureProperty — 52SignatureTime — 52Format — 52Value — 52XPath — 52Настоящее издание отменяет и заменяет предыдущее издание (ECMA-376-2:2012), которое было технически пересмотрено.
Основные изменения по сравнению с предыдущим изданием заключаются в следующем:
ECMA-376 (все части стандарта) устанавливает семейство схем XML, совместно именуемых Office Open XML, которые определяют словари XML для документов текстовой обработки, электронных таблиц и презентаций, а также упаковку документов, соответствующих этим схемам.
Цель состоит в том, чтобы обеспечить реализацию форматов Office Open XML максимально широким набором средств и платформ, содействуя функциональной совместимости между приложениями для повышения офисной производительности и системами, поддерживающими бизнес-процессы, а также поддержать и укрепить архивирование и сохранение документов — всё это способом, полностью совместимым с существующим массивом документов Microsoft® Office1.
Настоящий документ включает два приложения (приложения C и D), которые ссылаются на файлы данных, предоставленные в электронной форме.
Форматы представления документов, определённые настоящим документом, отличаются от форматов, определённых в соответствующей части стандарта ECMA-376:2006. Некоторые различия отражены в изменениях схем, как показано в приложении G.
Настоящее пятое издание сохраняет всю прежнюю функциональность и не добавляет новой функциональности.
1 Эта информация приводится для удобства пользователей настоящего документа и не означает одобрения Ecma названного продукта. Могут использоваться эквивалентные продукты, если можно показать, что они приводят к тем же результатам.
Настоящий документ определяет набор соглашений для упаковки одного или нескольких взаимосвязанных потоков байтов (частей пакета) в единый ресурс (пакет). Эти соглашения применимы не только к спецификациям Office Open XML, описанным в ECMA-376-1 и ECMA-376-4, но и к другим спецификациям разметки.
Следующие документы упоминаются в тексте таким образом, что часть или всё их содержание составляет требования настоящего документа. Для датированных ссылок применяется только указанное издание. Для недатированных ссылок применяется последнее издание документа, на который дана ссылка (включая любые поправки).
ANSI/INCITS 4-1986 [R2017] - Information Systems - Coded Character Sets - 7-Bit American National Standard Code For Information Interchange (7-Bit ASCII), American National Standards Institute (ANSI). 2017
FIPS 186-4, Digital Signature Standard (DSS), National Institute of Standards and Technology, US Department of Commerce, July 2013
ECMA-376-3, Information technology — Document description and processing languages — Office Open XML File Formats, Part 3: Markup Compatibility and Extensibility
ISO/IEC 9594-8/ITU-T Rec. X.509, Information technology — Open systems interconnection — Part 8— The Directory: Public-key and attribute certificate frameworks
ISO 15836-1, Information and documentation — The Dublin Core metadata element set — Part 1: Core elements
ISO 15836-2, Information and documentation — The Dublin Core metadata element set — Part 2: DCMI Properties and classes
RFC 2046, Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types, The Internet Society, November 1996, N. Freed and N. Borenstein. Доступно по адресу https://www.rfc-editor.org/info/rfc2046
RFC 3986, Uniform Resource Identifier (URI): Generic Syntax, The Internet Society, January 2005, Berners-Lee, T., R. Fielding, and L. Masinter. Доступно по адресу https://www.rfc-editor.org/info/rfc3986
RFC 3987, Internationalized Resource Identifiers (IRIs), The Internet Society, January 2005, Duerst, M. and M. Suignard. Доступно по адресу https://www.rfc-editor.org/info/rfc3987
RFC 5234, Augmented BNF for Syntax Specifications: ABNF, The Internet Society, January 2008, D. Crocker and P.Overell, (editors). Доступно по адресу https://www.rfc-editor.org/info/rfc5234
RFC 6931, Additional XML Security Uniform Resource Identifiers (URIs), The Internet Society, April 2013, D. Eastlake 3rd. Доступно по адресу https://www.rfc-editor.org/info/rfc6931
RFC 7231, Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content, The Internet Society, June 2014, R. Fielding and J. Reschke. Доступно по адресу https://www.rfc-editor.org/info/rfc7231
Unicode, The Unicode Standard, The Unicode Consortium. Доступно по адресу http://www.unicode.org/standard/standard.html
Спецификация XML 1.0, Extensible Markup Language (XML) 1.0, Fourth Edition. World Wide Web Consortium, 2006, Tim Bray, Jean Paoli, Eve Maler, C. M. Sperberg-McQueen, and François Yergeau (editors). Доступно по адресу http://www.w3.org/TR/2006/REC-xml-20060816/2
XML Namespaces, Namespaces in XML 1.0 (Third Edition), 8 December 2009. World Wide Web Consortium, Tim Bray, Dave Hollander, Andrew Layman, and Richard Tobin (editors). Доступно по адресу http://www.w3.org/TR/2009/REC-xml-names-20091208/
XML Base, XML Base (Second Edition), World Wide Web Consortium, 28 January 2009. Jonathan Marsh and Richard Tobin (editors). Доступно по адресу https://www.w3.org/TR/2009/REC-xmlbase-20090128/
W3C XML Schema Structures, XML Schema Part 1: Structures (Second Edition), World Wide Web Consortium, 28 October 2004, Henry Thompson, David Beech, Murray Maloney and Noah Mendelsohn (editors). Доступно по адресу https://www.w3.org/TR/xmlschema-1/
W3C XML Schema Datatypes, XML Schema Part 2: Datatypes (Second Edition), World Wide Web Consortium, 28 October 2004, Paul Biron and Ashok Malhotra (editors). Доступно по адресу https://www.w3.org/TR/xmlschema-2/
XML-Signature Syntax and Processing, World Wide Web Consortium, 12 February 2002, Donald Eastlake, Joseph Reagle and David Solo (editors). Доступно по адресу http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/
ZIP Appnote, ZIP File Format Specification Version 6.2.0, PKWARE Inc., 2004. Доступно по адресу http://www.pkware.com/documents/APPNOTE/APPNOTE_6.2.0.txt
2Дальнейшая корректировка нормативной ссылки на XML с указанием 5-го издания потребуется, когда связанные справочные спецификации, на которые настоящий документ также даёт нормативную ссылку и которые также зависят от XML, такие как XML Namespaces и XML Base, будут все согласованы с 5-м изданием.
Для целей настоящего документа применяются следующие термины и определения.
Примечание 1 к термину: ограничения на значение строки Unicode ДОЛЖНЫ (SHALL) быть указаны при использовании термина в 6.2.2.2.
Примечание 1 к термину: кодовые точки ASCII ДОЛЖНЫ (SHALL) быть определены в соответствии с ANSI/INCITS 4-1986.
Пакет относится к классу соответствия OPC, если он соблюдает все синтаксические ограничения, заданные в настоящем документе.
Соответствие OPC носит исключительно синтаксический характер.
Настоящий документ описывает абстрактную модель пакета (раздел 6) и физическую модель пакета (раздел 7) для использования XML, Unicode, ISO/IEC 10646 (см. ссылку [7]), ZIP и других относящихся к делу технологий и спецификаций для организации содержимого и ресурсов документа внутри пакета. Структура пакета предназначена для поддержки организации составляющих ресурсов для различных приложений и категорий содержимого. Пример пакета приведён в приложении H.
Абстрактная модель пакета представляет собой абстракцию пакета, содержащую коллекцию частей пакета и связей. Части пакета составляются, обрабатываются и сохраняются в соответствии с набором правил. Части пакета могут иметь связи с другими частями пакета или внешними ресурсами, а пакет в целом может иметь связи с содержащимися в нём частями пакета или с внешними ресурсами. Части пакета имеют MIME-типы носителей и однозначно идентифицируются с помощью чётко определённых правил именования, приведённых в настоящем документе.
Физическая модель пакета определяет отображение компонентов абстрактной модели пакета на возможности конкретного физического формата, а именно ZIP-файла.
Настоящий документ также описывает другие возможности, включая основные свойства для метаданных пакета, миниатюру для графического представления пакета и цифровые подписи содержимого пакета. Настоящий документ опирается на ECMA-376-3, чтобы обеспечить будущие расширения OPC без возникновения проблем совместимости.
Настоящий документ устанавливает требования к пакетам. Требования соответствия указаны по всему настоящему документу. Формальное положение о соответствии приведено в разделе 4.
В настоящем разделе вводятся абстрактные пакеты в терминах частей пакета (6.2) и связей (6.5). В нём также вводится схема pack (6.3.2).
Назначение абстрактного пакета состоит в объединении составных компонентов документа (или другого типа содержимого) в единый объект. Например, абстрактный пакет, содержащий документ с изображением, может содержать часть пакета с XML-разметкой, представляющей текст документа, и другую часть пакета, представляющую изображение.
Пример абстрактного пакета приведён в H.2.
Часть пакета аналогична файлу в файловой системе или ресурсу на HTTP-сервере.
Часть пакета ДОЛЖНА (SHALL) иметь имя части пакета, которое ДОЛЖНО (SHALL) однозначно идентифицировать часть пакета в абстрактном пакете.
Имя части пакета ДОЛЖНО (SHALL) быть строкой Unicode, соответствующей следующим правилам продукции в синтаксисе ABNF, определённом в RFC 5234:
part_name = 1*( "/" isegment-nz )
isegment-nz = <isegment-nz, see RFC3987, Section 2.2>
и дополнительно удовлетворять перечисленным ниже ограничениям, где сегмент I18N — это строка Unicode, соответствующая нетерминалу isegment-nz, а процентное кодирование представляет символ знаком процента «%», за которым следуют две шестнадцатеричные цифры, как указано в RFC 3986.
iunreserved в RFC 3987.Имя части пакета «/_rels/.rels» ДОЛЖНО (SHALL) быть зарезервировано (6.5.2.2). Имена частей пакета, в которых предпоследний сегмент I18N эквивалентен «_rels», а последний сегмент эквивалентен любой строке, оканчивающейся на «.rels», ДОЛЖНЫ (SHALL) быть зарезервированы (6.5.2.3).
ПРИМЕР 1 Имя части пакета «/hello/world/doc.xml» содержит три сегмента пути, а именно «hello», «world» и «doc.xml».
ПРИМЕР 2 Имя части пакета «/é» содержит сегмент пути «é», где é — «LATIN SMALL LETTER E WITH ACUTE» (U+00E9).
ПРИМЕЧАНИЕ Сегменты пути не представлены явно как папки в абстрактной модели пакета, и в абстрактной модели пакета не существует каталога папок.
Реализатор пакета не обязан поддерживать имена частей пакета, не входящие в ASCII, хотя это рекомендуется.
Эквивалентность имён частей пакета ДОЛЖНА (SHALL) определяться ASCII-независимым от регистра сопоставлением. Такое сопоставление сравнивает последовательность кодовых точек так, как если бы все кодовые точки ASCII в диапазоне 0x41–0x5A (A–Z) были отображены на соответствующие кодовые точки в диапазоне 0x61–0x7A (a–z). См. ссылку [1].
Имена двух различных частей пакета в абстрактном пакете НЕ ДОЛЖНЫ (SHALL NOT) быть эквивалентными.
ПРИМЕР 1 Если абстрактный пакет содержит часть пакета с именем «/a», имя другой части пакета в этом абстрактном пакете не может быть «/a» или «/A».
Для каждого имени части пакета N и строки S обозначим результат конкатенации N, прямой косой черты и S как N[S]. Говорят, что имя части пакета N1 выводимо из другого имени части пакета N2, если для некоторой строки S N1 эквивалентно N2[S].
ПРИМЕР 2 «/a/b» выводимо из «/a», где N — «/a», а S — «b».
Имя части пакета НЕ ДОЛЖНО (SHALL NOT) быть выводимым из имени другой части пакета.
ПРИМЕР 3 Предположим, что абстрактный пакет содержит часть пакета с именем «/segment1/segment2/…/segmentn». Чтобы оно не было выводимым, другие части пакета в этом абстрактном пакете не могут иметь такие имена, как «/segment1», «/SEGMENT1», «/segment1/segment2», «/segment1/SEGMENT2» или «/segment1/segment2/…/segmentn-1».
В этом подразделе также вводятся рекомендации, чтобы формы нормализации Unicode C (NFC) и Unicode D (NFD) имён частей пакета не приводили к коллизиям имён частей пакета. Следует учитывать, что некоторые реализации структур каталогов всегда применяют нормализацию NFD.
Применение нормализации NFC или NFD к именам двух различных частей пакета в абстрактном пакете НЕ СЛЕДУЕТ (SHOULD NOT) приводить к эквивалентным строкам.
Если абстрактный пакет содержит часть пакета с именем «/é», где é — «LATIN SMALL LETTER E» (U+0065), за которой следует «COMBINING ACUTE ACCENT» (U+0301), имя другой части пакета в этом абстрактном пакете НЕ СЛЕДУЕТ (SHOULD NOT) иметь вид
«/é», где é — «LATIN SMALL LETTER E WITH ACUTE» (U+00E9), или «/É», где É — «LATIN CAPITAL LETTER E WITH ACUTE» (U+00C9).
Если абстрактный пакет содержит часть пакета с именем «/Å», где Å — «ANGSTROM SIGN» (U+212B), имя другой части пакета в этом абстрактном пакете НЕ СЛЕДУЕТ (SHOULD NOT) иметь вид «/Å», где Å — «LATIN CAPITAL LETTER A WITH RING ABOVE» (U+00C5), поскольку U+212B и U+00C5 нормализуются к одной и той же последовательности символов.
Говорят, что имя части пакета N1 слабо выводимо из другого имени части пакета N2, если для некоторой строки S результат применения NFC или NFD к N1 эквивалентен результату применения NFC или NFD к N2[S].
ПРИМЕР 4 Рассмотрим имя части пакета «/é», где é — «LATIN SMALL LETTER E WITH ACUTE» (U+00E9). Другое имя части пакета «/é/a», где é — «LATIN SMALL LETTER E» (U+0065), за которой следует «COMBINING ACUTE ACCENT» (U+0301), слабо выводимо из «/é». Другое имя части пакета «/É/a», где É — «LATIN CAPITAL LETTER E» (U+0045), за которой следует «COMBINING ACUTE ACCENT» (U+0301), также слабо выводимо.
Имя части пакета НЕ СЛЕДУЕТ (SHOULD NOT) быть слабо выводимым из имени другой части пакета.
Предположим, что абстрактный пакет содержит часть пакета с именем «/é/Å/foo», где é — «LATIN SMALL LETTER E WITH ACUTE» (U+00E9), а Å — «ANGSTROM SIGN» (U+212B). Чтобы оно не было слабо выводимым, другие части пакета в этом абстрактном пакете НЕ СЛЕДУЕТ (SHOULD NOT) называть, например, «/É» и «/É/Å», где É — «LATIN CAPITAL LETTER E» (U+0045), за которой следует «COMBINING ACUTE ACCENT» (U+0301), а Å — «LATIN CAPITAL LETTER A WITH RING ABOVE» (U+00C5).
Каждая часть пакета ДОЛЖНА (SHALL) иметь MIME-тип носителя, определённый в RFC 2046, для идентификации типа содержимого этой части пакета; он состоит из типа носителя верхнего уровня и подтипа, при необходимости уточнённых набором параметров. Типы носителя OPC-специфичных частей пакета, определённых в настоящем документе, НЕ ДОЛЖНЫ (SHALL NOT) содержать параметры.
Типы носителя для частей пакета, определённых в настоящем документе, перечислены в приложении E.
Часть пакета МОЖЕТ (MAY) иметь подсказку роста.
Иногда часть пакета в физическом пакете изменяется и должна стать больше. Для некоторых физических форматов создание нового физического пакета, содержащего увеличенную часть пакета, является дорогостоящей операцией. Чтобы позволить части пакета увеличиваться на месте, перемещая как можно меньше байтов, подсказка роста МОЖЕТ (MAY) использоваться для резервирования места при отображении в конкретный физический формат.
Содержимое XML в частях пакета и потоках, определённых в настоящем документе (в частности, поток Media Types, часть Core Properties, части XML Signature цифровой подписи и части Relationships), ДОЛЖНО (SHALL) соответствовать следующему:
a) Содержимое XML ДОЛЖНО (SHALL) быть закодировано с использованием UTF-8 или UTF-16. Если какая-либо часть пакета содержит декларацию кодировки, определённую в 4.3.3 спецификации XML 1.0, эта декларация НЕ ДОЛЖНА (SHALL NOT) указывать кодировку, отличную от UTF-8 или UTF-16.
b) Спецификация XML 1.0 допускает использование определений типа документа (DTD), которые позволяют осуществлять атаки отказа в обслуживании, обычно посредством метода раскрытия внутренних сущностей. Для снижения этой потенциальной угрозы декларации DTD НЕ ДОЛЖНЫ (SHALL NOT) использоваться в XML-разметке, определённой в настоящем документе.
c) XML-документы ДОЛЖНЫ (SHALL) соответствовать пространствам имён XML.
d) Содержимое XML ДОЛЖНО (SHALL) быть допустимым по схеме, как определено W3C XML Schema Structures и W3C XML Schema Datatypes, относительно соответствующей схемы XSD, определённой в приложении C настоящего документа. В частности, содержимое XML НЕ ДОЛЖНО (SHALL NOT) содержать элементы или атрибуты из пространств имён, которые явно не определены в соответствующей схеме XSD, если только схема XSD не допускает присутствия элементов или атрибутов из любого пространства имён в определённых местах XML-разметки.
e) Содержимое XML НЕ ДОЛЖНО (SHALL NOT) содержать элементы или атрибуты из пространств имён «xml» или «xsi», если только они явно не определены в схеме XSD или иными средствами, описанными в настоящем документе.
Настоящий документ предоставляет схему pack как способ использовать IRI (RFC 3987) для ссылок на ресурсы частей пакета внутри пакета.
Схемы представлены в IRI префиксом перед двоеточием. Хорошо известный пример — «http».
ПРИМЕР Пример IRI в схеме pack:
«pack://http%3c,,www.openxmlformats.org,my.container/a/b/foo.xml»
Подстрока между двойной косой чертой и первой одиночной косой чертой представляет IRI в схеме http для пакета, преобразованный для возможности встраивания в IRI в схеме pack.
Ссылки извне пакета являются абсолютными IRI схемы pack, тогда как ссылки изнутри являются относительными IRI, разрешаемыми в абсолютные IRI этой схемы.
Настоящий документ определяет конкретную схему, используемую для обращения к частям пакета: схему pack. IRI, использующий схему pack, называется IRI pack.
Синтаксис IRI pack определён в EBNF (см. RFC 5234) следующим образом:
pack_IRI = "pack://" iauthority [ "/" | ipath ]
iauthority = *( iunreserved | sub-delims | pct-encoded )
ipath = 1*( "/" isegment )
isegment = 1*( ipchar )
ipchar = <ipchar, see [RFC3987], Section 2.2>
iunreserved = <iunreserved, see [RFC3987], Section 2.2>
sub-delims = <sub-delims, see [RFC3986], Section 2.2>
pct-encoded = <pct-encoded, see [RFC3986], Section 2.1>
Компонент полномочий (iauthority) содержит встроенный IRI, указывающий на пакет. (Процедуру преобразования IRI пакета, позволяющую встроить его в IRI pack как компонент полномочий, см. в 6.3.4.) Компонент полномочий НЕ ДОЛЖЕН (SHALL NOT) ссылаться на пакет, встроенный в другой пакет.
ПРИМЕЧАНИЕ Определение компонента полномочий требует, чтобы символ двоеточия (:) экранировался как %3c. Однако в предложенной регистрации схемы pack по ошибке был использован неэкранированный символ двоеточия (:). Вследствие этой ошибки предварительная схема pack была зарегистрирована IANA как историческая схема. Схему pack можно просмотреть в реестре схем, поддерживаемом IANA (см. ссылку [8]).
Необязательный компонент пути (ipath) идентифицирует конкретную часть пакета внутри пакета. Если компонент пути отсутствует, ресурс, идентифицируемый IRI pack, представляет собой пакет в целом.
IRI pack может иметь компонент запроса (как указано в RFC 3986). Компонент запроса в IRI pack не используется при разрешении IRI в часть пакета.
IRI pack может иметь компонент фрагмента (как указано в RFC 3986). При наличии этот фрагмент применяется к любому ресурсу, который идентифицирует IRI pack.
ПРИМЕР 1 Использование IRI pack для идентификации части пакета
Следующий IRI идентифицирует часть пакета «/a/b/foo.xml» в ресурсе пакета «http://www.openxmlformats.org/my.container»:
«pack://http%3c,,www.openxmlformats.org,my.container/a/b/foo.xml»
ПРИМЕР 2 Эквивалентные IRI pack
Следующие IRI pack эквивалентны:
«pack://http%3c,,www.openxmlformats.org,my.container»
«pack://http%3c,,www.openxmlformats.org,my.container/»
ПРИМЕР 3 IRI pack с процентно закодированными символами
Следующий IRI идентифицирует часть пакета «/c/d/bar.xml» в пакете «http://myalias:pswr@www.my.com/containers.aspx?my.container»:
pack://http%3c,,myalias%3cpswr%40www.my.com,containers.aspx%3fmy.container/c/d/bar.xml
Для разрешения IRI pack в ресурс (либо пакет, либо часть пакета) ДОЛЖЕН (SHALL) использоваться следующий алгоритм:
a) Разобрать IRI pack на потенциальные три компонента: схему, полномочия, путь, а также любой идентификатор фрагмента.
b) В компоненте authority замените все запятые («,» ) косыми чертами («/»).
c) Выполните процентное декодирование ASCII-символов в полученном компоненте authority.
d) Полученный компонент authority ДОЛЖЕН (SHALL) быть допустимым IRI для пакета в целом. В противном случае IRI pack является недопустимым.
e) Если компонент пути пуст, IRI pack разрешается в пакет в целом и процесс разрешения завершён.
f) Непустой компонент пути ДОЛЖЕН (SHALL) быть допустимым именем части пакета. В противном случае IRI pack является недопустимым.
g) IRI pack разрешается в часть пакета с этим именем в пакете, идентифицированном компонентом authority.
ПРИМЕР. Разрешение IRI pack в ресурс
Дан IRI pack:
"pack://http%3c,,www.my.com,packages.aspx%3fmy.package/a/b/foo.xml"
Компоненты:
"<authority>= http%3c,,www.my.com,packages.aspx%3fmy.package"
"<path>= /a/b/foo.xml"
преобразуются в IRI пакета:
"http://www.my.com/packages.aspx?my.package"
и путь:
"/a/b/foo.xml"
Следовательно, этот IRI ссылается на часть пакета с именем "/a/b/foo.xml" в пакете со следующим IRI:
"http://www.my.com/packages.aspx?my.package".
Следующий алгоритм ДОЛЖЕН (SHALL) использоваться для формирования IRI pack из абсолютного IRI целого пакета и имени части пакета:
a) Удалите идентификатор фрагмента из абсолютного IRI пакета, если он присутствует.
b) Выполните процентное кодирование всех знаков процента («%»), вопросительных знаков («?»), знаков «at» («@»), двоеточий («:») и запятых («,» ) в IRI пакета.
c) Замените все косые черты («/») запятыми («,» ) в полученной строке.
d) Добавьте полученную строку к строке "pack://".
e) Добавьте косую черту («/») к полученной строке. Сформированная строка представляет IRI pack с пустым компонентом пути.
f) Используя эту сформированную строку как базовый IRI, а имя части пакета как относительную ссылку, примените правила, определённые в RFC 3986, для разрешения относительных ссылок относительно базового IRI.
ПРИМЕР. Формирование IRI pack
Дан IRI пакета:
"http://www.my.com/packages.aspx?my.package"
и имя части пакета:
"/a/foo.xml"
IRI pack имеет вид:
"pack://http%3c,,www.my.com,packages.aspx%3fmy.package/a/foo.xml"
Два IRI pack ДОЛЖНЫ (SHALL) рассматриваться как эквивалентные, если:
a) компоненты схемы побайтно идентичны после преобразования обоих в нижний регистр; и
b) IRI, декодированные, как описано в 6.3.3, из компонентов authority, эквивалентны (правила эквивалентности определяются схемой), как указано в RFC 3986; и
c) компоненты пути являются эквивалентными именами частей пакета, как указано в 6.2.2.
ПРИМЕЧАНИЕ. В некоторых сценариях, таких как кэширование или запись частей пакета в пакет, необходимо определить, эквивалентны ли два IRI pack, не разрешая их.
Относительные ссылки в частях пакета ДОЛЖНЫ (SHALL) разрешаться, как указано в RFC 3986 (5 «Разрешение ссылок»), с расширениями RFC 3987 (6.5 «Относительные ссылки IRI»).
Настоящий документ не вводит изменений в процедуру разрешения, но в приложении A вводится предлагаемый метод предварительной обработки для формирования относительных ссылок.
В этом подпункте определена процедура определения базовых IRI для разрешения относительных ссылок внутри частей пакета в пакетах.
ПРИМЕЧАНИЕ. RFC 3986, 5.1 «Установление базового URI», устанавливает четыре общих метода, в порядке приоритета, для определения базовых IRI при разрешении относительных ссылок. Процедура этого подпункта задаёт метод, специфичный для OPC, соответствующий второму общему методу (RFC 3986, 5.1.2 «Базовый URI от инкапсулирующей сущности»).
Базовый IRI зависит от того, где эта ссылка находится в пакете. Этот подпункт охватывает случай, когда относительная ссылка находится в части пакета, не являющейся частью Relationships. В 6.5.2 рассматривается случай, когда относительная ссылка находится в части Relationships.
Базовым IRI ДОЛЖЕН (SHALL) быть IRI pack, сформированный из IRI пакета и имени части пакета, в которой находится относительная ссылка.
ПРИМЕР
Рассмотрим часть пакета /a/b/foo.xml в пакете, расположенном по адресу
"http://www.mysite.com/my.package"
Базовый IRI имеет вид
"pack://http%3c,,www.mysite.com,my.package/a/b/foo.xml"
В этом подпункте приведены примеры разрешения относительных ссылок. Для каждого примера в этом подпункте рассматриваются три случая.
Случай 1: базовый IRI является IRI pack, "pack://http%3c,,www.mysite.com,my.package/a/b/foo.xml", который сформирован из абсолютного IRI пакета и имени части пакета.
Случай 2: базовый IRI является IRI pack, "pack://http%3c,,www.mysite.com,my.package/", который создан из абсолютного IRI пакета.
Случай 3: базовым IRI является абсолютный IRI пакета, "http://www.mysite.com/my.package".
/b/bar.xml"Случай 1: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/a/b/foo.xml".
Поскольку эта относительная ссылка начинается с символа косой черты, компонент пути базового IRI ("/a/b/foo.xml") игнорируется алгоритмом из 5.2.2 RFC 3986. Схема и authority результирующего IRI совпадают со схемой и authority базового IRI pack. Таким образом, результирующий IRI имеет вид:
"pack://http%3c,,www.mysite.com,my.package/b/bar.xml"
Случай 2: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/".
Аналогично, компонент пути базового IRI ("/") игнорируется. Остальное совпадает.
Случай 3: базовый IRI имеет вид "http://www.mysite.com/my.package".
Аналогично, компонент пути базового IRI ("/my.package") игнорируется. Таким образом, результирующий IRI имеет вид:
"http://www.mysite.com/b/bar.xml"
bar.xml"Случай 1: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/a/b/foo.xml".
Поскольку эта относительная ссылка не начинается с символа косой черты, компонент пути базового IRI ("/a/b/foo.xml") и компонент пути относительной ссылки ("bar.xml") объединяются. Процедура объединения из 5.2.3 RFC 3986 сначала удаляет "foo.xml" из компонента пути базового IRI и выдаёт "/a/b/bar.xml". Таким образом, результирующий IRI имеет вид:
"pack://http%3c,,www.mysite.com,my.package/a/b/bar.xml"
Случай 2: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/".
Аналогично, компонент пути базового IRI ("/") и компонент пути относительной ссылки ("bar.xml") объединяются. Процедура объединения выдаёт "/bar.xml". Таким образом, результирующий IRI имеет вид:
"pack://http%3c,,www.mysite.com,my.package/bar.xml"
Случай 3: базовый IRI имеет вид "http://www.mysite.com/my.package".
Аналогично, компонент пути базового IRI ("/my.package") и компонент пути относительной ссылки ("bar.xml") объединяются. Процедура объединения сначала удаляет "my.package" из компонента пути базового IRI и выдаёт "/bar.xml". Таким образом, результирующий IRI имеет вид:
"http://www.mysite.com/bar.xml"
./bar.xml"Случай 1: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/a/b/foo.xml".
Как и в 6.4.3.3, процедура объединения удаляет "foo.xml" из компонента пути базового IRI и выдаёт "/a/b/./bar.xml". Но процедура remove_dot_segments из 5.2.4 RFC 3986 удаляет "./" и выдаёт "/a/b/bar.xml". Таким образом, результирующий IRI имеет вид:
"pack://http%3c,,www.mysite.com,my.package/a/b/bar.xml"
Случай 2: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/".
Процедура объединения выдаёт "/./bar.xml", но процедура remove_dot_segments удаляет "./" и выдаёт "/bar.xml". Таким образом, результирующий IRI имеет вид:
"pack://http%3c,,www.mysite.com,my.package/bar.xml"
Случай 3: базовый IRI имеет вид "http://www.mysite.com/my.package".
Аналогично, компонент пути базового IRI ("/my.package") и компонент пути относительной ссылки ("./bar.xml") объединяются. Процедура объединения сначала удаляет "my.package" из компонента пути базового IRI и выдаёт "/./bar.xml". Но процедура remove_dot_segments удаляет "./" и выдаёт "/bar.xml". Таким образом, результирующий IRI имеет вид:
"http://www.mysite.com/bar.xml"
../bar.xml"Случай 1: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/a/b/foo.xml".
Процедура объединения выдаёт "/a/b/../bar.xml", но процедура remove_dot_segments удаляет "b/..". Таким образом, результирующий IRI имеет вид:
"pack://http%3c,,www.mysite.com,my.package/a/bar.xml"
Случай 2: базовый IRI имеет вид "pack://http%3c,,www.mysite.com,my.package/".
Процедура объединения выдаёт "/../bar.xml", но процедура remove_dot_segments заменяет "/../" на "/". Таким образом, результирующий IRI имеет вид:
"pack://http%3c,,www.mysite.com,my.package/bar.xml"
Случай 3: базовый IRI имеет вид "http://www.mysite.com/my.package".
Аналогично, компонент пути базового IRI ("/my.package") и компонент пути относительной ссылки ("../bar.xml") объединяются. Процедура объединения сначала удаляет "my.package" из компонента пути базового IRI и выдаёт "/../bar.xml". Процедура remove_dot_segments заменяет "/../" на "/" и выдаёт "/bar.xml". Результирующий IRI имеет вид:
"http://www.mysite.com/bar.xml"
Части пакета могут содержать ссылки на другие части пакета и на ресурсы вне пакета. Эти ссылки представляются внутри ссылающейся части пакета способами, специфичными для типа носителя части пакета, то есть в произвольной разметке или кодировке, определённой приложением. Тем самым ссылки между частями пакета скрываются от приложений, которые не понимают типы носителей частей пакета, содержащих такие ссылки.
Настоящий документ вводит косвенный механизм для описания ссылок от частей пакета на другие части пакета или внешние ресурсы, а именно связи. Связи представляют соединения от исходной части пакета или исходного пакета к целевой части пакета или целевому ресурсу. Связи от частей пакета называются связями частей пакета, тогда как связи от пакетов называются связями пакетов. Связи позволяют непосредственно обнаруживать соединение без просмотра содержимого части пакета, поэтому они независимы от схем, специфичных для содержимого, и быстро разрешаются.
Существуют два режима цели для разрешения относительных ссылок на цели. Разрешение во внутреннем режиме цели предоставляет части пакета, а во внешнем режиме цели — внешние ресурсы.
Связи имеют идентификаторы связей. Эти идентификаторы позволяют отличать связи друг от друга. Идентификатор также может использоваться для связывания цели связи с определённой точкой в исходной части пакета (например, для представления гиперссылки) посредством встраивания идентификатора связи в этой точке.
Связь имеет тип связи.
Связи представляются в XML в частях Relationships. Если сам пакет или какая-либо часть пакета является источником одной или нескольких связей, имеется связанная с ним часть Relationships. Эта часть содержит перечень связей для источника. Пространство имён Relationships и типы связей для частей пакета, определённых в настоящем документе, перечислены в приложении E.
Связи имеют вторую важную функцию: предоставление дополнительной информации о частях пакета без изменения их содержимого. Следует отметить, что в некоторых сценариях требуется присоединить информацию к существующей части пакета, не изменяя её; например, поскольку часть пакета зашифрована и не может быть расшифрована либо поскольку она подписана цифровой подписью и её изменение сделало бы подпись недействительной.
| Тип носителя: | "application/vnd.openxmlformats-package.relationships+xml" |
|---|---|
| Корневое пространство имён: |
"http://schemas.openxmlformats.org/package/2006/relationships" |
Каждый набор связей, имеющих общий источник, представляется частью Relationships. Связей от части Relationships или к ней быть НЕ ДОЛЖНО (SHALL NOT).
Часть Relationships ДОЛЖНА (SHALL) быть либо частью Relationships пакета (6.5.2.2), либо частью Relationships части пакета (6.5.2.3).
Часть Relationships пакета ДОЛЖНА (SHALL) быть частью Relationships, содержащей связи пакета и никакие другие связи.
Имя части Relationships пакета ДОЛЖНО (SHALL) быть /_rels/.rels.
Если в части Relationships пакета имеется относительная ссылка, базовый IRI зависит от режима цели связи. Если режим цели является внешним, базовым IRI ДОЛЖЕН (SHALL) быть абсолютный IRI пакета. Если режим цели является внутренним, базовым IRI ДОЛЖЕН (SHALL) быть IRI pack, созданный из абсолютного IRI пакета.
ПРИМЕР Рассмотрим часть Relationships пакета для пакета, расположенного по адресу http://www.mysite.com/my.package.
Если режим цели является внешним, базовый IRI:
"http://www.mysite.com/my.package"
Если режим цели является внутренним, базовый IRI:
"pack://http%3c,,www.mysite.com,my.package/"
Часть Relationships части пакета ДОЛЖНА (SHALL) быть частью Relationships, содержащей связи части пакета от одной и той же исходной части пакета и никакие другие связи.
Имя части Relationships части пакета ДОЛЖНО (SHALL) быть образовано из имени исходной части пакета добавлением .rels в конец последнего сегмента I18N и вставкой сегмента I18N «_rels» непосредственно перед последним сегментом I18N.
ПРИМЕР 1 Если имя исходной части пакета равно /foo, имя части Relationships части пакета равно /_rels/foo.rels. И наоборот, если имя части пакета равно /_rels/foo.rels, она является частью Relationships части пакета для исходной части пакета /foo. Если имя исходной части пакета равно /foo/bar.xml, имя части Relationships части пакета равно /foo/_rels/bar.xml.rels. И наоборот, если имя части пакета равно /foo/_rels/bar.xml.rels, она является частью Relationships части пакета для исходной части пакета /foo/bar.xml.
Если в части Relationships части пакета имеется относительная ссылка, базовый IRI зависит от режима цели связи. Если режим цели является внешним, базовым IRI ДОЛЖЕН (SHALL) быть абсолютный IRI пакета. Если режим цели является внутренним, базовым IRI ДОЛЖЕН (SHALL) быть IRI pack, созданный из абсолютного IRI пакета и имени исходной части пакета.
ПРИМЕР 2 Рассмотрим часть Relationships части пакета /a/b/_rels/foo.xml.rels в пакете, расположенном по адресу
"http://www.mysite.com/my.package"
Если режим цели является внешним, базовый IRI:
"http://www.mysite.com/my.package"
Если режим цели является внутренним, базовый IRI:
"pack://http%3c,,www.mysite.com,my.package/a/b/foo.xml"
Содержимое части Relationships ДОЛЖНО (SHALL) быть XML-документом. После удаления всех расширений процессором MCE, как указано в ECMA-376-3, часть Relationships ДОЛЖНА (SHALL) быть XML-документом, допустимым по схеме opc-relationships.xsd (C.5). Для этой обработки MCE конфигурация разметки ДОЛЖНА (SHALL) быть пустой, а конфигурация приложения ДОЛЖНА (SHALL) содержать только пространство имён Relationships.
Выходной документ, полученный в результате любой обработки MCE части Relationships, НЕ ДОЛЖЕН (SHALL NOT) содержать атрибут
xml:base, как установлено XML Base.
Части Relationships МОГУТ (MAY) использовать механизмы версионирования и расширяемости, определённые в ECMA-376-3, для включения элементов и атрибутов, взятых из других пространств имён XML.
RelationshipsЭлемент Relationships является корневым элементом части Relationships. Он является контейнером для нуля или более элементов
Relationship. Он не имеет атрибутов. Определением W3C XML Schema модели содержимого этого элемента является сложный тип CT_Relationships, определённый в схеме opc-relationships.xsd (C.5).
RelationshipЭлемент Relationship ДОЛЖЕН (SHALL) представлять связь. Источником связи ДОЛЖЕН (SHALL) быть либо пакет, либо часть пакета, с которой ассоциирована часть Relationships, содержащая этот элемент Relationship.
| Атрибуты | Описание |
|---|---|
TargetMode | Этот атрибут задаёт режим цели связи. Этот атрибут является необязательным, а значением по умолчанию является Возможными значениями этого атрибута являются |
Target | Этот атрибут задаёт цель связи. Этот атрибут является обязательным. Если значение атрибута Диапазон значений этого атрибута ДОЛЖЕН (SHALL) быть таким, как определено простым типом |
Type | Этот атрибут задаёт тип связи. Этот атрибут является обязательным. Типы связей можно сравнивать для определения того, имеют ли два элемента ПРИМЕР 1 Диапазон значений этого атрибута ДОЛЖЕН (SHALL) быть таким, как определено простым типом |
| Атрибуты | Описание |
|---|---|
Id | Этот атрибут задаёт идентификатор связи. Значение атрибута Этот атрибут является обязательным. ПРИМЕР 2 Диапазон значений этого атрибута ДОЛЖЕН (SHALL) быть таким, как определено простым типом |
Определением W3C XML Schema модели содержимого этого элемента является сложный тип CT_Relationship, определённый в схеме opc-relationships.xsd (C.5).
Рассмотрим пакет, расположенный по адресу http://www.example.com/ex.opc. Предположим, что пакет содержит часть Relationships /_rels/.rels. Эта часть Relationships является частью Relationships пакета, которая связана со всем пакетом.
Также предположим, что содержимое этой части Relationships пакета представляет собой XML-документ, показанный ниже:
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship
Target="a.xml"
Id="IDI1"
Type="http://example.com/relTypeInt1"/>
<Relationship
Target="a.xml"
TargetMode="External"
Id="IDE1"
Type="http://example.com/relTypeExt1"/>
</Relationships>
Два элемента Relationship в этой части Relationships пакета задают две связи. Источником каждой связи является пакет.
Первая связь:
a.xml — это IRI pack (pack://http%3c,,www.example.com,ex.opc), созданный из IRI пакета (http://www.example.com/ex.opc).a.xml является pack://http%3c,,www.example.com,ex.opc/a.xml. Таким образом, целью этой связи является часть пакета "/a.xml" в данном пакете.http://example.com/relTypeInt1.Вторая связь:
a.xml является IRI (http://www.example.com/ex.opc) пакета.http://www.example.com/a.xml.http://example.com/relTypeExt1.Рассмотрим пакет, расположенный по адресу http://www.example.com/ex.opc. Предположим, что пакет содержит часть Relationships /foo/_rels/test.xml.rels. Эта часть Relationships является частью Relationships части пакета, источником которой является часть пакета /foo/test.xml.
Также предположим, что содержимое этой части Relationships части пакета представляет собой XML-документ, показанный ниже:
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship
Target="b.xml"
Id="IDI2"
Type="http://example.com/relTypeInt2"/>
<Relationship
Target="b.xml"
TargetMode="External"
Id="IDE2"
Type="http://example.com/relTypeExt2"/>
</Relationships>
Два элемента Relationship в этой части Relationships части пакета задают две связи. Источником каждой связи является часть пакета /foo/test.xml.
Первая связь:
pack://http%3c,,www.example.com,ex.opc/foo/test.xml) является IRI pack, созданным из IRI (http://www.example.com/ex.opc) пакета и имени части пакета /foo/test.xml.b.xml является pack://http%3c,,www.example.com,ex.opc/foo/b.xml. Таким образом, целью этой связи является часть пакета /foo/b.xml в данном пакете.http://example.com/relTypeInt2.Вторая связь:
http://www.example.com/ex.opc) пакета.http://www.example.com/b.xml.http://example.com/relTypeExt2.Часть пакета Digital Signature Origin (10.4.2) является целью связи пакета, которая хранится в части Relationships пакета /_rels/.rels.
ПРИМЕР 1
Элемент Relationship, представляющий связь пакета с частью пакета Digital Signature Origin:
<Relationship Id="rId4"
Type="http://schemas.openxmlformats.org/package/2006/relationships/
digital-signature/origin"
Target="_xmlsignatures/origin.sigs"/>
Соединение от Digital Signature Origin к части пакета Digital Signature XML Signature представляется связью части пакета, которая хранится в части Relationships части пакета /_xmlsignatures/_rels/origin.sigs.rels.
ПРИМЕР 2
XML-документ, представляющий содержимое /_xmlsignatures/_rels/origin.sigs.rels:
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship
Target="sig1.xml"
Id="rId1"
Type="http://schemas.openxmlformats.org/package/2006/relationships/
digital-signature/signature"/>
</Relationships>
Связи могут иметь в качестве целей ресурсы вне пакета, расположенные по абсолютному адресу, и ресурсы, расположенные относительно текущего местоположения пакета. Следующая часть Relationships задаёт связи, соединяющие пакет или часть пакета с pic1.jpg по внешнему абсолютному адресу и с my_house.jpg по внешнему адресу относительно местоположения пакета:
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships"
<Relationship
TargetMode="External"
Id="A9EFC627517BC"
Target="http://www.example.com/images/pic1.jpg"
Type="http://www.example.com/external-resource"/>
<Relationship
TargetMode="External"
Id="A5EFC797514BC"
Target="images/my_house.jpg"
Type="http://www.example.com/external-resource"/>
</Relationships>
Следующая часть Relationships содержит две связи, каждая из которых использует уникальное значение Id. Связи имеют общую цель Target, но разные типы связей.
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship
Target="Signature.xml"
Id="A5FFC797514BC"
Type="http://schemas.openxmlformats.org/package/2006/
relationships/digital-signature/signature"/>
<Relationship
Target="Signature.xml"
Id="B5F32797CC4B7"
Type="http://www.example.com/internal-resource"/>
</Relationships>
В настоящем разделе вводится физическая модель пакета в терминах физического формата (например, формата ZIP) и отображения абстрактной модели пакета в этот физический формат. Дополнительное обсуждение вопросов проектирования физической модели пакета приведено в приложении F.
В настоящем разделе также устанавливаются общие руководящие принципы и общие механизмы для физических моделей пакетов и определяется физическая модель пакета на основе ZIP. Механизм перемежения (см. 7.2.4) является таким общим механизмом.
Пример физического пакета описан в H.3.
Многие физические форматы имеют возможности, которые частично соответствуют компонентам абстрактной модели пакета. При отображении абстрактной модели пакета в физический формат СЛЕДУЕТ (SHOULD) использовать любые сходства возможностей абстрактной модели пакета и физического формата, применяя при этом уровни отображения для предоставления дополнительных возможностей, которые изначально отсутствуют в физическом формате. Например, некоторые физические форматы хранят части пакета как отдельные файлы в файловой системе; в этом случае целесообразно отображать многие имена частей пакета непосредственно в соответствующие имена физических файлов.
Физическая модель пакета ОБЯЗАНА (REQUIRED) представлять пакеты, части пакета (включая части Relationships), имена частей пакета и типы носителя частей пакета, но НЕ ОБЯЗАНА (NOT REQUIRED) представлять подсказку роста.
Физический формат может иметь встроенный механизм сопоставления типов носителей с частями пакета. Например, поле Content-Type в заголовке MIME-сущности сопоставляет тип носителя с этой MIME-сущностью. Для такого физического формата отображения из абстрактной модели пакета СЛЕДУЕТ (SHOULD) выполнять с использованием встроенного механизма.
Для всех остальных физических форматов пакет ДОЛЖЕН (SHALL) включать XML-поток, называемый в настоящем документе потоком Media Types. Поток Media Types НЕ ДОЛЖЕН (SHALL NOT) представлять часть пакета. Этот поток НЕ ДОЛЖЕН (SHALL NOT) быть адресуемым посредством URI. Однако он МОЖЕТ (MAY) быть перемежён в физическом пакете с использованием тех же механизмов, которые используются для перемежения частей пакета.
Содержимое потока Media Types ДОЛЖНО (SHALL) быть XML-документом, действительным по схеме opc-contentTypes.xsd (C.2). Этот XML-документ ДОЛЖЕН (SHALL) иметь элемент верхнего уровня Types, а также один или несколько дочерних элементов
Default и Override. Элементы Default ДОЛЖНЫ (SHALL) определять отображения по умолчанию расширений имён частей пакета на типы носителей. Элементы Override ДОЛЖНЫ (SHALL) задавать типы носителей для частей пакета, которые не охватываются отображениями по умолчанию либо не соответствуют им. Обратите внимание, что элементы Default могут использоваться для уменьшения числа элементов Override для части пакета.
Для всех частей пакета, кроме частей Relationships (6.5.2), поток Media Types ДОЛЖЕН (SHALL) задавать одно из следующего:
Default, либоOverride, либоDefault, так и соответствующий элемент Override; в этом случае элемент Override имеет приоритет.Для любого заданного расширения НЕ ДОЛЖНО (SHALL NOT) быть более одного элемента Default, а для любого заданного имени части пакета НЕ ДОЛЖНО (SHALL NOT) быть более одного элемента Override.
Порядок элементов Default и Override в потоке Media Types НЕ ДОЛЖЕН (SHALL NOT) быть значимым.
Поток Media Types МОЖЕТ (MAY) определять элементы Default, даже если их не использует ни одна часть пакета.
Поток Media Types НЕ ДОЛЖЕН (SHALL NOT) использовать механизмы версионирования и расширяемости, определённые в ECMA-376-3.
TypesЭлемент Types ДОЛЖЕН (SHALL) быть корневым элементом XML-документа, содержащегося в потоке Media Types.
Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Определением W3C XML Schema модели содержимого этого элемента является сложный тип CT_Types, определённый в схеме opc-contentTypes.xsd (C.2).
DefaultЭлемент Default ДОЛЖЕН (SHALL) задавать отображения по умолчанию расширений имён частей пакета на типы носителей.
| Атрибуты | Описание |
|---|---|
Extension | Этот атрибут задаёт строку в качестве расширения файла. Этот атрибут обязателен. Элемент Допустимые значения данного атрибута определяются простым типом |
ContentType | Этот атрибут задаёт тип носителя с использованием синтаксиса, определённого в RFC 7231, 3.1.1.1. Этот атрибут обязателен. Указанный тип носителя ДОЛЖЕН (SHALL) применяться ко всем соответствующим частям пакета (если он не переопределён элементами Допустимые значения данного атрибута определяются простым типом |
Определением W3C XML Schema модели содержимого этого элемента является сложный тип CT_Default, определённый в схеме opc-contentTypes.xsd (C.2).
OverrideЭлемент Override ДОЛЖЕН (SHALL) задавать тип носителя для части пакета, которая не охватывается отображениями по умолчанию либо не соответствует им.
| Атрибуты | Описание |
|---|---|
ContentType | Этот атрибут задаёт тип носителя с использованием синтаксиса, определённого в RFC 7231, 3.1.1.1. Этот атрибут обязателен. Указанный тип носителя ДОЛЖЕН (SHALL) применяться к части пакета, имя которой задано в атрибуте Допустимые значения данного атрибута определяются простым типом |
PartName | Этот атрибут задаёт имя части пакета. Этот атрибут обязателен. Элемент Диапазон значений данного атрибута ДОЛЖЕН (SHALL) быть таким, как определено простым типом |
Определением W3C XML Schema модели содержимого этого элемента является сложный тип CT_Override, определённый в схеме opc-contentTypes.xsd (C.2).
ПРИМЕР Разметка потока Media Types
<Types
xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Default Extension="txt" ContentType="text/plain" />
<Default Extension="jpeg" ContentType="image/jpeg" />
<Default Extension="picture" ContentType="image/gif" />
<Override PartName="/a/b/sample4.picture" ContentType="image/jpeg" />
</Types>
Элемент Types является контейнером для типов носителей, используемых в пакете.
Ниже приведён примерный перечень частей пакета и соответствующих им типов носителей, определённых приведённой выше разметкой потока Media Types.
| Имя части пакета | Тип носителя |
|---|---|
| /a/b/sample1.txt | text/plain |
| /a/b/sample2.jpg | image/jpeg |
| /a/b/sample3.picture | image/gif |
| /a/b/sample4.picture | image/jpeg |
При добавлении новой части пакета в пакет реализатор пакета ДОЛЖЕН (SHALL) обеспечить, чтобы тип носителя этой части пакета был задан в потоке Media Types. Для этого реализатор пакета ДОЛЖЕН (SHALL) выполнить следующие действия:
Override.Extension элементов
Default в потоке Media Types. Сравнение ДОЛЖНО (SHALL) быть ASCII-независимым от регистра сопоставлением.Default с соответствующим атрибутом Extension, то тип носителя новой части пакета ДОЛЖЕН (SHALL) быть сравнен со значением атрибута ContentType. Сравнение ДОЛЖНО (SHALL) быть независимым от регистра и учитывать каждый символ независимо от его роли в грамматике типа содержимого RFC 7231.
Override.Default с соответствующим атрибутом Extension, в поток Media Types ДОЛЖЕН (SHALL) быть добавлен новый элемент Default или
Override.Чтобы получить тип носителя части пакета, реализатор пакета ДОЛЖЕН (SHALL) выполнить следующие действия:
PartName элементов Override. Сравнение ДОЛЖНО (SHALL) быть ASCII-независимым от регистра сопоставлением.Override с соответствующим атрибутом PartName, вернуть значение его атрибута
ContentType. Дальнейшие действия не требуются.Override с соответствующим атрибутом PartName, то:
Default потока Media Types, сопоставляя расширение со значением атрибута Extension. Сравнение ДОЛЖНО (SHALL) быть ASCII-независимым от регистра сопоставлением.Default с соответствующим атрибутом Extension, вернуть значение его атрибута
ContentType. Дальнейшие действия не требуются.ПРИМЕЧАНИЕ Для соответствующего требованиям пакета либо элемент Override находится на шаге b), либо элемент Default находится на шаге c).
При отображении абстрактного пакета в физический пакет поток данных части пакета или поток Media Types МОЖЕТ (MAY) быть разбит на фрагменты. Каждый фрагмент ДОЛЖЕН (SHALL) представлять поток данных, который может быть пустым. Позднее фрагменты могут быть объединены, образуя исходный поток, на основе имён фрагментов, как установлено в 7.2.5.2.
Физический пакет МОЖЕТ (MAY) содержать как перемежаемые, так и неперемежаемые части пакета. Перемежаемые части пакета ДОЛЖНЫ (SHALL) быть частями пакета, разбитыми на фрагменты. Неперемежаемые части пакета ДОЛЖНЫ (SHALL) быть частями пакета, не разбитыми на фрагменты.
Фрагменты ДОЛЖНЫ (SHALL) существовать только в физическом пакете и НЕ ДОЛЖНЫ (SHALL NOT) быть адресуемыми в абстрактной модели пакета. Фрагменты ДОЛЖНЫ (SHALL) располагаться в естественном порядке их номеров и МОГУТ (MAY) быть перемежены с фрагментами других частей пакета либо с неперемежаемыми частями пакета.
Благодаря обеспечиваемым преимуществам производительности реализаторам пакетов СЛЕДУЕТ (SHOULD) поддерживать перемежение, однако они НЕ ОБЯЗАНЫ (NOT REQUIRED) это делать.
Дополнительное обсуждение преимуществ перемежения для производительности приведено в F.3.
Отображение абстрактного пакета в физический пакет ДОЛЖНО (SHALL) использовать логические элементы в качестве промежуточных объектов, чтобы допустить перемежение (7.2.4). Если часть пакета или поток Media Types перемежается, каждый созданный из него фрагмент ДОЛЖЕН (SHALL) быть логическим элементом; в противном случае часть пакета или поток Media Types ДОЛЖЕН (SHALL) быть логическим элементом. См. рисунок 1.

Имена логических элементов ДОЛЖНЫ (SHALL) быть строками Unicode. Поддержка символов, не входящих в ASCII, не требуется.
Если логический элемент является фрагментом, его имя ДОЛЖНО (SHALL) иметь суффиксы следующего синтаксиса:
SuffixName = "/" "[" PieceNumber "]" [".last"] ".piece"
PieceNumber = "0" | NonZeroDigit [1*Digit]
Digit = "0" | NonZeroDigit
NonZeroDigit = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
Префикс имени логического элемента является результатом удаления суффикса, если таковой имеется, из имени логического элемента.
Эквивалентность префиксов и суффиксов ДОЛЖНА (SHALL) определяться ASCII-независимым от регистра сопоставлением. Логические имена ДОЛЖНЫ (SHALL) быть эквивалентными, если их префиксы и суффиксы эквивалентны. Физический пакет НЕ ДОЛЖЕН (SHALL NOT) содержать эквивалентные имена логических элементов.
Имена логических элементов, использующие суффиксные имена, ДОЛЖНЫ (SHALL) образовывать полную последовательность тогда и только тогда, когда:
/[0].piece» и заканчиваются «/[n].last.piece», а также включают фрагмент для каждого номера фрагмента от 0 до n без пропусков, когда номера фрагментов интерпретируются как десятичные целые значения.Имена неперемежаемых частей пакета ДОЛЖНЫ (SHALL) отображаться на имена логических элементов, имеющие эквивалентный префикс и не имеющие суффикса.
Имена перемежаемых частей пакета ДОЛЖНЫ (SHALL) отображаться на полную последовательность имён логических элементов с эквивалентным префиксом.
Отображение имён логических элементов и имён элементов физического пакета ДОЛЖНО (SHALL) быть специфичным для конкретного физического пакета.
Имя логического элемента без суффикса ДОЛЖНО (SHALL) отображаться на имя части пакета с эквивалентным префиксом при условии, что имя префикса соответствует синтаксису имени части пакета.
Полная последовательность имён логических элементов ДОЛЖНА (SHALL) отображаться на имя части пакета, равное префиксу имени логического элемента, имеющего суффикс «/[0].piece», при условии, что имя префикса соответствует синтаксису имени части пакета.
Физический пакет МОЖЕТ (MAY) содержать имена логических элементов и полные последовательности имён логических элементов, которые не могут быть отображены на имя части пакета, поскольку имя логического элемента не соответствует грамматике именования частей пакета. Такие логические элементы или полные последовательности логических элементов НЕ ДОЛЖНЫ (SHALL NOT) отображаться на части пакета.
ПРИМЕР Имя логического элемента «/[trash]/0000.dat» не может быть отображено на элемент части пакета. Следовательно, этот логический элемент не представляет часть пакета.
Настоящий документ определяет отображение для формата ZIP-файла.
ZIP-файл, представляющий физический пакет, ДОЛЖЕН (SHALL) удовлетворять требованиям приложения B и СЛЕДУЕТ (SHOULD) рекомендациям приложения B.
Элементы физических пакетов ZIP-файлов ДОЛЖНЫ (SHALL) быть элементами ZIP. Следует отметить, что, когда пользователи распаковывают ZIP-пакет, они видят набор файлов и папок, отражающий части пакета и их иерархическую структуру именования.
В таблице 1 показаны различные компоненты абстрактной модели пакета и соответствующее им физическое представление в ZIP-файле.
| Компонент абстрактной модели пакета | Физическое представление |
|---|---|
| Пакет | ZIP-файл |
| Часть пакета | Элемент ZIP |
| Имя части пакета | Хранится в заголовке элемента (и, при необходимости, в центральном каталоге ZIP). Правила преобразования см. в 7.3.4. |
| Тип носителя части пакета | Хранится в элементе ZIP, содержащем поток Media Types, описанный в 7.2.3.2. Подробные сведения об имени элемента ZIP см. в 7.3.7. |
| Подсказка роста | Заполнение, зарезервированное в поле Extra в локальном заголовке, предшествующем элементу. Подробное описание структуры данных см. в 7.3.8. |
Каждая неперемежаемая часть пакета ДОЛЖНА (SHALL) быть представлена одним элементом ZIP. Каждый фрагмент перемежаемой части пакета, как описано в 7.2.4, ДОЛЖЕН (SHALL) быть представлен одним элементом ZIP.
Имена элементов ZIP ДОЛЖНЫ (SHALL) соответствовать ZIP Appnote. При отображении абстрактного пакета в ZIP-файл ДОЛЖНЫ (SHALL) использоваться только имена элементов ZIP в ASCII. Имена элементов ZIP ДОЛЖНЫ (SHALL) быть уникальными в пределах данного ZIP-файла.
ПРИМЕР. Следующие имена элементов ZIP в ZIP-файле отображаются на фрагменты частей пакета и целые части пакета:
"spine.xml/[0].piece"
"pages/page0.xml"
"spine.xml/[1].piece"
"pages/page1.xml"
"spine.xml/[2].last.piece"
"pages/page2.xml"
Для каждого логического элемента процесс отображения имён логических элементов на имена элементов ZIP ДОЛЖЕН (SHALL) включать следующие шаги в указанном порядке:
Имена всех элементов ZIP ДОЛЖНЫ (SHALL) отображаться на имена логических элементов, за исключением элементов, которые не представляют файлов.
ПРИМЕЧАНИЕ. Для некоторых файловых систем ZIP Appnote содержит дополнительные сведения об элементах ZIP, распознаваемых как файлы.
Для каждого элемента ZIP процесс отображения имён элементов ZIP на имена логических элементов ДОЛЖЕН (SHALL) включать следующие шаги в указанном порядке:
Настоящий документ требует, чтобы заголовок файла в структуре центрального каталога ZIP-файла НЕ ДОЛЖЕН (SHALL NOT) превышать 65 535 байтов (см. «F. Central directory structure» в ZIP Appnote). Каждый заголовок файла содержит имя элемента ZIP, поле Extra (включая байты, представляющие подсказку роста, как указано в 6.2.4), File Comment и ещё 42 байта, представляющие различные поля.
Реализаторам пакетов СЛЕДУЕТ (SHOULD) ограничивать именование частей пакета с учётом ограничений файловой системы при именовании частей пакета, предназначенных для хранения в качестве элементов ZIP.
ПРИМЕР. Примеры этих ограничений:
ZIP-пакеты НЕ ДОЛЖНЫ (SHALL NOT) включать шифрование, описанное в ZIP Appnote.
ZIP-пакеты НЕ ДОЛЖНЫ (SHALL NOT) использовать алгоритмы сжатия, кроме DEFLATE, как описано в ZIP Appnote.
В ZIP-файлах поток Media Types ДОЛЖЕН (SHALL) храниться в элементе с именем "[Content_Types].xml" или, в случае перемежаемого упорядочения, в полной последовательности элементов ZIP "[Content_Types].xml/[0].piece", "[Content_Types].xml/[1].piece", … и "[Content_Types].xml/[n].last.piece".
ПРИМЕЧАНИЕ. Символы квадратных скобок «[» и «]» выбраны для имени потока Media Types специально потому, что эти символы нарушают грамматику именования частей пакета, тем самым усиливая требование о том, что имена элементов ZIP, сформированные из потока Media Types, всегда отличимы от имён, сформированных из имён частей пакета.
Дополнительное пространство, предлагаемое подсказкой роста, хранится в поле Extra, как определено в ZIP Appnote. Если подсказка роста используется для перемежаемой части пакета, заполнение хранится в поле Extra элемента ZIP, представляющего первый фрагмент части пакета.
Формат поля Extra элемента ZIP при его использовании для подсказок роста приведён в таблице 2.
| Компонент поля | Размер | Значение |
|---|---|---|
| Идентификатор заголовка (Header ID) | 2 байта | 0xA220 |
| Длина дополнительного поля (Length of Extra field) | 2 байта | Длина в байтах остальных компонентов поля Extra: длина компонента «Сигнатура» + длина компонента «Начальная длина заполнения» + длина компонента «Заполнение» |
| Сигнатура для проверки (Signature) | 2 байта | 0xA028 |
| Начальная длина заполнения (Padding Initial Length) | 2 байта | Длина в байтах компонента «Заполнение», установленная реализатором пакета при создании элемента |
| Заполнение (Padding) | переменный | Заполняется байтами 0x00 |
Пользователи могут связывать основные свойства с пакетами. Такие основные свойства позволяют пользователям получать и задавать для пакетов общеизвестные и распространённые наборы метаданных свойств. Основные свойства и спецификации, которые их описывают, приведены в таблице 3:
| Свойство | Спецификация | Описание |
|---|---|---|
| category | Open Packaging Conventions | Категоризация содержимого данного пакета. |
| contentStatus | Open Packaging Conventions | Статус содержимого. |
| created | DCMI Metadata Terms | Дата создания ресурса. |
| creator | Dublin Core Metadata Element Set | Сущность, несущая основную ответственность за создание содержимого ресурса. |
| description | Dublin Core Metadata Element Set | Описание содержимого ресурса. |
| identifier | Dublin Core Metadata Element Set | Однозначная ссылка на ресурс в заданном контексте. |
| keywords | Open Packaging Conventions | Разделённый набор ключевых слов для поддержки поиска и индексирования. Обычно это список терминов, недоступных в других свойствах. |
| language | Dublin Core Metadata Element Set | Язык интеллектуального содержимого ресурса. Обратите внимание, что IETF RFC 3066 содержит руководство по кодированию для представления языков. |
| lastModifiedBy | Open Packaging Conventions | Пользователь, выполнивший последнее изменение. Идентификация зависит от среды. |
| lastPrinted | Open Packaging Conventions | Дата и время последней печати. |
| modified | DCMI Metadata Terms | Дата, в которую ресурс был изменён. |
| revision | Open Packaging Conventions | Номер редакции. |
| Свойство | Спецификация | Описание |
|---|---|---|
| subject | Dublin Core Metadata Element Set | Тема содержимого ресурса. |
| title | Dublin Core Metadata Element Set | Имя, данное ресурсу. |
| version | Open Packaging Conventions | Номер версии. |
Пакет ДОЛЖЕН (SHALL) содержать не более одной части основных свойств.
На часть основных свойств в составе пакета ДОЛЖНА (SHALL) ссылаться связь основных свойств от пакета, как указано в приложении E. Пакет ДОЛЖЕН (SHALL) содержать не более одной связи основных свойств.
Типом носителя части основных свойств ДОЛЖЕН (SHALL) быть тип носителя части основных свойств, определённый в приложении E.
Содержимое части основных свойств ДОЛЖНО (SHALL) быть XML-документом, действительным относительно схемы opc-coreProperties.xsd (C.3).
Если не указано иное, элементы, представляющие часть основных свойств, ДОЛЖНЫ (SHALL) относиться к пространству имён, определённому в приложении E.
ПРИМЕР
Ниже приведён пример части основных свойств.
<coreProperties
xmlns="http://schemas.openxmlformats.org/package/2006/metadata/
core-properties"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<dc:creator>Alan Shen</dc:creator>
<dcterms:created xsi:type="dcterms:W3CDTF">
2005-06-12
</dcterms:created>
<dc:title>OPC Core Properties</dc:title>
<dc:description>Spec defines the schema for OPC Core Properties and
their location within the package</dc:description>
<dc:language>eng</dc:language>
<version>1.0</version>
<lastModifiedBy>Alan Shen</lastModifiedBy>
<dcterms:modified xsi:type="dcterms:W3CDTF">2005-11-
23</dcterms:modified>
<contentStatus>Reviewed</contentStatus>
<category>Specification</category>
</coreProperties>
В этом примере dc:creator, dcterms:created, dc:title, dc:description, dc:language, version, lastModifiedBy, dcterms:modified, contentStatus и category являются элементами основных свойств.
Часть основных свойств НЕ ДОЛЖНА (SHALL NOT) содержать элементы или атрибуты пространства имён совместимости разметки, определённого в ECMA-376-3.
ПРИМЕЧАНИЕ Возможности управления версиями и расширяемости реализуются путём создания новой части и использования связи с новым типом, указывающей от части основных свойств на новую часть. Настоящий документ не устанавливает требований или руководств для новых частей либо типов связей, используемых для расширения основных свойств. Такое руководство содержится в ISO/IEC TR 30114-1 (см. ссылку [4]).
corePropertiesЭлемент coreProperties является корневым элементом части основных свойств.
Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Дочерними элементами этого элемента ДОЛЖНЫ (SHALL) быть элементы основных свойств, определённые в 8.3.4.
Содержимое этого элемента определено комплексным типом CT_CoreProperties, который определён в схеме opc-coreProperties.xsd (C.3).
Элементами основных свойств ДОЛЖНЫ (SHALL) быть элементы, представляющие основные свойства. Элементы основных свойств не повторяются. Они могут быть пустыми или отсутствовать.
Настоящий документ допускает элементы creator, description, identifier, language, subject и title в качестве элементов основных свойств. Если какой-либо из этих элементов включён, он ДОЛЖЕН (SHALL) соответствовать ISO 15836-1.
ПРИМЕЧАНИЕ Эти элементы принадлежат пространству имён «http://purl.org/dc/elements/1.1/».
Эти элементы НЕ ДОЛЖНЫ (SHALL NOT) иметь дочерних элементов и НЕ ДОЛЖНЫ (SHALL NOT) иметь атрибут xsi:type или атрибут xml:lang.
ПРИМЕР
Пример в 8.3.1 содержит четыре элемента из ISO 15836-1.
<dc:creator>Alan Shen</dc:creator>
<dc:title>OPC Core Properties</dc:title>
<dc:description>Spec defines the schema for OPC Core Properties and their
location within the package</dc:description>
<dc:language>eng</dc:language>
Настоящий документ допускает элементы created и modified в качестве элементов основных свойств. Если включён один или оба этих элемента, они ДОЛЖНЫ (SHALL) соответствовать ISO 15836-2.
ПРИМЕЧАНИЕ Эти элементы принадлежат пространству имён «http://purl.org/dc/terms/».
Настоящий документ вводит дополнительные требования. Эти элементы НЕ ДОЛЖНЫ (SHALL NOT) иметь дочерних элементов и НЕ ДОЛЖНЫ (SHALL NOT) иметь атрибут xml:lang. Эти элементы ДОЛЖНЫ (SHALL) иметь атрибут xsi:type, значение которого равно
"dcterms:W3CDTF" (см. ссылку [2]), а dcterms ДОЛЖЕН (SHALL) быть объявлен как префикс пространства имён Dublin Core "http://purl.org/dc/terms/".
ПРИМЕР
Пример в 8.3.1 содержит два элемента из DCMI Metadata Terms.
<dcterms:created xsi:type="dcterms:W3CDTF">2005-06-12</dcterms:created>
<dcterms:modified xsi:type="dcterms:W3CDTF">2005-11-23</dcterms:modified>
categoryЭлемент category задаёт категорию содержимого пакета.
Этот элемент может иметь такие значения, как «Resume», «Letter», «Financial Forecast», «Proposal» и «Technical Presentation». Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Содержимое этого элемента определено простым типом xsd:string.
Определение этого элемента в W3C XML Schema приведено в схеме opc-coreProperties.xsd (C.3).
ПРИМЕР
Элемент category приведён в примере в 8.3.1.
<category>Specification</category>
contentStatusЭлемент contentStatus задаёт статус содержимого пакета.
Этот элемент может иметь такие значения, как «Draft», «Reviewed» и «Final». Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Содержимое этого элемента определено простым типом xsd:string.
Определение этого элемента в W3C XML Schema приведено в схеме opc-coreProperties.xsd (C.3).
ПРИМЕР
Пример в 8.3.1 содержит
<contentStatus>Reviewed</contentStatus>
keywordsЭлемент keywords задаёт ключевые слова для содержимого пакета.
Элемент keywords ДОЛЖЕН (SHALL) допускать необязательный атрибут xml:lang, определённый в XML 1.0. Элемент keywords имеет смешанную модель содержимого, так что каждое ключевое слово может быть по отдельности заключено в элемент value, имеющий атрибут
xml:lang.
ПРИМЕР Следующий экземпляр элемента keywords содержит ключевые слова на английском (Канада), английском (США) и французском (Франция):
<keywords xml:lang="en-US">
color
<value xml:lang="en-CA">colour</value>
<value xml:lang="fr-FR">couleur</value>
</keywords>
Определение модели содержимого этого элемента в W3C XML Schema приведено в комплексном типе CT_Keywords, который определён в схеме opc-coreProperties.xsd (C.3).
valueЭлемент value задаёт ключевое слово для содержимого пакета.
Элемент value ДОЛЖЕН (SHALL) допускать необязательный атрибут xml:lang, определённый спецификацией XML 1.0.
Определением модели содержимого этого элемента в W3C XML Schema является комплексный тип CT_Keyword, определённый в схеме opc-coreProperties.xsd (C.3).
lastModifiedByЭлемент lastModifiedBy задаёт, кто изменил содержимое пакета.
ПРИМЕР 1 Имя, адрес электронной почты или идентификатор работника.
Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Содержимое этого элемента определено простым типом xsd:string.
Определение этого элемента в W3C XML Schema приведено в схеме opc-coreProperties.xsd (C.3).
ПРИМЕР 2 Пример в 8.3.1 содержит
<lastModifiedBy>Alan Shen</lastModifiedBy>
lastPrintedЭлемент lastPrinted задаёт, когда содержимое пакета было напечатано в последний раз.
Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Содержимое этого элемента определено простым типом xsd:dateTime.
Определение этого элемента в W3C XML Schema приведено в схеме opc-coreProperties.xsd (C.3).
ПРИМЕР 1 Пример в 8.3.1 содержит
<lastPrinted>2017-01-01</lastPrinted>
ПРИМЕР 2
<lastPrinted>2017-04-17T14:20:10+09:00</lastPrinted>
revisionЭлемент revision задаёт номер редакции содержимого пакета.
Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Содержимое этого элемента определено простым типом xsd:string.
Определение этого элемента в W3C XML Schema приведено в схеме opc-coreProperties.xsd (C.3).
ПРИМЕР
<revision>4</revision>
versionЭлемент version задаёт версию содержимого пакета.
Этот элемент НЕ ДОЛЖЕН (SHALL) иметь атрибутов.
Содержимое этого элемента определено простым типом xsd:string.
Определение этого элемента в W3C XML Schema приведено в схеме opc-coreProperties.xsd (C.3).
ПРИМЕР
<version>1.0</version>
Части миниатюр ДОЛЖНЫ (SHALL) быть частями изображений, идентифицируемыми либо связью части пакета, либо связью пакета. Эта связь ДОЛЖНА (SHALL) иметь тип связи для частей миниатюр, определённый в приложении E.
ПРИМЕЧАНИЕ Части миниатюр могут использоваться, чтобы помогать конечным пользователям идентифицировать части пакета или пакет в целом.
Пакет МОЖЕТ (MAY) содержать разметку, указывающую, что части пакета были подписаны. В настоящем разделе описывается, как OPC применяет Рекомендацию W3C «XML-Signature Syntax and Processing» при формировании этой разметки.
Цифровые подписи представляются отдельными частями пакета OPC. Иными словами, цифровые подписи отделены от подписываемого содержимого.
Настоящий документ вводит разметку для указания времени создания подписи. Эта разметка содержится в элементе
Object.
Настоящий документ вводит разметку (10.5.8.2) и алгоритм преобразования (10.6) для гибкого определения подписываемых связей.
Настоящий документ предписывает использование элемента Manifest в качестве дочернего элемента элемента Object для перечисления подписываемых частей пакета.
Предполагается наличие политики подписи, определяющей, какие части пакета и связи подписывать.
Настоящий раздел обеспечивает гибкость при определении подписываемого содержимого, тем самым позволяя изменять другое содержимое. Дополнительные сведения о том, как определять подписываемое содержимое, приведены в 10.5.6 и 10.5.8.2.
Цифровые подписи в пакетах используют часть пакета Digital Signature Origin, части пакета Digital Signature XML Signature и части пакета Digital Signature Certificate. Типы связей и типы носителей, относящиеся к использованию цифровых подписей в пакетах, определены в приложении E. Следует отметить, что пример связи от части пакета Digital Signature Origin к части пакета Digital Signature XML Signature приведён в 6.5.4.3.
На рисунке 2 показан подписанный пакет с частями пакета подписи, подписанными частями пакета и частью пакета сертификата X.509. Пример части пакета Digital Signature Origin имеет связи с двумя частями пакета Digital Signature XML Signature, каждая из которых содержит подпись. Подписи относятся к подписанным частям пакета.

Часть пакета Digital Signature Origin является начальной точкой для навигации по подписям в пакете. В пакете НЕ ДОЛЖНО (SHALL NOT) существовать более одной части пакета Digital Signature Origin, и эта часть пакета ДОЛЖНА (SHALL) быть целью связи Digital Signature Origin, определённой в приложении E, от пакета. Эта часть пакета ДОЛЖНА (SHALL) существовать, если пакет содержит какие-либо части пакета Digital Signature XML Signature, а в противном случае ДОЛЖНА (SHALL) быть необязательной. Содержимое части пакета Digital Signature Origin ДОЛЖНО (SHALL) быть пустым.
Часть пакета Digital Signature XML Signature ДОЛЖНА (SHALL) содержать подпись, представленную разметкой цифровой подписи (см. 10.5). Каждая часть пакета Digital Signature XML Signature ДОЛЖНА (SHALL) быть целью связи Digital Signature, определённой в приложении E, от части пакета Digital Signature Origin. Пакет МОЖЕТ (MAY) содержать более одной части пакета Digital Signature XML Signature.
ПРИМЕЧАНИЕ Если будущие версии настоящего документа определят различные типы связей для пересмотренных частей пакета подписи, пакеты смогут содержать различную информацию о подписях для разных версий. Для проверки ссылок и проверки подписей можно будет выбрать соответствующие цифровые подписи XML.
Содержимым части пакета Digital Signature Certificate ДОЛЖЕН (SHALL) быть цифровой сертификат, определённый в X.509.
Сертификат X.509, используемый для проверки подписи, может:
Если сертификат представлен отдельной частью пакета в пакете, этот сертификат ДОЛЖЕН (SHALL) быть целью связи части пакета Digital Signature Certificate, определённой в приложении E, от соответствующей части пакета Digital Signature XML Signature. Часть пакета, содержащая сертификат, МОЖЕТ (MAY) быть подписана. Тип носителя части пакета Digital Signature Certificate и связь, нацеленная на неё от части пакета Digital Signature XML Signature, определены в приложении E. Часть пакета Digital Signature Certificate МОЖЕТ (MAY) использоваться для создания более одной подписи. Часть пакета Digital Signature Certificate СЛЕДУЕТ (SHOULD) сделать целью по меньшей мере одной связи Digital Signature Certificate от части пакета Digital Signature XML Signature.
Содержимое части пакета Digital Signature XML Signature ДОЛЖНО (SHALL) быть XML-документом. Применяются требования, определённые в 6.2.5.
Содержимое каждой части пакета Digital Signature XML Signature ДОЛЖНО (SHALL) быть XML-документом, действительным по схеме xmldsig-core-schema.xsd, как определено в Рекомендации W3C «XML-Signature Syntax and Processing», и opc-digSig.xsd (см. C.4). Алгоритмы ДОЛЖНЫ (SHALL) идентифицироваться URI, как показано в этой рекомендации W3C или RFC 6931.
Подразделы с 10.5.2 по 10.5.18 охватывают специфические для OPC ограничения и расширения «XML-Signature Syntax and Processing». Подразделы предусмотрены для элементов, определённых для специфического использования OPC, либо для которых OPC вводит ограничения. Элементы, определённые в «XML-Signature Syntax and Processing» (такие как X509Certificate), для которых ниже не предусмотрен подраздел, разрешены в пакетах OPC без ограничений.
Специфические для OPC элементы принадлежат пространству имён Digital Signatures (см. таблицу E.1). Их определения схемы доступны через C.4.
ПРИМЕЧАНИЕ Общий пример разметки цифровой подписи XML приведён в разделе 2 «XML-Signature Syntax and Processing». Полный пример специфической для OPC цифровой подписи приведён в 10.7.
Часть пакета Digital Signature XML Signature НЕ ДОЛЖНА (SHALL NOT) содержать элементы или атрибуты пространства имён совместимости разметки, определённого в ECMA-376-3.
SignatureНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.1 «XML-Signature Syntax and Processing».
Элемент Signature ДОЛЖЕН (SHALL) содержать ровно один специфический для OPC элемент Object и ноль или более определяемых приложением элементов Object.
SignedInfoНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.3 «XML-Signature Syntax and Processing».
Элемент SignedInfo ДОЛЖЕН (SHALL) содержать ровно один элемент Reference, ссылающийся на специфический для OPC элемент
Object. Элемент SignedInfo также МОЖЕТ (MAY) содержать один или более элементов Reference, ссылающихся на другие объекты данных.
CanonicalizationMethodНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.3.1 «XML-Signature Syntax and Processing».
Пакеты ДОЛЖНЫ (SHALL) использовать только следующие методы каноникализации:
SignatureMethodНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.3.2 «XML-Signature Syntax and Processing».
Элемент SignatureMethod СЛЕДУЕТ (SHOULD) задавать один из следующих алгоритмов:
Длина ключа алгоритмов RSA SHA ДОЛЖНА (SHALL) быть равна 1 024 битам или более и СЛЕДУЕТ (SHOULD), чтобы она была равна 2 048 битам или более. СЛЕДУЕТ (SHOULD) использовать алгоритмы ECDSA, приведённые в NIST SP 800-56A Rev. 3, приложении D (см. ссылку [6]). Максимальная целевая криптостойкость СЛЕДУЕТ (SHOULD) быть не менее 128.
Этот элемент НЕ СЛЕДУЕТ (SHOULD NOT) задавать:
Этот элемент МОЖЕТ (MAY) задавать другие алгоритмы.
ReferenceНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.3.3 «XML-Signature Syntax and Processing».
Reference как дочерний элемент элемента SignedInfoЭлементы
Reference внутри элемента SignedInfo ДОЛЖНЫ (SHALL) ссылаться только на элементы в пределах того же элемента
Signature и СЛЕДУЕТ (SHOULD), чтобы они ссылались на элемент Object.
Reference как дочерний элемент элемента ManifestКаждый элемент Reference, являющийся дочерним элементом элемента Manifest, ДОЛЖЕН (SHALL) ссылаться только на части пакета в пакете. Значением атрибута URI ДОЛЖНО (SHALL) быть имя части пакета без идентификатора фрагмента.
Ссылки на части пакета ДОЛЖНЫ (SHALL) включать тип носителя части пакета как компонент запроса. Синтаксис относительной ссылки имеет следующий вид:
/page1.xml?ContentType=value
где value — тип носителя целевой части пакета без учёта регистра.
ПРИМЕР Ссылка на часть пакета с компонентом запроса
В следующем примере тип носителя:
application/vnd.openxmlformats-
package.relationships+xml
URI="/_rels/document.xml.rels?ContentType=application/vnd.openxmlformats-
package.relationships+xml"
TransformНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.3.3.4 «XML-Signature Syntax and Processing».
ДОЛЖЕН (SHALL) быть задан один из следующих алгоритмов преобразования:
Transform, представляющий преобразование RelationshipsЭлемент Transform представляет преобразование Relationships, если значение его атрибута Algorithm равно:
"http://schemas.openxmlformats.org/package/2006/RelationshipTransform"
Такой элемент Transform ДОЛЖЕН (SHALL):
RelationshipReference или RelationshipsGroupReference;Manifest;Transform, задающий XML Canonicalization (c14n) или XML Canonicalization with Comments (c14n with comments).Преобразование Relationships описывает, как элементы Relationship из части пакета Relationships выбираются для подписания. Для конкретной части пакета Relationships ДОЛЖНО (SHALL) быть задано только одно преобразование Relationships. Подробные сведения об алгоритме приведены в 10.6.
RelationshipReferenceЭлемент RelationshipReference задаёт, какой элемент Relationship подписывается, и ДОЛЖЕН (SHALL) встречаться только как дочерний элемент элемента Transform, представляющего преобразование Relationships (10.5.8.2). Этот элемент специфичен для OPC.
| Атрибуты | Описание |
|---|---|
SourceId (ссылка на связь) | Значение атрибута Id элемента Relationship, на который ссылаются, в данной части пакета Relationships.Этот атрибут является обязательным. Диапазон значений этого атрибута ДОЛЖЕН (SHALL) быть определён простым типом
xsd:string W3C XML Schema Datatypes. |
Определение W3C XML Schema модели содержимого этого элемента является сложным типом
CT_RelationshipReference, который определён в схеме opc-digSig.xsd (C.2).
RelationshipsGroupReferenceЭлемент RelationshipsGroupReference задаёт, что подписывается группа элементов Relationship с указанным значением атрибута Type. Этот элемент ДОЛЖЕН (SHALL) встречаться только как дочерний элемент элемента Transform, представляющего преобразование Relationships (10.5.8.2). Этот элемент специфичен для OPC.
| Атрибуты | Описание |
|---|---|
SourceType (тип связи) | Значение атрибута Type элементов Relationship в данной части пакета Relationships.Этот атрибут является обязательным. Диапазон значений этого атрибута ДОЛЖЕН (SHALL) быть определён простым типом
xsd:string W3C XML Schema Datatypes. |
Определение W3C XML Schema модели содержимого этого элемента является сложным типом
CT_RelationshipsGroupReference, который определён в схеме opc-digSig.xsd (C.2).
DigestMethodНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.3.3.5 «XML-Signature Syntax and Processing».
Элемент DigestMethod СЛЕДУЕТ (SHOULD) задавать один из следующих алгоритмов:
Этот элемент НЕ СЛЕДУЕТ (SHOULD NOT) задавать:
Этот элемент НЕ ДОЛЖЕН (SHALL NOT) задавать:
Этот элемент МОЖЕТ (MAY) задавать другие алгоритмы.
ObjectНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.5 «XML-Signature Syntax and Processing». Элемент Object ДОЛЖЕН (SHALL) быть либо специфичным для OPC, либо определяемым приложением.
ObjectСпецифический для OPC элемент Object ДОЛЖЕН (SHALL) содержать элемент Manifest, за которым следует элемент
SignatureProperties, и не содержать других элементов. Атрибут Id специфического для OPC элемента Object ДОЛЖЕН (SHALL) быть задан, а его значением ДОЛЖНО (SHALL) быть "idPackageObject".
ObjectОпределяемый приложением элемент Object задаёт информацию, определяемую приложением. Атрибут Id определяемого приложением элемента Object ДОЛЖЕН (SHALL) отсутствовать или иметь значение, отличное от "idPackageObject".
Реализациям СЛЕДУЕТ (SHOULD) избегать значений (таких как "idOfficeObject"), которые широко используются.
ManifestНастоящий документ вводит дополнительные требования к требованиям, определённым в 4.4 «XML-Signature Syntax and Processing», только когда элемент Manifest является дочерним элементом специфического для OPC элемента Object. Элементы
Reference в таком элементе Manifest ДОЛЖНЫ (SHALL) удовлетворять требованиям, определённым в 10.5.7.3.
SignaturePropertyНастоящий документ вводит дополнительные требования к требованиям, определённым в 5.2 «XML-Signature Syntax and Processing», только в случае, когда элемент SignatureProperty является дочерним элементом дочернего элемента SignatureProperties OPC-специфичного элемента Object. Такой элемент SignatureProperty ДОЛЖЕН (SHALL) задавать для атрибута Id значение "idSignatureTime", а также ДОЛЖЕН (SHALL) содержать элемент SignatureTime и не содержать других элементов. Значение атрибута Target такого элемента SignatureProperty ДОЛЖНО (SHALL) быть либо пустым, либо содержать ссылку на фрагмент значения атрибута Id корневого элемента Signature.
SignatureTimeЭлемент SignatureTime содержит заявленную метку даты/времени для подписи. Этот элемент является OPC-специфичным.
Этот элемент не имеет атрибутов.
Определением W3C XML Schema модели содержимого этого элемента является сложный тип
CT_SignatureTime, определённый в схеме opc-digSig.xsd (C.2).
FormatЭлемент Format задаёт формат метки даты/времени. Этот элемент является OPC-специфичным. Формат даты/времени ДОЛЖЕН (SHALL) соответствовать синтаксису, описанному в примечании W3C «Date and Time Formats» (см. ссылку [2]).
Этот элемент не имеет атрибутов.
Определением W3C XML Schema модели содержимого этого элемента является ST_Format, определённый в схеме opc-digSig.xsd (C.2).
ValueЭлемент Value ДОЛЖЕН (SHALL) содержать значение метки даты/времени. Этот элемент является OPC-специфичным. Значение ДОЛЖНО (SHALL) соответствовать формату, заданному в элементе Format.
Этот элемент не имеет атрибутов.
Определением W3C XML Schema модели содержимого этого элемента является ST_Value, определённый в схеме opc-digSig.xsd (C.2).
XPathЭлемент XPath НЕ ДОЛЖЕН (SHALL NOT) присутствовать. Следует отметить, что элемент XPath предназначен только для фильтрации XPath, которая в OPC запрещена.
Преобразование Relationships получает XML-документ из указанной части Relationships и преобразует его в другой XML-документ. Это преобразование ДОЛЖНО (SHALL) поддерживаться при формировании и проверке подписей.
Следует отметить, что выходной XML-документ затем канонизируется указанным алгоритмом канонизации.
Преобразование Relationships ДОЛЖНО (SHALL) иметь следующие шаги:
Шаг 1: Обработка инструкций версионирования
Обработайте часть Relationships, как указано в ECMA-376-3, где конфигурация разметки пуста, а конфигурация приложения содержит только пространство имён Relationships.
Шаг 2: Сортировка и выбор подписываемых связей
Relationship по значению Id в лексикографическом порядке с учётом регистра.Relationship, которые либо имеют значение Id, совпадающее со значением
SourceId элемента RelationshipReference, либо имеют значение Type, совпадающее со значением
SourceType элемента RelationshipGroupReference, заданного в преобразовании Relationships. Сопоставление выполняется без учёта регистра ASCII.ПРИМЕР Рассмотрим часть Relationships
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rlsps:Relationships
xmlns:rlsps="http://schemas.openxmlformats.org/package/2006/relationships"
xmlns:foo="http://example.com/foo">
<rlsps:Relationship Id="rId6" Type="http://../relationships/footnotes"
Target="footnotes.xml"/>
<rlsps:Relationship Id="rId8" Type="http://../relationships/header"
Target="header1.xml"/>
<rlsps:Relationship Id="rId32" Type="http://../relationships/image"
Target="media/image1.png"/>
<rlsps:Relationship Id="rId3" Type="http://../relationships/styles"
Target="styles.xml"/>
<rlsps:Relationship Id="rId21" Type="http://../relationships/image"
Target="media/image2.jpeg"/>
<rlsps:Relationship Id="rId12" Type="http://../relationships/header"
Target="header1.xml"/>
</rlsps:Relationships>
При Id="rId6" и Type="http://../relationships/image" шаг 2 формирует
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships
xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId21" Type="http://../relationships/image"
Target="media/image2.jpeg"/>
<Relationship Id="rId32" Type="http://../relationships/image"
Target="media/image1.png"/>
<Relationship Id="rId6" Type="http://../relationships/footnotes"
Target="footnotes.xml"/>
</Relationships>
Шаг 3: Подготовка к канонизации
TargetMode отсутствует у элемента Relationship, добавьте его со значением по умолчанию "Internal".Разметка цифровой подписи для пакетов показана в этом примере. Сведения о пространствах имён, используемых в этом примере, см. в приложении E. Следует отметить, что префикс пространства имён «pds» обозначает пространство имён OPC-специфичных элементов в цифровых подписях.
В этом примере имеются два элемента Object. Первый элемент Object является OPC-специфичным, поскольку значение его атрибута Id равно "idPackageObject". Второй элемент Object (в самом конце этого примера) является зависящим от приложения, поскольку значение его атрибута Id не равно "idPackageObject".
OPC-специфичный элемент Object содержит элемент Manifest, за которым следует элемент SignatureProperties. Элемент Manifest задаёт список частей пакета своими дочерними элементами Reference. Первый элемент
Reference ссылается на часть пакета "/document.xml" посредством значения атрибута URI. Второй элемент
Reference ссылается на часть Relationships "/_rels/document.xml.rels", исходной частью которой является "/document.xml".
Дочерние элементы этих элементов Reference задают используемые преобразование и метод вычисления дайджеста, а также полученные значения дайджеста. Следует отметить, что первым преобразованием для части Relationships является преобразование Relationships.
Элемент SignedInfo (в начале этого примера) ссылается на два элемента Object. OPC-специфичный элемент Object, включая его дочерние элементы Manifest и SignatureProperties, канонизируется, а затем подписывается. Определённый приложением элемент Object также подписывается.
Элемент SignatureValue содержит подпись, а элемент KeyInfo содержит сертификат X509.
<Signature Id="SignatureId" xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/
REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-
sha1"/>
<Reference
URI="#idPackageObject"
Type="http://www.w3.org/2000/09/xmldsig#Object">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/
REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>…</DigestValue>
</Reference>
<Reference
URI="#Application"
Type="http://www.w3.org/2000/09/xmldsig#Object">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/
REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>…</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>…</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>…</X509Certificate>
</X509Data>
</KeyInfo>
<Object Id="idPackageObject"
xmlns:pds="http://schemas.openxmlformats.org/
package/2006/digital-signature">
<Manifest>
<Reference URI="/document.xml?ContentType=application/
vnd.ms-document+xml">
<Transforms>
<Transform Algorithm="http://www.w3.org/TR/2001/
REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>…</DigestValue>
</Reference>
<Reference
URI="/_rels/document.xml.rels?ContentType=application/
vnd.openxmlformats-package.relationships+xml">
<Transforms>
<Transform Algorithm="http://schemas.openxmlformats.org/
package/2006/RelationshipTransform">
<pds:RelationshipReference SourceId="B1"/>
<pds:RelationshipReference SourceId="A1"/>
<pds:RelationshipReference SourceId="A11"/>
<pds:RelationshipsGroupReference SourceType=
"http://schemas.example.com/required-resource"/>
</Transform>
<Transform Algorithm="http://www.w3.org/TR/2001/
REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>…</DigestValue>
</Reference>
</Manifest>
<SignatureProperties>
<SignatureProperty Id="idSignatureTime" Target="#SignatureId">
<pds:SignatureTime>
<pds:Format>YYYY-MM-DDThh:mmTZD</pds:Format>
<pds:Value>2003-07-16T19:20+01:00</pds:Value>
</pds:SignatureTime>
</SignatureProperty>
</SignatureProperties>
</Object>
<Object Id="Application">…</Object>
</Signature>
При формировании пакетов с цифровой подписью ДОЛЖНЫ (SHALL) использоваться формирование ссылок и формирование подписей, как описано в 3.1 «XML-Signature Syntax and Processing», с некоторыми изменениями для OPC-специфичных конструкций, указанными в настоящем подпункте.
ПРИМЕЧАНИЕ Приведённые ниже шаги не применяются к формированию подписей, содержащих определённые приложением элементы Object.
Политика подписи определяет, какие части пакета и связи подписывать, а также преобразования и методы вычисления дайджеста, применимые в каждом случае.
Формирование ссылок:
Reference, следуя шагам в 3.1.1 «XML-Signature Syntax and Processing».Object, содержащий элемент Manifest как с дочерними элементами
Reference, полученными на предыдущем шаге, так и с дочерним элементом SignatureProperties , который, в свою очередь, содержит дочерний элемент SignatureTime.Object, следуя шагам в 3.1.1 «XML-Signature Syntax and Processing».Формирование ссылок ДОЛЖНО (SHALL) поддерживать следующие алгоритмы вычисления дайджеста:
Формирование ссылок НЕ СЛЕДУЕТ (SHOULD NOT) поддерживать
Формирование ссылок НЕ ДОЛЖНО (SHALL NOT) поддерживать
Формирование ссылок МОЖЕТ (MAY) поддерживать другие алгоритмы.
Формирование подписи:
Следуйте шагам в 3.1.2 «XML-Signature Syntax and Processing».
Формирование подписи ДОЛЖНО (SHALL) поддерживать следующие алгоритмы:
В случае алгоритмов RSA SHA формирование подписи ДОЛЖНО (SHALL) поддерживать длины ключей, большие или равные 2 048. Оно НЕ СЛЕДУЕТ (SHOULD NOT) поддерживать длины ключей менее 2 048 битов и НЕ ДОЛЖНО (SHALL NOT) поддерживать длины ключей менее 1 024 битов. В случае алгоритмов ECDSA формирование подписи СЛЕДУЕТ (SHOULD) поддерживать эллиптические кривые, определённые в FIPS 186-4 как P-256, P-384 и P-521, но НЕ СЛЕДУЕТ (SHOULD NOT) поддерживать P-224.
Формирование подписи НЕ СЛЕДУЕТ (SHOULD NOT) поддерживать:
Формирование подписи МОЖЕТ (MAY) поддерживать другие алгоритмы.
При проверке пакетов с цифровой подписью ДОЛЖНЫ (SHALL) использоваться проверка ссылок и проверка подписей, как описано в 3.2 «XML-Signature Syntax and Processing», с некоторыми изменениями для OPC-специфичных конструкций, указанными в настоящем подпункте.
ПРИМЕЧАНИЕ Приведённые ниже шаги не применяются к проверке подписей, содержащих определённые приложением элементы Object.
Сертификат, встроенный в элемент KeyInfo части XML Signature цифровой подписи, ДОЛЖЕН (SHALL) использоваться, если он указан.
Проверка ссылок:
Сначала проверьте ссылку на OPC-специфичный элемент Object, следуя шагам в 3.2.2 «XML-Signature Syntax and Processing».
Затем для каждой ссылки в элементе Manifest:
Проверка ссылок ДОЛЖНА (SHALL) поддерживать следующие алгоритмы вычисления дайджеста:
Проверка ссылок НЕ ДОЛЖНА (SHALL NOT) поддерживать
Проверка ссылок МОЖЕТ (MAY) поддерживать другие алгоритмы, включая
Проверка подписи:
Следуйте шагам в 3.2.2 «XML-Signature Syntax and Processing».
Проверка подписи ДОЛЖНА (SHALL) поддерживать следующие алгоритмы, заданные элементами SignatureMethod:
В случае алгоритмов RSA SHA проверка подписи ДОЛЖНА (SHALL) поддерживать длины ключей, большие или равные 2 048 битам. Она НЕ ДОЛЖНА (SHALL NOT) поддерживать длины ключей менее 1 024 битов. Она МОЖЕТ (MAY) поддерживать длины ключей, большие или равные 1 024 битам и менее 2 048 битов. В случае алгоритмов ECDSA проверка подписи ДОЛЖНА (SHALL) поддерживать эллиптические кривые, определённые в FIPS 186-4 как P-256, P-384 и P-521, но НЕ СЛЕДУЕТ (SHOULD NOT) поддерживать P-224.
Проверка подписи МОЖЕТ (MAY) поддерживать другие алгоритмы, включая:
Относительные ссылки доступны для ссылок на части пакета. Для ссылок на части пакета также используются строки Unicode, похожие на относительные ссылки, но не являющиеся ими в строгом смысле. Например, "\a.xml" не является относительной ссылкой, поскольку символ обратной косой черты не допускается в RFC 3986 или RFC 3987.
Некоторые реализации предусматривают предварительную обработку таких строк Unicode для замены их относительными ссылками. Эта предварительная обработка может включать некоторые из следующих действий (но не ограничивается ими):
Примеры строк Unicode, преобразованных в относительные ссылки, приведены ниже:
| Строка Unicode | Относительная ссылка |
|---|---|
/A B.xml | /A%20B.xml |
/%41/%61.xml | /A/a.xml |
/%25XY.xml | /%25XY.xml |
/%XY.xml | /%25XY.xml |
/%2541.xml | /%2541.xml |
/%2e/%2e/a.xml | /a.xml |
\a.xml | /a.xml |
\%41.xml | /A.xml |
/%D1%86.xml | /%D1%86.xml |
| Строка Unicode | Относительная ссылка |
|---|---|
\%2e/a.xml | /a.xml |
Настоящее приложение устанавливает требования и рекомендации относительно возможностей формата ZIP. ZIP-файл, представляющий физический пакет, ДОЛЖЕН (SHALL) удовлетворять установленным требованиям и также СЛЕДУЕТ (SHOULD) соблюдать установленные рекомендации.
Настоящее приложение имеет особое значение для реализаторов физических пакетов (потребляющих, формирующих или осуществляющих сквозную передачу), которые выбирают ZIP для представления физических пакетов.
Данные, описывающие файлы, хранящиеся в архиве, в значительной степени дублируются в локальных заголовках файлов (Local File Headers) и дескрипторах данных (Data Descriptors), а также в заголовках файлов (File headers) в записи центрального каталога (Central Directory Record). Чтобы ZIP-файл являлся физическим уровнем для пакета, реализатор пакета ДОЛЖЕН (SHALL) обеспечить, чтобы ZIP-файл содержал равные значения в соответствующих полях каждого заголовка файла в центральном каталоге и соответствующей пары локального заголовка файла и дескриптора данных, когда дескриптор данных существует, за исключением описанного в таблице B.5 для бита 3 флагов общего назначения.
Пакеты МОГУТ (MAY) содержать 4-байтовое значение сигнатуры 0x08074b50 в начале дескрипторов данных, непосредственно перед полем crc-32. Реализаторам пакетов СЛЕДУЕТ (SHOULD) уметь читать пакеты независимо от наличия сигнатуры.
Поля в таблицах настоящего подраздела содержат следующие значения:
«Да» — при потреблении пакета значение «Да» для поля в таблице настоящего приложения означает, что реализатор пакета НЕ ДОЛЖЕН (SHALL NOT) завершать работу с ошибкой при чтении ZIP-файла, содержащего эту запись или поле; однако поле МОЖЕТ (MAY) быть проигнорировано. При формировании пакета значение «Да» для поля в таблице настоящего приложения означает, что реализатор пакета ДОЛЖЕН (SHALL) записать эту запись или поле.
«Нет» — значение «Нет» для поля в таблице настоящего приложения означает, что реализатору пакета НЕ СЛЕДУЕТ (SHOULD NOT) использовать эту запись или поле.
«Необязательно» — значение «Необязательно» для записи в таблице настоящего приложения означает, что реализаторы пакетов МОГУТ (MAY) записывать эту запись при формировании.
«Частично, подробности ниже» — значение «Частично, подробности ниже» для записи в таблице настоящего приложения означает, что запись содержит поля, поддержка которых не требуется от реализаторов пакетов при формировании или потреблении. Требования определяются подробностями в соответствующей таблице.
«Используется только при необходимости» — значение «Используется только при необходимости», связанное с записью в таблице настоящего приложения, означает, что реализатор пакета ДОЛЖЕН (SHALL) использовать эту запись только при необходимости хранения данных в ZIP-файле.
Таблица B.1 устанавливает требования к формированию, потреблению и редактированию пакета в отношении отдельных записей верхнего уровня или полей, описанных в ZIP Appnote. Следует отметить, что в данном контексте редактирование означает изменение отдельных записей на месте. Спецификация формата может требовать от приложений редактирования вместо этого изменять содержимое в памяти и при каждом сохранении повторно записывать все части пакета и связи, чтобы поддерживать более строгий контроль использования записей ZIP.
| Наименование записи | Поддерживается при потреблении | Поддерживается при формировании | Сквозная передача при редактировании |
|---|---|---|---|
| Локальный заголовок файла | Да (частично, подробности ниже) | Да (частично, подробности ниже) | Да |
| Данные файла | Да | Да | Да |
| Дескриптор данных | Да | Необязательно | Необязательно |
| Заголовок расшифрования архива | Нет | Нет | Нет |
| Запись дополнительных данных архива | Нет | Нет | Нет |
| Структура центрального каталога: заголовок файла | Да (частично, подробности ниже) | Да (частично, подробности ниже) | Да |
| Структура центрального каталога: цифровая подпись | Да (игнорировать данные подписи) | Необязательно | Необязательно |
| Запись конца центрального каталога Zip64 V1 (начиная с версии спецификации 4.5) | Да (частично, подробности ниже) | Да (частично, подробности ниже, используется только при необходимости) | Необязательно |
| Запись конца центрального каталога Zip64 V2 (начиная с версии спецификации 6.2) | Нет | Нет | Нет |
| Локатор конца центрального каталога Zip64 | Да (частично, подробности ниже) | Да (частично, подробности ниже, используется только при необходимости) | Необязательно |
| Наименование записи | Поддерживается при потреблении | Поддерживается при формировании | Сквозная передача при редактировании |
|---|---|---|---|
| Запись конца центрального каталога | Да (частично, подробности ниже) | Да (частично, подробности ниже, используется только при необходимости) | Да |
Таблица B.2 устанавливает требования к формированию, потреблению и редактированию пакета в отношении отдельных компонентов записей, описанных в ZIP Appnote.
| Запись | Поле | Поддерживается при потреблении | Поддерживается при формировании | Сквозная передача при редактировании |
|---|---|---|---|---|
| Локальный заголовок файла | Сигнатура локального заголовка файла | Да | Да | Да |
| Версия, необходимая для извлечения | Да (частично, см. таблицу B.3) | Да (частично, см. таблицу B.3) | Да (частично, см. таблицу B.3) | |
| Флаг битов общего назначения | Да (частично, см. таблицу B.5) | Да (частично, см. таблицу B.5) | Да (частично, см. таблицу B.5) | |
| Метод сжатия | Да (частично, см. таблицу B.4) | Да (частично, см. таблицу B.4) | Да (частично, см. таблицу B.4) | |
| Время последнего изменения файла | Да | Да | Да | |
| Дата последнего изменения файла | Да | Да | Да | |
| Crc-32 | Да | Да | Да | |
| Сжатый размер | Да | Да | Да | |
| Несжатый размер | Да | Да | Да | |
| Длина имени файла | Да | Да | Да | |
| Длина дополнительного поля | Да | Да | Да | |
| Имя файла (переменного размера) | Да | Да | Да | |
| Дополнительное поле (переменного размера) | Да (частично, см. таблицу B.6) | Да (частично, см. таблицу B.6) | Да (частично, см. таблицу B.6) | |
| Структура центрального каталога: заголовок файла | Сигнатура заголовка файла центрального каталога | Да | Да | Да |
| Версия, создавшая файл: старший байт | Да | Да (0 = MS-DOS — значение публикации по умолчанию) | Да | |
| Версия, создавшая файл: младший байт | Да | Да | Да |
| Запись | Поле | Поддерживается при потреблении | Поддерживается при формировании | Сквозная передача при редактировании |
|---|---|---|---|---|
| Версия, необходимая для извлечения (подробности см. в таблице B.3) | Да (частично, см. таблицу B.3) | Да (1.0, 1.1, 2.0, 4.5) | Да | |
| Флаг битов общего назначения | Да (частично, см. таблицу B.5) | Да (частично, см. таблицу B.5) | Да (частично, см. таблицу B.5) | |
| Метод сжатия | Да (частично, см. таблицу B.4) | Да (частично, см. таблицу B.4) | Да (частично, см. таблицу B.4) | |
| Время последнего изменения файла (сквозная передача, без интерпретации) | Да | Да | Да | |
| Дата последнего изменения файла (сквозная передача, без интерпретации) | Да | Да | Да | |
| Crc-32 | Да | Да | Да | |
| Сжатый размер | Да | Да | Да | |
| Несжатый размер | Да | Да | Да | |
| Длина имени файла | Да | Да | Да | |
| Длина дополнительного поля | Да | Да | Да | |
| Длина комментария к файлу | Да | Да (всегда устанавливается в 0) | Да | |
| Начальный номер диска | Да (частично — без многодисковых архивов) | Да (всегда 1 диск) | Да (частично — без многодисковых архивов) | |
| Внутренние атрибуты файла | Да | Да | Да | |
| Внешние атрибуты файла (сквозная передача, без интерпретации) | Да | Да (значение MS DOS по умолчанию) | Да | |
| Относительное смещение локального заголовка | Да | Да | Да | |
| Имя файла (переменного размера) | Да | Да | Да | |
| Дополнительное поле (переменного размера) | Да (частично, см. таблицу B.6) | Да (частично, см. таблицу B.6) | Да (частично, см. таблицу B.6) | |
| Комментарий к файлу (переменного размера) | Да | Да (всегда устанавливается пустым) | Да | |
| Запись конца центрального каталога Zip64 V1 (начиная с версии спецификации 4.5, | Сигнатура конца центрального каталога Zip64 | Да | Да | Да |
| Размер конца центрального каталога zip64 | Да | Да | Да |
| Запись | Поле | Поддерживается при потреблении | Поддерживается при формировании | Сквозная передача при редактировании |
|---|---|---|---|---|
| используется только при необходимости) | Версия, создавшая файл: старший байт (сквозная передача, без интерпретации) | Да | Да (0 = MS-DOS — значение публикации по умолчанию) | Да |
| Версия, создавшая файл: младший байт | Да | Да (всегда 4.5 или выше) | Да | |
| Версия, необходимая для извлечения (подробности см. в таблице B.3) | Да (4.5) | Да (4.5) | Да (4.5) | |
| Номер данного диска | Да (частично — без многодисковых архивов) | Да (всегда 1 диск) | Да (частично — без многодисковых архивов) | |
| Номер диска с началом центрального каталога | Да (частично — без многодисковых архивов) | Да (всегда 1 диск) | Да (частично — без многодисковых архивов) | |
| Общее число записей в центральном каталоге на данном диске | Да | Да | Да | |
| Общее число записей в центральном каталоге | Да | Да | Да | |
| Размер центрального каталога | Да | Да | Да | |
| Смещение начала центрального каталога относительно номера начального диска | Да | Да | Да | |
| Сектор расширяемых данных Zip64 | Да | Нет | Да | |
| Локатор конца центрального каталога Zip64 (используется только при необходимости) | Сигнатура локатора конца центрального каталога Zip64 | Да | Да | Да |
| Номер диска с началом конца центрального каталога zip64 | Да (частично — без многодисковых архивов) | Да (всегда 1 диск) | Да (частично — без многодисковых архивов) | |
| Относительное смещение записи конца центрального каталога zip64 | Да | Да | Да | |
| Общее число дисков | Да (частично — без многодисковых архивов) | Да (всегда 1 диск) | Да (частично — без многодисковых архивов) | |
| Запись конца центрального каталога | Сигнатура конца центрального каталога | Да | Да | Да |
| Запись | Поле | Поддерживается при потреблении | Поддерживается при формировании | Сквозная передача при редактировании |
|---|---|---|---|---|
| Номер данного диска | Да (частично — без многодисковых архивов) | Да (всегда 1 диск) | Да (частично — без многодисковых архивов) | |
| Номер диска с началом центрального каталога | Да (частично — без многодискового архива) | Да (всегда 1 диск) | Да (частично — без многодискового архива) | |
| Общее число записей в центральном каталоге на данном диске | Да | Да | Да | |
| Общее число записей в центральном каталоге | Да | Да | Да | |
| Размер центрального каталога | Да | Да | Да | |
| Смещение начала центрального каталога относительно номера начального диска | Да | Да | Да | |
| Длина комментария к ZIP-файлу | Да | Да | Да | |
| Комментарий к ZIP-файлу | Да | Нет | Да |
Таблица B.3 устанавливает подробные требования к формированию, потреблению и редактированию для поля «Версия, необходимая для извлечения», которое полностью описано в ZIP Appnote.
| Версия | Возможность | Поддерживается при потреблении | Поддерживается при формировании | Сквозная передача при редактировании |
|---|---|---|---|---|
| 1.0 | Значение по умолчанию | Да | Да | Да |
| 1.1 | Файл является меткой тома | Да (не интерпретировать как часть пакета) | Нет | (перезаписать/удалить) |
| 2.0 | Файл является папкой (каталогом) | Да (не интерпретировать как часть пакета) | Нет | (перезаписать/удалить) |
| 2.0 | Файл сжат с использованием сжатия Deflate | Да | Да | Да |
| 2.0 | Файл зашифрован с использованием традиционного шифрования PKWARE | Нет | Нет | Нет |
| Версия | Характеристика | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 2.1 | Файл сжат с использованием Deflate64™ | Нет | Нет | Нет |
| 2.5 | Файл сжат с использованием PKWARE DCL Implode | Нет | Нет | Нет |
| 2.7 | Файл представляет собой набор данных для исправления | Нет | Нет | Нет |
| 4.5 | Файл использует расширения формата ZIP64 | Да | Да | Да |
| 4.6 | Файл сжат с использованием сжатия BZIP2 | Нет | Нет | Нет |
| 5.0 | Файл зашифрован с использованием DES | Нет | Нет | Нет |
| 5.0 | Файл зашифрован с использованием 3DES | Нет | Нет | Нет |
| 5.0 | Файл зашифрован с использованием исходного шифрования RC2 | Нет | Нет | Нет |
| 5.0 | Файл зашифрован с использованием шифрования RC4 | Нет | Нет | Нет |
| 5.1 | Файл зашифрован с использованием шифрования AES | Нет | Нет | Нет |
| 5.1 | Файл зашифрован с использованием исправленного шифрования RC2 | Нет | Нет | Нет |
| 5.2 | Файл зашифрован с использованием исправленного шифрования RC2-64 | Нет | Нет | Нет |
| 6.1 | Файл зашифрован с использованием обёртывания ключа без OAEP | Нет | Нет | Нет |
| 6.2 | Шифрование центрального каталога | Нет | Нет | Нет |
В таблице B.4 приведены подробные требования к созданию, потреблению и редактированию для поля Compression Method, которое полностью описано в ZIP Appnote.
| Код | Метод | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 0 | Файл хранится (без сжатия) | Да | Да | Да |
| 1 | Файл сжат методом Shrunk | Нет | Нет | Нет |
| Код | Метод | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 2 | Файл сжат методом Reduced с коэффициентом сжатия 1 | Нет | Нет | Нет |
| 3 | Файл сжат методом Reduced с коэффициентом сжатия 2 | Нет | Нет | Нет |
| 4 | Файл сжат методом Reduced с коэффициентом сжатия 3 | Нет | Нет | Нет |
| 5 | Файл сжат методом Reduced с коэффициентом сжатия 4 | Нет | Нет | Нет |
| 6 | Файл сжат методом Imploded | Нет | Нет | Нет |
| 7 | Зарезервировано для алгоритма сжатия Tokenizing | Нет | Нет | Нет |
| 8 | Файл сжат методом Deflated | Да | Да | Да |
| 9 | Улучшенный метод Deflating с использованием Deflate64™ | Нет | Нет | Нет |
| 10 | Метод Imploding из PKWARE Data Compression Library | Нет | Нет | Нет |
| 11 | Зарезервировано PKWARE | Нет | Нет | Нет |
В таблице B.5 приведены подробные требования к созданию, потреблению и редактированию при использовании флагов общего назначения в записях.
| Бит | Характеристика | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 0 | Если установлен, указывает, что файл зашифрован. | Нет | Нет | Нет |
| 1,2 | 0 0: использован обычный параметр сжатия (-en). | Да | Да | Да |
| 1,2 | 0 1: использован максимальный параметр сжатия (-exx/-ex). | Да | Да | Да |
| 1,2 | 1 0: использован быстрый параметр сжатия (-ef). | Да | Да | Да |
| 1,2 | 1 1: использован сверхбыстрый параметр сжатия (-es). | Да | Да | Да |
| Бит | Характеристика | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 3 | Если этот бит установлен, полям crc-32, размер в сжатом виде и размер в несжатом виде в локальном заголовке присваивается ноль. Правильные значения помещаются в дескриптор данных непосредственно после сжатых данных. | Да | Да | Да |
| 4 | Зарезервировано для использования с методом 8, для улучшенного Deflating | Нет | Биты установлены в 0 | Да |
| 5 | Если этот бит установлен, он указывает, что файл является сжатыми данными исправления. (Требуется PKZIP версии 2.70 или более поздней.) | Нет | Биты установлены в 0 | Да |
| 6 | Стойкое шифрование. Если этот бит установлен, значение версии, необходимой для извлечения, следует (SHOULD) установить как минимум равным 50, а бит 0 ДОЛЖЕН (SHALL) быть установлен. Если используется шифрование AES, значение версии, необходимой для извлечения, ДОЛЖНО (SHALL) быть не менее 51. | Нет | Биты установлены в 0 | Да |
| 7 | В настоящее время не используется | Нет | Биты установлены в 0 | Да |
| 8 | В настоящее время не используется | Нет | Биты установлены в 0 | Да |
| 9 | В настоящее время не используется | Нет | Биты установлены в 0 | Да |
| 10 | В настоящее время не используется | Нет | Биты установлены в 0 | Да |
| 11 | В настоящее время не используется | Нет | Биты установлены в 0 | Да |
| 12 | Не используется | Нет | Биты установлены в 0 | Да |
| 13 | Используется при шифровании центрального каталога, чтобы указать, что выбранные значения данных в локальном заголовке маскируются для сокрытия их фактических значений. Подробности см. в разделе, описывающем спецификацию стойкого шифрования. | Нет | Биты установлены в 0 | Да |
| 14 | Не используется | Нет | Биты установлены в 0 | Да |
| 15 | Не используется | Нет | Биты установлены в 0 | Да |
В таблице B.6 приведены подробные требования к созданию, потреблению и редактированию для записей поля Extra, зарезервированных PKWARE и описанных в ZIP Appnote.
| Идентификатор поля | Описание поля | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 0x0001 | Дополнительное поле расширенной информации ZIP64 | Да | Да | Необязательно |
| Идентификатор поля | Описание поля | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 0x0007 | AV Info | Нет | Нет | Да |
| 0x0008 | Зарезервировано для будущих данных имени файла Unicode (PFS) | Нет | Нет | Да |
| 0x0009 | OS/2 | Нет | Нет | Да |
| 0x000a | NTFS | Нет | Нет | Да |
| 0x000c | OpenVMS | Нет | Нет | Да |
| 0x000d | Unix | Нет | Нет | Да |
| 0x000e | Зарезервировано для дескрипторов файлового потока и вилок | Нет | Нет | Да |
| 0x000f | Дескриптор исправления | Нет | Нет | Да |
| 0x0014 | Хранилище PKCS#7 для сертификатов X.509 | Нет | Нет | Да |
| 0x0015 | Идентификатор и подпись сертификата X.509 для отдельного файла | Нет | Нет | Да |
| 0x0016 | Идентификатор сертификата X.509 для центрального каталога | Нет | Нет | Да |
| 0x0017 | Заголовок стойкого шифрования | Нет | Нет | Да |
| 0x0018 | Элементы управления управлением записями | Нет | Нет | Да |
| 0x0019 | Список сертификатов получателей шифрования PKCS#7 | Нет | Нет | Да |
| 0x0065 | Атрибуты IBM S/390 (Z390), AS/400 (I400) — несжатые | Нет | Нет | Да |
| 0x0066 | Зарезервировано для атрибутов IBM S/390 (Z390), AS/400 (I400) — сжатых | Нет | Нет | Да |
| 0x4690 | POSZIP 4690 (зарезервировано) | Нет | Нет | Да |
В таблице B.7 приведены подробные требования к созданию, потреблению и редактированию для записей поля Extra, зарезервированных третьими сторонами и описанных в ZIP Appnote.
| Идентификатор поля | Описание поля | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 0x07c8 | Macintosh | Нет | Нет | Да |
| Идентификатор поля | Описание поля | Поддерживается при потреблении | Поддерживается при создании | Передаётся при редактировании |
|---|---|---|---|---|
| 0x2605 | ZipIt Macintosh | Нет | Нет | Да |
| 0x2705 | ZipIt Macintosh 1.3.5+ | Нет | Нет | Да |
| 0x2805 | ZipIt Macintosh 1.3.5+ | Нет | Нет | Да |
| 0x334d | Info-ZIP Macintosh | Нет | Нет | Да |
| 0x4341 | Acorn/SparkFS | Нет | Нет | Да |
| 0x4453 | Дескриптор безопасности Windows NT (двоичный ACL) | Нет | Нет | Да |
| 0x4704 | VM/CMS | Нет | Нет | Да |
| 0x470f | MVS | Нет | Нет | Да |
| 0x4b46 | FWKCS MD5 | Нет | Нет | Да |
| 0x4c41 | Список управления доступом OS/2 (текстовый ACL) | Нет | Нет | Да |
| 0x4d49 | Info-ZIP OpenVMS | Нет | Нет | Да |
| 0x4f4c | Дополнительное поле исходного расположения Xceed | Нет | Нет | Да |
| 0x5356 | AOS/VS (ACL) | Нет | Нет | Да |
| 0x5455 | Расширенная метка времени | Нет | Нет | Да |
| 0x554e | Дополнительное поле Unicode Xceed | Нет | Нет | Да |
| 0x5855 | Info-ZIP Unix (исходный, также OS/2, NT и т. д.) | Нет | Нет | Да |
| 0x6542 | BeOS/BeBox | Нет | Нет | Да |
| 0x756e | ASi Unix | Нет | Нет | Да |
| 0x7855 | Info-ZIP Unix (новый) | Нет | Нет | Да |
| 0xa220 | Заполнение, Microsoft | Нет | Необязательно | Необязательно |
| 0xfd4a | SMS/QDOS | Нет | Нет | Да |
Реализатор пакета ДОЛЖЕН (SHALL) обеспечить, чтобы для всех размеров и смещений записей 64-битных потоков старший бит был равен 0.
Реализатор пакета ДОЛЖЕН (SHALL) обеспечить, чтобы все поля, содержащие «number of entries», не превышали 2 147 483 647.
Настоящий документ сопровождается семейством схем, определённых с использованием синтаксиса, заданного в «W3C XML Schema Structures» и «W3C XML Schema Datatypes». Эту спецификацию сопровождает ZIP-файл OpenPackagingConventions-XMLSchema.zip, содержащий все схемы.
См. файл opc-contentTypes.xsd.
См. файл opc-coreProperties.xsd.
См. файл opc-digSig.xsd.
См. файл opc-relationships.xsd.
Настоящий документ сопровождается семейством схем, определённых с использованием синтаксиса RELAX NG. Эту спецификацию сопровождает ZIP-файл OpenPackagingConventions-RELAXNG.zip, содержащий все схемы.
Если между версией схемы RELAX NG и соответствующей ей схемой XSD существуют расхождения, определяющей версией является схема XSD.
См. файл opc-contentTypes.rnc.
См. файл opc-coreProperties.rnc.
Схема доступна по адресу: http://standards.iso.org/iso-iec/29500/-2/ed-4/en/OpenPackagingConventions-RELAXNG/opc-coreProperties.rnc.
См. файлы opc-digSig.rnc и security_any.rnc.
См. файл opc-relationships.rnc.
Эта схема доступна по адресу: http://standards.iso.org/iso-iec/29500/-2/ed-4/en/OpenPackagingConventions-RELAXNG/opc-relationships.rnc.
См. файл xml.rnc.
См. файл xmldsig-core-schema.rnc.
Пространства имён, доступные для использования в пакете, перечислены в таблице E.1.
| Описание | URI пространства имён |
|---|---|
| Поток Media Types | "http://schemas.openxmlformats.org/package/2006/content-types" |
| Основные свойства | "http://schemas.openxmlformats.org/package/2006/metadata/core-properties" |
| Цифровые подписи | "http://schemas.openxmlformats.org/package/2006/digital-signature" |
| Связи | "http://schemas.openxmlformats.org/package/2006/relationships" |
Типы носителей для частей пакета, определённых в настоящем документе, перечислены в таблице E.2.
| Описание | Тип носителя |
|---|---|
| Часть пакета Core Properties | "application/vnd.openxmlformats-package.core-properties+xml" |
| Часть пакета сертификата цифровой подписи | "application/vnd.openxmlformats-package.digital-signature-certificate" |
| Часть пакета источника цифровой подписи | "application/vnd.openxmlformats-package.digital-signature-origin" |
| Часть пакета XML-подписи цифровой подписи | "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml" |
| Описание | Тип носителя |
|---|---|
| Часть пакета Relationships | "application/vnd.openxmlformats-package.relationships+xml" |
Типы связей, доступные для использования в пакете, перечислены в таблице E.3.
| Описание | Тип связи |
|---|---|
| Основные свойства | "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" |
| Цифровая подпись | "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature" |
| Сертификат цифровой подписи | "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/certificate" |
| Источник цифровой подписи | "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin" |
| Миниатюра | "http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail" |
Физическая модель пакета определяет способы создания и использования пакетов. Эта модель основана на трёх компонентах: производителе, потребителе и канале между ними, как показано на рисунке F.1.

Производитель — это программное обеспечение или устройство, записывающее пакеты. Потребитель — это программное обеспечение или устройство, считывающее пакеты. Устройство — это аппаратное средство, например принтер или сканер, выполняющее одну функцию или набор функций. Данные передаются от производителя к потребителю по каналу.
При локальном доступе канал передаёт данные непосредственно от производителя к потребителю на одном устройстве.
При сетевом доступе потребитель и производитель обмениваются данными друг с другом по протоколу. Важными характеристиками связи этого канала являются скорость и задержка запроса. Например, такая связь может осуществляться через границу процессов или между сервером и настольным компьютером.
Для достижения максимальной производительности разработчики физических форматов учитывают стиль доступа, стиль размещения и стиль связи.
Стиль доступа, в котором осуществляется локальный или сетевой доступ, определяет возможную одновременность операций обработки и ввода-вывода.
Потребление с прямым доступом позволяет потребителям запрашивать требуемую конкретную часть пакета без последовательной обработки предшествующих частей пакета. Например, запрос диапазона байтов. Это наиболее распространённый стиль доступа.
Потоковое потребление позволяет потребителям начать обработку частей пакета до поступления всего пакета. Физические форматы СЛЕДУЕТ (SHOULD) проектировать так, чтобы потребители могли начать интерпретацию и обработку получаемых ими данных до того, как через канал будут переданы все биты пакета.
В предыдущих редакциях настоящего документа были определены требования к потоковому потреблению. В этой редакции они исключены, поскольку разные применения OPC предъявляют разные требования к потоковому потреблению.
Однако для обеспечения потокового потребления рекомендуется, чтобы поток Media Types не содержал Default элементов. Поток Media Types СЛЕДУЕТ (SHOULD) снабжать одним Override элементом для каждой части пакета. Каждый Override элемент СЛЕДУЕТ (SHOULD) располагать перед соответствующей ему частью пакета либо в непосредственной близости от неё.
Потоковое создание позволяет производителям начать запись частей пакета в пакет, не зная заранее всех частей пакета, которые должны быть записаны. Например, когда приложение начинает создавать пакет файла очереди печати, оно не всегда знает, сколько страниц содержит пакет. Аналогично программа, формирующая отчёт, не всегда изначально знает, какова длина отчёта или сколько в нём изображений.
Для поддержки потокового создания реализатору пакета СЛЕДУЕТ (SHOULD) позволять производителю добавлять части пакета после того, как уже были добавлены другие части пакета. Потребитель НЕ ДОЛЖЕН (SHALL NOT) требовать от производителя указания количества частей пакета, которые он создаст, в начале записи. Реализатору пакета СЛЕДУЕТ (SHOULD) позволять производителю начинать запись содержимого части пакета, не зная её окончательной длины.
Одновременное создание и потребление позволяют потоковому созданию и потоковому потреблению происходить одновременно для пакета. Ввиду преимуществ, которые могут быть достигнуты в использующих это конвейерных архитектурах, реализатору пакета СЛЕДУЕТ (SHOULD) поддерживать одновременное создание и потребление в физическом пакете.
Стиль, в котором части пакета упорядочены внутри пакета, называется стилем размещения. Части пакета могут быть размещены в одном из двух стилей: простом упорядочении или перемежаемом упорядочении.
При простом упорядочении части пакета располагаются непрерывно. Когда пакет передаётся последовательно, сначала поступают все байты первой части пакета, затем все байты второй части пакета и так далее. Если такой пакет использует простое упорядочение, все байты каждой части пакета хранятся непрерывно.
ПРИМЕР Узкое место производительности при простом упорядочении
На рисунке F.2 показаны две части пакета: часть пакета страницы (markup/page.xml), описывающая содержимое страницы, и часть пакета изображения (images/picture.jpeg), ссылающаяся на изображение, отображаемое на странице. При простом упорядочении все байты части пакета страницы передаются до байтов части пакета изображения.
Рисунок F.2 иллюстрирует этот сценарий. Изображение не может быть отображено, пока не будут получены вся часть пакета страницы и часть пакета изображения. В некоторых обстоятельствах, например для небольших пакетов в высокоскоростной сети, это может быть приемлемо. В других случаях необходимость прочитать весь markup/page.xml, чтобы перейти к изображению, приводит к неприемлемой производительности или создаёт чрезмерные требования к памяти.

Рисунок F.2 — Часть пакета страницы и часть пакета изображения. Идентификаторы markup/page.xml и images/picture.jpeg сохранены без изменений.
Рисунок F.3 — Порядок передачи байтов при простом упорядочении. Надписи byte 0 и byte n означают «байт 0» и «байт n»; идентификаторы markup/page.xml и images/picture.jpeg сохранены без изменений.
При перемежаемом упорядочении фрагменты частей пакета перемежаются, что обеспечивает оптимальную производительность в определённых сценариях. Например, перемежаемое упорядочение повышает производительность при воспроизведении мультимедиа, когда видео и аудио передаются одновременно, и при встраиваемом обращении к ресурсам, когда ссылка на изображение находится внутри разметки.
Разбивая части пакета на фрагменты и перемежая эти фрагменты, можно оптимизировать производительность, обеспечивая при этом лёгкое восстановление исходной непрерывной части пакета.
Благодаря обеспечиваемым им преимуществам в производительности реализаторам пакета СЛЕДУЕТ (SHOULD) поддерживать перемежение в физическом пакете. Часть пакета, разбитая в физическом файле на несколько фрагментов, считается одной логической частью пакета; сами фрагменты не являются частями пакета и не могут адресоваться.
Стиль, в котором пакет и его части пакета доставляются производителем или к ним получает доступ потребитель, называется стилем связи. Связь может быть основана на последовательной доставке частей пакета или произвольном доступе к ним. Используемый стиль связи зависит от возможностей как канала, так и физического формата.
При последовательной доставке все физические биты пакета доставляются в порядке их расположения в пакете. В общем случае все каналы поддерживают последовательную доставку.
Произвольный доступ позволяет потребителям запрашивать доставку части пакета вне последовательного физического порядка. Некоторые каналы основаны на протоколах, способных обеспечивать произвольный доступ, например HTTP 1.1 с поддержкой диапазонов байтов. Для достижения максимальной производительности реализатору пакета СЛЕДУЕТ (SHOULD) поддерживать произвольный доступ как в канале, так и в физическом пакете. При отсутствии такой поддержки потребителям необходимо ждать, пока нужные им части пакета будут доставлены последовательно.
В настоящем приложении документированы синтаксические различия между версиями соглашений об открытой упаковке, определёнными в настоящем документе и в ECMA-376:2006 (см. ссылку [5]).
Следующий элемент XML включён в настоящий документ, но не включён в ECMA-376:2006:
value (8.3.4.4.4)Следующий элемент XML включён в ECMA-376:2006, но не включён в настоящий документ:
contentTypeИзменений нет.
Изменений нет.
Изменений нет.
Имена частей пакета, содержащие символы, не входящие в ASCII, разрешены настоящим документом, но запрещены ECMA-376:2006.
В настоящем приложении показаны абстрактный пакет и физический пакет, представляющие документ Microsoft® Office.
Этот абстрактный пакет содержит пять частей пакета: "/_rels/.rels, /docProps/core.xml", "/word/_rels/document.xml.rels", "/word/document.xml" и "/word/settings.xml".
См. рисунок H.1.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships
xmlns="http://schemas...org/package/2006/relationships">
<Relationship Id="rId2"
Type="http://schemas... "
Target="docProps/core.xml"/>
<Relationship Id="rId1"
Type="http://schemas... "
Target="word/document.xml"/>
</Relationships>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships
xmlns="http://schemas...org/package/2006/relationships">
<Relationship Id="rId2"
Type="http://schemas... "
Target="settings.xml"/>
</Relationships>Надписи на рисунке: «часть Relationships пакета»; «часть Relationships, связанная с “word/document.xml”».
Рисунок H.1 — Пример абстрактного пакета
Две из этих частей пакета являются частями Relationships ("/_rels/.rels" и "/word/_rels/document.xml.rels"), а три — частями, не являющимися частями Relationships ("/word/document.xml", "/docProps/core.xml" и "/word/settings.xml"); при этом "_rels/.rels" является частью Relationships пакета, а "/word/_rels/document.xml.rels" — частью Relationships, связанной с "/word/document.xml". Часть Relationships пакета содержит две связи от пакета к "/docProps/core.xml" и "/word/document.xml" соответственно. Часть Relationships содержит связь от "/word/document.xml" к "/word/settings.xml".
Этот физический пакет (empty.docx) является ZIP-файлом. Элементами ZIP в этом ZIP-файле являются "_rels/.rels", "docProps/core.xml", "word/_rels/document.xml.rels", "word/document.xml", "word/settings.xml" и "[Content_Types].xml".
За исключением "[Content_Types].xml", эти элементы ZIP представляют части пакета. Обратите внимание, что имена частей пакета начинаются с символа "/". "[Content_Types].xml" представляет поток Media Types.
[1] Модель символов для Всемирной паутины: сопоставление строк, Примечание рабочей группы W3C, 04 февраля 2019 г., доступно по адресу https://www.w3.org/TR/2019/NOTE-charmod-norm-20190204/
[2] Форматы даты и времени, W3C NOTE 19980827, 1997, доступно по адресу http://www.w3.org/TR/1998/NOTE-datetime-19980827
[3] Схемы RELAX NG для безопасности XML, Примечание рабочей группы W3C от 11 апреля 2013 г., доступно по адресу https://www.w3.org/TR/xmlsec-rngschema/
[4] ISO/IEC TR 30114-1, Информационные технологии — Расширения форматов файлов Office Open XML — часть 1: Руководящие указания, доступно по адресу https://standards.iso.org/ittf/PubliclyAvailableStandards/index.html
[5] ECMA-376:2006 Форматы файлов Office Open XML, 1-е издание (декабрь 2006 г.), доступно по адресу https://www.ecma-international.org/publications-and-standards/standards/ecma-376/
[6] NIST SP 800-56A Rev. 3, Рекомендация по схемам попарного установления ключей с использованием криптографии дискретного логарифма, доступно по адресу https://doi.org/10.6028/NIST.SP.800-56Ar3, апрель 2018 г.
[7] ISO/IEC 10646, Информационные технологии — Универсальный набор кодированных символов (UCS), доступно по адресу https://standards.iso.org
[8] Схемы унифицированного идентификатора ресурса (URI), доступно по адресу https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
Разрешение на перевод: официальная политика Ecma.
COPYRIGHT NOTICE
© Ecma International
By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply
with the following terms and conditions.
This document may be copied, published and distributed to others, and certain derivative works of it may be
prepared, copied, published, and distributed, in whole or in part, provided that the above copyright notice and
this Copyright License and Disclaimer are included on all such copies and derivative works. The only derivative
works that are permissible under this Copyright License and Disclaimer are:
(i) works which incorporate all or portion of this document for the purpose of providing commentary or
explanation (such as an annotated version of the document),
(ii) works which incorporate all or portion of this document for the purpose of incorporating features that
provide accessibility,
(iii) translations of this document into languages other than English and into different formats and
(iv) works by making use of this specification in standard conformant products by implementing (e.g. by
copy and paste wholly or partly) the functionality therein.
However, the content of this document itself may not be modified in any way, including by removing the
copyright notice or references to Ecma International, except as required to translate it into languages other
than English or into a different format.
The official version of an Ecma International document is the English language version on the Ecma
International website. In the event of discrepancies between a translated version and the official version, the
official version shall govern.
The limited permissions granted above are perpetual and will not be revoked by Ecma International or its
successors or assigns.
This document and the information contained herein is provided on an “AS IS” basis and ECMA
INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE
ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR
A PARTICULAR PURPOSE.