Megosztás a következőn keresztül:


Metaadatok lekérdezési nyelvének áttekintése

Ez a témakör a Windows Képalkotó összetevő (WIC) metaadat-lekérdezési nyelvét ismerteti. A metaadat-lekérdezési nyelv használatával olyan kifejezéseket hozhat létre, amelyek adott adatokat (metaadatelemeket) és helyeket (metaadatblokkokat) találnak a kép metaadatain belül.

Ez a témakör a következő szakaszokat tartalmazza.

Előfeltételek

A témakör megértéséhez ismernie kell a WIC metaadat-rendszert, amint a WIC Metaadat Áttekintés és a metaadatok elérését bemutató A képek metaadatainak olvasása és írása áttekintésleírja.

Bevezetés

A metaadatplatformot elsősorban két komponensobjektum-modell (COM) összetevőn keresztül kezelheti: egy lekérdezésolvasóval, amelyet az IWICMetadataQueryReader interfész képvisel, valamint egy lekérdezésíróval, amelyet az IWICMetadataQueryWriter interfész képvisel. Ezek az összetevők lehetővé teszik metaadatok olvasását vagy írását a metaadat-lekérdezési nyelv használatával. A lekérdezés nyelve egy elérésiút-kifejezés szintaxisát írja le, és a lekérdezési összetevők ezt az elérési utat használják a kívánt metaadatok eléréséhez. Ez az elérésiút-kifejezés egy metaadatblokk vagy elem helyét ismerteti.

A metaadat-blokkok egy adott formátumú metaadatok nevesített csoportja. A metaadat-blokkok tartalmazhatnak olyan egyéni metaadatelemeket, mint a szerző vagy a létrehozás ideje, valamint további metaadatblokkok. A metaadat-blokk nevét a formátum határozza meg. Az App1 metaadatait tartalmazó metaadatblokk neve például "app1". A metaadatok gyakori formátumai közé tartozik az App1, az Exif, az IFD és az XMP.

A metaadatelemek olyan név-érték párok, amelyek olyan jellemzőket írnak le, mint a szerző, a cím és a minősítés.

Az elérésiút-kifejezések egy vagy több metaadatblokknevet tartalmaznak. Metaadat-elemet is megadhat egy metaadatblokkon belül. Az alábbi elérésiút-kifejezés egy App1-blokkot jelöl, amely a metaadat-elemet tartalmazó IFD-blokkot tartalmazza:

  • /app1/ifd/{ushort=18249}

Az alábbi ábra egy JPEG-példakép felépítését szemlélteti négy fő metaadatblokkgal: App0, App1, XMP és ismeretlen blokk. Minden kiemelt elem megjegyzi a metaadatok típusát (blokk vagy elem) és az adatok lekéréséhez használt lekérdezési kifejezést.

jpeg kép metaadat jelölésekkel

Jegyzet

A diagram tartalma a dokumentumban található, és számos példában használatos.

 

Útvonalkifejezés anatómiája

A metaadatok WIC API-kkal való eléréséhez a legtöbb esetben teljesen minősített lekérdezési kifejezést kell használni. Ez a témakör a metaadatok eléréséhez szükséges teljes körű kifejezéseket ismerteti. Ha információra van szüksége azokról az esetekről, amelyekben nem teljes mértékben minősített kifejezéseket használ, tekintse meg a dokumentum későbbi részében található Photo Metadata Policy Expression szakaszt.

Mi az a teljes lekérdezési kifejezés? A WIC-ben a teljesen minősített kifejezés olyan sztring, amely az elérési út karakter perjelével (/) kezdődik, majd egy metaadatblokkhoz vagy egy adott metaadatelemhez vezető navigációs útvonal. A navigációs útvonal minden lépését perjel választja el egymástól, és egy metaadatblokk vagy metaadatelem elérésére szolgáló kifejezést alkot. A következők például egy teljes körűen minősített lekérdezési kifejezés, amely egy App1-blokkba beágyazott IFD-blokkban fér hozzá a Microsoft Photo Rating szolgáltatáshoz:

  • /app1/ifd/{ushort=18249}

