Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе представлен язык запросов метаданных для компонента образов Windows (WIC). Язык запросов метаданных используется для создания выражений, которые находят определенные данные (элементы метаданных) и расположения (блоки метаданных) в метаданных изображения.
В этом разделе содержатся следующие разделы.
- Предварительные условия
- введение
- Анатомия выражения пути
- Правила метаданных фотографий
- Сводка по языку запросов метаданных
- связанные разделы
Необходимые условия
Чтобы понять эту тему, необходимо ознакомиться с системой метаданных WIC, как описано в обзоре метаданных WIC и доступе к метаданным, как описано в обзоре чтения и записи метаданных изображения.
Знакомство
Вы взаимодействуете с платформой метаданных в основном через два компонента объектной модели (COM): средство чтения запросов, представленное интерфейсом IWICMetadataQueryReader, и средство записи запросов, представленное интерфейсом IWICMetadataQueryWriter. Эти компоненты позволяют считывать или записывать метаданные с помощью языка запросов метаданных. Язык запросов описывает синтаксис выражения пути и компоненты запроса используют это выражение пути для доступа к нужным метаданным. Это выражение пути описывает расположение блока метаданных или элемента.
Блок метаданных — это именованной группы метаданных в определенном формате. Блок метаданных может содержать отдельные элементы метаданных, такие как время разработки или создания, а также дополнительные блоки метаданных. Имя блока метаданных определяется его форматом. Например, блок метаданных, содержащий метаданные App1, будет называться app1. Распространенные форматы метаданных включают App1, Exif, IFD и XMP.
Элемент метаданных — это пара "имя-значение", описывающая характеристики, такие как автор, название и оценка.
Выражение пути содержит одно или несколько имен блоков метаданных. Он также может указать элемент метаданных в блоке метаданных. Следующее выражение пути представляет блок App1, содержащий блок IFD, содержащий элемент метаданных:
- /app1/ifd/{ushort=18249}
На следующей схеме показана структура образца изображения JPEG с четырьмя блоками корневых метаданных: App0, App1, XMP и неизвестный блок. Каждый выделенный элемент отмечает тип метаданных (блок или элемент) и выражение запроса, используемое для извлечения данных.
изображение jpeg ,,
Заметка
Содержимое этой схемы используется в разных частях этого документа и во многих примерах.
Анатомия выражения пути в программировании
Чтобы получить доступ к метаданным с помощью API WIC, в большинстве случаев необходимо использовать полное выражение запроса. В этом разделе рассматриваются полностью квалифицированные выражения для доступа к метаданным. Если вам нужны сведения о случаях, в которых используются не полные выражения, см. раздел "Выражение политики метаданных фотографий" далее в этом документе.
Что такое полностью квалифицированное выражение запроса? В WIC полное выражение — это строка, которая начинается с косой черты (/), после которой следует путь навигации к блоку метаданных или конкретному элементу метаданных. Каждый шаг в пути навигации разделен косой чертой, формируя выражение для доступа к блоку метаданных или элементу метаданных. Например, ниже приведено полное выражение запроса, которое обращается к рейтингу фотографий Майкрософт в блоке IFD, вложенном в блок App1:
- /app1/ifd/{ushort=18249}
При синтаксическом анализе этого выражения WIC сначала выполняет поиск блока метаданных 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:Оценка
Часть выражения 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». Две части разделены знаком равенства (=). WIC поддерживает большинство общих типов данных C/C++. Следующие типы данных принимаются языком запросов:
- символ
- uchar
- короткий
- ushort
- длинный
- ulong
- int
- uint
- longlong
- плавать
- двойной
- ул.
- 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. Без управляющего символа {char=\} будет недопустимым выражением, а {char=C} интерпретируется как строчная c. Не забудьте использовать escape-символ обратной косой черты перед всеми прописными буквами в форматах метаданных, которые чувствительны к регистру.
Примеры выражений
В следующей таблице приведены некоторые примеры выражений и описания их интерпретаций с помощью средства синтаксического анализа языка запросов.
Выражение | Описание |
---|---|
ifd/xmp/exif:Author | Соответствует следующему пути навигации: блок IFD,> и блок XMP,>, свойство "Автор" в схеме Exif. |
/[1]ifd/[0]xmp/exif:Автор | То же самое, что и первый элемент в этой таблице, с тем отличием, что префикс [#] указывает, какой элемент следует выбрать в случае совпадения имен. |
/ifd/{ushort=700}/Автор | Аналогично первому элементу в этой таблице, за исключением того, что он использует выражение данных для ссылки на блок 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, можно использовать следующее выражение запроса:
- Система.Оценка
Выражения политики в отношении метаданных фотографий ведут себя по-разному от полностью квалифицированного запроса метаданных несколькими заметными способами.
Во-первых, при доступе к метаданным с помощью выражения политики WIC выполняет арбитраж и разрешение конфликтов в случае, если одно и то же свойство доступно в нескольких блоках метаданных. Например, значения оценки MicrosoftPhoto и XMP хранятся как в блоке App1/IFD, так и в блоке XMP. Политика метаданных фотографии определяет приоритет возврата значения блока при чтении метаданных. При написании метаданных политика в отношении метаданных фотографий обеспечивает, что одинаковые свойства в разных блоках согласованы. Если вы используете запрос метаданных, например "/xmp/xmp:Rating", вы несете ответственность за арбитраж между различными расположениями метаданных.
Заметка
Список поддерживаемых выражений политики и их политик сопоставления см. в разделе Политики метаданных фотографий.
Во-вторых, выражения политики метаданных фотографий не зависят от формата изображения, в то время как полные запросы метаданных зависят от него. Например, запрос "/xmp/xmp:Rating" зависит от формата JPEG. Изображения TIFF также поддерживают метаданные XMP, но они хранятся по-разному по сравнению с JPEG, поэтому запрос TIFF будет иметь значение "/ifd/xmp/xmp:Rating". Однако в обоих случаях выражение политики будет "System.SimpleRating".
Выражения политики метаданных фотографий обеспечивают более высокий уровень абстракции и простоты по сравнению с полными запросами метаданных, поэтому их следует предпочесть в случаях, когда доступ к метаданным низкого уровня не требуется. Однако выражения политики предоставляют доступ только к ограниченному набору метаданных изображения, в то время как язык запросов метаданных обеспечивает доступ почти ко всем метаданным, хранящимся в файле изображения.
Сводка по языку запросов метаданных
В следующей таблице представлено официальное определение языка запросов метаданных WIC. Каждый символ грамматики представляет выражение, состоящее из других символов. Выражение может быть другим символом или последовательностью других символов, разделенных вертикальной полосой (|), указывающей выбор "или". Все выражение справа — это возможный заменитель указанного символа слева.
Символ | Выражение |
---|---|
<пути> | <имя> | Путь <свойства "/"> |
Путь к свойству <> | <элемент метаданных> | <путь свойства> '/' <путь свойства> |
элемент метаданных <> | <имя индекса> | <имя элемента> | <имя схемы> ':' <имя элемента> |
<имя схемы> | <имя элемента> |
<имя элемента> | <элемент метаданных> | <индексированный элемент><индекс> |
<индексированный элемент> | <элемент> | <подразумеваемые метаданные><элемент> |
<подразумеваемые метаданные> | '<'<'имя'>'>' |
<предмет> | |
<данных> | "{" <тип данных> "=" <значение> "}" |
<index> | "[" <номер> | <звезда> ']" |
<типа данных> | 'char' | 'uchar' | 'short' | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool' |
<значение данных> | <номер> | <имя> | <guid> |
<звезда> | '*' |
<номер> | число |
<имя> | струна |
<guid> | GUID |
Связанные разделы
-
Концептуальные