Gambaran Umum Bahasa Kueri Metadata

Topik ini memperkenalkan bahasa kueri metadata untuk Komponen Pencitraan Windows (WIC). Anda menggunakan bahasa kueri metadata untuk membuat ekspresi yang menemukan data tertentu (item metadata) dan lokasi (blok metadata) dalam metadata gambar.

Topik ini berisi bagian berikut.

Prasyarat

Untuk memahami topik ini, Anda harus terbiasa dengan sistem metadata WIC seperti yang dijelaskan dalam Gambaran Umum Metadata WIC dan mengakses metadata, seperti yang dijelaskan dalam Gambaran Umum Membaca dan Menulis Metadata Gambar.

Pendahuluan

Anda berinteraksi dengan platform metadata terutama melalui dua komponen Model Objek Komponen (COM): pembaca kueri, yang diwakili oleh antarmuka IWICMetadataQueryReader, dan penulis kueri, yang diwakili oleh antarmuka IWICMetadataQueryWriter. Komponen-komponen ini memungkinkan Anda membaca atau menulis metadata menggunakan bahasa kueri metadata. Bahasa kueri menguraikan sintaks ekspresi jalur dan komponen kueri menggunakan ekspresi jalur ini untuk mengakses metadata yang diinginkan. Ekspresi jalur ini menjelaskan lokasi blok metadata atau item.

Blok metadata adalah grup metadata bernama dalam format tertentu. Blok metadata dapat berisi item metadata individual seperti penulis atau waktu pembuatan dan blok metadata tambahan. Nama blok metadata ditentukan oleh formatnya. Misalnya, blok metadata yang berisi metadata App1 akan diberi nama "app1". Format metadata umum termasuk App1, Exif, IFD, dan XMP.

Item metadata adalah pasangan nama/nilai yang menjelaskan karakteristik seperti penulis, judul, dan peringkat.

Ekspresi jalur berisi satu atau beberapa nama blok metadata. Ini juga dapat menentukan item metadata dalam blok metadata. Ekspresi jalur berikut mewakili blok App1 yang berisi blok IFD yang berisi item metadata:

  • /app1/ifd/{ushort=18249}

Diagram berikut mengilustrasikan makeup contoh gambar JPEG dengan empat blok metadata root: App0, App1, XMP, dan blok yang tidak diketahui. Setiap item yang disorot mencatat jenis metadata (blok atau item) dan ekspresi kueri yang digunakan untuk mengambil data.

jpeg image with metadata callouts

Catatan

Konten diagram ini dirujuk di seluruh dokumen ini dan digunakan dalam banyak contoh.

 

Anatomi Ekspresi Jalur

Untuk mengakses metadata menggunakan API WIC, ekspresi kueri yang sepenuhnya memenuhi syarat harus digunakan dalam banyak kasus. Topik ini membahas ekspresi yang sepenuhnya memenuhi syarat untuk mengakses metadata. Jika Anda memerlukan informasi tentang kasus di mana ekspresi yang tidak sepenuhnya memenuhi syarat digunakan, lihat bagian Ekspresi Kebijakan Metadata Foto nanti dalam dokumen ini.

Apa itu ekspresi kueri yang sepenuhnya memenuhi syarat? Di WIC, ekspresi yang sepenuhnya memenuhi syarat adalah string yang dimulai dengan garis miring karakter jalur (/), diikuti dengan jalur navigasi ke blok metadata atau item metadata tertentu. Setiap langkah dalam jalur navigasi dipisahkan oleh garis miring, membentuk ekspresi untuk mengakses blok metadata atau item metadata. Misalnya, berikut ini adalah ekspresi kueri yang sepenuhnya memenuhi syarat yang mengakses Peringkat Foto Microsoft di blok IFD yang disarangkan dalam blok App1:

  • /app1/ifd/{ushort=18249}

Ketika WIC menguraikan ekspresi ini, WIC pertama-tama mencari blok metadata App1 dalam metadata gambar. Jika blok App1 ditemukan, blok tersebut melanjutkan pencariannya untuk mencari blok metadata IFD berlapis. Jika blok IFD ditemukan, blok tersebut kemudian mencari item metadata tertentu, dalam hal ini peringkat MicrosoftPhoto di bawah tag 18249, dalam blok metadata IFD. Jika suatu saat WIC tidak menemukan blok metadata atau item, maka akan membatalkan kueri.

Pilihan Blok

Ekspresi kueri metadata WIC yang paling sederhana adalah ekspresi untuk mendapatkan pembaca/penulis kueri untuk blok metadata tertentu. Mendapatkan pembaca/penulis kueri memungkinkan Anda mengarahkan kueri berikutnya langsung ke blok metadata berlapis tanpa berurusan dengan blok induknya. Ekspresi kueri pemilihan blok adalah jalur navigasi ke blok metadata yang diinginkan. Misalnya, dalam ilustrasi sebelumnya ada lima blok metadata, dua di antaranya disarangkan di blok metadata lainnya. Berikut ini adalah ekspresi jalur ke setiap blok metadata dalam contoh JPEG:

  • /app0
  • /app1
  • /app1/ifd
  • /app1/ifd/exif
  • /Xmp