Amikor a WIC elemzi ezt a kifejezést, először megkeresi az App1 metaadatblokkját a kép metaadatai között. Ha az App1 blokk megtalálható, folytatja a keresést a beágyazott IFD metaadat-blokk után. Ha megtalálják az IFD blokkot, akkor megkeresik az adott metaadatelemet az IFD metaadatblokkban, ebben az esetben a MicrosoftPhoto minősítést, az 18249-es címke alatt. Ha a WIC bármikor nem talál metaadatblokkot vagy elemet, megszakítja a lekérdezést.

Blokk kijelölése

A legegyszerűbb WIC-metaadat-lekérdezési kifejezés egy kifejezés, amely lekérdezésolvasót/írót kér le egy adott metaadat-blokkhoz. A lekérdezésolvasó/-író beszerzése lehetővé teszi, hogy a további lekérdezéseket közvetlenül egy beágyazott metaadat-blokkba irányítsa anélkül, hogy a szülőblokkjával foglalkozik. A blokkválasztó lekérdezési kifejezés a kívánt metaadat-blokk navigációs útvonala. Az előző ábrán például öt metaadatblokk található, amelyek közül kettő más metaadatblokkokban van beágyazva. A JPEG-példában az egyes metaadatblokkok elérési útjai a következők:

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

Amikor lekérdezésolvasót/írót használ egy lekérdezés végrehajtásához, az egy új lekérdezésolvasót/írót ad vissza, amely a megadott metaadat-blokk hatókörén belüli lekérdezéseket nyújt. Ha például az "/app1" lekérdezést hajtja végre, egy új lekérdezésolvasót kap, és az új olvasónak küldött lekérdezések az App1 blokkhoz viszonyítva jelennek meg. Ez azt jelenti, hogy az "/ifd" lekérdezés érvényes az új olvasóra, mert az App1 blokk tartalmaz egy HAD-blokkot. Az "/xmp" azonban nem működik, mert ez az App1-blokk nem tartalmaz XMP metaadatblokkot.

A lekérdezés nyelve is támogatja az index jelölését. Az index jelölése hozzáférést biztosít egy adott metaadat-blokkhoz, ha több azonos típusú blokk létezik. A JPEG-példában a következő indexelt elérési út kifejezés használható:

  • /[0]app1/[0]ifd

A lekérdezési nyelvben az összes index nullával kezdődik. Az előző kifejezésben az első nulla az App1 blokkra vonatkozó lekérdezést jelenti, míg a második nulla az első beágyazott IFD blokk lekérdezését jelenti. Az index jelölése akkor is használható, ha több azonos típusú blokk nem létezik. Ha a JPEG példa egy beágyazott HAD-blokkot tartalmazó második App1-blokkot tartalmaz, a rendszer a második App1 blokk eléréséhez az "/[1]app1/ifd" kifejezést használja.

Az indexjelezés gyakoribbá válik a PNG tEXt-adattömbök kezelésekor, mivel valószínű, hogy a PNG-lemezkép több tEXt adattömbtel fog rendelkezni.

Jegyzet

A többdimenziós tömbindexek nem támogatottak.

 

Elem kijelölése

A metaadat-blokkok metaadat-elemeit a blokkkiválasztási kifejezések alapján érheti el. Fontolja meg az XMP és a Microsoft Photo minősítési tulajdonságait a JPEG-példában. Ez a metaadat két metaadatblokkban létezik: az App1/IFD és az XMP blokkokban. Ezért több kifejezés is használható ugyanazon adatok eléréséhez. Az alábbi kifejezés hozzáférést biztosít a Microsoft Photo minősítéséhez az XMP blokkban:

  • /xmp/xmp:Értékelés

