Общие сведения о языке запросов метаданных
В этом разделе представлен язык запросов метаданных для компонента образов Windows (WIC). Язык запросов метаданных используется для создания выражений, которые находят определенные данные (элементы метаданных) и расположения (блоки метаданных) в метаданных изображения.
Эта тема описана в следующих разделах.
- Необходимые условия
- Введение
- Анатомия выражения пути
- Выражения политики метаданных фотографий
- Сводка по языку запросов метаданных
- Связанные статьи
Необходимые компоненты
Чтобы понять эту тему, вы должны ознакомиться с системой метаданных WIC, как описано в обзоре метаданных WIC и доступе к метаданным, как описано в обзоре чтения и записи метаданных изображения.
Введение
Вы взаимодействуете с платформой метаданных в основном с помощью двух компонентов объектной модели (COM): средства чтения запросов, представленного интерфейсом IWICMetadataQueryReader, а также средством записи запросов, представленным интерфейсом IWICMetadataQueryWriter. Эти компоненты позволяют считывать или записывать метаданные с помощью языка запросов метаданных. Язык запросов описывает синтаксис выражения пути и компоненты запроса используют это выражение пути для доступа к нужным метаданным. Это выражение пути описывает расположение блока метаданных или элемента.
Блок метаданных — это именованной группы метаданных в определенном формате. Блок метаданных может содержать отдельные элементы метаданных, такие как время разработки или создания, а также дополнительные блоки метаданных. Имя блока метаданных определяется его форматом. Например, блок метаданных, содержащий метаданные App1, будет называться app1. Распространенные форматы метаданных включают App1, Exif, IFD и XMP.
Элемент метаданных — это пара "имя-значение", описывающая характеристики, такие как автор, название и оценка.
Выражение пути содержит одно или несколько имен блоков метаданных. Он также может указать элемент метаданных в блоке метаданных. Следующее выражение пути представляет блок App1, содержащий блок IFD, содержащий элемент метаданных:
- /app1/ifd/{ushort=18249}
На следующей схеме показана макияж примера изображения JPEG с четырьмя блоками корневых метаданных: App0, App1, XMP и неизвестный блок. Каждый выделенный элемент отмечает тип метаданных (блок или элемент) и выражение запроса, используемое для извлечения данных.
Примечание.
Содержимое этой схемы ссылается на этот документ и используется во многих примерах.
Анатомия выражения пути
Чтобы получить доступ к метаданным с помощью API WIC, в большинстве случаев необходимо использовать полное выражение запроса. В этом разделе рассматриваются полные выражения для доступа к метаданным. Если вам нужны сведения о случаях, в которых используются не полные выражения, см. раздел "Выражение политики метаданных фотографий" далее в этом документе.
Что такое полное выражение запроса? В WIC полное выражение — это строка, которая начинается с косой черты пути (/), за которой следует путь навигации к блоку метаданных или конкретному элементу метаданных. Каждый шаг в пути навигации разделен косой чертой, формируя выражение для доступа к блоку метаданных или элементу метаданных. Например, ниже приведено полное выражение запроса, которое обращается к рейтингу фотографий Майкрософт в блоке IFD, вложенном в блок App1:
- /app1/ifd/{ushort=18249}
При синтаксическом анализе этого выражения сначала выполняется поиск блока метаданных App1 в метаданных образа. Если блок App1 найден, он продолжает поиск вложенного блока метаданных IFD. Если блок IFD найден, он ищет конкретный элемент метаданных, в данном случае рейтинг MicrosoftPhoto под тегом 18249 в блоке метаданных IFD. Если в любое время WIC не находит блок метаданных или элемент, он прерывает запрос.
Выбор блока
Самое простое выражение запроса метаданных WIC — это выражение для получения средства чтения запросов или записи для определенного блока метаданных. Получение средства чтения и записи запросов позволяет направлять последующие запросы непосредственно в вложенный блок метаданных без работы с родительским блоком. Выражение запроса выбора блока — это путь навигации к нужному блоку метаданных. Например, на предыдущем рисунке есть пять блоков метаданных, два из которых вложены в другие блоки метаданных. Ниже приведены выражения пути к каждому блоку метаданных в примере JPEG:
- /app0
- /app1
- /app1/ifd
- /app1/ifd/exif
- /Xmp
При использовании средства чтения запросов или записи для выполнения запроса возвращается новый модуль чтения запросов или записи, который обслуживает запросы в область указанного блока метаданных. Например, при выполнении запроса "/app1" создается новый модуль чтения запросов, и запросы к новому читателю относятся к блоку App1. Это означает, что запрос "/ifd" действителен для нового средства чтения, так как блок App1 содержит блок IFD. Однако "/xmp" не будет работать, так как этот блок App1 не содержит блок метаданных XMP.
Язык запросов также поддерживает нотацию индекса. Нотация индекса предоставляет доступ к определенному блоку метаданных при наличии нескольких блоков одного типа. В примере JPEG можно использовать следующее индексированного выражения пути:
- /[0]app1/[0]ifd
На языке запросов все индексы начинаются с нуля. В предыдущем выражении первые нулевые запросы для первого блока App1 и второй ноль запрашивает первый вложенный блок IFD. Нотация индекса по-прежнему может использоваться, даже если несколько блоков одного типа не существуют. Если в примере JPEG включен второй блок App1 со встроенным блоком IFD, выражение "/[1]app1/ifd" будет использоваться для доступа к второму блоку App1.
Нотация индекса становится более распространенной при работе с блоками PNG tEXt, так как, скорее всего, изображение PNG будет иметь несколько блоков tEXt.
Примечание.
Многомерные индексы массива не поддерживаются.
Выбор элемента
Вы можете получить доступ к элементам метаданных в блоке метаданных, создав выражения выбора блока. Рассмотрим свойства рейтинга XMP и Microsoft Photo в примере JPEG. Эти метаданные существуют в двух блоках метаданных: блоки App1/IFD и XMP. Таким образом, для доступа к тем же данным можно использовать несколько выражений. Следующее выражение обращается к рейтингу MicrosoftPhoto в блоке XMP:
- /xmp/xmp:Rating
Часть выражения xmp:— это понятный идентификатор схемы. XMP — это расширяемый стандарт и позволяет сторонним сущностям публиковать собственные схемы, определяющие, как хранить определенные элементы метаданных. Схема XMP полностью определяется URL-адресом, но WIC предоставляет набор понятных идентификаторов для известных схем. Дополнительные сведения см. в разделе "Запросы метаданных в формате собственного изображения".
Для изображений JPEG сведения о рейтинге также можно хранить в вложенных блоках IFD App1. Однако в отличие от примера рейтинга XMP блок IFD не использует имя схемы для доступа к сведениям о рейтинге. Вместо этого используется выражение данных. Следующее выражение используется для доступа к рейтингу MicrosoftPhoto в вложенном блоке IFD App1:
- /app1/ifd/{ushort=18249}
В этом выражении часть выражения "/app1/ifd" — это путь навигации к блоку IFD (как описано ранее в разделе выбора блоков). Вторая часть выражения "/{ushort=18249}" обращается к данным. Эта часть выражения указывает средству синтаксического анализа запроса найти данные, внедренные в неподписанный короткий тег с идентификатором тега 18249.
Примечание.
Список распространенных форматов метаданных, поддерживаемых каждым форматом изображения, см. в разделе "Запросы метаданных в собственном формате изображения".
{ushort=18249} — это выражение данных и может принимать несколько форм. Выражение данных — это два выражения части, содержащее запрошенный тег метаданных или ключ, в данном случае —18249, а также тип данных ключа в данном случае «ushort». Две части разделены знаком равенства (=). WICsupports большинство распространенных типов данных C/C++. Следующие типы данных принимаются языком запросов:
- char
- Uchar
- short
- ushort
- длинный
- ulong
- INT
- uint
- longlong
- с плавающей запятой
- двойной точности
- str
- wstr
- guid
- bool
Примечание.
Этот список указывает только типы данных, поддерживаемые языком запросов метаданных. Используйте эти типы данных при создании выражения данных запроса метаданных, например {ushort=18249}. WIC возвращает значение элемента метаданных в виде PROPVARIANT, определяющего собственную систему типов.
В примере используется тег данных 18249. Это конкретное число определяется корпорацией Майкрософт, чтобы содержать рейтинг MicrosoftPhoto. Тег данных может быть любым числом, строкой или GUID в зависимости от нужного элемента данных.
В отличие от примера XMP Rating, в блоке App1/IFD нет столкновения имен для значения рейтинга. Это связано с тем, что значение оценки XMP фактически хранится в другом теге ushort 18246. Таким образом, выражение для доступа к рейтингу XMP в блоке App1/IFD:
- /app1/ifd/{ushort=18246}
Примечание.
Официальное описание языка запросов метаданных см. в разделе "Сводка по языку запросов метаданных" далее в этом документе.
Escape-символ
Язык запросов не учитывает регистр и обрабатывает все символы как строчные регистры. Однако некоторые форматы метаданных (например, XMP) чувствительны к регистру. При работе с форматом метаданных с учетом регистра используйте символ обратной косой черты (\), если вы хотите указать символ верхнего регистра.
Escape-символ используется средство синтаксического анализа языка и следующий символ, который следует за ним, интерпретируется напрямую. Например, выражение {char=\}разрешается как "\", а {char=\C} разрешается в виде верхнего регистра C. Без escape-символа {char=\} будет недопустимым выражением, а {char=C} интерпретируется как строчный c. Не забудьте использовать escape-символ обратной косой черты перед всеми прописными буквами в форматах метаданных, которые чувствительны к регистру.
Примеры выражений
В следующей таблице приведены некоторые примеры выражений и описания их интерпретаций с помощью средства синтаксического анализа языка запросов.
Expression | Description |
---|---|
ifd/xmp/exif:Author | Соответствует следующему пути навигации: блок IFD —> блок XMP —> свойство Author в схеме Exif. |
/[1]ifd/[0]xmp/exif:Author | То же самое, что и первый элемент в этой таблице, за исключением префикса [#] описывает, какой элемент следует перемещать в случае столкновения имен. |
/ifd/{ushort=700}/Author | Аналогично первому элементу в этой таблице, за исключением того, что он использует выражение данных для ссылки на блок XMP вместо имени блока xmp (блок XMP внедрен в идентификатор короткого тега без знака 700). Кроме того, свойство Author не указывает схему. Средство синтаксического анализа запросов попытается сопоставить свойство во всех схемах и вернуть первое совпадение. |
/ifd/xmp | Предоставляет путь навигации к блоку метаданных. Если блок найден, возвращается новый модуль чтения метаданных или записи. |
/[*]tEXt/Keyword | Возвращает или задает свойство Ключевого слова для блока PNG. Так как спецификация метаданных PNG позволяет использовать несколько блоков определенного типа, нотация [*] возвращает или задает блок данных PNG с соответствующим свойством. В спецификации PNG два блока не могут иметь одинаковые свойства. |
Каждый блок метаданных также однозначно определяется GUID метаданных, который можно использовать вместо понятного имени блока. Следующий синтаксис можно использовать вместо предоставления имен блоков: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"
В следующей таблице приведены некоторые недопустимые примеры и причины их отклонения.
Недопустимое выражение | Описание отклонения |
---|---|
/ifd/[0][2]exif/ | Отклонено, так как многомерные индексы массива не поддерживаются. |
/ifd/{ushort=1}/{ushort=2} | Отклонен, если IFD не имеет tagID=1, который является обработчиком метаданных, который содержит элемент метаданных с тегом TAGID=2. |
/{ushort=1} | Отклонено, если обработка запроса относится к верхнему уровню иерархии метаданных. Это связано с тем, что верхний уровень содержит только блоки метаданных, а не элементы данных. |
Выражения политики метаданных фотографий
Как отмечалось ранее, полное выражение запроса начинается с косой черты (/). Выражения, которые не начинаются с косой черты, оцениваются как выражения политики. Выражение политики позволяет запрашивать метаданные фотографии для свойств оболочки Windows, связанных с изображением. В разделе выбора данных, приведенном ранее в этом документе, выражение "/xmp/xmp:Rating" использовалось для доступа к свойству рейтинга XMP. Это свойство также можно запрашивать с помощью следующего выражения политики:
- System.SimpleRating
Чтобы получить доступ к свойству оценки из схемы MicrosoftPhoto, можно использовать следующее выражение запроса:
- System.Rating
Выражения политики метаданных фотографий ведут себя по-разному от полного запроса метаданных несколькими заметными способами.
Во-первых, при доступе к метаданным с помощью выражения политики WIC выполняет арбитраж и разрешение конфликтов в случае, если одно и то же свойство доступно в нескольких блоках метаданных. Например, значения оценки MicrosoftPhoto и XMP хранятся как в блоке App1/IFD, так и в блоке XMP. Политика метаданных фотографии определяет приоритет, для которого возвращается значение блока при чтении метаданных. При написании метаданных политика метаданных фотографии гарантирует, что одинаковые свойства в разных блоках согласованы. Если вы используете запрос метаданных, например "/xmp/xmp:Rating", вы несете ответственность за арбитраж между различными расположениями метаданных.
Примечание.
Список поддерживаемых выражений политики и их политик сопоставления см. в разделе "Политики метаданных фотографий".
Во-вторых, выражения политики метаданных фотографий не зависят от формата изображения, в то время как полные запросы метаданных не являются. Например, запрос "/xmp/xmp:Rating" зависит от формата JPEG. Изображения TIFF также поддерживают метаданные XMP, но они хранятся по-разному по сравнению с JPEG, поэтому запрос TIFF будет иметь значение "/ifd/xmp/xmp:Rating". Однако в обоих случаях выражение политики будет "System.SimpleRating".
Выражения политики метаданных фотографий обеспечивают более высокий уровень абстракции и простоты по сравнению с полными запросами метаданных, поэтому следует предпочтительнее в случаях, когда доступ к метаданным низкого уровня не нужен. Однако выражения политики предоставляют доступ только к ограниченному набору метаданных изображения, в то время как язык запросов метаданных обеспечивает доступ почти ко всем метаданным, хранящимся в файле изображения.
Сводка по языку запросов метаданных
В следующей таблице представлено официальное определение языка запросов метаданных WIC. Каждый символ грамматики представляет выражение, состоящее из других символов. Выражение может быть другим символом или последовательностью других символов, разделенных вертикальной полосой (|), указывающей выбор "или". Все выражение справа — это возможная подстановка указанного символа слева.
Символ | Выражение |
---|---|
<path> | <name> | Путь к свойству '/' <> |
<Путь к свойству> | <Элемент> метаданных | <путь свойства '/' <путь> к свойству> |
<Элемент метаданных> | <Имя> индекса | <Имя> элемента | <Имя> элемента схемы ":" <> |
<Имя схемы> | <Имя элемента> |
<Имя элемента> | <Элемент> метаданных | <индексированные индексы элементов><> |
<индексированные элементы> | <элемент> | <элемент подразумеваемых метаданных><> |
<подразумеваемые метаданные> | '<'name>'><' |
<item> | <name> | < Данные> индекса><| <Данных> |
<data> | Тип данных "{" ">=" <<значение> "}" |
< Индекс> | '[' <число> | <звезда> ']' |
<типа данных> | 'char' | 'uchar' | 'short' | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool' |
<значение данных> | <число> | <name> | <Guid> |
<Звездочные> | '*' |
<number> | number |
<name> | строка |
<guid> | guid |
См. также
-
Концептуальной
-
Практическое руководство. Повторное кодирование изображения JPEG с помощью метаданных