Aracılığıyla paylaş


Basit Veri Değerlendirme Diline Genel Bakış

WDTF, özniteliklere veya ilişkilere göre hedefleri toplama görevini basitleştirmek için basit bir sorgu dili içerir. Basit Veri Değerlendirme Dili (SDEL), XPath'e benzer. XPath hakkında daha fazla bilgi için bkz. XPath Başvurusu.

Bu konudaki aşağıdaki bölümlerde SDEL'i nasıl kullanabileceğiniz açıklanmaktadır.

Uyarı

Tüm ad alanı belirteçlerinin ve bunların içindeki öznitelik belirteçlerinin tam listesi için bkz. SDEL'de cihaz ilişkisi belirteçleri ve SDEL'de Öznitelik belirteçleri.

SDEL Söz Dizimi Temelleri

SDEL, eşleşmeleri gerçekleştirmek ve verileri almak için öznitelik belirteçlerini kullanır. Tüm SDEL belirteçleri yalnızca alfasayısal karakterler ve kısa çizgi (-) içerebilir.

Öznitelik, hedefe bağlı bir veri parçasına başvurur. Özniteliğindeki gerçek değerler VARIANT olarak depolanır. Özniteliğinden sonra bir karşılaştırma işleci ve ardından bir test değeri yerleştirirseniz, SDEL bir karşılaştırma eşleşmesi gerçekleştirir. Test değerlerini tek veya çift tırnak içine yerleştirmelisiniz; bu gösterim, test değerinizde gerçek tek veya çift tırnak işaretlerini kullanmanıza olanak tanır, ama her ikisini de kullanamazsınız. Test değeri yalnızca alfasayısal karakterlerden ve kısa çizgilerden (-) oluşuyorsa, tırnak işaretlerini atlayabilirsiniz.

Karşılaştırma İşlemleri

SDEL, çeşitli karşılaştırma işleçlerinin bir öznitelik belirtecini izlemesine olanak tanır. Karşılaştırma sırasında, işlecin solundaki özniteliğindeki gerçek değer VariantChangeType yöntemi (Microsoft Windows SDK belgelerinde açıklanan) aracılığıyla işlecin sağındaki test değerinin aynı türü olacak şekilde yapılır. Aşağıdaki tabloda SDEL'in desteklediği farklı karşılaştırma işleçleri gösterilmektedir.

Karşılaştırma işleci Eşittir anlamına gelir (=)

Türler değiştirildikten sonra , VarCmp yöntemi (Windows SDK belgelerinde açıklanmıştır) kullanılarak karşılaştırılır.

Eşitsizlik (!=)

(<)'dan az

Küçük veya eşit (<=)

Büyüktür (>)

Büyüktür veya eşittir (>=)

Bit Düzeyinde AND (&)

Türleri VT_I8'e zorladıktan sonra, bu işleç gerçek ve test değerleri üzerinde bit düzeyinde VE işlemi gerçekleştirir.

Karşılaştırma işlemi veya değer belirtilmedi

Öznitelikteki gerçek değer VT_BOOL türündeyse, eşleşme bu değere göre karşılanır; yani" IsDisable=True" yapmak için bir karşılaştırma işlecine ihtiyacınız yoktur. Aksi takdirde, herhangi bir değer varsa (VT_EMPTY dışında), eşleşme sağlanır.

Özniteliğinde birden fazla gerçek değer (veya dizi) olduğunda, karşıt davranışa sahip eşitsizlik işleci dışında karşılaştırma işleçlerinin tümü en az bir değerle eşleşecek şekilde yorumlanmalıdır. Türler hiç karşılaştırılamazsa (yani VariantChangeType başarısız olursa), eşleşme yoktur (aksi davranışa sahip eşitsizlik işleci hariç).

Öznitelik Ad Alanlarını Anlama

