Универсальные понятия идентификатора типа

Универсальные идентификаторы типов (UTIs) обеспечивают объединенный способ идентифицировать данные, обработанные в системе, такой как документы, данные области монтажа и пакеты. В этой главе описываются понятия позади UTIs и показывает, как указать их в Ваших комплектах приложений.

Что такое универсальный идентификатор типа?

Универсальный идентификатор типа является строкой, однозначно определяющей класс объектов, которые, как полагают, имели «тип». Например, для файла или другого потока байтов, «тип» относится к формату данных. Для объектов, таких как пакеты и пакеты, «тип» относится к внутренней структуре иерархии каталогов. Обычно, UTI обеспечивает непротиворечивый идентификатор для данных, которые все приложения и службы могут распознать и положиться, избавив от необходимости отслеживать все существующие методы тегирования данных. В настоящее время, например, файл JPEG мог бы быть идентифицирован любым из следующих методов:

UTI заменяет все эти несовместимые методы тегирования строкой public.jpeg. Этот идентификатор строки полностью совместим с любым из более старых методов тегирования, и можно вызвать служебные функции для перевода от одного до другого. Т.е. для данного UTI можно генерировать эквивалент OSType, Тип MIME или расширение файла, и наоборот.

Поскольку UTIs может идентифицировать любой класс объекта, они намного более гибки, чем более старые методы тегирования; можно также использовать их для идентификации любого из следующих объектов:

Кроме того, можно определить собственный UTIs для специализированного использования. Например, если Ваше приложение использует специальный формат документа, можно объявить UTI для него. Сторонние приложения или плагины, хотящие поддерживать Ваш формат, могут тогда использовать это UTI для идентификации файлов.

Набор символов UTI

Универсальный идентификатор типа является строкой Unicode, обычно содержащей символы в наборе символов ASCII. Однако только подмножество символов ASCII разрешено. Можно использовать Романский алфавит в верхнем и нижнем регистре (A–Z, a–z), цифры 0 до 9, точка (“”.), и дефис (“-”). Это ограничение основывается на ограничениях имени DNS, установленных в RFC 1035.

Универсальные идентификаторы типов могут также содержать любой из символов Unicode, больше, чем U+007F.

Синтаксис UTI

Универсальные идентификаторы типов используют формат обратного DNS, первоначально раньше описывал элементы иерархии классов Java и теперь также используемый в OS X и iOS для идентификации пакета. Некоторые примеры:

com.apple.quicktime-movie
com.mycompany.myapp.myspecialfiletype
public.html
com.apple.pict
public.jpeg

Синтаксис UTI гарантирует, что данный идентификатор уникален, не требуя центральной власти зарегистрировать или иначе отслеживать их. Обратите внимание на то, что домен (com, public, и т.д.), используется только для идентификации позиции UTIs в доменной иерархии; это не подразумевает группировки подобных типов.

  • public домен резервируется для общих или стандартных типов, имеющих общее применение к большинству приложений:

    public.text
    public.plain-text
    public.jpeg
    public.html

    UTIs с public домен вызывают общедоступными идентификаторами. В настоящее время только Apple может объявить общедоступные идентификаторы.

  • dyn домен резервируется для специальных динамических идентификаторов. Посмотрите Динамические Идентификаторы типов для получения дополнительной информации.

  • Все другие домены доступны для использования третьими лицами. Как правило, идентификаторы, объявленные компаниями, начнутся com домен.

    com.apple.quicktime-movie
    com.yoyodyne.buckybits

Соответствие

Главное преимущество универсальных идентификаторов типов по другим методам идентификации типа - то, что они объявляются в иерархии соответствия. Иерархия соответствия походит на иерархию классов в объектно-ориентированном программировании. Вместо “типа A соответствует типу B”, можно также думать, это как “все экземпляры типа A - также экземпляры типа B.”

Рисунок 1-1 показывает иерархию соответствия для некоторых универсальных идентификаторов типов.

Рисунок 1-1  иерархия соответствия
A conformance hierarchy

