
A shared data warehouse does not guarantee a shared definition of revenue, customer, or active account. Two applications can read the same tables and answer the same business question differently because they apply different filters, join paths, or aggregation rules. Apache Ossie addresses the exchange of those definitions, making semantic models available in a common format that participating tools can interpret.
This article explains what Ossie represents, how its model works, and where interoperability still depends on the consuming platform. It also walks through a small model and shows how an AI assistant can generate a graph schema from connected tables, which can then be exported as reusable Ossie metadata.
Apache Ossie (incubating) is an open specification for exchanging semantic metadata across analytics, business intelligence, and AI systems. Previously known as Open Semantic Interchange, it provides a common representation for definitions that would otherwise be stored in tool-specific formats.
A semantic model connects physical data to the concepts people use when asking questions. A table might contain customer_id, status, and amount; the model explains which dataset represents orders, how orders relate to customers, and which calculation represents a business metric. Ossie's contribution is making that description exchangeable.
The distinction between a model and the software using it is central:
The project repository contains the specification, schemas, examples, validation tools, and converters. Adopting these artifacts does not itself deploy a database or a query service. A BI platform still needs an integration that can read the model, and a query engine still needs access to the underlying data.
That separation makes the adoption question concrete: which definitions can a producer export, and which can the intended consumer preserve and use?
Ossie is the project's new name. Its predecessor, OSI, stands for Open Semantic Interchange. The project's July 2026 naming announcement explains that the community chose Ossie to avoid confusion with other projects using the OSI acronym as it entered the Apache Incubator.
The older name remains relevant when reading examples, repository history, and integrations developed before the rename. An OSI model and an Ossie model belong to the same project's lineage. Compatibility, however, depends on the specification version and document structure, not simply on which name appears in a filename.
Semantic definitions are useful beyond the application where they were first written. A finance dashboard, an analyst's notebook, and an AI assistant might all need the same definition of completed-order revenue. If each integration requires translating that definition into another format, the organization has several implementations to maintain whenever the business rule changes.
Ossie's incubation proposal identifies this fragmentation as the problem behind the project. Its aim is a shared representation that lets independently developed tools exchange semantic metadata.
Consider a company changing its revenue reporting to exclude test accounts. The business decision is straightforward. The engineering work becomes harder if that rule lives separately in a dashboard formula, a semantic-layer configuration, and instructions supplied to an AI application. Each copy needs updating, and each update needs checking against the others.
A common exchange format gives these systems a way to share the approved definition. It also gives reviewers an artifact they can inspect outside a particular dashboard editor. The team still needs to decide who owns the rule and how changes reach consumers, but it has a common representation around which to build that process.
The reason for standardization is therefore practical: maintaining meaning across application boundaries should require less repeated translation work.
Ossie targets semantic interoperability: moving descriptions of data and business logic between systems. The problem appears at several levels, even when every application has reliable access to the same records.
Metric definitions. Imagine one dashboard including all orders while another counts only completed orders. Both might display a number labeled revenue. Exchanging a metric's expression and description makes that difference inspectable. The organization must still decide which definition belongs in which report.
Relationships and row grain. Suppose an order worth $100 has three line items. Joining the order total to every line item and summing it produces $300. A useful model needs to expose the relevant relationships and keys so the consuming system can plan the calculation correctly. Recording a relationship does not, by itself, prove that every downstream aggregation handles this case.
Business vocabulary. An AI assistant asked about customers needs more context than a collection of column names. It needs to distinguish purchasers from billing accounts, and completed purchases from abandoned checkouts. Shared descriptions give an integration explicit material to use when resolving those terms.
These are different problems from data replication or storage compatibility. Copying another set of rows would not resolve the disagreement about what revenue means. Ossie supplies a format for expressing and exchanging the relevant definitions; its value depends on the definitions being correct and the receiving system using them faithfully.
The workflow has three parts: represent a semantic model, exchange it, and interpret it in a consuming application. The core specification defines the main components:
Field and metric expressions identify their dialect. A model can carry multiple dialect variants, while custom extensions provide room for vendor-specific metadata. These mechanisms let a producer describe supported semantics without assuming that every platform has identical capabilities.
On the exchange side, the converter architecture uses Ossie as a shared intermediate format. A producer converts its native model into Ossie, and a consumer reads Ossie directly or converts it into another native representation. This reduces the need to build a separate translator for every pair of formats.
For example, an integration might export the finance team's approved model, validate the resulting file, and import it into an analytics application. That application then resolves its source references, applies supported expressions, and executes queries through its own runtime. Data connections and execution remain part of that deployment.

