OMG SysML v2 Standard Family — Engineering Reference

Purpose. A working reference for developers implementing a browser-based SysML v2 modeler. It collects, in one place, what the OMG normative specifications actually say (and where to find them), the structure of the KerML kernel, the user-facing textual and graphical notations, and — most importantly for our automation / data-analysis requirement — the REST API & Services resource and query model.

Provenance note. Facts below are grounded in the OMG press materials, the OMG specification pages, and the Systems-Modeling GitHub reference codebases (see Sources). Where a specific detail comes from a Beta artifact (the final-adoption PDFs were still being editorially finalized for ISO submission at the time of writing) or from a reference implementation rather than the normative text, it is flagged inline with [verify against final spec]. Treat metaclass-exact and endpoint-exact details as authoritative only after checking the version you target.


Table of Contents

  1. Standard Family Overview
  2. The KerML Kernel
  3. SysML v2 Textual Notation
  4. SysML v2 Graphical Notation
  5. SysML v2 API & Services (REST)
  6. Sources

1. Standard Family Overview

SysML v2 is not a single document. It is a family of three interlocking OMG specifications plus a stack of normative model libraries. Understanding the boundaries between them is the first thing an implementer must get right, because the abstract syntax, the user notations, and the wire/API format live in different specs and evolve on (mostly) shared but distinct version lines.

1.1 The three linked specifications

Spec Short name What it defines Role for a modeler
Kernel Modeling Language KerML The semantic and syntactic foundation — a general-purpose metamodel of types, features, classification and featuring, plus its own textual notation and a model-theoretic semantics. The metamodel "engine under the hood." Your in-memory model graph ultimately bottoms out in KerML metaclasses.
Systems Modeling Language v2 SysML v2 The systems-engineering language layered on KerML: the Definition/Usage pattern, parts/ports/connections/actions/states/requirements/etc., and the user-facing textual and graphical notations. The language your users author. Drives your editor, palette, validation, and diagram rendering.
Systems Modeling API and Services SysML v2 API (a.k.a. "API & Services") A standard service interface for storing, versioning, querying, validating and exchanging SysML v2 / KerML models — defined as a Platform-Independent Model (PIM) with REST/HTTP and OSLC bindings. The interoperability + automation backbone. Even a no-backend tool benefits from speaking this format for import/export and for talking to model repositories.

OMG describes KerML v1.0 explicitly as providing "the semantic and syntactic foundation for SysML v2," and the API & Services spec as the piece "that enables SysML v2 models to interoperate with other models and tools" (OMG press release, 2025-07-21).

The dependency direction is strict and one-way:

            ┌─────────────────────────────────────────────┐
            │   Systems Modeling API & Services v1.0       │  ← serializes / serves
            │   (REST/HTTP PSM + OSLC PSM over a PIM)       │     the metamodel below
            └─────────────────────────────────────────────┘
                              ▲ exchanges instances of
            ┌─────────────────────────────────────────────┐
            │   SysML v2.0  (systems modeling language)    │  ← extends / specializes
            │   Definition & Usage, domain libraries       │
            └─────────────────────────────────────────────┘
                              ▲ specializes metaclasses of
            ┌─────────────────────────────────────────────┐
            │   KerML v1.0  (kernel metamodel + semantics) │  ← the root metamodel
            └─────────────────────────────────────────────┘

1.2 Document & version status (2025 adoption)

[verify against final spec] Exact published version strings, document numbers (e.g. formal/25-xx-xx), and the SysML spec's two-part structure (Part 1: Language Specification; Part 2: SysML v1→v2 Transformation) should be re-confirmed on the OMG spec catalog for the precise revision you build against, since the final-adoption PDFs were still being editorially processed when this reference was compiled.

1.3 Where to obtain the normative specs and reference code

OMG (normative documents):

Systems-Modeling GitHub organization (reference implementation, libraries, examples): https://github.com/Systems-Modeling

