Vue d’ensemble du langage de requête de métadonnées

Cette rubrique présente le langage de requête de métadonnées pour le composant WIC (Windows Imaging Component). Vous utilisez le langage de requête de métadonnées pour créer des expressions qui recherchent des données (éléments de métadonnées) et des emplacements spécifiques (blocs de métadonnées) dans les métadonnées d’une image.

Cette rubrique contient les sections suivantes.

Prérequis

Pour comprendre cette rubrique, vous devez être familiarisé avec le système de métadonnées WIC, comme décrit dans vue d’ensemble des métadonnées WIC et accès aux métadonnées, comme décrit dans vue d’ensemble de la lecture et de l’écriture des métadonnées d’image.

Introduction

Vous interagissez avec la plateforme de métadonnées principalement via deux composants COM (Component Object Model) : un lecteur de requête, représenté par l’interface IWICMetadataQueryReader , et un enregistreur de requêtes, représenté par l’interface IWICMetadataQueryWriter . Ces composants vous permettent de lire ou d’écrire des métadonnées à l’aide du langage de requête de métadonnées. Le langage de requête décrit la syntaxe d’une expression de chemin d’accès et les composants de la requête utilisent cette expression de chemin d’accès pour accéder aux métadonnées souhaitées. Cette expression de chemin d’accès décrit l’emplacement d’un bloc ou d’un élément de métadonnées.

Un bloc de métadonnées est un groupe nommé de métadonnées dans un format spécifique. Un bloc de métadonnées peut contenir des éléments de métadonnées individuels tels qu’un temps d’auteur ou de création et des blocs de métadonnées supplémentaires. Le nom d’un bloc de métadonnées est déterminé par son format. Par exemple, un bloc de métadonnées contenant des métadonnées App1 serait nommé « app1 ». Les formats de métadonnées courants incluent App1, Exif, IFD et XMP.

Un élément de métadonnées est une paire nom/valeur qui décrit des caractéristiques telles que l’auteur, le titre et l’évaluation.

Une expression de chemin d’accès contient un ou plusieurs noms de blocs de métadonnées. Il peut également spécifier un élément de métadonnées dans un bloc de métadonnées. L’expression de chemin d’accès suivante représente un bloc App1 qui contient un bloc IFD qui contient l’élément de métadonnées :

  • /app1/ifd/{ushort=18249}

Le diagramme suivant illustre la composition d’un exemple d’image JPEG avec quatre blocs de métadonnées racines : App0, App1, XMP et un bloc inconnu. Chaque élément mis en surbrillance note le type de métadonnées (bloc ou élément) et l’expression de requête utilisée pour récupérer les données.

image jpeg avec légendes de métadonnées

Notes

Le contenu de ce diagramme est référencé dans ce document et est utilisé dans de nombreux exemples.

 

Anatomie d’une expression path

Pour accéder aux métadonnées à l’aide des API WIC, une expression de requête complète doit être utilisée dans la plupart des cas. Cette rubrique traite des expressions complètes pour accéder aux métadonnées. Si vous avez besoin d’informations sur les cas dans lesquels des expressions non complètes sont utilisées, reportez-vous à la section Expression de stratégie de métadonnées de photos plus loin dans ce document.

Qu’est-ce qu’une expression de requête complète ? Dans WIC, une expression complète est une chaîne qui commence par la barre oblique du caractère de chemin d’accès (/), suivie d’un chemin de navigation vers un bloc de métadonnées ou un élément de métadonnées spécifique. Chaque étape du chemin de navigation est séparée par une barre oblique, formant une expression permettant d’accéder à un bloc de métadonnées ou à un élément de métadonnées. Par exemple, voici une expression de requête complète qui accède à Microsoft Photo Rating dans un bloc IFD imbriqué dans un bloc App1 :

  • /app1/ifd/{ushort=18249}

Lorsque WIC analyse cette expression, il recherche d’abord le bloc de métadonnées App1 dans les métadonnées de l’image. Si le bloc App1 est trouvé, il poursuit sa recherche à la recherche du bloc de métadonnées IFD imbriqué. Si le bloc IFD est trouvé, il recherche ensuite l’élément de métadonnées spécifique, dans ce cas l’évaluation MicrosoftPhoto sous la balise 18249, dans le bloc de métadonnées IFD. Si, à un moment donné, WIC ne trouve pas de bloc de métadonnées ou d’élément, il abandonne la requête.

Sélection de bloc

