Vue d’ensemble du langage d’évaluation des données simple

WDTF inclut un langage de requête simple pour simplifier la tâche de collecte de cibles en fonction d’attributs ou de relations. Le langage SDEL (Simple Data Evaluation Language) est similaire à XPath. Pour plus d’informations sur XPath, consultez référence XPath.

Les sections suivantes de cette rubrique décrivent comment utiliser SDEL.

Remarque

Pour obtenir la liste complète de tous les jetons d’espace de noms et des jetons d’attribut qu’ils contiennent, consultez les jetons de relation d’appareil dans SDEL et les jetons d’attribut dans SDEL.

Notions de base de la syntaxe SDEL

SDEL utilise des jetons d’attribut pour effectuer des correspondances et récupérer des données. Tous les jetons SDEL peuvent contenir uniquement des caractères alphanumériques et des traits d’union (-).

Un attribut fait référence à une pièce une donnée attachée à une cible. Les valeurs réelles dans l’attribut sont stockées en tant que VARIANT. Si vous placez un opérateur de comparaison suivi d’une valeur de test après l’attribut, SDEL effectue une correspondance de comparaison. Vous devez placer des valeurs de test entre guillemets simples ou doubles : cette notation vous permet d’utiliser des guillemets simples ou doubles réels dans votre valeur de test, mais pas les deux. Si la valeur de test se compose uniquement de caractères alphanumériques et de traits d’union (-), vous pouvez omettre les guillemets.

Opérations de comparaison

SDEL permet à différents opérateurs de comparaison de suivre un jeton d’attribut. Au moment d’une comparaison, la valeur réelle de l’attribut à gauche de l’opérateur doit être le même type de la valeur de test à droite de l’opérateur via la méthode VariantChangeType (décrite dans la documentation du Kit de développement logiciel (SDK) Microsoft Windows). Le tableau suivant montre les différents opérateurs de comparaison pris en charge par SDEL.

Opérateur de comparaison Qui signifie Égalité (=)

Une fois les types modifiés, ils sont comparés à l’aide de la méthode VarCmp (qui est décrite dans la documentation du Kit de développement logiciel (SDK) Windows).

Inégalité ( !=)

Inférieur à (<)

Inférieur ou égal (<=)

Supérieur à (>)

Supérieur ou égal (>=)

AND au niveau du bit (&)

Cet opérateur force les types à VT_I8 avant d’effectuer un AND au niveau du bit des valeurs réelles et de test.

Aucune opération de comparaison (et aucune valeur) spécifiée

Si la valeur réelle de l’attribut est de type VT_BOOL, la correspondance est satisfaite en fonction de cette valeur, c’est-à-dire que vous n’avez pas besoin d’un opérateur de comparaison pour effectuer « IsDisableable=True ». Sinon, s’il existe une valeur du tout (autre que VT_EMPTY), la correspondance est satisfaite.

Lorsqu’il existe plusieurs valeurs réelles (ou tableau) dans l’attribut, tous les opérateurs de comparaison doivent être interprétés pour correspondre à au moins un, à l’exception de l’opérateur d’inégalité, qui a le comportement opposé. Si les types ne peuvent pas être comparés du tout (autrement dit, VariantChangeType échoue), il n’y a aucune correspondance (sauf avec l’opérateur d’inégalité, qui a le comportement opposé).

Présentation des espaces de noms d’attributs

SDEL utilise des jetons d’espace de noms pour regrouper des attributs. Pour obtenir la liste complète de tous les jetons d’espace de noms et des jetons d’attribut qu’ils contiennent, consultez les jetons d’attribut dans SDEL.

Pour utiliser n’importe quel attribut qui se trouve en dehors de l’espace de noms racine, vous devez préfixer l’attribut avec le nom de l’espace de noms, puis deux points deux-points ( ::). L’exemple de code VBScript suivant affiche la valeur de l’attribut Disk ::IsRemovable.

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

Examen d’une cible à l’aide de GetValue et Eval

La méthode IWDTFTarget2 ::GetValue vous permet d’interroger une cible sur ses attributs. L’exemple de code VBScript suivant imprime la valeur de l’attribut FriendlyName pour une cible.

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

Pour obtenir la liste complète des jetons d’attribut, consultez Les jetons d’attribut dans SDEL.

Vous pouvez également utiliser la méthode IWDTFTarget2 ::Eval pour évaluer une instruction SDEL sur une cible. Eval retourne VARIANT_TRUE ou VARIANT_FALSE. L’exemple de code VBScript suivant utilise Eval pour déterminer si un appareil peut être désactivé.

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

Vous pouvez également utiliser Eval pour tester la présence d’un attribut. Lorsque vous passez un attribut Eval mais qu’aucune valeur ou opérateur de comparaison, Eval retourne VARIANT_TRUE si l’attribut ou l’espace de noms contient une valeur (autre que VT_EMPTY). L’exemple de code VBScript suivant utilise Eval pour déterminer si la cible a un mot clé SymbolLink.

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

En outre, les attributs qui manquent un opérateur de comparaison, mais qui contiennent une valeur VT_BOOL ont une comparaison implicite '=true' appliquée. Cette comparaison implicite signifie que « IsDisableable » est équivalent à « IsDisableable='true ».

