Delen via


Overzicht van metagegevensquerytaal

In dit onderwerp wordt de taal voor metagegevensquery's voor Windows Imaging Component (WIC) geïntroduceerd. U gebruikt de querytaal voor metagegevens om expressies te maken die specifieke gegevens (metagegevensitems) en locaties (metagegevensblokken) vinden binnen de metagegevens van een afbeelding.

Dit onderwerp bevat de volgende secties.

Voorwaarden

Als u dit onderwerp wilt begrijpen, moet u bekend zijn met het WIC-metagegevenssysteem, zoals beschreven in het WIC Metadata Overview en het openen van metagegevens, zoals beschreven in het Overzicht van het lezen en schrijven van metagegevens van afbeeldingen.

Introductie

U communiceert met het metagegevensplatform voornamelijk via twee COM-onderdelen (Component Object Model): een querylezer, vertegenwoordigd door de IWICMetadataQueryReader interface en een queryschrijver, vertegenwoordigd door de IWICMetadataQueryWriter interface. Met deze onderdelen kunt u metagegevens lezen of schrijven met behulp van de taal voor metagegevensquery's. De querytaal beschrijft de syntaxis van een padexpressie en de queryonderdelen gebruiken deze padexpressie voor toegang tot de gewenste metagegevens. Deze padexpressie beschrijft de locatie van een metagegevensblok of item.

Een metagegevensblok is een benoemde groep metagegevens in een specifieke indeling. Een metagegevensblok kan afzonderlijke metagegevensitems bevatten, zoals een auteur of aanmaaktijd en extra metagegevensblokken. De naam van een metagegevensblok wordt bepaald door de indeling. Een metagegevensblok met app1-metagegevens heet bijvoorbeeld 'app1'. Veelgebruikte metagegevensindelingen zijn App1, Exif, IFD en XMP.

Een metagegevensitem is een naam/waardepaar dat kenmerken beschrijft zoals auteur, titel en classificatie.

Een padexpressie bevat een of meer namen van metagegevensblokken. Het kan ook een metagegevensitem binnen een metagegevensblok specificeren. De volgende padenuitdrukking vertegenwoordigt een App1-blok dat een IFD-blok bevat dat het metagegevensitem erin bevat:

  • /app1/ifd/{ushort=18249}

In het volgende diagram ziet u de make-up van een JPEG-voorbeeldafbeelding met vier basismetagegevensblokken: App0, App1, XMP en een onbekend blok. Elk gemarkeerd item noteert het type metagegevens (blok of item) en de query-expressie die wordt gebruikt om de gegevens op te halen.

jpeg-afbeelding met metadata-opmerkingen

Notitie

In veel voorbeelden wordt verwezen naar de inhoud van dit diagram.

 

Anatomie van een padexpressie

Voor toegang tot metagegevens met behulp van de WIC-API's moet in de meeste gevallen een volledig gekwalificeerde query-expressie worden gebruikt. In dit onderwerp worden volledig gekwalificeerde expressies besproken voor toegang tot metagegevens. Als u informatie nodig hebt over de gevallen waarin niet-volledig gekwalificeerde expressies worden gebruikt, raadpleegt u de sectie Photo Metadata Policy Expression verderop in dit document.

Wat is een volledig gekwalificeerde query-expressie? In WIC is een volledig gekwalificeerde uitdrukking een tekenreeks die begint met de schuine streep als padteken (/), gevolgd door een navigatiepad naar een metagegevensblok of een specifiek metagegevensitem. Elke stap in het navigatiepad wordt gescheiden door een slash, die een expressie vormt voor toegang tot een metagegevensblok of een metagegevensitem. Het volgende is bijvoorbeeld een volledig gekwalificeerde query-expressie die toegang heeft tot de Microsoft Photo Rating in een IFD-blok dat is genest in een App1-blok:

  • /app1/ifd/{ushort=18249}