L’expression de requête de métadonnées WIC la plus simple est une expression permettant d’obtenir un lecteur/enregistreur de requête pour un bloc de métadonnées spécifique. L’obtention d’un lecteur/enregistreur de requêtes vous permet d’diriger les requêtes suivantes directement vers un bloc de métadonnées imbriqué sans traiter son bloc parent. Une expression de requête de sélection de bloc est un chemin de navigation vers le bloc de métadonnées souhaité. Par exemple, dans l’illustration précédente, il existe cinq blocs de métadonnées, dont deux sont imbriqués dans d’autres blocs de métadonnées. Voici les expressions de chemin d’accès à chaque bloc de métadonnées dans l’exemple JPEG :

  • /app0
  • /app1
  • /app1/ifd
  • /app1/ifd/exif
  • /Xmp

Lorsque vous utilisez un lecteur/enregistreur de requête pour exécuter une requête, il retourne un nouveau lecteur/enregistreur de requête qui services les requêtes dans l’étendue du bloc de métadonnées spécifié. Par instance, si vous exécutez la requête « /app1 », un nouveau lecteur de requête est obtenu et les requêtes au nouveau lecteur sont relatives au bloc App1. Cela signifie que la requête « /ifd » est valide pour le nouveau lecteur, car le bloc App1 contient un bloc IFD. Toutefois, « /xmp » ne fonctionne pas, car ce bloc App1 ne contient pas de bloc de métadonnées XMP.

Le langage de requête prend également en charge une notation d’index. La notation d’index permet d’accéder à un bloc de métadonnées spécifique lorsqu’il existe plusieurs blocs du même type. Pour l’exemple JPEG, l’expression de chemin indexé suivante peut être utilisée :

  • /[0]app1/[0]ifd

Dans le langage de requête, tous les index commencent à zéro. Dans l’expression précédente, le premier zéro interroge le premier bloc App1 et le second zéro interroge le premier bloc IFD imbriqué. La notation d’index peut toujours être utilisée même si plusieurs blocs du même type n’existent pas. Si l’exemple JPEG incluait un deuxième bloc App1 avec un bloc IFD incorporé, l’expression « /[1]app1/ifd » serait utilisée pour accéder au deuxième bloc App1.

La notation d’index devient plus courante lorsque vous traitez des blocs PNG tEXt, car il est probable que l’image PNG aura plusieurs blocs tEXt.

Notes

Les index tableaux multidimensionnels ne sont pas pris en charge.

 

Sélection de l’élément

Vous pouvez accéder aux éléments de métadonnées d’un bloc de métadonnées en générant des expressions de sélection de bloc. Considérez les propriétés XMP et Microsoft Photo rating dans l’exemple JPEG. Ces métadonnées existent dans deux blocs de métadonnées : les blocs App1/IFD et XMP. Par conséquent, plusieurs expressions peuvent être utilisées pour accéder aux mêmes données. L’expression suivante accède à l’évaluation MicrosoftPhoto dans le bloc XMP :

  • /xmp/xmp:Rating

La partie « xmp: » de l’expression est un identificateur convivial de schéma. XMP est une norme extensible qui permet aux entités tierces de publier leurs propres schémas qui définissent comment stocker certains éléments de métadonnées. Un schéma XMP est entièrement identifié par une URL, mais WIC fournit un ensemble d’identificateurs conviviaux pour les schémas connus. Pour plus d’informations, consultez la rubrique Requêtes de métadonnées de format d’image native .

Pour les images JPEG, les informations d’évaluation peuvent également être stockées dans le bloc IFD imbriqué App1. Toutefois, contrairement à l’exemple d’évaluation XMP, le bloc IFD n’utilise pas de nom de schéma pour accéder aux informations d’évaluation. Vous utilisez une expression de données à la place. L’expression suivante est utilisée pour accéder à l’évaluation MicrosoftPhoto dans le bloc IFD imbriqué App1 :

  • /app1/ifd/{ushort=18249}

Dans cette expression, la partie « /app1/ifd » de l’expression est le chemin de navigation vers le bloc IFD (comme indiqué précédemment dans la section Sélection de blocs). La deuxième partie de l’expression « /{ushort=18249} » accède aux données. Cette partie de l’expression indique à l’analyseur de requête de rechercher les données incorporées dans la balise short non signée qui a l’identificateur de balise 18249.

Notes

Pour obtenir la liste des formats de métadonnées courants pris en charge par chaque format d’image, consultez la rubrique Requêtes de métadonnées de format d’image native .

 

{ushort=18249} est une expression de données qui peut prendre plusieurs formes. Une expression de données est une expression en deux parties contenant la balise ou la clé de métadonnées demandées, en l’occurrence « 18249 », et le type de données de la clé, en l’occurrence « ushort ». Les deux parties sont séparées par un signe égal (=). WIC supporte la majorité des types de données C/C++ courants. Les types de données suivants sont acceptés par le langage de requête :

  • char
  • uchar
  • short
  • ushort
  • long
  • ulong
  • int
  • uint
  • longlong
  • float
  • double
  • str
  • wstr
  • guid
  • bool

