Översikt över metadatafrågespråk

Det här avsnittet beskriver metadatafrågespråket för Windows Imaging Component (WIC). Du använder metadatafrågespråket för att skapa uttryck som hittar specifika data (metadataobjekt) och platser (metadatablock) i metadata för en bild.

Det här avsnittet innehåller följande avsnitt.

Förutsättningar

För att förstå det här avsnittet bör du vara bekant med WIC-metadatasystemet enligt beskrivningen i översikt över WIC-metadata och åtkomst till metadata, enligt beskrivningen i Översikt över läs- och skrivbildmetadata.

Introduktion

Du interagerar med metadataplattformen främst via två komponenter för komponentobjektmodell (COM): en frågeläsare som representeras av IWICMetadataQueryReader-gränssnittet och en frågeskrivare som representeras av IWICMetadataQueryWriter--gränssnittet. Med de här komponenterna kan du läsa eller skriva metadata med hjälp av metadatafrågespråket. Frågespråket beskriver syntaxen för ett sökvägsuttryck och frågekomponenterna använder det här sökvägsuttrycket för att få åtkomst till önskade metadata. Det här sökvägsuttrycket beskriver platsen för ett metadatablock eller objekt.

Ett metadatablock är en namngiven grupp metadata i ett visst format. Ett metadatablock kan innehålla enskilda metadataobjekt, till exempel en författare eller skapandetid och ytterligare metadatablock. Namnet på ett metadatablock bestäms av dess format. Ett metadatablock som innehåller App1-metadata skulle till exempel ha namnet "app1". Vanliga metadataformat är App1, Exif, IFD och XMP.

Ett metadataobjekt är ett namn/värde-par som beskriver egenskaper som författare, rubrik och klassificering.

Ett sökvägsuttryck innehåller ett eller flera metadatablocknamn. Det kan också ange ett metadataobjekt i ett metadatablock. Följande sökvägsuttryck representerar ett App1-block som innehåller ett IFD-block som innehåller metadataobjektet:

  • /app1/ifd/{ushort=18249}

Följande diagram illustrerar sammansättningen av en exempel-JPEG-bild med fyra rotmetadatablock: App0, App1, XMP och ett okänt block. Varje markerat objekt noterar typen av metadata (block eller objekt) och frågeuttrycket som används för att hämta data.

jpeg-bild med metadatautrop

Not

Innehållet i det här diagrammet refereras i hela det här dokumentet och används i många av exemplen.

 

Anatomi för ett sökvägsuttryck

För att få åtkomst till metadata med hjälp av WIC-API:er måste ett fullständigt kvalificerat frågeuttryck användas i de flesta fall. I det här avsnittet beskrivs fullständigt kvalificerade uttryck för åtkomst till metadata. Om du behöver information om de fall där icke-fullständigt kvalificerade uttryck används kan du läsa avsnittet Principuttryck för fotometadata senare i det här dokumentet.

Vad är ett fullständigt kvalificerat frågeuttryck? I WIC är ett fullständigt kvalificerat uttryck en sträng som börjar med sökvägsteckensnedstrecket (/), följt av en navigeringssökväg till ett metadatablock eller ett specifikt metadataobjekt. Varje steg i navigeringssökvägen avgränsas med ett snedstreck som utgör ett uttryck för åtkomst till ett metadatablock eller ett metadataobjekt. Följande är till exempel ett fullständigt kvalificerat frågeuttryck som kommer åt Microsoft Photo Rating i ett IFD-block som är kapslat i ett App1-block:

  • /app1/ifd/{ushort=18249}

När WIC parsar det här uttrycket söker det först efter App1-metadatablocket i bildens metadata. Om App1-blocket hittas fortsätter sökningen efter det kapslade IFD-metadatablocket. Om IFD-blocket hittas letar det efter det specifika metadataobjektet, i det här fallet MicrosoftPhoto-klassificeringen under taggen 18249, inom IFD-metadatablocket. Om WIC när som helst inte hittar något metadatablock eller objekt avbryts frågan.

Markera block

