Синтаксис выражения запроса метаданных файла

Запросы метаданных файла создаются с помощью языка запросов, который является подмножеством формата строки предиката. Синтаксис поискового выражения метаданных позволяет приложению создавать поиски 'на лету', позволять опытным пользователям создавать свои собственные запросы или Ваше приложение для хранения часто используемых запросов для простого использования. Синтаксис является относительно прямым, включая сравнения, опции агностика языка и переменные времени и даты.

Синтаксис сравнения

Синтаксис выражения запроса метаданных файла является упрощенной формой имени файла globbing знакомый для окружения пользователей. Запросы имеют следующий формат:

attribute == value

где attribute стандартный атрибут метаданных (см. “Ссылку Атрибутов Метаданных Файла”), или пользовательский атрибут метаданных, определенный средством импорта.

Например, для запросов Центра внимания для всех файлов, созданных «Стивом», запрос был бы похож на следующее:

kMDItemAuthors ==[c] "Steve"

Доступные операторы сравнения перечислены в Таблице 3-1.

Табличные 3-1  Операторы сравнения

Оператор

Описание

==

равный

!=

не равный

<

меньше, чем (доступный только для числовых значений и дат)

>

больше, чем (доступный только для числовых значений и дат)

<=

меньше чем или равный (доступный только для числовых значений и дат)

>=

больше, чем или равный (доступный только для числовых значений и дат)

InRange(attributeName,minValue,maxValue)

числовые значения в диапазоне minValue через maxValue в указанном attributeName

Символы такой как и в значении строки нужно оставить с помощью \ символ.

Поисковое значение в примере имеет модификатор “c”. Это модификаторы, указывают, как сделано сравнение. Таблица 3-2 описывает доступные модификаторы сравнения.

Поисковые модификаторы должны сразу следовать за оператором сравнения и быть окружены квадратными скобками […].

Табличные 3-2  модификаторы Сравнения Значения

Модификатор

Описание

c

Сравнение нечувствительно к регистру.

d

Сравнение нечувствительно к диакритическим знакам.

Таблица 3-3 показывает несколько примеров, использующих модификаторы сравнения.

Табличные 3-3  примеры модификатора Сравнения Значения

Строка запроса

Результаты

kMDItemTextContent == "Paris"

Соответствия «Париж», но не «Париж».

kMDItemTextContent ==[c] "Paris"

Соответствия «Париж» и «Париж».

kMDItemTextContent ==[c] "*Paris*"

«Париж» соответствий, «Париж», “Я люблю Париж” и «Париж-france.jpg»”.

kMDItemTextContent == "Frédéric"

Соответствия «Фредерик», но не «Фредерик».

kMDItemTextContent ==[d] "Frédéric"

Соответствия «Фредерик» и «Фредерик» независимо от случая слова.

Используя подстановочные символы (* и ? ) можно соответствовать подстроки в начале строки, конца строки, или где угодно в строке. Таблица 3-4 показывает несколько общего использования.

* символ соответствует многократные символы тогда как ? подстановочный символ соответствует отдельный символ.

Таблица 3-4  Используя подстановочные знаки

Строка запроса

Результат

kMDItemTextContent == "paris*"

Значения атрибута соответствий, начинающиеся с «Парижа». Например, соответствия «Париж», но не «сравнение».

kMDItemTextContent == "*paris"

Значения атрибута соответствий тот конец с «Парижем».

kMDItemTextContent == "*paris*"

Атрибуты соответствий, содержащие «Париж» где угодно в значении. Например, соответствия «Париж» и «сравнение».

kMDItemTextContent == "paris"

Значения атрибута соответствий, которые точно равны «Парижу».

Запросы могут быть объединены с помощью подобного 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.

Табличные  переменные выражения за 3-5$time

Переменная времени

Описание

$time.now

Текущая дата и время.

$time.today

Текущая дата.

$time.yesterday

Вчерашняя дата.

$time.this_week(-1)

Даты на предыдущей неделе.

$time.this_week

Даты на текущей неделе.

$time.this_month

Даты в текущем месяце.

$time.this_year

Даты в текущем году.

$time.now(NUMBER)

Дата и время путем добавления положительной или отрицательной величины, в секундах, к текущему времени.

$time.today(NUMBER)

Дата путем добавления положительной или отрицательной величины, в днях, к текущему дню

$time.this_week(NUMBER)

Даты путем добавления положительной или отрицательной величины, в неделях, к текущей неделе.

$time.this_month(NUMBER)

Даты путем добавления положительной или отрицательной величины, в месяцах, к текущему месяцу.

$time.this_year(NUMBER)

Даты путем добавления положительной или отрицательной величины, в годах, к текущему году.

$time.iso(ISO-8601-STR)

Дата путем парсинга указанной совместимой строки ISO-8601-STR.

Используя $time переменная можно ограничить поиск для нахождения только файлов, измененных на прошлой неделе с помощью следующего запроса:

((kMDItemAuthors ==[c] "Daniel" || kMDItemAuthors[c] == "Steve") &&
 (kMDItemContentType == "public.audio" || kMDItemContentType == "public.video")) &&
 (kMDItemFSContentChangeDate == $time.this_week(-1))