Синтаксис выражения запроса метаданных файла
Запросы метаданных файла создаются с помощью языка запросов, который является подмножеством формата строки предиката. Синтаксис поискового выражения метаданных позволяет приложению создавать поиски 'на лету', позволять опытным пользователям создавать свои собственные запросы или Ваше приложение для хранения часто используемых запросов для простого использования. Синтаксис является относительно прямым, включая сравнения, опции агностика языка и переменные времени и даты.
Синтаксис сравнения
Синтаксис выражения запроса метаданных файла является упрощенной формой имени файла globbing знакомый для окружения пользователей. Запросы имеют следующий формат:
attribute == value |
где attribute
стандартный атрибут метаданных (см. “Ссылку Атрибутов Метаданных Файла”), или пользовательский атрибут метаданных, определенный средством импорта.
Например, для запросов Центра внимания для всех файлов, созданных «Стивом», запрос был бы похож на следующее:
kMDItemAuthors ==[c] "Steve" |
Доступные операторы сравнения перечислены в Таблице 3-1.
Символы такой как “
и ‘
в значении строки нужно оставить с помощью \
символ.
Поисковое значение в примере имеет модификатор “c
”. Это модификаторы, указывают, как сделано сравнение. Таблица 3-2 описывает доступные модификаторы сравнения.
Поисковые модификаторы должны сразу следовать за оператором сравнения и быть окружены квадратными скобками […]
.
Модификатор | Описание |
---|---|
| Сравнение нечувствительно к регистру. |
| Сравнение нечувствительно к диакритическим знакам. |
Таблица 3-3 показывает несколько примеров, использующих модификаторы сравнения.
Используя подстановочные символы (*
и ?
) можно соответствовать подстроки в начале строки, конца строки, или где угодно в строке. Таблица 3-4 показывает несколько общего использования.
*
символ соответствует многократные символы тогда как ?
подстановочный символ соответствует отдельный символ.
Запросы могут быть объединены с помощью подобного C синтаксиса для AND
(&&
) и OR
(||
). Например, для ограничения запроса аудиофайлами, созданными «Стивом», запрос был бы:
kMDItemAuthors ==[c] "Steve" && kMDItemContentType == "public.audio" |
Круглая скобка может привыкнуть к дальнейшему соответствию запроса группы. Например, для поиска аудиофайлов, созданных «Стивом» или «Дэниелом», запрос был бы:
(kMDItemAuthors ==[c] "Daniel" || kMDItemAuthors[c] == "Steve") && |
kMDItemContentType == "public.audio" |
Можно развернуть этот поиск для включения видеофайлов с помощью следующего запроса:
(kMDItemAuthors ==[c] "Daniel" || kMDItemAuthors ==[c] "Steve" ) && |
(kMDItemContentType == "public.audio" || kMDItemContentType == "public.video") |
Переменные времени и даты
Можно также создать запросы, использующие дату и время в качестве поискового значения. Значение даты и времени отформатировано как значение с плавающей точкой, которое совместимо с CFDate, секунды относительно 1 января 2001.
Кроме того, $time
переменная - то, при условии, что может использоваться для указания значений относительно текущего времени, как показано в Таблице 3-5.
Переменная времени | Описание |
---|---|
| Текущая дата и время. |
| Текущая дата. |
| Вчерашняя дата. |
| Даты на предыдущей неделе. |
| Даты на текущей неделе. |
| Даты в текущем месяце. |
| Даты в текущем году. |
| Дата и время путем добавления положительной или отрицательной величины, в секундах, к текущему времени. |
| Дата путем добавления положительной или отрицательной величины, в днях, к текущему дню |
| Даты путем добавления положительной или отрицательной величины, в неделях, к текущей неделе. |
| Даты путем добавления положительной или отрицательной величины, в месяцах, к текущему месяцу. |
| Даты путем добавления положительной или отрицательной величины, в годах, к текущему году. |
| Дата путем парсинга указанной совместимой строки ISO-8601-STR. |
Используя $time
переменная можно ограничить поиск для нахождения только файлов, измененных на прошлой неделе с помощью следующего запроса:
((kMDItemAuthors ==[c] "Daniel" || kMDItemAuthors[c] == "Steve") && |
(kMDItemContentType == "public.audio" || kMDItemContentType == "public.video")) && |
(kMDItemFSContentChangeDate == $time.this_week(-1)) |