Det enklaste frågeuttrycket för WIC-metadata är ett uttryck för att hämta en frågeläsare/skrivare för ett specifikt metadatablock. Genom att hämta en frågeläsare/skrivare kan du dirigera efterföljande frågor direkt till ett kapslat metadatablock utan att hantera dess överordnade block. Ett frågeuttryck för blockval är en navigeringssökväg till önskat metadatablock. I föregående bild finns till exempel fem metadatablock, varav två är kapslade i andra metadatablock. Följande är sökvägsuttrycken för varje metadatablock i JPEG-exemplet:

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

När du använder en frågeläsare/skrivare för att köra en fråga returneras en ny frågeläsare/skrivare som skickar frågor inom omfånget för det angivna metadatablocket. Om du till exempel kör frågan "/app1" hämtas en ny frågeläsare och frågor till den nya läsaren är relativa till App1-blocket. Det innebär att frågan "/ifd" är giltig för den nya läsaren eftersom App1-blocket innehåller ett IFD-block. "/xmp" skulle dock inte fungera eftersom det här App1-blocket inte innehåller något XMP-metadatablock.

Frågespråket stöder också en index notation. Index notation ger åtkomst till ett specifikt metadatablock när det finns flera block av samma typ. I JPEG-exemplet kan följande indexerade sökvägsuttryck användas:

  • /[0]app1/[0]ifd

På frågespråket börjar alla index på noll. I föregående uttryck gör den första nollan en förfrågan för det första App1-blocket, och den andra nollan gör en förfrågan på det första kapslade IFD-blocket. Index notation kan fortfarande användas även om flera block av samma typ inte finns. Om jpeg-exemplet innehåller ett andra App1-block med ett inbäddat IFD-block används uttrycket "/[1]app1/ifd" för att komma åt det andra App1-blocket.

Index notation blir vanligare när du hanterar PNG tEXt-segment eftersom det är troligt att PNG-avbildningen har mer än ett tEXt-segment.

Obs

Flerdimensionella matrisindex stöds inte.

 

Val av objekt

Du kan komma åt metadataobjekten i ett metadatablock genom att bygga vidare på blockmarkeringsuttrycken. Överväg XMP- och Microsoft Photo-klassificeringsegenskaperna i JPEG-exemplet. Dessa metadata finns i två metadatablock: Blocken App1/IFD och XMP. Därför kan mer än ett uttryck användas för att komma åt samma data. Följande uttryck använder MicrosoftPhoto-klassificeringen i XMP-blocket:

  • /xmp/xmp:Betyg

"xmp:"-delen av uttrycket är en schemavänlig identifierare. XMP är en utökningsbar standard och tillåter tredjepartsentiteter att publicera sina egna scheman som definierar hur vissa metadataobjekt ska lagras. Ett XMP-schema identifieras helt av en URL, men WIC tillhandahåller en uppsättning egna identifierare för välkända scheman. Mer information finns i avsnittet metadatafrågor för inbyggt bildformat.

För JPEG-bilder kan klassificeringsinformation också lagras i det kapslade IFD-blocket i App1. Men till skillnad från XMP-klassificeringsexemplet använder IFD-blocket inte ett schemanamn för att komma åt klassificeringsinformationen. Du använder ett datauttryck i stället. Följande uttryck används för att komma åt MicrosoftPhoto-klassificeringen i det kapslade IFD-blocket App1:

  • /app1/ifd/{ushort=18249}

I det här uttrycket är delen "/app1/ifd" navigeringssökvägen till IFD-blocket (som beskrivs tidigare i avsnittet Blockval). Den andra delen av uttrycket "/{ushort=18249}" kommer åt data. Den här delen av uttrycket instruerar frågeparsern att hitta de data som är inbäddade i den osignerade korta taggen som har taggidentifieraren 18249.

Obs

En lista över vanliga metadataformat som stöds av varje bildformat finns i avsnittet Metadatafrågor för inbyggt bildformat.

 

{ushort=18249} är ett datauttryck och kan ta flera former. Ett datauttryck är ett tvådelsuttryck som innehåller den begärda metadatataggen eller nyckeln, i det här fallet "18249" och datatypen för nyckeln, i det här fallet "ushort". De två delarna avgränsas med ett likhetstecken (=). WIC stöder en majoritet av de vanliga C/C++-datatyperna. Följande datatyper accepteras av frågespråket:

  • röding
  • uchar
  • kort
  • ushort
  • lång
  • ulong
  • Int
  • uint
  • longlong
  • flyta/sväva
  • dubbel
  • Str
  • wstr
  • GUID
  • bool