Notes

Cette liste spécifie uniquement les types de données pris en charge par le langage de requête de métadonnées. Utilisez ces types de données lors de la création d’une expression de données de requête de métadonnées telle que {ushort=18249}. Le WIC retourne la valeur de l’élément de métadonnées sous la forme PROPVARIANT, qui définit son propre système de type.

 

Le « 18249 » dans l’exemple est la balise de données. Ce nombre particulier est défini par Microsoft pour contenir l’évaluation MicrosoftPhoto. La balise de données peut être n’importe quel nombre, chaîne ou GUID en fonction de l’élément de données que vous recherchez

Contrairement à l’exemple XMP Rating, il n’y a pas de collision de nom pour la valeur d’évaluation dans le bloc App1/IFD. En effet, la valeur d’évaluation XMP est en fait stockée sous une autre balise ushort, 18246. Par conséquent, l’expression permettant d’accéder à l’évaluation XMP dans le bloc App1/IFD est :

  • /app1/ifd/{ushort=18246}

Notes

Pour obtenir une description formelle du langage de requête de métadonnées, consultez la section Résumé du langage de requête de métadonnées plus loin dans ce document.

 

Caractère d'échappement

Le langage de requête ne respecte pas la casse et traite tous les caractères en minuscules. Toutefois, certains formats de métadonnées (tels que XMP) respectent la casse. Lorsque vous utilisez un format de métadonnées respectant la casse, utilisez le caractère barre oblique inverse (\) lorsque vous souhaitez spécifier un caractère majuscule.

Le caractère d’échappement est consommé par l’analyseur de langage et le caractère suivant qui le suit est interprété directement. Par exemple, l’expression {char=\\} est résolue en tant que '\' et {char=\C} est résolue en C majuscules. Sans le caractère d’échappement, {char=\} serait une expression non valide et {char=C} serait interprété comme un c minuscule. Veillez à utiliser le caractère d’échappement de la barre oblique inverse avant toutes les lettres majuscules dans les formats de métadonnées respectant la casse.

Exemples d'expressions

Le tableau suivant fournit des exemples d’expressions et des descriptions de leurs interprétations par l’analyseur de langage de requête.

