Condividi tramite


Panoramica del linguaggio di query sui metadati

Questo argomento presenta il linguaggio di query dei metadati per Windows Imaging Component (WIC). Si usa il linguaggio di query dei metadati per creare espressioni che trovano dati specifici (elementi di metadati) e posizioni (blocchi di metadati) all'interno dei metadati di un'immagine.

Questo argomento include le sezioni seguenti.

Prerequisiti

Per comprendere questo argomento, è necessario avere familiarità con il sistema di metadati WIC, come descritto in Panoramica dei metadati wic e accesso ai metadati, come descritto in Panoramica della lettura e scrittura dei metadati dell'immagine.

Introduzione

Si interagisce principalmente con la piattaforma di metadati tramite due componenti COM (Component Object Model): un lettore di query, rappresentato dall'interfaccia IWICMetadataQueryReader e un writer di query, rappresentato dall'interfaccia IWICMetadataQueryWriter. Questi componenti consentono di leggere o scrivere metadati usando il linguaggio di query dei metadati. Il linguaggio di query descrive la sintassi di un'espressione di percorso e i componenti di query usano questa espressione di percorso per accedere ai metadati desiderati. Questa espressione di percorso descrive la posizione di un blocco di metadati o di un elemento.

Un blocco di metadati è un gruppo denominato di metadati in un formato specifico. Un blocco di metadati può contenere singoli elementi di metadati, ad esempio un autore o un'ora di creazione e blocchi di metadati aggiuntivi. Il nome di un blocco di metadati è determinato dal relativo formato. Ad esempio, un blocco di metadati contenente i metadati App1 sarà denominato "app1". I formati di metadati comuni includono App1, Exif, IFD e XMP.

Un elemento di metadati è una coppia nome/valore che descrive caratteristiche come autore, titolo e classificazione.

Un'espressione di percorso contiene uno o più nomi di blocchi di metadati. Può anche specificare un elemento di metadati all'interno di un blocco di metadati. L'espressione di percorso seguente rappresenta un blocco App1 che contiene un blocco IFD che contiene l'elemento di metadati:

  • /app1/ifd/{ushort=18249}

Il diagramma seguente illustra il trucco di un'immagine JPEG di esempio con quattro blocchi di metadati radice: App0, App1, XMP e un blocco sconosciuto. Ogni elemento evidenziato annota il tipo di metadati (blocco o elemento) e l'espressione di query usata per recuperare i dati.

jpeg image with metadata callouts

Nota

Il contenuto di questo diagramma viene fatto riferimento in tutto il documento e viene usato in molti degli esempi.

 

Anatomia di un'espressione di percorso

Per accedere ai metadati usando le API WIC, nella maggior parte dei casi è necessario usare un'espressione di query completa. In questo argomento vengono illustrate le espressioni complete per l'accesso ai metadati. Se sono necessarie informazioni sui casi in cui vengono usate espressioni non complete, fare riferimento alla sezione Espressione criteri metadati foto più avanti in questo documento.

Che cos'è un'espressione di query completa? In WIC, un'espressione completa è una stringa che inizia con la barra del carattere di percorso (/), seguita da un percorso di spostamento a un blocco di metadati o a un elemento di metadati specifico. Ogni passaggio all'interno del percorso di spostamento è separato da una barra, formando un'espressione per accedere a un blocco di metadati o a un elemento di metadati. Ad esempio, di seguito è riportata un'espressione di query completa che accede alla classificazione foto Microsoft in un blocco IFD annidato in un blocco App1:

  • /app1/ifd/{ushort=18249}

Quando WIC analizza questa espressione, cerca innanzitutto il blocco di metadati App1 all'interno dei metadati dell'immagine. Se viene trovato il blocco App1, continua la ricerca del blocco di metadati IFD annidato. Se viene trovato il blocco IFD, cerca l'elemento di metadati specifico, in questo caso la classificazione MicrosoftPhoto sotto il tag 18249, all'interno del blocco di metadati IFD. Se in qualsiasi momento WIC non trova un blocco di metadati o un elemento, interrompe la query.

Selezione blocco

L'espressione di query di metadati WIC più semplice è un'espressione per ottenere un lettore/writer di query per un blocco di metadati specifico. L'acquisizione di un lettore/writer di query consente di indirizzare le query successive direttamente a un blocco di metadati annidato senza gestire il blocco padre. Un'espressione di query di selezione blocchi è un percorso di spostamento del blocco di metadati desiderato. Nell'illustrazione precedente, ad esempio, sono presenti cinque blocchi di metadati, due dei quali annidati in altri blocchi di metadati. Di seguito sono riportate le espressioni di percorso per ogni blocco di metadati nell'esempio JPEG:

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