Not

Den här listan anger endast de datatyper som stöds av metadatafrågespråket. Använd dessa datatyper när du skapar ett metadatafrågedatauttryck som {ushort=18249}. WIC returnerar metadataobjektets värde i form av PROPVARIANT, som definierar sitt eget typsystem.

 

"18249" i exemplet är datataggen. Det här specifika talet definieras av Microsoft för att innehålla MicrosoftPhoto-klassificeringen. Datataggen kan vara valfritt tal, sträng eller GUID beroende på vilket dataobjekt du letar efter

Till skillnad från XMP-klassificeringsexemplet finns det ingen namnkollision för klassificeringsvärdet i App1/IFD-blocket. Det beror på att XMP-klassificeringsvärdet faktiskt lagras under en annan ushort-tagg, 18246. Uttrycket för att komma åt XMP-klassificeringen i App1/IFD-blocket är därför:

  • /app1/ifd/{ushort=18246}

Obs

En formell beskrivning av metadatafrågespråket finns i avsnittet Sammanfattning av metadatafrågespråk senare i det här dokumentet.

 

Escape-tecken

Frågespråket är inte skiftlägeskänsligt och behandlar alla tecken som gemener. Vissa metadataformat (till exempel XMP) är dock skiftlägeskänsliga. När du arbetar med ett skiftlägesberoende metadataformat använder du snedstreck (backslash) (\) när du vill ange ett versalt tecken.

Escape-tecknet används av språkparsern och följande tecken som följer tolkas direkt. Till exempel bearbetas uttrycket {char=\\} som '\' och {char=\C} bearbetas som en stor bokstav C. Utan escape-tecken skulle {char=\} vara ett ogiltigt uttryck och {char=C} tolkas som en liten bokstav c. Se till att använda omvänt snedstreck som escape-tecken före alla versaler i metadataformat som är skiftlägeskänsliga.

Exempeluttryck

Följande tabell innehåller några exempeluttryck och beskrivningar av deras tolkningar av frågespråkparsern.