Saat Anda menggunakan pembaca/penulis kueri untuk menjalankan kueri, kueri mengembalikan pembaca/penulis kueri baru yang dikueri layanan dalam cakupan blok metadata yang ditentukan. Misalnya, jika Anda menjalankan kueri "/app1" , pembaca kueri baru diperoleh dan kueri ke pembaca baru relatif terhadap blok App1. Ini berarti bahwa kueri "/ifd" valid untuk pembaca baru karena blok App1 berisi blok IFD. Namun, "/xmp" tidak akan berfungsi karena blok App1 ini tidak berisi blok metadata XMP.

Bahasa kueri juga mendukung notasi indeks. Notasi indeks menyediakan akses ke blok metadata tertentu ketika ada beberapa blok dengan jenis yang sama. Untuk contoh JPEG, ekspresi jalur terindeks berikut dapat digunakan:

  • /[0]app1/[0]ifd

Dalam bahasa kueri, semua indeks dimulai dari nol. Dalam ekspresi sebelumnya, kueri nol pertama untuk blok App1 pertama dan nol kedua mengkueri blok IFD berlapis pertama. Notasi indeks masih dapat digunakan bahkan ketika beberapa blok dari jenis yang sama tidak ada. Jika contoh JPEG menyertakan blok App1 kedua dengan blok IFD yang disematkan, ekspresi "/[1]app1/ifd" akan digunakan untuk mengakses blok App1 kedua.

Notasi indeks menjadi lebih umum saat berhadapan dengan gugus tEXt PNG karena kemungkinan gambar PNG akan memiliki lebih dari satu gugus tEXt.

Catatan

Indeks array multidansa tidak didukung.

 

Pilihan Item

Anda dapat mengakses item metadata dalam blok metadata dengan membangun ekspresi pemilihan blok. Pertimbangkan properti peringkat XMP dan Foto Microsoft dalam contoh JPEG. Metadata ini ada dalam dua blok metadata: blok App1/IFD dan XMP. Oleh karena itu, lebih dari satu ekspresi dapat digunakan untuk mengakses data yang sama. Ekspresi berikut mengakses peringkat MicrosoftPhoto di blok XMP:

  • /xmp/xmp:Rating

Bagian "xmp:" dari ekspresi adalah pengidentifikasi ramah skema. XMP adalah standar yang dapat diperluas dan memungkinkan entitas pihak ketiga untuk menerbitkan skema mereka sendiri yang menentukan cara menyimpan item metadata tertentu. Skema XMP sepenuhnya diidentifikasi oleh URL, tetapi WIC menyediakan serangkaian pengidentifikasi yang ramah untuk skema terkenal. Untuk informasi selengkapnya, lihat topik Kueri Metadata Format Gambar Asli.

Untuk gambar JPEG, informasi peringkat juga dapat disimpan dalam blok IFD berlapis App1. Namun, tidak seperti contoh peringkat XMP, blok IFD tidak menggunakan nama skema untuk mengakses informasi peringkat. Anda menggunakan ekspresi data sebagai gantinya. Ekspresi berikut digunakan untuk mengakses peringkat MicrosoftPhoto di blok IFD berlapis App1:

  • /app1/ifd/{ushort=18249}

Dalam ekspresi ini, bagian "/app1/ifd" dari ekspresi adalah jalur navigasi ke blok IFD (seperti yang dibahas sebelumnya di bagian Pilihan Blokir). Bagian kedua dari ekspresi "/{ushort=18249}" mengakses data. Bagian ekspresi ini menginstruksikan pengurai kueri untuk menemukan data yang disematkan dalam tag pendek yang tidak ditandatangani yang memiliki pengidentifikasi tag 18249.

Catatan

Untuk daftar format metadata umum yang didukung oleh setiap format gambar di, lihat topik Kueri Metadata Format Gambar Asli.

 

{ushort=18249} adalah ekspresi data dan dapat mengambil beberapa formulir. Ekspresi data adalah ekspresi dua bagian yang berisi tag metadata atau kunci yang diminta, dalam hal ini "18249", dan jenis data kunci, dalam hal ini "ushort". Dua bagian dipisahkan oleh tanda sama dengan (=). WIC mendukung sebagian besar jenis data C/C++ umum. Tipe data berikut diterima oleh bahasa kueri:

  • char
  • uchar
  • pendek
  • ushort
  • long
  • ulong
  • int
  • uint
  • longlong
  • float
  • ganda
  • str
  • wstr
  • guid
  • bool

