cXML vs XML : quelle différence ?
XML est un format de balisage générique publié par le W3C. cXML est un langage métier construit sur XML pour l'e-procurement B2B. Tout cXML est du XML, presque aucun XML n'est du cXML. Explication avec exemples.
Dans cet article
Un développeur Magento qui reçoit son premier cahier des charges PunchOut tombe presque toujours sur la même question : « on nous demande du cXML, c’est juste du XML ? ». La réponse courte est oui et non. Cet article clarifie la différence entre les deux, avec un tableau comparatif et un exemple concret.
L’essentiel en 3 puces
- XML est un format : une syntaxe générique pour structurer des données avec des balises, publiée par le W3C. Il ne dit rien sur le contenu.
- cXML est un langage métier construit sur XML : il fixe les messages, les éléments et les règles d’échange de l’e-procurement B2B (PunchOut, commandes, confirmations, etc.).
- Tout document cXML est du XML, mais presque aucun document XML n’est du cXML. XML est l’alphabet ; cXML est une langue précise écrite avec cet alphabet.
XML : un format, pas un protocole
XML (eXtensible Markup Language) est une recommandation du W3C publiée en 1998. Elle définit une syntaxe : des balises ouvrantes et fermantes, des attributs, un encodage déclaré, une racine unique, des règles de bonne formation. Rien de plus.
XML ne définit aucun vocabulaire. Une balise <panier> n’a pas plus de sens qu’une balise <cart> ou <x> : c’est l’application qui décide. C’est précisément ce qui fait la force d’XML - on peut décrire n’importe quoi - et sa limite : deux systèmes qui « parlent XML » ne se comprennent pas pour autant, tant qu’ils n’ont pas convenu des mêmes éléments.
Pour rendre un vocabulaire XML contraignant, on lui associe une grammaire :
- une DTD (Document Type Definition), le mécanisme historique intégré à la spécification XML ;
- ou un schéma XSD, plus récent et plus expressif (types de données, espaces de noms, cardinalités fines).
Dire « notre API accepte du XML » revient donc à dire « notre API accepte des fichiers texte » : c’est vrai, mais cela ne décrit pas le contrat.
cXML : un langage métier construit sur XML
cXML (commerce XML) est l’un de ces vocabulaires. Créé par Ariba en 1999, il est aujourd’hui maintenu par SAP Ariba comme standard ouvert, sous licence libre : les DTD et la documentation sont publiées sur cxml.org. La version stable de référence est la DTD 1.2.070.
Là où XML fournit la syntaxe, cXML fournit tout le reste :
- Un catalogue de messages avec une intention précise chacun. Les trois que vous rencontrerez dans un projet PunchOut :
PunchOutSetupRequest(le système d’achats ouvre une session vers votre catalogue),PunchOutOrderMessage(votre boutique renvoie le panier) etOrderRequest(l’acheteur transmet la commande ferme). S’y ajoutentConfirmationRequest,ShipNoticeRequest,InvoiceDetailRequest, etc. - Une enveloppe standardisée. Chaque message commence par un élément
<Header>avec trois blocs d’identité :From(l’émetteur logique),To(le destinataire) etSender(le système technique qui envoie, porteur duSharedSecretd’authentification). Chaque identité s’exprime par un<Credential domain="...">avec un<Identity>. - Un identifiant unique de message, l’attribut
payloadIDde la racine<cXML>, accompagné d’untimestamp. C’est lui qui permet de dédoublonner et de tracer un échange. - Des règles d’échange : HTTPS en POST, réponses
<Status code="200">, gestion des erreurs par codes numériques. - Une DTD publique contre laquelle chaque message peut être validé.
Ce que cXML apporte, c’est donc un contrat : un PunchOutOrderMessage produit par une boutique Magento est lisible par SAP Ariba, Coupa, Jaggaer, Oracle, etc. sans négociation préalable sur les noms d’éléments. Pour le détail des messages, voir Qu’est-ce que le cXML ?.
Tableau comparatif
| Critère | XML | cXML |
|---|---|---|
| Nature | Format de balisage générique (syntaxe) | Langage métier B2B construit sur XML (vocabulaire + règles d’échange) |
| Éditeur / standard | Recommandation W3C (1998) | Standard ouvert créé par Ariba, maintenu par SAP Ariba, licence libre |
| Version de référence | XML 1.0 (5e édition) | DTD cXML 1.2.070 |
| Validation | Bonne formation ; DTD ou XSD au choix de l’application | DTD publique sur cxml.org (pas de XSD officiel) |
| Vocabulaire | Aucun : défini par chaque application | Fixé : cXML, Header, From, To, Sender, Request, Message, ItemIn, etc. |
| Transport | Non spécifié | HTTPS POST, réponse Status |
| Usages | Configuration, documents, flux RSS, SOAP, UBL, Factur-X, etc. | PunchOut, commandes, confirmations, avis d’expédition, factures entre acheteur et fournisseur |
| Exemples de systèmes | Tout logiciel manipulant des données structurées | SAP Ariba, Coupa, Jaggaer, Oracle Procurement, Ivalua, etc. |
Exemple : le même panier en XML libre et en cXML
Imaginons un panier d’une ligne : 10 cartouches d’encre à 24,90 € HT. En XML libre, chaque équipe inventerait sa structure. Voici une version tout à fait valide au sens XML :
<?xml version="1.0" encoding="UTF-8"?>
<panier devise="EUR">
<ligne>
<sku>INK-4821</sku>
<libelle>Cartouche d'encre noire</libelle>
<quantite>10</quantite>
<prixUnitaireHT>24.90</prixUnitaireHT>
</ligne>
</panier>
Ce document est bien formé, lisible, et parfaitement inutile pour SAP Ariba ou Coupa : aucun de ces systèmes ne connaît <panier> ni <prixUnitaireHT>.
Le même panier en cXML, sous forme de PunchOutOrderMessage (extrait simplifié) :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.070/cXML.dtd">
<cXML payloadID="2026-09-22T10:15:00.123@shop.example.com" timestamp="2026-09-22T10:15:00+02:00">
<Header>
<From><Credential domain="NetworkID"><Identity>AN01000000001</Identity></Credential></From>
<To><Credential domain="NetworkID"><Identity>AN01000000002</Identity></Credential></To>
<Sender><Credential domain="NetworkID"><Identity>AN01000000001</Identity></Credential>
<UserAgent>Magento 2 PunchOut</UserAgent></Sender>
</Header>
<Message>
<PunchOutOrderMessage>
<BuyerCookie>a1b2c3</BuyerCookie>
<PunchOutOrderMessageHeader operationAllowed="edit">
<Total><Money currency="EUR">249.00</Money></Total>
</PunchOutOrderMessageHeader>
<ItemIn quantity="10">
<ItemID><SupplierPartID>INK-4821</SupplierPartID></ItemID>
<ItemDetail>
<UnitPrice><Money currency="EUR">24.90</Money></UnitPrice>
<Description xml:lang="fr">Cartouche d'encre noire</Description>
<UnitOfMeasure>EA</UnitOfMeasure>
<Classification domain="UNSPSC">44103105</Classification>
</ItemDetail>
</ItemIn>
</PunchOutOrderMessage>
</Message>
</cXML>
Plus verbeux, mais chaque élément a une place et un sens définis par la DTD : le payloadID identifie le message, le BuyerCookie relie le panier à la session ouverte par le PunchOutSetupRequest, l’ItemIn porte la quantité, le prix, l’unité et la classification UNSPSC. N’importe quel système d’achats compatible cXML sait quoi en faire.
Pourquoi cette confusion revient dans les projets PunchOut
La confusion n’est pas une question de compétence, elle vient du vocabulaire des cahiers des charges. Trois situations reviennent souvent :
- Le cahier des charges dit « XML » alors que l’acheteur attend du cXML. L’équipe Magento livre un export XML maison, et le premier test avec le système d’achats échoue à la validation. Demander dès le kick-off « quelle DTD, quelle version ? » évite la mauvaise surprise.
- L’équipe pense qu’un parseur XML suffit. Il suffit pour lire le message, pas pour le comprendre. Il faut connaître la sémantique des éléments cXML (que signifie
operationAllowed="edit", quand utiliserSupplierPartAuxiliaryID, etc.) et les attentes propres à chaque acheteur en matière de mapping. - La validation XSD ne s’applique pas. Beaucoup d’outils modernes ne valident que contre un schéma XSD. cXML étant décrit en DTD, il faut un validateur qui charge la DTD 1.2.070 - sinon on valide seulement la bonne formation, ce qui laisse passer la plupart des erreurs structurelles.
Et l’OCI, l’UBL, l’EDIFACT ?
- OCI (SAP Open Catalog Interface) n’utilise pas du tout XML : le panier revient sous forme de champs de formulaire HTML (
NEW_ITEM-*) - voir cXML vs OCI. - UBL (Universal Business Language, OASIS) est un autre vocabulaire XML, décrit en XSD, utilisé pour la facturation électronique et non pour le PunchOut.
- EDIFACT est un format EDI antérieur à XML, avec sa propre syntaxe à segments, encore répandu dans la logistique et la grande distribution.
Valider un message cXML
Avant de tester avec l’acheteur, validez vos messages contre la DTD officielle : le validateur cXML en ligne charge la DTD 1.2.070 et signale les éléments manquants, mal ordonnés ou inconnus. En cas de réponse Status non 200 côté acheteur, la liste des codes d’erreur cXML donne la signification de chaque code et les causes les plus fréquentes.
En résumé
XML est un format : il dit comment écrire des balises, pas ce qu’elles veulent dire. cXML est un langage métier écrit en XML : il fixe les messages, les en-têtes, les identifiants et la DTD qui rendent un panier ou une commande compréhensibles par n’importe quel système d’achats B2B. Dans un projet PunchOut, « XML » n’est jamais une réponse suffisante : la bonne question est « quelle version de la DTD cXML, et quelles règles propres à cet acheteur ? ».
Gatebold E-Procurement Gateway gère le PunchOut cXML et OCI et la commande OrderRequest pour Magento 2 - voir la page produit.



