Cloud Information Model
The Cloud Information Model (CIM) is an open, application-agnostic schema for describing the entities that move through a modern enterprise: parties, products, orders, payments, and the relationships that tie them together. Rather than inventing a bespoke data model for every integration, CIM offers a shared vocabulary so that a CRM, an ERP, a commerce platform, and an analytics warehouse can agree on what a “Sales Order” or a “Product Relationship Type” actually means. This article walks through the entity groups that make up the model, then drills into one representative entity — ProductRelationshipType — to show how CIM expresses relationships, roles, and keys in practice.
Key Takeaways
- CIM organizes enterprise data into entity groups (Party, Product, Sales Order, Payment, and others) that can be adopted incrementally rather than all at once.
- Each entity is defined with a Term URI, a description, scalar properties, and link properties — a structure that maps cleanly to JSON-LD, RDF, and property-graph stores.
- Relationship entities such as
ProductRelationshipTypeencode roles (parent/child) so that bundles, options, and coverings can be modeled without hard-coding business logic. - The model is deliberately application-agnostic: it describes what data means, not how a particular vendor stores it.
- Adopting CIM is a mapping exercise, not a rip-and-replace — you align existing systems to shared terms and reconcile the gaps.
Why a Shared Model Matters
Enterprise integration has a familiar failure mode: every system speaks its own dialect. Salesforce calls it an Account, SAP calls it a Business Partner, and a homegrown billing service calls it a Customer. When you build point-to-point mappings between each pair, the number of translations grows with the square of the systems involved, and every new system multiplies the maintenance burden.
A canonical model breaks that quadratic problem. You map each system once to the shared model, and the shared model becomes the hub. This is the same architectural instinct behind standards like OAGIS (Open Applications Group Integration Specification), the OMG’s Common Warehouse Metamodel, and schema.org’s vocabulary for commerce. CIM sits in that tradition but is scoped for cloud-era interoperability and published as open terms with dereferenceable URIs.
The practical payoff is that a data architect can answer questions like “which systems hold the authoritative record for a Party?” or “how do we represent a product bundle consistently across the catalog and the order?” using a single reference point.
The Entity Groups at a Glance
CIM is not a single monolithic schema; it is a set of loosely coupled groups. The groups named in the model include:
- Account — the commercial relationship context for a party.
- Contact Point — phone numbers, email addresses, and similar reachability channels.
- Lead — a prospective party not yet qualified.
- Party and Party Role — the general concept of an actor and the roles it plays (customer, supplier, employee).
- Payment and Payment Method — how money moves and the instruments used.
- Product Attribute, Product Catalog, and Product — the sellable and describable goods and services.
- Sales Order and its large family of sub-entities — the transactional heart of the model.
- Shipment — fulfillment and logistics.
The Sales Order group is by far the most granular, and it is worth understanding why. An order is where business rules concentrate: pricing, taxes, adjustments, delivery groupings, and per-line notes all attach to it.
CIM decomposes the order into many small entities — Sales Order Product, Sales Order Price Adjustment, Sales Order Tax, Sales Order Delivery Group, Sales Order Payment Summary, Sales Order Change Log, and more — rather than one wide table. That decomposition is a deliberate design choice: it lets each concern evolve independently and lets systems subscribe only to the slices they care about.
Anatomy of a CIM Entity
Every entity in CIM follows the same shape, which makes the model predictable to consume programmatically. Consider ProductRelationshipType, the entity that describes why two products are related.
- Term URI —
http://cloudinformationmodel.org/model/ProductRelationshipType. This is the globally unique identifier for the concept. Because it is a URI, it can be dereferenced and used directly in RDF/JSON-LD graphs. - Description — “Reasons why products are related such as bundle, option or covering.” This tells you the entity is a type or classification, not the relationship instance itself.
- Scalar Properties — the primitive fields that carry data.
- Link Properties — references to other entities.
ProductRelationshipTypehas none, which is itself informative: it is a leaf entity, a controlled vocabulary rather than a hub.
The scalar properties are:
| Property | Term URI | Range | Mandatory | Description |
|---|---|---|---|---|
id | .../model/id | guid | yes | Primary key |
parentProductRole | .../model/parentProductRole | string | yes | The first role in the relationship, e.g. “Consists of” |
childProductRole | .../model/childProductRole | string | yes | The second role in the relationship, e.g. “Component of” |
The id being a GUID is a meaningful convention: it means identifiers are globally unique without coordination between systems, which is exactly what you want when records are created in different clouds and later merged.
Modeling Relationships with Roles
The most instructive part of ProductRelationshipType is the pair of role properties. A product relationship is directional, and CIM captures that direction with two named roles rather than a single opaque “type” string.
Think about a bundle. A “Starter Kit” consists of a “Router” and a “Cable.” In CIM terms:
- The parent product plays the role described by
parentProductRole— for example, “Consists of.” - The child product plays the role described by
childProductRole— for example, “Component of.”
By storing both roles as strings on the type, you get a reusable definition. Any number of actual product-to-product links can reference the same ProductRelationshipType row, so the vocabulary stays small and consistent while the relationship instances stay numerous. This is a classic normalization pattern: separate the type of relationship from its instances.
The description explicitly names three flavors — bundle, option, and covering — which hints at the range of commercial semantics the model intends to cover:
- Bundle — products sold together as a unit (parent “consists of” children).
- Option — a choice or add-on associated with a base product.
- Covering — a product that wraps or protects another, common in insurance and warranty contexts.
How to Decide Your Role Vocabulary
Because parentProductRole and childProductRole are free-form strings, the model does not dictate your exact wording. That flexibility is a feature and a hazard. A few practical rules:
- Pick a controlled vocabulary and freeze it. Agree on a small set of role phrases (“Consists of” / “Component of”, “Optional add-on to” / “Has option”) and document them. Free text invites drift.
- Keep roles symmetric and readable in both directions. A good test: can you read the relationship aloud from either end and have it make sense?
- Don’t overload roles with business logic. If a role needs conditional behavior, that logic belongs in the consuming application, not in the string.
- Version your vocabulary. When you add a role, treat it as a schema change with a migration path, not an ad-hoc insert.
Adopting CIM in Practice
Adopting a canonical model is a mapping discipline, not a migration. A workable sequence:
- Inventory your systems of record. For each entity group, decide which system is authoritative. Party might live in the CRM; Product in the PIM; Sales Order in the ERP.
- Map each source to CIM terms. Build a table of source field → CIM property. Where a source has no equivalent, note the gap; where CIM has no equivalent, note the extension.
- Reconcile identifiers. CIM’s GUID convention means you will typically maintain a crosswalk between native keys and CIM
idvalues. - Choose a serialization. CIM’s URI-based terms map naturally to JSON-LD and RDF; they also translate cleanly to relational tables or a property graph. The model does not force a storage technology.
- Govern the vocabulary. The role strings, enumerations, and extensions you add are the parts most likely to drift, so put them under change control.
A useful mental model is to treat CIM as the interchange schema and your operational stores as the system of record. You are not asking every application to abandon its native model; you are asking them to publish and consume a shared one at the boundaries.
Caveats and Trade-offs
No canonical model is free of cost, and CIM is no exception.
- Abstraction has a price. A model general enough to span industries will not perfectly fit any one of them. Expect to add extensions.
- The Sales Order group is heavy. Its fine-grained decomposition is powerful but means more joins and more entities to map. Teams with simple order flows may adopt only a subset.
- Free-form role strings need governance. As noted, the flexibility in
parentProductRoleandchildProductRoleis only as good as the discipline around it. - Open models evolve. Because CIM is community-oriented, terms can be added or refined over time. Pin to a version and review changes deliberately.
The trade-off is essentially the classic one between fidelity to a specific system and portability across systems. CIM optimizes for portability, which is the right call when interoperability is the goal.
Frequently Asked Questions
What is the Cloud Information Model?
The Cloud Information Model is an open, application-agnostic data model that defines shared entities and terms for enterprise data such as parties, products, orders, and payments. It provides a common vocabulary so that different cloud and on-premises systems can exchange data without bespoke point-to-point mappings.
What is ProductRelationshipType used for?
ProductRelationshipType defines the reasons two products are related — for example a bundle, an option, or a covering. It stores a parent role and a child role so that directional product-to-product links can reference a reusable, shared definition rather than repeating the semantics on every link.
Why does CIM use GUIDs for primary keys?
Using a GUID for the id property means identifiers are globally unique without central coordination. That matters in multi-cloud and multi-vendor environments where records are created in different systems and later merged, because collisions are effectively avoided.
Is CIM a database schema or a data exchange format?
It is best understood as a conceptual and interchange model rather than a physical database schema. Its URI-based terms map naturally to JSON-LD, RDF, relational tables, or property graphs, so you can implement it in whatever storage technology your architecture already uses.
How does CIM relate to other standards like OAGIS or schema.org?
CIM shares the goal of those efforts — a shared vocabulary for interoperability — but is scoped for cloud-era enterprise integration and published as open, dereferenceable terms. In practice you may map CIM to other standards at the edges where partners require them.
Do I have to adopt the whole model at once?
No. CIM is organized into loosely coupled entity groups, so you can adopt the groups you need — say, Party and Product — and expand later. Most teams start with the entities that cause the most integration pain and grow from there.
Further reading
- Sales order — Wikipedia
- Resource Description Framework (RDF) — Wikipedia
- JSON-LD — Wikipedia
- schema.org — shared vocabulary for structured data on the web
Frequently asked questions
What is the Cloud Information Model?
The Cloud Information Model is an open, application-agnostic data model that defines shared entities and terms for enterprise data such as parties, products, orders, and payments. It provides a common vocabulary so that different cloud and on-premises systems can exchange data without bespoke point-to-point mappings.
What is `ProductRelationshipType` used for?
ProductRelationshipType defines the reasons two products are related — for example a bundle, an option, or a covering. It stores a parent role and a child role so that directional product-to-product links can reference a reusable, shared definition rather than repeating the semantics on every link.
Why does CIM use GUIDs for primary keys?
Using a GUID for the id property means identifiers are globally unique without central coordination. That matters in multi-cloud and multi-vendor environments where records are created in different systems and later merged, because collisions are effectively avoided.
Is CIM a database schema or a data exchange format?
It is best understood as a conceptual and interchange model rather than a physical database schema. Its URI-based terms map naturally to JSON-LD, RDF, relational tables, or property graphs, so you can implement it in whatever storage technology your architecture already uses.
How does CIM relate to other standards like OAGIS or schema.org?
CIM shares the goal of those efforts — a shared vocabulary for interoperability — but is scoped for cloud-era enterprise integration and published as open, dereferenceable terms. In practice you may map CIM to other standards at the edges where partners require them.
Do I have to adopt the whole model at once?
No. CIM is organized into loosely coupled entity groups, so you can adopt the groups you need — say, Party and Product — and expand later. Most teams start with the entities that cause the most integration pain and grow from there. Further reading - [Sales order](https://en.wikipedia.org/wiki/Sales_order) — Wikipedia - [Resource Description Framework (RDF)](https://en.wikipedia.org/wiki/Resource_Description_Framework) — Wikipedia - [JSON-LD](https://en.wikipedia.org/wiki/JSON-LD) — Wikipedia - [schema.org](https://schema.org/) — shared vocabulary for structured data on the web
More on Open source enterprise data interoperability standard / cloud data modeling
Browse our latest guides and reviews.
Read more →