Repository Contents URL
SysML-v2-Release Start here. Bundles the three spec PDFs (KerML 1.0, SysML 2.0 Parts 1–2, API & Services 1.0), textual/graphical-notation training decks, the normative KerML & SysML model libraries in three forms (textual *.sysml/*.kerml, .kpar "KerML Project Archive", and Ecore XMI with/without derived properties), Eclipse plugin installers, the Jupyter kernel, and example models. https://github.com/Systems-Modeling/SysML-v2-Release
SysML-v2-Pilot-Implementation Reference pilot of the textual notation, parser/type-checker/name-resolver, and visualization; built lock-step with the language spec. https://github.com/Systems-Modeling/SysML-v2-Pilot-Implementation
SysML-v2-API-Services Reference REST/HTTP server for the API & Services spec (Play framework + sbt, Java 11, PostgreSQL; Swagger UI at /docs/). 90+ tagged releases. https://github.com/Systems-Modeling/SysML-v2-API-Services
SysML-v2-API-Cookbook Jupyter-notebook "recipes" demonstrating real API workflows (projects, commits, elements, queries). https://github.com/Systems-Modeling/SysML-v2-API-Cookbook
SysML-v2-API-Java-Client / -Python-Client Generated client SDKs; their api/openapi.yaml and docs/*.md are a convenient, exact source for endpoint paths and request/response schemas. https://github.com/Systems-Modeling/SysML-v2-API-Python-Client

OSLC binding (companion, OASIS): the OSLC PSM of the API is mirrored as an OASIS OSLC Open Project specification — OSLC Systems Modeling Language Version 2.0 — at https://docs.oasis-open-projects.org/oslc-op/sysml/v2.0/psd01/sysml-spec.html.

1.4 The 4-layer language architecture

Both KerML and SysML v2 are specified along the same four conceptual layers. Treat these as the columns of the standard; nearly every chapter of the specs slots into one of them.

  1. Abstract syntax (metamodel). A MOF/Ecore metamodel of metaclasses (Element, Type, Feature, Specialization, …) with structural constraints. This is the canonical model graph — the thing your tool actually edits and serializes. It is notation-independent and serialization-independent. The XMI in SysML-v2-Release is this layer made concrete.
  2. Concrete syntax(es). Two of them: the textual notation (a keyword grammar) and the graphical notation (diagram symbols). Both are renderings of the same abstract syntax; neither adds meaning. A robust modeler keeps the abstract syntax as the source of truth and treats text + diagrams as projections (this is exactly how the pilot tools and Eclipse SysON are organized).
  3. Semantics. A model-theoretic / declarative semantics that interprets abstract-syntax models against a semantic domain of "things" and their classification. KerML grounds this formally and exposes it through a semantic (base) model library; SysML inherits it. This is what makes constraints, expressions, and analysis well-defined rather than merely conventional.
  4. Model libraries. Normative, ship-with-the-language model content expressed in the language itself: KerML libraries (Base, Links, Occurrences, Objects, Performances, Transfers, KerML semantic libraries, …) and SysML domain + quantity/unit libraries (Parts, Items, Actions, States, Requirements, Quantities, ISQ, SI, ScalarValues, …). Every real model imports from these, so an implementation must bundle and resolve them. [verify against final spec] for the exact library package names in your target revision.

2. The KerML Kernel

KerML ("Kernel Modeling Language") is a general-purpose modeling language in its own right, but in practice it exists to be the metamodel SysML v2 is built from. Its design goal is a small, formally-grounded set of primitives — types, features, and specialization — rich enough that every SysML concept is a thin specialization of a KerML concept. (DeepWiki: KerML; Medium: "KerML — The Engine Under the Hood")

2.1 Root / Core / Kernel layers

KerML's abstract syntax is itself stratified into three layers of increasing capability (a fourth "Systems" layer is where SysML attaches):

Mental model: Root = containment & naming. Core = classification & featuring. Kernel = the engineering vocabulary. SysML = the Systems layer specializing the Kernel.

2.2 Key abstract-syntax metaclasses

The metaclasses an implementer touches constantly, grouped by layer. (Relationships in KerML are themselves first-class Elements — a point that matters enormously for the API's JSON shape; see §5.4.)

Root (organization):

Metaclass What it is
Element The root of everything. Every modeling construct is an Element; carries identity (elementId), optional name/shortName, ownership.
Relationship An Element that relates other elements (has source / target ends). Because it is an Element, relationships can themselves be named, owned, and annotated.
Namespace An Element that contains members via memberships and exposes them by name; supports name resolution and imports.
Membership / OwningMembership The reified link "Namespace ∋ memberElement." OwningMembership additionally implies ownership (composite containment). Memberships carry visibility (public/private/protected).
FeatureMembership An OwningMembership specialized for features — "this Type owns this Feature."
Import (MembershipImport, NamespaceImport) Brings names from another namespace into scope (public/private, recursive ::**).

Core (classification):

Metaclass What it is
Type Anything that classifies. Abstract supertype of Classifier and Feature. Owns features, specializations, multiplicity.
Classifier A Type that classifies things (entities) directly — categories like "Vehicle."
Feature A Type that classifies things in the context of another type — a role/property/step. Has a domain (its featuring type) and codomain (its type). Features form ordered, multiplicity-bounded value sets.
Specialization General supertype relationship: instances of the special type are a subset of the general type's instances.
Subclassification Specialization between Classifiers (textual :>).
FeatureTyping Relates a Feature to the Type that types it (textual :).
Subsetting Specialization between Features: the values of one feature are a subset of another's (textual :>).
Redefinition A Subsetting that replaces/overrides an inherited feature — same value set, new name/type/multiplicity (textual :>>).
Conjugation Produces a "conjugated" type with input/output directions reversed — the basis of port conjugation (~Port).
Multiplicity (MultiplicityRange) Lower/upper bound on a feature's value count (textual [lo..hi], [n], [*]).

Kernel (vocabulary) — most relevant subset:

Metaclass What it is
Class, Structure, DataType Kinds of Classifier: identity-bearing objects, composite structures, and pure data values respectively.
Association, Connector Typed relationships between features (the basis of SysML connections/interfaces).
Behavior, Step, Function Behavior classifiers, their usages (steps), and value-returning behaviors.
Expression (+ subtypes) Computable features: LiteralExpression, OperatorExpression, InvocationExpression, FeatureReferenceExpression, BooleanExpression, Invariant, … — the basis of calc/constraint bodies.
Succession, ItemFlow Ordering (control) and transfer (object flow) between steps/features.
Package, Metaclass, MetadataFeature Model organization and user-defined metadata.

2.3 Semantics: classification, featuring, type intersection

KerML's semantics are set-theoretic / model-theoretic rather than operational. A model is interpreted against a universe of "things," and types denote sets / sequences of those things:

KerML packages a semantic base library of model elements (e.g. Base::Anything, Links, Occurrences, Performances, Transfers) that operationalize these semantics inside the language, so that conformance can be checked model-to-model. A deeper academic treatment is "An Analysis of the Semantic Foundation of KerML and SysML v2" (NEMO/UFES PDF).

2.4 How SysML v2 Definition/Usage specialize KerML Classifier/Feature

SysML v2's signature pattern — Definition vs. Usage — is a direct restatement of KerML's Classifier vs. Feature distinction, dressed up with systems-engineering keywords:

So part def Vehicle { … } is a PartDefinition (a Classifier/Structure/occurrence), and part v : Vehicle; is a PartUsage (a Feature typed by Vehicle via FeatureTyping). Nesting a usage inside a definition is an OwningMembership/FeatureMembership; :>/:>> between usages are Subsetting/Redefinition. Behaviorally, ActionDefinition specializes KerML Behavior and ActionUsage specializes Step; AttributeDefinition specializes DataType; ConnectionDefinition specializes Association/Structure; ConstraintDefinition specializes Predicate/BooleanExpression. The SysML domain libraries supply the actual base classifiers (Parts::Part, Items::Item, Actions::Action, States::StateAction, Requirements::RequirementCheck, …) that every user definition implicitly subclassifies. (SysML v2 Basics, Friedenthal)

Implementation takeaway: model the Definition/Usage duality once, generically, over a KerML Classifier/Feature core, and let each SysML keyword be metadata + a default base-library supertype. This mirrors how the pilot implementation and SysON structure their metamodels and is the cheapest path to broad coverage.


3. SysML v2 Textual Notation

The textual notation is the primary authoring + interchange syntax of SysML v2 (a genuine novelty versus v1, which had no normative textual form). It is a keyword grammar that maps deterministically onto the abstract syntax, so for a modeler it doubles as a serialization format and as a copy-paste interchange medium. Files use .sysml (and .kerml for raw KerML). Sources for this section: the Sensmetry cheat sheet, DeepWiki: SysML v2 Textual Notation, and Friedenthal's SysML v2 Basics.

3.1 Specialization operators, multiplicity, feature values

These few operators carry most of the language's semantics; learn them first.

Token Name Abstract syntax Meaning
: typing FeatureTyping "is typed by" — gives a usage its definition. bike : Vehicle.
:> subsetting (between usages) / subclassification (between definitions, also written with specializes) Subsetting / Subclassification "is a subset of" / "specializes." part rearWheel :> wheels;, part def SportsCar :> Vehicle;.
:>> redefinition (the "sergeant" / chevrons) Redefinition overrides an inherited feature — rename / retype / re-multiply / re-default. :>> wheels = 4;.
::> reference subsetting ReferenceSubsetting (a Subsetting variant) binds a reference usage to subset another feature (referential, not compositional).
[lo..hi], [n], [*] multiplicity MultiplicityRange value-count bounds. wheel : Wheel [4];, sensors : Sensor [1..*];.
= feature value FeatureValue (bind) default/bound value. attribute mass = 1500 [kg];. := denotes an initial (re-evaluable) value.
~ conjugation Conjugation reverses port direction. port p : ~PowerPort;.

Other pervasive tokens: :: namespace qualification (ISQ::mass), . feature-chain access (vehicle.engine.mass), @ metadata application, # metadata-tag shorthand, // and /* */ comments, doc /* … */ documentation. Visibility keywords public / private / protected precede memberships and imports.

Disambiguation: :> is reused for both subsetting (usage↔usage) and subclassification (definition↔definition); which one it is depends on whether the related elements are Features or Classifiers — the parser decides from context. Definitions may also use the spelled-out keyword specializes; usages may use subsets / redefines / references as keyword equivalents of :> / :>> / ::>.

3.2 Construct catalog with example syntax

Each construct follows the Definition (<kind> def Name { … }) → Usage (<kind> name : Name;) rhythm.

Packages & imports

package VehicleModel {
    private import ISQ::*;            // bring quantities into scope
    public  import VehicleParts;     // re-export to importers
}

Parts & attributes

part def Vehicle {
    attribute mass : MassValue;      // attribute usage typed by a value type
    part engine : Engine [1];        // nested part usage, multiplicity 1
}
attribute def MassValue :> ScalarValues::Real;   // attribute definition (a DataType)
part vehicle : Vehicle;                          // part usage at package level

Items (things that flow / are conserved)

item def Fuel { attribute fuelMass :> ISQ::mass; }
item fuel : Fuel;

Ports & direction

port def FuelPort {
    out fuelOut : Fuel;              // directed features: out / in / inout
    in  signal  : Boolean;
}
part fuelTank { port supply : FuelPort; }
part engine   { port intake : ~FuelPort; }   // conjugated: directions reversed

Interfaces & connections

interface def FuelInterface {
    end supplyPort : FuelPort;
    end intakePort : ~FuelPort;
}
connection def FuelLine { end : FuelPort; end : ~FuelPort; }
// usage-level wiring:
connect fuelTank.supply to engine.intake;                 // simple connect
interface fuelIfc : FuelInterface connect fuelTank.supply to engine.intake;

Actions & control nodes

action def Drive {
    in  throttle : Real;
    out speed    : SpeedValue;

    action accelerate { in cmd : Real; out v : SpeedValue; }
    action brake;

    first start;                       // start node
    then fork forkNode;                // fork: parallel outgoing
        then accelerate;
        then monitor;
    join joinNode;                     // join: synchronize
    merge mergeNode;                   // merge: combine alternatives
    decide d;                          // decision: guarded outgoing
        if speed > 120 then brake;
    succession a then b;               // explicit control succession
    flow accelerate.v to monitor.in;   // object flow (item flow)
}

States & transitions

state def VehicleStates {
    entry; do; exit;                   // state behaviors
    state off;
    state running {
        entry action warmup;
    }
    transition off_to_running
        first off
        accept startSignal             // trigger
        if batteryOk                   // guard
        do action ignite               // effect
        then running;
}

Calculations & constraints

calc def Average { in values : Real[*]; return : Real = sum(values) / size(values); }

constraint def MassBudget {
    in actual : MassValue;
    in limit  : MassValue;
    actual <= limit                    // boolean expression body
}
part vehicle2 : Vehicle {
    assert constraint massOk : MassBudget { in actual = mass; in limit = 1800 [kg]; }
}

Requirements (with subject / require / assume) & satisfy

requirement def MassRequirement {
    subject vehicle : Vehicle;                 // the thing under requirement
    attribute massLimit : MassValue = 1800 [kg];
    assume constraint { vehicle.fuel > 0 }     // assumption
    require constraint { vehicle.mass <= massLimit }  // required constraint
}
part myVehicle : Vehicle;
satisfy MassRequirement by myVehicle;          // satisfy assertion

Allocation (cross-cutting mapping, e.g. function→component)

allocation def FnToComp { end : Drive; end : Vehicle; }
allocate driveBehavior to vehicle;             // allocation usage

Views, viewpoints, rendering

viewpoint stakeholderConcern { require constraint { /* concern */ } }
view def SafetyView {
    satisfy stakeholderConcern;
    expose VehicleModel::**;                    // model elements to show
    render asTreeDiagram;                        // rendering directive
}

Enumerations

enum def Gear { enum park; enum drive; enum reverse; }
attribute selectedGear : Gear = Gear::park;

Occurrences (space-time individuals; the base of parts/actions/states)

occurrence def Lifecycle;
occurrence vehicleLife : Lifecycle;

Metadata

metadata def Status { attribute approved : Boolean; }
@Status { approved = true; }                    // applied to the following element
part criticalPart : Vehicle;

3.3 One cohesive multi-construct snippet

A single, self-consistent model exercising packages, definitions, usages, ports, connections, actions, states, constraints, requirements, allocation, and the operators:

package VehicleExample {
    private import ScalarValues::*;
    private import ISQ::*;

    // ---- Value & item types -------------------------------------------------
    attribute def MassValue  :> ISQ::mass;
    attribute def SpeedValue :> ISQ::speed;
    item def Fuel { attribute fuelMass :> ISQ::mass; }

    // ---- Ports --------------------------------------------------------------
    port def FuelPort { out fuelOut : Fuel; in  level : Real; }

    // ---- Structural definitions --------------------------------------------
    part def Engine {
        attribute power : Real;
        port intake : ~FuelPort;            // conjugated port
        action ignite;
    }

    part def Vehicle {
        attribute mass : MassValue;
        attribute maxSpeed : SpeedValue;

        part engine : Engine [1];
        part fuelTank {
            attribute capacity : MassValue = 60 [kg];
            port supply : FuelPort;
        }

        // composite wiring between owned parts
        connect fuelTank.supply to engine.intake;
    }

    // Specialization (subclassification) + redefinition of an inherited feature
    part def SportsCar :> Vehicle {
        attribute :>> maxSpeed = 300 [km/h];    // redefine inherited attribute
        part engine :>> engine : TurboEngine;   // redefine inherited part
    }
    part def TurboEngine :> Engine { attribute :>> power = 400; }

    // ---- Behavior: action with control nodes & object flow ------------------
    action def DriveCycle {
        in  throttle : Real;
        out speed    : SpeedValue;

        first start;
        then fork f;
            then action accelerate { out v : SpeedValue; }
            then action monitorFuel;
        join j;
        decide d;
            if accelerate.v > maxSpeedLimit then action limitSpeed;
        flow accelerate.v to speed;
    }
    attribute maxSpeedLimit : SpeedValue = 250 [km/h];

    // ---- Behavior: state machine -------------------------------------------
    state def VehicleStates {
        state parked;
        state driving { entry action engageDrive; }
        transition parked
            accept ignitionOn if fuelAvailable do action crank then driving;
    }

    // ---- Analysis: constraint + requirement + satisfy + allocate -----------
    constraint def MassBudget { in m : MassValue; in lim : MassValue; m <= lim }

    requirement def MassReq {
        subject v : Vehicle;
        attribute limit : MassValue = 1800 [kg];
        assume  constraint { v.fuelTank.capacity > 0 [kg] }
        require constraint massOk : MassBudget { in m = v.mass; in lim = limit; }
    }

    part myCar : SportsCar;
    satisfy MassReq by myCar;

    allocation def BehaviorToStructure { end : DriveCycle; end : Vehicle; }
    allocate DriveCycle to myCar;

    // ---- View --------------------------------------------------------------
    view def OverviewView { expose VehicleExample::**; render asTreeDiagram; }
}

4. SysML v2 Graphical Notation

The graphical notation is a second concrete syntax over the same abstract syntax — i.e., a diagram is a view onto model elements, never an independent artifact. This is a deliberate break from SysML v1, where diagrams were the primary unit. In v2 you expose model elements into a view and the renderer lays them out; the model owns the truth. Sources: SysON overview, Friedenthal/SST overview & demo, Rajamani, "Key Differences v1 vs v2".

[verify against final spec] The SysML v2 spec (Part 1) defines the normative diagram/notation set and exact symbol shapes; the names below combine the spec's view kinds with the SysON reference tool's view catalog, which is the most concrete public implementation. Confirm symbol minutiae against Part 1's "Graphical Notation" chapter for your target revision.

4.1 View / diagram kinds

View kind Shows Loose SysML v1 analogue
General view / Definition view High-level structure: definitions and usages, their specializations and features, free mix of element kinds. The default "canvas." Block Definition Diagram (BDD)
Interconnection view / Internal view The encapsulated internals of a usage: nested parts, their ports, and the connections/interfaces/flows wiring them. Internal Block Diagram (IBD)
Action Flow view (Activity) Behavioral flow: actions as steps, control nodes (fork/join/merge/decision), successions, and object/item flows. Activity Diagram
State Transition view States and transitions with trigger/guard/effect; entry/do/exit behaviors. State Machine Diagram
Sequence view Lifelines and time-ordered message/event occurrences between them. Sequence Diagram
Requirement view Requirement definitions/usages, subject/require/assume, and satisfy/derive/refine relations. Requirement Diagram
Case / Analysis view Analysis, verification, and use cases (analysis case, verification case, use case) with their subjects, objectives, and results. Parametric / Use-Case Diagrams (combined)
Allocation (matrix) Cross-cutting allocate mappings, typically rendered as a matrix/table (e.g. function→component). Allocation tables / matrices
Package / tree (Browser) view The ownership/membership hierarchy from an exposed root — a containment tree. Package Diagram / Model Browser
Grid view Exposed elements + relationships arranged in a rectangular grid/table. (Tabular views / generic tables)
Geometry view 2D/3D spatial visualization of exposed spatial items. (No direct v1 equivalent)

4.2 Node symbols

4.3 Edge symbols

Relationship Symbol
Composition (owned/composite part) line with a filled diamond at the owner end
Reference (referential feature) line with an open (hollow) diamond at the owner end
Connection / connector plain solid line between port/feature ends (the connect/connection usage)
Succession (control flow) solid arrow between steps/states
Item / object flow arrow (often with a flow/transfer adornment) carrying items between features
Specialization / subclassification solid line with a hollow (open) triangle arrowhead pointing to the general type
Subsetting / redefinition specialization-style line variants (redefinition typically annotated :>> / "redefines")
Dependency dashed line with open arrowhead
Satisfy / allocate / derive / refine dashed dependency-style lines with the relevant «keyword» label («satisfy», «allocate», …)

4.4 Mapping to SysML v1 / MagicDraw diagram equivalents

For teams migrating from MagicDraw / Cameo / SysML v1, the mental mapping is:

A key behavioral difference for tool builders: in v1 the diagram could own elements; in v2 every diagram is a non-owning projection (expose + render), so a v2 tool must keep diagram layout/styling in a separate concern from the model (the spec does not yet standardize a graphical-interchange format — confirm current status before designing persistence).


5. SysML v2 API & Services (REST)

This is the most important section for our automation / data-analysis requirement. The API & Services spec turns "a model" into a versioned, queryable repository resource with a standard HTTP contract. Even a no-backend, browser-only modeler benefits from (a) speaking this JSON element shape natively so import/export and repository sync are trivial, and (b) supporting the standard Query language so analysis logic is portable to any conformant server. Sources: API & Services repo, Part 3 PSM PDF, the generated Python client docs and Java client openapi.yaml, and the API Cookbook.

5.1 Architecture: PIM, PSMs, OpenAPI, OSLC

The spec is layered like the language itself:

The reference REST server (SysML-v2-API-Services) is a Play/sbt/Java app over PostgreSQL exposing Swagger UI at /docs/; the SST also hosts public demo servers that conformant clients can hit directly.

5.2 Resource model

The REST resources, in two tiers:

Repository / version-control tier (mutable repository structure):

Resource Identity Notes
Project UUID Top-level container; owns branches, tags, commits. Has a default branch.
Branch UUID A named, movable pointer to a commit (the head of a line of development).
Tag UUID A named, immutable pointer to a specific commit (a labeled snapshot).
Commit UUID An immutable set of element changes relative to one or more previous commits — the unit of versioned content.

Model-content tier (read at a commit, written via a commit):

Resource Identity Notes
Element UUID (@id / identifier) Any KerML/SysML metamodel instance (a PartUsage, AttributeDefinition, etc.). The atomic unit of model content.
Relationship UUID A kind of Element (KerML relationships are Elements) — queried via the relationships endpoint with directional filtering.
Query UUID A storable search definition (scope + select + constraint tree) that can be saved and re-executed.
Diff — Difference between two commits. [verify against final spec] — a comparison capability exists conceptually; some published client openapi.yaml snapshots do not expose a dedicated Diff path, while other server builds do. Confirm against the exact server/version you integrate.

This is intentionally Git-like: projects contain commits; commits are immutable; branches and tags are the only mutable things and they merely point at commits.

5.3 Version semantics: Project → Commit → Element

The core navigation pattern your client revolves around:

Project ──has──▶ Branch (movable head) ──points to──▶ Commit (immutable)
   │                                                     │
   ├──has──▶ Tag (fixed label) ──points to──────────────┘
   │                                                     │
   └──has──▶ Commit ──contains/changes──▶ Element (read AT a commit)

5.4 The exchanged Element JSON shape

The wire format is JSON / JSON-LD keyed on the metamodel. The defining characteristics:

Illustrative shape (abbreviated):

{
  "@id": "5e1f…-uuid",
  "@type": "PartUsage",
  "identifier": "5e1f…-uuid",
  "declaredName": "engine",
  "ownedRelationship": [
    { "@id": "a3c2…-uuid" }        // e.g. a FeatureTyping → Engine, resolved separately
  ],
  "owningRelationship": { "@id": "77b0…-uuid" }   // the OwningMembership that contains this
}

Implementation takeaway: build your in-memory store as a flat map of @id → element plus an index over ownedRelationship/owningRelationship, and reconstruct ownership and typing by dereferencing relationship elements. This matches the API exactly and makes round-tripping to the standard JSON trivial.

5.5 The Query language for analysis

This is the part to invest in for data-analysis features. A Query is a structured (not SQL/text) object that the server evaluates against the elements of a project at a commit, returning matching elements (optionally projected). Its shape (from the reference OpenAPI):

{
  "@type": "Query",
  "scope":  [ /* DataIdentity refs — which commit/elements to evaluate against */ ],
  "select": [ "name", "@type", "..." ],          // projection: which fields to return
  "where":  { /* a Constraint tree (see below) */ }
}

[verify against final spec] Operator enumerations (=,>,<; and,or) and field names (property, value, inverse, scope, select) above are taken from the reference client OpenAPI; richer operators or property-path support may appear in the final normative PSM. Validate against the OpenAPI document served by your target endpoint (it is self-describing).

5.6 Pagination

Collection endpoints (/projects, /commits, /elements, query results, …) are paged. The REST PSM uses cursor/offset-style paging with page-size parameters and conveys next/prev page links via HTTP Link headers (RFC 5988 style) alongside the JSON array body. Clients must follow links / pass the page parameters to retrieve large element sets rather than assuming a single response. [verify against final spec] for exact parameter names (page[after] / page[size] vs. pageAfter/pageSize) and header conventions in your server build.

5.7 Endpoint summary

Canonical paths from the reference OpenAPI (all JSON; {…} are UUIDs):

Projects

Branches

Tags

Commits (write path for model content)

Elements (read at a commit)

Queries

Other (reference server): POST /transform, POST /validate exist on some builds; the self-served OpenAPI/Swagger at /docs/ is the authoritative endpoint list for a given deployment.

5.8 Implications for a browser-only modeler


Sources

OMG / normative

Reference implementation & libraries (Systems-Modeling org)

Explanatory / community (used to corroborate, not normative)


Compiled 2026-06-30. Items marked [verify against final spec] depend on the precise (final-adoption vs. Beta) revision you target; re-check them against the OMG-published PDFs and the self-describing OpenAPI document of your chosen API endpoint.