A kifejezés "xmp:" része sémabarát azonosító. Az XMP egy bővíthető szabvány, amely lehetővé teszi, hogy a külső entitások saját sémákat tegyenek közzé, amelyek meghatározzák, hogyan tárolhatnak bizonyos metaadatelemeket. Az XMP-sémákat az URL-címek teljes mértékben azonosítják, de a WIC felhasználóbarát azonosítókat biztosít a jól ismert sémákhoz. További információ: natív képformátumú metaadat-lekérdezések témakör.

JPEG-képek esetén a minősítési információk az App1 beágyazott HAD blokkban is tárolhatók. Az XMP minősítési példától eltérően azonban az IFD-blokk nem használ sémanevet a minősítési adatok eléréséhez. Ehelyett egy adatkifejezést használ. Az app1 beágyazott IFD blokkjában a MicrosoftPhoto minősítéshez a következő kifejezés használható:

  • /app1/ifd/{ushort=18249}

Ebben a kifejezésben a kifejezés "/app1/ifd" része az IFD blokk navigációs útvonala (ahogy azt korábban a Blokkkijelölés szakaszban tárgyaltuk). A "/{ushort=18249}" kifejezés második része hozzáfér az adatokhoz. A kifejezés ezen része arra utasítja a lekérdezéselemzőt, hogy keresse meg az 18249-as címkeazonosítóval ellátott, aláíratlan rövid címkébe ágyazott adatokat.

Jegyzet

Az egyes képformátumok által támogatott gyakori metaadat-formátumok listáját a Natív képformátumú metaadat-lekérdezések című témakörben találja.

 

A(z) {ushort=18249} egy adatkifejezés, amely több formában is használható. Az adatkifejezés egy kétrészes kifejezés, amely tartalmazza a kért metaadatcímkét vagy kulcsot, ebben az esetben az "18249"-et, és a kulcs adattípusát, ebben az esetben az "ushort" értéket. A két rész egyenlő előjellel (=) van elválasztva. A WIC támogatja a C/C++ adattípusok többségét. A lekérdezési nyelv a következő adattípusokat fogadja el:

  • bejárónő
  • uchar
  • rövid
  • ushort
  • hosszú
  • ulong
  • Int
  • uint (előjel nélküli egész szám)
  • hosszú hosszú
  • lebeg
  • dupla
  • Str
  • wstr
  • Guid
  • bool

Jegyzet

Ez a lista csak a metaadat-lekérdezési nyelv által támogatott adattípusokat adja meg. Ezeket az adattípusokat metaadat-lekérdezési adatkifejezések, például {ushort=18249} létrehozásakor használhatja. A WIC a metaadat-elem értékét PROPVARIANT formátumban adja vissza, amely a saját típusrendszerét határozza meg.

 

A példában az "18249" az adatcímke. Ezt a számot a Microsoft határozza meg a MicrosoftPhoto minősítésének meghatározásához. Az adatcímke tetszőleges szám, sztring vagy GUID lehet a keresett adatelemtől függően

Az XMP Rating példától eltérően az App1/IFD blokkban nincs névütközés a minősítési értékhez. Ennek az az oka, hogy az XMP-minősítési érték valójában egy másik ushort címkén , 18246-ban van tárolva. A következő kifejezéssel lehet hozzáférni az XMP-minősítéshez az App1/IFD blokkban:

  • /app1/ifd/{ushort=18246}

Jegyzet

A metaadatok lekérdezési nyelvének hivatalos leírását a metaadatok lekérdezési nyelvének összefoglalása című szakaszában találja a dokumentum későbbi részében.

 

Szökési karakter

A lekérdezés nyelve nem megkülönbözteti a kis- és nagybetűket, és az összes karaktert kisbetűként kezeli. Egyes metaadat-formátumok (például az XMP) azonban megkülönböztetik a kis- és nagybetűket. Kis- és nagybetűket megkülönböztető metaadat-formátum használatakor használja a fordított perjel (\) karaktert, ha nagybetűs karaktert szeretne megadni.