Quando si usa un lettore/writer di query per eseguire una query, restituisce un nuovo lettore/writer di query che esegue query all'interno dell'ambito del blocco di metadati specificato. Ad esempio, se si esegue la query "/app1", viene ottenuto un nuovo lettore di query e le query al nuovo lettore sono relative al blocco App1. Ciò significa che la query "/ifd" è valida per il nuovo lettore perché il blocco App1 contiene un blocco IFD. Tuttavia, "/xmp" non funziona perché questo blocco App1 non contiene un blocco di metadati XMP.

Il linguaggio di query supporta anche una notazione di indice. La notazione dell'indice fornisce l'accesso a un blocco di metadati specifico quando esistono più blocchi dello stesso tipo. Per l'esempio JPEG, è possibile usare l'espressione di percorso indicizzata seguente:

  • /[0]app1/[0]ifd

Nel linguaggio di query tutti gli indici iniziano da zero. Nell'espressione precedente, le prime zero query per il primo blocco App1 e la seconda zero esegue la query sul primo blocco IFD annidato. La notazione dell'indice può comunque essere usata anche quando non esistono più blocchi dello stesso tipo. Se l'esempio JPEG include un secondo blocco App1 con un blocco IFD incorporato, l'espressione "/[1]app1/ifd" verrà usata per accedere al secondo blocco App1.

La notazione dell'indice diventa più comune quando si gestiscono blocchi TEXt PNG perché è probabile che l'immagine PNG abbia più blocchi tEXt.

Nota

Gli indici di matrice multidimensionali non sono supportati.

 

Selezione dell'elemento

È possibile accedere agli elementi di metadati in un blocco di metadati basandosi sulle espressioni di selezione dei blocchi. Si considerino le proprietà di classificazione XMP e Microsoft Photo nell'esempio JPEG. Questi metadati esistono in due blocchi di metadati: i blocchi App1/IFD e XMP. Pertanto, è possibile usare più espressioni per accedere agli stessi dati. L'espressione seguente accede alla classificazione MicrosoftPhoto nel blocco XMP:

  • /xmp/xmp:Rating

La parte "xmp:" dell'espressione è un identificatore descrittivo dello schema. XMP è uno standard estendibile e consente alle entità di terze parti di pubblicare i propri schemi che definiscono come archiviare determinati elementi di metadati. Uno schema XMP è completamente identificato da un URL, ma WIC fornisce un set di identificatori descrittivi per schemi noti. Per altre informazioni, vedere l'argomento Query sui metadati in formato immagine nativo.

Per le immagini JPEG, le informazioni sulla classificazione possono anche essere archiviate all'interno del blocco IFD annidato App1. Tuttavia, a differenza dell'esempio di classificazione XMP, il blocco IFD non usa un nome di schema per accedere alle informazioni sulla classificazione. Viene invece usata un'espressione di dati. L'espressione seguente viene usata per accedere alla classificazione MicrosoftPhoto nel blocco IFD annidato App1:

  • /app1/ifd/{ushort=18249}

In questa espressione, la parte "/app1/ifd" dell'espressione è il percorso di spostamento del blocco IFD (come descritto in precedenza nella sezione Selezione blocchi). La seconda parte dell'espressione "/{ushort=18249}" accede ai dati. Questa parte dell'espressione indica al parser di query di trovare i dati incorporati nel tag breve senza segno con l'identificatore di tag 18249.

Nota

Per un elenco dei formati di metadati comuni supportati da ogni formato di immagine, vedere l'argomento Query sui metadati in formato immagine nativo.

 

{ushort=18249} è un'espressione di dati e può assumere diverse forme. Un'espressione di dati è un'espressione in due parti contenente il tag o la chiave di metadati richiesti, in questo caso "18249" e il tipo di dati della chiave, in questo caso "ushort". Le due parti sono separate da un segno di uguale (=). WICsupporta la maggior parte dei tipi di dati C/C++ comuni. I tipi di dati seguenti vengono accettati dal linguaggio di query:

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

Nota