Catatan

Daftar ini hanya menentukan tipe data yang didukung oleh bahasa kueri metadata. Gunakan tipe data ini saat membuat ekspresi data kueri metadata seperti {ushort=18249}. WIC mengembalikan nilai item metadata dalam bentuk PROPVARIANT, yang menentukan sistem jenisnya sendiri.

 

"18249" dalam contoh adalah tag data. Angka khusus ini didefinisikan oleh Microsoft untuk berisi peringkat MicrosoftPhoto. Tag data dapat berupa angka, string, atau GUID apa pun tergantung pada item data yang Anda cari

Tidak seperti contoh Peringkat XMP, tidak ada tabrakan nama untuk nilai peringkat di blok App1/IFD. Ini karena nilai peringkat XMP sebenarnya disimpan di bawah tag ushort yang berbeda, 18246. Dengan demikian, ekspresi untuk mengakses peringkat XMP di blok App1/IFD adalah:

  • /app1/ifd/{ushort=18246}

Catatan

Untuk deskripsi formal bahasa kueri metadata, lihat bagian Ringkasan Bahasa Kueri Metadata nanti dalam dokumen ini.

 

Karakter Escape

Bahasa kueri tidak peka huruf besar/kecil dan memperlakukan semua karakter sebagai huruf kecil. Namun, beberapa format metadata (seperti XMP) peka huruf besar/kecil. Saat bekerja dengan format metadata peka huruf besar/kecil, gunakan karakter garis miring terbelakang (\) saat Anda ingin menentukan karakter huruf besar.

Karakter escape dikonsumsi oleh pengurai bahasa dan karakter berikut yang mengikutinya ditafsirkan secara langsung. Misalnya, ekspresi {char=\\} diselesaikan sebagai '\'dan {char=\C} diselesaikan sebagai huruf besar C. Tanpa karakter escape, {char=\} akan menjadi ekspresi yang tidak valid dan {char=C} akan ditafsirkan sebagai huruf kecil c. Pastikan untuk menggunakan karakter escape garis miring terbalik sebelum semua huruf besar dalam format metadata yang peka huruf besar/kecil.

Ekspresi Sampel

Tabel berikut ini menyediakan beberapa contoh ekspresi dan deskripsi interpretasinya oleh pengurai bahasa kueri.

