What is UBL 2.1?
UBL 2.1 (Universal Business Language) is the OASIS XML syntax used by PEPPOL BIS, XRechnung-UBL and OIOUBL. It is one of the two EN 16931 syntaxes (the other being CII). A plain UBL 2.1 invoice carries no national CustomizationID.
Open a UBL 2.1 file in the viewer → See every business term, a visual preview and the raw XML.
- Country
- International
- Syntax
- XML (OASIS UBL 2.1)
- Version
- 2.1
Key facts
- Root namespace urn:oasis:names:specification:ubl:schema:xsd:Invoice-2.
- Carries PEPPOL, XRechnung-UBL and OIOUBL - distinguished by CustomizationID.
- One of two EN 16931 syntaxes; CII D16B is the other.
UBL is a syntax, not a profile
UBL 2.1 (Universal Business Language) is an OASIS standard: a library of XML document schemas for business documents, of which Invoice and CreditNote are two. It defines how an invoice is structured in XML - not what business rules it must follow. That is the key distinction from PEPPOL BIS, XRechnung or OIOUBL, which are profiles (CIUS) that add rules on top of the UBL syntax.
A "plain" UBL 2.1 invoice carries no national CustomizationID. The same UBL document becomes a PEPPOL, XRechnung-UBL or OIOUBL invoice once it declares the corresponding CustomizationID and satisfies that profile’s rules.
How profiles are distinguished
Because PEPPOL BIS, XRechnung-UBL and OIOUBL all share the UBL 2.1 root element, a reader tells them apart by the CustomizationID at the top of the document.
| Profile | CustomizationID ends in | Region |
|---|---|---|
| PEPPOL BIS Billing 3.0 | …poacc:billing:3.0 | Pan-European |
| XRechnung 3.0 (UBL) | …xrechnung_3.0 | Germany |
| OIOUBL 3.0 | …oioubl:3.0 | Denmark |
| Plain UBL 2.1 | (none) | International |
UBL cbc / cac structure
UBL groups data with two namespace prefixes: cbc (Common Basic Components) for simple leaf values like cbc:ID or cbc:IssueDate, and cac (Common Aggregate Components) for nested structures like cac:AccountingSupplierParty or cac:InvoiceLine. This cbc/cac split is the visible signature of a UBL document and the main structural difference a developer notices versus CII’s ram/rsm naming.
UBL or CII?
EN 16931 permits two syntaxes: UBL and UN/CEFACT CII D16B. They are semantically equivalent - any EN 16931 invoice can be expressed in either. The choice is usually made for you by the target: PEPPOL requires UBL; Factur-X / ZUGFeRD use CII; XRechnung accepts both. Facturus uses the EN 16931 model as a hub, so it can transcode UBL to CII and back without losing meaning.
Frequently asked questions
- What is the difference between UBL and CII?
- Both are EN 16931 XML syntaxes. UBL is the OASIS schema (used by PEPPOL, XRechnung-UBL, OIOUBL); CII is the UN/CEFACT schema (used by Factur-X, XRechnung-CII). They are semantically equivalent.
- Is UBL the same as PEPPOL?
- No. UBL is the underlying XML syntax; PEPPOL BIS is a profile built on UBL 2.1. Every PEPPOL invoice is UBL, but not every UBL invoice is PEPPOL.
- Does a plain UBL invoice have a CustomizationID?
- A generic UBL 2.1 invoice carries no national CustomizationID. Declaring one (and following its rules) is what turns it into a PEPPOL, XRechnung or OIOUBL invoice.
- Can UBL be converted to CII?
- Yes. Both express the same EN 16931 model, so transcoding between UBL and CII preserves the business data - only the XML structure changes.