Questo elenco specifica solo i tipi di dati supportati dal linguaggio di query dei metadati. Usare questi tipi di dati quando si crea un'espressione di dati di query di metadati, ad esempio {ushort=18249}. WiC restituisce il valore dell'elemento di metadati sotto forma di PROPVARIANT, che definisce il proprio sistema di tipi.

 

"18249" nell'esempio è il tag di dati. Questo particolare numero è definito da Microsoft per contenere la classificazione MicrosoftPhoto. Il tag di dati può essere qualsiasi numero, stringa o GUID a seconda dell'elemento di dati che si sta cercando

A differenza dell'esempio di classificazione XMP, non esiste un conflitto di nomi per il valore di classificazione nel blocco App1/IFD. Questo perché il valore di classificazione XMP viene effettivamente archiviato in un tag ushort diverso, 18246. Di conseguenza, l'espressione per accedere alla classificazione XMP nel blocco App1/IFD è:

  • /app1/ifd/{ushort=18246}

Nota

Per una descrizione formale del linguaggio di query dei metadati, vedere la sezione Metadata Query Language Summary più avanti in questo documento.

 

Carattere escape

Il linguaggio di query non fa distinzione tra maiuscole e minuscole e considera tutti i caratteri come minuscoli. Tuttavia, alcuni formati di metadati, ad esempio XMP, fanno distinzione tra maiuscole e minuscole. Quando si utilizza un formato di metadati con distinzione tra maiuscole e minuscole, usare il carattere barra rovesciata (\) quando si desidera specificare un carattere maiuscolo.

Il carattere di escape viene utilizzato dal parser della lingua e dal carattere seguente che segue viene interpretato direttamente. Ad esempio, l'espressione {char=\\} viene risolta come '\'e {char=\C} viene risolta come C maiuscola. Senza il carattere di escape, {char=\} sarebbe un'espressione non valida e {char=C} verrebbe interpretato come c minuscolo. Assicurarsi di usare il carattere di escape barra rovesciata prima di tutte le lettere maiuscole nei formati di metadati con distinzione tra maiuscole e minuscole.

Espressioni di esempio

La tabella seguente fornisce alcune espressioni di esempio e descrizioni delle relative interpretazioni da parte del parser del linguaggio di query.

Expression Descrizione
ifd/xmp/exif:Author Corrisponde al percorso di spostamento seguente: blocco IFD -> blocco XMP -> proprietà "Author" nello schema "Exif".
/[1]ifd/[0]xmp/exif:Author Come il primo elemento di questa tabella, ad eccezione del fatto che il prefisso [#] descrive quale elemento spostarsi in caso di collisione di nomi.
/ifd/{ushort=700}/Author Come il primo elemento di questa tabella, ad eccezione del fatto che usa un'espressione di dati per fare riferimento al blocco XMP anziché al nome del blocco "xmp" (il blocco XMP è incorporato sotto l'identificatore di tag breve senza segno 700). Inoltre, la proprietà "Author" non specifica uno schema. Il parser di query tenterà di trovare la corrispondenza con la proprietà in tutti gli schemi e restituirà la prima corrispondenza.
/ifd/xmp Fornisce un percorso di spostamento a un blocco di metadati. Se il blocco viene trovato, viene restituito un nuovo lettore/writer di metadati.
/[*]tEXt/Keyword Ottiene o imposta la proprietà Keyword per un blocco PNG. Poiché la specifica dei metadati PNG consente più blocchi di un particolare tipo, la notazione [*] ottiene/imposta il blocco PNG di dati con la proprietà appropriata. In base alla specifica PNG, nessun blocco può avere le stesse proprietà.

 

Ogni blocco di metadati viene anche identificato in modo univoco dal GUID dei metadati che può essere usato al posto del nome descrittivo del blocco. Al posto di fornire nomi di blocco, è possibile usare la sintassi seguente: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"

La tabella seguente fornisce alcuni esempi non validi e i motivi per cui verrebbero rifiutati.

Espressione non valida Descrizione rifiuto
/ifd/[0][2]exif/ Rifiutato perché gli indici di matrice multidimensionali non sono supportati.
/ifd/{ushort=1}/{ushort=2} Rifiutato a meno che l'IFD non abbia un tagID=1 che è un gestore di metadati che contiene un elemento di metadati con tagID=2.
/{ushort=1} Rifiutato se l'elaborazione delle query è relativa a un livello superiore della gerarchia di metadati. Ciò è dovuto al fatto che il livello principale contiene solo blocchi di metadati e non elementi di dati.

 