Expression Deskripsi
ifd/xmp/exif:Author Sesuai dengan jalur navigasi berikut: blok IFD -> blok XMP -> properti "Penulis" dalam skema "Exif".
/[1]ifd/[0]xmp/exif:Author Sama seperti item pertama dalam tabel ini kecuali bahwa awalan [#] menjelaskan item mana yang akan dinavigasi jika terjadi tabrakan nama.
/ifd/{ushort=700}/Author Sama seperti item pertama dalam tabel ini kecuali menggunakan ekspresi data untuk mereferensikan blok XMP alih-alih nama blok "xmp" (blok XMP disematkan di bawah pengidentifikasi tag pendek yang tidak ditandatangani 700). Selain itu, properti "Penulis" tidak menentukan skema. Pengurai kueri akan mencoba mencocokkan properti di semua skema dan mengembalikan kecocokan pertama.
/ifd/xmp Menyediakan jalur navigasi ke blok metadata. Jika blok ditemukan, pembaca/penulis metadata baru dikembalikan.
/[*]tEXt/Kata Kunci Mendapatkan atau mengatur properti Kata Kunci untuk potongan PNG. Karena spesifikasi metadata PNG memungkinkan beberapa gugus dari jenis tertentu, notasi [*] mendapatkan/mengatur potongan PNG data dengan properti yang sesuai. Sesuai spesifikasi PNG, tidak ada dua gugus yang dapat memiliki properti yang sama.

 

Setiap blok metadata juga diidentifikasi secara unik oleh GUID metadata yang dapat digunakan sebagai pengganti nama blok yang mudah diingat. Sintaks berikut dapat digunakan sebagai pengganti penyediaan nama blok: "/{guid=GUID}/[n]{guid=GUID}/schema:tagidentifier"

Tabel berikut ini menyediakan beberapa contoh yang tidak valid dan alasannya akan ditolak.

Ekspresi Tidak Valid Deskripsi penolakan
/ifd/[0][2]exif/ Ditolak karena indeks array multi dimensi tidak didukung.
/ifd/{ushort=1}/{ushort=2} Ditolak kecuali IFD memiliki tagID=1 yang merupakan handler metadata yang berisi item metadata dengan tagID=2.
/{ushort=1} Ditolak jika pemrosesan kueri relatif terhadap tingkat atas hierarki metadata. Ini karena tingkat atas hanya berisi blok metadata dan bukan item data.

 

Ekspresi Kebijakan Metadata Foto

Seperti disebutkan sebelumnya, ekspresi kueri yang sepenuhnya memenuhi syarat dimulai dengan garis miring (/). Ekspresi yang tidak dimulai dengan garis miring dievaluasi sebagai ekspresi kebijakan. Ekspresi kebijakan memungkinkan Anda mengkueri metadata foto untuk Properti Windows Shell terkait gambar. Di bagian Pemilihan Data sebelumnya dalam dokumen ini, ekspresi "/xmp/xmp:Rating" digunakan untuk mengakses properti peringkat XMP. Properti ini juga dapat dikueri menggunakan ekspresi kebijakan berikut:

  • System.SimpleRating

Untuk mengakses properti peringkat dari skema MicrosoftPhoto, ekspresi kueri berikut dapat digunakan:

  • System.Rating

Ekspresi kebijakan metadata foto bereaksi berbeda dari kueri metadata yang sepenuhnya memenuhi syarat dengan beberapa cara penting.

Pertama, saat mengakses metadata menggunakan ekspresi kebijakan, WIC melakukan arbitrase dan resolusi konflik jika properti yang sama tersedia di beberapa blok metadata. Misalnya, nilai peringkat MicrosoftPhoto dan XMP disimpan di blok App1/IFD dan blok XMP. Kebijakan metadata foto menentukan prioritas nilai blok yang dikembalikan saat membaca metadata. Saat Anda menulis metadata, kebijakan metadata foto memastikan bahwa properti yang sama di blok yang berbeda konsisten. Jika Anda menggunakan kueri metadata seperti "/xmp/xmp:Rating", Anda bertanggung jawab untuk melakukan arbitrase di antara berbagai lokasi metadata.

Catatan

Untuk daftar ekspresi kebijakan yang didukung dan kebijakan pemetaannya, lihat topik Kebijakan Metadata Foto.

 

Kedua, ekspresi kebijakan metadata foto tidak bergantung pada format gambar, sementara kueri metadata yang sepenuhnya memenuhi syarat tidak. Misalnya, kueri "/xmp/xmp:Rating" khusus untuk format JPEG. Gambar TIFF juga mendukung metadata XMP, tetapi disimpan secara berbeda dibandingkan dengan JPEG, sehingga kueri TIFF akan menjadi "/ifd/xmp/xmp:Rating". Namun, dalam kedua kasus, ekspresi kebijakan adalah "System.SimpleRating".

Ekspresi kebijakan metadata foto memberikan tingkat abstraksi dan kesederhanaan yang lebih tinggi jika dibandingkan dengan kueri metadata yang sepenuhnya memenuhi syarat, sehingga harus lebih disukai jika akses metadata tingkat rendah tidak diperlukan. Namun, ekspresi kebijakan hanya menyediakan akses ke sekumpulan metadata gambar terbatas, sedangkan bahasa kueri metadata menyediakan akses ke hampir semua metadata yang disimpan dalam file gambar.

Ringkasan Bahasa Kueri Metadata

Tabel berikut adalah definisi formal dari bahasa kueri metadata WIC. Setiap simbol tata bahasa mewakili ekspresi yang terdiri dari simbol lain. Ekspresi dapat berupa simbol lain atau urutan simbol lain yang dipisahkan oleh bilah vertikal (|), yang menunjukkan pilihan "atau". Seluruh ekspresi di sebelah kanan adalah kemungkinan penggantian untuk simbol yang ditentukan di sebelah kiri.

Simbol Expression
<jalan> <nama> | Jalur properti '/' <>
<jalur properti> <item> metadata | <jalur> properti '/' <jalur properti>
<item metadata> <nama> indeks | <nama> item | <nama> skema ':' <nama item>
<nama skema> <nama item>
<nama item> <item> metadata | <indeks item><terindeks>
<item terindeks> <item> | <item metadata><tersirat>
<metadata tersirat> '<'<name>'>'
<item> <nama> | < data> indeks><| <Data>
<data> '{' <tipe> data '=' <nilai> '}'
< Indeks> Nomor '[' <> | <bintang> ']'
<jenis data> 'karakter' | 'uchar' | 'short' | 'ushort' | 'panjang' | 'ulong' | 'int' | 'uint' | 'longlong' | 'ulonglong' | 'float' | 'ganda' | 'str' | 'wstr' | 'guid' | 'bool'
<nilai data> <angka> | <nama> | <Guid>
<Bintang> '*'
<number> number
<nama> string
<Guid> guid

 

Konseptual

Gambaran Umum Komponen Pencitraan Windows

Gambaran Umum Metadata WIC

Gambaran Umum Pembacaan dan Penulisan Metadata Gambar

Gambaran Umum Ekstensibilitas Metadata

Cara: Mengodekan ulang Gambar JPEG dengan Metadata