HCL Commerce notation XPath étendue
Lorsque les requêtes GET pour les noms HCL Commerce sont traitées, HCL Commerce utilise la notation XPath étendue comme langue de requête pour identifier les noms à renvoyer. XPath est un langage aux normes du secteur pour se référer à des parties d'un document XML et la notation XPath étendue de HCL Commerce utilise des extensions de cette norme.
La notion XPath est utilisée parce que les noms sont définis dans un schéma XML et peuvent être considérés comme des documents XML. HCL Commerce convertit ces noms en une classe Java appelée SDO (Service Data Objects). Les propriétés d'objets SDO peuvent être représentées par le biais d'attributs (dans les cas simples, en tant que chaîne) ou en tant qu'éléments (lorsque les propriétés SDO font référence à un autre objet SDO). Ces objets SDO et les schémas XML composent le modèle logique de HCL Commerce.
Mappage de la notation XPath
Lorsque vous utilisez des expressions XPath pour demander des noms, HCL Commerce n'utilise pas les API Java XPath. HCL Commerce mappe l'expression XPath dans la requête Get à une requête SQL définie dans un fichier de modèle de requête (fichier .tpl). La requête SQL contient des variables que HCL Commerce remplace au moment de l'exécution. Pour mapper une expression XPath à une requête SQL, HCL Commerce normalise l'expression XPath et associe l'expression à un chemin XPath. Pour normaliser l'expression, HCL Commerce supprime les valeurs de données réelles dans le XPath. Vous pouvez utiliser le générateur de clés XPath pour normaliser une expression XPath spécifique. L'utilitaire de ligne de commande du générateur de clé XPath reçoit une expression XPath en entrée et génère une clé XPath. Cette clé est utilisée pour localiser la requête SQL dans le fichier de modèle de requête.
/CatalogEntry[CatalogEntryIdentifier[ExternalIdentifier[(PartNumber='ABC123')]]]Pour normaliser cette requête, HCL Commerce supprime la valeur pour PartNumber. Le code suivant illustre la forme normalisée de cette requête :/CatalogEntry[CatalogEntryIdentifier[ExternalIdentifier[(PartNumber=)]]]HCL Commerce crée une variable PartNumber qui peut être utilisée dans l'instruction SQL associée à ce XPath. L'instruction SQL est définie dans un fichier de modèle de requête. L'instruction SQL suivante illustre l'utilisation de la variable PartNumber. Cette variable, ?PartNumber? est remplacée pendant l'exécution par des valeurs de données réelles.SELECT
CATENTRY_ID_1
FROM
(
SELECT
CATENTRY.CATENTRY_ID CATENTRY_ID_1
FROM
CATENTRY
WHERE
CATENTRY.PARTNUMBER IN (?PartNumber?) AND
CATENTRY.MARKFORDELETE = 0 AndPSAgreements
) T1
WHERE EXISTS
(
SELECT
1
FROM
STORECENT
WHERE
CATENTRY_ID_1 = STORECENT.CATENTRY_ID AND
STORECENT.STOREENT_ID IN ( $STOREPATH:catalog$ )
)Pour plus d'informations sur le générateur de clés XPath et la normalisation des expressions XPath, voir Génération de votre clé XPath à l'aide de l'utilitaire wcs_xpathkey
Pour plus d'informations sur la façon dont les expressions XPath mappent au modèle de requête SQL, voir fichier de modèle de requête.
Vous pouvez créer vos propres méthodes de requête en définissant vos propres mappages XML dans un fichier de modèle de requête. Pour plus d'informations sur la création de vos propres requêtes, voir création d'une requête.
Structure de notation XPath
<Catalog>
<CatalogGroup>
<Name>MyCatalogGroupName</Name>
</CatalogGroup>
</Catalog>
L'exemple d'expression XPath suivant montre comment obtenir des noms CatalogGroup en fonction de l'attribut de nom :/CatalogGroup[Name='MyCatalogGroupName']
{control parameters}/root node[predicate expressions]- Les paramètres de contrôle spécifient les contrôles d'accès ou identifient que les conditions de requête ne peuvent pas être capturées par le modèle logique. Ce paramètre identifie la quantité de données à renvoyer pour les objets interrogés. Par exemple, un paramètre de contrôle
{_wcf.ap=IBM_Admin_All}est un profil d'accès. Accédez à la mappe des profils aux requêtes du fichier de modèle de requête et indiquez qu'une vue administrative des informations de l'objet doit être retournée. Les paramètres de contrôle qui ne peuvent pas être capturés par le modèle logique peuvent inclure des requêtes de retour d'informations sur l'utilisateur actuel ou pour une langue spécifique. Par exemple, le paramètre de contrôle{self=true}indique que les informations de l'objet doivent être récupérées en fonction de l'utilisateur actuel. Ces informations ne peuvent pas être capturées par le modèle logique et sont basées sur l'ID utilisateur actuel stocké dans le contexte de commande. - Le nœud racine est généralement le nom du nom à renvoyer. Il s'agit de l'élément racine du schéma XML du nom. Dans l'exemple précédent, le nœud racine est
CatalogGroup, qui est noté par/CatalogGroup. - Les expressions de prédicat identifient les paramètres des informations que la requête doit récupérer. Chaque paramètre est utilisé dans une instruction conditionnelle qui doit être remplie pour que les noms soient retournés. L'expression de prédicat est définie avec des crochets [expression de prédicat]. Dans l'exemple précédent, la requête consiste à renvoyer les noms de CatalogGroup où le CatalogGroup a le nom 'MyCatalogGroupName'.
Création d'expressions XPath
Lorsque vous créez vos propres expressions XPath, vous pouvez créer des expressions simples et complexes. En règle générale, les expressions XPath simples sont explicitement définies et mappées aux requêtes SQL dans les fichiers de modèle de requête. Cependant, HCL Commerce fournit une autre façon, plus dynamique, d'interroger les objets. Vous pouvez utiliser la fonction search() pour créer une expression XPath plus complexe pour interroger des objets. La fonction search() peut être utilisée pour réduire le nombre de requêtes qu'a besoin de créer un développeur. La fonction search() peut être placée dans une expression de prédicat qui se trouve dans une expression XPath. Lorsque vous utilisez cette expression de recherche, vous n'avez pas à définir chaque requête dans le fichier de modèle de requête. HCL Commerce génère automatiquement la requête au moment de l'exécution en fonction du contenu de votre expression de recherche. Pour plus d'informations sur la création d'expressions XPath avec la fonction search(), voir Prise en charge de recherche paramétrique.
- Paramètres de contrôle - Tous les paramètres de contrôle sont définis dans un seul ensemble de crochets
{ }. - Paramètres de contrôle - Assurez-vous d'inclure les préfixes requis lorsque vous définissez des paramètres. Tous les profils d'accès ont le profil
_wcf.ap=. Par exemple, pour définir le profil d'accès IBM_Admin_All, utilisez{_wcf.ap=IBM_Admin_All} - Paramètres de contrôle - Pour ajouter plus de paramètres, utilisez un point-virgule. Par exemple :
{self=true; _wcf.ap=IBM_Admin_All; _wcf.dataLanguageIds='-1'} - Nœud racine - Le nœud racine doit être identifié par une barre oblique
'/', suivie du chemin relatif. - Expressions de prédicat - Toutes les expressions de prédicat sont définies entre crochets
[ ]. - Expressions de prédicat - Vous pouvez imbriquer des expressions pour définir des requêtes qui doivent renvoyer des informations en fonction de plusieurs conditions. Par exemple, l'expression
[OrganizationIdentifier[(DistinguishedName='DN01')]]définit que la requête consiste à renvoyer des noms qui ont unOrganizationIdentifieravec unDistinguishedNamede'DN01' - Expressions de prédicat - Vous utilisez la fonction 'search' avec les expressions XPath. Identifiez la fonction de recherche,
search(), dans le prédicat et incluez les paramètres de recherche entre parenthèses( ). Par exemple, l'expression du nœud racine et du prédicat/CatalogGroup[search(CatalogGroupIdentifier/ExternalIdentifier/GroupIdentifier='T')]identifie une expression de recherche. Cette expression indique que les informationsCatalogGroupdoivent être retournées lorsque l'objetGroupIdentifierest'T'. - Paramètres de contrôle et expressions de prédicat - Vous pouvez utiliser des opérateurs standard tels que
'<' '<=' '>' '>=' '=' '!=' '&' '|' - Paramètres de contrôle et expressions de prédicat - Les éléments se répétant 0 fois ou plus ont un astérisque en guise de suffixe.
- Paramètres de contrôle et expressions de prédicat - Les éléments se répétant 1 fois ou plus sont suivis par un '+'.
- Paramètres de contrôle et expressions de prédicat - Lorsque des éléments doivent être regroupés, placez-les entre parenthèses.
Exemples d'expressions XPath
Pour vous aider à créer des expressions XPath pour interroger vos modèles logiques, les exemples d'expressions suivants démontrent la syntaxe d'expression XPath simple valide :
{_wcf.ap=IBM_Admin_All}/Organization[OrganizationIdentifier[(DistinguishedName='DN01')]]
Dans l'exemple précédent, l'expression XPath définit une requête pour renvoyer des informations d'organisation basées sur le nom distinctif de l'organisation. Cette expression est composée des éléments suivants : - Paramètre de contrôle
{_wcf.ap=IBM_Admin_All}, qui est un profil d'accès qui identifie qu'une vue administrative de toutes les informations pour les objets doit être retournée. - Le nœud racine
/Organization, qui identifie l'expression XPath, recherche des informations dans le nœudOrganizationdu document XML. - Expression de prédicat
[OrganizationIdentifier[(DistinguishedName='DN01')]]. Ce prédicat indique que la requête consiste à renvoyer uniquement les informations pour les organisations avec unOrganizationIdentifierqui a unDistinguishedNamede'DN01'.
{_wcf.ap=IBM_Admin_Summary;_wcf.dataLanguageIds='-1'}/CatalogEntry[CatalogEntryIdentifier[ExternalIdentifier[(PartNumber='DU0101'
or PartNumber='DU0102')]]]
Dans l'exemple précédent, l'expression définit une requête pour récupérer des informations récapitulatives sur une entrée de catalogue en fonction de son numéro de pièce. Cette expression XPath est composée des éléments suivants :- Paramètres de contrôle
{_wcf.ap=IBM_Admin_Summary;_wcf.dataLanguageIds='-1'}. Ces paramètres indiquent que la requête doit renvoyer une vue administrative des informations récapitulatives des objets dans la langue de magasin spécifiée. - Le nœud racine
/CatalogEntryidentifie l'expression XPatch qui renvoie des nomsCatalogEntry. - Expression de prédicat
[CatalogEntryIdentifier[ExternalIdentifier[(PartNumber='DU0101' or PartNumber='DU0102')]]]. Ce prédicat indique que la requête consiste à renvoyer des entrées de catalogue oùCatalogEntryIdentifiercontient unExternalIdentifierqui est unPartNumberayant une valeur deDU0101ouDU0102.
{_wcf.ap=IBM_Admin_Summary;_wcf.dataLanguageIds='-1'}/CatalogEntry[ParentCatalogGroupIdentifier[(UniqueID='10128')]]
{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogGroup[ParentCatalogGroupIdentifier[(UniqueID='10125')]
{_wcf.ap=IBM_Admin_CatalogEntryMerchandisingAssociations;_wcf.dataLanguageIds='-1'}/CatalogEntry[CatalogEntryIdentifier[(UniqueID='10541')]]
{_wcf.ap=IBM_Admin_CatalogEntryAttachmentReference;_wcf.dataLanguageIds='-1'}/CatalogEntry[CatalogEntryIdentifier[(UniqueID='10541')]]
{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogGroup[@topCatalogGroup='true']
Exemples d'expressions de recherche avec des fonctions de recherche
Pour vous aider à créer des expressions XPath qui utilisent des fonctions de recherche pour interroger vos modèles logiques, les exemples d'expressions suivants illustrent la syntaxe d'expression XPath valide :
{_wcf.ap=IBM_Admin_CatalogGroupAllParentsDetails;_wcf.dataLanguageIds='-1'}
/CatalogGroup[search(CatalogGroupIdentifier/ExternalIdentifier/GroupIdentifier='T' or Description/Name='T')]
Dans cet exemple, l'expression XPath définit une requête qui renvoie des informations CatalogGroup en fonction des résultats de recherche. L'expression identifie que HCL Commerce doit renvoyer des informations pour les groupes de catalogue avec un GroupIdentifier ou un Description/Name avec une valeur de 'T'. La fonction de recherche indique de rechercher GroupIdentifier dans le nœud ExternalIdentifier pour le CatalogGroupIdentifier d'un CatalogGroup.{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogEntry[(@catalogEntryTypeCode='PackageBean' or @catalogEntryTypeCode='DynamicKitBean')
and search(CatalogEntryIdentifier/ExternalIdentifier/PartNumber='T' or Description/Name='T')]
Dans cet exemple, l'expression inclut une fonction de recherche avec une expression de recherche simple et une expression de recherche générique. La recherche générique indique d'interroger tout catalogEntryTypeCode contenu dans le nœud CatalogEntry qui a une valeur de 'PackageBean' ou 'DynamicKitBean'. Cette recherche générique indique d'interroger tous les nœuds du nœud racine CatalogEntry, quel que soit le chemin d'accès relatif de l'emplacement catalogEntryTypeCode. L'expression de recherche simple fonctionne comme indiqué dans l'exemple de fonction de recherche précédente. Cette expression de recherche se combine à l'expression de recherche générique pour indiquer que seules les informations qui correspondent aux deux expressions de recherche doivent être retournées.{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogEntry[(@catalogEntryTypeCode='PackageBean'
or @catalogEntryTypeCode='DynamicKitBean') and search(starts-with(CatalogEntryIdentifier/ExternalIdentifier/PartNumber, 'T')
or starts-with(Description/Name, 'T'))]
{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogEntry[(@catalogEntryTypeCode='ProductBean'
or @catalogEntryTypeCode='BundleBean' or @catalogEntryTypeCode='PackageBean' or @catalogEntryTypeCode='DynamicKitBean')
and search(starts-with(CatalogEntryIdentifier/ExternalIdentifier/PartNumber, 'T') and Description/Name='C'
and starts-with(CatalogEntryAttribute/Attributes/mfPartNumber, 'T') and CatalogEntryAttribute/Attributes/mfName='B')
and ParentCatalogGroupIdentifier[ExternalIdentifier[GroupIdentifier='Bottom']]]
{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogEntry[(@catalogEntryTypeCode='BundleBean')
and search(contains(CatalogEntryIdentifier/ExternalIdentifier/PartNumber, 'T') or contains(Description/Name, 'T'))]
{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogEntry[(@catalogEntryTypeCode='BundleBean')
and search(ends-with(CatalogEntryIdentifier/ExternalIdentifier/PartNumber, 'T') or ends-with(Description/Name, 'T'))]
{_wcf.ap=IBM_Admin_Details;_wcf.dataLanguageIds='-1'}/CatalogEntry[(@catalogEntryTypeCode='PackageBean'
or @catalogEntryTypeCode='DynamicKitBean') and search(CatalogEntryIdentifier/ExternalIdentifier/PartNumber='T'
or CatalogEntryIdentifier/ExternalIdentifier/PartNumber='B' or Description/Name='T' or Description/Name='B')]