SDEL, öznitelikleri gruplandırmak için ad alanı belirteçlerini kullanır. Tüm ad alanı belirteçlerinin ve bunların içindeki öznitelik belirteçlerinin tam listesi için bkz. SDEL'de öznitelik belirteçleri.

Kök ad alanının dışındaki herhangi bir özniteliği kullanmak için, özniteliğin önüne ad alanı adını ve ardından iki iki nokta üst üste (::)) eklemelisiniz. Aşağıdaki VBScript kod örneği Disk::IsRemovable özniteliğinin değerini görüntüler.

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

GetValue ve Eval Kullanarak Hedefi inceleme

IWDTFTarget2::GetValue yöntemi, bir hedefe öznitelikleri hakkında soru sormanızı sağlar. Aşağıdaki VBScript kod örneği, hedef için FriendlyName özniteliğinin değerini yazdırır.

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

Öznitelik belirteçlerinin tam listesi için bkz . SDEL'de öznitelik belirteçleri.

Bir SDEL deyimini bir hedefe karşı değerlendirmek için IWDTFTarget2::Eval yöntemini de kullanabilirsiniz. Değerlendirme, VARIANT_TRUE veya VARIANT_FALSE döndürür. Aşağıdaki VBScript kod örneği, bir cihazın devre dışı bırakılıp devre dışı bırakılamadığını belirlemek için Eval kullanır.

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

Bir özniteliğin varlığını test etmek için Eval'ı da kullanabilirsiniz. Eval özniteliğini geçirip karşılaştırma işleci veya değeri geçirmediğinizde, öznitelik veya ad alanı herhangi bir değer barındırıyorsa (VT_EMPTY dışında) EvalVARIANT_TRUE döndürür. Aşağıdaki VBScript kod örneği, hedefin SymbolicLink anahtar sözcüğüne sahip olup olmadığını belirlemek için Eval kullanır.

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

Ayrıca, karşılaştırma işleci eksik olan ancak VT_BOOL değeri içeren özniteliklere örtük bir '=true' karşılaştırması uygulanır. Bu örtük karşılaştırma, "IsDisableable"ın "IsDisable='true'" ile eşdeğer olduğu anlamına gelir.

Test genellikle ilgili cihazlar durum değiştirdiğinde ne olacağının incelenmesini içerir. Örneğin, bir USB hub'ı devre dışı bırakıldığında, buna bağlı cihazlar durum değişikliğini düzgün bir şekilde işler mi? Ayrıca, ilgili cihazlardaki bilgilere göre bir cihaz bulmak isteyebilirsiniz. Bu işlevselliği desteklemek için, SDEL herhangi bir öznitelik veya ad alanı öncesinde bir veya daha fazla mantıksal ilişki belirtmenin bir yolunu içerir (ancak bunlardan herhangi birinden sonra belirtemez). İlişki belirteçleri öznitelikten veya ad alanından eğik çizgi (/) ile ayrılır. Aşağıdaki VBScript kod örneği, hedefin üst cihazı için FriendlyName özniteliğinin değerini yazdırır.

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

İlişki değiştiricileri de birleştirebilirsiniz. Aşağıdaki VBScript kod örneği, hedef nesnenin büyükbaba cihazının FriendlyName özniteliğinin değerini yazdırır.

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

Bazen cihazların çoka çok ilişkileri olur. Örneğin, mantıksal depolama birimi birçok fiziksel diskte yer alabilir ve bu tek tek diskler birçok birime alan katabilir.

WDTF içinde, hayalet olmayan tüm cihazlar (fiziksel olarak mevcut cihazlar) kök cihazın alt öğeleridir ( RootDevice özelliğinden alabilirsiniz). (Hayalet cihazlar hakkında daha fazla bilgi için bkz . WDTF Senaryoları Oluşturma.)

GetRelations Kullanarak Hedefleri Toplama

Aşağıdaki çizimde IWDTFTarget2::GetRelations yöntemi gösterilmektedir .