Например, UTI public.html, то, которое определяет текст HTML, соответствует идентификатору основного текста, public.text. В этом случае соответствие позволяет приложениям, которые могут открыться, общие текстовые файлы идентифицируют файлы HTML как, которые оно может открыть также.

Необходимо объявить соответствие только с непосредственным «суперклассом» типа, потому что иерархия соответствия допускает наследование между идентификаторами. Т.е. если Вы объявляете свой идентификатор как соответствующий public.tiff идентификатор, это автоматически соответствует идентификаторам выше в иерархии, такой как public.image и public.data.

Иерархия соответствия поддерживает множественное наследование. Например, UTI для комплекта приложений (com.apple.application-package) приспосабливает обоим универсальному типу пакета (com.apple.bundle) и упакованный тип каталога (com.apple.package).

При указании соответствия для UTI элементы должны идеально соответствовать и физической и функциональной иерархии. Т.е. соответствие должно указать обе своей физической природы (каталог, файл, и т.д.), а также его использование (изображение, фильм, и т.д.).

  • UTI в физической иерархии должен соответствовать через иерархию наследования public.item.

  • UTI в функциональной иерархии должен соответствовать посредством наследования основному UTI, который не является public.item. Например, public.content, public.executable и public.archive все примеры функционального основного UTIs.

В то время как приспосабливание функциональной иерархии не обязательно, делание так допускает лучшую интеграцию с характеристиками системы. Например, партнеры Центра внимания назвали атрибуты (заголовок, авторы, версия, комментарии, и т.д.) с функциональным UTIs.

Рисунок 1-2 показывает примеры физических и функциональных иерархий:

Рисунок 1-2  Физические и функциональные иерархии
Physical and functional hierarchies

В некоторых случаях необходимо объявить, что соответствие только к одному UTI покрывает обе иерархии. Например, public.text, public.image и public.audiovisual-content соответствуйте обоим public.data (физический) и public.content (функциональный), настолько соответствующий (прямо или косвенно) одному из этих элементов покрывает обе иерархии.

Соответствие дает Вашему приложению намного больше гибкости в определении, что вводит его, совместимо с; мало того, что Вы избегаете писать много условного кода, Ваше приложение может быть совместимо с типами, которые Вы никогда не ожидали.

Динамические идентификаторы типов

Иногда можно натыкаться на тип данных, не имеющий UTI объявленным для него. UTIs обрабатывают этот случай прозрачно путем создания динамического идентификатора для того типа. Например, скажите, что Ваше приложение находит тип NSPasteboard, который оно не распознает. Используя служебные функции, это может все еще преобразовать тип в UTI, который это может тогда раздать.

Динамические идентификаторы имеют домен dyn, с остальной частью строки, следующей за тем, чтобы быть непрозрачным. Вы обрабатываете динамические идентификаторы так же, как любой другой UTI, и можно извлечь исходные функции утилиты использования тега идентификатора. Можно думать о динамическом идентификаторе как о UTI-совместимой обертке вокруг иначе неизвестного расширения файла, типа MIME, OSType, и т.д.

Теги идентификатора

Каждый UTI может иметь один или несколько тегов, связанных с ним. Эти теги указывают альтернативные методы идентификации типа, такие как расширение файла, тип MIME или тип NSPasteboard. Вы используете эти теги для присвоения определенных расширений, типов MIME, и т.д., как являющийся эквивалентными типами в объявлении UTI.

Например, public.jpeg описание идентификатора включает один тег OSType ('JPEG') и два тега расширения файла (.jpg и .jpeg). Эти теги тогда считают альтернативными идентификаторами для public.jpeg ввести.

По существу Вы используете теги для группировки всех возможных методов идентификации типа под одним UTI. Т.е. файл с расширением .jpg или .jpeg, или OSType 'JPEG' все считаются типа public.jpeg.

Объявление нового UTIs

Приложения Mac могут объявить новый UTIs для своих собственных форматов. Вы объявляете новый UTIs в информационном списке свойств пакета. Посмотрите Объявление Новых Универсальных Идентификаторов типов для получения дополнительной информации.