Overview
Davinci exports a project or selected scope to a single.sysml file for downstream SysML v2 workflows, reviews, and analysis.
This export is deterministic, but it is not a raw dump of the stored Davinci model. Before text is generated, Davinci applies export-only transformations so the result is more valid, more readable, and more portable across SysML v2 tooling.
For a shorter workflow-oriented overview of all export formats, see Exports.
Quick Summary
Available SysML Outputs
Davinci supports two SysML-oriented export paths:- SysML v2 text (
.sysml) — a standards-oriented textual export for downstream SysML v2 tools, reviews, and analysis. - SysML v2 JSON — a structured JSON export for workflows that need machine-readable SysML-style data, validation, or custom processing.
Exported Directly
Davinci currently exports these modeled object types directly:partentitylinkageattributeactionrequirementconstraintportconnectionitemriskinterfacecapabilitystate
projectexports as the rootpackagepackageexports aspackage- unsupported container-like objects that own child packages may still be emitted as a
packageso package structure is preserved
Not Exported Directly
The active exporter does not emit these as standalone SysML v2 elements:taskresource- standalone
transition codein capability export- unsupported non-container types
- references to
taskandresourceobjects are typically inlined as scalar values rather than exported as standalone elements - transitions are still exported semantically, but only through state-machine rendering rather than as independent objects
Common Transformations
Davinci may change the exported structure in order to keep the output legal and usable:- attributes may be hoisted upward so references stay valid
- code-backed attribute equations may become generated calculation definitions when they can be represented cleanly
- interfaces and some connections may move to a more appropriate common scope
- requirements may gain export-only subject aliases or subject aggregate helpers
- some relationships and connections are preserved as
doccomments instead of native SysML syntax - root-level helper content such as
Davinci_Unit_Defs,Davinci_Connection_Defs,DavinciPort, andTBDis injected into the exported file
How Davinci Builds the Export
Davinci does not write SysML directly from the stored tree. It first builds an export-ready model view that fixes scoping, naming, and syntax issues.Export-Only Transformations
State-container synthesis
If a non-state object directly owns child states, Davinci inserts an export-only synthetic wrapper state such asMyPart_State and reparents those states into it.
This matters because SysML v2 expects transitions to live inside a state-machine context. The wrapper lets Davinci export valid state structure even when the original Davinci containment is flatter.
Attribute hoisting
If an attribute is referenced by expressions from multiple places, Davinci may hoist that attribute upward to the lowest common ancestor of all relevant usages. This avoids broken references such as:- constraints that point downward into a sibling scope
- action or state expressions that refer to attributes buried too deeply
- the attribute may appear higher in the exported package or part hierarchy than it does in the Davinci editor
- the value and meaning are preserved, but the exported location may be more general than the original authoring location
Interface hoisting
Interfaces are moved to the common scope of the ports they connect. This is necessary because SysML v2 expects interface usages to live where the connected ends are actually accessible.Behavioral connection hoisting
Connections nested directly insideaction or use case style scopes are often not legal or accessible in SysML v2. Davinci therefore hoists those connection usages upward into the nearest non-behavioral ancestor scope when possible.
Requirement subject normalization
Requirements with more than one subject are normalized into a single export path using export-only helper elements:- a synthetic aggregate part is created under the requirement
- synthetic member usages are created under that aggregate
- each synthetic member is
bind-linked back to the real subject target
- every requirement still exports with a clear
subject - multi-subject requirements may include helper declarations that did not exist as authored objects in Davinci
Child deduplication
If the Davinci tree contains the same child listed under multiple parents, Davinci keeps the first depth-first ownership path for export and removes duplicate listings from later parents. This avoids ambiguous containment and unstable path resolution in the exported text.Name normalization and conflict resolution
Davinci normalizes names for SysML export by:- replacing spaces with underscores
- replacing apostrophes and curly quotes with underscores
- quoting names in declarations and references
- sibling name collisions get numeric suffixes
- short-name collisions get numeric suffixes
- names that would collide with reserved export helpers such as
Davinci_Unit_Defs,Davinci_Connection_Defs,DavinciPort, orTBDare renamed for export - package-scope state definitions may receive a
Defsuffix when they are promoted into state definitions
Root Package Additions
When you export a whole project, the rootpackage includes more than just your visible model tree.
Davinci injects several export support sections at the project level:
- a unit library package
- a custom connection-definition package
- standard imports for quantity calculations and trigonometric functions
- a generic
port def 'DavinciPort' - an
attribute 'TBD'placeholder used by some requirement and constraint exports
Units package
Davinci creates a package namedDavinci_Unit_Defs and fills it with unit declarations for:
- built-in units
- any unit symbols used anywhere in the exported model
- any project-defined custom units
- project-defined scalar conversions
- automatically inferred SI-prefix conversions such as
mWtoW
Custom relationship definitions
Davinci creates a package namedDavinci_Connection_Defs when the project contains relationship types that do not have a direct SysML keyword form.
Each such relationship gets a connection def with generic source and target ends typed as Anything[1].
This is how Davinci preserves project-specific or Davinci-specific relationship types as valid typed connections in the exported file.
Relationship Handling
Davinci relationship export is selective:performsis emitted through action or part behavior syntax rather than as a generic relationship linesubjectis handled inside requirement exportallocate,verify, andsatisfyare preserved asdoccommentsusesis currently skipped in this export pathway- relationships that target packages are dropped from connection-style emission because packages are treated as transparent namespaces, not connectable endpoints
- non-internal project relationship types without a dedicated SysML keyword form are converted into typed connections through
Davinci_Connection_Defs
Object Mapping Reference
Structural Modeling
Projects and packages
Projects and packages export aspackage blocks.
Package export has an additional behavior: Davinci treats packages as transparent containers and emits imports to make cross-package references easier to resolve.
Each package may include:
public importstatements for direct child packagesprivate importstatements for sibling packages higher in the ancestor chain
Parts, entities, and linkages
part, entity, and linkage currently all export through the same part strategy.
Davinci preserves:
- the exported name and optional short name
- documentation
- child elements
- type specialization through
defref performsrelationships asperform action ...;
- an entity does not export with a separate SysML keyword today; it is emitted as a
part - a linkage also exports as a
part - transition children are never emitted directly here because state export owns them
- if sibling states exist under a part, they may be wrapped into a synthetic state machine before export
Attributes
Attributes export asattribute.
Davinci handles several common attribute cases:
- simple numeric values remain numeric and are not quoted
- simple string values are emitted as string literals
- boolean values such as
trueandfalsestay as booleans - leaf attributes export on a single line when possible
- structured attributes can still carry child content
- model references are resolved into SysML paths
- inline unit text inside expressions is stripped when the unit should instead appear in SysML quantity notation
- math function names are normalized to SysML-friendly names such as
arctan,arcsin, andarccos - multi-argument
minandmaxare folded into nested binary calls
['kg'].
Davinci may use the resolved unit rather than the raw unit field when that produces a better export.
Callable calculation export
When an attribute value is backed by a callable Code object function, Davinci exports the calculation intent where possible by synthesizing a SysML calculation definition and using that definition from the derived attribute expression. If the callable reference cannot be exported cleanly, for example because the target code object or method cannot be resolved, Davinci preserves a preflight warning rather than emitting invalid SysML. For exported models, this means code-backed calculations may appear as generated calculation definitions instead of raw Davinci equation syntax.Ports
Ports export asport.
Important nuances:
- untyped ports are automatically typed as
: 'DavinciPort'because SysML v2 expects ports to have a port definition - typed ports preserve their
defreftyping
Items
Items export asitem using the generic element strategy.
Depending on how they are modeled, they may appear as:
- simple declarations
- valued items
- documented items
- nested items with child content
Behavioral Modeling
Actions
Actions export asaction.
Davinci preserves:
- documentation
- relationships
- structural children such as attributes, ports, constraints, items, and connections
- hierarchical child actions when they are not already instantiated by the sequence
- action definitions for reusable action types
- core action usages typed by those definitions
- numbered action instances for repeated occurrences
- control and flow structure for sequencing, branching, and parallelism
- ordered execution
- parameter passing
- outputs from
end(...) fork(...)style parallel branches- control decisions and merges
flow(...)statements
- if both endpoints are ports, Davinci emits a port-based flow statement
- otherwise, it falls back to a message-style representation
Connections
Connections are one of the most nuanced parts of the exporter. Davinci does not always emit every connection as a nativeconnect A to B; statement. The output depends on endpoint legality and scope.
When a connection has exactly two endpoints, no disqualifying scope problems, and no extra complexity, Davinci emits a native connect ... to ...; statement.
If the connection corresponds to a custom or non-keyword relationship type, Davinci emits:
connection : 'Davinci_Connection_Defs'::'RelationshipType' connect A to B;
doc comments instead of invalid SysML. This happens when, for example:
- an endpoint is not exportable as a legal connectable feature
- an endpoint is the enclosing owner itself or one of its ancestors
- both endpoints are actually the same object
- the path crosses promoted state-definition boundaries
- the path goes through behavioral scopes where endpoint accessibility would fail
- connection type
- source path
- target path
- label or documentation
- a
dependency from ... to ...;
doc comments.
Interfaces
Interfaces export with a deliberate two-part strategy:- an
interface def - one or more preserved connection-path statements as
doccomments
interface def with generic source and target ends typed as DavinciPort.
Child attributes and items of the interface are exported inside that definition.
If the interface contains:
- explicit
topologypairs, Davinci treats each pair as a pathway - only a flat
connectlist with two endpoints, it creates one pathway - a flat
connectlist with more than two endpoints, it treats the first as a shared source and the remaining entries as fan-out targets
doc comments rather than full redefinition bindings because those paths often cross scopes that SysML v2 tools reject.
So the export preserves:
- the interface definition itself
- the interface-owned data and features
- the intended connection pathways
Capabilities
Capabilities export asuse case.
Davinci preserves:
- documentation
- nested capabilities
- child attributes
- child constraints
codechildren are intentionally skipped because there is no direct SysML v2 export form for them in this pathway
States and transitions
State export is holistic. Individual transition objects are not emitted separately; they are rendered inside the relevant state-machine export block. Leaf states may include:entrydoexit- child scalar content such as attributes and constraints
- an initial transition to the earliest child state by lexical position
- an optional container-level
do - scalar children at the state-machine scope
- sub-state declarations
- same-machine transitions
- cross-machine transition summaries
state def declarations instead of nesting them under an extra wrapper state.
This is why some state names may gain a Def suffix in export-only naming.
If a transition goes from one state machine to a different one, Davinci usually preserves it as a doc comment instead of a native transition statement because the target path is often not legal from the source state-machine scope.
Requirements and Analysis
Requirements
Requirements export asrequirement.
Davinci preserves:
- documentation
- subjects
- relationships
- child content
subject ...; statement.
If the requirement has:
- one subject, it may export directly or through a local alias
- multiple subjects, it exports through a synthetic aggregate part and synthetic local members bound back to the real targets
require constraint ...
Constraints
Constraints export asconstraint, but Davinci does a substantial amount of cleanup and normalization before writing the body to preserve the engineering rule while making the expression legal and analyzable in SysML v2.
Constraint expressions may be rewritten to:
- resolve references into qualified names
- normalize math function names
- rewrite bare
=into equality==where needed - quote literal tokens such as
PASS,FAIL, orYES - convert quoted quantity literals into SysML quantity syntax
- normalize trailing bare quantities such as
200 K - normalize compound quantity forms such as units with numerator and denominator
value and rewrite the expression to compare against that attribute.
This is intentional because SysML v2 constraint structure works better when the comparison target is declared as a feature instead of only appearing as a raw literal.
If the left-hand side of a comparison is a feature path, Davinci may create a local alias such as attribute target = ...; and then compare target to value.
Non-executable or placeholder constraint bodies such as plain english or text that simply repeats documentation may be suppressed instead of exported as misleading executable logic.
Risks
Risks export ascase, not as concern.
Davinci uses a case-style export that preserves risk rollup logic as attributes and equations.
Leaf risks export with direct attributes such as:
- probability
- impact
- detectability
OR-style probability accumulationAND-style probability accumulation
case usages.
Not Exported Directly
The active exporter does not emit these as standalone SysML v2 elements:taskresource- standalone
transition codein capability export- unsupported non-container types
- if another exported expression references a
task, Davinci typically resolves that to the task’s duration-like scalar value - if another exported expression references a
resource, Davinci typically resolves that to the resource’s numeric scalar value - transitions are still exported semantically, but only through state-machine rendering rather than as independent objects
What to Expect in the Output File
Names, paths, and references
Davinci resolves internal references into relative or qualified SysML paths during export. Path rendering is scope-aware:- package-like scopes prefer
:: - feature-like scopes prefer
. - imported packages may be omitted from the path when the export has already made them visible
Why some content becomes doc comments
Davinci exports object documentation using SysML doc blocks wherever possible.
It also sanitizes comment text so embedded /* and */ sequences do not break parsing.
In practice, doc comments are used for three different preservation levels:
- ordinary object documentation
- relationship notes that do not map to a native statement
- fallback preservation when a construct cannot be emitted as legal SysML syntax
File naming and export scope
If you export:- a whole project, the downloaded file is named after the project
- a sub-scope, Davinci still prefers the root project name for the file when that project is present in the exported tree
How to read the exported file
When reviewing a Davinci SysML v2 export, use this checklist:- Start at the root package and look for the injected support sections:
Davinci_Unit_Defs,Davinci_Connection_Defs, imports,DavinciPort, andTBD. - Treat packages as namespace helpers, not just as literal containers from the editor.
- Expect some attributes, interfaces, and connections to appear at a higher scope than where they were authored.
- If a relationship or connection appears as
doctext, assume Davinci preserved the semantics but avoided illegal SysML syntax. - For requirements, inspect local aggregate or alias helpers before concluding the subject structure changed.
- For behavior, read both the action declarations and the generated sequence and control-flow region.
- For state machines, look for promoted
state defdeclarations and comment-preserved cross-machine transitions. - For code-backed attribute equations, inspect generated calculation definitions and any preflight warnings.
How to export
To export your model to SysML v2:- Open the project or object you want to export.
- Select the export option from the project or object menu.
- Choose
SysML v2. - Davinci downloads a
.sysmlfile generated from the selected scope.