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
- Bevezetés
- Az útvonal kifejezés anatómiája
- Fénykép metaadatokkal kapcsolatos szabályzat kifejezései
- metaadatok lekérdezési nyelvének összegzése
- Kapcsolódó témakörök
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.
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> | |
<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ó |
Kapcsolódó témakörök
-
fogalmi