Expression Description
ifd/xmp/exif:Author Correspond au chemin de navigation suivant : bloc IFD -> bloc XMP -> propriété « Author » dans le schéma « Exif ».
/[1]ifd/[0]xmp/exif:Author Identique au premier élément de cette table, sauf que le préfixe [#] décrit l’élément à parcourir en cas de collision de nom.
/ifd/{ushort=700}/Author Identique au premier élément de cette table, sauf qu’il utilise une expression de données pour référencer le bloc XMP au lieu du nom de bloc « xmp » (le bloc XMP est incorporé sous l’identificateur de balise courte non signé 700). En outre, la propriété « Author » ne spécifie pas de schéma. L’analyseur de requête tente de faire correspondre la propriété dans tous les schémas et de retourner la première correspondance.
/ifd/xmp Fournit un chemin de navigation vers un bloc de métadonnées. Si le bloc est trouvé, un nouveau lecteur/enregistreur de métadonnées est retourné.
/[*]tEXt/Keyword Obtient ou définit la propriété Keyword pour un segment PNG. Étant donné que la spécification de métadonnées PNG autorise plusieurs segments d’un type particulier, la notation [*] obtient/définit le segment PNG de données avec la propriété appropriée. Selon la spécification PNG, deux segments ne peuvent pas avoir les mêmes propriétés.

 

Chaque bloc de métadonnées est également identifié de manière unique par le GUID de métadonnées qui peut être utilisé à la place du nom de bloc convivial. La syntaxe suivante peut être utilisée au lieu de fournir des noms de blocs : « /{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier »

Le tableau suivant fournit des exemples non valides et les raisons pour lesquelles ils seraient rejetés.

Expression non valide Description du rejet
/ifd/[0][2]exif/ Rejeté, car les index de tableau multidimensionnels ne sont pas pris en charge.
/ifd/{ushort=1}/{ushort=2} Rejeté, sauf si l’IFD a un tagID=1 qui est un gestionnaire de métadonnées qui contient un élément de métadonnées avec un tagID=2.
/{ushort=1} Rejeté si le traitement de la requête est relatif à un niveau supérieur de la hiérarchie de métadonnées. En effet, le niveau supérieur contient uniquement des blocs de métadonnées et non des éléments de données.

 

Expressions de stratégie de métadonnées de photos

Comme indiqué précédemment, une expression de requête complète commence par une barre oblique (/). Les expressions qui ne commencent pas par la barre oblique sont évaluées en tant qu’expressions de stratégie. Une expression de stratégie vous permet d’interroger les métadonnées de photo pour les propriétés de l’interpréteur de commandes Windows liées à l’image. Dans la section Sélection des données plus haut dans ce document, l’expression « /xmp/xmp:Rating » a été utilisée pour accéder à la propriété d’évaluation XMP. Cette propriété peut également être interrogée à l’aide de l’expression de stratégie suivante :

  • System.SimpleRating

Pour accéder à la propriété rating à partir du schéma MicrosoftPhoto, vous pouvez utiliser l’expression de requête suivante :

  • System.Rating

Les expressions de stratégie de métadonnées de photo se comportent différemment des requêtes de métadonnées complètes de quelques manières notables.

Tout d’abord, lors de l’accès aux métadonnées à l’aide d’une expression de stratégie, WIC effectue l’arbitrage et la résolution des conflits dans le cas où la même propriété est disponible dans plusieurs blocs de métadonnées. Par instance, les valeurs d’évaluation MicrosoftPhoto et XMP sont stockées dans le bloc App1/IFD et le bloc XMP. La stratégie de métadonnées de photo détermine la priorité pour laquelle la valeur de bloc est retournée lors de la lecture des métadonnées. Lorsque vous écrivez des métadonnées, la stratégie de métadonnées de photo garantit que les mêmes propriétés dans différents blocs sont cohérentes. Si vous utilisez une requête de métadonnées telle que « /xmp/xmp:Rating », vous êtes responsable de l’arbitrage entre les différents emplacements de métadonnées.

Notes

Pour obtenir la liste des expressions de stratégie prises en charge et de leurs stratégies de mappage, consultez la rubrique Stratégies de métadonnées de photo.

 

Deuxièmement, les expressions de stratégie de métadonnées de photo sont indépendantes du format d’image, contrairement aux requêtes de métadonnées complètes. Par exemple, la requête « /xmp/xmp:Rating » est spécifique au format JPEG. Les images TIFF prennent également en charge les métadonnées XMP, mais elles sont stockées différemment par rapport à JPEG, de sorte que la requête TIFF est « /ifd/xmp/xmp:Rating ». Toutefois, dans les deux cas, l’expression de stratégie est « System.SimpleRating ».

Les expressions de stratégie de métadonnées de photo fournissent un niveau d’abstraction et de simplicité plus élevé par rapport aux requêtes de métadonnées complètes. Elles doivent donc être recommandées dans les cas où l’accès aux métadonnées de bas niveau n’est pas nécessaire. Toutefois, les expressions de stratégie fournissent uniquement l’accès à un ensemble limité de métadonnées d’image, tandis que le langage de requête de métadonnées fournit l’accès à presque toutes les métadonnées stockées dans un fichier image.

Résumé du langage de requête de métadonnées

Le tableau suivant est une définition formelle du langage de requête de métadonnées WIC. Chaque symbole de grammaire représente une expression composée d’autres symboles. L’expression peut être un autre symbole ou une séquence d’autres symboles séparés par la barre verticale (|), indiquant un choix « ou ». L’expression entière à droite est une substitution possible pour le symbole spécifié à gauche.

Symbole Expression
<path> <name> | Chemin de propriété '/' <>
<chemin de propriété> <élément de> métadonnées | < chemin de> propriété '/' chemin de <propriété>
<élément de métadonnées> <nom de> l’index | < nom de> l’élément | < nom de> schéma ':' nom de l’élément <>
<nom du schéma> <nom de l’élément>
<nom de l’élément> <élément de> métadonnées | < Index d’élément><indexé>
<élément indexé> <item> | < élément de métadonnées implicites><>
<métadonnées implicites> '<'<name>'>'
<item> <name> | & lt;données d’index><> | < Données>
<data> '{' type> de <données '=' <valeur> '}'
&lt;index> Nombre '[' <> | <> star ']'
<type de données> 'char' | 'uchar' | 'short' | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool'
<valeur de données> <number> | < name> | < Guid>
<étoile> '*'
<number> nombre
<name> string
<guid> guid

 

Conceptuel

Vue d’ensemble du composant d’acquisition d’images Windows

Vue d’ensemble des métadonnées WIC

Vue d’ensemble de la lecture et de l’écriture de métadonnées d’image

Vue d’ensemble de l’extensibilité des métadonnées

Procédure : réencoder une image JPEG avec des métadonnées