Spécification d'un test de nœud dans le chemin d'accès d'emplacement (SQLXML 4.0)
Un test de nœud spécifie le type de nœud sélectionné par le niveau d'emplacement. Chaque axe (child, parent, attribute ou self) possède un type de nœud principal. Pour l'axe attribute, le type de nœud principal est <attribute>. Pour les axes parent, child et self, le type de nœud principal est <element>.
[!REMARQUE]
Le test de nœud générique * (par exemple, child::*) n'est pas pris en charge.
Test de nœud : exemple 1
Le chemin d'accès d'emplacement child::Customer sélectionne les éléments enfants <Customer> du nœud de contexte.
Dans cet exemple, child est l'axe et Customer est le test de nœud. Le type de nœud principal de l'axe child est <element>. Par conséquent, le test de nœud est TRUE si le nœud <Client> est un nœud <element>. Si le nœud de contexte n'a pas d'enfants <Customer>, un ensemble de nœuds vide est retourné.
Test de nœud : exemple 2
Le chemin d'accès d'emplacement attribute::CustomerID sélectionne l'attribut CustomerID du nœud de contexte.
Dans cet exemple, attribute est l'axe et CustomerID est le test de nœud. Le type de nœud principal de l'axe attribute est <attribute>. Par conséquent, le test de nœud est TRUE si CustomerID est un nœud <attribute>. Si le nœud de contexte n'a pas de CustomerID, un ensemble de nœuds vide est retourné.
[!REMARQUE]
Dans cette implémentation de XPath, si un niveau d'emplacement fait référence à un type <element> ou <attribute> qui n'est pas déclaré dans le schéma, une erreur est générée. Dans une implémentation de XPath dans MSXML, un ensemble de nœud vide est renvoyé.
Syntaxe abrégée des axes
La syntaxe abrégée suivante est prise en charge pour le chemin d'accès d'emplacement :
attribute:: peut être abrégé en @.
Le chemin d'accès d'emplacement Customer[@CustomerID="ALFKI"] est identique à child::Customer[attribute::CustomerID="ALFKI"].
child:: peut être omis dans un niveau d'emplacement.
Par conséquent, child est l'axe par défaut. Le chemin d'accès d'emplacement Customer/Order est identique à child::Customer/child::Order.
self::node() peut être abrégé en un point et parent::node() peut être abrégé en deux points (..).