Skip to content

SACM 2.3 metamodel inventory

Generated by tools/sacm/generate_metamodel_inventory.py from the normative OMG machine-readable model SACM-2.3-ptc-22-03-13.xml (OMG document ptc/22-03-13, fetched by scripts/fetch-sacm23-references.sh). Do not edit by hand; regenerate after reference updates.

XMI serialization conventions (pinned)

The normative machine-readable model is UML 2.5 XMI of the metamodel and declares no instance-document namespace URI, and the specification PDF (formal/23-05-08) prints none either. Clause 2 (Conformance) requires import/export of "XMI documents that conform with the SACM XML Schema produced by applying XMI rules to the normative MOF metamodel". The library therefore pins the following conventions in libs/sacm/include/sacm/metadata/namespaces.h (single source of truth; correcting them later is a one-file change plus golden-file refresh):

  • Strict export namespace: http://www.omg.org/spec/SACM/20220301 (OMG version URI for SACM 2.3), prefix sacm.
  • XMI namespace: http://www.omg.org/spec/XMI/20131001, prefix xmi; xmi:version="2.0".
  • XSI namespace: http://www.w3.org/2001/XMLSchema-instance, prefix xsi (declared only when xsi:type is emitted).
  • Import accepts (tolerant mode): any namespace URI containing /spec/SACM/, the http://omg.sacm/ reference-implementation family, plus http://example.org/sacm/2.3 (repo fixtures); other URIs load with a warning in tolerant mode and an error in strict mode.
  • Top interchange objects (Clause 2): AssuranceCasePackage (Assurance Case Model compliance point, mandatory), ArgumentPackage (Argumentation), ArtifactPackage (Artifact).

The pinned export namespace is a choice, not a normative value

This is worth stating plainly because it limits what any SACM 2.3 conformance claim can mean. Under XMI 2.5.1 an instance document's namespace derives from the org.omg.xmi.nsURI tag on the MOF package; SACM's normative model carries no such tag, and no URI= attribute appears on any package in ptc/22-03-13. Nothing in the specification determines the namespace, so every SACM 2.3 producer necessarily invents one, and no two need agree.

The EMF reference implementation (github.com/wrwei/SACM, Apache-2.0) demonstrates the divergence: it declares one namespace per metamodel package rather than one per document.

Package nsURI nsPrefix
base http://omg.sacm/2.2/base base_
assurancecase http://omg.sacm/2.2/assurancecase assuranceCase_
argumentation http://omg.sacm/2.2/argumentation argumentation_
artifact http://omg.sacm/2.2/artifact artifact_
terminology http://omg.sacm/2.2/terminology terminology_

The library therefore accepts that family on import (tolerant mode) and normalizes to the single pinned URI on strict export. Treat the pin as this project's canonical form, not as a conformance requirement, and do not report a file as non-conformant solely because its namespace differs.

Known machine-readable model defects (normalized here)

Where ptc/22-03-13 disagrees with the normative specification text (formal/23-05-08), this inventory follows the text; the library's XMI reader additionally accepts the machine-readable spellings on import:

  • Clause 12.14: class is ArtifactAssetRelationship with superclass ArtifactAsset; the machine-readable model names it ArtifactAssertedRelationship and omits the generalization.
  • Clause 12.9: Event's attribute is date: date[0..1]; the machine-readable model spells it occurece.
  • Clauses 12.7/12.8/12.9 type date, startTime, endTime, and Artifact date as date; the machine-readable model references an undefined MagicDraw datatype id for them.
  • Clause 11.3 marks ArgumentationElement abstract; the machine-readable model does not.

