Bagikan melalui


Gambaran Umum Bahasa Evaluasi Data Sederhana

WDTF menyertakan bahasa kueri sederhana untuk menyederhanakan tugas pengumpulan target berdasarkan atribut atau hubungan. Bahasa Evaluasi Data Sederhana (SDEL) mirip dengan XPath. Untuk informasi selengkapnya tentang XPath, lihat Referensi XPath.

Bagian berikut dalam topik ini menjelaskan cara menggunakan SDEL.

Catatan

Untuk daftar lengkap semua token namespace dan token atribut di dalamnya, lihat Token relasi perangkat di SDEL dan Token atribut di SDEL.

Dasar-Dasar Sintaks SDEL

SDEL menggunakan token atribut untuk melakukan kecocokan dan mengambil data. Semua token SDEL hanya dapat berisi karakter alfanumerik dan tanda hubung (-).

Atribut mengacu pada bagian data yang dilampirkan ke target. Nilai aktual dalam atribut disimpan sebagai VARIAN. Jika Anda menempatkan operator perbandingan diikuti oleh nilai pengujian setelah atribut , SDEL akan melakukan kecocokan perbandingan. Anda harus menempatkan nilai pengujian dalam tanda kutip tunggal atau ganda--notasi ini memungkinkan Anda menggunakan tanda kutip tunggal atau ganda aktual dalam nilai pengujian Anda, tetapi tidak keduanya. Jika nilai pengujian hanya terdiri dari karakter alfanumerik dan tanda hubung (-), Anda dapat menghilangkan tanda kutip.

Operasi Perbandingan

SDEL memungkinkan berbagai operator perbandingan untuk mengikuti token atribut. Pada saat perbandingan, nilai aktual dalam atribut di sebelah kiri operator dibuat menjadi jenis nilai pengujian yang sama di sebelah kanan operator melalui metode VariantChangeType (yang dijelaskan dalam dokumentasi Microsoft Windows SDK). Tabel berikut ini memperlihatkan operator perbandingan berbeda yang didukung SDEL.

Operator perbandingan Yang Berarti Kesetaraan (=)

Setelah jenis diubah, jenis tersebut dibandingkan dengan menggunakan metode VarCmp (yang dijelaskan dalam dokumentasi Windows SDK).

Ketidaksamaan (!=)

Kurang dari (<)

Kurang dari atau sama dengan (<=)

Lebih besar dari (>)

Lebih besar dari atau sama dengan (>=)

Bitwise AND (&)

Operator ini memaksa jenis untuk VT_I8 sebelum melakukan bitwise AND dari nilai aktual dan pengujian.

Tidak ada operasi perbandingan (dan tidak ada nilai) yang ditentukan

Jika nilai aktual dalam atribut berjenis VT_BOOL, kecocokan terpenuhi berdasarkan nilai tersebut--yaitu, Anda tidak memerlukan operator perbandingan untuk melakukan "IsDisableable=True". Jika tidak, jika ada nilai sama sekali (selain VT_EMPTY), kecocokan terpenuhi.

Ketika ada lebih dari satu nilai aktual (atau array) dalam atribut, semua operator perbandingan harus ditafsirkan untuk mencocokkan setidaknya satu, kecuali operator ketidaksetaraan, yang memiliki perilaku yang berlawanan. Jika jenis tidak dapat dibandingkan sama sekali (yaitu, VariantChangeType gagal), tidak ada kecocokan (kecuali dengan operator ketidaksamaan, yang memiliki perilaku yang berlawanan).

Memahami Namespace Atribut

SDEL menggunakan token namespace layanan untuk mengelompokkan atribut. Untuk daftar lengkap semua token namespace dan token atribut di dalamnya, lihat Token atribut di SDEL.

Untuk menggunakan atribut apa pun yang berada di luar namespace layanan akar, Anda harus mengawali atribut dengan nama namespace, lalu dua titik dua (::). Contoh kode VBScript berikut menampilkan nilai atribut Disk::IsRemovable.

WScript.Echo "Is Removable?: " & DeviceObj.GetValue("Disk::IsRemovable")

Memeriksa Target dengan Menggunakan GetValue dan Eval

Metode IWDTFTarget2::GetValue memungkinkan Anda menanyakan target tentang atributnya. Contoh kode VBScript berikut mencetak nilai atribut FriendlyName untuk target.

WScript.Echo "FriendlyName: " & Device.GetValue("FriendlyName")

Untuk daftar lengkap token atribut, lihat Token atribut di SDEL.

Anda juga dapat menggunakan metode IWDTFTarget2::Eval untuk mengevaluasi pernyataan SDEL terhadap target. Evaluasi mengembalikan VARIANT_TRUE atau VARIANT_FALSE. Contoh kode VBScript berikut menggunakan Eval untuk menentukan apakah perangkat dapat dinonaktifkan.

If Device.Eval("IsDisableable=true") Then
    WScript.Echo "Target is disableable!"
End If

Anda juga dapat menggunakan Eval untuk menguji keberadaan atribut. Saat Anda melewati Evaluasi atribut tetapi tidak ada operator atau nilai perbandingan, Eval akan mengembalikan VARIANT_TRUE jika atribut atau namespace menyimpan nilai apa pun (selain VT_EMPTY). Contoh kode VBScript berikut menggunakan Eval untuk menentukan apakah target memiliki kata kunci SymbolicLink.

If Device.Eval("SymbolicLink") Then
    WScript.Echo "Target has a SymbolicLink!"
End If

Selain itu, atribut yang kehilangan operator perbandingan tetapi berisi nilai VT_BOOL memiliki perbandingan implisit '=true' yang diterapkan padanya. Perbandingan implisit ini berarti bahwa "IsDisable" setara dengan "IsDisable='true'".