Validation belongs at the boundary between these stages. Ossie's validator checks document structure and additional conditions such as duplicate names and relationship references. Passing those checks gives an integration a stronger starting point. A business-level test must still establish that the imported model answers the intended question correctly.
In practice, interoperability has two tests: whether the receiving tool can read the artifact, and whether it preserves the meaning that matters to the workload.
Less repeated modeling. When two applications can exchange the definitions they both support, a team can reuse an existing model instead of manually reconstructing it. For a small adoption project, the useful measure is how many definitions survive the transfer and how much manual repair remains.
More visible differences. An exported artifact gives reviewers something concrete to compare. A change from all orders to completed orders can be reviewed alongside its expression and description. Teams can store these files in version control and associate model changes with expected changes in query results.
Reusable context for AI applications. An integration can provide an assistant with approved names, descriptions, and relationships rather than asking it to infer every business concept from physical schema names. This creates a clearer basis for evaluating generated queries. It does not establish that an assistant will always choose the right metric or respect every instruction.
More options when adopting another tool. A portable representation can preserve part of the modeling investment when adding a consumer or evaluating a replacement. The relevant question is how much of the existing model transfers accurately, including its less convenient cases. A clean demonstration with one sum is only a starting point.
These benefits accumulate when an organization treats the exchanged model as a maintained artifact. Assigning ownership, reviewing changes, and testing consumer behavior turn file exchange into a dependable workflow.
Conversion can lose information. A common format cannot guarantee that every feature of every source model has an equivalent in every target. For example, the official dbt converter documentation lists conversion losses involving some metric types and cumulative semantics. Its warnings are part of the integration result and need review before accepting the exported file.
Expression portability needs testing. Recognizing a dialect name is different from executing its expressions with equivalent behavior. For a real workload, test date boundaries, null values, distinct counts, and decimal calculations. A monthly revenue comparison can disagree because of time-zone treatment even when both tools import the model successfully.
A shared file does not settle business disagreement. Two teams might intentionally use different customer definitions. Giving both definitions a common syntax will not merge them into a single concept. Name them clearly, document their scope, and decide which applications should consume each one. Likewise, publishing metadata does not configure the receiving platform's data permissions.
The specification is evolving. As of September 22, 2026, the development specification identifies itself as a draft and documents a breaking change from a semantic_model wrapper to a single model at the document root. An example for one version cannot safely be treated as input for every implementation.
The community roadmap also includes work on richer metric semantics, catalog integration, and a standardized semantic query interface. Treat each capability according to its implemented and documented state. A roadmap describes intended work; an adoption decision needs evidence from the specific schema, converter, and consumer being evaluated.
Production readiness needs to be assessed for a particular integration. Apache Ossie is an incubating project as of September 22, 2026. The project's Apache disclaimer says incubation is not necessarily a reflection of code completeness or stability. It concerns the project's progress within Apache, so it is neither a production certification nor a blanket reason to reject an implementation.
For an operational deployment, establish a narrower set of evidence:
Consider a weekly internal dashboard using a simple aggregate. Its acceptance tests may be relatively small. A customer-facing reporting API with cumulative metrics, historical attributes, and strict access rules needs a broader test set. Both could use Ossie, but their operational requirements differ substantially.
A sensible first deployment is a bounded exchange path with a named owner and a tested set of semantics. Expand it when the actual consumers demonstrate the required behavior. The presence of an exporter or a project logo alone is insufficient evidence of complete compatibility.
Start with one business question and one consumer. For example: what is the total value of completed orders, using the currency already normalized in the source table? This keeps the first model small enough to inspect and gives you a result to test.
Choose the document version first. The example below uses the 0.1.1 structure defined by the versioned JSON Schema. It is a hand-authored teaching example, and the source table must exist before a consuming platform can query it. Save it as orders.ossie.yaml:
version: "0.1.1"
semantic_model:
- name: order_reporting
description: Completed-order reporting in a normalized currency.
datasets:
- name: orders
source: sales.public.orders
primary_key: [order_id]
fields:
- name: order_id
expression:
dialects:
- dialect: ANSI_SQL
expression: order_id
- name: status
expression:
dialects:
- dialect: ANSI_SQL
expression: status
- name: amount
expression:
dialects:
- dialect: ANSI_SQL
expression: amount
metrics:
- name: completed_order_revenue
description: Sum of completed order amounts, before refunds.
expression:
dialects:
- dialect: ANSI_SQL
expression: >-
SUM(CASE WHEN orders.status = 'completed'
THEN orders.amount ELSE 0 END)
The metric's name, expression, and description should agree. Here, refunds are outside the definition. If finance requires revenue after refunds, change the model deliberately and add the corresponding data and tests. A table name cannot establish that policy for you.
Validate against the matching schema. From a directory containing the YAML file, the following commands obtain the versioned schema and validate the document's structure in a local Python environment:
python -m venv .venv
. .venv/bin/activate
python -m pip install pyyaml jsonschema
curl -fsSL \
https://raw.githubusercontent.com/apache/ossie/release/0.1.1/core-spec/osi-schema.json \
-o osi-schema.json
python - <<'PY'
import json
from pathlib import Path
import yaml
from jsonschema import Draft202012Validator
schema = json.loads(Path("osi-schema.json").read_text())
model = yaml.safe_load(Path("orders.ossie.yaml").read_text())
Draft202012Validator(schema).validate(model)
print("Document structure is valid")
PYThis command checks schema conformance. It does not connect to the database, evaluate the SQL expression, or confirm the definition with finance. Keep the schema revision alongside the model so subsequent checks use the same contract.
Exercise the consumer. Import the document through an integration supporting this version. Configure its connection to the source and check a small fixture: completed orders worth 100 and 50, plus a cancelled order worth 80, should produce 150. Compare that result with a directly executed reference calculation. Then test empty inputs, null amounts, and any joins you add.
Once the basic calculation agrees, extend the model one feature at a time. A customer relationship or reporting date adds more useful coverage than a large first export whose discrepancies are difficult to isolate.
Consider a retailer with order and customer tables in its warehouse, a BI application for reporting, and an AI assistant for analyst questions. A practical architecture separates model ownership, metadata exchange, and query execution.
The data team maintains the source mappings and approved metric definitions. A producer exports an Ossie document, validation checks it, and the approved artifact is distributed to the two consuming integrations. Each consumer maps supported definitions into its own runtime and connects to the warehouse with the appropriate access controls.
For a question about completed-order revenue by customer region, the integration needs the order metric, the customer attribute, and the relationship joining them. Acceptance tests should confirm that the relationship does not multiply order totals. Model review should also establish whether region means the customer's current region or its value at the time of purchase.