Uttryck Beskrivning
ifd/xmp/exif:Författare Motsvarar följande navigeringssökväg: IFD-block –> XMP-block –> egenskap "Författare" i "Exif"-schemat.
/[1]ifd/[0]xmp/exif:Author Samma som det första objektet i den här tabellen förutom att prefixet [#] beskriver vilket objekt som ska navigera i händelse av en namnkollision.
/ifd/{ushort=700}/Författare Samma som det första objektet i den här tabellen förutom att det använder ett datauttryck för att referera till XMP-blocket i stället för blocknamnet "xmp" (XMP-blocket bäddas in under den osignerade korta taggidentifieraren 700). Egenskapen "Författare" anger inte heller något schema. Frågeparsern försöker matcha egenskapen i alla scheman och returnera den första matchningen.
/ifd/xmp Tillhandahåller en navigeringssökväg till ett metadatablock. Om blocket hittas returneras en ny metadataläsare/skrivare.
/[*]tEXt/Keyword Hämtar eller anger egenskapen Nyckelord för ett PNG-segment. Eftersom PNG-metadataspecifikationen tillåter flera segment av en viss typ hämtar/anger [*] notationen data-PNG-segmentet med lämplig egenskap. Enligt PNG-specifikationen kan inga två segment ha samma egenskaper.

 

Varje metadatablock identifieras också unikt av metadata-GUID som kan användas i stället för det egna blocknamnet. Följande syntax kan användas i stället för att ange blocknamn: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"

Följande tabell innehåller några ogiltiga exempel och orsakerna till att de skulle avvisas.

Ogiltigt uttryck Beskrivning av avvisande
/ifd/[0][2]exif/ Avvisades eftersom flerdimensionella matrisindex inte stöds.
/ifd/{ushort=1}/{ushort=2} Avvisades om inte IFD har ett tagID=1 som är en metadatahanterare som innehåller ett metadataobjekt med ett tagID=2.
/{ushort=1} Avvisad om frågebearbetningen är relativ till en toppnivå i metadatahierarkin. Det beror på att den översta nivån endast innehåller metadatablock och inte dataobjekt.

 

Principuttryck för fotometadata

Som tidigare nämnts börjar ett fullständigt kvalificerat frågeuttryck med ett snedstreck (/). Uttryck som inte börjar med snedstrecket utvärderas som principuttryck. Med ett regeluttryck kan du fråga efter fotometadata för bildrelaterade Windows Shell-egenskaper. I avsnittet Dataval tidigare i det här dokumentet användes uttrycket "/xmp/xmp:Rating" för att komma åt XMP-klassificeringsegenskapen. Den här egenskapen kan också frågas med hjälp av följande principuttryck:

  • System.EnkelBetygsättning

Om du vill komma åt klassificeringsegenskapen från MicrosoftPhoto-schemat kan du använda följande frågeuttryck:

  • System.Betyg

Principuttryck för fotometadata fungerar annorlunda än fullständigt kvalificerade metadatafrågor på några viktiga sätt.

För det första, vid åtkomst till metadata med ett principuttryck, utför WIC skiljeförfarande och konfliktlösning om samma egenskap är tillgänglig i flera metadatablock. Till exempel lagras både MicrosoftPhoto- och XMP-klassificeringsvärdena i både App1/IFD-blocket och XMP-blocket. Principen för fotometadata avgör prioriteten för vilket blockvärde som returneras när metadata läss. När du skriver metadata ser principen för fotometadata till att samma egenskaper i olika block är konsekventa. Om du använder en metadatafråga som "/xmp/xmp:Rating", ansvarar du för att avgöra mellan de olika metadataplatserna.

Not

En lista över principuttryck som stöds och deras mappningsprinciper finns i avsnittet Principer för fotometadata.

 

För det andra är principuttryck för fotometadata oberoende av bildformatet, medan fullständigt kvalificerade metadatafrågor inte är det. Frågan "/xmp/xmp:Rating" är till exempel specifik för JPEG-formatet. TIFF-bilder stöder också XMP-metadata, men de lagras på olika sätt jämfört med JPEG, så TIFF-frågan skulle vara "/ifd/xmp/xmp:Rating". I båda fallen skulle dock principuttrycket vara "System.SimpleRating".

Principuttryck för fotometadata ger en högre abstraktionsnivå och enkelhet jämfört med fullständigt kvalificerade metadatafrågor, och bör därför föredras i fall där åtkomst till metadata på låg nivå inte behövs. Principuttryck ger dock endast åtkomst till en begränsad uppsättning bildmetadata, medan metadatafrågespråket ger åtkomst till nästan alla metadata som lagras i en bildfil.

Sammanfattning av metadatafrågespråk

Följande tabell är en formell definition av frågespråket för WIC-metadata. Varje grammatiksymbol representerar ett uttryck som består av andra symboler. Uttrycket kan vara en annan symbol eller en sekvens med andra symboler avgränsade med det lodräta fältet (|), vilket anger ett "eller"-val. Hela uttrycket till höger är en möjlig ersättning för den angivna symbolen till vänster.

Symbol Uttryck
<sökväg> <namn> | '/' <egenskapssökväg>
<egenskapssökväg> <metadataobjekt> | <egenskapssökväg> / <egenskapssökväg>
<metadataobjekt> sv-SE: <indexnamn> | <objektnamn> | <schemanamn> ':' <objektnamn>
<schemanamn> <objektnamn>
<objektnamn> <metadataobjekt> | <indexerat objekt><index>
<indexerat objekt> <objekt> | <underförstådda metadata><objekt>
<underförstådda metadata> < <namn>>
<objekt> <namn> | <index><data> | <data>
<data> {<datatyp> =<värde> }.
< index> [' <nummer> | <stjärna> ']'
<datatyp> "char" | "uchar" | "short" | "ushort" | "long" | "ulong" | "int" | "uint" | "longlong" | "ulonglong" | "float" | "double" | "str" | "wstr" | "guid" | "bool"
<datavärde> <nummer> | <namn> | <guid>
<stjärna> '*'
<nummer> nummer
<namn> sträng
<guid> GUID

 

konceptuell

Översikt över Windows Imaging-komponenten

översikt över WIC-metadata

översikt över att läsa och skriva bildmetadata

Översikt över utökningsbarhet av metadata

Instruktioner: Koda om en JPEG-bild med metadata