Pengujian sering melibatkan pemeriksaan apa yang terjadi ketika perangkat terkait mengubah status. Misalnya, ketika hub USB dinonaktifkan, apakah perangkat yang terpasang di dalamnya menangani perubahan status dengan benar? Selain itu, Anda mungkin ingin menemukan perangkat berdasarkan informasi di perangkat terkait. Untuk mendukung fungsionalitas ini, SDEL menyertakan cara untuk menentukan satu atau beberapa hubungan logis sebelum atribut atau namespace layanan apa pun (tetapi tidak setelah salah satu dari mereka). Token relasi dipisahkan dari atribut atau namespace dengan garis miring (/). Contoh kode VBScript berikut mencetak nilai atribut FriendlyName untuk perangkat induk target.

WScript.Echo "FriendlyName: " & Device.GetValue("parent/FriendlyName")

Anda juga dapat menggabungkan pengubah relasi. Contoh kode VBScript berikut mencetak nilai atribut FriendlyName dari perangkat kakek-nenek objek target.

WScript.Echo "FriendlyName: " & Device.GetValue("parent/parent/FriendlyName")

Terkadang, perangkat memiliki hubungan banyak ke banyak. Misalnya, volume penyimpanan logis mungkin berada di banyak disk fisik, dan disk individual tersebut mungkin menyumbang ruang untuk banyak volume.

Dalam WDTF, semua perangkat non-phantom (yaitu, perangkat yang hadir secara fisik) adalah turunan dari perangkat root (yang dapat Anda ambil dari properti RootDevice). (Untuk informasi selengkapnya tentang perangkat phantom, lihat Membuat Skenario WDTF.)

Mengumpulkan Target dengan Menggunakan GetRelations

Ilustrasi berikut menunjukkan metode IWDTFTarget2::GetRelations.

Diagram yang mengilustrasikan metode Target::GetRelations di WDTF memperlihatkan target individual dan terkait.

Metode IWDTFTarget2::GetRelations hanya menerima bagian penentu hubungan dari sintaks pernyataan SDEL dan mengembalikan antarmuka koleksi IWDTFTargets2 yang berisi semua target yang memenuhi kriteria hubungan. Contoh kode VBScript berikut mengembalikan koleksi yang berisi target asli dan semua saudaranya.

Set TestDevices = Device.GetRelations("parent/child/", "")

Parameter kedua untuk GetRelations dapat secara opsional menyertakan pernyataan yang akan diteruskan ke metode Eval dari setiap target yang memenuhi hubungan tertentu. Misalnya, jika Anda menambahkan IsDisableable=true sebagai parameter kedua, contoh kode sebelumnya hanya akan mengembalikan perangkat dan saudara-saudaranya yang dapat dinonaktifkan.

Jika tidak ada kecocokan, koleksi dengan item nol dikembalikan.

Mengumpulkan Target dengan Menggunakan Kueri

Antarmuka IWDTFDeviceDepot2 berisi metode Kueri . Metode ini mengambil pernyataan SDEL yang dirancang untuk metode IWDTFTarget2::Eval dan mengembalikan instans baru antarmuka koleksi IWDTFTargets2 yang berisi subset target yang memenuhi kriteria kueri. Contoh kode VBScript berikut menghitung semua perangkat non-phantom dan menunjukkan nama yang mudah diingat untuk setiap perangkat.

For Each Device In WDTF.DeviceDepot.Query("IsPhantom=false")
    WScript.Echo Device.GetValue("FriendlyName")
Next

Koleksi yang dikembalikan memiliki metode IWDTFTargets2::Query, yang memiliki implementasi yang identik dengan IWDTFDeviceDepot2::Query. IWDTFTargets2::Query mengembalikan subset target dari koleksi asli yang memenuhi pernyataan SDEL.

Logika Boolean di SDEL

Metode IWDTFTarget2::GetRelations hanya dapat menerima operator OR Boolean, tetapi panggilan Anda ke metode IWDTFTargets2::Query, IWDTFTarget2::Eval, dan IWDTFTarget2::GetValue dapat menggunakan operator Boolean AND dan OR. Untuk metode Kueri dan metode Eval, operator akan bertindak seperti operator Boolean normal, mengembalikan hasilnya seperti yang diharapkan. Namun, untuk metode GetValue , AND akan menyusun nilai di kedua sisi itu sendiri, dan OR hanya akan mengembalikan nilai pertama yang ditemukan (dimulai dengan sebelah kiri).

Tanda kurung di SDEL

Semua pernyataan SDEL dapat menggunakan tanda kurung untuk menentukan urutan evaluasi untuk logika Boolean. Anda juga dapat menggunakan tanda kurung untuk mengelompokkan sub-elemen dalam pernyataan di bawah relasi atau namespace.

Contoh kode VBScript berikut mengambil semua volume dan turunan dari perangkat kakek-nenek.

Set Devices = Device.GetRelations("parent/parent/(child/ OR volume/)", "")

Contoh kode VBScript berikut mengambil semua perangkat yang memiliki anak dengan media yang dapat dilepas yang lebih besar dari 1.000.000 byte.

Set Devices = WDTF.DeviceDepot.Query("child/disk::(IsRemovable=true AND Size>1000000)")

Penguraian Sintaks SDEL

Jika Anda meneruskan pernyataan SDEL dengan sintaks yang buruk ke salah satu metode dalam WDTF, metode akan gagal dan informasi kesalahan terperinci akan dikembalikan dan menjelaskan masalahnya.

Catatan

Atribut, namespace, atau token relasi yang salah eja tidak menyebabkan kesalahan sintaks, karena SDEL dirancang agar dinamis berdasarkan target: Pernyataan SDEL harus dapat meminta keberadaan atribut dalam kumpulan bidang dinamis.