Tek ve ilgili hedefleri gösteren WDTF'de Target::GetRelations yöntemini gösteren diyagram.

IWDTFTarget2::GetRelations yöntemi, SDEL deyimi söz diziminin yalnızca ilişki tanımlayıcı kısmını kabul eder ve ilişki ölçütlerini karşılayan tüm hedefleri içeren bir IWDTFTargets2 koleksiyon arabirimi döndürür. Aşağıdaki VBScript kod örneği, özgün hedefi ve tüm eşdüzeylerini içeren bir koleksiyon döndürür.

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

GetRelations için ikinci parametre isteğe bağlı olarak belirli bir ilişkiyi karşılayan her hedefin Eval yöntemine geçirilecek bir deyimi içerebilir. Örneğin, ikinci parametre olarak IsDisable=true eklerseniz, yukarıdaki kod örneği yalnızca devre dışı bırakılabilen cihazı ve eşdüzeylerini döndürür.

Eşleşme yoksa, sıfır öğe içeren bir koleksiyon döndürülür.

Sorgu Kullanarak Hedefleri Toplama

IWDTFDeviceDepot2 arabirimi bir Query yöntemi içerir. Bu yöntem , IWDTFTarget2::Eval yöntemi için tasarlanmış bir SDEL deyimi alır ve sorgu ölçütlerini karşılayan hedeflerin bir alt kümesini içeren IWDTFTargets2 koleksiyon arabiriminin yeni bir örneğini döndürür. Aşağıdaki VBScript kod örneği, hayalet olmayan tüm cihazları numaralandırır ve her cihaz için kolay adı gösterir.

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

Döndürülen koleksiyon, IWDTFDeviceDepot2::Query ile aynı uygulamaya sahip IWDTFTargets2::Query yöntemine sahiptir. IWDTFTargets2::Query , SDEL deyimini karşılayan özgün koleksiyondaki hedeflerin bir alt kümesini döndürür.

SDEL'de Boole Mantığı

IWDTFTarget2::GetRelations yöntemi yalnızca Boolean OR işlecini kabul edebilir, ancak IWDTFTargets2::Query, IWDTFTarget2::Eval ve IWDTFTarget2::GetValue yöntemlerine yönelik çağrılarınız Boolean AND ve OR işleçlerini kullanabilir. Sorgu yöntemi ve Eval yöntemi için işleçler normal Boole işleçleri gibi davranarak sonucu beklendiği gibi döndürür. Ancak, GetValue yöntemi için VE kendi her iki tarafında da değerleri oluşturur ve VEYA yalnızca bulunan ilk değeri döndürür (soldan başlayarak).

SDEL'de parantezler

Tüm SDEL deyimleri, Boole mantığının değerlendirme sırasını belirtmek için parantez kullanabilir. Ayrıca, bir ilişki veya ad alanı altındaki bir deyimdeki alt öğeleri gruplandırmak için parantezleri de kullanabilirsiniz.

Aşağıdaki VBScript kod örneği, bir büyükbaba cihazının tüm birimlerini ve alt öğelerini alır.

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

Aşağıdaki VBScript kod örneği, 1.000.000 bayttan büyük çıkarılabilir medya içeren alt aygıta sahip tüm cihazları alır.

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

SDEL Söz Dizimi Ayrıştırma

WDTF'deki yöntemlerden birine hatalı söz dizimi içeren bir SDEL deyimi geçirirseniz, yöntem başarısız olur ve ayrıntılı hata bilgileri döndürülür ve sorunu açıklar.

Uyarı

Yanlış yazılmış bir öznitelik, ad alanı veya ilişki belirteci söz dizimi hatasına neden olmaz, çünkü SDEL hedefe göre dinamik olacak şekilde tasarlanmıştır: SDEL deyimlerinin dinamik alan kümesindeki bir özniteliğin varlığını sorgulayabilmesi gerekir.