Wanneer WIC deze expressie parseert, wordt eerst gezocht naar het metagegevensblok app1 in de metagegevens van de afbeelding. Als het App1-blok wordt gevonden, gaat het verder met het zoeken naar het ingesloten IFD-metagegevensblok. Als het IFD-blok wordt gevonden, zoekt het naar het specifieke metagegevensitem, in dit geval de MicrosoftPhoto-classificatie onder de tag 18249, binnen het metagegevensblok IFD. Als WIC op enig moment geen metagegevensblok of item vindt, wordt de query afgebroken.

Blokselectie

De eenvoudigste WIC-expressie voor metagegevensquery's is een expressie voor het verkrijgen van een querylezer/schrijver voor een specifiek metagegevensblok. Door een querylezer/schrijver te verkrijgen, kunt u volgende query's rechtstreeks doorsturen naar een geneste metagegevensblok zonder dat u het bovenliggende blok hoeft aan te pakken. Een blokselectiequery-expressie is een navigatiepad naar het gewenste metagegevensblok. In de vorige afbeelding zijn er bijvoorbeeld vijf metagegevensblokken, waarvan er twee zijn genest in andere metagegevensblokken. Hier volgen de padexpressies voor elk metagegevensblok in het JPEG-voorbeeld:

  • /app0
  • /app1
  • /app1/ifd
  • /app1/ifd/exif
  • /xmp

Wanneer u een querylezer en -schrijver gebruikt om een query uit te voeren, geeft deze een nieuwe querylezer en -schrijver terug die query's bedient binnen de reikwijdte van het opgegeven metagegevensblok. Als u bijvoorbeeld de query '/app1' uitvoert, wordt er een nieuwe querylezer verkregen en worden query's naar de nieuwe lezer vergeleken met het App1-blok. Dit betekent dat de query '/ifd' geldig is voor de nieuwe lezer omdat het App1-blok een IFD-blok bevat. '/xmp' werkt echter niet omdat dit App1-blok geen XMP-metagegevensblok bevat.

De querytaal ondersteunt ook een index notatie. Index notatie biedt toegang tot een specifiek metagegevensblok wanneer er meerdere blokken van hetzelfde type bestaan. Voor het JPEG-voorbeeld kan de volgende geïndexeerde padexpressie worden gebruikt:

  • /[0]app1/[0]ifd

In de querytaal beginnen alle indexen bij nul. In de vorige expressie betreffen de eerste nulvragen het eerste App1-blok en de tweede nulvragen het eerste geneste IFD-blok. Index notatie kan nog steeds worden gebruikt, zelfs wanneer meerdere blokken van hetzelfde type niet bestaan. Als het voorbeeld-JPEG een tweede App1-blok met een ingesloten IFD-blok bevat, wordt de expressie '/[1]app1/ifd' gebruikt voor toegang tot het tweede App1-blok.

Index notatie wordt vaker gebruikt bij het omgaan met PNG tEXt-segmenten, omdat de PNG-afbeelding waarschijnlijk meer dan één tEXt-segment heeft.

Notitie

Multidimensionale matrixindexen worden niet ondersteund.

 

Selectie van items

U kunt toegang krijgen tot de metagegevensitems in een metagegevensblok door te bouwen op de expressies voor blokselectie. Bekijk de eigenschappen van XMP- en Microsoft Photo-classificatie in het JPEG-voorbeeld. Deze metagegevens bestaan in twee metagegevensblokken: de App1/IFD- en XMP-blokken. Daarom kunnen meerdere expressies worden gebruikt om toegang te krijgen tot dezelfde gegevens. De volgende expressie heeft toegang tot de MicrosoftPhoto-classificatie in het XMP-blok:

  • /xmp/xmp:Rating

Het deel 'xmp:' van de expressie is een schemavriendelijke id. XMP is een uitbreidbare standaard en stelt entiteiten van derden in staat hun eigen schema's te publiceren die bepalen hoe bepaalde metagegevensitems moeten worden opgeslagen. Een XMP-schema wordt volledig geïdentificeerd door een URL, maar WIC biedt een set beschrijvende id's voor bekende schema's. Zie het onderwerp Native Image Format Metadata Queries voor meer informatie.