A feloldó karaktert a nyelvi elemző használja, és az azt követő következő karaktert közvetlenül értelmezi a rendszer. A(z) {char=\\} kifejezés például "\", a {char=\C} pedig nagybetűs Cként lesz feloldva. A feloldó karakter nélkül a(z) {char=\} kifejezés érvénytelen lenne, és a(z) {char=C} kisbetűs c karakterként lenne értelmezve. Ügyeljen arra, hogy a fordított perjel feloldó karaktert használja a kis- és nagybetűket megkülönböztető metaadat-formátumok összes nagybetűje előtt.

Mintakifejezések

Az alábbi táblázat néhány példakifejezést és értelmezési leírást tartalmaz a lekérdezési nyelv elemzője által.

Kifejezés Leírás
ifd/xmp/exif:Szerző A következő navigációs útvonalnak felel meg: HAD-blokk –> XMP-blokk –> "Szerző" tulajdonság az "Exif" sémában.
/[1]ifd/[0]xmp/exif:Szerző Ugyanaz, mint a táblázat első eleme, azzal a kivétellel, hogy a [#] előtag azt írja le, hogy melyik elemet kell névütközés esetén navigálni.
/ifd/{ushort=700}/Szerző Ugyanaz, mint a táblázat első eleme, azzal a kivétellel, hogy egy adatkifejezéssel hivatkozik az XMP-blokkra az "xmp" blokknév helyett (az XMP-blokk a 700-as aláírás nélküli rövid címkeazonosító alá van ágyazva). Emellett a "Author" tulajdonság nem ad meg sémát. A lekérdezéselemző megpróbálja egyeztetni a tulajdonságot az összes sémában, és visszaadja az első egyezést.
/ifd/xmp Egy metaadat-blokk navigációs útvonalát biztosítja. Ha a blokk megtalálható, a rendszer új metaadat-olvasót/írót ad vissza.
/[*]tEXt/Kulcsszó Lekéri vagy beállítja egy PNG-adattömb Kulcsszó tulajdonságát. Mivel a PNG metaadat-specifikációja egy adott típusú több adattömb használatát teszi lehetővé, a [*] jelölés lekéri/beállítja a PNG-adattömböket a megfelelő tulajdonsággal. A PNG-specifikáció szerint egyetlen két adattömb sem rendelkezhet ugyanazokkal a tulajdonságokkal.

 

Az egyes metaadat-blokkokat a metaadatok GUID azonosítója is egyedileg azonosítja, amely a rövid blokknév helyett használható. A következő szintaxis használható a blokknevek megadása helyett: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"

Az alábbi táblázat érvénytelen példákat és az elutasításuk okait tartalmazza.

Érvénytelen kifejezés Elutasítás leírása
/ifd/[0][2]exif/ Elutasítva, mert a többdimenziós tömbindexek nem támogatottak.
/ifd/{ushort=1}/{ushort=2} Elutasítva, hacsak az IFD nem rendelkezik tagID=1 nevű metaadat-kezelővel, amely egy tagID=2 metaadat-elemet tartalmaz.
/{ushort=1} Elutasítva, ha a lekérdezés feldolgozása a metaadat-hierarchia legfelső szintjéhez viszonyítva történik. Ennek az az oka, hogy a legfelső szint csak metaadatblokkokat tartalmaz, adatelemeket nem.

 

Fénykép metaadatainak szabályzatkifejezései

Ahogy korábban már említettük, a teljes lekérdezési kifejezés perjellel (/) kezdődik. Azok a kifejezések, amelyek nem perjellel kezdődnek, szabályzatkifejezésekként lesznek kiértékelve. A szabályzatkifejezések lehetővé teszik a képpel kapcsolatos Windows Shell-tulajdonságokfénykép metaadatainak lekérdezését. A dokumentum korábbi adatkijelölési szakaszában a "/xmp/xmp:Rating" kifejezést használták az XMP minősítési tulajdonság eléréséhez. Ez a tulajdonság a következő szabályzatkifejezéssel is lekérdezhető:

  • Rendszer.EgyszerűÉrtékelés

A minősítési tulajdonság MicrosoftPhoto-sémából való eléréséhez a következő lekérdezési kifejezés használható:

  • Rendszer.Értékelés

A fénykép metaadat-szabályzatai néhány figyelemre méltó módon másképp viselkednek, mint a teljes értékű metaadat-lekérdezések.

Először is, amikor egy szabályzatkifejezéssel fér hozzá a metaadatokhoz, a WIC választottbírósági és ütközéskezelési műveleteket hajt végre abban az esetben, ha ugyanaz a tulajdonság több metaadatblokkban is elérhető. A MicrosoftPhoto és az XMP minősítési értékeit például az App1/IFD és az XMP blokk tárolja. A fénykép metaadat-elválasztási szabálya határozza meg, hogy a metaadatok olvasásakor melyik blokkérték van elsőbbségben. Metaadatok írásakor a fénykép metaadat-szabályzata biztosítja, hogy a különböző blokkokban lévő tulajdonságok konzisztensek legyenek. Ha olyan metaadat-lekérdezést használ, mint a "/xmp/xmp:Rating", ön a felelős a különböző metaadat-helyek közötti konfliktusok kezeléséért.

Jegyzet

A támogatott szabályzatkifejezések és azok leképezési szabályzatainak listáját a Fénykép metaadat-szabályzatok című témakörben találja.

 

Másodszor, a fénykép metaadat-szabályzatai függetlenek a képformátumtól, míg a részletes metaadat-lekérdezések nem. A "/xmp/xmp:Rating" lekérdezés például a JPEG formátumra jellemző. A TIFF-képek az XMP-metaadatokat is támogatják, de a JPEG-hez képest másképpen tárolják, így a TIFF-lekérdezés "/ifd/xmp/xmp:Rating" lenne. A szabályzatkifejezés azonban mindkét esetben a "System.SimpleRating" lesz.

A fényképes metaadat-szabályzatkifejezések magasabb szintű absztrakciót és egyszerűséget biztosítanak a teljes metaadat-lekérdezésekhez képest, ezért előnyben kell részesíteni azokat az eseteket, amikor nincs szükség alacsony szintű metaadat-hozzáférésre. A szabályzatkifejezések azonban csak korlátozott számú képi metaadathoz biztosítanak hozzáférést, míg a metaadat-lekérdezési nyelv hozzáférést biztosít a képfájlban tárolt metaadatok szinte mindegyikéhez.

Metaadatok lekérdezési nyelvének összefoglalása

Az alábbi táblázat a WIC metaadat-lekérdezési nyelvének formális definíciója. Minden nyelvtani szimbólum más szimbólumokból álló kifejezést jelöl. A kifejezés lehet egy másik szimbólum, vagy a függőleges sáv (|) által elválasztott más szimbólumok sorozata, amely "vagy" választást jelez. A jobb oldalon lévő teljes kifejezés a bal oldalon található megadott szimbólum lehetséges helyettesítése.

Jelkép Kifejezés
<útvonal> <név> | '/' <tulajdonság-útvonal>
<tulajdonságútvonal> <metaadat elem> | <tulajdonságútvonal> '/' <tulajdonságútvonal>
<metaadat-elem> <indexnév> | <elemnév> | <sémanév> ":" <elemnév>
<séma neve> <elem név>
<elemnév> <metaadat-elem> | <indexelt elem><index>
indexelt elem <> <elem> | <hallgatólagos metaadatok><elem>
<implikált metaadatok> '<'<neve>'>'
<elem> név | &adatok | adatok
<adat> "{" <adattípus> "=" <érték> "}"
<index> "<szám> | <csillag> ""
<adattípus> 'char' | 'uchar' | 'short' | 'ushort' | 'long' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'double' | 'str' | 'wstr' | 'guid' | 'bool'
<adatérték> <szám> | <név> | <guid>
<csillag> '*'
<szám> szám
<név> húr
<guid> útmutató

 

fogalmi

Windows képalkotó összetevő áttekintése

WIC-metaadatok áttekintése

A kép metaadatainak olvasásának és írásának áttekintése

metaadatok bővíthetőségének áttekintése

Útmutató: JPEG-kép újrakódolása metaadatokkal