Les tests impliquent souvent d’examiner ce qui se passe lorsque les appareils associés changent d’état. Par exemple, lorsqu’un hub USB est désactivé, les appareils qui sont attachés à celui-ci gèrent-ils correctement le changement d’état ? En outre, vous souhaiterez peut-être localiser un appareil en fonction des informations contenues dans les appareils associés. Pour prendre en charge cette fonctionnalité, SDEL inclut un moyen de spécifier une ou plusieurs relations logiques avant tout attribut ou espace de noms (mais pas après l’un ou l’autre d’entre eux). Les jetons de relation sont séparés de l’attribut ou de l’espace de noms par une barre oblique (/). L’exemple de code VBScript suivant imprime la valeur de l’attribut FriendlyName pour l’appareil parent d’une cible.

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

Vous pouvez également combiner des modificateurs de relation. L’exemple de code VBScript suivant imprime la valeur de l’attribut FriendlyName de l’appareil grand-parent de l’objet cible.

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

Parfois, les appareils ont des relations plusieurs-à-plusieurs. Par exemple, un volume de stockage logique peut résider sur de nombreux disques physiques, et ces disques individuels peuvent contribuer à l’espace de nombreux volumes.

Dans WDTF, tous les appareils non fantômes (autrement dit, les appareils physiquement présents) sont des descendants de l’appareil racine (que vous pouvez récupérer à partir de la propriété RootDevice). (Pour plus d’informations sur les appareils fantômes, consultez Création de scénarios WDTF.)

Collecte de cibles à l’aide de GetRelations

L’illustration suivante montre la méthode IWDTFTarget2 ::GetRelations.

Diagramme illustrant la méthode Target ::GetRelations dans WDTF montrant des cibles individuelles et associées.

La méthode IWDTFTarget2 ::GetRelations accepte uniquement la partie spécificateur de relation de la syntaxe d’instruction SDEL et retourne une interface de collection IWDTFTargets2 qui contient toutes les cibles qui répondent aux critères de relation. L’exemple de code VBScript suivant retourne une collection qui contient la cible d’origine et tous ses frères.

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

Le deuxième paramètre pour GetRelations peut éventuellement inclure une instruction à passer à la méthode Eval de chaque cible qui répond à la relation spécifique. Par exemple, si vous ajoutez IsDisableable=true en tant que deuxième paramètre, l’exemple de code précédent retourne uniquement l’appareil et ses frères qui peuvent être désactivés.

S’il n’y a aucune correspondance, une collection avec zéro élément est retournée.

Collecte de cibles à l’aide d’une requête

L’interface IWDTFDeviceDepot2 contient une méthode Query. Cette méthode prend une instruction SDEL conçue pour la méthode IWDTFTarget2 ::Eval et retourne une nouvelle instance de l’interface de collection IWDTFTargets2 qui contient un sous-ensemble des cibles qui répondent aux critères de la requête. L’exemple de code VBScript suivant énumère tous les appareils non fantômes et affiche le nom convivial de chaque appareil.

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

La collection retournée a la méthode IWDTFTargets2 ::Query , qui a une implémentation identique à IWDTFDeviceDepot2 ::Query. IWDTFTargets2 ::Query retourne un sous-ensemble de cibles de la collection d’origine qui répond à l’instruction SDEL.

Logique booléenne dans SDEL

La méthode IWDTFTarget2 ::GetRelations peut accepter uniquement l’opérateur BOOlean OR, mais vos appels aux opérateurs IWDTFTargets2 ::Query, IWDTFTarget2 ::Eval et IWDTFTarget2 ::GetValue peuvent utiliser des opérateurs Boolean AND et OR. Pour la méthode Query et la méthode Eval , les opérateurs agissent comme des opérateurs booléens normaux, retournant le résultat comme prévu. Toutefois, pour la méthode GetValue , AND compose les valeurs des deux côtés de lui-même, et OR retourne uniquement la première valeur trouvée (à partir de la gauche).

Parenthèses dans SDEL

Toutes les instructions SDEL peuvent utiliser des parenthèses pour spécifier la séquence d’évaluation pour la logique booléenne. Vous pouvez également utiliser des parenthèses pour regrouper les sous-éléments d’une instruction sous une relation ou un espace de noms.

L’exemple de code VBScript suivant récupère tous les volumes et enfants d’un appareil grand-parent.

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

L’exemple de code VBScript suivant récupère tous les appareils qui ont un enfant avec un support amovible supérieur à 1 000 000 octets.

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

Analyse de syntaxe SDEL

Si vous transmettez une instruction SDEL avec une syntaxe incorrecte à l’une des méthodes de WDTF, la méthode échoue et les informations d’erreur détaillées sont retournées et expliquent le problème.

Remarque

Un attribut mal orthographié, un espace de noms ou un jeton de relation n’entraîne pas d’erreur de syntaxe, car SDEL est conçu pour être dynamique en fonction de la cible : les instructions SDEL doivent pouvoir interroger l’existence d’un attribut dans un jeu de champs dynamiques.