cXML
Commerce eXtensible Markup Language. Le protocole XML open du procurement B2B publié par Ariba en 1999 et maintenu aujourd'hui par SAP Business Network.
Qu'est-ce que cXML ?
cXML est un protocole XML conçu pour l'achat indirect entre une plateforme acheteuse (Ariba, Coupa, Jaggaer, OpenText) et ses fournisseurs. Là où EDIFACT ou X12 s'expriment en segments tagués séparés par des caractères réservés, cXML emprunte la grammaire XML : un document est un arbre d'éléments imbriqués, validé contre un DTD officiel publié par Ariba/SAP. C'est aujourd'hui le format de référence pour le punchout (catalogues hébergés chez le fournisseur, accessibles depuis l'ERP de l'acheteur) et pour les flux purement transactionnels qui le suivent (commande, confirmation, expédition, facture, paiement).
cXML n'a pas remplacé EDIFACT ou X12 sur les commandes classiques entre industriels — il les complète sur le segment du procurement indirect où la facilité d'implémentation XML, l'écosystème Ariba/SAP et l'orientation web ont fait la différence.
Anatomie d'un document cXML
Tout document cXML porte la racine <cXML> et imbrique deux blocs :
un <Header> qui identifie les trois parties prenantes (<From>,
<To>, <Sender>) avec leurs <Credential>,
puis selon le contexte un <Request>, un <Response>
ou un <Message>. Le From est l'émetteur métier (l'acheteur
pour une commande), le To est le destinataire métier (le fournisseur), et le
Sender identifie l'application qui transmet techniquement le message — souvent
une passerelle B2B distincte du From. Voici un OrderRequest didactique
minimal :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.069/cXML.dtd">
<cXML payloadID="260513.acme.0001@buyer.example"
timestamp="2026-05-13T14:30:00+02:00"
version="1.2.069">
<Header>
<From>
<Credential domain="DUNS"><Identity>123456789</Identity></Credential>
</From>
<To>
<Credential domain="DUNS"><Identity>987654321</Identity></Credential>
</To>
<Sender>
<Credential domain="DUNS"><Identity>123456789</Identity></Credential>
<UserAgent>ediverse-example/1.0</UserAgent>
</Sender>
</Header>
<Request>
<OrderRequest>
<OrderRequestHeader orderID="PO78901"
orderDate="2026-05-13T14:30:00+02:00"
type="new">
<Total><Money currency="EUR">19.98</Money></Total>
</OrderRequestHeader>
<ItemOut quantity="2" lineNumber="1">
<ItemID><SupplierPartID>SKU-123</SupplierPartID></ItemID>
<ItemDetail>
<UnitPrice><Money currency="EUR">9.99</Money></UnitPrice>
<Description xml:lang="fr">Stylo bille noir</Description>
<UnitOfMeasure>EA</UnitOfMeasure>
</ItemDetail>
</ItemOut>
</OrderRequest>
</Request>
</cXML>
Trois attributs sont obligatoires sur la racine : payloadID (identifiant
unique mondialement), timestamp (ISO 8601 avec fuseau) et version
(la version de DTD utilisée). Le DTD système (SYSTEM "…/cXML.dtd") pointe la
version par laquelle valider le document.
Versions
cXML a suivi une lignée stable depuis sa publication. La version courante
embarquée dans le DTD officiel est 1.2.069 (entité cxml.version
de cXML.dtd). À noter une légère discordance documentaire : la première
feuille de route éditoriale d'ediverse mentionnait 1.2.061, qui était la
valeur immédiatement précédente.
| Version | Année | Notes |
|---|---|---|
1.0 | 1999 | Première publication par Ariba. |
1.1 | 2000 | Élargissement du punchout et des protocoles d'authentification. |
1.2.x | 2001 → | Lignée stable, incréments quasi-mensuels. |
1.2.061 | 2024 | Version pointée historiquement par certains intégrateurs. |
1.2.069 | 2026 | Version courante de xml.cxml.org/current/cXML.dtd. |
Cas d'usage
- Punchout — l'acheteur lance un
<PunchOutSetupRequest>depuis son ERP ; le fournisseur répond avec uneStartPageURL où l'utilisateur navigue dans le catalogue hébergé ; au checkout, le fournisseur poste un<PunchOutOrderMessage>qui rapatrie le panier dans l'ERP, prêt à être transformé en commande formelle. - Catalogues — publication de catalogues via le DTD
Catalog.dtd, en complément ou en remplacement du punchout pour les fournisseurs au catalogue stable. - Transactionnel commercial —
<OrderRequest>pour la commande,<ConfirmationRequest>pour l'accusé,<ShipNoticeRequest>pour l'avis d'expédition,<InvoiceDetailRequest>pour la facture (DTD dédiéInvoiceDetail.dtd),<PaymentRemittanceRequest>pour l'avis de paiement (DTDPaymentRemittance.dtd). - Devis —
<QuoteRequest>et<QuoteMessage>pour les demandes de prix (DTDQuote.dtd).
Outils
- Validateur cXML —
validation contre le DTD
1.2.069et inspection de l'arbre, 100% client-side (en cours de publication).
Pour aller plus loin
- xml.cxml.org/current/
— DTD de référence :
cXML.dtd,Fulfill.dtd,InvoiceDetail.dtd,Catalog.dtd,PaymentRemittance.dtd,Quote.dtd. - cXML Reference Guide (PDF) — guide utilisateur publié par Ariba sur le portail historique.
- cXML License Agreement — conditions de redistribution du DTD lui-même.