Divergences resolved toward the MODEL, and why (issue #337)

The rule above -- "where they disagree, follow the text" -- was applied unevenly: the divergences below were resolved toward ptc/22-03-13 and the resolution went unrecorded, which made the stated rule read as absolute when it is not. Each is listed with the direction taken, so a reader can tell a decision from an oversight.

  • Clause 8.5 MultiLangString.value: the text declares LangString[1..*] (composition); the model gives no bounds, so it reads [1..1]. Model followed in the bounds, text followed in practice -- the library stores a vector and validates language uniqueness (clause 8.5's own constraint), which is meaningless at [1..1].
  • Clause 8.7 UtilityElement.content: text [0..1], model [1..1]. Model followed. The library stores a MultiLangString that may be empty, which satisfies both readings.
  • Clause 8.6 ModelElement.description: text Description[0..1], model [0..*]. Model followed in representation -- the library stores a vector so a file carrying several descriptions round-trips rather than losing all but one -- and the TEXT is enforced in validation, which warns above one (SACM-MULT-001, citing 8.6).
  • Clause 8.4 ExpressionLangString.expression: the text marks it "(composition)" while wording it as a reference; the model makes it a plain reference. Model followed -- a composition would mean the ExpressionElement lives inside the LangString rather than in the TerminologyPackage the same clause points at.
  • Clauses 11.2/11.4 ArgumentGroup/ArgumentPackage member role: the text spells it argumentationElement, the model argumentElement. Model followed for output; import accepts both, because the EMF dialect uses the prose spelling.
  • Clause 10.5 TerminologyPackageInterface superclass: the text says "TerminologyElement", the model and the clause's own diagram say TerminologyPackage. Model followed. An interface that is not a package could not contain the citations the same clause requires it to contain.
  • Clause 12.10 Resource.location: the text declares location: Base::MultiLangString (composition) -- the resource's path or URL; the model omits it entirely. TEXT followed (the only one of these seven that goes that way): it is the only payload Resource carries, so a reader without it keeps resources that say nothing about where anything is, and a text-conformant <location> fell into preserved content, which strict save then refused. Represented as sacm::model::Resource::location().

Two further defects in the specification TEXT, recorded because they affect what can be enforced rather than what is represented:

  • Clause 10.5 (TerminologyPackageInterface) prints the Constraints section of 10.6 (TerminologyPackageBinding) -- participant-package typing -- so the interface's own content constraint, which its siblings 11.6 and 12.5 both state, is missing from the published text.
  • Clauses 9.4, 10.5/10.6 and 11.5 give three different participant-typing rules for the same concept: oclIsTypeOf(Package) or oclIsTypeOf(PackageInterface), oclIsKindOf(Package), and oclIsTypeOf(PackageInterface) respectively -- while 11.5's own Associations block declares the general package type. The library's resolution is recorded in sacm-decisions-and-questions.md.

Package summary

Package Classes Abstract Enumerations
Base 12 5 0
AssuranceCase 3 0 0
Terminology 10 3 0
Argumentation 16 4 1
Artifact 13 1 0

Package Base

ArtifactElement (abstract)

Generalization chain: ModelElement -> SACMElement -> Element

Description

Generalization chain: UtilityElement -> SACMElement -> Element

Element (abstract)

ExpressionLangString

Generalization chain: LangString -> Element

Reference end Target type Multiplicity Ordered
expression ExpressionElement 1 no

ImplementationConstraint

Generalization chain: UtilityElement -> SACMElement -> Element

LangString

Generalization chain: Element

Attribute Type Multiplicity
lang String 0..1
content String 0..1

ModelElement (abstract)

Generalization chain: SACMElement -> Element

Containment role Child type Multiplicity Ordered
description Description 0..* no
implementationConstraint ImplementationConstraint 0..* no
note Note 0..* no
taggedValue TaggedValue 0..* no
name LangString 1 no

MultiLangString

Generalization chain: Element

Containment role Child type Multiplicity Ordered
value LangString 1 no

Note

Generalization chain: UtilityElement -> SACMElement -> Element

SACMElement (abstract)

Generalization chain: Element

Attribute Type Multiplicity
gid String 0..1
isCitation Boolean 0..1
isAbstract Boolean 0..1
Reference end Target type Multiplicity Ordered
abstractForm SACMElement 0..1 no
citedElement SACMElement 0..1 no

TaggedValue

Generalization chain: UtilityElement -> SACMElement -> Element

Containment role Child type Multiplicity Ordered
key MultiLangString 1 no

UtilityElement (abstract)

Generalization chain: SACMElement -> Element

Containment role Child type Multiplicity Ordered
content MultiLangString 1 no

Package AssuranceCase

AssuranceCasePackage

Generalization chain: ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
interface AssuranceCasePackageInterface 0..* no
Containment role Child type Multiplicity Ordered
assuranceCasePackage AssuranceCasePackage 0..* no
argumentPackage ArgumentPackage 0..* no
artifactPackage ArtifactPackage 0..* no
terminologyPackage TerminologyPackage 0..* no

AssuranceCasePackageBinding

Generalization chain: AssuranceCasePackage -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
participantPackage AssuranceCasePackage 2..* no

AssuranceCasePackageInterface

Generalization chain: AssuranceCasePackage -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
implements AssuranceCasePackage 1 no

Package Terminology

Category

Generalization chain: TerminologyAsset -> TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
category Category 0..* no

Expression

Generalization chain: ExpressionElement -> TerminologyAsset -> TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
element ExpressionElement 0..* no

ExpressionElement (abstract)

Generalization chain: TerminologyAsset -> TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Attribute Type Multiplicity
value String 1
Reference end Target type Multiplicity Ordered
category Category 0..* no

Term

Generalization chain: ExpressionElement -> TerminologyAsset -> TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Attribute Type Multiplicity
externalReference String 0..1
Reference end Target type Multiplicity Ordered
origin ModelElement 0..1 no

TerminologyAsset (abstract)

Generalization chain: TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

TerminologyElement (abstract)

Generalization chain: ArtifactElement -> ModelElement -> SACMElement -> Element

TerminologyGroup

Generalization chain: TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
terminologyElement TerminologyElement 0..* no

TerminologyPackage

Generalization chain: TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
interface TerminologyPackageInterface 0..* no
Containment role Child type Multiplicity Ordered
terminologyElement TerminologyElement 0..* no

TerminologyPackageBinding

Generalization chain: TerminologyPackage -> TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
participantPackage TerminologyPackage 2..* no

TerminologyPackageInterface

Generalization chain: TerminologyPackage -> TerminologyElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
implements TerminologyPackage 1 no

Package Argumentation

ArgumentAsset (abstract)

Generalization chain: ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

ArgumentGroup

Generalization chain: ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
argumentElement ArgumentationElement 0..* no

ArgumentPackage

Generalization chain: ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
interface ArgumentPackageInterface 0..* no
Containment role Child type Multiplicity Ordered
argumentElement ArgumentationElement 0..* no

ArgumentPackageBinding

Generalization chain: ArgumentPackage -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
participantPackage ArgumentPackage 2..* no

ArgumentPackageInterface

Generalization chain: ArgumentPackage -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
implements ArgumentPackage 1 no

ArgumentReasoning

Generalization chain: ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
structure ArgumentPackage 0..1 no

ArgumentationElement (abstract)

Generalization chain: ArtifactElement -> ModelElement -> SACMElement -> Element

ArtifactReference

Generalization chain: ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
referencedArtifactElement ArtifactElement 0..* no

AssertedArtifactContext

Generalization chain: AssertedRelationship -> Assertion -> ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

AssertedArtifactSupport

Generalization chain: AssertedRelationship -> Assertion -> ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

AssertedContext

Generalization chain: AssertedRelationship -> Assertion -> ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

AssertedEvidence

Generalization chain: AssertedRelationship -> Assertion -> ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

AssertedInference

Generalization chain: AssertedRelationship -> Assertion -> ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

AssertedRelationship (abstract)

Generalization chain: Assertion -> ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Attribute Type Multiplicity
isCounter Boolean 1
Reference end Target type Multiplicity Ordered
reasoning ArgumentReasoning 0..1 no
source ArgumentAsset 1..* no
target ArgumentAsset 1 no

Assertion (abstract)

Generalization chain: ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Attribute Type Multiplicity
assertionDeclaration AssertionDeclaration 1
Reference end Target type Multiplicity Ordered
metaClaim Claim 0..* no

Claim

Generalization chain: Assertion -> ArgumentAsset -> ArgumentationElement -> ArtifactElement -> ModelElement -> SACMElement -> Element

Package Artifact

Activity

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Attribute Type Multiplicity
startTime _be00301_1073305590699_364818_1 0..1
endTime _be00301_1073305590699_364818_1 0..1

Artifact

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Attribute Type Multiplicity
version String 0..1
date _be00301_1073305590699_364818_1 0..1

ArtifactAsset (abstract)

Generalization chain: ArtifactElement -> ModelElement -> SACMElement -> Element

Containment role Child type Multiplicity Ordered
property Property 0..* no

ArtifactAssetRelationship

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
source ArtifactAsset 1..* no
target ArtifactAsset 1..* no

ArtifactGroup

Generalization chain: ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
artifactElement ArtifactElement 0..* no

ArtifactPackage

Generalization chain: ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
interface ArtifactPackageInterface 0..* no
Containment role Child type Multiplicity Ordered
artifactElement ArtifactElement 0..* no

ArtifactPackageBinding

Generalization chain: ArtifactPackage -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
participantPackage ArtifactPackage 2..* no

ArtifactPackageInterface

Generalization chain: ArtifactPackage -> ArtifactElement -> ModelElement -> SACMElement -> Element

Reference end Target type Multiplicity Ordered
implements ArtifactPackage 1 no

Event

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Attribute Type Multiplicity
date _be00301_1073305590699_364818_1 0..1

Participant

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Property

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Resource

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Technique

Generalization chain: ArtifactAsset -> ArtifactElement -> ModelElement -> SACMElement -> Element

Enumerations

AssertionDeclaration (Argumentation)

Literals: asserted, needsSupport, assumed, axiomatic, defeated, asCited

Concrete class -> containment roles (serializer dispatch table)

Effective containment for each concrete class, including roles inherited from abstract bases. This table seeds libs/sacm/src/io/name_tables.cpp and is asserted against the library by test_metamodel_coverage.cpp.

Concrete class Package Containment roles (role: child type)
ArgumentGroup Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArgumentPackage Argumentation argumentElement: ArgumentationElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArgumentPackageBinding Argumentation argumentElement: ArgumentationElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArgumentPackageInterface Argumentation argumentElement: ArgumentationElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArgumentReasoning Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArtifactReference Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssertedArtifactContext Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssertedArtifactSupport Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssertedContext Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssertedEvidence Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssertedInference Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Claim Argumentation description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Activity Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Artifact Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArtifactAssetRelationship Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArtifactGroup Artifact description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArtifactPackage Artifact artifactElement: ArtifactElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArtifactPackageBinding Artifact artifactElement: ArtifactElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
ArtifactPackageInterface Artifact artifactElement: ArtifactElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Event Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Participant Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Property Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Resource Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Technique Artifact property: Property; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssuranceCasePackage AssuranceCase assuranceCasePackage: AssuranceCasePackage; argumentPackage: ArgumentPackage; artifactPackage: ArtifactPackage; terminologyPackage: TerminologyPackage; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssuranceCasePackageBinding AssuranceCase assuranceCasePackage: AssuranceCasePackage; argumentPackage: ArgumentPackage; artifactPackage: ArtifactPackage; terminologyPackage: TerminologyPackage; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
AssuranceCasePackageInterface AssuranceCase assuranceCasePackage: AssuranceCasePackage; argumentPackage: ArgumentPackage; artifactPackage: ArtifactPackage; terminologyPackage: TerminologyPackage; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Description Base content: MultiLangString
ExpressionLangString Base (none)
ImplementationConstraint Base content: MultiLangString
LangString Base (none)
MultiLangString Base value: LangString
Note Base content: MultiLangString
TaggedValue Base key: MultiLangString; content: MultiLangString
Category Terminology description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Expression Terminology description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
Term Terminology description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
TerminologyGroup Terminology description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
TerminologyPackage Terminology terminologyElement: TerminologyElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
TerminologyPackageBinding Terminology terminologyElement: TerminologyElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString
TerminologyPackageInterface Terminology terminologyElement: TerminologyElement; description: Description; implementationConstraint: ImplementationConstraint; note: Note; taggedValue: TaggedValue; name: LangString