Espressioni dei criteri dei metadati delle foto

Come indicato in precedenza, un'espressione di query completa inizia con una barra (/). Le espressioni che non iniziano con la barra vengono valutate come espressioni di criteri. Un'espressione di criteri consente di eseguire query sui metadati delle foto per le proprietà della shell di Windows correlate all'immagine. Nella sezione Selezione dati precedente in questo documento è stata usata l'espressione "/xmp/xmp:Rating" per accedere alla proprietà di classificazione XMP. È anche possibile eseguire query su questa proprietà usando l'espressione di criteri seguente:

  • System.SimpleRating

Per accedere alla proprietà di classificazione dallo schema MicrosoftPhoto, è possibile usare l'espressione di query seguente:

  • System.Rating

Le espressioni dei criteri dei metadati delle foto si comportano in modo diverso dalle query di metadati complete in alcuni modi rilevanti.

In primo luogo, quando si accede ai metadati usando un'espressione di criteri, WIC esegue l'arbitraggio e la risoluzione dei conflitti nel caso in cui la stessa proprietà sia disponibile in più blocchi di metadati. Ad esempio, sia MicrosoftPhoto che i valori di classificazione XMP vengono archiviati sia nel blocco App1/IFD che nel blocco XMP. I criteri dei metadati delle foto determinano la precedenza per cui viene restituito il valore del blocco durante la lettura dei metadati. Quando si scrivono metadati, i criteri dei metadati delle foto assicurano che le stesse proprietà in blocchi diversi siano coerenti. Se si usa una query di metadati, ad esempio "/xmp/xmp:Rating", si è responsabili dell'arbitramento tra le varie posizioni dei metadati.

Nota

Per un elenco delle espressioni di criteri supportate e dei relativi criteri di mapping, vedere l'argomento Criteri metadati foto.

 

In secondo luogo, le espressioni dei criteri dei metadati delle foto sono indipendenti dal formato dell'immagine, mentre le query di metadati complete non sono. Ad esempio, la query "/xmp/xmp:Rating" è specifica del formato JPEG. Le immagini TIFF supportano anche i metadati XMP, ma vengono archiviati in modo diverso rispetto a JPEG, quindi la query TIFF sarà "/ifd/xmp/xmp:Rating". Tuttavia, in entrambi i casi l'espressione di criteri sarebbe "System.SimpleRating".

Le espressioni dei criteri dei metadati delle foto offrono un livello superiore di astrazione e semplicità rispetto alle query di metadati complete e quindi devono essere preferite nei casi in cui l'accesso ai metadati di basso livello non è necessario. Tuttavia, le espressioni di criteri forniscono l'accesso solo a un set limitato di metadati dell'immagine, mentre il linguaggio di query dei metadati consente l'accesso a quasi tutti i metadati archiviati all'interno di un file di immagine.

Riepilogo del linguaggio di query dei metadati

La tabella seguente è una definizione formale del linguaggio di query dei metadati WIC. Ogni simbolo grammaticale rappresenta un'espressione costituita da altri simboli. L'espressione può essere un altro simbolo o una sequenza di altri simboli separati dalla barra verticale (|), che indica una scelta "o". L'intera espressione a destra è una possibile sostituzione del simbolo specificato a sinistra.

Simbolo Expression
<path> <name> | Percorso proprietà '/' <>
<percorso proprietà> <elemento> di metadati | <percorso> proprietà '/' <>
<elemento di metadati> <nome> indice | <nome> elemento | <nome> di schema ':' nome dell'elemento <>
<nome schema> <nome dell'elemento>
<nome dell'elemento> <elemento> di metadati | <indice di elementi><indicizzati>
<elemento indicizzato> <item> | <elemento di metadati implicito><>
<metadati impliciti> '<'<name>'>'
<item> <name> | < index><data> | <Dati>
<data> '{' <tipo di> dati '=' <valore> '}'
< Indice> '[' <numero> | <star> ']'
<tipo di dati> 'char' | 'uchar' | 'short' | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool'
<valore dati> <number> | <name> | <Guid>
<stella> '*'
<number> number
<name> string
<guid> guid

 

Concettuale

Panoramica del componente Windows Imaging

Panoramica dei metadati wic

Panoramica della lettura e scrittura dei metadati dell'immagine

Panoramica dell'estendibilità dei metadati

Procedura: Codificare nuovamente un'immagine JPEG con metadati