XPath est l'acronyme pour "XML Path Language". Le langage XPath utilise une syntaxe semblable à celle d'un chemin d'accès d'un fichier sur votre ordinateur servant à naviguer les nœuds d'un document XML.


ONIXEDIT inclut 2 engins XPATH différents:



Par exemple, vous pouvez définir des expressions XPATH quand vous définissez de nouvelles colonnes à votre liste principale (XPATH 1.0) ou quand vous exportez vers un fichier plat (XPATH 3.1).


ONIXEDIT utilise le langage XPATH pour sélectionner des valeurs d'un produit ONIX qui correspondent à des critères très spécifiques. Par exemple, si vous avez de multiples montants définis pour un titre et que vous souhaitez afficher dans votre liste principale le prix USD d'un fournisseur spécifique, vous devez utiliser XPATH pour y parvenir. Autrement, ONIXEDIT vous présentera le premier montant trouvé dans le composite SupplyDetail si vous ne faites que choisir la balise PriceAmount par défaut. Dans l'extrait ONIX suivant, ce sera le montant CAD qui apparaitra:


    <SupplyDetail>

      <SupplierName>ONIXEDIT</SupplierName>

      <ProductAvailability>21</ProductAvailability>

      <Price>

        <PriceTypeCode>01</PriceTypeCode>

        <PriceAmount>6.99</PriceAmount>

        <CurrencyCode>CAD</CurrencyCode>

      </Price>

      <Price>

        <PriceTypeCode>01</PriceTypeCode>

        <PriceAmount>4.99</PriceAmount>

        <CurrencyCode>USD</CurrencyCode>

      </Price>

    </SupplyDetail>


Mais avec une expression XPATH, vous pouvez identifier exactement le prix USD que vous souhaitez afficher. Par exemple, l'expression XPATH 1.0 indiquant de sélectionner le fournisseur "ONIXEDIT" et à partir de là, d'obtenir le montant USD de ce fournisseur sera:


//Product/SupplyDetail[SupplierName='ONIXEDIT']/Price[CurrencyCode='USD']/PriceAmount


Voici d'autres exemples XPATH 1.0:


    • //Product/MainSubject[MainSubjectSchemeIdentifier='93']/SubjectHeadingText : Affichera le sujet THEMA.
    • //Product/Subject[SubjectSchemeIdentifier='20']/SubjectHeadingText : Affichera les mots-clés.
    • //Product/SupplyDetail/Price[PriceAmount>=100 and PriceTypeCode = '02' and CurrencyCode ='USD']/PriceAmount : Affichera le premier montant USD supérieur à 100 du premier composite Price de type "Prix de vente public recommandé hors taxes".


Vous pouvez également ajouter des fonctions spéciales à vos expressions XPATH. Par exemple:


    • string-length(//Product/Contributor[CountryCode="CA"])>0 : Affichera "True" pour chaque titre ayant au moins un contributeur Canadien.
    • concat(//Product/Title[TitleType='01']/TitlePrefix, ' ', //Product/Title[TitleType='01']/TitleWithoutPrefix) : Affichera le titre distinctif résultant de la concaténation des champs TitlePrefix et TitleWithoutPrefix.
    • starts-with(//Product/MainSubject[MainSubjectSchemeIdentifier='10']/SubjectCode, 'FIC') : Affichera "True" pour les titres ayant un sujet principal BISAC débutant par "FIC".


XPATH 3.1:


Depuis la version 3.4.8, ONIXEDIT inclus Saxon HE 9.8. Nous l'avons ajouté principalement pour accroitre les capacités d'export vers les fichiers plats à la demande de nos clients. Ainsi, notre outil générique d'export est maintenant conforme à la norme XPATH 3.1. Cela signifie que vous pouvez maintenant définir des colonnes XPATH très complexes dans vos scripts d'export. Par exemple, vous pouvez maintenant définir des expressions IF THEN ELSE comme suit :


if(//Product/ProductForm='DG')

then 'SANS MANUTENTION'

else 'MANUTENTION REQUISE'


Ces expressions IF THEN ELSE imbriquées sont également supportées. Par exemple, supposons que vous souhaitez exporter dans une colonne d'un fichier plat, la valeur "SCIENCE" lorsque le sujet principal BISAC commence par "SCI" et "RELIGION" lorsque ce sujet débute par "REL". Et pour tous les autres cas, vous souhaitez exporter la valeur "AUTRE:" suivie du texte du sujet. Voici l'expression XPATH 3.1 que vous devrez alors définir:


if(contains(//Product/MainSubject[MainSubjectSchemeIdentifier="10"]/SubjectCode, "SCI"))

then "SCIENCE"

else if (contains(//Product/MainSubject[MainSubjectSchemeIdentifier="10"]/SubjectCode, "REL"))

then "RELIGION"

else concat("AUTRE: ", //Product/MainSubject[MainSubjectSchemeIdentifier="10"]/SubjectHeadingText)


Considérez maintenant la section "Contributor" suivante:


    <Contributor>

      <SequenceNumber>1</SequenceNumber>

      <ContributorRole>A01</ContributorRole>

      <NamesBeforeKey>Raoul</NamesBeforeKey>

      <KeyNames>Guénette</KeyNames>

    </Contributor>

    <Contributor>

      <SequenceNumber>2</SequenceNumber>

      <ContributorRole>A01</ContributorRole>

      <NamesBeforeKey>Maxime</NamesBeforeKey>

      <KeyNames>Ménard</KeyNames>

    </Contributor>

    <Contributor>

      <SequenceNumber>3</SequenceNumber>

      <ContributorRole>A01</ContributorRole>

      <NamesBeforeKey>Danny</NamesBeforeKey>

      <KeyNames>Côté</KeyNames>

    </Contributor>


Supposons maintenant que nous souhaitions exporter tous les noms des contributeurs dans une seule colonne d'un fichier plat et que nous désirons obtenir pour chacun, son nom de famille suivi d'une virgule et du prénom. Pour atteindre cet objectif, nous utiliserons une instruction FOR qui appliquera une fonction "concat" à chaque instance du composite "//Product/Contributor". L'expression XPATH correspondante ressemblera à ceci:


for $x in //Product/Contributor

return concat($x/KeyNames, ', ', $x/NamesBeforeKey)


Il est à noter que pour que cela fonctionne à l'intérieur d'une colonne XPATH d'un script d'export, vous devez activer l'option "Traiter toutes les valeurs" qui apparait au bas du dialogue de propriétés des colonnes XPATH:



Pour l'extrait ONIX ci-haut, le résultat sera donc:



Références XPATH (en anglais uniquement):