Voor JPEG-afbeeldingen kan beoordelingsinformatie ook worden opgeslagen in het geneste IFD-blok van App1. In tegenstelling tot het voorbeeld van de XMP-classificatie gebruikt het IFD-blok echter geen schemanaam voor toegang tot de classificatiegegevens. In plaats daarvan gebruikt u een gegevensexpressie. De volgende expressie wordt gebruikt voor toegang tot de MicrosoftPhoto-classificatie in het geneste IFD-blok van App1:

  • /app1/ifd/{ushort=18249}

In deze expressie is het gedeelte /app1/ifd van de expressie het navigatiepad naar het IFD-blok (zoals eerder besproken in de sectie Blokselectie). Het tweede deel van de expressie "/{ushort=18249}" heeft toegang tot de gegevens. In dit deel van de expressie wordt de queryparser geïnstrueerd om de gegevens te vinden die zijn ingesloten in de niet-ondertekende korte tag met de tag-id 18249.

Notitie

Voor een lijst met algemene metagegevensindelingen die bij elke afbeeldingsindeling worden ondersteund, zie het onderwerp Metagegevensquery's voor systeemeigen afbeeldingsindelingen.

 

{ushort=18249} is een gegevensexpressie en kan verschillende vormen aannemen. Een gegevensexpressie is een expressie met twee delen met de aangevraagde metagegevenstag of sleutel, in dit geval '18249', en het gegevenstype van de sleutel, in dit geval 'ushort'. De twee delen worden gescheiden door een gelijkteken (=). WIC ondersteunt een meerderheid van de algemene C/C++-gegevenstypen. De volgende gegevenstypen worden geaccepteerd door de querytaal:

  • verkolen
  • uchar
  • kort
  • ushort
  • lang
  • ulong
  • Int
  • uint
  • longlong
  • drijven
  • dubbel
  • Str
  • wstr
  • Richtlijn
  • Bool

Notitie

In deze lijst worden alleen de gegevenstypen opgegeven die worden ondersteund door de metagegevensquerytaal. Gebruik deze gegevenstypen bij het maken van een gegevensexpressie voor metagegevensquery's, zoals {ushort=18249}. De WIC retourneert de waarde van het metagegevensitem in de vorm van PROPVARIANT, waarmee een eigen typesysteem wordt gedefinieerd.

 

De '18249' in het voorbeeld is de gegevenstag. Dit specifieke getal wordt door Microsoft gedefinieerd om de MicrosoftPhoto-classificatie te bevatten. De gegevenstag kan een willekeurig getal, een tekenreeks of een GUID zijn, afhankelijk van het gegevensitem dat u zoekt

In tegenstelling tot het voorbeeld van de XMP-classificatie is er geen naamconflict voor de beoordelingswaarde in het blok App1/IFD. Dit komt doordat de XMP-classificatiewaarde daadwerkelijk wordt opgeslagen onder een andere ushort-tag, 18246. De expressie voor toegang tot de XMP-classificatie in het blok App1/IFD is dus:

  • /app1/ifd/{ushort=18246}

Notitie

Zie de sectie Samenvatting van metagegevensquerytaal verderop in dit document voor een formele beschrijving van de metagegevensquerytaal.

 

Escape-teken

De querytaal is niet hoofdlettergevoelig en zet alle tekens om naar kleine letters. Sommige indelingen voor metagegevens (zoals XMP) zijn echter hoofdlettergevoelig. Wanneer u werkt met een hoofdlettergevoelige metagegevensindeling, gebruikt u het backslash-teken (\) wanneer u een hoofdletter wilt opgeven.

Het escape-teken wordt gebruikt door de taalparser en het volgende teken dat volgt, wordt rechtstreeks geïnterpreteerd. De expressie {char=\\} wordt bijvoorbeeld omgezet als \en {char=\C} wordt omgezet als een hoofdletter C. Zonder het escapeteken is {char=\} een ongeldige expressie en wordt {char=C} geïnterpreteerd als een kleine letter c. Zorg ervoor dat u het escapeteken backslash gebruikt voor alle hoofdletters in metagegevensindelingen die hoofdlettergevoelig zijn.