PuppyGraph can help create the model starting from connected tables. Its built-in AI assistant acts as a modeling agent: it inspects catalog metadata, samples rows, profiles columns, and tests candidate joins to propose a graph schema. Once you review and apply that schema, PuppyGraph's Ossie exporter turns the supported table and relationship mappings into an Apache Ossie document. This connects two stages of automation: generating the graph schema and generating the interchange file from it.
This walkthrough adapts the official AI assistant workflow to the Modern Graph: people know other people and create software. The assistant builds the graph schema from the source tables, which then supplies the mappings for Ossie export.
Please help me build a graph schema from my connected catalog.
Use whatever profiling tools you need to design it.
For the Modern dataset, model person, software, knows, and created all as nodes.
Make all connecting edges point outward from knows or created:
knows -[knows_source]-> person, knows -[knows_target]-> person,
created -[created_by]-> person, and created -[created_software]-> software.
When you have a draft you're confident in, apply it. Keep these labels lowercase.
person, software, knows, and created) and four edge labels (knows_source, knows_target, created_by, and created_software). All four edge types must point outward from knows or created: knows -[:knows_source]-> person, knows -[:knows_target]-> person, created -[:created_by]-> person, and created -[:created_software]-> software. Approve correct proposals or reject them with revision instructions. For the sample data, expect four person nodes, two software nodes, two knows nodes, and four created nodes. Test the path after applying the schema. The expected rows are josh, lop, 0.4 and josh, ripple, 1.0:MATCH (:person {name: 'marko'})<-[:knows_source]-(:knows)
-[:knows_target]->(friend:person)
<-[:created_by]-(creation:created)
-[:created_software]->(s:software)
RETURN friend.name AS person, s.name AS software,
creation.weight AS weight
ORDER BY software

person, software, knows, and created) and their four connecting relationships (knows_source, knows_target, created_by, and created_software) are represented as intended. Validate the document against the schema for its exported version, then test the relationships and available fields in the receiving application before relying on the imported model.The assistant handles the initial graph modeling, and the exporter reuses the resulting schema so you do not have to write the structural Ossie model by hand. Business metrics still need explicit definitions, and graph-specific details may not transfer. The exported document contains metadata without connection credentials. PuppyGraph can continue querying the underlying tables through openCypher and Gremlin, while compatible consumers reuse the exported portion of the model for their own integrations.
Apache Ossie gives data teams a common format for exchanging semantic definitions across tools. Its practical value comes from reusing models, making differences visible, and giving analytics and AI applications a shared description of business data.
Adoption starts with a concrete producer, consumer, and specification version. Validate the artifact, inspect conversion losses, and compare query results. AI-assisted graph modeling followed by Ossie export can reduce manual work from source tables to a reusable model, while business ownership and consumer testing establish whether it is fit for the intended use.
Try the forever-free PuppyGraph Developer Edition and book a demo with the team to see how openCypher and Gremlin queries connect entities across warehouse and lakehouse tables, with no graph-specific ETL, and how AI-assisted graph modeling and Ossie export make those mappings reusable.
Get started with PuppyGraph!
Developer Edition
Enterprise Edition