Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico apresenta a linguagem de consulta de metadados para o Windows Imaging Component (WIC). Use a linguagem de consulta de metadados para criar expressões que localizam dados específicos (itens de metadados) e locais (blocos de metadados) dentro dos metadados de uma imagem.
Este tópico contém as seguintes seções.
- Pré-requisitos
- Introdução
- Anatomia de uma Expressão de Caminho
- Expressões da política de metadados de fotos
- Resumo da linguagem de consulta de metadados
- Tópicos relacionados
Pré-requisitos
Para entender este tópico, deve-se estar familiarizado com o sistema de metadados WIC, conforme descrito na Visão geral de metadados WIC e no acesso a metadados, conforme descrito na Visão geral da leitura e escrita de metadados de imagem .
Introdução
Você interage com a plataforma de metadados principalmente por meio de dois componentes COM (Component Object Model): um leitor de consultas, representado pela interfaceIWICMetadataQueryReader, e um gravador de consultas, representado pela interfaceIWICMetadataQueryWriter. Esses componentes permitem que você leia ou escreva metadados usando a linguagem de consulta de metadados. A linguagem de consulta descreve a sintaxe de uma expressão de caminho e os componentes de consulta usam essa expressão de caminho para acessar os metadados desejados. Esta expressão de caminho descreve o local de um bloco ou item de metadados.
Um bloco de metadados é um grupo nomeado de metadados em um formato específico. Um bloco de metadados pode conter itens de metadados individuais, como um autor ou tempo de criação, e blocos de metadados adicionais. O nome de um bloco de metadados é determinado pelo seu formato. Por exemplo, um bloco de metadados contendo metadados App1 seria chamado de "app1". Os formatos de metadados comuns incluem App1, Exif, IFD e XMP.
Um item de metadados é um par nome/valor que descreve características como autor, título e classificação.
Uma expressão de caminho contém um ou mais nomes de bloco de metadados. Ele também pode especificar um item de metadados dentro de um bloco de metadados. A expressão de caminho a seguir representa um bloco App1 que contém um bloco IFD que contém o item de metadados:
- /app1/ifd/{ushort=18249}
O diagrama a seguir ilustra a composição de uma imagem JPEG de exemplo com quatro blocos de metadados raiz: App0, App1, XMP e um bloco desconhecido. Cada item realçado observa o tipo de metadados (bloco ou item) e a expressão de consulta usada para recuperar os dados.
Observação
O conteúdo deste diagrama é referenciado ao longo deste documento e é usado em muitos dos exemplos.
Anatomia de uma expressão de caminho
Para acessar metadados usando as APIs WIC, uma expressão de consulta totalmente qualificada deve ser usada na maioria dos casos. Este tópico discute expressões totalmente qualificadas para acessar metadados. Se você precisar de informações sobre os casos em que expressões não totalmente qualificadas são usadas, consulte a seção Expressão da política de metadados fotográficos mais adiante neste documento.
O que é uma expressão de consulta totalmente qualificada? No WIC, uma expressão completamente qualificada é uma cadeia que começa com a barra (/), seguida por um caminho de navegação para um bloco de metadados ou um item de metadados específico. Cada etapa dentro do caminho de navegação é separada por uma barra, formando uma expressão para acessar um bloco de metadados ou um item de metadados. Por exemplo, a seguir está uma expressão de consulta totalmente qualificada que acessa o Microsoft Photo Rating em um bloco IFD aninhado em um bloco App1:
- /app1/ifd/{ushort=18249}
Quando o WIC analisa essa expressão, ele primeiro procura o bloco de metadados App1 dentro dos metadados da imagem. Se o bloco App1 for encontrado, continua a sua pesquisa à procura do bloco de metadados IFD aninhado. Se o bloco IFD for encontrado, ele procurará o item de metadados específico, neste caso a classificação MicrosoftPhoto sob a tag 18249, dentro do bloco de metadados IFD. Se, a qualquer momento, o WIC não encontrar um bloco ou item de metadados, ele anulará a consulta.
Seleção de blocos
A expressão de consulta de metadados WIC mais simples é uma expressão para obter um leitor/gravador de consulta para um bloco de metadados específico. Obter um leitor/gravar de consultas permite direcionar consultas subsequentes diretamente para um bloco de metadados aninhado sem lidar com o bloco pai. Uma expressão de consulta de seleção de bloco é um caminho de navegação para o bloco de metadados desejado. Por exemplo, na ilustração anterior, há cinco blocos de metadados, dois dos quais são aninhados em outros blocos de metadados. A seguir estão as expressões de caminho para cada bloco de metadados no exemplo JPEG:
- /app0
- /app1
- /app1/ifd
- /app1/ifd/exif
- /xmp
Quando você usa um leitor/gravador de consulta para executar uma consulta, ele retorna um novo leitor/gravador de consulta que atende consultas dentro do escopo do bloco de metadados especificado. Por exemplo, se você executar a consulta "/app1", um novo leitor de consulta será obtido e as consultas ao novo leitor serão relativas ao bloco App1. Isso significa que a consulta "/ifd" é válida para o novo leitor porque o bloco App1 contém um bloco IFD. No entanto, "/xmp" não funcionaria porque este bloco App1 não contém um bloco de metadados XMP.
A linguagem de consulta também suporta uma notação de índice. A notação de índice fornece acesso a um bloco de metadados específico quando existem vários blocos do mesmo tipo. Para o exemplo JPEG, a seguinte expressão de caminho indexado pode ser usada:
- /[0]app1/[0]ifd
Na linguagem de consulta, todos os índices começam em zero. Na expressão anterior, o primeiro zero interroga o primeiro bloco App1 e o segundo zero interroga o primeiro bloco IFD aninhado. A notação de índice ainda pode ser usada mesmo quando vários blocos do mesmo tipo não existem. Se o exemplo JPEG incluísse um segundo bloco App1 com um bloco IFD incorporado, a expressão "/[1]app1/ifd" seria usada para acessar o segundo bloco App1.
A notação de índice torna-se mais comum ao lidar com blocos tEXt PNG porque é provável que a imagem PNG tenha mais de um bloco tEXt.
Observação
Não há suporte para índices de matriz multidimensional.
Seleção de itens
Você pode acessar os itens de metadados de um bloco de metadados, construindo com base nas expressões de seleção de bloco. Considere as propriedades de classificação XMP e Microsoft Photo no exemplo do JPEG. Esses metadados existem em dois blocos de metadados: os blocos App1/IFD e XMP. Portanto, mais de uma expressão pode ser usada para acessar os mesmos dados. A expressão a seguir acessa a classificação MicrosoftPhoto no bloco XMP:
- /xmp/xmp:Classificação
A parte "xmp:" da expressão é um identificador amigável de esquema. XMP é um padrão extensível e permite que entidades de terceiros publiquem seus próprios esquemas que definem como armazenar certos itens de metadados. Um esquema XMP é totalmente identificado por uma URL, mas o WIC fornece um conjunto de identificadores amigáveis para esquemas conhecidos. Para obter mais informações, consulte o tópico Native Image Format Metadata Queries.
Para imagens JPEG, as informações de classificação também podem ser armazenadas no bloco IFD incorporado App1. No entanto, ao contrário do exemplo de classificação XMP, o bloco IFD não usa um nome de esquema para acessar as informações de classificação. Em vez disso, use uma expressão de dados. A expressão seguinte é usada para aceder à classificação MicrosoftPhoto no bloco IFD aninhado App1:
- /app1/ifd/{ushort=18249}
Nesta expressão, a parte "/app1/ifd" da expressão é o caminho de navegação para o bloco IFD (conforme discutido anteriormente na seção Seleção de blocos). A segunda parte da expressão "/{ushort=18249}" acessa os dados. Esta parte da expressão instrui o analisador de consulta a localizar os dados incorporados na marca curta não assinada que tem o identificador de marca 18249.
Observação
Para obter uma lista de formatos de metadados comuns suportados por cada formato de imagem, consulte o tópico Native Image Format Metadata Queries.
O {ushort=18249} é uma expressão de dados e pode assumir várias formas. Uma expressão de dados é uma expressão de duas partes que contém a tag ou chave de metadados solicitada, neste caso "18249", e o tipo de dados da chave, neste caso "ushort". As duas partes estão separadas por um sinal de igual (=). O WIC suporta a maioria dos tipos de dados C/C++ comuns. Os seguintes tipos de dados são aceitos pela linguagem de consulta:
- char
- uchar
- curto
- Ushort
- Longo
- ulong
- Int
- uint
- longo-longo
- flutuar
- duplo
- STR
- WSTR
- GUID
- Bool
Observação
Esta lista especifica apenas os tipos de dados suportados pela linguagem de consulta de metadados. Use esses tipos de dados ao criar uma expressão de dados de consulta de metadados, como {ushort=18249}. O WIC retorna o valor do item de metadados na forma de PROPVARIANT, que define seu próprio sistema de tipo.
O "18249" no exemplo é a tag de dados. Este número específico é definido pela Microsoft para conter a classificação MicrosoftPhoto. A marca de dados pode ser qualquer número, cadeia de caracteres ou GUID, dependendo do item de dados que você está procurando
Ao contrário do exemplo de avaliação XMP, não há conflito de nome para o valor de avaliação no bloco App1/IFD. Isso ocorre porque o valor da classificação XMP é realmente armazenado sob uma tag "ushort" diferente, 18246. Assim, a expressão para acessar a classificação XMP no bloco App1/IFD é:
- /app1/ifd/{ushort=18246}
Observação
Para obter uma descrição formal da linguagem de consulta de metadados, consulte a seção Metadata Query Language Summary mais adiante neste documento.
Personagem de fuga
A linguagem de consulta não diferencia maiúsculas de minúsculas e trata todos os caracteres como minúsculas. No entanto, alguns formatos de metadados (como XMP) são sensíveis a maiúsculas e minúsculas. Ao trabalhar com um formato de metadados que diferencia maiúsculas de minúsculas, use o caractere de barra invertida (\) quando quiser especificar um caractere maiúsculo.
O caractere de escape é consumido pelo analisador de linguagem e o caractere seguinte que o segue é interpretado diretamente. Por exemplo, a expressão {char=\\} é resolvida como '\'e {char=\C} é resolvida como um C maiúsculo. Sem o caractere de escape, {char=\} seria uma expressão inválida e {char=C} seria interpretado como um c minúsculo. Certifique-se de usar o caractere de escape de barra invertida antes de todas as letras maiúsculas em formatos de metadados que diferenciam maiúsculas de minúsculas.
Expressões de exemplo
A tabela a seguir fornece alguns exemplos de expressões e descrições de suas interpretações pelo analisador de linguagem de consulta.
| Expressão | Descrição |
|---|---|
| ifd/xmp/exif:Autor | Corresponde ao seguinte caminho de navegação: IFD block -> XMP block -> propriedade "Author" no esquema "Exif". |
| /[1]ifd/[0]xmp/exif:Autor | O mesmo que o primeiro item desta tabela, exceto que o prefixo [#] descreve qual item navegar em caso de colisão de nomes. |
| /ifd/{ushort=700}/Autor | O mesmo que o primeiro item desta tabela, exceto que ele usa uma expressão de dados para fazer referência ao bloco XMP em vez do nome do bloco "xmp" (o bloco XMP é incorporado sob o identificador de marca curta não assinado 700). Além disso, a propriedade "Author" não especifica um esquema. O analisador de consulta tentará encontrar a propriedade em todos os esquemas e retornará a primeira correspondência. |
| /ifd/xmp | Fornece um caminho de navegação para um bloco de metadados. Se o bloco for encontrado, é retornado um novo leitor/gravador de metadados. |
| /[*]tEXt/Palavra-chave | Obtém ou define a propriedade Keyword para um bloco PNG. Como a especificação de metadados PNG permite várias partes de um tipo específico, a notação [*] obtém/define o bloco PNG de dados com a propriedade apropriada. De acordo com a especificação PNG, não há duas partes que possam ter as mesmas propriedades. |
Cada bloco de metadados também é identificado exclusivamente pelo GUID de metadados, que pode ser usado no lugar do nome amigável do bloco. A sintaxe a seguir pode ser usada no lugar de fornecer nomes de bloco: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"
A tabela a seguir fornece alguns exemplos inválidos e os motivos pelos quais eles seriam rejeitados.
| Expressão inválida | Descrição da rejeição |
|---|---|
| /ifd/[0][2]exif/ | Rejeitado porque não há suporte para índices de matriz multidimensional. |
| /ifd/{ushort=1}/{ushort=2} | Rejeitado, a menos que o IFD tenha um tagID=1, que é um manipulador de metadados que contém um item de metadados com um tagID=2. |
| /{ushort=1} | Rejeitado se o processamento da consulta for relativo a um nível superior da hierarquia de metadados. Isso ocorre porque o nível superior contém apenas blocos de metadados e não itens de dados. |
Expressões da política de metadados fotográficos
Como observado anteriormente, uma expressão de consulta totalmente qualificada começa com uma barra (/). As expressões que não começam com a barra são avaliadas como expressões políticas. Uma expressão de política permite consultar os metadados da foto para obter propriedades do Shell do Windows relacionadas à imagem. Na seção Seleção de dados anteriormente neste documento, a expressão "/xmp/xmp:Rating" foi usada para acessar a propriedade de classificação XMP. Essa propriedade também pode ser consultada usando a seguinte expressão de política:
- System.SimpleRating
Para acessar a propriedade rating do esquema MicrosoftPhoto, a seguinte expressão de consulta pode ser usada:
- Sistema.Avaliação
As expressões da política de metadados de fotos se comportam de forma diferente das consultas de metadados totalmente qualificadas de algumas maneiras notáveis.
Primeiro, ao acessar metadados usando uma expressão de política, o WIC executa arbitragem e resolução de conflitos no caso de a mesma propriedade estar disponível em vários blocos de metadados. Por exemplo, as classificações MicrosoftPhoto e XMP são armazenadas tanto no bloco App1/IFD como no bloco XMP. A política de metadados de fotografia determina a precedência para que o valor de bloco seja retornado ao ler os metadados. Quando você está escrevendo metadados, a política de metadados de fotos garante que as mesmas propriedades em blocos diferentes sejam consistentes. Se você usar uma consulta de metadados como "/xmp/xmp:Rating", será responsável pela arbitragem entre os vários locais de metadados.
Observação
Para obter uma lista das expressões de política suportadas e suas políticas de mapeamento, consulte o tópico Photo Metadata Policies.
Em segundo lugar, as expressões da política de metadados de fotos são independentes do formato da imagem, enquanto as consultas de metadados totalmente qualificadas não são. Por exemplo, a consulta "/xmp/xmp:Rating" é específica para o formato JPEG. As imagens TIFF também suportam metadados XMP, mas são armazenadas de forma diferente em comparação com JPEG, portanto, a consulta TIFF seria "/ifd/xmp/xmp:Rating". No entanto, em ambos os casos, a expressão política seria "System.SimpleRating".
As expressões da política de metadados fotográficos fornecem um nível mais elevado de abstração e simplicidade quando comparadas com consultas de metadados totalmente qualificadas, pelo que devem ser preferidas nos casos em que o acesso a metadados de baixo nível não é necessário. No entanto, as expressões de política fornecem acesso apenas a um conjunto limitado de metadados de imagem, enquanto a linguagem de consulta de metadados fornece acesso a quase todos os metadados armazenados em um arquivo de imagem.
Resumo da linguagem de consulta de metadados
A tabela a seguir é uma definição formal da linguagem de consulta de metadados WIC. Cada símbolo gramatical representa uma expressão composta por outros símbolos. A expressão pode ser outro símbolo ou uma sequência de outros símbolos separados pela barra vertical (|), indicando uma escolha "ou". Toda a expressão à direita é uma possível substituição do símbolo especificado à esquerda.
| Símbolo | Expressão |
|---|---|
| <caminho> | <nome> | '/' <caminho da propriedade> |
| <caminho da propriedade> | <item de metadados> | <caminho da propriedade> '/' <caminho da propriedade> |
| <item de metadados> | <nome do índice> | <nome do item> | <nome do esquema> ':' <nome do item> |
| <nome do esquema> | <nome do item> |
| <nome do item> | <item de metadados> | <item indexado><índice> |
| <item indexado> | <item> | <metadados implícitos><item> |
| <metadados implícitos> | '<'<nome>'>' |
| <item> | <nome> | < índice><dados> | <dados> |
| <dados> | '{' <tipo de dados> '=' <valor> '}' |
| < índice> | '[' <número> | <estrela> ']' |
| <tipo de dados> | 'char' | 'uchar' | 'short' | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool' |
| <valor de dados> | <número> | <nome> | <guid> |
| <estrela> | '*' |
| <número> | número |
| <nome> | string |
| <guid> | GUID |
Tópicos relacionados
-
Conceptual
-
Visão geral do componente Windows Imaging
-
Visão geral dos metadados WIC