Voorbeeldexpressies

De volgende tabel bevat enkele voorbeeldexpressies en beschrijvingen van hun interpretaties door de querytaalparser.

Uitdrukking Beschrijving
ifd/xmp/exif:Auteur Komt overeen met het volgende navigatiepad: IFD-blok -> XMP-blok -> eigenschap 'Auteur' in het Exif-schema.
/[1]ifd/[0]xmp/exif:Author Hetzelfde als het eerste item in deze tabel, behalve dat het prefix [#] beschrijft welk item genavigeerd moet worden in geval van een naamconflict.
/ifd/{ushort=700}/Auteur Hetzelfde als het eerste item in deze tabel, behalve dat er een gegevensexpressie wordt gebruikt om te verwijzen naar het XMP-blok in plaats van de bloknaam 'xmp' (XMP-blok wordt ingesloten onder de niet-ondertekende korte tag-id 700). De eigenschap Auteur geeft ook geen schema op. De queryparser probeert de eigenschap in alle schema's te vinden en retourneert de eerste overeenkomst.
/ifd/xmp Biedt een navigatiepad naar een metagegevensblok. Als het blok is gevonden, wordt er een nieuwe metagegevenslezer/schrijver geretourneerd.
/[*]tEXt/Trefwoord Hiermee haalt u de eigenschap Trefwoord voor een PNG-segment op of stelt u deze in. Omdat de specificatie van de PNG-metagegevens meerdere segmenten van een bepaald type toestaat, wordt met de notatie [*] het gegevenssegment PNG opgehaald/ingesteld met de juiste eigenschap. Volgens de PNG-specificatie kunnen geen twee segmenten dezelfde eigenschappen hebben.

 

Elk metagegevensblok wordt ook uniek geïdentificeerd door de metagegevens-GUID die kan worden gebruikt in plaats van de beschrijvende bloknaam. De volgende syntaxis kan worden gebruikt in plaats van bloknamen op te geven: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"

De volgende tabel bevat enkele ongeldige voorbeelden en de redenen waarom ze worden geweigerd.

Ongeldige uitdrukking Beschrijving van afwijzing
/ifd/[0][2]exif/ Geweigerd omdat multidimensionale matrixindexen niet worden ondersteund.
/ifd/{ushort=1}/{ushort=2} Geweigerd tenzij de IFD een tagID=1 heeft. Dit is een metagegevenshandler die een metagegevensitem met een tagID=2 bevat.
/{ushort=1} Geweigerd als de queryverwerking relatief is ten opzichte van het hoogste niveau van de metagegevenshiërarchie. Dit komt doordat het hoogste niveau alleen metagegevensblokken bevat en geen gegevensitems.

 

Expressies voor beleid voor fotometagegevens

Zoals eerder vermeld, begint een volledig gekwalificeerde query-expressie met een slash (/). Expressies die niet beginnen met de slash, worden geëvalueerd als beleidsexpressies. Met een beleidsexpressie kunt u de metagegevens van de foto's opvragen voor afbeeldingsgerelateerde Eigenschappen van Windows Shell. In de sectie Gegevensselectie eerder in dit document is de expressie '/xmp/xmp:Rating' gebruikt voor toegang tot de eigenschap XMP-classificatie. Deze eigenschap kan ook worden opgevraagd met behulp van de volgende beleidsexpressie:

  • Systeem.EenvoudigeBeoordeling

Voor toegang tot de classificatie-eigenschap vanuit het MicrosoftPhoto-schema kan de volgende query-expressie worden gebruikt:

  • System.Rating

Expressies voor beleid voor fotometagegevens gedragen zich op een paar opvallende manieren anders dan volledig gekwalificeerde metagegevensquery's.

Eerst voert WIC bij het openen van metagegevens met behulp van een beleidsexpressie arbitrage en conflictoplossing uit in het geval dat dezelfde eigenschap beschikbaar is in meerdere metagegevensblokken. Zo worden zowel de MicrosoftPhoto- als de XMP-classificatiewaarden opgeslagen in zowel het App1/IFD-blok als het XMP-blok. Het metagegevensbeleid voor foto's bepaalt de prioriteit waarvoor de blokwaarde wordt geretourneerd bij het lezen van metagegevens. Wanneer u metagegevens schrijft, zorgt het beleid voor fotometagegevens ervoor dat dezelfde eigenschappen in verschillende blokken consistent zijn. Als u een metagegevensquery zoals '/xmp/xmp:Rating' gebruikt, bent u verantwoordelijk voor het bepalen van de verschillende metagegevenslocaties.

Notitie

Zie voor een lijst van ondersteunde beleidsuitdrukkingen en hun bijbehorende toewijzingsbeleid het onderwerp Beleid voor metagegevens van foto's.

 

Ten tweede zijn beleidsexpressies voor fotometagegevens onafhankelijk van de afbeeldingsindeling, terwijl volledig gekwalificeerde metagegevensquery's dat niet zijn. De query '/xmp/xmp:Rating' is bijvoorbeeld specifiek voor de JPEG-indeling. TIFF-afbeeldingen ondersteunen ook XMP-metagegevens, maar worden anders opgeslagen dan JPEG, dus de TIFF-query zou '/ifd/xmp/xmp:Rating' zijn. In beide gevallen is de beleidsexpressie echter System.SimpleRating.

Beleidsexpressies voor fotometagegevens bieden een hoger abstractie- en eenvoudsniveau in vergelijking met volledig gekwalificeerde metagegevensquery's, en moeten daarom de voorkeur krijgen in gevallen waarin toegang tot metagegevens op laag niveau niet nodig is. Beleidsexpressies bieden echter alleen toegang tot een beperkte set metagegevens van afbeeldingen, terwijl de metagegevensquerytaal toegang biedt tot bijna alle metagegevens die zijn opgeslagen in een afbeeldingsbestand.

Samenvatting metagegevensquerytaal

De volgende tabel is een formele definitie van de WIC-querytaal voor metagegevens. Elk grammaticasymbool vertegenwoordigt een expressie die bestaat uit andere symbolen. De expressie kan een ander symbool of een reeks andere symbolen zijn, gescheiden door de verticale balk (|), waarmee een 'of' keuze wordt aangegeven. De hele expressie aan de rechterkant is een mogelijke vervanging voor het opgegeven symbool aan de linkerkant.

Symbool Uitdrukking
<pad> <naam> | '/' <eigenschapspad>
<eigenschapspad> <metagegevensitem> | <eigenschapspad> '/' <eigenschapspad>
<metagegevensitem> <indexnaam> | <itemnaam> | <schemanaam> ':' <itemnaam>
<schemanaam> <itemnaam>
<itemnaam> <metadata-item> | <geïndexeerd item><index>
<geïndexeerd item> <item> | <gesuggereerde metagegevens><item>
<impliciete metagegevens> '<'<naam>'>'
<item> <naam> | <index><gegevens> | <gegevens>
<gegevens> {' <gegevenstype> '=' <waarde> '}'
< index> [' <nummer> | <ster> ']
<gegevenstype> "char" | "uchar" | 'short' | 'ushort' | 'long' | "ulong" | "int" | uint | "longlong" | "ulonglong" | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool'
<gegevenswaarde> <nummer> | <naam> | <guid>
<ster> '*'
<nummer> getal
<naam> snaar
<guid> Guid

 

conceptuele

Overzicht van Windows Imaging-onderdelen

Overzicht van WIC-metagegevens

Overzicht van metagegevens van lees- en schrijfafbeeldingen

Overzicht van uitbreidbaarheid van metagegevens

Instructies: Een JPEG-afbeelding opnieuw coderen met metagegevens