Übersicht über die Metadaten-Abfragesprache
In diesem Thema wird die Metadatenabfragesprache für Windows Imaging Component (WIC) vorgestellt. Sie verwenden die Metadatenabfragesprache, um Ausdrücke zu erstellen, die bestimmte Daten (Metadatenelemente) und Speicherorte (Metadatenblöcke) in den Metadaten eines Bilds finden.
Dieses Thema enthält folgende Abschnitte:
- Voraussetzungen
- Introduction (Einführung)
- Anatomie eines Pfadausdrucks
- Fotometadatenrichtlinienausdrücke
- Zusammenfassung der Metadatenabfragesprache
- Zugehörige Themen
Voraussetzungen
Um dieses Thema zu verstehen, sollten Sie mit dem WIC-Metadatensystem vertraut sein, wie in der WIC-Metadatenübersicht beschrieben, und mit dem Zugriff auf Metadaten, wie in der Übersicht über das Lesen und Schreiben von Bildmetadaten beschrieben.
Einführung
Sie interagieren mit der Metadatenplattform hauptsächlich über zwei COM-Komponenten (Component Object Model): einen Abfrageleser, der durch die IWICMetadataQueryReader-Schnittstelle dargestellt wird, und einen Abfragewriter, der durch die IWICMetadataQueryWriter-Schnittstelle dargestellt wird. Mit diesen Komponenten können Sie Metadaten mithilfe der Metadatenabfragesprache lesen oder schreiben. Die Abfragesprache beschreibt die Syntax eines Pfadausdrucks, und die Abfragekomponenten verwenden diesen Pfadausdruck, um auf die gewünschten Metadaten zuzugreifen. Dieser Pfadausdruck beschreibt den Speicherort eines Metadatenblocks oder -elements.
Ein Metadatenblock ist eine benannte Gruppe von Metadaten in einem bestimmten Format. Ein Metadatenblock kann einzelne Metadatenelemente wie einen Autor oder eine Erstellungszeit sowie zusätzliche Metadatenblöcke enthalten. Der Name eines Metadatenblocks wird durch sein Format bestimmt. Beispielsweise würde ein Metadatenblock, der App1-Metadaten enthält, den Namen "app1" haben. Gängige Metadatenformate sind App1, Exif, IFD und XMP.
Ein Metadatenelement ist ein Name-Wert-Paar, das Merkmale wie Autor, Titel und Bewertung beschreibt.
Ein Pfadausdruck enthält einen oder mehrere Metadatenblocknamen. Es kann auch ein Metadatenelement innerhalb eines Metadatenblocks angeben. Der folgende Pfadausdruck stellt einen App1-Block dar, der einen IFD-Block enthält, der das Metadatenelement enthält:
- /app1/ifd/{ushort=18249}
Das folgende Diagramm veranschaulicht die Zusammensetzung eines JPEG-Beispielbilds mit vier Stammmetadatenblöcken: App0, App1, XMP und einem unbekannten Block. Jedes hervorgehobene Element notiert den Typ der Metadaten (Block oder Element) und den Abfrageausdruck, der zum Abrufen der Daten verwendet wird.
Hinweis
Auf den Inhalt dieses Diagramms wird in diesem Dokument verwiesen und in vielen Beispielen verwendet.
Anatomie eines Pfadausdrucks
Für den Zugriff auf Metadaten mithilfe der WIC-APIs muss in den meisten Fällen ein vollqualifizierter Abfrageausdruck verwendet werden. In diesem Thema werden vollqualifizierte Ausdrücke für den Zugriff auf Metadaten erläutert. Wenn Sie Informationen zu den Fällen benötigen, in denen nicht vollqualifizierte Ausdrücke verwendet werden, lesen Sie den Abschnitt Photo Metadata Policy Expression weiter unten in diesem Dokument.
Was ist ein vollqualifizierter Abfrageausdruck? In WIC ist ein vollqualifizierter Ausdruck eine Zeichenfolge, die mit dem Pfadzeichen-Schrägstrich (/) beginnt, gefolgt von einem Navigationspfad zu einem Metadatenblock oder einem bestimmten Metadatenelement. Jeder Schritt innerhalb des Navigationspfads wird durch einen Schrägstrich getrennt, der einen Ausdruck für den Zugriff auf einen Metadatenblock oder ein Metadatenelement bildet. Im Folgenden finden Sie beispielsweise einen vollqualifizierten Abfrageausdruck, der auf die Microsoft-Fotobewertung in einem IFD-Block zugreift, der in einem App1-Block geschachtelt ist:
- /app1/ifd/{ushort=18249}
Wenn WIC diesen Ausdruck analysiert, sucht es zuerst nach dem App1-Metadatenblock in den Metadaten des Bilds. Wenn der App1-Block gefunden wird, wird die Suche nach dem geschachtelten IFD-Metadatenblock fortgesetzt. Wenn der IFD-Block gefunden wird, sucht er innerhalb des IFD-Metadatenblocks nach dem spezifischen Metadatenelement, in diesem Fall nach der MicrosoftPhoto-Bewertung unter dem Tag 18249. Wenn WIC zu irgendeinem Zeitpunkt keinen Metadatenblock oder -element findet, wird die Abfrage abgebrochen.
Blockauswahl
Der einfachste WIC-Metadatenabfrageausdruck ist ein Ausdruck zum Abrufen eines Abfragelese-/Schreibers für einen bestimmten Metadatenblock. Wenn Sie einen Abfrageleser/-writer abrufen, können Sie nachfolgende Abfragen direkt an einen geschachtelten Metadatenblock weiterleiten, ohne sich mit dem übergeordneten Block zu befassen. Ein Abfrageausdruck für die Blockauswahl ist ein Navigationspfad zum gewünschten Metadatenblock. In der vorherigen Abbildung sind beispielsweise fünf Metadatenblöcke vorhanden, von denen zwei in anderen Metadatenblöcken geschachtelt sind. Im Folgenden finden Sie die Pfadausdrücke zu jedem Metadatenblock im JPEG-Beispiel:
- /app0
- /app1
- /app1/ifd
- /app1/ifd/exif
- /Xmp
Wenn Sie einen Abfrageleser/-writer verwenden, um eine Abfrage auszuführen, wird ein neuer Abfrageleser/Writer zurückgegeben, der Abfragen innerhalb des Bereichs des angegebenen Metadatenblocks verarbeitet. Wenn Sie für instance die Abfrage "/app1" ausführen, wird ein neuer Abfrageleser abgerufen, und Abfragen an den neuen Reader sind relativ zum App1-Block. Dies bedeutet, dass die Abfrage "/ifd" für den neuen Reader gültig ist, da der App1-Block einen IFD-Block enthält. "/xmp" funktioniert jedoch nicht, da dieser App1-Block keinen XMP-Metadatenblock enthält.
Die Abfragesprache unterstützt auch eine Indexnotation. Die Indexnotation bietet Zugriff auf einen bestimmten Metadatenblock, wenn mehrere Blöcke desselben Typs vorhanden sind. Für das JPEG-Beispiel kann der folgende indizierte Pfadausdruck verwendet werden:
- /[0]app1/[0]ifd
In der Abfragesprache beginnen alle Indizes bei Null. Im vorherigen Ausdruck fragt die erste Null für den ersten App1-Block und die zweite Null den ersten geschachtelten IFD-Block ab. Die Indexnotation kann auch dann verwendet werden, wenn nicht mehrere Blöcke desselben Typs vorhanden sind. Wenn das Beispiel JPEG einen zweiten App1-Block mit einem eingebetteten IFD-Block enthält, wird der Ausdruck "/[1]app1/ifd" verwendet, um auf den zweiten App1-Block zuzugreifen.
Die Indexnotation wird häufiger bei PNG tEXt-Blöcken verwendet, da es wahrscheinlich ist, dass das PNG-Bild mehr als einen tEXt-Block enthält.
Hinweis
Mehrdimensionale Arrayindizes werden nicht unterstützt.
Elementauswahl
Sie können auf die Metadatenelemente in einem Metadatenblock zugreifen, indem Sie auf den Blockauswahlausdrücken aufbauen. Betrachten Sie die Eigenschaften XMP und Microsoft Photo rating im JPEG-Beispiel. Diese Metadaten sind in zwei Metadatenblöcken vorhanden: den Blöcken App1/IFD und XMP. Daher können mehrere Ausdrücke verwendet werden, um auf dieselben Daten zuzugreifen. Der folgende Ausdruck greift auf die MicrosoftPhoto-Bewertung im XMP-Block zu:
- /xmp/xmp:Rating
Der "xmp:"-Teil des Ausdrucks ist ein schemafreundlicher Bezeichner. XMP ist ein erweiterbarer Standard und ermöglicht Es Drittanbieter-Entitäten, ihre eigenen Schemas zu veröffentlichen, die definieren, wie bestimmte Metadatenelemente gespeichert werden. Ein XMP-Schema wird vollständig durch eine URL identifiziert, wic bietet jedoch eine Reihe von benutzerfreundlichen Bezeichnern für bekannte Schemas. Weitere Informationen finden Sie im Thema Metadatenabfragen im nativen Bildformat .
Bei JPEG-Bildern können Bewertungsinformationen auch im geschachtelten IFD-Block von App1 gespeichert werden. Im Gegensatz zum XMP-Bewertungsbeispiel verwendet der IFD-Block jedoch keinen Schemanamen, um auf die Bewertungsinformationen zuzugreifen. Sie verwenden stattdessen einen Datenausdruck. Der folgende Ausdruck wird verwendet, um auf die MicrosoftPhoto-Bewertung im geschachtelten IFD-Block Von App1 zuzugreifen:
- /app1/ifd/{ushort=18249}
In diesem Ausdruck ist der Teil "/app1/ifd" des Ausdrucks der Navigationspfad zum IFD-Block (wie zuvor im Abschnitt Blockauswahl erläutert). Der zweite Teil des Ausdrucks "/{ushort=18249}" greift auf die Daten zu. Dieser Teil des Ausdrucks weist den Abfrageparser an, die daten zu suchen, die in das unsigned short tag mit dem Tagbezeichner 18249 eingebettet sind.
Hinweis
Eine Liste der gängigen Metadatenformate, die von den einzelnen Bildformaten unterstützt werden, finden Sie im Thema Metadatenabfragen für native Bildformate .
{ushort=18249} ist ein Datenausdruck und kann mehrere Formen annehmen. Ein Datenausdruck ist ein zweiteiliger Ausdruck, der das angeforderte Metadatentag oder den angeforderten Schlüssel enthält, in diesem Fall "18249", und den Datentyp des Schlüssels, in diesem Fall "ushort". Die beiden Teile sind durch ein Gleichheitszeichen (=) getrennt. WIC unterstützt einen Großteil der gängigen C/C++-Datentypen. Die folgenden Datentypen werden von der Abfragesprache akzeptiert:
- char
- uchar
- short
- ushort
- long
- ulong
- INT
- uint
- longlong
- float
- double
- str
- wstr
- guid
- bool
Hinweis
Diese Liste gibt nur die Datentypen an, die von der Metadatenabfragesprache unterstützt werden. Verwenden Sie diese Datentypen beim Erstellen eines Metadatenabfragedatenausdrucks wie {ushort=18249}. Der WIC gibt den Wert des Metadatenelements in Form von PROPVARIANT zurück, das sein eigenes Typsystem definiert.
Das "18249" im Beispiel ist das Datentag. Diese bestimmte Zahl wird von Microsoft definiert, um die MicrosoftPhoto-Bewertung zu enthalten. Das Datentag kann eine beliebige Zahl, Zeichenfolge oder GUID sein, abhängig vom gesuchten Datenelement
Im Gegensatz zum XMP-Bewertungsbeispiel gibt es keine Namenskollision für den Bewertungswert im App1/IFD-Block. Dies liegt daran, dass der XMP-Bewertungswert tatsächlich unter einem anderen ushort-Tag gespeichert wird, 18246. Daher lautet der Ausdruck für den Zugriff auf die XMP-Bewertung im App1/IFD-Block:
- /app1/ifd/{ushort=18246}
Hinweis
Eine formale Beschreibung der Metadatenabfragesprache finden Sie im Abschnitt Metadatenabfragesprache weiter unten in diesem Dokument.
Escape-Zeichen
Bei der Abfragesprache wird die Groß-/Kleinschreibung nicht beachtet und alle Zeichen als Kleinbuchstaben behandelt. Bei einigen Metadatenformaten (z. B. XMP) wird jedoch die Groß-/Kleinschreibung beachtet. Verwenden Sie bei der Verwendung eines Metadatenformats, bei dem die Groß-/Kleinschreibung beachtet wird, den umgekehrten Schrägstrich (\), wenn Sie ein Großbuchstaben angeben möchten.
Das Escapezeichen wird vom Sprachparser verwendet, und das folgende Zeichen wird direkt interpretiert. Beispielsweise wird der Ausdruck {char=\\} als "\" und {char=\C} als Großbuchstaben C aufgelöst. Ohne das Escapezeichen wäre {char=\} ein ungültiger Ausdruck und {char=C} würde als Kleinbuchstaben c interpretiert. Achten Sie darauf, den umgekehrten Schrägstrich vor allen Großbuchstaben in Metadatenformaten zu verwenden, bei denen die Groß-/Kleinschreibung beachtet wird.
Beispielausdrücke
Die folgende Tabelle enthält einige Beispielausdrücke und Beschreibungen ihrer Interpretationen durch den Parser der Abfragesprache.
Ausdruck | BESCHREIBUNG |
---|---|
ifd/xmp/exif:Author | Entspricht dem folgenden Navigationspfad: IFD-Block -> XMP-Block -> "Author"-Eigenschaft im "Exif"-Schema. |
/[1]ifd/[0]xmp/exif:Author | Identisch mit dem ersten Element in dieser Tabelle, mit der Ausnahme, dass das Präfix [#] beschreibt, welches Element im Falle einer Namenskollision zu navigieren ist. |
/ifd/{ushort=700}/Author | Identisch mit dem ersten Element in dieser Tabelle, mit der Ausnahme, dass es einen Datenausdruck verwendet, um auf den XMP-Block anstelle des Blocknamens "xmp" zu verweisen (der XMP-Block ist unter dem unsignierten Kurztagbezeichner 700 eingebettet). Außerdem gibt die Eigenschaft "Author" kein Schema an. Der Abfrageparser versucht, die Eigenschaft schemaübergreifend abzugleichen, und gibt die erste Übereinstimmung zurück. |
/ifd/xmp | Stellt einen Navigationspfad zu einem Metadatenblock bereit. Wenn der Block gefunden wird, wird ein neuer Metadatenleser/-schreiber zurückgegeben. |
/[*]tEXt/Schlüsselwort | Ruft die Keyword-Eigenschaft für einen PNG-Block ab oder legt sie fest. Da die PNG-Metadatenspezifikation mehrere Blöcke eines bestimmten Typs zulässt, ruft die [*]-Notation den PNG-Datenblock mit der entsprechenden Eigenschaft ab. Gemäß der PNG-Spezifikation können keine zwei Blöcke die gleichen Eigenschaften aufweisen. |
Jeder Metadatenblock wird auch eindeutig durch die Metadaten-GUID identifiziert, die anstelle des Anzeigeblocknamens verwendet werden kann. Anstelle von Blocknamen kann die folgende Syntax verwendet werden: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"
Die folgende Tabelle enthält einige ungültige Beispiele und die Gründe, warum sie abgelehnt werden würden.
Ungültiger Ausdruck | Ablehnungsbeschreibung |
---|---|
/ifd/[0][2]exif/ | Abgelehnt, da mehrdimensionale Arrayindizes nicht unterstützt werden. |
/ifd/{ushort=1}/{ushort=2} | Wird abgelehnt, es sei denn, der IFD verfügt über eine tagID=1. Dabei handelt es sich um einen Metadatenhandler, der ein Metadatenelement mit einer tagID=2 enthält. |
/{ushort=1} | Wird abgelehnt, wenn die Abfrageverarbeitung relativ zu einer obersten Ebene der Metadatenhierarchie erfolgt. Dies liegt daran, dass die oberste Ebene nur Metadatenblöcke und keine Datenelemente enthält. |
Fotometadatenrichtlinienausdrücke
Wie bereits erwähnt, beginnt ein vollqualifizierter Abfrageausdruck mit einem Schrägstrich (/). Ausdrücke, die nicht mit dem Schrägstrich beginnen, werden als Richtlinienausdrücke ausgewertet. Mit einem Richtlinienausdruck können Sie die Fotometadaten für bildbezogene Windows Shell-Eigenschaften abfragen. Im Abschnitt Datenauswahl weiter oben in diesem Dokument wurde der Ausdruck "/xmp/xmp:Rating" verwendet, um auf die XMP-Bewertungseigenschaft zuzugreifen. Diese Eigenschaft kann auch mit dem folgenden Richtlinienausdruck abgefragt werden:
- System.SimpleRating
Um über das MicrosoftPhoto-Schema auf die Bewertungseigenschaft zuzugreifen, kann der folgende Abfrageausdruck verwendet werden:
- System.Rating
Fotometadatenrichtlinienausdrücke verhalten sich auf einige bemerkenswerte Weise anders als vollqualifizierte Metadatenabfragen.
Erstens führt WIC beim Zugriff auf Metadaten mithilfe eines Richtlinienausdrucks schieds- und konfliktlösend aus, falls dieselbe Eigenschaft in mehreren Metadatenblöcken verfügbar ist. Für instance werden sowohl die MicrosoftPhoto- als auch die XMP-Bewertungswerte sowohl im App1/IFD-Block als auch im XMP-Block gespeichert. Die Fotometadatenrichtlinie bestimmt die Rangfolge, für die beim Lesen von Metadaten der Blockwert zurückgegeben wird. Beim Schreiben von Metadaten stellt die Fotometadatenrichtlinie sicher, dass dieselben Eigenschaften in verschiedenen Blöcken konsistent sind. Wenn Sie eine Metadatenabfrage wie "/xmp/xmp:Rating" verwenden, sind Sie für die Zuordnung zwischen den verschiedenen Metadatenspeicherorten verantwortlich.
Hinweis
Eine Liste der unterstützten Richtlinienausdrücke und der zugehörigen Zuordnungsrichtlinien finden Sie im Thema Fotometadatenrichtlinien .
Zweitens sind Fotometadatenrichtlinienausdrücke unabhängig vom Bildformat, vollqualifizierte Metadatenabfragen hingegen nicht. Beispielsweise ist die Abfrage "/xmp/xmp:Rating" spezifisch für das JPEG-Format. TIFF-Bilder unterstützen auch XMP-Metadaten, werden aber anders als JPEG gespeichert, sodass die TIFF-Abfrage "/ifd/xmp/xmp:Rating" lautet. In beiden Fällen lautet der Richtlinienausdruck jedoch "System.SimpleRating".
Fotometadatenrichtlinienausdrücke bieten im Vergleich zu vollqualifizierten Metadatenabfragen ein höheres Maß an Abstraktion und Einfachheit. Daher sollte in Fällen bevorzugt werden, in denen kein Metadatenzugriff auf niedriger Ebene erforderlich ist. Richtlinienausdrücke bieten jedoch nur Zugriff auf einen begrenzten Satz von Bildmetadaten, während die Metadatenabfragesprache Zugriff auf fast alle in einer Bilddatei gespeicherten Metadaten bietet.
Zusammenfassung der Metadatenabfragesprache
Die folgende Tabelle ist eine formale Definition der WIC-Metadatenabfragesprache. Jedes Grammatiksymbol stellt einen Ausdruck dar, der aus anderen Symbolen besteht. Der Ausdruck kann ein anderes Symbol oder eine Sequenz anderer Symbole sein, die durch den vertikalen Balken (|) getrennt sind und eine Auswahl "oder" angeben. Der gesamte Ausdruck auf der rechten Seite ist eine mögliche Ersetzung des angegebenen Symbols auf der linken Seite.
Symbol | Ausdruck |
---|---|
<path> | <Name> | Eigenschaftspfad "/" <> |
<Eigenschaftenpfad> | <Metadatenelement> | < Eigenschaftspfad> '/' <Eigenschaftenpfad> |
<Metadatenelement> | <Indexname> | < Elementname> | < Schemaname> ':' <Elementname> |
<Schemaname> | <Elementname> |
<Elementname> | <Metadatenelement> | < Index des indizierten Elements><> |
<indiziertes Element> | <item> | < implizites Metadatenelement><> |
<Implizite Metadaten> | '<'<Name>'>' |
<item> | <Name> | & lt;Indexdaten><> | < Daten> |
<data> | '{' <datentyp> '=' <value> '}' |
<index> | '[' <Zahl> | <> star "]" |
<Datentyp> | 'char' | 'uchar' | "short" | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | "float" | 'double' | 'str' | 'wstr' | 'guid' | "bool" |
<Datenwert> | <Zahl> | < Name> | < Guid> |
<Sternchen> | '*' |
<Zahl> | number |
<name> | Zeichenfolge |
<guid> | guid |
Zugehörige Themen