Универсальные понятия идентификатора типа
Универсальные идентификаторы типов (UTIs) обеспечивают объединенный способ идентифицировать данные, обработанные в системе, такой как документы, данные области монтажа и пакеты. В этой главе описываются понятия позади UTIs и показывает, как указать их в Ваших комплектах приложений.
Что такое универсальный идентификатор типа?
Универсальный идентификатор типа является строкой, однозначно определяющей класс объектов, которые, как полагают, имели «тип». Например, для файла или другого потока байтов, «тип» относится к формату данных. Для объектов, таких как пакеты и пакеты, «тип» относится к внутренней структуре иерархии каталогов. Обычно, UTI обеспечивает непротиворечивый идентификатор для данных, которые все приложения и службы могут распознать и положиться, избавив от необходимости отслеживать все существующие методы тегирования данных. В настоящее время, например, файл JPEG мог бы быть идентифицирован любым из следующих методов:
Код типа файла с четырьмя символами (
OSType
) из'JPEG'
Расширение файла
.jpg
Расширение файла
.jpeg
Тип MIME
image/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 показывает иерархию соответствия для некоторых универсальных идентификаторов типов.
Например, 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 показывает примеры физических и функциональных иерархий:
В некоторых случаях необходимо объявить, что соответствие только к одному 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 в информационном списке свойств пакета. Посмотрите Объявление Новых Универсальных Идентификаторов типов для получения дополнительной информации.