SysML 2 Beta
SysML 2 Beta
Normative:
https://www.omg.org/spec/SysML/20240201/SysML.xmi
https://www.omg.org/spec/SysML/20240201/Systems-Library.kpar
https://www.omg.org/spec/SysML/20240201/Analysis-Domain-Libary.kpar
https://www.omg.org/spec/SysML/20240201/Cause-and-Effect-Domain-Library.kpar
https://www.omg.org/spec/SysML/20240201/Geometry-Domain-Library.kpar
https://www.omg.org/spec/SysML/20240201/Metadata-Domain-Library.kpar
https://www.omg.org/spec/SysML/20240201/Quantities-and-Units-Domain-Library.kpar
https://www.omg.org/spec/SysML/20240201/Requirement-Derivation-Domain-Library.kpar
https://www.omg.org/spec/SysML/20240201/SysML.json
Non-normative:
https://www.omg.org/spec/SysML/20240201/SimpleVehicleModel.sysml
_______________________________________________________________________________
Copyright © 2019-2024, 88solutions Corporation
Copyright © 2019-2024, Airbus
Copyright © 2019-2024, Aras Corporation
Copyright © 2019-2024, Association of Universities for Research in Astronomy (AURA)
Copyright © 2019-2024, BigLever Software
Copyright © 2019-2024, Boeing
Copyright © 2022-2024, Budapest University of Technology and Economics
Copyright © 2021-2024, Commissariat à l'énergie atomique et aux énergies alternatives (CEA)
Copyright © 2019-2024, Contact Software GmbH
Copyright © 2019-2024, Dassault Systèmes (No Magic)
Copyright © 2019-2024, DSC Corporation
Copyright © 2020-2024, DEKonsult
Copyright © 2020-2024, Delligatti Associates LLC
Copyright © 2019-2024, The Charles Stark Draper Laboratory, Inc.
Copyright © 2020-2024, ESTACA
Copyright © 2023-2024, Galois, Inc.
Copyright © 2019-2024, GfSE e.V.
Copyright © 2019-2024, George Mason University
Copyright © 2019-2024, IBM
Copyright © 2019-2024, Idaho National Laboratory
Copyright © 2019-2024, INCOSE
Copyright © 2019-2024, Intercax LLC
Copyright © 2019-2024, Jet Propulsion Laboratory (California Institute of Technology)
Copyright © 2019-2024, Kenntnis LLC
Copyright © 2020-2024, Kungliga Tekniska högskolon (KTH)
Copyright © 2019-2024, LightStreet Consulting LLC
Copyright © 2019-2024, Lockheed Martin Corporation
Copyright © 2019-2024, Maplesoft
Copyright © 2021-2024, MID GmbH
Copyright © 2020-2024, MITRE
Copyright © 2019-2024, Model Alchemy Consulting
Copyright © 2019-2024, Model Driven Solutions, Inc.
Copyright © 2019-2024, Model Foundry Pty. Ltd.
Copyright © 2023-2024, Object Management Group, Inc.
Copyright © 2019-2024, On-Line Application Research Corporation (OAC)
Copyright © 2019-2024, oose Innovative Informatik eG
Copyright © 2019-2024, Østfold University College
Copyright © 2019-2024, PTC
Copyright © 2020-2024, Qualtech Systems, Inc.
Copyright © 2019-2024, SAF Consulting
Copyright © 2019-2024, Simula Research Laboratory AS
Copyright © 2019-2024, System Strategy, Inc.
Copyright © 2019-2024, Thematix Partners, LLC
Copyright © 2019-2024, Tom Sawyer
Copyright © 2023-2024, Tucson Embedded Systems, Inc.
Copyright © 2019-2024, Universidad de Cantabria
Copyright © 2019-2024, University of Alabama in Huntsville
Copyright © 2019-2024, University of Detroit Mercy
Copyright © 2019-2024, University of Kaiserslauten
Copyright © 2020-2024, Willert Software Tools GmbH (SodiusWillert)
USE OF SPECIFICATION - TERMS, CONDITIONS & NOTICES
The material in this document details an Object Management Group specification in accordance with the
terms, conditions and notices set forth below. This document does not represent a commitment to
implement any portion of this specification in any companys products. The information contained in this
document is subject to change without notice.
LICENSES
The companies listed above have granted to the Object Management Group, Inc. (OMG) a nonexclusive,
royalty-free, paid up, worldwide license to copy and distribute this document and to modify this document
and distribute copies of the modified version. Each of the copyright holders listed above has agreed that
no person shall be deemed to have infringed the copyright in the included material of any such copyright
holder by reason of having used the specification set forth herein or having conformed any computer
software to the specification.
Subject to all of the terms and conditions below, the owners of the copyright in this specification hereby
grant you a fully-paid up, non-exclusive, nontransferable, perpetual, worldwide license (without the right to
sublicense), to use this specification to create and distribute software and special purpose specifications
that are based upon this specification, and to use, copy, and distribute this specification as provided
under the Copyright Act; provided that: (1) both the copyright notice identified above and this permission
notice appear on any copies of this specification; (2) the use of the specifications is for informational
purposes and will not be copied or posted on any network computer or broadcast in any media and will
not be otherwise resold or transferred for commercial purposes; and (3) no modifications are made to this
specification. This limited permission automatically terminates without notice if you breach any of these
terms or conditions. Upon termination, you will destroy immediately any copies of the specifications in
your possession or control.
PATENTS
The attention of adopters is directed to the possibility that compliance with or adoption of OMG
specifications may require use of an invention covered by patent rights. OMG shall not be responsible for
identifying patents for which a license may be required by any OMG specification, or for conducting legal
inquiries into the legal validity or scope of those patents that are brought to its attention. OMG
specifications are prospective and advisory only. Prospective users are responsible for protecting
themselves against liability for infringement of patents.
Any unauthorized use of this specification may violate copyright laws, trademark laws, and
communications regulations and statutes. This document contains information which is protected by
copyright. All Rights Reserved. No part of this work covered by copyright herein may be reproduced or
used in any form or by any means--graphic, electronic, or mechanical, including photocopying, recording,
taping, or information storage and retrieval systems--without permission of the copyright owner.
DISCLAIMER OF WARRANTY
WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY
CONTAIN ERRORS OR MISPRINTS. THE OBJECT MANAGEMENT GROUP AND THE COMPANIES
LISTED ABOVE MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO
THIS PUBLICATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR
OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR A
PARTICULAR PURPOSE OR USE. IN NO EVENT SHALL THE OBJECT MANAGEMENT GROUP OR
ANY OF THE COMPANIES LISTED ABOVE BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES,
INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY ANY USER OR ANY
THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS
MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
The entire risk as to the quality and performance of software developed using this specification is borne
by you. This disclaimer of warranty constitutes an essential part of the license granted to you to use this
specification.
Use, duplication or disclosure by the U.S. Government is subject to the restrictions set forth in
subparagraph (c) (1) (ii) of The Rights in Technical Data and Computer Software Clause at DFARS
252.227-7013 or in subparagraph (c)(1) and (2) of the Commercial Computer Software - Restricted Rights
clauses at 48 C.F.R. 52.227-19 or as specified in 48 C.F.R. 227-7202-2 of the DoD F.A.R. Supplement
and its successors, or as specified in 48 C.F.R. 12.212 of the Federal Acquisition Regulations and its
successors, as applicable. The specification copyright owners are as indicated above and may be
contacted through the Object Management Group, 9C Medway Road, PMB 274, Milford, MA 01757,
U.S.A.
TRADEMARKS
CORBA®, CORBA logos®, FIBO®, Financial Industry Business Ontology®, Financial Instrument Global
Identifier®, IIOP®, IMM®, Model Driven Architecture®, MDA®, Object Management Group®, OMG®, OMG
Logo®, SoaML®, SOAML®, SysML®, UAF®, Unified Modeling Language™, UML®, UML Cube Logo®,
VSIPL®, and XMI® are registered trademarks of the Object Management Group, Inc.
COMPLIANCE
The copyright holders listed above acknowledge that the Object Management Group (acting itself or
through its designees) is and shall at all times be the sole entity that may authorize developers, suppliers
and sellers of computer software to use certification marks, trademarks or other special designations to
indicate compliance with these materials.
Software developed under the terms of this license may claim compliance or conformance with this
specification if and only if the software compliance is of a nature fully matching the applicable compliance
points as stated in the specification. Software developed only partially matching the applicable
compliance points may claim only that the software was based on this specification, but may not claim
compliance or conformance with this specification. In the event that testing suites are implemented or
approved by Object Management Group, Inc., software developed using this specification may claim
compliance or conformance with the specification only if the software satisfactorily completes the testing
suites.
OMG’S ISSUE REPORTING PROCEDURE
All OMG specifications are subject to continuous review and improvement. As part of this process we
encourage readers to report any ambiguities, inconsistencies, or inaccuracies they may find by
completing the Issue Reporting Form listed on the main web page https://www.omg.org, under
Documents, Report a Bug/Issue.
Table of Contents
0 Preface.............................................................................................................................................................................................23
1 Scope.................................................................................................................................................................................................1
2 Conformance.....................................................................................................................................................................................3
3 Normative References.......................................................................................................................................................................5
4 Terms and Definitions.......................................................................................................................................................................7
5 Symbols ............................................................................................................................................................................................9
6 Introduction.....................................................................................................................................................................................11
6.1 Document Overview ...........................................................................................................................................................11
6.2 Document Organization ......................................................................................................................................................12
6.3 Acknowlegements...............................................................................................................................................................13
7 Language Description .....................................................................................................................................................................15
7.1 Language Overview ............................................................................................................................................................15
7.2 Elements and Relationships ................................................................................................................................................16
7.2.1 Elements and Relationships Overview....................................................................................................................16
7.2.2 Elements..................................................................................................................................................................17
7.2.3 Relationships ...........................................................................................................................................................18
7.3 Dependencies ......................................................................................................................................................................18
7.3.1 Dependencies Overview..........................................................................................................................................18
7.3.2 Dependency Declaration .........................................................................................................................................19
7.4 Annotations .........................................................................................................................................................................19
7.4.1 Annotations Overview ............................................................................................................................................19
7.4.2 Comments and Documentation ...............................................................................................................................21
7.4.3 Textual Representation............................................................................................................................................22
7.5 Namespaces and Packages ..................................................................................................................................................23
7.5.1 Namespaces Overview ............................................................................................................................................23
7.5.2 Owned Members and Aliases..................................................................................................................................26
7.5.3 Imports ....................................................................................................................................................................28
7.5.4 Import Filtering .......................................................................................................................................................29
7.5.5 Root Namespaces ....................................................................................................................................................30
7.6 Definition and Usage ..........................................................................................................................................................31
7.6.1 Definition and Usage Overview..............................................................................................................................31
7.6.2 Definitions...............................................................................................................................................................40
7.6.3 Usages .....................................................................................................................................................................41
7.6.4 Reference Usages ....................................................................................................................................................43
7.6.5 Effective Names ......................................................................................................................................................43
7.6.6 Feature Chains.........................................................................................................................................................43
7.6.7 Variations and Variants...........................................................................................................................................44
7.6.8 Implicit Specialization ............................................................................................................................................44
7.7 Attributes.............................................................................................................................................................................45
7.7.1 Attributes Overview ................................................................................................................................................45
7.7.2 Attribute Definitions and Usages ............................................................................................................................47
7.8 Enumerations ......................................................................................................................................................................47
7.8.1 Enumerations Overview..........................................................................................................................................47
7.8.2 Enumeration Definitions and Usages......................................................................................................................49
7.9 Occurrences.........................................................................................................................................................................49
7.9.1 Occurrences Overview ............................................................................................................................................49
7.9.2 Occurrence Definitions and Usages ........................................................................................................................54
7.9.3 Time Slices and Snapshots......................................................................................................................................54
7.9.4 Individual Definitions and Usages ..........................................................................................................................54
7.9.5 Event Occurrence Usages .......................................................................................................................................55
7.10 Items..................................................................................................................................................................................55
7.10.1 Items Overview .....................................................................................................................................................55
7.10.2 Item Definitions and Usages .................................................................................................................................57
Founded in 1989, the Object Management Group, Inc. (OMG) is an open membership, not-for-profit computer
industry standards consortium that produces and maintains computer industry specifications for interoperable,
portable, and reusable enterprise applications in distributed, heterogeneous environments. Membership includes
Information Technology vendors, end users, government agencies, and academia.
OMG member companies write, adopt, and maintain its specifications following a mature, open process. OMG’s
specifications implement the Model Driven Architecture® (MDA®), maximizing ROI through a full-lifecycle
approach to enterprise integration that covers multiple operating systems, programming languages, middleware and
networking infrastructures, and software development environments. OMG’s specifications include: UML®
(Unified Modeling Language™); CORBA® (Common Object Request Broker Architecture); CWM™ (Common
Warehouse Metamodel); and industry-specific standards for dozens of vertical markets.
OMG Specifications
As noted, OMG specifications address middleware, modeling, and vertical domain frameworks. All OMG
Specifications are available from the OMG website at: https://www.omg.org/spec
All of OMG’s formal specifications may be downloaded without charge from our website. (Products implementing
OMG specifications are available from individual suppliers.) Copies of specifications, available in PostScript and
PDF format, may be obtained from the Specifications Catalog cited above or by contacting the Object Management
Group, Inc. at:
OMG Headquarters
9C Medway Road, PMB 274
Milford, MA 01757
USA
Tel: +1-781-444-0404
Fax: +1-781-444-0320
Email: [email protected]
Certain OMG specifications are also available as ISO standards. Please consult https://www.iso.org
Issues
All OMG specifications are subject to continuous review and improvement. As part of this process we encourage
readers to report any ambiguities, inconsistencies, or inaccuracies they may find by completing the Issue Reporting
Form listed on the main web page https://www.omg.org, under Specifications, Report an Issue.
SysML is a general-purpose modeling language for modeling systems that is intended to facilitate a model-based
systems engineering (MBSE) approach to engineer systems. It provides the capability to create and visualize models
that represent many different aspects of a system. This includes representing the requirements, structure, and
behavior of the system, and the specification of analysis cases and verification cases used to analyze and verify the
system. The language is intended to support multiple systems engineering methods and practices. The specific
methods and practices may impose additional constraints on how the language is used.
SysML is defined as an extension of the Kernel Modeling Language (KerML), which provides a common, domain-
independent language for building semantically rich and interoperable modeling languages. SysML also provides
a capability to provide further language extensions. It is anticipated that SysML will be customized using this
language extension mechanism to model more specialized domain-specific applications, such as automotive,
aerospace, healthcare, and information systems, as well as discipline specific extensions such as safety and
reliability.
Note. Definitions of system and systems engineering can be found in ISO/IEC 15288 Systems and Software
Engineering – System Life Cycle Process.
A SysML model shall conform to this specification only if it can be represented according to the syntactic
requirements specified in Clause 8 . The model may be represented in a form consistent with the requirements for
the SysML concrete syntax (which includes both textual and graphical notation), in which case it can be parsed (as
specified in 8.2 ) into an abstract syntax form, or it may be represented directly in an abstract syntax form.
A SysML modeling tool is a software application that creates, manages, analyzes, visualizes, executes or performs
other services on SysML models. A tool can conform to this specification in one or more of the following ways.
1. Abstract Syntax Conformance. A tool demonstrating Abstract Syntax Conformance provides a user
interface and/or API that enables instances of SysML abstract syntax metaclasses to be created, read,
updated, and deleted. The tool must also provide a way to validate the well-formedness of models that
corresponds to the constraints defined in the SysML metamodel. A well-formed model represented
according to the abstract syntax is syntactically conformant to SysML as defined above. (See 8.3 .)
2. Concrete Syntax Conformance. A tool demonstrating Concrete Syntax Conformance provides a user
interface and/or API that enables instances of SysML concrete syntax notation to be created, read,
updated, and deleted. Note that a conforming tool may also provide the ability to create, read, update and
delete additional notational elements that are not defined in SysML. Concrete Syntax Conformance
implies Abstract Syntax Conformance, in that creating models in the concrete syntax acts as a user
interface for the abstract syntax. However, a tool demonstrating Concrete Syntax Conformance need not
represent a model internally in exactly the form modeled for the abstract syntax in this specification. (See
8.2 .)
4. Model Interchange Conformance. A tool demonstrating model interchange conformance can import and/
or export syntactically conformant SysML models (as defined above) as a project interchange file as
specified in [KerML, Clause 10], with the following further conditions:
◦ The project interchange file shall use the standard .kpar (KerML Project Archive) extension.
◦ All model interchange files in the project interchange file shall be SysML models. Textual
notation files shall use the extension .sysml.
5. Domain Library Support. In addition to the Systems Model Library, a conformant tool may provide one or
more of the domain model libraries specified in Clause 9 .
Every conformant SysML modeling tool shall demonstrate at least Abstract Syntax Conformance and Model
Interchange Conformance. In addition, such a tool may demonstrate Concrete Syntax Conformance and/or Semantic
Conformance, both of which are dependent on Abstract Syntax Conformance. The tool may also provide Domain
Library Support.
[ISO15897] ISO/IEC 15897:2011 Information technology – User interfaces – Procedures for the registration of
cultural elements
https://www.iso.org/standard/50707.html
The following references were used in the definition of the Quantities and Units model library (see 9.8 ):
[GUM] JCGM 100:2008 and ISO/IEC Guide 98-3, Evaluation of measurement data - Guide to the expression of
uncertainty in measurement
https://www.bipm.org/en/publications/guides/#gum
[ISO 80000-2] ISO 80000-2:2019, Quantities and units - Part 2: Mathematical signs and symbols to be used in the
natural sciences and technology
https://www.iso.org/obp/ui/#iso:std:iso:80000:-2:ed-2:v1:en
[ISO 80000-3] ISO 80000-3:2019, Quantities and units - Part 3: Space and Time
https://www.iso.org/obp/ui/#iso:std:iso:80000:-3:ed-2:v1:en
[ISO 80000-9] ISO 80000-9:2019, Quantities and units - Part 9: Physical chemistry and molecular physics
https://www.iso.org/obp/ui/#iso:std:iso:80000:-9:ed-2:v1:en
[ISO 80000-10] ISO 80000-10:2019, Quantities and units - Part 10: Atomic and nuclear physics
https://www.iso.org/obp/ui/#iso:std:iso:80000:-10:ed-2:v1:en
[ISO 80000-11] ISO 80000-11:2019, Quantities and units - Part 11: Characteristic numbers
https://www.iso.org/obp/ui/#iso:std:iso:80000:-11:ed-2:v1:en
[ISO 80000-12] ISO 80000-12:2019, Quantities and units - Part 12: Solid state physics
https://www.iso.org/obp/ui/#iso:std:iso:80000:-12:ed-2:v1:en
[IEC 80000-13] IEC 80000-13:2008, Quantities and units - Part 13: Information science and technology
https://www.iso.org/obp/ui/#iso:std:iec:80000:-13:ed-1:v1:en
[IEC 80000-14] IEC 80000-14:2008, Quantities and units - Part 14: Telebiometrics related to human physiology
https://www.iso.org/obp/ui/#iso:std:iec:80000:-14:ed-1:v1:en
[NIST SP-811] NIST Special Publication 811, The NIST Guide for the use of the International System of Units
(In particular its Appendix B "Conversion Factors")
https://www.nist.gov/pml/special-publication-811
[VIM] JCGM 200:2012 and ISO/IEC Guide 99, International vocabulary of metrology - Basic and general concepts
and associated terms (VIM)
https://www.bipm.org/en/publications/guides/#vim
[ISO 8601-1] ISO 8601-1:2019 (First edition) Date and time — Representations for information interchange —
Part 1: Basic rules
https://www.iso.org/standard/70907.html
SysML v1 was specified as a profile of the Unified Modeling Language v2 [UML]. SysML v2, on the other hand, is
specified as a metamodel extending the Kernel metamodel from the Kernel Modeling Language [KerML]. In order
to facilitate the transition from SysML v1 to SysML v2, this standard also specifies a formal transformation from
models using the SysML v1.7 profile of UML to models using the SysML v2 metamodel [SysML v1 to v2].
This document specifies the textual and graphical concrete syntax, abstract syntax, and semantics for SysML v2.
The SysML v2 textual notation (see 8.2.2 ) and the SysML v2 graphical notation (see 8.2.3 ) provide the concrete
syntax representation of the SysML v2 abstract syntax (see 8.3 ). The SysML v2 abstract syntax extends the Kernel
abstract syntax, providing specialized constructs for modeling systems (as shown in Fig. 1 ). Further, the Systems
Library (see 9.2 ) is a model library that extends the Kernel Library to provide the semantic specification for SysML
v2 (see 8.4 ; see also [KerML] on the use of model libraries for semantic specification). Finally, SysML v2 provides
an additional set of Domain Libraries (see 9.4 and following) to provide a set of reference models in various
domains important to systems modeling (such as Analysis and Quantities and Units).
• Clause 7 describes SysML from a user point of view. Its subclauses describe the modeling constructs in
SysML, including for each a general overview, related abstract syntax diagrams and a description of the
textual and graphical notation. The overviews in this clause should be considered informative. The
abstract syntax and notation subclauses, however, are normative, including descriptions of the processing
of the textual notation and its relationship to the graphical notation and the abstract syntax.
• Clause 8 provides the normative specification of the metamodel that defines the SysML language. This
includes the concrete syntax (textual and graphical notations), the abstract syntax and the semantics for the
language. The SysML abstract syntax and semantics are formally extensions of the Kernel abstract syntax
and semantics provided by KerML (as discussed in 6.1 ). However, this clause does not cover details of
the Kernel metamodel, which are included by normative reference to the KerML specification [KerML].
• Clause 9 specifies a set of model libraries defined in SysML itself. The Systems Library extends the
Kernel Library from [KerML] in order to provide systems-modeling-specific semantics to SysML
language constructs. The Domain Libraries provide domain-specific models on which users can draw
These clauses are followed by informative Annex A , which presents an example model using the SysML language
as defined in this specification to illustrate how the language features can be used to model a system.
In addition, Clause 10 of [KerML] on Model Interchange is included by reference as a normative part of this
specification in order to define allowable methods for interchanging SysML models.
6.3 Acknowlegements
The primary authors of this specification document and the syntactic and semantic models defined in it are:
The specification was formally submitted for standardization by the following organizations:
• 88Solutions Corporation
• Dassault Systèmes
• GfSE e.V.
• IBM
• INCOSE
• Intercax LLC
• Lockheed Martin Corporation
• MITRE
• Model Driven Solutions, Inc.
• PTC
• Simula Research Laboratory AS
• Thematix Partners LLC
However, work on the specification was also supported by over 200 people in over 80 organizations that participated
in the SysML v2 Submission Team (SST), by contributing use cases, providing critical review and comment, and
validating the language design. The following individuals had leadership roles in the SST:
The specification was prepared using CATIA No Magic modeling tools and the OpenMBEE system for model
publication (http://www.openmbee.org), with the invaluable support of the following individuals:
The following individuals made significant contributions to the SysML v2 pilot implementation developed by the
SST in conjunction with the development of this specification:
This clause provides an informative description of all these language concepts in their context of use in SysML.
Clause 8 gives the full definition of the SysML metamodel, which is the normative specification for implementing
the language. In contrast, the description in this clause focuses on how the various constructs of the language are
used, along with the Systems Model Library (see 9.2 ), to construct models. While non-normative, it is intended to
be precise and consistent with the normative specification of the language.
• Elements and relationships that define the basic graph structure of a model (see 7.2 ).
• Dependencies between modeling elements (see 7.3 ).
• Annotations for attaching metadata to a model, including comments and textual representations (see 7.4 ).
• Namespaces that contain and name elements, and, particularly, packages used to organize the elements in
a model (see 7.5 ).
• Specialization of elements that specify types, including subclassification, subsetting, redefinition and
feature typing (see 7.6 ).
• Expressions can be used to specify calculations, case results, constraints and formal requirements. The full
KerML expression sub-language is available in SysML, as described in the KerML specification. The
description of this sub-language is not repeated in the SysML specification document.
The modeling constructs specific to SysML, as specified in subclauses 7.6 through 7.26 , are built on the
KerML foundation, and cover the following areas:
It should be noted that SysML does not contain specific language constructs called system, subsystem, assembly,
component, and many other commonly used terms. An entity with structure and behavior in SysML is represented
simply as a part (see 7.11 ). The language provides straightforward extension mechanisms to specify terminology
that is appropriate for the domain of interest.
Elements are the constituents of a model. Some elements represent relationships between other elements, known as
the related elements of the relationship. One of the related elements of a relationship may be the owning related
The owned relationships of an element are all those relationships for which the element is the owning related
element. The owned elements of an element are all those elements that are owned related elements of the owned
relationships of the element (notice the extra level of indirection through the owned relationships). The owning
relationship of an element (if any) is the relationship for which the element is an owned related element (of which
the element can have at most one). The owner of an element (if any) is the owning related element of the owning
relationship of the element (again, notice the extra level of indirection through the owning relationship).
The deletion rules for relationships imply that, if an element is deleted from a model, then all its owned relationships
are also deleted and, therefore, all its owned elements. This may result in a further cascade of deletions until all
deletion rules are satisfied. An element that has no owner acts as the root element of an ownership tree structure,
such that all elements and relationships in the structure are deleted if the root element is deleted. Deleting any
element other than the root element results in the deletion of the entire subtree rooted in that element.
Graphically, non-relationship elements are generally represented using a box-like shape or other icon, while
relationships are shown using lines connecting the symbols for the related elements. However, in some cases,
additional shapes may be attached to relationship lines in order to present additional information. The specific
conventions for such graphical notations are covered in subsequent subclauses.
7.2.2 Elements
Various specific kinds of model elements in SysML are described in subsequent subclauses. However, there are
certain concepts that apply to all model elements.
Every element has a unique identifier known as its element ID. The properties of an element can change over its
lifetime, but its element ID does not change after the element is created. An element may also have additional
identifiers, its alias IDs, which may be assigned for tool-specific purposes. The SysML notation, however, does not
have any provision for specifying element or alias IDs, since these are expected to be managed by the underlying
modeling tooling. Instead, an element can be given a name and/or a short name, and it can also have any number of
alias names relative to one or more namespaces (see 7.5 ).
In most cases, an element is declared using a keyword indicating the kind of element it is (e.g., part def or
attribute). The declaration of an element may also specify a short name and/or name for it, in that order. The
short name is distinguished by being surrounded by the delimiting characters < and >.
While the language makes no formal distinction between names and short names, the intent is that the name of an
element should be fully descriptive, particularly in the context of the definition of the element, while the short name,
if given, should be an abbreviated name useful for referring to the element. Note also that it is not required to specify
either a name or a short name for an element. However, unless at least one of these is given, it is not possible to
reference the element using the textual notation (though it is still possible to show it in relationships on graphical
diagrams).
Names and short names can contain essentially any printable characters (and certain control characters). However,
when written in the textual notation, they must be represented with a specific lexical structure, which has two
variants.
1. A basic name is one that can be lexically distinguished in itself from other parts of the textual notation.
The initial character of a basic name must be a lowercase letter, an uppercase letter or an underscore. The
remaining characters of a basic name can be any character allowed as an initial character or any digit.
2. An unrestricted name provides a way to represent a name that contains any character. It is represented as a
non-empty sequence of characters surrounded by single quotes. The name consists of the characters within
the single quotes – the single quotes are not included as part of the represented name. The characters
within the single quotes may not include non-printable characters (including backspace, tab and newline).
However, these characters may be included as part of the name itself through use of an escape sequence.
In addition, the single quote character or the backslash character may only be included within the name by
using an escape sequence.
'+'
'circuits in line'
'On/Off Switch'
'Ångström'
An escape sequence is a sequence of two text characters starting with a backslash as an escape character,
which actually denotes only a single character (except for the newline escape sequence, which represents
however many characters is necessary to represent an end of line in a specific implementation). See [KerML,
8.2.2.3] for a complete description of unrestricted names and escape sequences.
In addition to its declaration, the representation for an element may also list other elements owned by the containing
element. In the textual notation, such owned elements are shown represented as a body delimited by curly braces
{...}, particularly when the owning element is a namespace (see 7.5 ). In the graphical notation, owned elements
may be shown in compartments within the symbol representing the owning element, particularly when the owning
element is a package, definition or usage (see 7.5 and 7.6.1 ).
7.2.3 Relationships
A relationship is a kind of element that relates two or more other elements. Some relationships are constrained to
have exactly two related elements (i.e., binary relationships) while others may have more. The related elements of
relationships are ordered. A relationship may designate certain of its related elements as sources with the rest being
targets. In this case, the relationship is said to be directed from the sources to the targets. An undirected relationship
simply designates all its related elements to be targets, with no source elements.
A relationship may also be the source or target of other relationships. In particular, a relationship may be annotated
by being the target of an annotation relationship (see 7.4 ). In some cases, the annotating element may be owned by
the annotated relationship via the annotation relationship, particularly in the case of a documentation comment (see
8.2.2.4.2 ).
7.3 Dependencies
7.3.1 Dependencies Overview
Metamodel references:
A dependency is a kind of relationship between any number of client (source) and supplier (target) elements. This
implies that a change to a supplier element may result in a change to a client element. Dependencies can be useful
for representing relationships between elements in an abstract way. For example, a dependency can be used to
dependency Package2
Dependency to Package1;
dependency Package1,
Dependency - nary Package2
to Package3, Package4;
dependency Use
from 'Application Layer' to 'Service Layer';
A dependency declaration may also optionally have a body containing any annotating elements owned by the
dependency via annotation relationships (see 7.4 ).
7.4 Annotations
7.4.1 Annotations Overview
Metamodel references:
An annotating element is an element that is used to provide additional information about other elements. An
annotation is a relationship between an annotating element and an annotated element that is being described. An
annotating element can annotate multiple annotated elements, and each element can have multiple annotations.
A comment is one kind of annotating element that is used to provide textual descriptions about other elements.
Comments can be members of namespaces and, therefore, can be named. Such member comments may be about the
namspace that owns them, or they may be about different elements. Documentation is a distinguished kind of
comment used to document the annotated element. Documentation comments always annotate a single element,
which is their owning element.
A textual representation is an annotating element whose textual body provides a representation of the annotated
element in a specifically named language. This representation may be in the SysML textual notation or it may be in
another language. If the named language is machine-parsable, then the body text should be legal input text as
defined for that language. In particular, annotating a SysML model element with a textual annotation in a language
other than SysML can be used as a semantically "opaque" element specified in the other language.
It is also possible to annotate elements with user-defined metadata, allowing both syntactic and semantic extension
of SysML. This capability is described in 7.26 .
comment Comment1
Comment /*This is a comment.*/
doc /*This is
Documentation documentation.*/
doc Document1
Documentation /*This is
documentation.*/
comment about
part1::attribute1
Annotation /* The annotated element
* is attribute1. */
doc
Documentation /*This is a
Compartment documentation
*compartment.*/
If the comment is an owned member of a namespace (see 7.5 ), then the explicit identification of annotated elements
can be omitted, in which case the annotated element is implicitly the containing namespace. Further, in this case, if
no short name or name is given for the comment, then the comment keyword can also be omitted.
package P {
comment C /* This is a comment about P. */
A locale can also be specified for a comment, using the keyword locale followed by the locale string, placed
immediately before the comment body (whether or not the comment keyword is used). The locale identifies the
language of the body text and, optionally, the region and/or encoding. The format is
language[_territory][.codeset][@modifier] (conformant to [ISO15897]).
A documentation comment is notated similarly to a regular comment, but using the keyword doc rather than
comment. The documenting element of documentation is always the owning element of the documentation.
part X {
doc X_Comment
/* This is a documentation comment about X. */
doc /* This is more documentation about X. */
}
When a comment is written in the textual notation, the actual body text of the comment is extracted from the lexical
comment body according to the rules given in the KerML specification [KerML, 8.2.3.3.2]. The body text of a
comment can include markup information (such as HTML), and a tool may graphically display such text as rendered
according to the markup. However, marked up "rich text" for a comment is stored in the comment body in plain text
including all mark up text, with all line terminators and white space included as entered, other than what is removed
according to the rules referenced above.
part def C {
attribute x: Real;
assert x_constraint {
rep inOCL language "ocl"
/* self.x > 0.0 */
}
}
action def setX(c : C, newX : Real) {
language "alf"
/* c.x = newX;
* WriteLine("Set new x");
The lexical comment text given for a textual representation is processed as for regular comment text, and it is the
result after such processing that is the textual representation body expected to conform to the named language.
Note. Since the lexical form of a comment is used to specify the textual representation body, it is not possible to
include comments of a similar form in the body text.
The language name in a textual representation is case insensitive. The name can be of a natural language, but will
often be for a machine-parsable language. In particular, there are recognized standard language names.
If the language is "sysml", then the body of the textual representation must be a legal representation of the
represented element in the SysML textual notation. A tool can use such a textual representation to record the original
SysML notation text from which an element is parsed. Other standard language names that can be used in a textual
representation include "kerml", "ocl", and "alf", in which case the body of the textual representation must be
written in the Kernel Modeling Language [KerML], Object Constraint Language [OCL] or the Action Language for
fUML [Alf], respectively. (This is the same set of standard language names as in [KerML, 7.2.4.3, 8.3.2.3], with the
addition of "sysml".)
However, for any other language than "sysml", the SysML specification does not define how the body text is to be
semantically interpreted as part of the model being represented. An element with no other definition than a textual
representation in a language other than SysML is essentially a semantically "opaque" element specified in the other
language. Nevertheless, a conforming SysML tool may (but is not required to) interpret such an element consistently
with the specification of the named language.
Metamodel references:
A namespace is a kind of element that can contain other elements and provide names for them. The elements
contained in a namespace are referred to as its member elements. Membership is a kind of relationship that relates a
namespace to its members. A membership relationship can specify the name by which its member element is known
relative to the containing namespace and whether the element membership is visible outside the namespace or not
(see 7.5.2 ).
An element may be owned via its membership in a namespace. When a namespace is deleted, all such owned
members will also be deleted. An element may also have a membership in a namespace without being owned by the
namespace. In this case, the membership may introduce an alias name for the element relative to the namespace.
Note that it is possible for an element to have both owning and non-owning memberships with the same namespace,
but it can have at most one owning membership across all namespaces.
An import relationship allows one namespace to import memberships from another namespace (see 7.5.3 ). The
member elements from imported memberships become (unowned) members of the importing namespace in addition
to being members of the imported namespace. In particular, this allows members of the imported namespace to be
referenced in textual notations within the scope of the importing namespace without having to qualify the member
names with the name of the imported namespace. An import can also be recursive, which means that, in addition to
A package is a kind of namespace that is used solely as a container for other elements to organize the model. In
addition, a package has the capability to filter imported elements based on certain conditions (see 7.5.4 ), usually
defined in terms of the metadata provided by annotations of those elements (see 7.4 and 7.26 ). Only elements that
meet all filter conditions actually become imported members of the package. Together, recursive import and filtering
provide a general capability for specifying that a package automatically contain a set of elements identified from
across a model by their metadata.
In addition to packages, all kinds of SysML definitions and usages are also namespaces (see 7.6 and following
subclauses). All rules discussed generically for namespaces in this subclause 7.5 apply generically to packages,
definitions and usages (even though the examples in this subclause are given using packages).
In general, an element may have different names in different namespaces, and the same name may identify different
elements relative to different namespaces. Therefore, to unambiguously identify an element by name, the element
name must be qualified by the namespace relative to which the element name is to be resolved. Such a qualified
name is notated by specifying a name to identify the namespace, followed by the symbol ::, followed by the
element name. Since the namespace name may also be qualified, a qualified name is most generally a sequence of
segment names separated by :: punctuation, of which all but the last must identify namespaces. An unqualified
name can be considered the degenerate case of a qualified name with just one element name in its sequence, for
which the namespace to be used is implicit.
Note that qualified names do not appear in the abstract syntax. Instead, the abstract syntax representation contains
actual references to the identified elements. Name resolution is the process of determining the element that is
identified by a qualified name. An unqualified name used within the body of a namespace is resolved in the context
of that namespace and, potentially, other namespaces in which the first namespace is lexically nested, taking into
account imported (see 7.5.3 ) and inherited (see 7.6 ) memberships. A qualified name with more than one segment is
resolved by recursively resolving the name of the qualifying namespace and then resolving the element name in that
context. The full name resolution process is specified in [KerML, 8.2.3.5].
package Package1 {
Package with owned package Package2;
package }
package Package1 {
package Package 2;
Package with owned part def Part2;
members part part2 : Part2;
}
package Package1 {
package Package2;
Package with alias alias Package2Alias
member (unowned) for Package2;
}
package Package1 {
package Package2;
Package with alias alias Package2Alias
member (unowned) for Package2;
}
package Package1 {
public import
Package with
Package2::*;
imported package private import
(nested notation) Package3::*;
}
package Package0 {
Membership (owned package Package1;
member) }
package Package0 {
package Package1;
Membership
alias Package1Alias
(unowned member for Package1;
with alias name) }
Import (recursive)
Note:
- no star is element
import package Package2 {
- single star is private import
package import Package0::Package1::**;
(content of package) }
- double star is
recursive including
outer package
package Package1 {
Package with /* members */
compartment }
package Package1 {
part def PartDef1;
part def PartDef2;
Package with
part part1 :
members PartDef1;
compartment part part2 :
PartDef2;
}
package Configurations {
attribute def ConfigEntry {
attribute key: String;
attribute value: String;
In general, declaring an element within the body of a namespace denotes that the element is an owned
member of the namespace—that is, that there is an owning membership relationship between the namespace and the
member element. The visibility of the membership can be specified by placing one of the keywords public,
protected or private before the public element declaration. If the membership is public (the default), then it is
visible outside of the namespace. If it is private, then it is not visible. For namespaces other than definitions and
usages, protected visibility is equivalent to private. For definitions and usages, protected visibility has a
special meaning relating to member inheritance (see 7.6 ).
package P {
public part def A;
private attribute def B;
part a : A; // public by default
}
An alias for an element is a non-owning membership of the element in a namespace, which may or may not be the
same namespace that owns the element. An alias name or short name is determined only relative to its membership
in the namespace, and can therefore be different than the name or short name defined on the element itself. Note that
the same element may be related to a namespace by multiple alias memberships, allowing the element to have
multiple, different names relative to that namespace.
An alias is declared using the keyword alias followed by the alias short name and/or name, with a qualified
name identifying the element given after the keyword for. An alias declaration may also optionally have a body
containing annotating elements for the alias (see 8.2.2.4.1 ). The visibility of the alias membership can be specified
as for an owned member.
package P1 {
item A;
item B;
alias <C> CCC for B {
doc /* Documentation of the alias. */
}
private alias D for B;
}
A comment (see 7.4 ), including documentation, declared within a namespace body also becomes an owned member
of the namespace. If no annotated elements are specified for the comment (with an about clause), then, by default,
the comment is considered to be about the containing namespace.
package P9 {
item A;
comment Comment1 about A
/* This is a comment about item A. */
comment Comment 2
/* This is a comment about package P9. */
doc P9_Doc
/* This is documentation about package P9. */
}
An owned import of a Namespace is denoted using the keyword import followed by a qualified name, optionally
suffixed by "::*" and/or "::**".
If the qualified name in an import does not have any suffix, then this specifies a membership import whose
imported membership is identified by the qualified name. Such an import results in the identified membership
becoming an imported membership of the namespace owning the import. That is, the member element of this
membership becomes an imported member of the importing namespace. Note that the imported membership may be
an alias membership (see 7.5.2 ), in which case the element is imported with that alias name.
package P2 {
private import P1::A;
private import P1::C; // Imported with name "C".
package Q {
import C; // "C" is re-imported from P2 into Q.
}
}
If the qualified name in an import is further suffixed by "::*", then then this specifies a namespace import in
which the qualified name identifies the imported namespace. In this case, all visible memberships of the imported
namespace of the import become imported memberships of the importing namespace.
package P3 {
// Memberships A, B and C are all imported from P1.
private import P1::*;
}
If the declaration of either a membership or namespace import is further suffixed by "::**", then the import
is recursive. Such an import is equivalent to importing memberships as described above for either an imported
membership or namespace, followed by further recursively importing from each imported member that is itself a
namespace, with the following limitations:
1. Recursive import only continues with a namespace that is either the imported element of an original
recursive membership import or an owned member of an imported namespace.
2. Memberships inherited via implicit specializations (of any kind) are not imported by recursive imports
(see also 7.6.8 on Implicit Specialization).
package P4 {
item A;
item B;
package Q {
item C;
}
}
package P5 {
private import P4::**;
// The above recursive import is equivalent to all
// of the following taken together:
// private import P4;
// private import P4::*;
// private import P4::Q::*;
}
package P6 {
private import P4::*::**;
// The above recursive import is equivalent to all
// of the following taken together:
The visibility of an import is always shown explicitly by placing the keyword private, protected, or public
before the import declaration. If the import is private (which is the default in the abstract syntax), then the
imported memberships become private relative to the importing namespace. A visibility of protected is the same
as private, unless the importing namespace is a definition or usage, in which case the imported memberships are
also visible in all specializations of the definition or usage (see also 7.6 on inheritance). If the import is public,
then all the imported memberships become public for the importing namespace. An import declaration may also
optionally have a body containing annotating elements owned by the import (see 8.2.2.4.1 ).
package P7 {
public import P1::A {
/* The imported membership is visible outside P7. */
}
A package may also contain filter conditions that filter the imports for the package. A filter condition is a Boolean-
valued, model-level evaluable expression (see [KerML. 7.4.9]) declared using the keyword filter followed by a
Boolean-valued, model-level evaluable expression (see [KerML. 7.4.9]). The filter conditions of a package are
evaluated on the member elements of all memberships that are potentially to be imported into the package (see 7.5.3
). Only those memberships that for which all the filter conditions evaluate to true are actually imported.
Filter conditions can, for example, be used to select which elements to import into a package based on metadata
applied to those elements (see also 7.26 on metadata).
package ApprovalMetadata {
metadata def Approval {
attribute approved : Boolean;
attribute approver : String;
attribute level : Natural;
}
...
}
package DesignModel {
public import ApprovalMetadata::*;
part System {
@Approval {
approved = true;
approver = "John Smith";
level = 2;
}
}
...
}
package UpperLevelApprovals {
// This package imports all direct or indirect members
Note that a filter condition in a package will filter all imports of that package. That is why full qualification is used
for ApprovalMetadata::Approval in the example above, since an imported element of the ApprovalMetadata
package would be filtered out by the very filter condition in which the elements are intended to be used. This may be
avoided by combining one or more filter conditions with a specific import in a filter import declaration.
A filter import includes one or more filter conditions in the import declaration, listed after the imported membership
or namespace specification, each surrounded by square brackets [... ]. For such a filtered import, memberships are
imported, from that specific import, if and only if they satisfy all the given filter conditions.
package P8 {
private import Annotations::*;
package UpperLevelApprovals {
// Recursively import all annotation data types and all
// features of those types.
private import ApprovalMetadata::**;
The SysML package from the Systems Model Library (see 9.2.21 ) contains a complete model of the SysML
abstract syntax represented in SysML itself, and it publicly imports the KerML package from the Kernel Library
containing the Kernel abstract syntax model (see [KerML, 9.2.17]). When a filter condition is evaluated on an
element, abstract syntax metadata for the element can be tested as if the element had an implicit metadata usage (see
7.26 ) defined by the definition from the SysML package corresponding to the abstract syntax metaclass of the
element.
package PackageApprovals {
private import ApprovalMetadata::*;
private import SysML::*;
// This imports all part definitions from the DesignModel that have
// at least one owned part usage and have been marked as approved.
public import DesignModel::**[@PartDefinition and
@PartDefinition::ownedPart != null and
@Approval and
Approval::approved];
}
Note. Namespaces other than packages cannot have filter conditions (except for their special use in view definitions
and usages – see 7.25 ). However, any kind of namespaces may have filtered imports.
The declaration of a root namespace is implicit and no identification of it is provided in the SysML notation. Instead,
the content of a root namespace is given simply by the list of its top-level elements. For the purposes of model
interchange (see [KerML, Clause 10]), a single project may contain one or more root namespace, though there is no
syntax for defining a project in the SysML syntax.
While a root namespace has no explicit owner, it is considered to be within the scope of a single global namespace.
This global namespace may contain several root namespaces (such as those being managed as a project), and always
contains at least all of the KerML and SysML model libraries (see [KerML, Clause 9] and Clause 9 ). Any root
namespace within the global namespace may refer to the name of a top-level element of any other root namespace
using an unqualified name (since root namespaces are themselves never named).
If an import is owned by a root namespace, then the memberships imported by it are visible to and within all the top-
level elements of the root namespace. However, an import owned by a root namespace is required to be private,
so none of the imported memberships become globally visible outside of the root namespace. (This rule disallows
the "re-export" of the same element from multiple different root namespaces, which would cause ambiguity that
could complicate the resolution of unqualified, globally-visible names.)
The modeling capabilities of SysML facilitate reuse in different contexts. Definition and usage elements provide a
consistent foundation for many SysML language constructs to provide this capability, including attributes,
occurrences, items, parts, ports, connections, interfaces, allocations, actions, states, calculations, constraints,
requirements, concerns, cases, analysis cases, verification cases, use cases, views, viewpoints and renderings.
In general, a definition element classifies a certain kind of element (e.g., a classification of attributes, parts, actions,
etc.). A usage element is a usage of a definition element in a certain context. A usage must always be defined by at
least one definition element that corresponds to its usage kind. For example, a part usage is defined by a part
definition, and an action usage is defined by an action definition. If no definition is specified explicitly, then the
usage is defined implicitly by the most general definition of the appropriate kind from the Systems Library (see 9.2
). For example, a part usage is implicitly defined by the most general part definition Part from the model library
package Parts.
A definition may have owned usage elements nested in it, referred to as its features. A usage may also have nested
usage elements as features. In this case, the context for the nested usages is the containing usage. A simple example
is illustrated by a parts tree that is defined by a hierarchy of part usages. A vehicle usage defined by
Vehicle could contain part usages for engine, transmission, frontAxle, and rearAxle. Each part usage has
its own (implicit or explicit) part definition.
A feature relates instances of its featuring definition or usage to instances of its definition. For example, a mass
feature with definition MassValue, featured by the definition Vehicle, relates each specific instance of Vehicle
to the specific MassValue for that vehicle, known as the value of the mass feature of the vehicle.
A usage can also be contained directly in an owning package. In this case, the usage element is considered to be an
implicit feature of the most general kernel type Anything. That is, a package-level usage is essentially a generic
feature that can be applied in any context, or further specialized in specific contexts (as described under
Specialization below).
A usage may have a multiplicity that constrains its cardinality, that is, the allowed number of values it may have for
any instance of its featuring definition or usage. The multiplicity is specified as a range, giving the lower and upper
bound expressions that are evaluated to determine the lower and upper bounds of the specified range. The bounds
must be natural numbers. The lower bound must be finite, but the upper bound may also have the infinite value *.
An upper bound value of * indicates that the range is unbounded, that is, it includes all numbers greater than or
equal to the lower bound value. If a lower bound is not given, then the lower bound is taken to be the same as the
upper bound, unless the upper bound is *, in which case the lower bound is taken to be 0. For example, a Vehicle
definition could include a usage element called wheels with multiplicity 4, meaning each Vehicle has exactly four
wheels. A less restrictive constraint, such as a multiplicity of 4..8, means each Vehicle can have 4 to 8 wheels.
A usage may be referential or composite. A referential usage represents a simple reference between a featuring
instance and one or more values. A composite usage, on the other hand, indicates that the related instance is integral
to the structure of the containing instance. As such, if the containing instance is destroyed, then any instances related
to it by composite usages are also destroyed. For example, a Vehicle would have a composite usage of its
wheels, but only a referential usage of the road on which it is driving.
Note. The concept of composition only applies to occurrences that exist over time and can be created and destroyed
(see 7.9 ). Attribute usages are always referential and any nested features of attributes definitions and usages are also
always referential (see 7.7 ).
Specialization
Definition and usage elements can be specialized using several different kinds of specialization relationships.
A definition is specialized using the subclassification relationship. The specialized definition inherits the features of
the more general definition element and can add other features. For example, if Vehicle has a feature called fuel,
that is defined by Fuel, and Truck is a specialized kind of Vehicle, then Truck inherits the feature fuel. An
inherited feature can be subsetted or redefined as described below. The Truck definition can also add its own
features such as cargoSize.
A definition can specialize more than one other definition, in which case the definition inherits the features from
each of the definitions it specializes. All inherited features must have names that are distinct from each other and
any owned features of the specializing definition. Name conflicts can be resolved by redefining one or more of the
otherwise conflicting inherited features (see below).
A usage inherits the features from its definition in the same way that a specialized definition inherits from a more
general definition element. For example, if a part usage vehicle is defined by a part definition Vehicle, and
Vehicle has a mass defined by MassValue, then vehicle inherits the feature mass. In some cases, a usage may
have more than one definition element, in which case the usage inherits the features from each of its definition
A usage can be specialized using the subsetting relationship. A subsetting usage has a subset of the values of the
subsetted usage. The subsetting usage may further constrain its definition and multiplicity. For the example
above, Truck inherits the feature wheels with multiplicity 4..8 from Vehicle. The part usage truck further
inherits wheels with multiplicity 4..8 from Truck. The part usage truck can subset wheels by defining
frontLeftWheel, frontRightWheel, rearLeftwheel1, and rearRightWheel1, each with multiplicity 1..1,
together giving the minimum total multiplicity of 4. The truck usage can then define additional subsets of wheels,
such as rearLeftwheel2, and rearRightwheel2, with multiplicity 0..1, indicating they are optional.
Redefinition is a kind of subsetting. While, in general, a subsetting usage is an additional feature to the subsetted
usage, a redefining usage replaces the redefined usage in the context of redefining usage. For the example above,
Vehicle contains a feature called fuel that is defined by Fuel. Truck inherits fuel from Vehicle. The part
usage truck would then normally inherit fuel as defined by Fuel from Truck. However, truck can instead
redefine fuel to restrict its definition to DieselFuel, a subclassification of Fuel. In this case, the new redefining
feature replaces the fuel feature that would otherwise be inherited, meaning that the fuel of the truck part must
be defined by DieselFuel.
A usage, particularly one with nested usages, can be reused by subsetting it. For example, subsetting the part usage
vehicle is analogous to specializing the part definition Vehicle. Suppose vehicle1 is a part usage that subsets
vehicle, with the parts-tree decomposition described above. This enables vehicle1 to inherit the features and
structure of vehicle. The part usage vehicle1 can be further specialized by adding other part usages to it, such as
a body and chassis, and it can redefine parts from vehicle as needed. For example, vehicle1 may redefine
engine to be a 4-cylinder engine. The original part vehicle remains unchanged, but vehicle1 is a unique
design configuration that specializes vehicle. Other part usages, such as vehicle2, could be created in a similar
way to represent other design configurations.
Note. If the part definition Vehicle is modified, the modification will propagate down through the specializations
described above. However, it is expected that if Vehicle is baselined in a configuration management tool, then a
change to Vehicle is a new revision, and it is up to the modelers to determine whether to retain the previous
version of Vehicle or move to the next revision.
Variability
Variation and variant are used to model variability typically associated with a family of design configurations. A
variation (sometimes referred to as a variation point) identifies an element in a model that can vary from one design
configuration to another. One example of a variation is an engine in a vehicle. For each variation, there are design
choices called variants. For this example, where the engine feature is designated as a point of variation, the design
choices are a 4-cylinder engine variant or a 6-cylinder engine variant.
Variation can apply to any kind of definition or usage in the model (except for enumeration, see 7.8 ). The variation
element then specifies all possible variants (i.e., choices) for that variation point. For example, the specified variants
for the engine variation are the 4-cylinder engine and the 6-cylinder engine.
Variants are usage elements. If the containing variation is a definition, then each of its variants is implicitly defined
by the variation definition. If the containing variation is a usage, then each of its variants implicitly subsets the
variation usage. For example, the 4-cylinder engine and the 6-cylinder engine are subsets of all possible
engines.
Variations can be nested within other variations, to any level of nesting. For example, the 6-cylinder engine
variant may in turn contain cylinders with a variation for bore diameter that includes variants for small-bore
diameter and large-bore diameter. Alternatively, the bore diameter variation could be applied more
generally to the cylinder of engine, enabling both the 4-cylinder engine and the 6-cylinder engine to
have this variation point.
Variations and variants are used to construct a model that is sometimes referred to as a superset model,
which includes the variants to configure all possible design configurations. A particular configuration is selected by
selecting a variant for each variation. SysML provides validation rules that can evaluate whether a particular
configuration is a valid configuration based on the choices and constraints provided in the superset model.
Variability modeling in SysML can augment other external variability modeling applications, which provide robust
capabilities for managing variability across multiple kinds of models such as CAD, CAE, and analysis models, and
auto-generating the variant design configurations based on the selections.
Note. The approach to variability modeling in SysML is intended to align with industry standards such as ISO/IEC
26580:2021 Software and systems engineering — Methods and tools for the feature-based approach to software and
systems product line engineering.
Graphical Compartments
The graphical notation for a definition or usage may include one or more compartments, which show member
elements (if any) using textual or graphical notation. In the graphical symbols in all Representative Notation tables
in Clause 7 , the term compartment stack is a placeholder for any valid compartment for the model element.
package P {
alias PartDefAlias1
Name Compartment for PartDef1;
- Definition }
package Q {
alias PartDefAlias2
for PartDef1;
}
package Package1 {
Name Compartment package Package2 {
- Definition part def PartDef3;
(qualified name) }
}
Name Compartment
abstract part def
- Definition PartDef1;
(abstract)
Name Compartment
variation part def
- Definition PartDef1;
(variation)
part part1 {
part part2 {
Name Compartment part part3 :
- Usage PartDef3;
}
}
Name Compartment
No textual notation.
- Inherited Usage
or
part def Part2S
specializes Part2 {
...
}
or
part part1
defined by Part1 {
...
}
or
part part1S
subsets part1 {
...
}
or
part part1S : Part1S [1]
subsets part1 {
part part2R : Part2R
redefines part2;
}
variation item
itemChoice : ItemDef {
variant part1;
variant item1;
}
or
or variation item
itemChoice : ItemDef {
variant part
references part1;
Variants variant item
Compartment references item1;
}
or or
variation item
itemChoice : ItemDef {
variant part part1 :
Part1;
variant item item1 :
Item1;
}
variation part
partChoice : PartDef {
variant part part1 :
Variant Parts PartDef1;
Compartment variant part part2 :
PartDef2;
}
7.6.2 Definitions
There is a basic common notation for all kinds of definitions, as described here in subclause 7.6 , with additional
special notations for certain kinds of definitions described in the later subclauses specifically related to those kinds
of definitions. As a kind of Namespace (see 7.5 ), the representation of a definition includes a declaration and a
body.
A definition is declared using a keyword specific to the kind of definition (e.g., item, part, action, etc.) followed
by the keyword def. One or more owned subclassifications may also optionally be included in the declaration of a
definition by giving a comma-separated list of qualified names of the general definitions after the keyword
specializes (or the symbol :>). A definition is specified as abstract by placing the keyword abstract before its
kind keyword.
A definition that is not abstract is called a concrete definition. Declaring a definition to be abstract means that all
instances of the definition must also be instances of at least one concrete definition or usage that directly or
indirectly specializes the abstract definition.
The body of a definition is specified generically as for any namespace. In the textual notation, this is done by listing
the members and imports between curly braces {... } (see 7.5 ), or alternatively by a semicolon ; if the definition
has no members or imports. Usages declared within the body of a definition are owned usages that specify features
of the Definition.
7.6.3 Usages
There is a basic common notation for all kinds of usages, as described here in subclause 7.6 , with additional special
notations for certain kinds of usage described in the later subclauses specifically related to those kinds of usages. As
a kind of namespace (see 7.5 ), the representation of a usage includes a declaration and a body.
A usage is declared using a keyword specific to the kind of usage (e.g., item, part, action, etc.). One or more
owned specializations may also optionally be included in the declaration of a usage. There are three kinds of
specializations relevant to usages:
1. Feature typings specify the definitions of a usage (also known as its types). Textually, they are declared by
giving a comma-separated list of the qualified names of the definition elements after the keyword
defined by (or the symbol :). The definitions given must be consistent with the kind of usage being
defined.
2. Subsettings specify other usages subsetted by the owning usage. Textually, they are declared by giving a
comma-separated list of the qualified names of the subsetted usages after the keyword subsets (or the
symbol :>).
3. Redefinitions specify other usages redefined by the owning usage. Textually, they are declared by giving a
comma-separated list of the qualified names of the redefined usages after the keyword redefines (or the
symbol :>>). (Note that redefinition is a kind of subsetting, so the owned redefinitions of a usage will be a
subset of the owned subsettings in the abstract syntax.)
// Equivalent declaration:
item x defined by A defined by B subsets f redefines g;
The multiplicity of a usage can be given in square brackets [... ] after the name part of the declaration of a usage (if
it is named) or after one of the owned specialization clauses in the declaration (but, in all cases, only one multiplicity
may be specified). (This allows for a notation style consistent with previous modeling languages, in which the
multiplicity is always placed after the declared type.)
A multiplicity range is written in the form [lowerBound..upperBound], where each of lowerBound and
upperBound is either a literal or the identification of a usage. Literals can be used to specify a multiplicity range
with fixed lower and/or upper bounds. The values of the bounds of a multiplicity range must be natural numbers. If
only a single bound is given, then the value of that bound is used as both the lower and upper bound of the range,
unless the result is the infinite value *, in which case the lower bound is taken to be 0. If two bounds are given, and
the value of the first bound is *, then the meaning of the multiplicity range is not defined.
A multiplicity may be optionally followed by one or both of the following keywords (in either order), or they can be
used without giving an explicit muiltiplicity, at any place in the declaration a multiplicity would be allowed.
• nonunique – If a usage is non-unique, then the same value may appear more than once as a value of the
usage. The default is that the usage is unique, meaning that no two values of the usage may be the same.
If a multiplicity is not declared for a usage, then the usage inherits the multiplicity constraints of any other usages it
subsets or redefines. If no tighter constraint is inherited, the effective default is the most general multiplicity
[0..*]. However, a tighter default of [1..1] is implicitly declared for the usage if all of the following conditions
hold:
1. The usage is an attribute usage, an item usage (including a part usage, except if it is a connection usage),
or a port usage.
2. The usage is owned by a definition or another usage (not a package).
3. The usage does not have any explicit owned subsettings or owned redefinitions.
There are a number of additional properties of a usage that can be flagged by adding specific keywords to its
declaration. If present these are always specified in the following order, before the kind keyword in the usage
declaration.
1. in, out, inout – Specifies a directed usage with the indicated direction, which determines what things
are allowed to change its values relative to its featuring instance.
◦ in – Things "outside" the featuring instance. These usages identify things input to an instance.
◦ out – The featuring instance itself or things "inside" it. These usages identify things output by
an instance.
◦ inout – Both things "outside" and "inside" the featuring instance. These usages identify things
that are both input to and output by an instance.
2. abstract – Specifies that the usage is abstract. A usage that is not abstract is called a concrete usage.
Similarly to an abstract definition (see 7.6.2 ), declaring a usage to be abstract means that any value of the
usage must also be a value of some concrete usage that directly or indirectly specializes (subsets or
redefines) the abstract usage.
3. readonly – Specifies that the usage is read only. Values of read only usage are the same during the entire
existence of that featuring instance.
4. derived – Specifies that the usage is derived. Such a feature is typically expected to have a bound value
expression that completely determines its value at all times (see also 7.13.3 on binding a usage to a
value).
5. end – Specifies that the usage is an end feature of its owning definition or usage. See 9.2.6 for further
discussion on end features of connection definitions and usages.
6. ref – Specifies that the usage is referential. A usage that is not referential is composite. Values of a
composite usage, for each featuring instance, cannot exist after the featuring instance ceases to exist. This
only applies to values at the time the instance goes out of existence, not to other things that may have been
values of the usage before that, but are not any longer. (Note also that a directed usage is always
referential, whether or not the keyword ref is also given explicitly in its declaration.)
The body of a usage is specified generically as for any namespace. In the textual notation, this is done by listing the
members and imports between curly braces {... } (see 7.5 ), or alternatively by a semicolon ; if it has no members
or imports. Usages declared within the body of another Usage are owned (nested) usages that specify features of the
owning usage.
Certain other kinds of usages (such as perform action usages) specify an alternate effective name rule, as described
in the subclauses relevant to those usages (e.g., 7.16.6 describes the rule for perform action usages).
A feature chain is similar to a qualified name but, unlike a qualified name, the path of usages (features) in the chain
is recorded in the abstract syntax, not just the reference to the final usages. This means that different paths to the
same usage can be distinguished in the abstract syntax representation of a model. Feature chains can be used to
specify the target for most kinds of relationships involving usages, including subsetting and redefinition. However,
In general, when a textual notation is described as including the identification of a usage, this can be done by using
either a qualified name or a feature chain.
All usages declared within the body of a variation definition or usage are declared as variant usages by placing the
keyword variant at the beginning of their declarations. Variant usages may only be declared within a variation.
The kind of a variant usage must be consistent with the kind of its owning variation.
A non-variant usage can also be declared to act as a variant of a variation by not including a kind keyword in the
variant declaration and, instead, following the variant keyword with the identification of a separately declared
usage. Such a variant declaration may also optionally further constrain the variant usage by including a multiplicity
and/or further specializations.
The Systems Model Library (see 9.2 ), which is based on the KerML Kernel Semantic Library (see [KerML, 9.2]) is
a set of ontological SysML models that define the basic kinds of things relevant for systems modeling. The
semantics of definition elements in SysML is given by requiring that each such element (directly or indirectly)
specialize the corresponding base definition from the Systems Model Library (or base classifier from the Kernel
Semantic Library) corresponding to its kind.
At the highest level, every definition element must directly or indirectly specialize the most general classifier
Anything from the Base model in the Kernel Semantic Library (see [KerML, 9.2.2]). Specific kinds of definition
then have more specific requirements for what more specific base definition they must specialize. For example, an
attribute definition must specialize the base attribute definition AttributeValue from the Attributes model in
The Systems Model Library also includes a parallel hierarchy of base usages (or base features in the Kernel
Semantic Library). So, every usage element must directly or indirectly specialize (subset) the most general feature
things from the from the Base model in the Kernel Semantic Library. And specific kinds of usage then also have
more specific requirements for what more specific base usage they must specialize. For example, an attribute usage
must subset the base attribute usage attributeValues from the Attributes model in the Systems Model
Library, while a part usage must subset the base part usage parts from the Parts model. In general, each base
usage is defined by the corresponding base definition. E.g., the base usage parts is defined by the base definition
Part, so that every part usage is ultimately a direct or indirect usage of Part.
These and other semantic constraints are fully described in 8.4 . However, it is not generally necessary for a modeler
to explicitly satisfy these constraints when constructing a model. Rather, the violation of a semantic constraint
implies the need for a specific relationship, which may then be added to the model automatically by tooling (see also
[KerML, 8.4.2]). In particular, if a definition or usage, as explicitly declared, does not directly or indirectly
specialize the required base definition or usage, then the declaration is considered to include an implicit
subclassification or subsetting of the appropriate base definition or usage.
7.7 Attributes
7.7.1 Attributes Overview
Metamodel references:
An attribute definition defines a set of data values, such as numbers, quantitative values with units,
qualitative values such as text strings, or data structures of such values. An attribute usage is a usage of an attribute
definition. An attribute usage is always referential and any nested features of an attribute definition or usage must
also be referential (see also 7.6 on referential and composite usages).
The data values of an attribute usage are constrained to be in the range specified by its definition. The range of data
values for an attribute definition can be further restricted using constraints (see 7.19 ). An enumeration definition is
a specialized kind of attribute definition that further restricts the values of the data type to a discrete set of data
values (see 7.8 ).
Attribute usages can be defined by KerML data types as well as SysML attribute definitions. This allows them to be
typed by primitive data types from the Kernel Data Type Library (see [KerML, 9.3]), such as String, Boolean,
and numeric types including Integer, Rational, Real and Complex. The Kernel Data Type Library also includes
basic structured data types for collections.
Attribute usages representing quantities with units are defined using the SysML Quantities and Units Domain
Library or extensions of the elements in this library (see 9.8 ). The library provides base attribute definitions for
scalar, vector and tensor quantity values, along with other models that specify the full set of international standard
The values of an attribute usage are data values, whether primitive values like integers or structured values with
nested attributes, that do not themselves change over time. However, the owner of an attribute usage may be an
occurrence definition or usage (or a specialized kind of occurrence, such as an item, part or action). In this case, the
value of the attribute usage may vary over the lifetime of its owning occurrence, in the sense that it can have
different values at different points in time, reflecting the changing condition of the occurrence over time. (See also
the discussion in 7.9 .)
attribute def
AttributeDef1;
attribute attribute1 :
AttributeDef1;
{
attribute attribute1 :
Attribute1Def
Attributes [1..*]
Compartment ordered nonunique;
/* ... */
}
An attribute usage is always referential, whether or not the ref keyword (see 7.6.3 ) is used explicitly in its
declaration. The default multiplicity of an attribute usage is [1..1], under the conditions described in 7.6.3 . In
general, any kind of usage may be declared in the body of an attribute definition or attribute usage, but all such
usages shall be referential. (There are further restrictions on what can be nested in an enumeration definition – see
7.8 .)
The base attribute definition is AttributeValue from the Attributes library model (see 9.2.2 ), which is simply
an alias for the data type DataValue from the KerML Base library model (see [KerML, 9.2.2]). The base attribute
usage is attributeValues from the Attributes library model, which is simply an alias for the feature
dataValues from the KerML Base library model.
7.8 Enumerations
7.8.1 Enumerations Overview
Metamodel references:
An enumeration definition is a kind of attribute definition (see 7.7 ) whose instances are limited to specific set of
enumerated values. An enumeration usage is an attribute usage that is required to have a single definition that is an
enumeration definition.
An enumeration usage is restricted to only the set of enumerated values specified in its definition. Since an
enumeration definition is a kind of attribute definition, it can also be used to define a regular attribute usage. Even if
the attribute usage is not syntactically an enumeration usage, it is still semantically restricted to take on only the
values allowed by its enumeration definition.
An enumeration definition can specialize an attribute definition that is not itself an enumeration definition. In this
case, the enumerated values of the enumeration definition will be a subset of the attribute values of the specialized
attribute definition. Which enumerated values correspond to which attribute values may be specified by binding the
enumerated values to expressions that evaluate to the desired values of the specialized attributed definition (see also
7.13 on binding usages to values). In this case, the results of all the expressions must be distinct (typically they will
just be literals).
For example, an enumeration definition DiameterChoices may specialize the attribute definition LengthValue.
DiameterChoices may include literals that are equal to 60 mm, 80 mm, and 100 mm. An attribute usage called
cylinderDiameter can be defined by DiameterChoices, and its value can equal one of the three enumerated
values.
An enumeration definition may not specialize another enumeration definition. This is because the semantics of
specialization require that the set of instances classified by a definition be a subset of the instances of classified by
any definition it specializes. The enumerated values defined in an enumeration definition, however, would add to the
set of enumerated values allowed by any enumeration definition it specialized, which is inconsistent with the
semantics of specialization.
enum def
EnumerationDef1;
Enumeration enum def EnumerationDef1
Definition {
/* members */
}
An enumeration definition is declared as described in 7.6.2 , using the kind keyword enum, with the additional
restrictions described below. As a kind of attribute definition, an enumeration definition may generally subclassify
other attribute definitions or KerML data types. However, an enumeration definition must not subclassify another
enumeration definition. An enumeration usage is declared as described in 7.6.3 , using the kind keyword enum.
Any owned members declared in the body of an enumeration definition must be enumeration usages, which are the
enumerated values of the enumeration definition. An enumeration definition is always considered to be a variation
and its enumerated values are its variants. The keywords abstract and variation may not be used with an
enumeration definition. The declaration of an enumeration usage as an enumerated value of an enumeration
definition may not include the keyword variant nor any of the other property keywords given in 7.6.3 (i.e, any
direction keywords, abstract, derived, etc.).
Since the body of an enumeration definition may only declare enumeration usages, the declaration of an enumerated
value may omit the enum keyword. An enumerated usage declared as an enumerated value is considered to be
implicitly defined by its owning enumeration definition and, therefore, may not have any explicitly declared
definition other than that enumeration definition (and need not have any explicitly declared definition at all).
There are no special restrictions on the declaration of an enumeration usage outside the body of an enumeration
definition, other than as for an attribute usage in general (see 9.2.2 ), except that such an enumeration usage must be
explicitly defined by a single enumeration definition. As a kind of attribute usage, an enumeration usage is always
referential, whether or not ref is included in its declaration, and all the nested usages of an enumeration usage must
also be referential.
7.9 Occurrences
7.9.1 Occurrences Overview
Metamodel references:
An occurrence definition is a definition of a class of occurrences that have an extent in time and may have spatial
extent. An occurrence usage is a usage of an occurrence definition.
The extent of an occurrence in time is known as its lifetime, which covers the period in time from the occurrence's
creation to its destruction. An occurrence maintains its identity over its lifetime, while the values of its features may
change over time. The lifetime of an occurrence begins when the identity of the occurrence is established, and the
the lifetime ends when the occurrence loses its identity. For example, the lifetime of a car could begin when it leaves
the production-line, or when a vehicle identification number is assigned to the car. Similarly, the lifetime of a car
could end when the car is disassembled or demolished.
The performance of a behavior is also an occurrence that takes place over time. The lifetime of a behavior
performance begins at the start of the performance and ends when the performance is completed. Structural and
behavioral occurrences are often related. For example, a machine on an automobile assembly line, during its
lifetime, will repeatedly perform a behavioral task, each performance of which has its own respective lifetime,
which then affects the construction of some car being assembled on the line.
If an occurrence definition or usage has nested composite features, then those features must also be usages of
occurrence definitions (including the various specialized kinds of occurrences, such as parts, items and actions). If
an occurrence has values for any composite features at the end of its lifetime, then the lifetime of those composite
values must also end. However, if a composite suboccurrence is removed from its containing occurrence before the
end of the lifetime of the containing occurrence, then the former suboccurrence can continue to exist. For example,
if a wheel is attached to a car when the car is destroyed, then the wheel is also destroyed. However, if the wheel is
removed before the car is destroyed, then the wheel can continue to exist even after the car is destroyed. (See also
7.6 on referential and composite usages.)
The lifetime of an occurrence can be partitioned into time slices which correspond to some duration of time. These
time slices represent periods or phases of a lifetime, such as the deployment or operational phase. Time slices can be
further partitioned into other time slices. For example, the lifetime of a car might be divided into time slices
corresponding to its assembly, being in inventory before being sold, and then sequential periods of ownership with
different owners.
A time slice with zero duration is a snapshot. Start, end and intermediate snapshots can be defined for any time slice
to represent particular instants of time in an occurrence's lifetime. For example, the start snapshot of each ownership
time slice of a car corresponds to the sale of the car to a new owner, which happens at the same time as the end
snapshot of the previous ownership (or inventory) time slice.
Individuals
Any kind of occurrence definition can be restricted to define a class that represents an individual, that is, a single
real or perceived object with a unique identity. For example, consider the part definition Car modeling the class of
all cars (parts are kinds of items which are kinds of occurrences, see 7.11 ). An individual car called Car1 with a
unique vehicle identification number can then be modeled as an individual part definition that is a subclassification
of the general part definition Car. As such, Car1 inherits all the features of Car (such as its parts engine,
transmission, chassis, wheels, etc.), but has individual values for each of those features (individual engine,
individual transmission, individual chassis, four individual wheels, etc.), each of which is itself a uniquely
identifiable subclassification of a more general part definition (Engine, Transmission, Chassis, Wheel, etc.).
An occurrence usage can also be restricted to be the usage of a single individual. In this case, exactly one of the
definitions of the occurrence usage must be an occurrence definition for that individual. Such an individual usage
can be used to model a role that an individual plays for some period of time. For example, the individual part
definition Car1 can be used in different contexts, such as the usage of Car1 when it is in for service and the usage
of Car1 when it is used for normal operations. Let car1InService be the usage of Car1 when it is in for service
The lifetime of an individual and any of its time slices can be actual or projected. For example, the individual car
Car1 may be purchased as a used car. Car1 has had an actual lifetime up to that time. A mechanic may
perform diagnostics and obtain some measurements, and may estimate the remaining life of the car or its parts based
on the measurements. For example, the mechanic may estimate the remaining lifetime of the tires, based on the tread
measurements and the estimated tire wear rate.
At a given point in time, the condition of an individual (sometimes called its "state", which should not be confused
with a behavioral state usage, as described in 7.17 ) can be specified by the values of its attributes. As an example,
the condition of car1inOperation at different points in time can be specified in terms of its acceleration,
velocity, and position. In addition, its finite (i.e., discrete) state (in the sense that can be modeled with state
definitions and usages, see 7.17 ) can be specified at different points in time as off or on, and any nested state such
as forward or reverse. The condition of the car can continue to change over its lifetime, and can be specified as a
function of discrete and/or continuous time.
Events
An event is a reference from one occurrence to another occurrence that represents some relevant happening during
the lifetime of the first occurrence. Such an event model makes no commitment as to how the event actually
happens. Different specializations of the containing occurrence may realize the modeled event in different ways.
In particular, occurrences may collaborate by transferring information between each other via messages (see 7.13 ).
The sending of such a message is an event in the lifetime of the sending occurrence, while the receipt of such a
message is an event in the lifetime of the receiving occurrence. These events can possibly be realized as the
performance of a send action and corresponding accept action, respectively, with the message being the resulting
transfer between them (see 7.16 ). However, it could also be realized as the start and end of an explicitly modeled
flow connection (see 7.13 on flow connections and messages).
occurrence def
OccurrenceDef1;
Occurrence occurrence def
Definition OccurrenceDef1 {
/* members */
}
occurrence occurrence1 :
OccurrenceDef1;
individual occurrence1 :
OccurrenceDef1;
individual def
'OccurrenceDef1-1' :>
Individual OccurrenceDef1;
Occurrence individual
'occurrence1-1' :
'OccurrenceDef1-1' :>
occurrence1;
timeslice timeslice1 :
Timeslice OccurrenceDef1;
snapshot snapshot1 :
Snapshot OccurrenceDef1;
individual part
individual1 :
Individual1 {
timeslice timeslice1
{
snapshot
Portion Membership snapshot1;
snapshot
snapshot2;
}
timeslice timeslice2;
}
{
occurrence occur1 :
OccurDef [1..*]
Occurrences ordered nonunique;
Compartment /* ... */
{
individual part part1
:
PartDef1_1 [1..*]
Individuals ordered nonunique;
Compartment (parts) /* ... */
part part1 {
timeslice phase1;
Timeslices timeslice phase2;
Compartment /* ... */
}
part part1 {
snapshot snapshot1;
Snapshots snapshot snapshot2;
Compartment snapshot snapshot3;
/* ... */
}
The base definition for occurence definitions is the class Occurrence from the Occurrences model in the Kernel
Semantic Library (see [KerML, 9.2.4]). The base usage for occurrence usages is the feature occurrences from the
Occurrences model.
A time slice or snapshot is normally considered to represent a portion of the lifetime of instances of its defining
occurrence definition(s). However, if such an occurrence usage has no explicitly declared definition, but is declared
in the body of an occurrence definition, then it is considered to implicitly represent a portion of instances of the
containing occurrence definition. If it is declared in the body of another occurrence usage, then it is considered to
implicitly represent a portion of the instances of the definition(s) of that containing occurrence usage.
An occurrence usage (of any kind) is considered to be an individual usage if it has a definition that is an individual
definition. An occurrence usage must not have more than one definition that is an individual definition. An
occurrence usage may also be explicitly declared to be an individual usage using the keyword individual, placed
after any of the other usage property keywords described in 7.6.3 , but before a timeslice or snapshot keyword
(if any). In this case, the occurrence usage must have exactly one definition that is an individual definition. If the
declaration of an occurrence usage includes the the keyword individual (and, possibly, timeslice or
snapshot), but no kind keyword, then this is equivalent to having included the occurrence keyword (that is, an
occurrence isage not of a more specialized kind, but representing an individual, and, possibly, a time slice or
snapshot).
part client {
event occurrence request[1] references subscriptionMessage.source;
event occurrence delivery[*] ::> publicationMessage.target;
}
An event occurrence usage may also be declared using just the keyword event instead of event occurrence. In
this case, the declaration does not include either a name or a short name. Instead, the referenced event occurrence of
the event occurrence usage is identified by giving a qualified name or feature chain immediately after the event
keyword.
part client {
event subscriptionMessage.source[1];
event publicationMessage.target[*];
}
The ref keyword may be used in the declaration of an event occurrence usage, but an event occurrence usage is
always referential, whether or not ref is included in its declaration.
7.10 Items
7.10.1 Items Overview
Metamodel references:
An item definition is a kind of occurrence definition (see 7.9 ) that defines a class of identifiable objects that may be
acted on over time, but which do not necessarily perform actions themselves. An item usage is a usage of one or
more item definitions.
Item usages can be used to represent inputs and outputs to actions such as water, fuel, electrical signals and data.
Item usages, such as fuel, may flow through a system and be stored by a system. An item may have attributes (see
7.7 ), states (see 7.17 ), and nested item usages.
An item that performs actions is normally modeled as a part (see 7.11 ). All parts are items, but not all items are
necessarily parts. An item may also be considered to be a part during some time slices of its lifetime but not others.
For instance, an engine being assembled can be modeled as an item moving along an assembly line. However, once
the engine assembly is completed, the engine can be considered to be a part that may be installed into a car, where it
is expected to perform the action providing power to propel the car. But later it may be removed from the car and
again be considered only an inactive item in a junkyard.
Items may also have an extent in space as well as time. The shape of an item is its boundary in three-dimensional
space. Items without shapes are closed enabling them to be boundaries of other items (for example, a two-
dimensional sphere has no boundary, but it is the shape of a three-dimensional ball). The Geometry Domain Library
(see 9.7 ) includes a model of basic kinds of geometric shapes that can be composed to construct compound spatial
items.
An item can also identify other items as enveloping shapes, which are closed items that are the boundary of a
hypothetical item occupying the same or larger space as the enveloped item. Some of these can be bounding shapes,
which overlap the bounded item on all sides. The spatial boundaries of items can break into separate closed items,
such as the inside and outside of an egg shell. These inner boundaries can be the boundary of a hypothetical item,
the interior of which is a void of the item. Items with no voids are solid.
{
item item1 :
ItemDef1 [1..*]
Items Compartment ordered nonunique;
/* ... */
The base item definition and usage are Item and items from the Items library model (see 9.2.3 ). (For other
semantic constraints on item usages, see 8.4.6 ).
7.11 Parts
7.11.1 Parts Overview
Metamodel references:
A part definition represents a modular unit of structure such as a system, system component, or external entity that
may directly or indirectly interact with the system. A part definition is a kind of item definition (see 7.10 ) and, as
such, defines a class of part objects that are occurrences with temporal (and possibly spatial) extent. A part usage is
a kind of item usage that is a usage of one or more part definitions, but may also be a usage of item definitions that
are not part definitions. This allows a part to be treated like an item in some cases (e.g., when an engine under
assembly flows through an assembly line) and as a part in other cases (e.g., when an assembled engine is installed in
a vehicle).
A system is modeled as a composite part, and its part usages may themselves have further composite structure. The
parts of a system may have attributes (see 7.7 ) that represent different performance, physical and other quality
A part can represent any level of abstraction, such as a purely logical component without implementation
constraints, or a physical component with a part number, or some intermediate abstraction. Parts can also be used to
represent different kinds of system components such as hardware components, software components, facilities,
organizations, or users of a system.
part part1 {
port p0 : PortDef0 {
port p1 :
PortDef1;
port p2 :
PortDef2;
Part with Ports port p3 :
PortDef3;
}
port p4 : PortDef4;
port p5 : PortDef5;
}
Part performs a
reference action
(action1) that can part part0 {
perform action
subset or bind to
action1;
another action, and perform action2;
an anonymous }
reference action action action2;
(action2) that subsets
another action.
action action3 :
Part performs a Action3;
reference action
(action1) that part part0 {
reference-subsets perform action
another action action1 references
(action3 action3;
}
{
part part1 :
PartDef1 [1..*]
Parts Compartment ordered nonunique;
/* ... */
The base part definition and usage are Part and parts from the Parts library model (see 9.2.4 ). (For other
semantic constraints on part usages, see 8.4.7 ).
Note. Because the base usage of a part usage is the part usage parts defined by the base part definition Part, every
part usage is always directly or indirectly defined by at least one part definition, implicitly if not explicitly, in
addition to any other item definitions.
7.12 Ports
7.12.1 Ports Overview
Metamodel references:
A port definition is a kind of occurrence definition (see 7.9 ) that defines a connection point to enable interactions
between occurrences (most commonly parts). A port usage is a kind of occurrence usage definition that is a usage of
a port definition.
A feature of a port may be directed, with one of the directions in, out, or inout (see also 7.6.3 ). Connected ports
must conform: each feature of a port at one end of a connection must have a matching feature on a port at the other
end of the connection. Two features match if they have conforming definitions and either both have no direction or
they have conjugate directions. The conjugate of direction in is out and vice versa, while direction inout is its
own conjugate. A transfer can occur from the out features of one port usage to the matching in features of
connected port usages. Transfers can occur in both directions between matching inout features.
Each port definition has a conjugated port definition whose directed features are conjugate to those of the original
port definition. A conjugated port usage is a usage of a conjugated port definition. A conjugated port usage
automatically conforms to a usage of the corresponding original port definition.
{
port port1 : PortDef1
[1..*]
ordered nonunique;
Ports Compartment /* ... */
{
in attribute1 :
AttributeDef1;
out attribute2 :
AttributeDef2;
inout attribute3 :
Directed Features AttributeDef3;
Compartment in item1 : ItemDef1;
out item2 : ItemDef2;
inout item3 :
ItemDef3;
}
The base port definition and usage are Port and ports from the Ports library model (see 9.2.5 ). (For other
semantic constraints on port usages, see 8.4.8 .)
A conugated port usage is a shorthand for declaring a port usage defined by a conjugated port definition. With this
shorthand, rather than using the actual name of the conjugated port definition, the name of the original port
definition can be used, preceded by the symbol ~. For example,
port p : ~P;
is equivalent to
port p : P::'~P';
Since the symbol ~ is not considered part of a name when used in a conjugated port usage, it does not have to be
placed within quotes, while quotes do have to be used to represent the actual name of the conjugated port definition
as a lexical unrestricted name (see 7.2.2 ). Note that, if the original port definition itself has a name that is itself
lexically represented as an unrestricted name, such as 'P-1', then its conjugated port definition has the (qualified)
name 'P-1'::'~P-1', but the corresponding conjugated port usage is
port p1 : ~'P-1'
7.13 Connections
7.13.1 Connections Overview
SYSML2_-177: Guillemets should not be used on keywords in textual notation snippets used in the
graphical notation
Metamodel references:
A connection definition is both a relationship and a kind of part definition (see 7.11 ) that classifies connections
between related things, such as items and parts. At least two of the owned features of a connection definition must
be connection ends, which specify the things that are related by the connection definition. Connection definitions
with exactly two connection ends are called binary connection definitions, and they classify binary connections.
The features of a connection definition that are not connection ends characterize connections separately from the
connected things. Since a connection is a part, values of these non-end features can potentially change over the
lifetime of the connection. However, the values of connection ends (i.e., the things that are actually connected) do
not change over time (though they can potentially be occurrences that themselves have features whose values
change over time).
A connection usage is a part usage (see 7.11 ) that is a usage of a connection definition, connecting usage elements
such as item and part usages. A connection usage redefines the connection ends from its definition, associating those
ends with the specific usage elements that are to be connected. For example, a connection definition could have
A connection usage that connects parts is often a logical connection that abstracts away details of how the parts are
connected. For example, plumbing that includes pipes and fittings may be used to connect a pump and a tank. It is
sometimes desired to model the connection of the pump to the tank at a more abstract level without including the
plumbing. This is viewed as a logical connection between the pump and the tank.
Alternatively, the plumbing can be modeled as a part (informally referred to as an interface medium) where the
pump connects to the plumbing, and the plumbing connects to the tank. As a part itself, a connection can contain the
plumbing either as a composite feature, or as a reference to the plumbing that is owned by a higher level pump-tank
system context. In this way, the logical connection without structure can be transformed into a physical connection.
Bindings and successions are special kinds of connections. They are usages, but, unlike regular connection usages,
they are not part usages. The connections specified by bindings and successions are not occurrences and are not
created and destroyed. Rather, they assert specific relationships between the features that they connect, which must
be true at all times.
A binding is a binary connection that requires its two related usages to have the same values. A binding can also be
used to bind a referential feature in one context to a composite feature in another context to assert they are the same
thing. For example, the steering wheel in a car may be considered part of the interior of the car, while at the same
time it is considered part of the steering subsystem. The steering wheel can be a composite part usage of the interior,
and a reference part usage of the steering subsystem, and these two usages can be bound together to assert that they
are the same part.
A feature value is a shorthand for initializing or binding a usage to the result of an expression (see 7.18 ) as part of
the declaration of the usage. There are two types of feature value binding.
• A fixed feature value establishes the binding of the usage to the result of evaluating the given expression at
the point of declaration of the usage. Such a binding cannot be overridden in a redefinition of the usage
because, once asserted, a binding must be true for all instances of the usage.
• A default feature value also includes an expression, but it does not immediately establish the binding of
the usage. Instead, the evaluation of the expression and the binding of the usage is delayed until the
instantiation of a definition or usage that features the original usage. Unlike a fixed feature value, a default
feature value can be overridden in a redefinition of its original feature with a new feature value (fixed or
default). In this case, the new overriding feature value is used instead of the original feature value for
binding the redefining usage.
A succession is a binary connection that requires its two related usages to have values that are occurrences that
happen completely separated in time, with the first occurrence happening before the second. Successions can be
used to assert the ordering of any kind of occurrences in time, but are particularly useful for event occurrences (see
7.9 ) and performances of actions (see 7.16 ).
A flow connection usage is a connection usage that also represents the performance of a transfer of some payload
between the values of connected usages, which must be occurrences. The transferred payload can be anything
(attribute value, item, part, etc.). The transfer is directed from the first connection end (the source) to the second
connection end (the target). There are three kinds of flow connections.
Messages are typically used to model abstract logical interaction between part usages in a certain context, which
may be realized in a more detailed model using streaming or succession flow connections (or transfers from send
actions to accept actions, see 7.16 ).
connection def
ConnectionDef1 {
end end1 : Part1;
end end2 : Part2;
Connection }
Definition
connection def
ConnectionDef1 {
/* members */
}
connection def
ConnectionDef1 {
end end1 :
Connection Part1[0..1];
Definition end end2 :
Part2[1..*];
}
connection def
ConnectionDef1 {
Connection end end1 :
Definition (n-ary Part1[0..1];
with 3 ends) end end2 : Part2;
end end3 : Part3;
}
connection connection1 :
ConnectionDef1 {
end end1 ::> part1;
end end2 ::> part2;
}
Connection
connection connection1 :
ConnectionDef1 {
/* members */
}
connection connection1 :
ConnectionDef1
Connection connect part1 to
part2;
connection connection1 :
Connection (n-ary ConnectionDef1
with 3 ends) connect (part1,
part2, part3);
Connections
Compartment
action action1:Action1 {
out item1:Item1;
}
action action2:Action2 {
Flow in item1:Item1;
}
flow action1.item1
to action2.item1;
part part1:Part1 {
port p4:P4;
}
part part2:Part2 {
port p2:P2;
Message }
message of item1:Item1
from part1.p4
to part2.p2;
{
flow action1.output
to action2.input;
succession flow
Flows Compartment action1.output
to action2.input;
/* ... */
occurrence {
part part1 : Part1 {
event occurrence
ev1;
}
part part2 : Part2 {
Message event occurrence
ev2;
}
message msg1 from
part1.ev1 to part2.ev2;
}
Unless it is abstract, a connection definition or usage must have at least two end features (which may be owned or
inherited). A binary connection definition or usage is one that has exactly two end features. The end features of a
connection definition or usage are always considered referential (non-composite), whether or not their declaration
explicitly includes the ref keyword. (See also 7.6.3 on the notation for end features.)
Connection definitions and usages are also relationships. For a connection definition, its related elements are given
by the definitions of its end features. For a connection usage, its related elements are the features associated to each
of its end features via reference subsetting relationships, whose textual notation is the keyword references or the
equivalent symbol ::>.(See also 7.2 on Relationships.)
Rather than using explicit end feature declarations in the body of a connection usage, the related features of the
connection usage may be identified in a comma-separated list, between parentheses (...), preceded by the keyword
connect, placed after the connection usage declaration and before its body. The identification of a related feature
may optionally be preceded by an end feature name followed by the keyword references or the symbol ::>, and/
or followed by a multiplicity. If the declaration part of the connection usage is empty when using this notation, then
the keyword connection may be omitted.
If the connection usage is binary, then a further special notation may be used in which the source related feature is
identified directly after the keyword connect and the target related feature is identified after the keyword to. As
above, if the declaration part of the connection usage is empty, then the keyword connection may be omitted.
The base connection definition and usage are Connection and connections from the Connections library (see
9.2.6 ). For a binary connection definition or usage, the base definition and usage are further restricted to
BinaryConnection and binaryConnections, which enforce that the connection has exactly two ends.
If a connection definition has a single owned superclassification relationship with another connection definition, it
may inherit end features from this general connection definition. However, if it declares any owned end features,
then each of these must redefine an end feature of the general connection definition, in order, up to the number of
end features of the general connection definition. If no redefinition is given explicitly for an owned end feature, then
it is considered to implicitly redefine the end feature at the same position, in order, of the general connection
definition, if any.
Note that any specialization of a binary connection definition must also be binary. That is, it can inherit or redefine
the two end features from the general connection definition, but it cannot add more end features than two.
If a connection definition has more than one owned superclassification with other connection definitions, then it
must declare a number of owned end features at least equal to the maximum number of end features of any of the
general connection definitions. Each of these owned end features must then redefine the corresponding end feature
(if any) at the same position, in order, of each of the general connections, either explicitly or implicitly.
Similar rules hold for the end features of a connection usage that is defined by one or more connection definitions
and/or subsets or redefines one or more connection usages.
The two related features of a binding are identified after its declaration part and before its body, following the
keyword bind and separated by the symbol =. If the declaration part is empty, then the keyword binding may be
omitted. The end features of a binding always have multiplicity [1..1].
The base usage for a binding is the the KerML feature selfLinks from the Links model in the Kernel Semantic
Library (see [KerML, 9.2.3]).
A fixed, bound feature value relationship is declared using the symbol = followed by a representation of the value
expression (using the expression notation from [KerML, 7.4.9]). This notation is appended to the declaration of the
usage being bound by the feature value. Usages that have a feature value relationship of this form implicitly have a
nested binding between the feature and the result of the value expression.
Note. The semantics of binding mean that such a feature value asserts that a feature is equivalent to the result of the
value expression. To highlight this, a feature with such a feature value can be flagged as derived (though this is not
required, nor is it required that the value of a derived feature be computed using a feature value – see also 7.6.3 ).
A fixed, initial feature value relationship is declared as above but using the symbol := instead of =. In this case, the
usage also has an implicit nested binding, but the binding only applies to the starting snapshot of the owning
A default feature value relationship is declared similarly to the above, but with the keyword default preceding the
symbol = or :=, depending on whether it is bound or initial. However, for a default, bound feature value, the symbol
= may be elided.
For a default feature value relationship, no implicit binding is added to the usage declaration, but the default will
apply when an instance of the owning definition or usage is constructed, if no other explicit values are given for the
defaulted usage.
The two related features of a succession are identified after its declaration part and before its body, following the
keyword succession and separated by the keyword then. If the declaration part is empty, then the keyword
succession may be omitted. The related features of a succession must be occurrence usages. As for regular
connection usages, constraining multiplicities can also be defined on the end features of a succession.
If a succession is placed lexically directly between the two occurrence usages that are its related elements, then the
declaration of the succession can be shortened to just the keyword then, prepended to the declaration of the second
occurrence usage. A multiplicity for the source end of the succession can optionally be placed directly after the
then keyword.
Note. There are additional shorthands for the use of successions within the bodies of action definitions and usages
(see 7.16.4 ).
The base usage for a succession is the KerML feature happensBeforeLinks from the Occurrences model in the
Kernel Semantic Library (see [KerML, 9.2.4]).
A flow connection usage is declared as a message similarly to a regular connection usage (see 7.13.2 ), but with the
kind keyword message. In addition, the declaration of a message may also optionally include an explicit
specification of the name, type (definition) and/or multiplicity of the payload of the message, after the keyword of.
The payload name is followed by the keyword defined by (or the symbol :), but this keyword (or the symbol) is
omitted if the name is omitted. In the absence of a payload specification, the message declaration does not constrain
what kinds of values may be transferred between the source and target of the message.
A message is always abstract (whether or not the abstract keyword is included explicitly in its declaration), so its
declaration may or may not include identification of source and target related features. If they are included, then
they follow the payload specification (if any), with the source related feature identified after the keyword from,
followed by the target related feature after the keyword to. Alternative, if the source and target identification is not
included, then the message declaration may include a feature value (see 7.13.4 ) to provide a value for the message.
part controller;
part engine;
A streaming flow is declared similarly to a message, but with the kind keyword flow. However, instead of
identifying the source and target features of the flow, such a flow declaration must identify (after the keyword from)
the output feature of the source from which the flow receives its payload and (after the keyword to) the input
feature of the target to which the flow delivers the payload. This is done by giving a feature chain with at least two
features, the last of which identifies the output or input feature, with the preceding part of the chain identifying the
source or target of the flow. If no declaration part or payload specification is included in the flow declaration, then
the from keyword may also be omitted.
A succession flow is declared like a flow declaration above, but using the keyword succession flow.
The base flow connection usages are from the Connections library model (see 7.13 ):
7.14 Interfaces
7.14.1 Interfaces Overview
Metamodel references:
An interface definition is a kind of connection definition (see 7.13 ) whose ends are restricted to be port definitions
(see 7.12 ). An interface usage is a kind of connection that is usage of an interface definition. The ends of an
interface usage are restricted to be port usages.
An interface is simply a connection all of whose ends are ports. As such, an interface facilitates the specification and
reuse of compatible connections between parts. For example, consider a Power interface definition between an
Appliance and Wall Power. The power port on one end of the interface represents the Appliance connection
point, and the outlet port on the other end represents the Wall Power connection point. This interface can then be
used for connecting many different appliances to wall power.
When modeling physical interactions, an interface definition or usage can contain constraints (see 7.19 )
to constrain the values of the features of the ports on its ends. For example, such features may be across and through
variables, which are constrained by conservation laws across the interface (e.g., Kirchhoff’s Laws). When specifying
an interface between electrical components, the across and through variables are port features defined as Voltage
and Current quantities, respectively. The feature values on either port are constrained such that the voltages must
be equal, and the sum of the currents must equal zero.
interface def
InterfaceDef1 {
end port1:Port1;
end port2:Port2;
}
Interface Definition
interface def
InterfaceDef1 {
/* members */
}
interface interface1 :
InterfaceDef1 {
end port1 :> pa;
end port2 :> pb;
}
Interface
interface interface1 :
InterfaceDef1 {
/* members */
}
{
interface interface1
: InterfaceDef1 [1..*];
Interfaces interface interface2
Compartment : InterfaceDef2;
/* ... */
}
part part1:Part1 {
port p4:P4;
}
part part2:Part2 {
port p2:P2;
Interface }
interface interface1 :
InterfaceDef1
connect part1.p4
to part2.p2;
port def Pa {
port p1 : P1;
port p2 : P2;
port p3 : P3;
}
part def Part1 {
port pa : Pa;
}
part def Part2 {
port pb : ~Pa;
}
interface def
InterfaceDef2 {
end :>> source : Pa;
end :>> target : ~Pa;
}
Interface as Node part part0 {
part part1 : Part1;
part part2 : Part2;
interface interface2
: InterfaceDef2
connect source ::>
part1.pa to target ::>
part2.pb {
interface
source.p1 to target.p1;
interface
source.p2 to target.p2;
interface
source.p3 to target.p3;
}
}
port def Pa {
out item i1Out :
Item1;
in item i2In : Item2;
}
interface def Interface2
{
end supplierP : Pa;
end consumerP : ~Pa;
flow supplierP.i1Out
to consumerP.i1Out;
flow consumerP.i2In
Interface as Node to supplierP.i2In;
(with flow) }
part part0 {
part part1 : Part1 {
port pa : Pa;
}
part part2 : Part2 {
port pb : ~Pa;
}
interface if2 :
Interface2 connect
part1.pa to part2.pb;
}
SYSML2_-177: Guillemets should not be used on keywords in textual notation snippets used in the
graphical notation
The shorthand notations for connection usages described in (see 7.13.2 ) may also be used for interface usages.
However, if the declaration part of an interface usage is empty, then the interface keyword is still included, but
the connect keyword may be omitted.
The base interface definition and usage are Interface and interfacess from the Interfacess library (see
9.2.7 ). For a binary interface definition or usage, the base definition and usage are further restricted to
BinaryInterface and binaryInterfaces, which enforce that the interface has exactly two ends.
An allocation definition is a connection definition (see 7.13 ) that specifies that a target element is responsible for
realizing some or all of the intent of the source element. An allocation usage is a usage of one or more allocation
definitions. An allocation definition or usage can be further refined using nested allocation usages that provide a
finer-grained decomposition of the containing allocation.
As used by systems engineers, an allocation denotes a "mapping" across the various structures and hierarchies of a
system model. This concept of "allocation" requires flexibility suitable for abstract system specification, rather than
a particular constrained method of system or software design. System modelers often associate various elements in a
user model in abstract, preliminary, and sometimes tentative ways. Allocations can be used early in the design as a
precursor to more detailed rigorous specifications and implementations.
Allocations can provide an effective means for navigating a model by establishing cross relationships and ensuring
that various parts of the model are properly integrated. Since these relationships are instantiable connections, they
can also be semantically related to other such relationships, including satisfying requirements (see 7.20 ),
performing actions (see 7.16 ) and exhibiting states (see 7.17 ). Modelers can also create specialized allocation
definitions to reflect conventions for allocation on specific projects or within certain system models.
allocation def
AllocationDef1;
allocation allocation1 :
AllocationDef1;
part part3 {
allocate part1 to
Allocated part3;
Compartment allocate part3 to
part2;
}
Shorthand notations similar to those for connection usages, as described in see 7.13.2 , may also be used for
allocation usages, but using the keyword allocate instead of connect. If the declaration part of the allocation
usage is empty when using this notation, then the keyword allocation may be omitted.
7.16 Actions
7.16.1 Actions Overview
SYSML2_-177: Guillemets should not be used on keywords in textual notation snippets used in the
graphical notation
Metamodel references:
An action definition is a kind of occurrence definition (see 7.9 ) that classifies action performances. An action usage
is a kind of occurrence usage that is a usage of one or more action definitions.
An action definition may have features with directions in, out or inout that act as the parameters of the action.
Features with direction in or inout are input parameters, and features with direction out or inout are output
parameters. An action usage inherits the parameters of its definitions, if any, and it can also define its own
parameters to augment or redefine those of its definitions.
Actions are occurrences over time that can coordinate the performance of other actions and generate effects on items
and parts involved in the performance (including those items' existence and relation to other things). The features of
an action definition or usage that are themselves action usages specify the performance of the action in terms of the
performances of each of the subactions. If an action has parameters, then it may also transform the values of its input
parameters into values of its output parameters.
Action definitions and usages follow the same patterns that apply to structural elements (see 7.6 ). Action definitions
and action usages can be decomposed into lower-level action usages to create an action tree, and action usages can
be referenced by other actions. In addition, an action definition can be subclassified, and an action usage can be
subsetted or redefined. This provides enhanced flexibility to modify a hierarchy of action usages to adapt to its
context.
Performed Actions
A perform action usage is an action usage that specifies that an action is performed by the owner of the performed
action usage. A perform action usage is referential, which allows the performed action behavior to be defined in a
different context than that of the performer (perhaps by an action usage in a functionally decomposed action tree).
However, if the owner of the perform action usage is an occurrence, then the referenced action performance must be
carried out entirely within the lifetime of the performing occurrence.
In particular, a perform action usage can be a feature of a part definition or usage, specifying that the referenced
action is performed by the containing part during its lifetime. A perform action usage can also be a feature of an
action definition or usage. In this case, the perform action usage represents a "call" from the containing action to the
performed action.
Sequencing of Actions
Since action usages are kinds of occurrence usages, their ordering can be specified using successions (see 7.13 ).
However, a succession between action usages may, additionally, have a guard condition, represented as a Boolean
The sequencing of action usages may be further controlled using control nodes, which are special kinds of action
usages that impose additional constraints on action sequencing. Control nodes are always connected to other actions
usages by incoming and outgoing successions (with or without guards). The kinds of control nodes include the
following.
• A fork node has one incoming succession and one or more outgoing successions. The actions connected to
the outgoing successions cannot start until the action connected to the incoming succession has completed.
• A join node has one or more incoming successions and one outgoing succession. The action connected to
the outgoing succession cannot start until all the actions connected to the incoming successions have
completed.
• A decision node has one incoming succession and one or more outgoing successions. Exactly one of the
actions connected to an outgoing succession can start after the action connected to the incoming
succession has completed. Which of the downstream actions is performed can be controlled by placing
guards on the outgoing successions.
• A merge node has one or more incoming successions and one outgoing succession. The action connected
to the outgoing succession cannot start until any one of the actions connected to an incoming succession
has completed.
An output parameter of one action usage may be bound to the input parameter of another action usage (see 7.13 on
binding). Such a binding indicates that the values of the target input parameter will always be the same as the values
of the source output parameter. If the two actions are performed concurrently, then this equivalence will be
maintained over time throughout their performances. An input parameter of an action definition or usage can also be
bound to the input parameter of a nested action usage, passing the values of the input parameter into the nested
action, and an output parameter of a nested action usage can be bound an output parameter of a containing action
definition or usage, passing the values of the output parameter out.
The binding of action parameters, however, does not model the case when there is an actual transfer of items
between the actions that may itself take time or have other modeled properties. Such a transfer can be more properly
modeled using a flow connection between the two action usages (see 7.13 ), in which the transfer source output is an
output parameter of the source action usage and the transfer target input is the input parameter of the target action
usage. A streaming flow connection represents a flow in which the transfer can be ongoing while both the source
and target action are being performed. A succession flow connection represents a flow that imposes the additional
succession constraint that the transfer cannot begin until the source action completes and the target action cannot
start until the transfer has completed.
Transfers can also be performed using send and accept action usages. In this case, the source and target of the
transfer do not have to be explicitly connected with a flow. Instead, the source of the transfer is specified using a
send action usage contained in some some source part or action, while the target is given by an accept action usage
in some destination part or action (which may be the same as or different than the source). A send action usage
includes an expression that is evaluated to provide the values to be transferred, and it specifies the destination to
which those values are to be sent (possibly delegated through a port and across one or more interfaces – see also
7.12 and 7.14 on interfaces between ports). An accept action usage specifies the type of values that can be received
by the action. When a send action performed in the source is matched with a compatible accept action performed in
the destination, then the transfer of values from the origin to the destination can be completed.
Assignment Actions
An assignment action usage is used to change the value of a referent feature of a target occurrence. The target is
specified as the result of an expression and the referent is specified as a feature chain relative to that target. The new
value for the feature is determined as the result of a different expression. When the assignment action usage
completes, the referent feature has the new assigned value for the target occurrence.
A initializing feature value can be used as a shorthand for assigning an initial value to a usage as part of the
declaration of the usage that is a feature of an occurrence definition or usage. Unlike when feature is a bound using a
feature value (as described in 7.13 ), the initial value of a feature can be later assigned a different value.
As for a binding feature value, there are two types of initializing feature value.
• A fixed feature value assigns the result of evaluating the given expression to a usage at the point of
declaration of the usage. Such an assignment cannot be overridden in a redefinition of the usage because,
once asserted, it would be indeterminate which initialization is to be used.
• A default feature value also includes an initial-value expression, but it does not immediately assign an
initial value to the usage. Instead, the evaluation of the expression and the assignment of its result to the
usage is delayed until the instantiation of a definition or usage that features the original usage. Unlike a
fixed feature value, a default feature value can be overridden in a redefinition of its original feature with a
new feature value (fixed or default). In this case, the new overriding feature value is used instead of the
original feature value for initializing the redefining usage.
Structured control action usages are used to control the performance of nested action usages in a structured way.
There are three kinds of structured control action usages:
1. An if action usage evaluates a condition expression and then performs a then clause action usage if the
expression evaluates to true, or, optionally, an else clause action usage if the expression evaluates to false.
2. A while loop action usage performs a body clause action usage iteratively, as long as its while expression
continues to evaluate to true and its until expression continues to evaluate to false.
3. A for loop action usage performs a body clause action usage iteratively, assigning a loop variable
successively for each iteration to the values resulting from the evaluation of a sequence expression.
action action1 :
ActionDef1;
{
action action1 :
ActionDef1 [1..*]
ordered nonunique;
/* ... */
perform action
Actions action10;
Compartment action action11 {
action
'action11.1';
action
'action11.2';
}
}
{
perform action
action1 :
Perform Actions ActionDef1 [1..*]
Compartment ordered nonunique;
/* ... */
package SwimLanes {
part def Part0;
part def Part1;
part def Part2;
part part0 : PartDef0
{
perform action0;
part part1 :
PartDef1 {
perform
action0.action1;
perform
action0.action4;
}
part part2 :
PartDef2 {
perform
action0.action2;
perform
Perform Actions action0.action3;
Swimlanes }
}
action action0 {
action action1;
action action2;
action action3;
action action4;
{
in param1 : ParamDef
Parameters [1..*] ordered
Compartment nonunique;
/* ... */
}
action action1 :
Action1;
action action2 :
Action2;
succession action1
if guard1 then
Actions with and action2;
without Conditional
Succession or
action action1 :
Action1;
if guard1 then action2;
action action2 :
Action2;
first start;
then fork fork1;
then action1;
then action2;
action action1;
then join1;
action action2;
then join1;
join join1;
Actions with Control then decide decision1;
Nodes if guard2 then
action3;
if guard1 then
action4;
action action3;
then merge1;
action action4;
then merge1;
merge merge1;
then done;
Performed By
No textual notation
Compartment
package Loop {
action actionWithLoop
{
attribute
x:Integer := 1;
attribute
increment:Integer = 1;
attribute
Action with Loop y:Integer;
(body in textual loop action loop1
notation) {
assign y :=
2*x;
then assign x
:= x+increment;
} until x >= 10;
then done;
}
}
package Loop {
action actionWithLoop
{
attribute
x:Integer := 1;
attribute
increment:Integer = 1;
attribute
Action with Loop y:Integer;
(body in graphical loop action loop1
notation) {
assign y :=
2*x;
then assign x
:= x+increment;
} until x >= 10;
then done;
}
}
port viewPort;
item def Scene;
Accept Action action trigger1 :
Trigger accept scene :
Scene via viewPort;
part camera {
port viewPort;
port displayPort;
action takePicture :
TakePicture {
action trigger
accept scene : Scene
via viewPort;
then action focus
: Focus {
in item scene =
trigger.scene;
out item image;
}
flow from
focus.image to
shoot.image;
then action shoot
: Shoot {
in item image
Accept and Send flow from focus.image;
Action Flow out item
picture;
}
then send
Show(shoot.picture) via
displayPort;
}
}
part screen {
port displayPort;
}
If an action definition has superclassification relationships (implicit or explicit) with other action definitions (or
KerML behaviors), then each of the owned parameters of the specialized action definition must redefine, in order,
the parameter at the position of each of the general action definitions. The redefining parameters must have the same
direction as the redefined parameters.
If an action definition has a single superclassification, then the specialized action definition may declare fewer
owned parameters than the general action definition, inheriting any additional parameters from the general definition
(which are considered to be ordered after any owned parameters). If there is more than one superclassification, then
every parameter from every general action definition must be redefined by an owned parameter of the specialized
action definition. If the required redefinitions are not explicitly declared for a parameter, then the parameter is
considered to implicitly have redefinitions sufficient to meet the stated requirements.
If an action usage has any type of specialization relationship (i.e., feature typing, subsetting or redefinition, implicit
or explicit) with an action definition or usage (or KerML behavior or step), the rules for the redefinition of the
parameters of the general definitions and usages are the same as given for the redefinition of parameters of an action
definition above.
Binding and flow connection usages (see 7.13.3 and 8.4.9.6 ) can be used to connect subactions in the body of an
action definition or usage. In addition, the feature value shorthand for binding (see 7.13.4 ) is often useful for action
parameters.
flow generatePower.generatedTorque
to transmitPower.generatedTorque;
The base action definition and usage are Action and actions from the Actions library model (see 9.2.9 ). (For
other semantic constraints on action usages, see 8.4.12 .)
Control nodes are used to control the sequencing of other action usages connected to them via sucessions. The
following rules apply to these connections.
1. Incoming successions to a merge node must have source multiplicity 0..1 and subset the
incomingHBLink feature inherited by MergeAction from the Kernel Semantic Library Behavior
ControlPerformances::MergePerformance (see [KerML, 9.2.9]).
2. Outgoing successions from a decide node must have target multiplicity 0..1 and subset the
outgoingHBLink feature inherited from the Kernel Library Behavior
ControlPerformances::DecisionPerformance (see [KerML, 9.2.9]).
3. Incoming successions to a join node must have source multiplicity 1..1.
4. Outgoing successions from a fork node must have target multiplicity 1..1.
These rules shall be enforced in the abstract syntax, even if not shown explicitly in the concrete syntax notation for a
model. (See also 8.4.12.4 on the semantic constraints related to control nodes.)
action action1;
action action2;
action action3;
action action4;
The source of a succession may be specified separately from the target by using the keyword first followed by a
qualified name or feature chain for the source action usage. Similarly, the target of a succession may be specified
separately from the source by using the keyword then followed by a qualified name or feature chain for the target
action usage.
first action1;
then action2;
The then keyword may also be followed by a complete action usage declaration, rather than just the name.
first action1;
then action action2;
first start;
then merge loop;
then action initialize;
then action monitor;
then action finalize;
then loop;
The source of a succession must be an occurrence usage. Therefore, the source of a succession represented using the
then shorthand is actually determined as the nearest occurrence lexically previous to the then, skipping over any
intervening non-occurrence usages (and conditional successions, see 7.16.5 . Since a succession is not an occurrence
usage, this allows several then successions to be placed in a sequence after a common source action usage. This is
particularly useful for specifying multiple successions outgoing from fork and decide nodes.
action action1;
then join1;
action action2;
then join1;
join join1;
action action3;
then merge1;
action action4;
then merge1;
merge merge1;
succession conditionalOnActive
first initialize if isActive then monitor;
Such a conditional succession actually declares a special transition usage (see also 7.17.3 on transition usages in
state models), which is a kind of action usage defined by the action definition DecisionTransitionAction from
the Actions model library (see 9.2.9 ). The transition usage performs the evaluation of the guard expression and, if
true, asserts the existence of the succession. (See 8.4.12.3 on the semantic constraints related to decision transition
usages used for conditional successions.)
The conditional succession shorthand notation is particularly useful for notating several conditional successions
outgoing from a decide node.
merge loop;
action checkLevel { out level; }
decide;
if level <= refillLevel then refill;
if level >= maxLevel then drain;
else continue;
action refill;
then loop;
action drain;
then loop;
action continue;
A perform action usage may also be declared using just the keyword perform instead of perform action. In this
case, the declaration does not include either a name or short name. Instead, the performed action of the perform
action usage is identified by giving a qualified name or feature chain immediately after the perform keyword.
If a perform action usage is used in the body of a part definition or usage, then the part is considered to be the
performer of the performed action (see also 8.4.12.10 on the semantics of perform action usages). A perform action
usage may also be used in the body of another action definition or usage, in which case it acts like a referential "call"
of the performed action by the containing action.
action initialization {
in item device;
perform Utility::startUpCheck {
in component = device;
out status;
The ref keyword may be used in the declaration of a performed action usage, but a perform action usage is always
referential, whether or not ref is included in its declaration.
The behavior of a SendAction is to transfer the payload from the sender to the receiver.
In the textual notation for a send action usage, values for the three SendAction parameters are given after the
action declaration part, identified by the keywords send (payload), via (sender) and to (receiver). If the declaration
part is empty, then the action keyword may be omitted.
part monitor {
action sendReadingTo {
in part destination;
A send action usage can specify both a sender (via) and receiver (to), but it will generally give only one or the
other. When a send action usage is directly or indirectly a composite feature of a part definition or usage, then the
default for the sender (via) of the send action usage is the containing part, not the send action itself. This is known
as the default sending context.
part monitor {
action sendReadingTo {
in part destination;
If a send action usage is not in the composition hierarchy of a part definition or usage (or any item definition or
usage), then the sending context is the highest-level containing action usage. Note that a perform action usage is
always referential, so that the sending context for subactions of a perform action usage is the perform action usage
itself, not the containing performing part.
When sending through a port (see 7.12 on ports), the port usage will usually be the sender (via), with the actual
receiver determined by interface connections having the port usage as their source (see 7.14 ).
The base send action usage is sendActions from the Actions library model (see 9.2.9 ), which is defined by
SendAction. (See 8.4.12.5 for additional semantic constraints on send action usages.)
The behavior of an AcceptAction is to accept the transfer of a payload received by the given receiver, and then
output that payload.
The textual notation for an accept action usage includes special notation for declaring a usage-specific payload
parameter and giving a value for the receiver parameter. The payload parameter declaration is identified by the
keyword accept, and the expression giving the transfer receiver is identified by the keyword via. If the action
declaration part is empty, then the action keyword may be omitted.
The payload parameter declaration for an accept action usage identifies the type of values accepted by the accept
action. It is declared as a reference usage (see 7.6 ), but without the ref keyword or any body. If the payload
parameter declaration has the form of a single qualified name (and, optionally, a multiplicity), then the qualified
name is interpreted as the definition (type) of the payload parameter (not its name).
part controller {
action accepting {
// ...
action acceptReading
accept reading : SensorReading via controller;
// ...
}
}
A payload parameter declaration can also include a feature value (see 7.13.4 ). In this case, the accept action usage
will only accept exactly the value that is the result of the feature value expression. The following special notations
can also be used for the feature value of a payload parameter:
• Change trigger. A change trigger is notated using the keyword when followed by an expression whose
result must be a Boolean value. A change trigger evaluates to a ChangeSignal (as defined in the
Observation model from the Kernel Semantic Library Library [KerML, 9.2.13]) that is sent when the
result of the given expression changes from false to true (or sent immediately if the expression is true
when first evaluated).
• Absolute time trigger. An absolute time trigger is notated using the keyword at followed by an expression
whose result must be a TimeInstantValue (see 9.8.8 ). An absolute time trigger evaluates to a
TimeSignal (as defined in the Trigger model from the Kernel Semantic Library Library [KerML,
9.2.14]) that is sent when the current time (relative to the localClock, which defaults to the
defaultClock, see 9.8.8 ) reaches the TimeInstantValue that is the result of the given expression.
• Relative time trigger. A relative time trigger is notated using the keyword after followed by an
Expression whose result must be a DurationValue (see 9.8.8 ). A relative time trigger evaluates to a
TimeSignal (as defined in the Trigger model from the Kernel Semantic Library Library [KerML,
9.2.14]) that is sent when the current time (relative to the localClock, which defaults to the
defaultClock, see 9.8.8 ) reaches the TimeInstantValue that is computed as the result of the given
expression added to the time at which the time trigger is evaluated.
part controller {
in level : Real;
attribute threshold : Real;
action {
// Both of the following accept actions trigger (once) when the
// given expression becomes true.
accept : ChangeSignal = Triggers::triggerWhen({ level > threshold });
accept when level > threshold;
// The following accept action triggers at the given date and time.
accept at Iso8601DateTime("2024-02-01T00:00:00Z");
When an accept action usage is directly or indirectly a composite feature of a part definition or usage, then the
default for the receiver (via) of the accept action usage is the containing part, not the accept action itself. This is
known as the default accepting context.
part controller {
action accepting {
// The receiver for the following accept action is, by default,
// the accepting context, which is the part "controller".
accept SensorReading;
If an accept action usage is not in the composition hierarchy of a part definition or usage (or any item definition or
usage), then the accepting context is the highest-level containing action usage. Note that a perform action usage is
always referential, so that the accepting context for subactions of a perform action usage is the perform action usage
itself, not the containing performing part.
part controller {
perform action accepting {
// The receiver for the following accept action is, by default,
// the accepting context, which is the "accepting" action,
// not the part "controller".
accept reading : SensorReading;
// ...
}
}
When accepting through a port (see 7.12 on ports), the port usage is the receiver (via).
The base accept action usage is acceptActions from the Actions library model (see 9.2.9 ), which is defined by
AcceptAction. (See 8.4.12.6 for additional semantic constraints on accept action usages.)
If the target expression of an assignment action usage is omitted, then the target is implicitly the occurrence owning
the assignment action usage.
action counter {
// This attribute is initialized using a feature value.
attribute count : Natural := 0;
The base assignment action usage is assignmentActions from the Actions library model (see 9.2.9 ). (See
8.4.12.7 for other semantic constraints on assignment action usages.)
Each of the then-clause and the else-clause is itself notated as an action usage, but with the body required to be
given using curly braces { … }, with a semicolon not allowed for an empty body.
If the if action usage does not include a declaration part, the leading action keyword can be omitted. If either or
both of the clauses have no declaration part, then the action keyword can be omitted for them, too, leaving only
their bodies surrounded by curly braces.
if selectedSensor != null {
assign reading := selectedSensor.reading;
With one except, only the basic form of action declaration can be used for the clauses of an if action usage, not the
special notations for perform action usages, send action usages, etc. The except is that, if the else-clause is itself an
if action usage, then the special if action usage notation can be used. This allows for a typical "else if" structure for
expressing the performance of a sequence of multiple tests.
While Loops
A while loop action usage is implicitly defined by the WhileLoopAction specialization of LoopAction. For a
while loop action usage, the action declaration part is followed by the keyword while, which introduces a Boolean-
valued while expression, followed by a body clause, and then, optionally, the keyword until, which introduces a
Boolean-valued until expression terminated with a semicolon. The behavior of the while loop action usage is to
repeatedly perform the body clause as long as the while expression evaluates to true and the until expression (if there
is one) evaluates to false. The while expression is evaluated before the first iteration of the body clause, but the until
expression is not evaluated for the first time until after the first iteration of the body clause (if the while expression
evaluates to true).
Similarly to the then and else clauses of an if action usage (see 7.16.10 ), the body clause is itself notated as an
action usage, but with its body required to be given using curly braces { … }, with a semicolon not allowed for an
empty body.
The action keyword can be omitted for the while loop action usage itself and/or for the body clause, if they have
no action declaration part.
loop {
assign charge := MonitorBattery();
then if charge < 100 {
action AddCharge;
}
} until charge >= 100;
For Loops
A for loop action usage is implicitly defined by the ForLoopAction specialization of LoopAction. For a for loop
action usage, the action declaration part is followed by the keyword for, which introduces a loop variable
declaration followed by the keyword in and a sequence expression, and, after that, a body clause. The behavior of
the for loop action usage is to first evaluate the sequence expression, which should result in a sequence of values.
The body clause is then performed iteratively, with the loop variable assigned to each value sequentially for each
iteration.
As for a while loop action usage, the body clause is itself notated as an action usage, but with its body required to be
given using curly braces { … }, with a semicolon not allowed for an empty body.
action dynamicScenario
for power : PowerValue in powerProfile
action dynamicsStep {
assign position := ComputeDynamics(position, power);
}
The action keyword can be omitted for the for loop action usage itself and/or for the body clause, if they have no
action declaration part.
The .. operator can be used to construct a sequence of Integer values between two bounds (inclusive), which can be
useful as the sequence expression of a for loop (especially for indexing).
for i in 1..scenario->size() {
assign positionList :=
positionList->including(scenario.postion#(i));
assign velocityList :=
velocityList->including(scenario.velocity#(i));
}
7.17 States
7.17.1 States Overview
Metamodel references:
A state definition is a kind of action definition (see 7.16 ) that defines the conditions under which other actions can
execute. A state usage is a usage of a state definition. State definitions and usages are used to describe state-based
behavior, where the execution of any particular state is triggered by events.
A state definition or usage can contain specially identified action usages that are only performed while the state is
activated.
State definitions and usages follow the same patterns that apply to structural elements (see 7.6 ). States can be
decomposed into lower-level states to create a hierarchy of state usages, and states can be referenced by other states.
In addition, a state definition can be specialized, and a state usage can be subsetted and redefined. This provides
enhanced flexibility to modify a state hierarchy to adapt to its context.
Exhibited States
A state usage can be a feature of a part definition or a part usage, which can exhibit a state by referencing the state
usage or by containing an owned state usage. Whether owned or referenced, the state usage that the part exhibits
can represent a top state in a hierarchy of state usages.
An exhibit state usage is a state usage that specifies that a state is exhibited by the owner of the exhibit state usage.
An exhibit state usage is referential, which allows the exhibited state behavior to be defined in a different context
than that of the exhibitor (perhaps by a state usage in a state decomposition hierarchy). However, if the owner of the
exhibit state usage is an occurrence, then the referenced state performance must be carried out entirely within the
lifetime of the performing occurrence.
In particular, an exhibit state usage can be a feature of a part definition or usage, specifying that the referenced state
is exhibited by the containing part. Typically, the exhibited state and its substates will reflect conditions of the
exhibiting part, such as the operating states of a vehicle. The values of the exhibit state usage are then references to
occurrences of the state when the exhibiting part is "in" that state.
Transitions
State usages can be connected by transition usages, which can activate and deactivate the state usages. The
triggering of a transition usage from its source state usage to its target state usage deactivates the source state and
activates the target state. The trigger of a transition usage is an accept action usage (see 7.16 ), which accepts an
incoming transfer. The transition usage can contain a guard condition, which is a Boolean expression (see 7.18 ) that
must evaluate to true for the transition to occur. In addition, a transition usage may specify an effect action usage
that starts if the transition is triggered, after the source state is deactivated, and must complete before the target state
is activated. If the triggering transfer of a transition has a payload, then this payload is available for use in the guard
condition and effect action of the transition, and after the transition completes.
Parallel States
A parallel state is one whose substates are performed concurrently. As such, no transitions are allowed between the
substates of a parallel state. In contrast, if a non-parallel state has substates then, exactly one of the substates shall be
active at any point in time in the lifetime of the containing state after completion of the entry action (if any).
state state1 :
StateDef1;
state state1 {
entry actio1;
State with entry, do do action2;
and exit actions. exit action3;
}
state compositeState1 {
entry; then state1;
state state1;
State with Graphical transition
first state1
Compartment with
accept trigger1
standard state if guard1
transition view do action1
(sequential states) then state2;
state state2;
then done;
}
state compositeState2
parallel {
state state1 {
entry; then
State with Graphical 'state1.1';
Compartment with state 'state1.1';
standard state }
transition view state state2 {
(parallel states) entry; then
'state2.1';
state 'state2.1';
}
}
{
state state1 :
StateDef [1..*]
ordered nonunique;
/* ... */
exhibit state
States Compartment state10;
state state11 {
state 'state11.1';
state 'state11.2';
}
}
{
exhibit state state1
:
Exhibit States StateDef [1..*]
Compartment ordered nonunique;
/* ... */
Exhibited By
No textual notation
Compartment
In addition to the generic action notation as above, the special notations for send action usages (see 7.16.7 ),
accept action usages (see 7.16.8 ), and assignment action usages (see 7.16.9 ) can be used for entry, do, and exit
actions.
The entry, do, and exit keywords can also be used without any action keyword. If the keyword is immediately
followed by a semicolon ;, then they are empty actions. If they are followed by a qualified name or feature chain for
an action usage, then this is a shorthand for relating the entry, do, or exit action to the identified action usage via
reference subsetting (see also 7.13.2 ).
action monitorTemperature;
state def TurnedOn {
// This is an empty entry action.
entry;
A state definition or usage may hierarchically contain state usages in its body. By default, these substate usages are
considered to be exclusive, that is, their performances do not overlap in time. However, if the keyword parallel is
added to a state definition or usage, just before the body part, then the containing state definition or usage becomes a
parallel state, and its contained state usages can be performed in parallel. (However, no transitions are allowed
between concurrent states; see 7.17.3 .)
The base state definition and usage are State and states from the States library model (see 7.17 ). (For other
semantic constraints on state usages, see 8.4.13 .)
In addition, a transition usage can have an entry or exit action as a source or target. Indeed, for a non-parallel state
definition or usage with nested state usages, the initial state usage is indicated by a transition from the entry action to
that state usage, representing that this is the state that is entered on completion of the entry action.
state off;
state on;
A transition usage can also have a Boolean-valued guard expression. The guard expression is evaluated during the
performance of the source, and the transition usage is only enabled to possibly cause a transition out of the source
state when the guard evaluates to true. In the textual notation, the guard expression is given after the keyword if,
between the source and target parts.
state off;
state on;
A transition usage can also have an accepter, which is an accept action usage use to trigger the transition. The
accepter action for a transition usage is placed after the guard expression and notated using the accept keyword,
with its payload and receiver parameters specified exactly as discussed in 7.16.8 . Transition usages from the entry
action are not allowed to have accepters.
port commPort;
state off;
state on;
transition off_on
first off
if isEnabled
accept TurnOn via commPort
then on;
transition on_off
first on
if isEnabled
Finally, a transition usage can have an effect action, which is an action usage that is performed if the transition usage
is triggered. An effect action is notated using the keyword do in the same way as a do action on a state definition or
usage (see 7.17.2 ). In the textual notation for a transition usage, it is also placed between the source and target parts,
after the guard and accepter (if the transition usage has those).
port commPort;
state off;
state on;
transition off_on
first off
if isEnabled
accept TurnOn via commPort
do action powerUp : PowerUp;
then on;
transition on_off
first on
if isEnabled
accept after 5[min]
do send TimeoutSignal() via commPort
then off;
}
In the textual notation, there is also a shorthand for a transition usage without a declaration part, in which both the
transition keyword and the source part can be omitted. In this case, the source is taken to be the closest lexically
previous state usage, which means the transition usages out of a certain state usage need to be placed essentially
immediately after their source states. This notation can also be used when the transition source is the entry action,
which is particularly useful, because it means the entry action does not need to be named.
port commPort;
entry;
if isInitOff then off;
if not isInitOff then on;
state off;
if isEnabled
accept TurnOn via commPort
do action powerUp : PowerUp;
then on;
state on;
In summary, the guard and accepter of a transition action usage determine whether a transition usage is triggered:
If a transition usage is triggered, then it establishes a succession relationship between the source performance and a
new performance of the target, and a transition is performed as follows:
1. If the source state has a do action that is still being performed, that is interrupted.
2. Then, if the source state has an exit action, that is performed.
3. Once that completes, if the transition usage has an effect action, that is performed.
4. Once that completes, if the target state has an entry action, that is performed.
5. Once that completes, if the target state has a do action, that is performed.
An exhibit state usage may also be declared using just the keyword exhibit instead of exhibit state. In this
case, the declaration does not include either a name or short name. Instead, the exhibited state of the exhibit state
usage is identified by giving a qualified name or feature chain immediately after the exhibit keyword.
If an exhibit state usage is used in the body of a part definition or usage, then the part is considered to be the
performer of the exhibit state usage (see also 8.4.13.4 on the semantics of exhibit state usages). The ref keyword
may be used in the declaration of a exhibit state usage, but a exhibit state usage is always referential, whether or not
ref is included in its declaration.
7.18 Calculations
7.18.1 Calculations Overview
Metamodel references:
A calculation definition is a kind of action definition (see 7.16 ) that has a distinguished parameter with direction
out called the result parameter (which is usually the only out parameter). A calculation definition specifies a
reusable computation that returns a result in the result parameter. A calculation usage is an action usage that is a
usage of a calculation definition.
In addition to its parameters, a calculation definition or usage may have features that are calculation or action usages
that carry out steps in the computation of the result of the calculation. The calculation may also have other features
that are used to record intermediate results in the computation. The final result is specified as an expression written
in terms of the input parameters of the calculation and any intermediate results.
KerML includes extensive syntax for constructing expressions, including traditional operator notations for functions
in the Kernel Function Library, which is adopted in its entirety into SysML. In addition, a calculation definition is
also a KerML function, and a calculation usage is itself a KerML expression. This allows a calculation definition or
usage to also be invoked using the notation of a KerML invocation expression. (See the KerML Specification
[KerML, 7.4.9] for a complete description of the KerML expression sublanguage.)
Calculation definitions are often used to define mathematical functions, in which case the defined computation
should be pure. A pure calculation has the following properties:
1. Two invocations of the calculation definition with the same values for the input parameters always
produce the same values for the result parameter.
2. The performance of the calculation does not produce any side effects (that is, it does not effect any
occurrence that is not a composite part of its performance or that of a subaction or subcalculation).
Any subcalculations or subactions of a pure calculation must also be pure, including the final expression computing
the result. Further, the inputs of a pure calculation should either be attributes or the calculation should not rely on
features of input occurrences that may change from one invocation of the calculation definition to another.
If a calculation definition has superclassification relationships (implicit or explicit) with action definitions (or
KerML behaviors), then the rules for the redefinition of the non-result parameters of the calculation definition are
the same as for an action definition (see 7.16.2 ). In addition, if a calculation definition specializes other calculation
definitions (or KerML functions), then its result parameter redefines the results parameters of the calculation
definitions it specializes, regardless of the positions of those parameters.
If a calculation usage has any type of specialization relationship (i.e., feature typing, subsetting or redefinition,
implicit or explicit) with an action definition or usage (or KerML behavior or step), the rules for the redefinition of
the parameters of the general definitions and usages are the same as given for the redefinition of parameters of a
calculation definition above.
The body of a calculation definition or usage is like the body of an action definition or usage (see 7.16.2 ), with the
optional addition of the declaration of a result expression at the end, using the expression sublanguage from
[KerML, 7.4.9]. The result of the result expression is implicitly bound to the result parameter of the containing
calculation definition or usage..
sum(scores) / size(scores)
}
The result of a calculation definition or usage can also be explicitly bound, particularly using a feature value on the
result parameter declaration (see 7.13.4 ). In this case, the body of the calculation definition or usage should not
include a result expression.
The base calculation definition and usage are Calculation and calculations from the Calculations library
model (see 7.18 ).
7.19 Constraints
7.19.1 Constraints Overview
Metamodel references:
A constraint definition is a kind of occurrence definition (see 7.9 ) that defines a logical predicate. Similar to a
calculation definition (see 7.18 ), a constraint definition may have parameters with direction in. A constraint always
has an implicit Boolean-value result parameter with direction out. A constraint usage is an occurrence usage that is
the usage of a constraint definition.
Also similarly to a calculation, a constraint definition or usage may have features that are calculation or action
usages that carry out steps in the computation of the result of the calculation. The constraint may also have other
features that are used to record intermediate results in the computation. The final result is specified as an expression
written in terms of the input parameters of the calculation and any intermediate results. In addition, a constraint
definition is also a KerML predicate and a constraint usage is a KerML Boolean expression, which allows a
constraint definition or usage to also be invoked using the notation of a KerML invocation expression.
A constraint usage that is a feature of another definition or usage may also directly reference features of its
containing context, in which case it may be used to effectively constrain the values of those features. In a context
with the features bolt diameter and hole diameter, a constraint usage may be defined directly without
parameters using the expression {'bolt diameter' < 'hole diameter'}.
Asserted Constraints
In general, a constraint may be satisfied sometimes and violated other times. However, an assert constraint usage
asserts that the result of a given constraint must be always true at all times. If, at some point in time, it can be
determined that an assert constraint usage evaluates to other than its asserted value, this would be a logical
inconsistency in the model. Constraints associated with the laws of physics, for example, should be asserted to be
true, because they cannot be violated in any valid model of the real world. However, a constraint can also be
asserted simply if its satisfaction is expected to be implied within a model. That way, if the constraint is violated,
this can be flagged by tooling as needing resolution.
An assert constraint usage can also be negated, which means that the given constraint is asserted to be false rather
than true. A negated assert constraint usage can be used to assert that some condition must never happen if the
model is logically consistent.
constraint def
ConstraintDef1;
constraint constraint1 :
ConstraintDef1;
{
constraint
constraint1 :
ConstraintDef1
[1..*]
ordered nonunique;
Constraints /* ... */
Compartment assert constraint
constraint10;
constraint
{boolean_expression1}
}
{
assert constraint
constraint1 :
ConstraintDef1
[1..*]
Assert Constraints ordered nonunique;
Compartment /* ... */
assert
constraint
{boolean_expression1}
}
Constraint definitions and usages are not calculation definitions and usages, but, like calculation definitions and
usages, they are kinds of KerML functions and expressions (a predicate is a kind of function). As such, any directed
usages declared in the body of a calculation definition or usage are considered to be owned parameters of the
calculation. Furthermore, every constraint definition and usage has a result parameter, but, since this must have a
Boolean type, it is generally not necessary to redeclare it for a constraint definition or usage.
The body of a constraint definition or usage is also like the body of a calculation definition or usage (see 7.18.2 ),
including the addition of the declaration of a result expression at the end, using the expression sublanguage from
[KerML, 7.4.9]. For a constraint definition or usage, the result expression must be Boolean valued.
The base constraint definition and usage are Constraint and constraints from the Constraints model library
(see 7.19 )
part testObject {
attribute computedMass : MassValue;
assert constraint { computedMass >= 0[kg] }
// Alternatively, the following is equivalent.
assert not constraint { computedMass < 0[kg] }
}
An assert constraint usage may also be declared using just the keyword assert instead of assert constraint.
In this case, the declaration does not include either a name or short name for the assert constraint usage. Instead, the
constraint to be asserted is identified by giving a qualified name or feature chain immediately after the assert
keyword, and it is then related to the assert constraint usage by a reference subsetting relationship (see also 8.4.5.3 ).
A negated assert constraint usage of this form can be constructed using assert not.
constraint negativeMass {
attribute mass : MassValue;
mass < 0[kg]
}
part testObject {
attribute computedMass : MassValue;
7.20 Requirements
7.20.1 Requirements Overview
Metamodel references:
Requirements
A requirement definition is a kind of constraint definition (see 7.19 ) that specifies stakeholder-imposed constraints
that a design solution must satisfy to be a valid solution. A requirement definition contains one or more features that
are constraint usages designated as the required constraints. These may be specified informally using text
statements (commonly known as "shall" statements) or more formally using constraint expressions. A requirement
definition may also optionally include assumed constraints. The required constraints of a requirement only apply if
all the assumed constraints are satisfied.
A requirement usage is a kind of constraint usage (see 7.19 ) that is a usage of a requirement definition in some
context. The context for multiple requirements can be provided by a package (see 7.5 ), a part (see 7.11 ) or another
requirement. A design solution must satisfy the requirement and all of its member requirements and constraints to be
a valid solution.
A requirement definition or usage may be decomposed into nested requirement usages, which may themselves be
further decomposed. Since a requirement usage is a kind of constraint usage, any nested composite requirement
usage is automatically considered to be a required constraint of the containing requirement definition or usage. A
requirement definition or usage may also reference another requirement usage as a required constraint. For the
overall requirement to then be satisfied, all such composite or referenced requirements must be satisfied.
Like any usage element, the features of a requirement usage can redefine the features of its requirement definition.
For example, a requirement definition MaximumMass may include the require constraint {massActual <=
massRequired}, written in terms of the attribute usages massActual and massRequired. A requirement usage
maximumVehicleMass defined by MaximumMass could restrict the subject of the requirement to be a Vehicle,
redefine the massActual attribute to be the mass of the subject Vehicle, and redefine the massRequired
attribute and bind it to 2000 kilograms. In this way, the requirement definition serves as a requirement template that
can be reused and tailored to each context of use.
Subjects
A requirement definition or usage always has a subject, which is a distinguished parameter that identifies the entity
on which the requirement is being specified. A requirement usage can only be satisfied by an entity that conforms to
the definition of its subject. For example, if the subject of a requirement is defined to be a Vehicle, then a standard
vehicle model or sports vehicle model can satisfy the requirement, as long as these usages are defined by Vehicle
or a specialization of it. The subject can also be restricted to be a certain kind of definition element, if it is desired to
constrain what kind of entity can satisfy the requirement. For example, the subject can be restricted to be an action,
if it is desired to constrain the requirement to be satisfied only by action usages.
Constraining the subject of a requirement definition or usage is also useful to allow features of the subject definition
to be used in formal expressions for the assumed and required constraints of the requirement. However, this may not
be necessary if the requirement is specified more informally, or in terms of parameters or other features to be bound
later. In this case, it is not necessary to explicitly specify the subject of a requirement, in which case it the subject is
implicitly assumed to be defined as Anything.
Actors and stakeholders are additional distinguished parameters that may be specified for a requirement definition or
usage. Actor and stakeholder parameters are part usages representing entities that play special roles relative to the
An actor parameter represents a role played by an entity external to the subject of the requirement but necessary for
the satisfaction of the requirement. For example, a requirement whose subject is a Vehicle may also specify an
actor that is the Driving Environment. Features of this actor may be used in, for example, the assumed
constraints of the requirement, to constrain the environment in which the required constraints apply. The satisfaction
of the requirement by a specific subject entity is then relative to the specific environment entity filling the actor role.
Note. Actor parameters may also be specified for cases (see 7.21 ) and, in particular, use cases (see 7.24 ).
A stakeholder parameter represents a role played by an entity (usually a person, organization or other group) having
concerns related to the containing requirement. Stakeholder concerns may also be explicitly modeled as special
kinds of requirements. A concern definition is a kind of requirement definition that represents a stakeholder concern.
A concern usage is a kind of requirement usage that is a usage of a concern definition. The stakeholder parameters
of a concern definition or usage then delineate the stakeholders that have a certain concern.
Rather than explicitly referencing specific stakeholders, a requirement definition or usage can be specified as
framing the modeled concerns of relevant stakeholders. All the framed concerns of a requirement must then be
addressed for the requirement to be satisfied.
Note. Stakeholder and concern modeling is frequently used in the context of view and viewpoint modeling (see
7.25 ). A viewpoint is a kind of requirement that frames certain stakeholder concerns to be addressed by one more
more views satisfying the viewpoint.
Requirement Satisfaction
Since a requirement is a kind of constraint, a requirement can be evaluated to be true or false. A requirement is
satisfied when it evaluates to true.
A satisfy requirement usage is a kind of assert constraint usage (see 7.19 ) that asserts that a requirement is satisfied
when a given feature is bound to the subject parameter of the requirement. Other parameters or features of the
requirement may also be bound in the body of the satisfy requirement usage. For example, the
maximumVehicleMass requirement above could be asserted to be satisfied by a specific vehicle c1 usage,
which means that the required constraint {massActual <= massRequired} must be true when massActual is
bound to the mass of vehicle c1.
Similarly to an assert constraint usage, a satisfy requirement usage can also be negated. A negated satisfy
requirement usage asserts that some entity does not satisfy the given requirement.
requirement <r1>
requirement1 :
RequirementDef1 {
subject redefines s1
= mySubject;
}
requirement requirement1
Requirement :
RequirementDef1 {
doc /* ... */
subject redefines s1
= mySubject;
require require2;
assume constraint1;
}
{
requirement
requirement1 :
RequirementDef1
Requirements [1..*]
Compartment ordered nonunique;
/* ... */
part part1 {
satisfy requirement11
by part1 {
bind
'requirement11-1'.x1 =
Satisfy Requirements a;
Compartment bind
'requirement11-2'.x2 =
b;
}
}
requirement requirement1
: Requirement1;
Satisfy part part1 : Part1 {
satisfy requirement1;
}
The informal text of a requirement is given by any documentation comments written in the body of a requirement
definition or usage. If a requirement definition or usage is declared with a short name (see 7.2 ), then this is also
considered to be its requirement ID.
Formally, a requirement is a kind of constraint. However, rather than specifying its constraint expression directly, a
requirement constraint is built from two sets of other constraints: the assumed and required constraints of the
requirement. The effective constraint for the requirement is them a logical implication: if all the assumption
constraints are true, all the required constraints must be true. Required and assumed constraints are declared as
composite constraint usages in the body of a requirement definition or usage, by prefixing a regular constraint usage
declaration (see 7.19.2 ) with the keyword assume or require.
An assumed or required constraint may also be declared using just the keyword assume or require instead of
assume constraint or require constraint. In this case, the declaration does not include either a name or
short name for the constraint usage. Instead, the constraint to be assumed or required is identified by giving a
qualified name or feature chain immediately after the assume or require keyword, and it is then related to the
assumed or required constraint usage by a reference subsetting relationship (see also 8.4.5.3 ).
constraint massIsPositive {
attribute mass : MassValue;
mass > 0[kg];
}
constraint massLimit {
attribute mass : MassValue;
attribute massLimit : MassValue;
massActual <= massRequired
}
requirement def <'1.1'> MaximumMass {
The subject of a requirement definition or usage is modeled as its first parameter. Following the general rule for
parameters (see 7.16.2 ), the subject parameter of a requirement definition or usage will redefine the subject
parameter of any requirement definitions or usages that it specializes. The base requirement definition in the
Requirements library model specifies the most general possible subject, with the default name subj and the most
general type Anything, and this can then be further specialized in specific requirement definitions and usages. A
subject parameter is always an in parameter, so it is not necessary to declare it with an explicit direction. Instead,
the keyword subject is used to identify the declaration of a subject parameter, which must come before the
declaration of any other parameters in a requirement definition or usage.
A requirement definition or usage may also have one or more actor or stakeholder parameters. Similarly to the
declaration of a subject parameter, these distinguished parameters are declared using the keywords actor and
stakeholder rather than explicitly declaring their direction. Actor and stakeholder parameters are part usages, so
they must be (explicitly or implicitly) defined by part definitions (see 7.11.2 ).
assume constraint {
doc /* The environment conditions are poor. */
}
assume constraint {
doc /* The driver is an occupant of the vehicle. */
}
assume constraint {
doc /* The vehicle speed is less than the speed limit. */
}
require constraint {
doc /* The vehicle shall brake from its initial speed to zero
* speed in a distance less than the maxBrakingDistance.
*/
}
}
The base requirement definition and usage are RequirementCheck and requirementChecks from the
Requirements model library (see 9.2.13 ).
assume constraint {
doc /* The driver is an occupant of the vehicle. */
}
require constraint {
doc /* The vehicle shall brake from its initial speed to zero
* speed in a distance less than the maxBrakingDistance.
*/
}
}
One or more concerns can then be framed in other requirement definitions and usages. A framed concern usage is a
subrequirement usage (see 7.20.2 ) indicated by prefixing a concern usage declaration with the keyword frame. As
for an assumed or required constraint, the keyword frame can be used rather than frame concern to declare a
framed concern using reference subsetting. In any case, since the framed concern usage itself is a subrequirement, it
will automatically be considered a required constraint of its containing requirement definition or usage.
assume constraint {
doc /* The environment conditions are poor. */
}
The base concern definition and usage are ConcernCheck and concernChecks from the Requirements model
library (see 9.2.13 ).
1. The subject parameter of a satisfy requirement usage must be bound to a satisfying feature.
2. A satisfy requirement usage is a kind of assert constraint usage (see 7.19.3 ).
Together, these mean that a satisfy requirement usage asserts that it is satisfied as a requirement (that is, it always
evaluates to true) when the role of its subject is bound to the satisfying feature. The satisfying feature for a satisfy
requirement usage can be specified in its declaration, immediately before its body, after keyword by.
A satisfy requirement usage may also be declared using just the keyword satisfy instead of satisfy
requirement. In this case, the declaration does not include either a name or short name for the satisfy requirement
usage. Instead, the requirement to be satisfied is identified by giving a qualified name or feature chain immediately
after the satisfy keyword, and it is then related to the satisfy requirement usage by a reference subsetting
relationship (see also 8.4.5.3 ).
A satisfy requirement usage can be negated by placing the keyword not before satisfy. A negated satisfy
requirement usage asserts that the modeled requirement is not satisfied by the value of the given satisfying feature.
A satisfy requirement usage can be declared without an explicit satisfying feature if it is nested in definition or
usage. In this case, the satisfying feature is considered to be given by the containing definition or usage (in the case
of a definition this is essentially the self feature of the definition; see [KerML, 9.2.2]).
A case definition is a kind of calculation definition (see 7.18 ) that produces a result intended to achieve a specific
objective regarding a given subject. A case usage is a kind of calculation usage that is a usage of a case definition. A
case is a general concept that may be used in its own right, but also provides the basis for more specific kinds of
cases, including analysis cases (see 7.22 ), verification cases (see 7.23 ), and use cases (see 7.24 ).
The subject of a case is modeled as a distinguished parameter, similarly to the subject of a requirement (see 7.20 ).
The objective of a case is modeled as a requirement usage to be satisfied by the performance of the case. Depending
on the kind of case, the subject of the objective may be the same as the subject of the case (such as for a verification
case or a use case) or it may be the result of the case (such as for an analysis case).
A case definition or usage may also have one or more actor parameters that represent roles played by an entity
external to the subject of the case but necessary to the specification of the case. An actor parameter is a part usage
representing an entity that plays a designated actor role for the case. A case may have multiple actors representing
the same kind of entity playing different roles relative to the case.
Note. Actor parameters may also be specified for any kind of case, but they are used, in particular, in the
specification of use cases (see 7.24 ). Requirements may also have actor parameters (see 7.20 ).
The body of a case can be specified using subactions and subcalculations needed to achieve the case objective. This
generally includes some combination of collecting information about the subject, evaluating it, and then producing a
result.
The subject of a case definition or usage is modeled as its first parameter. Following the general rule for parameters
(see 7.16.2 ), the subject parameter of a case definition or usage will redefine the subject parameter of any case
definitions or usages that it specializes. The base case definition in the Cases library model specifies the most
general possible subject, with the default name subj and the most general type Anything, and this can then be
further specialized in specific case definitions and usages. A subject parameter is always an in parameter, so it is
not necessary to declare it with an explicit direction. Instead, the keyword subject is used to identify the
declaration of a subject parameter, which must come before the declaration of any other parameters in a case
definition or usage.
A case definition or usage may also have one or more actor parameters. Similarly to the declaration of a subject
parameter, these distinguished parameters are declared using the keyword actor rather than explicitly declaring
their direction. Actor parameters are part usages, so they must be (explicitly or implicitly) defined by part definitions
(see 7.11.2 ).
The objective of a case definition or usage is declared as a requirement usage (see 7.20.2 ), but using the keyword
objective instead of requirement. The subject of an objective requirement is bound by default to the result of
the case definition or usage, meaning that the objective of the case concerns its result. However, this can be
The base case definition and usage for are Case and cases from the Cases model library (see 9.2.14 ).
An analysis case definition is a kind of case definition (see 7.21 ) whose objective is to carry out an analysis on the
subject of the case. An analysis case usage is a kind of case usage that is a usage of an analysis case definition.
The subject of an analysis case identifies what is being analyzed. The subject can often be kept quite general in an
analysis case definition and then made more specific in usages of that definition. Performing an analysis case returns
a result about the subject. For example, a fuel economy analysis of a vehicle subject returns the estimated fuel
economy of the vehicle, given a set of analysis inputs and assumed conditions. The analysis result can be evaluated
to determine whether it satisfies the analysis objective.
• The analysis case can include a set of analysis actions, each of which can specify calculations that return
results. For example, the fuel economy analysis referred to above may require both a dynamics analysis
and a fuel consumption analysis. The dynamics analysis determines the vehicle trajectory and the required
engine power versus time. The fuel consumption analysis determines the fuel consumed to achieve the
required engine power. Both the dynamics analysis and the fuel consumption analysis may require
multiple calculations.
• An analysis can be specified in SysML and solved by external solvers. In this case, the analysis case
specifies the analysis to be performed, but does not define how the analysis is actually executed. For
example, the analysis case could specify that the analysis result is obtained by integrating a differential
equation, without detailing what integration algorithm is to be used to do this.
• An analysis case can also specify a set of simultaneous equations to be solved. This can be done defining
one or more constraint usages (see 7.19 ) that logically and each of the equations, and asserting that the
constraint must be true. A solver would be expected to solve the equations such that it returns values that
satisfy each equation.
analysis def
AnalysisDef1 {
subject s1 :
Subject1;
objective {
doc /* '...' */;
assume
Analysis Case assumption1;
Definition }
}
analysis def
AnalysisDef1 {
/* members */
}
analysis analysis1 :
AnalysisDef1 {
subject redefines s1
= mySubject;
objective {
doc /* '...' */
assume
Analysis Case assumption1;
}
}
analysis analysis1 :
AnalysisDef1 {
/* members */
}
analysis analysis1 :
AnalysisDef1 {
Analyses ...
Compartment analysis analysis4 :
AnalysisDef4;
}
For an analysis case, the subject of the objective is always bound to the result of the analysis case definition or
usage. That is, the objective is always about the result that is produced by the analysis.
objective fuelEconomyAnalysisObjective {
doc
/*
* The objective of this analysis is to determine whether the
* subject vehicle can satisfy the fuel economy requirement.
*/
requirement : FuelEconomyRequirement;
}
// ...
}
The base analysis case definition and usage are AnalysisCase and analysisCases in the AnalsysisCases
model library (see 9.2.15 ).
The subject of a TradeStudy analysis case is the collection of alternatives to be analyzed. An evaluation function is
then provided that is used to evaluate each alternative, in order to find the alternative that meets the objective of the
analysis case. Common TradeStudy objectives are to maximize or minimize the value of the objective function.
An example of a trade-off analysis is an analysis that evaluates and compares alternatives for a vehicle engine in
terms of various criteria, such as power, mass, efficiency and cost. The evaluation function establishes a relative
weighting of each criterion based on its importance to the stakeholder. The evaluation result is computed for each
alternative based on a weighted sum of the normalized value for each of the criteria. The evaluation results for each
alternative are then compared with each other, based on the TradeStudy objective, to determine a preferred
solution.
A verification case definition is a kind of case definition (see 7.21 ) whose result is a verdict on whether the subject
of the case satisfies certain requirements. A verification case usage is a case usage that is a usage of a verification
case definition.
The subject of a verification case is an input parameter that identifies the system or other entity that is being
evaluated as to whether it satisfies certain requirements (often referred to as the "unit under test" or "unit under
verification"). The subject may be kept general in a verification case definition and then made more specific in
usages of that definition. The objective of a verification case is to verify that the verification subject satisfies one or
more specific requirements, which are specified as a special kind of required constraint in the objective. The result
of the validation case is a verdict, which is one of the following:
• Pass indicates that the subject has been determined to satisfy the requirements to be verified.
• Fail indicates that the subject has been determined not to satisfy the requirements to be verified.
• Inconclusive indicates that a determination could not be made as to whether the subject satisfies the
requirements to be verified.
• Error indicates that an error occurred during the performance of the verification.
A typical verification case includes a set of verification actions that perform the following steps.
1. Collect data about the subject as needed to support the verification objective, which is typically done
using verification methods such as analysis, inspection, demonstration, and test.
Each of the verification actions in the verification case requires a set of resources to perform the actions. This may
include verification personnel, equipment, facilities, and other resources. These resources may be represented in the
model as parts that perform actions, or more specifically, using actor parameters on the verification case.
verification def
VerificationDef1 {
subject s1 :
Subject1;
objective {
doc /* '...' */
verify
Verification Case requirement1;
Definition }
}
verification def
VerificationDef1 {
/* members */
}
verification
verification1 :
VerificationDef1 {
subject redefines s1
= mySubject;
objective {
doc /* '...' */
verify
Verification Case requirement1;
}
}
verification
verification1 :
VerificationDef1 {
/* members */
}
Verified
Requirements
Compartment
{
verification
verification1 :
VerificationDef1
[1..*]
ordered nonunique;
/* ... */
perform verification
Verifications verification10;
Compartment verification
verification11 {
verification
'verification11.1';
verification
'verification11.2';
}
}
metadata
VerificationMethod {
kind = (inspection,
Verification Methods analysis,
Compartment
demonstration,test);
}
objective {
Verifies verify requirement1;
Compartment verify requirement2;
}
requirement
requirement1:
Requirement1;
verification
verificationCase1 :
Verify VerificationCase1 {
objective {
verify
requirement1;
}
}
For a verification case, the subject of the objective is always bound to the subject of the verification case definition
or usage. That is, the objective is always about the verification of requirements relative to the subject of the case.
The result of a verification case is a verdict that can have the values pass, fail, inconclusive, or error. In
simple cases, the PassIf calculation definition from the VerificationCases library model (see 9.2.16 ) can be
used to obtain a pass or fail verdict based on a Boolean value. In addition, the VerificationMethod metadata
definition can be used to annotate a verification case with the method used to carry out the verification, one of
inspect, analyze, demo, or test (see also 7.26 ).
metadata VerificationMethod {
kind = VerificationKind::test;
}
action collectData {
in part testVehicle : Vehicle = VehicleMassTest::testVehicle;
out massMeasured :> ISQ::mass;
}
action processData {
in massMeasured :> ISQ::mass = collectData.massMeasured;
out massProcessed :> ISQ::mass;
}
action evaluateData {
in massProcessed :> ISQ::mass = processData.massProcessed;
out verdict : VerdictKind =
// Check that "testVehicle" statisfies "vehicleMassRequirement"
// if its mass equals 'massProcessed'.
PassIf(vehicleMassRequirement(
vehicle = testVehicle,
massActual = massProcessed)
);
}
A use case definition is a kind of case definition (see 7.21 ) that specifies the required behavior of its subject relative
to one or more external actors. The objective of the use case is to provide an observable result of value to one or
more of its actors. A use case usage is a case usage that is a usage of a use case.
A use case is typically specified as a sequence of interactions between the subject and the various actors, which are
all modeled as part usages. Each interaction can be modeled as a message (see 7.13 ) that delivers some payload or
signal from an actor to the system or vice versa. The sources and target ends of these messages can either be
modeled simply as abstract events within the lifetime of the subject and actor occurrences (see 7.9 ), or more
concretely as actions performed to carry out the interaction (see 7.16 ).
An include use case usage is a use case usage that is also a kind of perform action usage (see 7.16 ). A use case
definition or usage may contain an include use case usage to specify that the behavior of the containing use case
includes the behavior of the included use case. The subject of the included use case is the same as the subject of the
containing use case, so the subject parameter of the included use case must have a definition that is compatible with
the definition of the containing use case. Actor parameters of the included use case may be bound to corresponding
actor parameters of the containing use case as necessary (see also 7.16 on parameter binding and 7.13 on binding in
general).
As a behavior, a use case can be performed with specific values for its subject and actor parameters. If a given
subject also has a design model that decomposes its internal structure, then it should be possible to construct an
interaction of the internal parts of the subject, consistent with the design model, that can be shown to be a
specialization of the behavior specified by the performance of the use case for that subject. This is known as a
realization of the use case relative to the design model. A system is properly designed to provide the behavior
required by a set of use cases if there is a legal realization of each use case relative to the design of the system.
{
include use case
useCase1 :
UseCase1 [1..*]
Include Use Cases ordered nonunique;
Compartment /* ... */
Includes
Compartment
A use case definition will typically have an explicit declaration of its subject and one or more external actors (see
see 7.21.2 on the declaration of subject and actor parameters in case definitions). The objective of the use case is for
the subject to provide some result of value to one or more of the actors. The subject and the actors interact in order
to achieve this objective, and the use case definition may specify this interaction as, for example, messages passing
between them (see 7.13.6 on message declarations).
objective {
doc
/* Transport driver and passengers from starting location
* to ending location.
*/
}
The base use case definition and usage are UseCase and useCases from the UseCases library model (see 9.2.17 )
An include use case usage may also be declared using just the keyword include instead of include use case.
In this case, the declaration does not include either a name or short name. Instead, the included use case of the
include use case usage is identified by giving a qualified name or feature chain immediately after the include
keyword.
The subject of an included use case usage is bound by default to the subject of its containing use case definition or
usage. However, the actor parameters of the included use case usages should be explicitly bound to appropriate
actors of the containing use case, as necessary.
then done;
}
A viewpoint definition is a kind of requirement definition (see 7.20 ) that frames the concerns of one or more
stakeholders regarding information about a modeled system or domain of interest. A viewpoint usage is a
requirement usage that is a usage of a viewpoint definition. The subject of a viewpoint is a view that is required to
address the stakeholder concerns.
A view definition is a kind of part definition (see 7.11 ) that specifies how to create a view artifact to satisfy one or
more viewpoints. A view artifact is a rendering of information that addresses some aspect of a system or domain of
interest of concern to one or more stakeholders. A view definition can include view conditions to extract the relevant
model content, and a rendering that specifies how the model content should be rendered in a view artifact. A view
condition is specified using metadata, in the same way as for a filter condition on a package (see 7.5 ).
A view usage is a kind of part usage (see 7.11 ) that is a usage of a view definition. A view usage exposes a portion
of a model, which is a kind of import (see 7.5 ) without regard to visibility that provides the scope of application of
the view conditions. The view rendering can then be applied to those exposed elements that meet all the view
conditions to produce the view artifact. A view usage can add further view conditions to those inherited from its
view definition, and it can specify a view rendering if one is not provided by its definition.
View usages can be nested and ordered within a composite view to generate composite view artifacts. The view
usage also can contain further rendering specifications on the symbolic representation, style, and layout for a
particular view. For example, a complex view definition with deeply nested structures can be rendered as a
document, where each nested view usage corresponds to a section of a document, and the ordering represents the
order of the sections within the document. Within each section of the document, the nested view usages can then
specify the information that is rendered as a combination of text, graphical, and tabular information.
A rendering definition is a kind of part definition (see 7.11 ) that specifies how a view artifact is to be rendered. A
rendering usage is a kind of part usage that is a usage of a rendering definition. A rendering usage is used in a view
definition or usage to specify the view rendering.
viewpoint def
ViewPointDef1;
viewpoint viewpoint1 :
ViewPointDef1;
concern concern1 :
Concern1;
viewpoint viewpoint1 :
Frame Viewpoint1 {
frame concern1;
}
{
frame concern
concern1 : Concern1
[1..*]
Frames ordered nonunique;
Compartment /* ... */
A view definition or usage is declared as a kind of part definition or usage (see 7.11.2 ), using the kind keyword
view. A view usage must be defined by a single view.
A view definition includes filter conditions on what kinds of elements can be included in a view and identifies a
view rendering that determines how the included elements are to be rendered. The filter conditions are specified in
the same way as for packages (see 7.5.4 ), by using the keyword filter followed by a Boolean-valued, model-level
evaluable expression (see [KerML. 7.4.9]).
The view rendering is specified using the keyword render followed by a composite rendering usage declaration
(see 7.25.4 ). Alternatively, the keyword render may be followed by just a qualified name or feature chain
identifying a rendering usage, which establishes a reference subsetting relationship between the view rendering
usage and the identified rendering usage. The Views model in the Systems Model Library provides a limited
number of basic standard renderings (see 9.2.18 ).
filter @SysML::PartUsage;
render asTreeDiagram;
}
A view usage inherits any filter conditions from its view definition and can declare addition conditions of its own. If
a view usage does not declare a view rendering, then this will be inherited from the view definition, if it has one. If a
view usage does declare a view rendering, then this will redefine the view rendering from its view definition (if
any). Note that this means that the view rendering for a view usage must be consistent with the rendering specified
in the view definition, though it can be more specialized.
In addition, a view usage can specify which elements are actually to be exposed by the view. This is done using
expose relationships, which are a special kind of import relationships. Expose relationships are declared like import
relationships (see 7.5.3 ), but using the keyword expose instead of import and with no specification of visibility.
Since an expose relationship is a kind of import relationship, the filtered import notation can also be used with it (see
7.5.4 ). This provides an alternate way to filter the elements exposed by a view usage.
render asMyTreeDiagram;
}
The base view definition and usage are View and views from the Views model library (see 9.2.18 ).
The subject of a viewpoint definition or usage must be a view. Otherwise, a viewpoint is specified with assumed and
required constraints, just like any requirement definition or usage. However, it is typical for a viewpoint definition to
be structured as framing a set of stakeholder concerns (see 7.20.3 ) regarding information about a modeled system or
domain of interest. The viewpoint then models the requirement for view needed in order to address the framed
concerns.
require constraint {
doc
/* A system structure view shall show the hierarchical
* part decomposition of a system, starting with a
Since a viewpoint usage is a kind of requirement usage, a view usage can be declared to satisfy a viewpoint usage
using a satisfy requirement usage (see 7.20.4 ). However, as a short cut, any composite viewpoint usage nested in a
view definition or usage is asserted to be satisfied by that view.
//...
}
Alternatively, a satisfy requirement usage can be used explicitly between a viewpoint and a view. In particular, a
satisfy requirement usage for a viewpoint that is nested in a view definition or usage will, by default, have the
containing view as its satisfying feature (as described in general for nested satisfy requirement usages in 7.20.4 ).
// ...
}
The base viewpoint definition and usage are Viewpoint and viewpoints from the Views library model (see
9.2.18 ).
While a rendering is intended to specify how a view is rendered as a view artifact, there are no specific constructs
provided in SysML for specifying that. A rendering definition or usage can be defined similarly to any other part
definition or usage, perhaps with nested subrenderings and references to related view usages. Nevetheless,
conforming tools can provide libraries of rendering usages that reflect the capabilities they provide for rendering
various kinds of views, which can then be identified in user models specifying those kinds of views. A small number
of basic standard rendering usages are provided in the Views library model (see 9.2.18 ).
The base rendering definition and usage are Rendering and renderings from the Views library model (see
9.2.18 ).
A compartment is a view usage (see 7.25.2 ). For example, a part definition or part usage may contain an attributes
compartment that lists its attributes (see, for example, Table 9 in 7.11.2 ). The compartment label is the view name.
This view implicitly exposes the owning part and applies a filter expression to select the attributes of the part. The
A graphical node symbol, such as for a part definition or usage, can have any number of compartments. Each
compartment can be rendered using graphical notation in a graphical compartment or using textual notation in a
textual compartment. For example, an interconnection view of a part can be rendered in a graphical compartment of
the part symbol showing nested parts as nodes and connections as edges. The parts can also be rendered in a textual
compartment labeled as parts and rendered as a list of parts.
A diagram is also a view usage. The diagram header is the name compartment of the view usage. As with any other
view usage, the filtered contents of a diagram are rendered in a compartment. These contents are typically rendered
as a graphical compartment that contains nodes and edges, but it may be a textual compartment as well. A graphical
node within the graphical compartment of a diagram can also have compartments that are view usages as described
above. This provides a mechanism to nest views within other views. Definition and usage nodes can include
symbols on the boundary of the node to represent ports and parameters.
An edge in a graphical view can be attached via a dashed line to a node that elaborates the features of the edge. The
attached node can also have graphical or textual compartments to show the internal structure of a connection, such
as its decomposition into nested connections.
A view usage may contain other view usages that each contain a name compartment and rendered contents in their
respective compartment. This enables nesting of diagrams within other diagrams.
The StandardViewDefinitions package in the Systems Model Library (see 9.2.19 ) provides a set of standard
view definitions for typical kinds of diagrams, including the valid contents for the view. The standard views are then
rendered as specified for the graphical notation, such as the General View in 8.2.3.5 , the Interconnection View in
8.2.3.11 , etc. (see Table 33 in 9.2.19 for the complete list). However, visualization of SysML models is not limited
to these standard views. User-defined view definitions and usages can be used to provide a wide range of views
beyond the standard set.
General View
Tree View
Nested View
Table View
Matrix View
Matrix View
7.26 Metadata
7.26.1 Metadata Overview
SYSML2_-18: No support for metadata definition in graphical notation
Metamodel references:
A metadata usage is a kind of annotating element (see 7.4 ) that allows for the definition of structured metadata
with modeler-specified attributes. This may be used, for example, to add tool-specific information to a model that
can be relevant to the function of various kinds of tooling that may use or process a model, or domain-specific
information relevant to a certain project or organization. A metadata usage is defined by a single metadata
definition. If the definition has no nested features itself, then the metadata usage simply acts as a user-defined
syntactic tag on the annotated element. If the definition does have features, then the metadata usage must provide
value bindings for all of them, specifying metadata for the annotated element.
metadata MetadataDef1 {
attribute1=value1;
attribute2="value2";
attribute3="http://...."
}
Metadata or
@MetadataDef1 {
attribute1=value1;
attribute2="value2";
attribute3="http://...."
}
analysis vehicleAnalysis
:
VehicleAnalysis;
metadata ToolMetadata
about vehicleAnalysis
{
toolName="ToolX";
toolURL="http://.....";
behaviorName=
"ComputeVehicleState";
}
Annotation-Metadata
or
analysis vehicleAnalysis
:
VehicleAnalysis {
metadata ToolMetadata
{
toolName="ToolX";
toolURL="http://.....";
behaviorName=
"ComputeVehicleState";
}
}
metadata MetadataDef1 {
attribute1=value1;
Metadata attribute2="value2";
Compartment attribute3=
"http://.....";
}
metadata def
ToolMetadata {
attribute toolName :
Metadata Definition String;
attribute uri :
String;
}
A metadata usage is declared like an item usage (see 7.10 ) using the keyword metadata (or the symbol @)
followed by the keyword defined by (or the symbol :) and the qualified name of exactly one metadata definition
or KerML Metaclass (see [KerML], 7.4.13). If there is no declared name or short name, then the keyword defined
by (or the symbol :) may also be omitted. In addition, one or more annotated elements can be identified for the
metadata usage after the keyword about, indicating that the metadata usage has annotation relationships to each of
the identified elements (see also 7.4 on annotation relationships).
If the specified metadata definition (or KerML metaclass) has features, then a body must be given for the metadata
usage that declares reference usages (see 7.6 ) that redefine each of the features of the definition and binds them to
the result of model-level evaluable expressions (see [KerML, 7.4.9]). These nested reference usages of a metadata
usage must always have the same names as the names of the features of its metadata definition, so the shorthand
prefix redefines notation (see 7.6 ) is always used
The keyword ref and/or redefines (or the equivalent symbol :>>) may be omitted in the declaration of a feature
of a metadata usage.
The base metadata definition and usage are MetadataItem and metadataItems from the Metadata library (see
9.2.20 ). The base metadata definition MetadataItem specializes the KerML metaclass Metaobject, and it
inherits the feature annotatedElement from Metaobject, which is typed by the reflected KerML metaclass
KerML::Element (see [KerML, 9.2.17]). When a metadata usage is declared, its inherited annotatedElement
feature is implicitly bound to reflective instances representing its annotated elements.
A metadata definition can restrict the kind of elements that it can be applied to by subsetting
Metaobject::annotatedElement and restricting its type. If a metadata usage then inherits one or more concrete
features that directly or indirectly subset annotatedElement, any annotated element of the metadata usage must
conform to the type of at least one of these features. The restricted type should be one of the reflective metaclasses
from the KerML (see [KerML, 9.2.17]) or SysML (see 9.2.21 ) abstract syntax models.
• If the annotated type is a definition and the baseType is a definition (or KerML classifier), then the
annotated definition implicitly subclassifies the baseType.
When evaluated in a model-level evaluable expression, the meta-cast operator meta (see [KerML, 7.4.9.2]) may be
used to cast a type element referenced as its first operand to the actual reflective metadata definition (or KerML
metaclass) value for the type, which may then be bound to the baseType feature of SemanticMetadata.
In addition, a user-defined keyword for semantic metadata may also be used to declare a definition or usage without
using any language-defined keyword.
• The SysML concrete syntax includes a textual notation (see 8.2.2 ), which is generally distinct from that
of KerML, though consistent on common elements (such as packages and expressions), and a complete
graphical notation (see 8.2.3 ).
• The SysML abstract syntax (see 8.3 ) imports the KerML abstract syntax, reusing some KerML
metaclasses directly, and further specializing most other KerML metaclasses.
• The SysML semantics (see 8.4 ) are defined by relating the SysML abstract syntax to the semantic models
in the Systems Model Library (see Clause 9 ), which is based on the Kernel Model Library from KerML,
and providing syntactic transformations from SysML models to syntactically equivalent KerML models
(including elements that are otherwise implicit in the SysML abstract syntax).
Throughout this clause, the names of elements from the SysML (and KerML) abstract syntax models appear in a
"code" font. Further:
1. Names of metaclasses appear exactly as in the abstract syntax, including capitalization, except possibly
with added pluralization. When used as English common nouns, e.g., "a Usage", "multiple
Subsettings", they refer to instances of the metaclass. E.g., "Usages can be nested in other Usages"
refers to instances of the metaclass Usage that reside in models. This can be modified with the term
"metaclass" as necessary to refer to the metaclass itself instead of its instances, e.g., "The Usage metaclass
is contained in the DefinitionAndUsage package."
2. Names of properties of metaclasses, when used as English common nouns, e.g., “an ownedUsage”,
“multiple nestedActions”, refer to values of the properties. This can be modified using the term
"metaproperty" as necessary to refer to the metaproperty itself instead of its values, e.g., "The
ownedUsage metaproperty is contained in the DefinitionAndUsage package."
Similar stylistic conventions apply to text about SysML (and KerML) models, except that an "italic code" front
is used.
1. Convention 1 above applies to SysML Definitions (e.g., Action), using "definition" (or a more
specialized term) instead of "metaclass" (e.g., "the action definition Action").
2. Convention 2 above applies to SysML Usages (e.g, actions), using "usage" (or a more specialized term)
instead of "metaproperty" (e.g., "the action usage actions").
The grammar definition for the SysML textual concrete syntax defines how lexical tokens for an input text are
grouped in order to construct an abstract syntax representation of a model (see 8.3 ). The concrete syntax grammar
Productions in the grammar formally result in the synthesis of classes in the abstract syntax and the population of
their properties (see Table 28 ). Productions may also be parameterized, with the parameters typed by abstract
syntax classes. Information passed in parameters during parsing allows a production to update the properties of the
provided abstract syntax elements as a side-effect of the parsing it specifies. Some productions only update the
properties of parameters, without synthesizing any new abstract syntax element.
The lexical structure of the SysML textual notation is identical to that of the KerML textual notation [KerML],
except for the following two points.
2. The set of special lexical terminals matching either certain keywords or their symbolic equivalents are the
following in SysML.
DEFINED_BY = ':' | 'defined' 'by'
SPECIALIZES = ':>' | 'specializes'
SUBSETS = ':>' | 'subsets'
REFERENCES = '::>' | 'references'
REDEFINES = ':>>' | 'redefines'
Tooling for the SysML textual notation should generally highlight keywords relative to other text, for example by
using boldface and/or distinctive coloring. However, while keywords are shown in boldface in this specification, the
specification does not require any specific highlighting (or any highlighting at all). SysML textual notation
documents are expected to be interchanged as plain text (see also [KerML, Clause 10] on Model Interchange). This
Identification : Element =
( '<' declaredShortName = NAME '>' )?
( declaredName = NAME )?
RelationshipBody : Relationship =
';' | '{' ( ownedRelationship += OwnedAnnotation )* '}'
Dependency =
( ownedRelationship += PrefixMetadataAnnotation )*
'dependency' DependencyDeclaration
RelationshipBody
DependencyDeclaration =
( Identification 'from' )?
client += [QualifiedName] ( ',' client += [QualifiedName] )* 'to'
supplier += [QualifiedName] ( ',' supplier += [QualifiedName] )*
Annotation =
annotatedElement = [QualifiedName]
OwnedAnnotation : Annotation =
annotatingElement = AnnotatingElement
{ ownedRelatedElement += annotatingElement }
AnnotatingMember : OwningMembership =
ownedRelatedElement += AnnotatingElement
AnnotatingElement =
Comment
| Documentation
| TextualRepresentation
| MetadataFeature
Comment =
( 'comment' Identification
( 'about' annotation += Annotation
{ ownedRelationship += annotation }
( ',' annotation += Annotation
{ ownedRelationship += annotation } )*
)?
)?
( 'locale' locale = STRING_VALUE )?
body = REGULAR_COMMENT
Documentation =
'doc' Identification
( 'locale' locale = STRING_VALUE )?
body = REGULAR_COMMENT
TextualRepresentation =
( 'rep' Identification )?
'language' language = STRING_VALUE body = REGULAR_COMMENT
RootNamespace : Namespace =
PackageBodyElement*
Package =
( ownedRelationship += PrefixMetadataMember )*
PackageDeclaration PackageBody
LibraryPackage =
( isStandard ?= 'standard' ) 'library'
( ownedRelationship += PrefixMetadataMember )*
PackageDeclaration PackageBody
PackageDeclaration : Package =
'package' Identification
PackageBody : Package =
';' | '{' PackageBodyElement* '}'
PackageBodyElement : Package =
ownedRelationship += PackageMember
| ownedRelationship += ElementFilterMember
| ownedRelationship += AliasMember
| ownedRelationship += Import
MemberPrefix : Membership =
( visibility = VisibilityIndicator )?
PackageMember : OwningMembership
MemberPrefix
( ownedRelatedElement += DefinitionElement
| ownedRelatedElement = UsageElement )
ElementFilterMember : ElementFilterMembership =
MemberPrefix
'filter' ownedRelatedElement += OwnedExpression ';'
AliasMember : Membership =
MemberPrefix
'alias' ( '<' memberShortName = NAME '>' )?
( memberName = NAME )?
'for' memberElement = [QualifiedName]
RelationshipBody
Import =
visibility = VisibilityIndicator
'import' ( isImportAll ?= 'all' )?
ImportDeclaration
RelationshipBody
ImportDeclaration : Import =
MembershipImport =
importedMembership = [QualifiedName]
( '::' isRecursive ?= '**' )?
NamespaceImport =
importedNamespace = [QualifiedName] '::' '*'
( '::' isRecursive ?= '**' )?
| importedNamspace = FilterPackage
{ ownedRelatedElement += importedNamespace }
FilterPackage : Package =
ownedRelationship += FilterPackageImport
( ownedRelationship += FilterPackageMember )+
FilterPackageMember : ElementFilterMembership =
'[' ownedRelatedElement += OwnedExpression ']'
VisibilityIndicator : VisibilityKind =
'public' | 'private' | 'protected'
DefinitionElement : Element =
Package
| LibraryPackage
| AnnotatingElement
| Dependency
| AttributeDefinition
| EnumerationDefinition
| OccurrenceDefinition
| IndividualDefinition
| ItemDefinition
| PartDefinition
| ConnectionDefinition
| FlowConnectionDefinition
| InterfaceDefinition
| PortDefinition
| ActionDefinition
| CalculationDefinition
| StateDefinition
| ConstraintDefinition
| RequirementDefinition
| ConcernDefinition
| CaseDefinition
| AnalysisCaseDefinition
| VerificationCaseDefinition
| UseCaseDefinition
| ViewDefinition
| ViewpointDefinition
| RenderingDefinition
| MetadataDefinition
| ExtendedDefinition
UsageElement : Usage =
NonOccurrenceUsageElement
| OccurrenceUsageElement
DefinitionExtensionKeyword : Definition =
ownedRelationship += PrefixMetadataMember
DefinitionPrefix : Definition =
BasicDefinitionPrefix? DefinitionExtensionKeyword*
Definition =
DefinitionDeclaration DefinitionBody
DefinitionDeclaration : Definition
Identification SubclassificationPart?
DefinitionBody : Type =
';' | '{' DefinitionBodyItem* '}'
DefinitionBodyItem : Type =
ownedRelationship += DefinitionMember
| ownedRelationship += VariantUsageMember
| ownedRelationship += NonOccurrenceUsageMember
| ( ownedRelationship += SourceSuccessionMember )?
ownedRelationship += OccurrenceUsageMember
| ownedRelationship += AliasMember
| ownedRelationship += Import
DefinitionMember : OwningMembership =
MemberPrefix
ownedRelatedElement += DefinitionElement
VariantUsageMember : VariantMembership =
MemberPrefix 'variant'
ownedVariantUsage = VariantUsageElement
NonOccurrenceUsageMember : FeatureMembership =
MemberPrefix
ownedRelatedElement += NonOccurrenceUsageElement
OccurrenceUsageMember : FeatureMembership =
MemberPrefix
ownedRelatedElement += OccurrenceUsageElement
StructureUsageMember : FeatureMembership =
MemberPrefix
ownedRelatedElement += StructureUsageElement
BehaviorUsageMember : FeatureMembership =
MemberPrefix
ownedRelatedElement += BehaviorUsageElement
8.2.2.6.2 Usages
FeatureDirection : FeatureDirectionKind =
'in' | 'out' | 'inout'
RefPrefix : Usage =
( direction = FeatureDirection )?
( isAbstract ?= 'abstract' | isVariation ?= 'variation')?
( isReadOnly ?= 'readonly' )?
( isDerived ?= 'derived' )?
( isEnd ?= 'end' )?
UsageExtensionKeyword : Usage =
ownedRelationship += PrefixMetadataMember
UsagePrefix : Usage =
BasicUsagePrefix UsageExtensionKeyword*
Usage =
UsageDeclaration UsageCompletion
UsageDeclaration : Usage =
Identification FeatureSpecializationPart?
UsageCompletion : Usage =
ValuePart? UsageBody
UsageBody : Usage =
DefinitionBody
ValuePart : Feature =
ownedRelationship += FeatureValue
FeatureValue =
( '='
| isInitial ?= ':='
| isDefault ?= 'default' ( '=' | isInitial ?= ':=' )?
)
ownedRelatedElement += OwnedExpression
DefaultReferenceUsage : ReferenceUsage =
RefPrefix Usage
ReferenceUsage =
RefPrefix 'ref' Usage
VariantReference : ReferenceUsage =
ownedRelationship += OwnedReferenceSubsetting
FeatureSpecialization* UsageBody
NonOccurrenceUsageElement : Usage =
DefaultReferenceUsage
| ReferenceUsage
| AttributeUsage
| EnumerationUsage
| BindingConnectorAsUsage
| SuccessionAsUsage
| ExtendedUsage
OccurrenceUsageElement : Usage =
StructureUsageElement | BehaviorUsageElement
StructureUsageElement : Usage =
OccurrenceUsage
| IndividualUsage
| PortionUsage
BehaviorUsageElement : Usage =
ActionUsage
| CalculationUsage
| StateUsage
| ConstraintUsage
| RequirementUsage
| ConcernUsage
| CaseUsage
| AnalysisCaseUsage
| VerificationCaseUsage
| UseCaseUsage
| ViewpointUsage
| PerformActionUsage
| ExhibitStateUsage
| IncludeUseCaseUsage
| AssertConstraintUsage
| SatisfyRequirementUsage
VariantUsageElement : Usage =
VariantReference
| ReferenceUsage
| AttributeUsage
| BindingConnectorAsUsage
| SuccessionAsUsage
| OccurrenceUsage
| IndividualUsage
| PortionUsage
| EventOccurrenceUsage
| ItemUsage
| PartUsage
| ViewUsage
| RenderingUsage
| PortUsage
| ConnectionUsage
| InterfaceUsage
| AllocationUsage
| Message
| FlowConnectionUsage
| SuccessionFlowConnectionUsage
| BehaviorUsageElement
8.2.2.6.5 Specialization
SubclassificationPart : Classifier =
SPECIALIZES ownedRelationship += OwnedSubclassification
( ',' ownedRelationship += OwnedSubclassification )*
OwnedSubclassification : Subclassification =
superClassifier = [QualifiedName]
FeatureSpecialization : Feature =
Typings | Subsettings | References | Redefinitions
Typings : Feature =
TypedBy ( ',' ownedRelationship += FeatureTyping )*
TypedBy : Feature =
DEFINED_BY ownedRelationship += FeatureTyping
FeatureTyping =
OwnedFeatureTyping | ConjugatedPortTyping
OwnedFeatureTyping : FeatureTyping =
type = [QualifiedName]
| type = OwnedFeatureChain
{ ownedRelatedElement += type }
Subsettings : Feature =
Subsets ( ',' ownedRelationship += OwnedSubsetting )*
Subsets : Feature =
SUBSETS ownedRelationship += OwnedSubsetting
OwnedSubsetting : Subsetting =
subsettedFeature = [QualifiedName]
| subsettedFeature = OwnedFeatureChain
{ ownedRelatedElement += subsettedFeature }
References : Feature =
REFERENCES ownedRelationship += OwnedReferenceSubsetting
OwnedReferenceSubsetting : ReferenceSubsetting =
referencedFeature = [QualifiedName]
| referencedFeature = OwnedFeatureChain
{ ownedRelatedElement += referenceFeature }
Redefinitions : Feature =
Redefines ( ',' ownedRelationship += OwnedRedefinition )*
Redefines : Feature =
REDEFINES ownedRelationship += OwnedRedefinition
OwnedRedefinition : Redefinition =
redefinedFeature = [QualifiedName]
| redefinedFeature = OwnedFeatureChain
{ ownedRelatedElement += redefinedFeature }
OwnedFeatureChain : Feature =
ownedRelationship += OwnedFeatureChaining
( '.' ownedRelationship += OwnedFeatureChaining )+
OwnedFeatureChaining : FeatureChaining =
chainingFeature = [QualifiedName]
8.2.2.6.6 Multiplicity
MultiplicityPart : Feature =
ownedRelationship += OwnedMultiplicity
| ( ownedRelationship += OwnedMultiplicity )?
OwnedMultiplicity : OwningMembership =
ownedRelatedElement += MultiplicityRange
MultiplicityRange =
'[' ( ownedRelationship += MultiplicityExpressionMember '..' )?
ownedRelationship += MultiplicityExpressionMember ']'
MultiplicityExpressionMember : OwningMembership =
ownedRelatedElement += ( LiteralExpression | FeatureReferenceExpression )
AttributeDefinition : AttributeDefinition =
DefinitionPrefix 'attribute' 'def' Definition
AttributeUsage : AttributeUsage =
UsagePrefix 'attribute' Usage
EnumerationDefinition =
DefinitionExtensionKeyword*
'enum' 'def' DefinitionDeclaration EnumerationBody
EnumerationBody : EnumerationDefinition =
';'
| '{' ( ownedRelationship += AnnotatingMember
| ownedRelationship += EnumerationUsageMember )*
'}'
EnumerationUsageMember : VariantMembership =
MemberPrefix ownedRelatedElement += EnumeratedValue
EnumeratedValue : EnumerationUsage =
'enum'? Usage
EnumerationUsage : EnumerationUsage =
UsagePrefix 'enum' Usage
OccurrenceDefinitionPrefix : OccurrenceDefinition =
BasicDefinitionPrefix?
( isIndividual ?= 'individual' )?
DefinitionExtensionKeyword*
OccurrenceDefinition =
OccurrenceDefinitionPrefix 'occurrence' 'def' Definition
IndividualDefinition : OccurrenceDefinition =
BasicDefinitionPrefix? isIndividual ?= 'individual'
DefinitionExtensionKeyword* 'def' Definition
OccurrenceUsagePrefix : OccurrenceUsage =
BasicUsagePrefix
OccurrenceUsage =
OccurrenceUsagePrefix 'occurrence' Usage
IndividualUsage : OccurrenceUsage =
BasicUsagePrefix isIndividual ?= 'individual'
UsageExtensionKeyword* Usage
PortionUsage : OccurrenceUsage =
BasicUsagePrefix ( isIndividual ?= 'individual' )?
portionKind = PortionKind
UsageExtensionKeyword* Usage
PortionKind =
'snapshot' | 'timeslice'
EventOccurrenceUsage =
OccurrenceUsagePrefix 'event'
( ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart?
| 'occurrence' UsageDeclaration? )
UsageCompletion
SourceSuccessionMember : FeatureMembership =
'then' ownedRelatedElement += SourceSuccession
SourceSuccession : SuccessionAsUsage =
ownedRelationship += SourceEndMember
SourceEndMember : EndFeatureMembership =
ownedRelatedElement += SourceEnd
SourceEnd : ReferenceUsage =
( ownedRelationship += OwnedMultiplicity )?
ItemDefinition =
OccurrenceDefinitionPrefix
'item' 'def' Definition
ItemUsage =
OccurrenceUsagePrefix 'item' Usage
PartDefinition =
OccurrenceDefinitionPrefix 'part' 'def' Definition
PartUsage =
OccurrenceUsagePrefix 'part' Usage
PortDefinition =
DefinitionPrefix 'port' 'def' Definition
ownedRelationship += ConjugatedPortDefinitionMember
ConjugatedPortDefinitionMember : OwningMembership =
ownedRelatedElement += ConjugatedPortDefinition
ConjugatedPortDefinition =
ownedRelationship += PortConjugation
PortConjugation =
{}
PortUsage =
OccurrenceUsagePrefix 'port' Usage
ConjugatedPortTyping : ConjugatedPortTyping =
'~' originalPortDefinition = ~[QualifiedName]
(See Note 2)
Notes
1. Even though it is not explicitly represented in the text, a PortDefinition is always parsed as containing
a nested ConjugatedPortDefinition with a PortDefinition Relationship pointing back to the
containing PortDefinition. The abstract syntax for ConjugatedPortDefinition sets its
effectiveName to the name of its originalPortDefinition with the symbol ~ prepended to it (see
8.3.12.2 ). (See also 8.4.8.1 .)
2. The notation ~[QualifiedName] indicates that a QualifiedName shall be parsed from the input text,
but that it shall be resolved as if it was the qualified name constructed as follows:
◦ Extract the last segment name of the given QualifiedName and prepend the symbol ~ to it.
◦ Append the name so constructed to the end of the entire original QualifiedName.
For example, if the ConjugatedPortTyping is ~A::B::C, then the given QualifiedName is A::B::C,
and ~[QualifiedName] is resolved as A::B::C::'~C'. Alternatively, a conforming tool may first
resolve the given QualifiedName as usual to a PortDefinition and then use the
conjugatedPortDefinition of this PortDefinition as the resolution of ~[QualifiedName].
ConnectionDefinition =
OccurrenceDefinitionPrefix 'connection' 'def' Definition
ConnectionUsage =
OccurrenceUsagePrefix
( 'connection' UsageDeclaration ValuePart?
( 'connect' ConnectorPart )?
| 'connect' ConnectorPart )
UsageBody
ConnectorPart : ConnectionUsage =
BinaryConnectorPart | NaryConnectorPart
BinaryConnectorPart : ConnectionUsage =
ownedRelationship += ConnectorEndMember 'to'
ownedRelationship += ConnectorEndMember
NaryConnectorPart : ConnectionUsage =
'(' ownedRelationship += ConnectorEndMember ','
ownedRelationship += ConnectorEndMember
( ',' ownedRelationship += ConnectorEndMember )* ')'
ConnectorEnd : ReferenceUsage =
( declaredName = NAME REFERENCES )?
ownedRelationship += OwnedReferenceSubsetting
( ownedRelationship += OwnedMultiplicity )?
BindingConnectorAsUsage =
UsagePrefix ( 'binding' UsageDeclaration )?
'bind' ownedRelationship += ConnectorEndMember
'=' ownedRelationship += ConnectorEndMember
UsageBody
8.2.2.13.3 Successions
SuccessionAsUsage =
UsagePrefix ( 'succession' UsageDeclaration )?
'first' s.ownedRelationship += ConnectorEndMember
'then' s.ownedRelationship += ConnectorEndMember
UsageBody
FlowConnectionDefinition :
OccurrenceDefinitionPrefix 'flow' 'def' Definition
Message : FlowConnectionUsage =
OccurrenceUsagePrefix 'message'
MessageDeclaration DefinitionBody
{ isAbstract = true }
MessageDeclaration : FlowConnectionUsage =
UsageDeclaration ValuePart?
( 'of' ownedRelationship += FlowPayloadFeatureMember )?
( 'from' ownedRelationship += MessageEventMember
'to' ownedRelationship += MessageEventMember
)?
| ownedRelationship += MessageEventMember 'to'
ownedRelationship += MessageEventMember
MessageEventMember : ParameterMembership =
ownedRelatedElement += MessageEvent
MessageEvent : EventOccurrenceUsage =
ownedRelationship += OwnedReferenceSubsetting
FlowConnectionUsage =
OccurrenceUsagePrefix 'flow'
FlowConnectionDeclaration DefinitionBody
SuccessionFlowConnectionUsage =
OccurrenceUsagePrefix 'succession' 'flow'
FlowConnectionDeclaration DefinitionBody
FlowConnectionDeclaration : FlowConnectionUsage =
UsageDeclaration ValuePart?
( 'of' ownedRelationship += FlowPayloadFeatureMember )?
( 'from' ownedRelationship += FlowEndMember
FlowPayloadFeatureMember : FeatureMembership =
ownedRelatedElement += FlowPayloadFeature
FlowPayloadFeature : ItemFeature =
PayloadFeature
PayloadFeature : Feature =
Identification? PayloadFeatureSpecializationPart
ValuePart?
| ownedRelationship += OwnedFeatureTyping
( ownedRelationship += OwnedMultiplicity )?
| ownedRelationship += OwnedMultiplicity
ownedRelationship += OwnedFeatureTyping
PayloadFeatureSpecializationPart : Feature =
( -> FeatureSpecialization )+ MultiplicityPart?
FeatureSpecialization*
| MultiplicityPart FeatureSpecialization+
FlowEndMember : EndFeatureMembership =
ownedRelatedElement += FlowEnd
FlowEnd : ItemFlowEnd =
( ownedRelationship += FlowEndSubsetting )?
ownedRelationship += FlowFeatureMember
FlowEndSubsetting : ReferenceSubsetting =
referencedFeature = [QualifiedName]
| referencedFeature = FeatureChainPrefix
{ ownedRelatedElement += referencedFeature }
FeatureChainPrefix : Feature =
( ownedRelationship += OwnedFeatureChaining '.' )+
ownedRelationship += OwnedFeatureChaining '.'
FlowFeatureMember : FeatureMembership =
ownedRelatedElement += FlowFeature
FlowFeature : ReferenceUsage =
ownedRelationship += FlowFeatureRedefinition
(See Note 1)
FlowFeatureRefefinition : Redefinition =
redefinedFeature = [QualifiedName]
Notes
owningType.directionOf(ownedRedefinition->at(1).redefinedFeature)
InterfaceBody : Type =
';' | '{' InterfaceBodyItem* '}'
InterfaceBodyItem : Type =
ownedRelationship += DefinitionMember
| ownedRelationship += VariantUsageMember
| ownedRelationship += InterfaceNonOccurrenceUsageMember
| ( ownedRelationship += SourceSuccessionMember )?
ownedRelationship += InterfaceOccurrenceUsageMember
| ownedRelationship += AliasMember
| ownedRelationship += Import
InterfaceNonOccurrenceUsageMember : FeatureMembership =
MemberPrefix ownedRelatedElement += InterfaceNonOccurrenceUsageElement
InterfaceNonOccurrenceUsageElement : Usage =
ReferenceUsage
| AttributeUsage
| EnumerationUsage
| BindingConnectorAsUsage
| SuccessionAsUsage
InterfaceOccurrenceUsageMember : FeatureMembership =
MemberPrefix ownedRelatedElement += InterfaceOccurrenceUsageElement
InterfaceOccurrenceUsageElement : Usage =
DefaultInterfaceEnd | StructureUsageElement | BehaviorUsageElement
DefaultInterfaceEnd : PortUsage =
( direction = FeatureDirection )?
( isAbstract ?= 'abstract' | isVariation ?= 'variation')?
isEnd ?= 'end' Usage
InterfaceUsage =
OccurrenceUsagePrefix 'interface'
InterfaceUsageDeclaration InterfaceBody
InterfaceUsageDeclaration : InterfaceUsage =
UsageDeclaration ValuePart?
( 'connect' InterfacePart )?
| InterfacePart
InterfacePart : InterfaceUsage =
BinaryInterfacePart | NaryInterfacePart
BinaryInterfacePart : InterfaceUsage =
ownedRelationship += InterfaceEndMember 'to'
ownedRelationship += InterfaceEndMember
NaryInterfacePart : InterfaceUsage =
'(' ownedRelationship += InterfaceEndMember ','
ownedRelationship += InterfaceEndMember
( ',' ownedRelationship += InterfaceEndMember )* ')'
InterfaceEndMember : EndFeatureMembership =
ownedRelatedElement += InterfaceEnd
AllocationDefinition =
OccurrenceDefinitionPrefix 'allocation' 'def' Definition
AllocationUsage =
OccurrenceUsagePrefix
AllocationUsageDeclaration UsageBody
AllocationUsageDeclaration : AllocationUsage =
'allocation' UsageDeclaration
( 'allocate' ConnectorPart )?
| 'allocate' ConnectorPart
ActionDefinition =
OccurrenceDefinitionPrefix 'action' 'def'
DefinitionDeclaration ActionBody
ActionBody : Type =
';' | '{' ActionBodyItem* '}'
ActionBodyItem : Type =
NonBehaviorBodyItem
| ownedRelationship += InitialNodeMember
( ownedRelationship += ActionTargetSuccessionMember )*
| ( ownedRelationship += SourceSuccessionMember )?
ownedRelationsuip += ActionBehaviorMember
( ownedRelationship += ActionTargetSuccessionMember )*
| ownedRelationship += GuardedSuccessionMember
NonBehaviorBodyItem =
ownedRelationship += Import
| ownedRelationship += AliasMember
| ownedRelationship += DefinitionMember
| ownedRelationship += VariantUsageMember
| ownedRelationship += NonOccurrenceUsageMember
| ( ownedRelationship += SourceSuccessionMember )?
ownedRelationship += StructureUsageMember
ActionBehaviorMember : FeatureMembership =
BehaviorUsageMember | ActionNodeMember
InitialNodeMember : FeatureMembership =
MemberPrefix 'first' memberFeature = [QualifiedName]
RelationshipBody
ActionNodeMember : FeatureMembership =
MemberPrefix ownedRelatedElement += ActionNode
ActionTargetSuccessionMember : FeatureMembership =
MemberPrefix ownedRelatedElement += ActionTargetSuccession
GuardedSuccessionMember : FeatureMembership =
MemberPrefix ownedRelatedElement += GuardedSuccession
ActionUsage =
OccurrenceUsagePrefix 'action'
ActionUsageDeclaration ActionBody
ActionUsageDeclaration : ActionUsage =
UsageDeclaration ValuePart?
PerformActionUsage =
OccurrenceUsagePrefix 'perform'
PerformActionUsageDeclaration ActionBody
PerformActionUsageDeclaration : PerformActionUsage =
( ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart?
| 'action' UsageDeclaration )
ValuePart?
ActionNode : ActionUsage =
ControlNode
| AssignmentNode
| SendNode | AcceptNode
| IfNode | WhileLoopNode | ForLoopNode
ActionNodeUsageDeclaration : ActionUsage =
'action' UsageDeclaration?
ActionNodePrefix : ActionUsage =
OccurrenceUsagePrefix ActionNodeUsageDeclaration?
ControlNode =
MergeNode | DecisionNode | JoinNode| ForkNode
ControlNodePrefix : OccurrenceUsage =
RefPrefix
( isIndividual ?= 'individual )?
( portionKind = PortionKind )?
UsageExtensionKeyword*
MergeNode =
ControlNodePrefix
isComposite ?= 'merge' UsageDeclaration
ActionNodeBody
DecisionNode =
ControlNodePrefix
isComposite ?= 'decide' UsageDeclaration
ActionNodeBody
JoinNode =
ControlNodePrefix
isComposite ?= 'join' UsageDeclaration
ActionNodeBody
ForkNode =
ControlNodePrefix
isComposite ?= 'fork' UsageDeclaration
ActionNodeBody
AcceptNode : AcceptActionUsage =
OccurrenceUsagePrefix
AcceptNodeDeclaration ActionBody
AcceptNodeDeclaration : AcceptActionUsage =
ActionNodeUsageDeclaration?
'accept' AcceptParameterPart
AcceptParameterPart : AcceptActionUsage =
ownedRelationship += PayloadParameterMember
( 'via' ownedRelationship += NodeParameterMember
| ownedRelationship += EmptyParameterMember )
PayloadParameterMember : ParameterMembership =
ownedRelatedElement += PayloadParameter
PayloadParameter : ReferenceUsage =
PayloadFeature
| Identification PayloadFeatureSpecializationPart?
TriggerValuePart
TriggerValuePart : Feature =
ownedRelationship += TriggerFeatureValue
TriggerFeatureValue : FeatureValue =
ownedRelatedElement += TriggerExpression
TriggerExpression : TriggerInvocationExpression =
kind = ( 'at | 'after' )
ownedRelationship += ArgumentMember
| kind = 'when'
ownedRelationship += ArgumentExpressionMember
ArgumentMember : ParameterMembership =
ownedMemberParameter = Argument
Argument : Feature =
ownedRelationship += ArgumentValue
ArgumentValue : FeatureValue =
value = OwnedExpression
ArgumentExpressionMember : ParameterMembership =
ownedRelatedElement += ArgumentExpression
ArgumentExpression : Feature =
ownedRelationship += ArgumentExpressionValue
ArgumentExpressionValue : FeatureValue =
ownedRelatedElement += OwnedExpressionReference
SendNode : SendActionUsage =
OccurrenceUsagePrefix
SendNodeDeclaration ActionBody
SendNodeDeclaration : SendActionUsage =
ActionNodeUsageDeclaration?
'send' ownedRelationship += NodeParameterMember
NodeParameterMember : ParameterMembership =
ownedRelatedElement += NodeParameter
NodeParameter : ReferenceUsage =
ownedRelationship += FeatureBinding
FeatureBinding : FeatureValue =
ownedRelatedElement += OwnedExpression
EmptyParameterMember : ParameterMembership =
ownedRelatedElement += EmptyUsage
EmptyUsage : ReferenceUsage =
{}
Notes
AssignmentNode : AssignmentActionUsage =
OccurrenceUsagePrefix
AssignmentNodeDeclaration ActionBody
AssignmentNodeDeclaration: ActionUsage =
( ActionNodeUsageDeclaration )? 'assign'
ownedRelationship += AssignmentTargetMember
ownedRelationship += FeatureChainMember ':='
ownedRelationship += NodeParameterMember
AssignmentTargetMember : ParameterMembership =
ownedRelatedElement += AssignmentTargetParameter
AssignmentTargetParameter : ReferenceUsage =
( ownedRelationship += AssignmentTargetBinding '.' )?
AssignmentTargetBinding : FeatureValue =
ownedRelatedElement += NonFeatureChainPrimaryExpression
FeatureChainMember : Membership =
memberElement = [QualifiedName]
| OwnedFeatureChainMember
OwnedFeatureChainMember : OwningMembership =
ownedRelatedElement += OwnedFeatureChain
IfNode : IfActionUsage =
ActionNodePrefix
'if' ownedRelationship += ExpressionParameterMember
ownedRelationship += ActionBodyParameterMember
( 'else' ownedRelationship +=
( ActionBodyParameterMember | IfNodeParameterMember ) )?
ActionBodyParameterMember : ParameterMembership =
ownedRelatedElement += ActionBodyParameter
ActionBodyParameter : ActionUsage =
( 'action' UsageDeclaration? )?
'{' ActionBodyItem* '}'
IfNodeParameterMember : ParameterMembership =
ownedRelatedElement += IfNode
WhileLoopNode : WhileLoopActionUsage =
ActionNodePrefix
( 'while' ownedRelationship += ExpressionParameterMember
| 'loop' ownedRelationship += EmptyParameterMember
)
ownedRelationship += ActionBodyParameterMember
( 'until' ownedRelationship += ExpressionParameterMember ';' )?
ForLoopNode : ForLoopActionUsage =
ActionNodePrefix
'for' ownedRelationship += ForVariableDeclarationMember
'in' ownedRelationship += NodeParameterMember
ownedRelationship += ActionBodyParameterMember
ForVariableDeclarationMember : FeatureMembership =
ownedRelatedElement += UsageDeclaration
ForVariableDeclaration : ReferenceUsage =
UsageDeclaration
ActionTargetSuccession : Usage =
( TargetSuccession | GuardedTargetSuccession | DefaultTargetSuccession )
UsageBody
TargetSuccession : SuccessionAsUsage =
ownedRelationship += SourceEndMember
'then' ownedRelationship += ConnectorEndMember
GuardedTargetSuccession : TransitionUsage =
ownedRelationship += GuardExpressionMember
'then' ownedRelationship += TransitionSuccessionMember
DefaultTargetSuccession : TransitionUsage =
'else' ownedRelationship += TransitionSuccessionMember
GuardedSuccession : TransitionUsage =
( 'succession' UsageDeclaration )?
'first' ownedRelationship += FeatureChainMember
ownedRelationship += GuardExpressionMember
'then' ownedRelationship += TransitionSuccessionMember
UsageBody
StateDefBody : StateDefinition =
';'
| ( isParallel ?= 'parallel' )?
'{' StateBodyItem* '}'
StateBodyItem : Type =
NonBehaviorBodyItem
| ( ownedRelationsup += SourceSuccessionMember )?
ownedRelationship += BehaviorUsageMember
( ownedRelationship += TargetTransitionUsageMember )*
| ownedRelationship += TransitionUsageMember
| ownedRelationship += EntryActionMember
( ownedRelationship += EntryTransitionMember )*
| ownedRelationship += DoActionMember
| ownedRelationship += ExitActionMember
EntryActionMember : StateSubactionMembership =
MemberPrefix kind = 'entry'
ownedRelatedElement += StateActionUsage
DoActionMember : StateSubactionMembership =
MemberPrefix kind = 'do'
ownedRelatedElement += StateActionUsage
ExitActionMember : StateSubactionMembership =
MemberPrefix kind = 'exit'
ownedRelatedElement += StateActionUsage
EntryTransitionMember : FeatureMembership :
MemberPrefix
( ownedRelatedElement += GuardedTargetSuccession
| 'then' ownedRelatedElement += TargetSuccession
) ';'
StateActionUsage : ActionUsage =
EmptyActionUsage ';'
| StatePerformActionUsage
| StateAcceptActionUsage
| StateSendActionUsage
| StateAssignmentActionUsage
EmptyActionUsage : ActionUsage =
{}
StatePerformActionUsage : PerformActionUsage =
PerformActionUsageDeclaration ActionBody
StateAcceptActionUsage : AcceptActionUsage =
AcceptNodeDeclaration ActionBody
StateSendActionUsage : SendActionUsage
SendNodeDeclaration ActionBody
StateAssignmentActionUsage : AssignmentActionUsage =
AssignmentNodeDeclaration ActionBody
TransitionUsageMember : FeatureMembership =
MemberPrefix ownedRelatedElement += TransitionUsage
StateUsage =
OccurrenceUsagePrefix 'state'
ActionUsageDeclaration StateUsageBody
StateUsageBody : StateUsage =
';'
| ( isParallel ?= 'parallel' )?
'{' StateBodyItem* '}'
ExhibitStateUsage =
OccurrenceUsagePrefix 'exhibit'
( ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart?
| 'state' UsageDeclaration )
ValuePart? StateUsageBody
TransitionUsage =
'transition' ( UsageDeclaration 'first' )?
ownedRelationship += FeatureChainMember
ownedRelationship += EmptyParameterMember
( ownedRelationship += EmptyParameterMember
ownedRelationship += TriggerActionMember )?
( ownedRelationship += GuardExpressionMember )?
( ownedRelationship += EffectBehaviorMember )?
'then' ownedRelationship += TransitionSuccessionMember
ActionBody
TargetTransitionUsage : TransitionUsage =
ownedRelationship += EmptyParameterMember
( 'transition'
( ownedRelationship += EmptyParameterMember
ownedRelationship += TriggerActionMember )?
( ownedRelationship += GuardExpressionMember )?
( ownedRelationship += EffectBehaviorMember )?
| ownedRelationship += EmptyParameterMember
ownedRelationship += TriggerActionMember
( ownedRelationship += GuardExpressionMember )?
( ownedRelationship += EffectBehaviorMember )?
| ownedRelationship += GuardExpressionMember
( ownedRelationship += EffectBehaviorMember )?
)?
'then' ownedRelationship += TransitionSuccessionMember
ActionBody
TriggerActionMember : TransitionFeatureMembership =
'accept' { kind = 'trigger' } ownedRelatedElement += TriggerAction
TriggerAction : AcceptActionUsage =
AcceptParameterPart
GuardExpressionMember : TransitionFeatureMembership =
'if' { kind = 'guard' } ownedRelatedElement += OwnedExpression
EffectBehaviorMember : TransitionFeatureMembership =
'do' { kind = 'effect' } ownedRelatedElement += EffectBehaviorUsage
TransitionPerformActionUsage : PerformActionUsage =
PerformActionUsageDeclaration ( '{' ActionBodyItem* '}' )?
TransitionAcceptActionUsage : AcceptActionUsage =
AcceptNodeDeclaration ( '{' ActionBodyItem* '}' )?
TransitionSendActionUsage : SendActionUsage =
SendNodeDeclaration ( '{' ActionBodyItem* '}' )?
TransitionAssignmentActionUsage : AssignmentActionUsage =
AssignmentNodeDeclaration ( '{' ActionBodyItem* '}' )?
TransitionSuccessionMember : OwningMembership =
ownedRelatedElement += TransitionSuccession
TransitionSuccession : Succession =
ownedRelationship += EmptyEndMember
ownedRelationship += ConnectorEndMember
EmptyEndMember : EndFeatureMembership =
ownedRelatedElement += EmptyFeature
EmptyFeature : ReferenceUsage =
{}
CalculationDefinition =
OccurrenceDefinitionPrefix 'calc' 'def'
DefinitionDeclaration CalculationBody
CalculationUsage : CalculationUsage =
OccurrenceUsagePrefix 'calc'
ActionUsageDeclaration CalculationBody
CalculationBody : Type =
';' | '{' CalculationBodyPart '}'
CalculationBodyPart : Type =
CalculationBodyItem*
( ownedRelationship += ResultExpressionMember )?
CalculationBodyItem : Type =
ActionBodyItem
| ownedRelationship += ReturnParameterMember
ReturnParameterMember : ReturnParameterMembership =
MemberPrefix? 'return' ownedRelatedElement += UsageElement
ResultExpressionMember : ResultExpressionMembership =
MemberPrefix? ownedRelatedElement += OwnedExpression
ConstraintUsage =
OccurrenceUsagePrefix 'constraint'
ConstraintUsageDeclaration CalculationBody
AssertConstraintUsage =
OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' )?
( ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart?
| 'constraint' ConstraintUsageDeclaration )
CalculationBody
ConstraintUsageDeclaration : ConstraintUsage =
UsageDeclaration ValuePart?
RequirementDefinition =
OccurrenceDefinitionPrefix 'requirement' 'def'
DefinitionDeclaration RequirementBody
RequirementBody : Type =
';' | '{' RequirementBodyItem* '}'
RequirementBodyItem : Type =
DefinitionBodyItem
| ownedRelationship += SubjectMember
| ownedRelationship += RequirementConstraintMember
| ownedRelationship += FramedConcernMember
| ownedRelationship += RequirementVerificationMember
| ownedRelationship += ActorMember
| ownedRelationship += StakeholderMember
SubjectMember : SubjectMembership =
MemberPrefix ownedRelatedElement += SubjectUsage
SubjectUsage : ReferenceUsage =
'subject' UsageExtensionKeyword* Usage
RequirementConstraintMember : RequirementConstraintMembership =
MemberPrefix? RequirementKind
ownedRelatedElement += RequirementConstraintUsage
RequirementKind : RequirementConstraintMembership =
'assume' { kind = 'assumption' }
| 'require' { kind = 'requirement' }
RequirementConstraintUsage : ConstraintUsage =
ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart? RequirementBody
| ( UsageExtensionKeyword* 'constraint'
| UsageExtensionKeyword+ )
ConstraintUsageDeclaration CalculationBody
FramedConcernMember : FramedConcernMembership =
MemberPrefix? 'frame'
ownedRelatedElement += FramedConcernUsage
ActorMember : ActorMembership =
MemberPrefix ownedRelatedElement += ActorUsage
ActorUsage : PartUsage =
'actor' UsageExtensionKeyword* Usage
StakeholderMember : StakeholderMembership =
MemberPrefix ownedRelatedElement += StakeholderUsage
StakeholderUsage : PartUsage =
'stakeholder' UsageExtensionKeyword* Usage
RequirementUsage =
OccurrenceUsagePrefix 'requirement'
ConstraintUsageDeclaration RequirementBody
SatisfyRequirementUsage =
OccurrenceUsagePrefix 'assert' ( isNegated ?= 'not' ) 'satisfy'
( ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart?
| 'requirement' UsageDeclaration )
ValuePart?
( 'by' ownedRelationship += SatisfactionSubjectMember )?
RequirementBody
SatisfactionSubjectMember : SubjectMembership =
ownedRelatedElement += SatisfactionParameter
SatisfactionParameter : ReferenceUsage =
ownedRelationship += SatisfactionFeatureValue
SatisfactionFeatureValue : FeatureValue =
ownedRelatedElement += SatisfactionReferenceExpression
SatisfactionReferenceExpression : FeatureReferenceExpression =
ownedRelationship += FeatureChainMember
8.2.2.20.3 Concerns
ConcernDefinition =
OccurrenceDefinitionPrefix 'concern' 'def'
DefinitionDeclaration RequirementBody
ConcernUsage =
OccurrenceUsagePrefix 'concern'
ConstraintUsageDeclaration RequirementBody
CaseDefinition =
OccurrenceDefinitionPrefix 'case' 'def'
DefinitionDeclaration CaseBody
CaseBody : Type =
';'
| '{' CaseBodyItem*
( ownedRelationship += ResultExpressionMember )?
'}'
CaseBodyItem : Type =
ActionBodyItem
| ownedRelationship += SubjectMember
| ownedRelationship += ActorMember
| ownedRelationship += ObjectiveMember
ObjectiveMember : ObjectiveMembership =
MemberPrefix 'objective'
ownedRelatedElement += ObjectiveRequirementUsage
ObjectiveRequirementUsage : RequirementUsage =
UsageExtensionKeyword* ConstraintUsageDeclaration
RequirementBody
AnalysisCaseDefinition =
OccurrenceDefinitionPrefix 'analysis' 'def'
DefinitionDeclaration CaseBody
AnalysisCaseUsage =
OccurrenceUsagePrefix 'analysis'
ConstraintUsageDeclaration CaseBody
VerificationCaseDefinition =
OccurrenceDefinitionPrefix 'verification' 'def'
DefinitionDeclaration CaseBody
VerificationCaseUsage =
OccurrenceUsagePrefix 'verification'
ConstraintUsageDeclaration CaseBody
RequirementVerificationMember : RequirementVerificationMembership =
MemberPrefix 'verify' { kind = 'requirement' }
ownedRelatedElement += RequirementVerificationUsage
RequirementVerificationUsage : RequirementUsage =
ownedRelationship += OwnedReferenceSubsetting
FeatureSpecialization* RequirementBody
| ( UsageExtensionKeyword* 'requirement'
| UsageExtensionKeyword+ )
ConstraintUsageDeclaration RequirementBody
UseCaseDefinition =
OccurrenceDefinitionPrefix 'use' 'case' 'def'
DefinitionDeclaration CaseBody
UseCaseUsage =
IncludeUseCaseUsage :
OccurrenceUsagePrefix 'include'
( ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart?
| 'use' 'case' UsageDeclaration )
ValuePart?
CaseBody
ViewDefinition =
OccurrenceDefinitionPrefix 'view' 'def'
DefinitionDeclaration ViewDefinitionBody
ViewDefinitionBody : ViewDefinition =
';' | '{' ViewDefinitionBodyItem* '}'
ViewDefinitionBodyItem : ViewDefinition =
DefinitionBodyItem
| ownedRelationship += ElementFilterMember
| ownedRelationship += ViewRenderingMember
ViewRenderingMember : ViewRenderingMembership =
MemberPrefix 'render'
ownedRelatedElement += ViewRenderingUsage
ViewRenderingUsage : RenderingUsage =
ownedRelationship += OwnedReferenceSubsetting
FeatureSpecializationPart?
UsageBody
| ( UsageExtensionKeyword* 'rendering'
| UsageExtensionKeyword+ )
Usage
ViewUsage =
OccurrenceUsagePrefix 'view'
UsageDeclaration? ValuePart?
ViewBody
ViewBody : ViewUsage =
';' | '{' ViewBodyItem* '}'
ViewBodyItem : ViewUsage =
DefinitionBodyItem
| ownedRelationship += ElementFilterMember
| ownedRelationship += ViewRenderingMember
| ownedRelationship += Expose
Expose =
'expose' ( MembershipExpose | NamespaceExpose )
RelationshipBody
MembershipExpose =
NamespaceExpose =
NamespaceImport
8.2.2.25.3 Viewpoints
ViewpointDefinition =
OccurrenceDefinitionPrefix 'viewpoint' 'def'
DefinitionDeclaration RequirementBody
ViewpointUsage =
OccurrenceUsagePrefix 'viewpoint'
ConstraintUsageDeclaration RequirementBody
8.2.2.25.4 Renderings
RenderingDefinition =
OccurrenceDefinitionPrefix 'rendering' 'def'
Definition
RenderingUsage =
OccurrenceUsagePrefix 'rendering'
Usage
MetadataDefinition =
( isAbstract ?= 'abstract')? DefinitionExtensionKeyWord*
'metadata' 'def' Definition
PrefixMetadataAnnotation : Annotation =
'#' annotatingElement = PrefixMetadataUsage
{ ownedRelatedElement += annotatingElement }
PrefixMetadataMember : OwningMembership =
'#' ownedRelatedEleemnt = PrefixMetadataUsage
PrefixMetadataUsage : MetadataUsage =
ownedRelationship += OwnedFeatureTyping
MetadataUsage =
UsageExtensionKeyword* ( '@' | 'metadata' )
MetadataUsageDeclaration
( 'about' annotation += Annotation
ownedRelationship += Annotation
( ',' annotation += Annotation
{ ownedRelationship += Annotation } )*
)?
MetadataBody
MetadataUsageDeclaration : MetadataUsage =
( Identification ( ':' | 'typed' 'by' ) )?
ownedRelationship += OwnedFeatureTyping
MetadataBody : Type =
';' |
'{' ( ownedRelationship += DefinitionMember
| ownedRelationship += MetadataBodyUsageMember
| ownedRelationship += AliasMember
| ownedRelationship += Import
)*
MetadataBodyUsageMember : FeatureMembership =
ownedMemberFeature = MetadataBodyUsage
MetadataBodyUsage : ReferenceUsage :
'ref'? ( ':>>' | 'redefines' )? ownedRelationship += OwnedRedefinition
FeatureSpecializationPart? ValuePart?
MetadataBody
ExtendedDefinition : Definition =
BasicDefinitionPrefix? DefinitionExtensionKeyword+
'def' Definition
ExtendedUsage : Usage =
BasicUsagePrefix UsageExtensionKeyword+
Usage
A graphical view is rendered as a graph with nodes connected by edges. The nodes and edges may be rendered with
specialized syntax in different views. Nodes that depict definition and usage elements may also contain connection
points, such as those corresponding to ports and parameters.
Each node in a graphical view can have any number of compartments. Each compartment is also a view that
contains selected members of the node (which may be modeled as a view usage having a filter condition selecting
the contents). The compartment shall either be a textual compartment, whose contents are rendered using textual
syntax, or a graphical compartment, whose contents are rendered using graphical syntax. In either case, the
rendering shall be as specified in the graphical notation grammar (see below and 8.2.3.2 ).
A diagram is a view where the diagram header is the name compartment of the view (see view-frame in 8.2.3.25
). The view exposes some portion of the model and applies filter conditions to select the contents to be rendered in a
compartment of the view. The compartment shall either be a textual compartment or a graphical compartment.
The StandardViewDefinitions package in the Systems Model Library (see 9.2.19 ) provides a set of standard
view definitions for typical kinds of diagrams, including the valid contents for the view. The standard views are then
rendered as specified in the graphical notation grammar (as given in Table 33 in 9.2.19.1 ). User-defined view
definitions and usages (see 8.2.2.25 and 8.2.3.25 ) can also be used to provide views beyond the standard set. User-
defined views may use or extend the graphical notation specification, but this is not required.
The SysML graphical notation is expressed using a simplified form of the EBNF notation used to define the SysML
textual notation (see 8.2.2.1.1 ). This graphical BNF has been extended to include productions with a mixture of
graphical and textual elements. Table 29 summarizes the conventions used.
Grouping ( elements )
These conventions make a distinction between a complete production, which must include all alternatives within the
production itself, and partial productions, which allow alternatives to be distributed across multiple productions
located anywhere within a specification. This distinction allows greater reuse of production symbols across sections
of a specification that build on partial productions given by earlier sections, while still making clear productions that
are already complete within a given section.
A graphical production contains a two-dimensional layout of graphical and textual elements including graphical
shapes and lines. Shapes may contain other elements nested within these shapes. Generally speaking, graphical
elements specify only containment and connectivity of graphical and textual elements out of which they are built.
Shapes within the graphical notation may generally be relocated anywhere within a given graphical layout. They
may also have any of their graphical elements stretched as necessary to hold their contents.
Lines that connect other graphical elements may be composed of one or more straight or curved line segments. Any
of these line segments may contain a semicircular jump symbol where the segment overlaps a line segment of
another connecting line.
A textual production contains only other textual productions. All production symbols within the graphical BNF
follow a convention of all-lowercase names with optional internal hyphens. Elements of the textual notation defined
in subclause 8.2.2 of this specification may also be referenced by textual productions within the graphical BNF.
These imported textual notation elements can be distinguished from those of the graphical BNF by their use of one
or more uppercase letters within the name.
element =
dependencies-and-annotations-element
| general-element
| element-inside-textual-compartment
compartment =| general-compartment
general-compartment =
general-view
ellipsis-at-lower-left-corner = '...'
general-element =
general-node
| general-relationship
element-inside-textual-compartment =
rel-name =
Identification
| QualifiedName
Note. An element inside a textual compartment is selected by graying out a substring containing the element. The
grayed-out section must cover a single element within the textual syntax inside the compartment.
dependencies-and-annotations-element =| dependencies-element
dependencies-element =|
binary-dependency
| n-ary-dependency
binary-dependency =
n-ary-dependency =
&n-ary-association-dot (n-ary-dependency-client-or-supplier-link &element-node)+
n-ary-dependency-client-or-supplier-link =
n-ary-dependency-client-link
| n-ary-dependency-supplier-link
n-ary-association-dot =
n-ary-dependency-client-link =
n-ary-dependency-supplier-link =
Note. An n-ary dependency must have two or more client elements or two or more supplier elements.
annotation-node =
comment-node
| documentation-node
| textual-representation-node
text-block = (LINE_TEXT)*
comment-node =
comment-without-keyword
| comment-with-keyword
comment-without-keyword =
comment-with-keyword =
documentation-node =
documentation-compartment =
Identification
text-block
textual-representation-node =
annotation-link =
annotated-element =
element
| element-inside-textual-compartment
Note. A comment node may be attached to zero, one, or more than one annotated elements. All other annotation
nodes must be attached to one and only one annotated element.
general-node =| namespace-node
namespace-node =| package-node
package-node =
package-with-name-inside
| package-with-name-in-tab
| imported-package-with-name-inside
| imported-package-with-name-in-tab
package-with-name-inside =
package-with-name-in-tab =
imported-package-with-name-in-tab =
package-compartment =
general-compartment
| documentation-compartment
| packages-compartment
| members-compartment
| relationships-compartment
compartment =| package-compartment
packages-compartment =
packages-compartment-contents
members-compartment =
relationships-compartment =
relationships-compartment-contents
general-relationship =|
import
| top-level-import
| recursive-import
| owned-membership
| unowned-membership
import =
top-level-import =
recursive-import =
owned-membership =
unowned-membership =
general-node =| type-node
type-node =
definition-node
namespace-node =| type-node
basic-name-prefix =
('«variation»')?
('«variant»')?
('«abstract»')?
definition-name-with-alias =
Identification
( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
usage-name-with-alias =
Identification (':' QualifiedName)?
( '«alias»' ( QualifiedName (',' QualifiedName)* ) )?
compartment-stack = (compartment)*
compartment =|
| features-compartment
| variants-compartment
| variant-elementusages-compartment
features-compartment =
features-compartment-contents
variants-compartment =
variants-compartment-contents
variants-compartment-contents = members-compartment-contents
variant-elementusages-compartment =
variants-compartment-contents
general-relationship =|
type-relationship
type-relationship =
subclassification
| subsetting
| definition
| redefinition
| composite-feature-membership
| noncomposite-feature-membership
subclassification =
subsetting =
reference-subsetting =
redefinition =
composite-feature-membership =
noncomposite-feature-membership =
extended-def =
extended-def-name-compartment =
basic-name-prefix
'«' keyword+ 'def' '»'
definition-name-with-alias
definition-node |= extended-def
extended-usage =
usage-node |= extended-usage
definition-node =| attribute-def
attribute-def =
attribute-def-name-compartment =
basic-name-prefix
'«' keyword* 'attribute' 'def' '»'
definition-name-with-alias
usage-node =| attribute
attribute =
attribute-name-compartment =
basic-name-prefix
'«' keyword* 'attribute' '»'
usage-name-with-alias
compartment =| attributes-compartment
attributes-compartment =
attributes-compartment-contents
definition-node =| enumeration-def
enumeration-def =
enumeration-def-name-compartment =
basic-name-prefix
'«' keyword* 'enumeration' 'def' '»'
definition-name-with-alias
usage-node =| enumeration
enumeration =
enumeration-name-compartment =
basic-name-prefix
'«' keyword* 'enumeration' '»'
usage-name-with-alias
compartment =| enums-compartment
enums-compartment =
enums-compartment-contents
definition-node =| occurrence-def
general-relationship =| portion-relationship
occurrence-def =
usage-node =|
occurrence
| occurrence-ref
| timeslice-or-snapshot-node
occurrence =
occurrence-ref =
occurrence-name-compartment =
basic-name-prefix
'«' 'ref'? keyword* 'occurrence' '»'
usage-name-with-alias
timeslice-or-snapshot-node =
timeslice
| snapshot
timeslice =
snapshot =
snapshots-name-compartment
'«snapshot»'
usage-name-with-alias
portion-relationship =
compartment =|
occurrences-compartment
| individuals-compartment
| timeslices-compartment
| snapshots-compartment
| sequence-compartment
occurrences-compartment =
occurrences-compartment-contents
individuals-compartment =
individuals-compartment-contents
timeslices-compartment =
timeslices-compartment-contents
snapshots-compartment =
snapshots-compartment-contents
sequence-compartment =
sequence-view
sequence-view = (sq-graphical-element)*
sq-graphical-element =
sq-graphical-node
| sq-graphical-relationship
| dependencies-and-annotations-element
sq-part =
sq-port =
sq-port-label = UsageDeclaration
sq-l-node =
lifeline
| proxy
lifeline =
sq-proxy-label = QualifiedName
sq-ev-occurrence-label = UsageDeclaration
succession-label = UsageDeclaration?
sq-succession =
definition-node =| item-def
item-def =
item-def-name-compartment =
basic-name-prefix
'«' keyword* 'item' 'def' '»'
usage-node =| item
item =
item-name-compartment =
basic-name-prefix
'«' 'ref'? keyword* 'item' '»'
usage-name-with-alias
item-ref =
compartment =| items-compartment
items-compartment =
items-compartment-contents
definition-node =| part-def
part-def =
usage-node =| part
part =
part-name-compartment =
basic-name-prefix
'«' 'ref'? keyword* 'part' '»'
usage-name-with-alias
part-ref =
compartment =|
parts-compartment
| directed-features-compartment
parts-compartment =
parts-compartment-contents
directed-features-compartment =
directed-features-compartment-contents
directed-features-compartment-element =
el-prefix FeatureDirection Definition-Body-Item*
interconnection-compartment =
interconnection-view
interconnection-view =|
(interconnection-element)*
(dependencies-and-annotations-element)*
(ellipsis-at-lower-left-corner)?
general-view =| interconnection-view
definition-node =| port-def
port-def =
port-def-name-comportment =
basic-name-prefix
'«' keyword* 'port' 'def' '»'
definition-name-with-alias
usage-node =| port-usage
port-usage =
compartment =| ports-compartment
ports-compartment =
ports-compartment-contents
pdh =
pdv =
port-l =
|
proxy
port-r =
port-t =
|
proxy
port-b =
|
proxy
Note. Dotted line port productions (references) are only possible for nested ports
Note. The proxy option of a port production is valid only on a part usage contained within an interconnection view.
SYSML2_-177: Guillemets should not be used on keywords in textual notation snippets used in the
graphical notation
definition-node =| connection-def
connection-def =
connection-def-name-compartment =
basic-name-prefix
'«' keyword* 'connection' 'def' '»'
definition-name-with-alias
usage-node =| connection
connection =
connection-name-compartment =
basic-name-prefix
'«' keyword* 'connection' '»'
usage-name-with-alias
compartment =| connections-compartment
connections-compartment =
connections-compartment-contents
interconnection-element =|
connection-def
| connection
connection-relationship =
binding-connection
| connection-graphical
| n-ary-connection
| flow-connection
| succession-flow-connection
| message-connection
| flow-on-connection
| connection-definition-elaboration
| connection-usage-elaboration
| connection-def-graphical
connection-graphical =
c-adornment =
(a-property | a-direction | a-subsetting |a-redefinition)*
a-property =
'ordered' | 'nonunique' | 'abstract' | 'derived' | 'readonly'
a-direction =
'in' | 'out' | 'inout'
a-subsetting =
'subsets' OwnedSubsetting (',' OwnedSubsetting)*
a-redefinition =
'redefines' OwnedRedefinition (',' OwnedRedefinition)*
connection-label = UsageDeclaration
connection-def-graphical =
cdef-label = Identification
n-ary-connection =
n-ary-connection-dot n-ary-segment+
n-ary-connection-dot =
cdot-label = UsageDeclaration
n-ary-segment =
msg-end-node =
occurrence| sq-l-node| item | part | port | action | state
| use-case | verification-case | analysis-case | proxy
message-connection =
Note: proxy nodes and end of message connections must refer to occurrences
message-label =
UsageDeclaration? ('of' ItemFeatureMember)? | ItemFeatureMember
flow-connection =
flow-label =
UsageDeclaration? ('of' FlowPayloadFeatureMember)? | FlowPayloadFeatureMember
flow-end-node =
parameter | proxy
Note: proxy nodes at end of flow connections must refer to directed features
succession-flow-connection =
succession-flow-label = flow-label
flow-on-connection =
flow-node =
flow-node-r
flow-node-r =
flow-node-l =
sflow-node-r =
sflow-node-l =
message-node-r =
message-node-l =
flow-label =
Identification | FlowPayloadFeatureMember
rolename = Identification?
multiplicity = MultiplicityRange?
connection-definition-elaboration =
definition-node =| interface-def
interconnection-element =| interface
interface-def =
interface-def-name-compartment =
basic-name-prefix
'«' keyword* 'interface' 'def' '»'
definition-name-with-alias
usage-node =| interface
interface =
compartment =|
interfaces-compartment
| ends-compartment
interfaces-compartment =
interfaces-compartment-contents
ends-compartment =
ends-compartment-contents
connection-relationship =
| interface-connection
interface-connection =
interface-label = UsageDeclaration?
definition-node =| allocation-def
allocation-def =
usage-node =| allocation
allocation =
allocation-name-compartment =
basic-name-prefix
'«' keyword* 'allocation' '»'
usage-name-with-alias
compartment =| allocations-compartment
allocations-compartment =
allocations-compartment-contents
allocations-compartment-element =
el-prefix? OccurrenceUsagePrefix AllocationUsageDeclaration UsageBody*
general-relationship =| allocate-relationship
allocate-relationship =
allocation-node =
general-node
| element-in-textual-compartment
usage-edge = |allocate-relationship
definition-node =| action-def
action-def-name-compartment =
basic-name-prefix
'«' keyword* 'action' 'def' '»'
definition-name-with-alias
usage-node =|
action
| perform-action-usage
action =
action-name-compartment =
basic-name-prefix
'«' 'ref'? keyword* 'action' '»'
usage-name-with-alias
perform-action-usage =
action-ref =
compartment =|
actions-compartment
| perform-actions-compartment
| parameters-compartment
| action-flow-compartment
actions-compartment =
actions-compartment-contents
perform-actions-compartment =
perform-actions-compartment-contents
parameters-compartment =
parameters-compartment-contents
performed-by-compartment =
performed-by-compartment-contents
action-flow-view
action-flow-view =
(dependencies-and-annotations-element)*
(action-flow-element)*
(perform-action-swimlanes)?
action-flow-element =|
action-ref
| action
| action-flow-node
| action-flow-relationship
action-flow-node =
start-node
| done-node
| fork-node
| join-node
| decision-node
| merge-node
| send-action-node
| accept-action-node
| loop-action-node
| assign-action-node
action-flow-relationship =
flow-connection
| aflow-succession
| binding-connection
param-l =
|
proxy
|
proxy
param-t =
|
proxy
param-b =
start-node =
done-node =
fork-node =
join-node =
decision-node =
merge-node =
send-action-node =
accept-action-node =
accept-action-expression = AcceptParameterPart
loop-action-node =
assign-action-node =
perform-actions-swimlanes = (swimlane)*
swimlane =
parameter =
param-l | param-r | param-t | param-b
aflow-succession =
usage-edge = |succession
Note. All swimlanes are attached to each other on vertical edges and aligned along the top and bottom horizontal
edges.
Note. The proxy option of a parameter production is valid only on an action usage contained within an action flow
view.
definition-node =| state-def
state-def =
state-def-name-compartment =
basic-name-prefix
'«' keyword* 'state' 'def' '»'
definition-name-with-alias
usage-node =|
state
| exhibit-state-usage
state =
state-ref =
state-name-compartment =
exhibit-state-usage =
exhibit-state-name-compartment =
'«exhibit-state»'
state-name-compartment
compartment =|
states-compartment
| states-actions-compartment
| exhibit-states-compartment
| successions-compartment
| state-transition-compartment
states-compartment =
states-compartment-contents
state-actions-compartment =
state-actions-compartment-contents
exhibit-states-compartment =
exhibit-states-compartment-contents
succession-compartment =
succession-compartment-contents
state-transition-compartment =
state-transition-view
state-transition-view =
(state-transition-element)*
(dependencies-and-annotations-element)*
state-transition-element =
state-def-node
| state-node
| state-ref-node
| transition
| start-node
| done-node
| fork-node
| join-node
| decision-node
| merge-node
transition =
usage-edge = |transition
definition-node =| calc-def
calc-def =
calc-def-name-compartment =
occurrence-name-prefix
'«' 'ref'? keyword* 'calc' 'def' '»'
definition-name-with-alias
usage-node =| calc
calc-name-compartment =
occurrence-name-prefix
'«' 'ref'? keyword* 'calc' '»'
definition-name-with-alias
action-flow-element =|
calc-def
| calc
compartment =|
calcs-compartment
| result-compartment
calcs-compartment =
calcs-compartment-contents
results-compartment =
result-compartment-contents
result-compartment-contents = OwnedExpression
definition-node =| constraint-def
constraint-def =
usage-node =
constraint
| assert-constraint-usage
constraint =
constraint-ref =
constraint-name-compartment =
basic-name-prefix
'«' 'ref'? keyword* 'constraint' '»'
usage-name-with-alias
assert-constraint-name-compartment =
'«assert constraint»'
constraint-name-compartment
compartment =|
constraints-compartment
| assert-constraints-compartment
constraints-compartment =
constraints-compartment-contents
assert-constraints-compartment =
assert-constraints-compartment-contents
interconnection-element =|
constraint-ref
| constraint
definition-node =|
requirement-def
| concern-def
requirement-def =
usage-node =
requirement
| satisfy-requirement-usage
| concern
requirement =
requirement-ref =
requirement-name-compartment =
basic-name-prefix
'«' 'ref' keyword* 'requirement' '»'
satisfy-requirement-usage =
satisfy-requirement-name-compartment =
'«satisfy requirement»'
requirement-name-compartment
concern-def =
concern-def-name-compartment =
occurrence-name-prefix
'«concern-def»'
definition-name-with-alias
concern =
concern-name-compartment =
occurrence-prefix
'«concern»'
definition-name-with-alias
compartment =|
constraints-compartment
| assert-constraints-compartment
compartment =|
requirements-compartment
| require-constraints-compartment
| assume-constraints-compartment
| satisfy-requirements-compartment
| satisfies-compartment
| actors-compartment
| subject-compartment
| stakeholders-compartment
requirements-compartment =
requirements-compartment-contents
require-constraints-compartment =
require-constraints-compartment-contents
assume-constraints-compartment =
assume-constraints-compartment-contents
satisfy-requirements-compartment =
satisfy-requirements-compartment-contents
satisfy-requirements-compartment-contents = text-block
satisfies-compartment =
satisfies-compartment-contents
actors-compartment =
actors-compartment-contents
subject-compartment =
subject-compartment-contents
stakeholders-compartment-contents
frames-compartment =
frames-compartment-contents
concerns-compartment =
concerns-compartment-contents
interconnection-element =|
requirement-ref
| requirement
| concern
| distinguished-parameter
| distinguished-parameter-link
| concern-stakeholder-link
general-relationship =| frame-relationship
subject-actors-stakeholders-node =| requirement
distinguished-parameter =
subject
| actor
| stakeholder
subject =
actor =
stakeholder =
subject-name = UsageDeclaration
actor-name = UsageDeclaration
stakeholder-name = UsageDeclaration
distinguished-parameter-link =
frame-relationship =
concern-stakeholder-link =
compartment =| objective-compartment
objective-compartment =
definition-node =| calc-def
analysis-def =
analysis-def-name-compartment =
occurrence-name-prefix
'«' keyword* 'analysis' 'def' '»'
definition-name-with-alias
usage-node =| analysis
analysis =
analysis-name-compartment =
occurrence-name-prefix
'«' keyword* 'analysis' '»'
definition-name-with-alias
compartment =| analyses-compartment
analyses-compartment =
action-flow-element =|
analysis-def
| analysis
definition-node =| verification-def
verification-def =
verification-def-name-compartment =
occurrence-name-prefix
'«' keyword* 'verification' 'def' '»'
definition-name-with-alias
usage-node =| verification
verification =
verification-name-compartment =
occurrence-name-prefix
'«' keyword* 'verification' '»'
definition-name-with-alias
compartment =|
verifications-compartment =
verifications-compartment-contents
verifies-compartment =
verifies-compartment-contents
verification-methods-compartment =
verification-methods-compartment-contents
action-flow-element =|
verification-def
| verification
general-relationship =| verify-relationship
verify-relationship =
definition-node =| use-case-def
use-case-def =
usage-node =|
use-case
| include-use-case-usage
use-case =
use-case-name-compartment =
basic-name-prefix
'«' keyword* 'use' 'case' '»'
usage-name-with-alias
include-use-case-usage =
include-use-case-name-compartment =
'«include use case»'
compartment =|
use-cases-compartment
| include-actions-compartment
| includes-compartment
use-cases-compartment =
use-cases-compartment-contents
include-use-cases-compartment =
include-use-cases-compartment-contents
includes-compartment =
includes-compartment-contents
action-flow-element =|
use-case-def
| use-case
general-relationship =| include-use-case-relationship
include-use-case-relationship =
definition-node =|
viewpoint-def
| view-def
viewpoint-def =
view-def =
view-def-name-compartment =
basic-name-prefix
'«' keyword* 'view' 'def' '»'
definition-name-with-alias
usage-node =
viewpoint
| view
| view-frame
viewpoint =
viewpoint-name-compartment =
basic-name-prefix
( '«' 'viewpoint' '»' | '«' keyword+ 'viewpoint' '»' )
usage-name-with-alias
view =
view-name-compartment=
basic-name-prefix
'«' keyword* 'view' '»'
compartment =|
| views-compartment
| viewpoints-compartment
| exposes-compartment
| filters-compartment
| rendering-compartment
views-compartment =
views-compartment-contents
viewpoints-compartment =
viewpoints-compartment-contents
exposes-compartment =
exposes-compartment-contents
filters-compartment =
filters-compartment-contents
rendering-compartment =
rendering-compartment-contents
interconnection-element =|
viewpoint-def
| viewpoint
| view-def
| view
general-relationship =| expose-relationship
expose-relationship =
expose_r | toplevel-expose-r | recursive-expose-r
expose_r =
toplevel-expose-r =
recursive-expose-r =
Note. A model library in Section 9.2.18 defines standard graphical view definitions for SysML. These may be
supplemented by further, customized View Definitions specific to a model.
annotation-node =| metadata-feature-annotation-node
metadata-feature-annotation-node =
metadata-def =
metadata-def-name-compartment =
basic-name-prefix
'«' keyword* 'metadata' 'def' '»'
definition-name-with-alias
The SysML abstract syntax is specified as a MOF model [MOF] that is an extension of the KerML abstract syntax
model [KerML]. Each of the subsequent abstract subclauses describes one package in the abstract syntax model,
including one ore more overview diagrams and descriptions of each of the elements in the package. In the diagrams,
metaclasses and relationships from the KerML abstract syntax are shown in gray. See [KerML] for the description
of these elements.
The MOF-compliant class model for the abstract syntax defines the basic structural representation for any SysML
model. In addition to this basic structure, the abstract syntax also includes constraints defined on various
metaclasses. A conformant tool shall be able to accept any KerML model that conforms to the structural abstract
syntax class model, and it may then additionally report on and/or enforce the constraints on a model so represented
(as further described below).
The SysML abstract syntax model follows the conventions from [KerML, 8.3.1] on three kinds of constraints:
1. Derivation constraints. These constraints specify how the values of the derived properties of a metaclass
are computed from the values of other properties in the abstract syntax model. A tool conformant to the
SysML abstract syntax shall always enforce derivation constraints. However, the computed values of
derived properties may depend on whether implied relationships are included in the model or not (see
below). A derivation constraint has a name starting with the word derive, followed by the name of the
metaclass it constrains, followed by the name of the derived property it is for. The OCL specification of
such a constraint always has the form of an equality, with the derived property on the left-hand side and
the derivation expression on the right-hand side. For example, the derivation constraint for the derived
Note. Derivation constraints are not included for derived properties in the following cases:
◦ The derived property subsets a property with multiplicity upper bound 1. In this case, if the
derived property has a value, it must be the same as that of the subsetted property.
◦ The derived property redefines another derived property. In this case, the derivation of the
redefined property also applies to the redefining property, though the redefining property will
generally place additional constraints on type and/or multiplicity.
2. Semantic constraints. These constraints specify relationships that are semantically required in a SysML
model (see 8.4.1 ), particularly relationships with elements in the Kernel Semantic Library (see [KerML,
9.2]) and Systems Model Library (see 9.2 ). These constraints may be violated by a model as entered by a
user or as interchanged. In this case, a tool may satisfy the constraints by introducing implied relationships
into the model, it may simply report their violation, or it may ignore the violations. Semantic constraints
have names that start with the word check, followed by the name of the constrained metaclass, followed
by a descriptive word or phrase. For example, checkPartDefinitionSpecialization.
3. Validation constraints. These constraints specify additional syntactic conditions that must be satisfied in
order to give a model a proper semantic interpretation. They are written presuming that all semantic
constraints are satisfied. A valid model is a model that satisfies all validation constraints. A tool
conformant to the SysML abstract syntax should report violations of validation constraints. A tool
conformant to the SysML semantics is only required to operate on valid models. Validation constraints
have names that start with the word validate, followed by the name of the metaclass, followed by a
descriptive word or phrase. For example, validateUsageOwningType.
+target Element
0..* +elementId : String{id} +ownedRelatedElement
{subsets relatedElement, +aliasIds : String [0..*]{ordered}
0..*
ordered} +declaredShortName : String [0..1]
+declaredName : String [0..1] {subsets relatedElement,
+source
+/shortName : String [0..1] ordered}
0..* +/name : String [0..1]
{subsets relatedElement, +/qualifiedName : String [0..1]
ordered} +owningRelatedElement
+isImpliedIncluded : Boolean = false
+/isLibraryElement : Boolean 0..1
+/relatedElement
{subsets
0..* +escapedName() : String [0..1]
relatedElement}
+effectiveShortName() : String [0..1]
{ordered, nonunique}
+effectiveName() : String [0..1]
+libraryNamespace() : Namespace [0..1]
+/relationship
Relationship
0..* +ownedRelationship
+isImplied : Boolean = false
{union, nonunique} 0..*
+libraryNamespace() : Namespace [0..1]{redefines libraryNamespace} {subsets relationship,
+sourceRelationship
ordered}
0..*
{subsets relationship} +owningRelationship
+targetRelationship 0..1
0..* {subsets relationship}
{subsets relationship}
Figure 2. Elements
It is a general design principle of the KerML abstract syntax that non-Relationship Elements are related only by
reified instances of Relationships. All other meta-associations between Elements are derived from these reified
Relationships. For example, the owningRelatedElement/ownedRelationship meta-association between an
Element and a Relationship is fundamental to establishing the structure of a model. However, the
owner/ownedElement meta-association between two Elements is derived, based on the Relationship structure
between them.
Relationship
+clientDependency +supplierDependency
Dependency
0..* 0..*
{subsets sourceRelationship} {subsets targetRelationship}
Figure 3. Dependencies
+/annotatedElement 0..1
{subsets annotatedElement, subsets owningRelatedElement}
1..*
+annotatedElement {subsets annotation,
{ordered}
1 subsets
{redefines target} {subsets targetRelationship, ownedRelationship,
ordered} ordered}
+annotation
0..* 0..* +/ownedAnnotation
Relationship
Comment TextualRepresentation
+/textualRepresentation
+locale : String [0..1] +language : String [1]
+body : String [1] +body : String [1] 0..*
{subsets annotatingElement,
subsets ownedElement, ordered}
+/documentation
Documentation
0..*
{subsets annotatingElement,
subsets ownedElement, ordered}
Figure 4. Annotation
+memberElement
1
{redefines target}
+/ownedMember 0..*
0..* +/member
{subsets member, ordered}
{ordered}
{subsets namespace}
+/owningNamespace 0..1 0..* +/namespace
Namespace
+namesOf( element : Element ) : String [0..*]
+visibilityOf( mem : Membership ) : VisibilityKind
+visibleMemberships( excluded : Namespace [0..*], isRecursive : Boolean, includeAll : Boolean ) : Membership [0..*]
+importedMemberships( excluded : Namespace [0..*] ) : Membership [0..*]
+resolve( qualifiedName : String ) : Membership [0..1]
+resolveGlobal( qualifiedName : String ) : Membership [0..1]
+resolveLocal( name : String ) : Membership [0..1]
+resolveVisible( name : String ) : Membership [0..1]
+qualificationOf( qualifiedName : String ) : String [0..1]
+unqualifiedNameOf( qualifiedName : String ) : String
OwningMembership
+/owningMembership +/ownedMemberElementId : String{redefines memberElementId}
+/ownedMemberShortName : String [0..1]{redefines memberShortName}
0..1
+/ownedMemberName : String [0..1]{redefines memberName}
{subsets membership,
subsets owningRelationship}
Figure 5. Namespaces
Import
+visibility : VisibilityKind = private
+/ownedImport +/importOwningNamespace
+/importedElement +/membershipImport +isRecursive : Boolean = false Namespace
Element +isImportAll : Boolean = false 0..* 1
1 0..*
{subsets ownedRelationship, {subsets owningRelatedElement,
+memberElement 1 +importedMemberships( excluded : Namespace [0..*] ) : Membership [0..*] 1 +importedNamespace
subsets sourceRelationship, redefines source}
{redefines target} ordered} {redefines target}
+importedMemberships( excluded : Namespace [0..*] ) : Membership [0..*]{redefines importedMemberships} +importedMemberships( excluded : Namespace [0..*] ) : Membership [0..*]{redefines importedMemberships} 0..*
{subsets targetRelationship}
+import 0..*
{redefines targetRelationship}
Figure 6. Imports
Namespace OwningMembership
Package
+importedMemberships( excluded : Namespace [0..*] ) : Membership [0..*]{redefines importedMemberships} ElementFilterMembership
+includeAsMember( element : Element ) : Boolean
+/conditionedPackage 0..1
+/owningFilter 0..1
{subsets owningNamespace}
{subsets owningMembership}
{redefines ownedMemberElement}
LibraryPackage +/condition 1
Figure 7. Packages
/featuringUsage
0..*
+/featuringDefinition +/usage {subsets typeWithFeature}
0..* 0..*
+/usage
{subsets typeWithFeature} {subsets feature,
ordered} 0..*
{subsets feature,
ordered}
/usageWithDirectedUsage
0..*
+/definitionWithDirectedUsage +/directedUsage {subsets featuringUsage,
0..* 0..* subsets
{subsets featuringDefinition, {subsets directedFeature, typeWithDirectedFeature}
subsets typeWithDirectedFeature} subsets usage, ordered} +/directedUsage
0..*
+/referenceOwningUsage 0..1 {subsets directedFeature,
+/referenceOwningDefinition 0..1
{subsets owningUsage} subsets usage, ordered}
{subsets owningDefinition}
{subsets nestedUsage,
ordered}
+/nestedReference 0..*
+/ownedReference ReferenceUsage
0..* +/isReference : Boolean = true{redefines isReference}
{subsets ownedUsage,
+namingFeature() : Feature [0..1]{redefines namingFeature}
ordered}
+/owningVariationDefinition +/owningVariationDefinition
OwningMembership Definition
0..1 0..1
{subsets {subsets
membershipOwningNamespace} owningNamespace}
{subsets ownedMembership}
+/variantMembership {subsets ownedMember}
0..*
+/variant 0..*
+/variantMembership
VariantMembership +/owningVariationUsage Usage +/variant
0..* 0..1 0..*
{subsets ownedMembership} {subsets {subsets ownedMember}
membershipOwningNamespace}
Description
A Definition is a Classifier of Usages. The actual kinds of Definition that may appear in a model are
given by the subclasses of Definition (possibly as extended with user-defined SemanticMetadata).
However, if a Definition has isVariation = true, then it represents a variation point Definition. In this
case, all of its members must be variant Usages, related to the Definition by VariantMembership
Relationships. Rather than being features of the Definition, variant Usages model different concrete
alternatives that can be chosen to fill in for an abstract Usage of the variation point Definition.
General Classes
Classifier
Attributes
isVariation : Boolean
Whether this Definition is for a variation point or not. If true, then all the memberships of the Definition
must be VariantMemberships.
The Usages that are features of this Definition (not necessarily owned).
The Usages which represent the variants of this Definition as a variation point Definition, if isVariation =
true. If isVariation = false, the there must be no variants.
The ownedMemberships of this Definition that are VariantMemberships. If isVariation = true, then this
must be all ownedMemberships of the Definition. If isVariation = false, then variantMembershipmust be
empty.
Operations
None.
Constraints
deriveDefinitionDirectedUsage
The directedUsages of a Definition are all its directedFeatures that are Usages.
directedUsage = directedFeature->selectByKind(Usage)
deriveDefinitionOwnedAction
The ownedActions of a Definition are all its ownedUsages that are ActionUsages.
ownedAction = ownedUsage->selectByKind(ActionUsage)
The ownedAllocations of a Definition are all its ownedUsages that are AllocationUsages.
ownedAllocation = ownedUsage->selectByKind(AllocationUsage)
deriveDefinitionOwnedAnalysisCase
The ownedAnalysisCases of a Definition are all its ownedUsages that are AnalysisCaseUsages.
ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage)
deriveDefinitionOwnedAttribute
The ownedAttributes of a Definition are all its ownedUsages that are AttributeUsages.
ownedAttribute = ownedUsage->selectByKind(AttributeUsage)
deriveDefinitionOwnedCalculation
The ownedCalculations of a Definition are all its ownedUsages that are CalculationUsages.
ownedCalculation = ownedUsage->selectByKind(CalculationUsage)
deriveDefinitionOwnedCase
The ownedCases of a Definition are all its ownedUsages that are CaseUsages.
ownedCase = ownedUsage->selectByKind(CaseUsage)
deriveDefinitionOwnedConcern
The ownedConcerns of a Definition are all its ownedUsages that are ConcernUsages.
ownedConcern = ownedUsage->selectByKind(ConcernUsage)
deriveDefinitionOwnedConnection
The ownedConnections of a Definition are all its ownedUsages that are ConnectorAsUsages.
ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage)
deriveDefinitionOwnedConstraint
The ownedConstraints of a Definition are all its ownedUsages that are ConstraintUsages.
ownedConstraint = ownedUsage->selectByKind(ConstraintUsage)
deriveDefinitionOwnedEnumeration
The ownedEnumerations of a Definition are all its ownedUsages that are EnumerationUsages.
ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage)
deriveDefinitionOwnedFlow
The ownedFlows of a Definition are all its ownedUsages that are FlowConnectionUsages.
deriveDefinitionOwnedInterface
The ownedInterfaces of a Definition are all its ownedUsages that are InterfaceUsages.
ownedInterface = ownedUsage->selectByKind(ReferenceUsage)
deriveDefinitionOwnedItem
The ownedItems of a Definition are all its ownedUsages that are ItemUsages.
ownedItem = ownedUsage->selectByKind(ItemUsage)
deriveDefinitionOwnedMetadata
The ownedMetadata of a Definition are all its ownedUsages that are MetadataUsages.
ownedMetadata = ownedUsage->selectByKind(MetadataUsage)
deriveDefinitionOwnedOccurrence
The ownedOccurrences of a Definition are all its ownedUsages that are OccurrenceUsages.
ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage)
deriveDefinitionOwnedPart
The ownedParts of a Definition are all its ownedUsages that are PartUsages.
ownedPart = ownedUsage->selectByKind(PartUsage)
deriveDefinitionOwnedPort
The ownedPorts of a Definition are all its ownedUsages that are PortUsages.
ownedPort = ownedUsage->selectByKind(PortUsage)
deriveDefinitionOwnedReference
The ownedReferences of a Definition are all its ownedUsages that are ReferenceUsages.
ownedReference = ownedUsage->selectByKind(ReferenceUsage)
deriveDefinitionOwnedRendering
The ownedRenderings of a Definition are all its ownedUsages that are RenderingUsages.
ownedRendering = ownedUsage->selectByKind(RenderingUsage)
deriveDefinitionOwnedRequirement
The ownedRequirements of a Definition are all its ownedUsages that are RequirementUsages.
ownedRequirement = ownedUsage->selectByKind(RequirementUsage)
deriveDefinitionOwnedState
ownedState = ownedUsage->selectByKind(StateUsage)
deriveDefinitionOwnedTransition
The ownedTransitions of a Definition are all its ownedUsages that are TransitionUsages.
ownedTransition = ownedUsage->selectByKind(TransitionUsage)
deriveDefinitionOwnedUsage
The ownedUsages of a Definition are all its ownedFeatures that are Usages.
ownedUsage = ownedFeature->selectByKind(Usage)
deriveDefinitionOwnedUseCase
The ownedUseCases of a Definition are all its ownedUsages that are UseCaseUsages.
ownedUseCase = ownedUsage->selectByKind(UseCaseUsage)
deriveDefinitionOwnedVerificationCase
The ownedValidationCases of a Definition are all its ownedUsages that are ValidationCaseUsages.
ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage)
deriveDefinitionOwnedView
The ownedViews of a Definition are all its ownedUsages that are ViewUsages.
ownedView = ownedUsage->selectByKind(ViewUsage)
deriveDefinitionOwnedViewpoint
The ownedViewpoints of a Definition are all its ownedUsages that are ViewpointUsages.
ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage)
deriveDefinitionUsage
The usages of a Definition are all its features that are Usages.
usage = feature->selectByKind(Usage)
deriveDefinitionVariant
variant = variantMembership.ownedVariantUsage
deriveDefinitionVariantMembership
variantMembership = ownedMembership->selectByKind(VariantMembership)
validateDefinitionVariationOwnedFeatureMembership
validateDefinitionVariationSpecialization
isVariation implies
not ownedSpecialization.specific->exists(
oclIsKindOf(Definition) and
oclAsType(Definition).isVariation)
8.3.6.3 ReferenceUsage
Description
General Classes
Usage
Attributes
Operations
If this ReferenceUsage is the payload parameter of a TransitionUsage, then its naming Feature is the
payloadParameter of the triggerAction of that TransitionUsage (if any).
Constraints
validateReferenceUsageIsReference
8.3.6.4 Usage
Description
A Usage may have nestedUsages that model features that apply in the context of the owningUsage. A Usage
may also have Definitions nested in it, but this has no semantic significance, other than the nested scoping
resulting from the Usage being considered as a Namespace for any nested Definitions.
However, if a Usage has isVariation = true, then it represents a variation point Usage. In this case, all of its
members must be variant Usages, related to the Usage by VariantMembership Relationships. Rather than
being features of the Usage, variant Usages model different concrete alternatives that can be chosen to fill in
for the variation point Usage.
General Classes
Feature
Attributes
The Classifiers that are the types of this Usage. Nominally, these are Definitions, but other kinds of Kernel
Classifiers are also allowed, to permit use of Classifiers from the Kernel Model Libraries.
/isReference : Boolean
Whether this Usage is a referential Usage, that is, it has isComposite = false.
isVariation : Boolean
Whether this Usage is for a variation point or not. If true, then all the memberships of the Usage must be
VariantMemberships.
The ConnectorAsUsages that are nestedUsages of this Usage. Note that this list includes
BindingConnectorAsUsages and SuccessionAsUsages, even though these are ConnectorAsUsages but not
ConnectionUsages.
The Usages that are features of this Usage (not necessarily owned).
The Usages which represent the variants of this Usage as a variation point Usage, if isVariation = true. If
isVariation = false, then there must be no variants.
The ownedMemberships of this Usage that are VariantMemberships. If isVariation = true, then this must
be all memberships of the Usage. If isVariation = false, then variantMembershipmust be empty.
Operations
If this Usage is a variant, then its naming Feature is the referencedFeature of its
ownedReferenceSubsetting.
Constraints
checkUsageVariationDefinitionSpecialization
If a Usage has an owningVariationDefinition, then it must directly or indirectly specialize that Definition.
checkUsageVariationUsageSpecialization
If a Usage has an owningVariationUsage, then it must directly or indirectly specialize that Usage.
deriveUsageDirectedUsage
The directedUsages of a Usage are all its directedFeatures that are Usages.
directedUsage = directedFeature->selectByKind(Usage)
deriveUsageIsReference
deriveUsageNestedAction
The ownedActions of a Usage are all its ownedUsages that are ActionUsages.
nestedAction = nestedUsage->selectByKind(ActionUsage)
deriveUsageNestedAllocation
The ownedAllocations of a Usage are all its ownedUsages that are AllocationUsages.
nestedAllocation = nestedUsage->selectByKind(AllocationUsage)
The ownedAnalysisCases of a Usage are all its ownedUsages that are AnalysisCaseUsages.
nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage)
deriveUsageNestedAttribute
The ownedAttributes of a Usage are all its ownedUsages that are AttributeUsages.
nestedAttribute = nestedUsage->selectByKind(AttributeUsage)
deriveUsageNestedCalculation
The ownedCalculations of a Usage are all its ownedUsages that are CalculationUsages.
nestedCalculation = nestedUsage->selectByKind(CalculationUsage)
deriveUsageNestedCase
The ownedCases of a Usage are all its ownedUsages that are CaseUsages.
nestedCase = nestedUsage->selectByKind(CaseUsage)
deriveUsageNestedConcern
The ownedConcerns of a Usage are all its ownedUsages that are ConcernUsages.
nestedConcern = nestedUsage->selectByKind(ConcernUsage)
deriveUsageNestedConnection
The ownedConnections of a Usage are all its ownedUsages that are ConnectorAsUsages.
nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage)
deriveUsageNestedConstraint
The ownedConstraints of a Usage are all its ownedUsages that are ConstraintUsages.
nestedConstraint = nestedUsage->selectByKind(ConstraintUsage)
deriveUsageNestedEnumeration
The ownedEnumerations of a Usage are all its ownedUsages that are EnumerationUsages.
ownedNested = nestedUsage->selectByKind(EnumerationUsage)
deriveUsageNestedFlow
The ownedFlows of a Usage are all its ownedUsages that are FlowConnectionUsages.
nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage)
deriveUsageNestedInterface
The ownedInterfaces of a Usage are all its ownedUsages that are InterfaceUsages.
deriveUsageNestedItem
The ownedItems of a Usage are all its ownedUsages that are ItemUsages.
nestedItem = nestedUsage->selectByKind(ItemUsage)
deriveUsageNestedMetadata
The ownedMetadata of a Usage are all its ownedUsages that are MetadataUsages.
nestedMetadata = nestedUsage->selectByKind(MetadataUsage)
deriveUsageNestedOccurrence
The ownedOccurrences of a Usage are all its ownedUsages that are OccurrenceUsages.
nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage)
deriveUsageNestedPart
The ownedParts of a Usage are all its ownedUsages that are PartUsages.
nestedPart = nestedUsage->selectByKind(PartUsage)
deriveUsageNestedPort
The ownedPorts of a Usage are all its ownedUsages that are PortUsages.
nestedPort = nestedUsage->selectByKind(PortUsage)
deriveUsageNestedReference
The ownedReferences of a Usage are all its ownedUsages that are ReferenceUsages.
nestedReference = nestedUsage->selectByKind(ReferenceUsage)
deriveUsageNestedRendering
The ownedRenderings of a Usage are all its ownedUsages that are RenderingUsages.
nestedRendering = nestedUsage->selectByKind(RenderingUsage)
deriveUsageNestedRequirement
The ownedRequirements of a Usage are all its ownedUsages that are RequirementUsages.
nestedRequirement = nestedUsage->selectByKind(RequirementUsage)
deriveUsageNestedState
The ownedStates of a Usage are all its ownedUsages that are StateUsages.
nestedState = nestedUsage->selectByKind(StateUsage)
deriveUsageNestedTransition
nestedTransition = nestedUsage->selectByKind(TransitionUsage)
deriveUsageNestedUsage
The ownedUsages of a Usage are all its ownedFeatures that are Usages.
nestedUsage = ownedFeature->selectByKind(Usage)
deriveUsageNestedUseCase
The ownedUseCases of a Usage are all its ownedUsages that are UseCaseUsages.
nestedUseCase = nestedUsage->selectByKind(UseCaseUsage)
deriveUsageNestedVerificationCase
The ownedValidationCases of a Usage are all its ownedUsages that are ValidationCaseUsages.
nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage)
deriveUsageNestedView
The ownedViews of a Usage are all its ownedUsages that are ViewUsages.
nestedView = nestedUsage->selectByKind(ViewUsage)
deriveUsageNestedViewpoint
The ownedViewpoints of a Usage are all its ownedUsages that are ViewpointUsages.
nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage)
deriveUsageUsage
The usages of a Usage are all its features that are Usages.
usage = feature->selectByKind(Usage)
deriveUsageVariant
variant = variantMembership.ownedVariantUsage
deriveUsageVariantMembership
variantMembership = ownedMembership->selectByKind(VariantMembership)
validaeUsageVariationIsAbstract
validateUsageVariationOwnedFeatureMembership
validateUsageVariationSpecialization
isVariation implies
not ownedSpecialization.specific->exists(
oclIsKindOf(Definition) and
oclAsType(Definition).isVariation or
oclIsKindOf(Usage) and
oclAsType(Usage).isVariation)
8.3.6.5 VariantMembership
Description
A VariantMembership is a Membership between a variation point Definition or Usage and a Usage that
represents a variant in the context of that variation. The membershipOwningNamespace for the
VariantMembership must be either a Definition or a Usage with isVariation = true.
General Classes
OwningMembership
Attributes
Operations
None.
Constraints
validateVariantMembershipOwningNamespace
membershipOwningNamespace.oclIsKindOf(Definition) and
membershipOwningNamespace.oclAsType(Definition).isVariation or
membershipOwningNamespace.oclIsKindOf(Usage) and
membershipOwningNamespace.oclAsType(Usage).isVariation
+/attributeOwningDefinition
Definition Usage
0..1
{subsets owningDefinition} +/attributeOwningUsage 0..1
{subsets owningUsage}
{subsets nestedUsage,
ordered}
+/nestedAttribute 0..*
Description
General Classes
DataType
Definition
Attributes
None.
Operations
None.
Constraints
validateAttributeDefinitionFeatures
feature->forAll(not isComposite)
8.3.7.3 AttributeUsage
An AttributeUsage must specialize, directly or indirectly, the base Feature Base::dataValues from the
Kernel Semantic Library.
General Classes
Usage
Attributes
The DataTypes that are the types of this AttributeUsage. Nominally, these are AttributeDefinitions, but
other kinds of kernel DataTypes are also allowed, to permit use of DataTypes from the Kernel Model Libraries.
Operations
None.
Constraints
checkAttributeUsageSpecialization
An AttributeUsage must directly or indirectly specialize Base::dataValues from the Kernel Semantic
Library.
specializesFromLibrary('Base::dataValues')
validateAttributeUsageFeatures
feature->forAll(not isComposite)
validateAttributeUsageIsReference
isReference
AttributeDefinition AttributeUsage
+/ownedEnumeration
EnumerationDefinition EnumerationUsage
0..*
+isVariation : Boolean = true{redefines isVariation} {subsets ownedAttribute, ordered}
+/nestedEnumeration
+/owningEnumerationDefinition +/enumeratedValue
0..1 0..* 0..*
{subsets owningVariationDefinition} {redefines variant, ordered} {subsets nestedAttribute,
ordered}
+/enumerationDefinition +/definedEnumeration
1 0..*
{redefines attributeDefinition} {subsets definedAttribute}
Description
General Classes
AttributeDefinition
Attributes
Operations
None.
Constraints
validateEnumerationDefinitionIsVariation
isVariation
Description
General Classes
AttributeUsage
Attributes
Operations
None.
Constraints
None.
+/occurrenceOwningDefinition
Definition Usage
0..1
{subsets owningDefinition} +/occurrenceOwningUsage 0..1
{subsets owningUsage}
+/occurrenceDefinition +/definedOccurrence
Class
0..* 0..*
{redefines {subsets definedUsage}
definition, ordered}
LifeClass
+/lifeClass +isSufficient : Boolean = true{redefines isSufficient}
0..1
+effectiveName() : String [0..1]{redefines effectiveName}
{subsets ownedMember}
+/referencingOccurrence EventOccurrenceUsage
0..* +/isReference : Boolean = true{redefines isReference}
Description
General Classes
OccurrenceUsage
Attributes
/eventOccurrence : OccurrenceUsage
Operations
None.
Constraints
checkEventOccurrenceUsageSpecialization
deriveEventOccurrenceUsageEventOccurrence
eventOccurrence =
if ownedReferenceSubsetting = null then self
else if ownedReferenceSubsetting.referencedFeature.oclIsKindOf(OccurrenceUsage) then
ownedReferenceSubsetting.referencedFeature.oclAsType(OccurrenceUsage)
else null
endif endif
validateEventOccurrenceUsageIsReference
isReference
validateEventOccurrenceUsageReference
8.3.9.3 LifeClass
Description
A LifeClass is a Class that specializes both the Class Occurrences::Life from the Kernel Semantic Library
and a single OccurrenceDefinition, and has a multiplicity of 0..1. This constrains the
OccurrenceDefinition being specialized to have at most one instance that is a complete Life.
General Classes
Class
Attributes
Operations
body: "Life"
Constraints
A LifeClass must specialize the Class Occurrences::Life from the Kernel Semantic Model Library.
specializesFromLibrary('Occurrences::Life')
checkLifeClassMultiplicitySpecialization
checkLifeClassOccurrenceSpecialization
specializes(individualDefinition)
validateLifeClassIsSufficient
isSufficient
8.3.9.4 OccurrenceDefinition
Description
An OccurrenceDefinition is a Definition of a Class of individuals that have an independent life over time
and potentially an extent over space. This includes both structural things and behaviors that act on such structures.
If isIndividual is true, then the OccurrenceDefinition is constrained to represent an individual thing. The
instances of such an OccurrenceDefinition include all spatial and temporal portions of the individual being
represented, but only one of these can be the complete Life of the individual. All other instances must be portions
of the "maximal portion" that is single Life instance, capturing the conception that all of the instances represent one
individual with a single "identity".
An OccurrenceDefinition must specialize, directly or indirectly, the base Class Occurrence from the Kernel
Semantic Library.
General Classes
Definition
Class
Attributes
isIndividual : Boolean
None.
Constraints
deriveOccurrenceDefinitionLifeClass
The lifeClass of an OccurrenceDefinition is its single ownedMember that is a LifeClass (if any).
lifeClass =
let lifeClasses: OrderedSet(LifeClass) =
ownedMember->selectByKind(LifeClass) in
if lifeClasses->isEmpty() then null
else lifeClasses->first()
endif
validateOccurrenceDefinitionLifeClass
If an OccurrenceDefinition has isIndividual = true, then it has exactly one ownedMember that is a
LifeClass. Otherwise it has none.
8.3.9.5 OccurrenceUsage
Description
General Classes
Usage
Attributes
isIndividual : Boolean
Whether this OccurrenceUsage represents the usage of the specific individual (or portion of it) represented by its
individualDefinition.
The Classes that are the types of this OccurrenceUsage. Nominally, these are OccurrenceDefinitions, but
other kinds of kernel Classes are also allowed, to permit use of Classes from the Kernel Model Libraries.
Operations
None.
Constraints
checkOccurrenceUsageSpecialization
specializesFromLibrary('Occurrences::occurrences')
checkOccurrenceUsageSuboccurrenceSpecialization
isComposite and
owningType <> null and
(owningType.oclIsKindOf(Class) or
owningType.oclIsKindOf(OccurrenceUsage) or
owningType.oclIsKindOf(Feature) and
owningType.oclAsType(Feature).type->
exists(oclIsKind(Class))) implies
specializesFromLibrary('Occurrences::Occurrence::suboccurrences')
checkOccurrenceUsageTypeFeaturing
If the portionKind of an OccurrenceUsage is not empty, then, for each occurrenceDefinition of the
OccurrenceUsage, there must be a featuringType of the OccurrenceUsage which either is the
occurrenceDefinition or directly or indirectly specializes it.
deriveOccurrenceUsageIndividualDefinition
individualDefinition =
let individualDefinitions : OrderedSet(OccurrenceDefinition) =
occurrenceDefinition->
selectByKind(OccurrenceDefinition)->
select(isIndividual) in
if individualDefinitions->isEmpty() then null
else individualDefinitions->first() endif
validateOccurrenceUsageIndividualDefinition
validateOccurrenceUsageIndividualUsage
8.3.9.6 PortionKind
Description
PortionKind is an enumeration of the specific kinds of Occurrence portions that can be represented by an
OccurrenceUsage.
General Classes
None.
Literal Values
snapshot
timeslice
+/itemOwningDefinition +/itemOwningUsage
Definition Usage
0..1 0..1
{subsets {subsets
occurrenceOwningDefinition} occurrenceOwningUsage}
OccurrenceDefinition OccurrenceUsage
+/nestedItem
+/ownedItem
ItemDefinition ItemUsage
0..*
{subsets ownedOccurrence, 0..*
+/definedItem 0..* {subsets nestedOccurrence, ordered}
ordered}
{subsets definedOccurrence}
+/itemDefinition
Structure
0..*
{subsets occurrenceDefinition,
ordered}
General Classes
Structure
OccurrenceDefinition
Attributes
None.
Operations
None.
Constraints
checkItemDefinitionSpecialization
An ItemDefinition must directly or indirectly specialize the Systems Library Model ItemDefinition
Items::Item.
specializesFromLibrary('Items::Item')
8.3.10.3 ItemUsage
Description
General Classes
OccurrenceUsage
Attributes
The Structures that are the definitions of this ItemUsage. Nominally, these are ItemDefinitions, but other kinds
of Kernel Structures are also allowed, to permit use of Structures from the Kernel Library.
Operations
None.
Constraints
checkItemUsageSpecialization
specializesFromLibrary('Items::items')
checkItemUsageSubitemSpecialization
deriveItemUsageItemDefinition
itemDefinition = occurrenceDefinition->selectByKind(ItemDefinition)
+/partOwningDefinition +/partOwningUsage
Definition Usage
0..1 0..1
{subsets itemOwningDefinition} {subsets itemOwningUsage}
OccurrenceDefinition OccurrenceUsage
ItemDefinition ItemUsage
+/ownedPart
0..* PartUsage
+/nestedPart
{subsets ownedItem, ordered}
0..*
+/partDefinition +/definedPart
PartDefinition {subsets nestedItem,
0..* 0..* ordered}
{subsets itemDefinition, {subsets definedItem}
ordered}
Description
A PartDefinition is an ItemDefinition of a Class of systems or parts of systems. Note that all parts may be
considered items for certain purposes, but not all items are parts that can perform actions within a system.
General Classes
ItemDefinition
Attributes
None.
None.
Constraints
checkPartDefinitionSpecialization
A PartDefinition must directly or indirectly specialize the base PartDefinition Parts::Part from the
Systems Model Library.
specializesFromLibrary('Parts::Part')
8.3.11.3 PartUsage
Description
A PartUsage is a usage of a PartDefinition to represent a system or a part of a system. At least one of the
itemDefinitions of the PartUsage must be a PartDefinition.
A PartUsage must subset, directly or indirectly, the base PartUsage parts from the Systems Model Library.
General Classes
ItemUsage
Attributes
Operations
None.
Constraints
checkPartUsageActorSpecialization
If a PartUsage is owned via an ActorMembership, then it must directly or indirectly specialize either
Requirements::RequirementCheck::actors (if its owningType is a RequirementDefinition or
RequirementUsage or Cases::Case::actors (otherwise).
checkPartUsageSpecialization
A PartUsage must directly or indirectly specialize the PartUsage Parts::parts from the Systems Model
Library.
specializesFromLibrary('Parts::parts')
If a PartUsage is owned via a StakeholderMembership, then it must directly or indirectly specialize either
Requirements::RequirementCheck::stakeholders.
checkPartUsageSubpartSpecialization
derivePartUsagePartDefinition
itemDefinition->selectByKind(PartDefinition)
validatePartUsagePartDefinition
partDefinition->notEmpty()
+/portOwningDefinition +/portOwningUsage
Definition Usage
0..1 0..1
{subsets owningDefinition} {redefines owningUsage}
OccurrenceDefinition OccurrenceUsage
+/ownedPort
PortDefinition PortUsage
0..*
{subsets ownedUsage, ordered} +/nestedPort
Structure
{redefines originalType}
+/portDefinition +originalPortDefinition
PortDefinition
1 1
1 +/originalPortDefinition
{redefines owningNamespace}
{subsets targetRelationship}
+/conjugatedPortTyping {subsets conjugation}
0..* +portConjugation 0..1
ConjugatedPortTyping PortConjugation
+typingByConjugatedPort 0..*
+/ownedPortConjugator 1
{subsets typingByType} {subsets ownedMember} {redefines ownedConjugator}
0..1 +/conjugatedPortDefinition
Description
General Classes
PortDefinition
Attributes
The original PortDefinition for this ConjugatedPortDefinition, which is the owningNamespace of the
ConjugatedPortDefinition.
Operations
If the name of the originalPortDefinition is non-empty, then return that with the character ~ prepended.
validateConjugatedPortDefinitionConjugatedPortDefinitionIsEmpty
conjugatedPortDefinition = null
validateConjugatedPortDefinitionOriginalPortDefinition
ownedPortConjugator.originalPortDefinition = originalPortDefinition
8.3.12.3 ConjugatedPortTyping
Description
General Classes
FeatureTyping
Attributes
/portDefinition : PortDefinition
Operations
None.
Constraints
deriveConjugatedPortTypingPortDefinition
portDefinition = conjugatedPortDefinition.originalPortDefinition
8.3.12.4 PortConjugation
Description
General Classes
Conjugation
Attributes
Operations
None.
Constraints
None.
8.3.12.5 PortDefinition
Description
A PortDefinition defines a point at which external entities can connect to and interact with a system or part of a
system. Any ownedUsages of a PortDefinition, other than PortUsages, must not be composite.
General Classes
Structure
OccurrenceDefinition
Attributes
Operations
None.
Constraints
checkPortDefinitionSpecialization
A PortDefinition must directly or indirectly specialize the PortDefinition Ports::Port from the Systems
Model Library.
specializesFromLibrary('Ports::Port')
conjugatedPortDefinition =
let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) =
ownedMember->selectByKind(ConjugatedPortDefinition) in
if conjugatedPortDefinitions->isEmpty() then null
else conjugatedPortDefinitions->first()
endif
validatePortDefinitionConjugatedPortDefinition
validatePortDefinitionOwnedUsagesNotComposite
The ownedUsages of a PortDefinition that are not PortUsages must not be composite.
ownedUsage->
reject(oclIsKindOf(PortUsage))->
forAll(not isComposite)
8.3.12.6 PortUsage
Description
A PortUsage is a usage of a PortDefinition. A PortUsage itself as well as all its nestedUsages must be
referential (non-composite).
General Classes
OccurrenceUsage
Attributes
Operations
None.
Constraints
checkPortUsageSpecialization
A PortUsage must directly or indirectly specialize the PortUsage Ports::ports from the Systems Model
Library.
checkPortUsageSubportSpecialization
validatePortUsageIsReference
Unless a PortUsage has an owningType that is a PortDefinition or a PortUsage, it must be referential (non-
composite).
owningType = null or
not owningType.oclIsKindOf(PortDefinition) and
not owningType.oclIsKindOf(PortUsage) implies
isReference
validatePortUsageNestedUsagesNotComposite
The nestedUsages of a PortUsage that are not themselves PortUsages must not be composite.
nestedUsage->
reject(oclIsKindOf(PortUsage))->
forAll(not isComposite)
Usage Connector
ConnectorAsUsage
BindingConnectorAsUsage SuccessionAsUsage
BindingConnector Succession
ItemDefinition ItemUsage
PartDefinition PartUsage
ConnectionDefinition ConnectionUsage
+/connectionDefinitionWithEnd
0..*
+/definedConnection
{redefines associationWithEnd}
0..*
{subsets typedConnector,
ordered}
+/connectionDefinition
AssociationStructure
0..*
{subsets itemDefinition,
redefines association,
ordered} +/ownedConnection +/nestedConnection
ConnectorAsUsage
0..* 0..*
{subsets ownedPart, {subsets nestedPart,
ordered} ordered}
+/flowOwningDefinition +/flowOwningUsage
Definition Usage
0..1 0..1
{subsets connectionOwningDefinition} {subsets
connectionOwningUsage}
OccurrenceDefinition OccurrenceUsage
ItemDefinition ItemUsage
PartDefinition PartUsage
+/nestedFlow
FlowConnectionDefinition +/ownedFlow FlowConnectionUsage
0..*
0..*
{subsets nestedConnection}
{subsets ownedConnection}
SuccessionFlowConnectionUsage SuccessionItemFlow
Description
General Classes
Attributes
None.
Operations
None.
Constraints
None.
8.3.13.3 ConnectionDefinition
Description
General Classes
AssociationStructure
PartDefinition
Attributes
Operations
None.
Constraints
checkConnectionDefinitionBinarySpecialization
ownedEndFeature->size() = 2 implies
specializesFromLibrary('Connections::BinaryConnections')
checkConnectionDefinitionSpecializations
specializesFromLibrary('Connections::Connection')
8.3.13.4 ConnectionUsage
Description
General Classes
ConnectorAsUsage
PartUsage
Attributes
The AssociationStructures that are the types of this ConnectionUsage. Nominally, these are , but other
kinds of Kernel AssociationStructures are also allowed, to permit use of AssociationStructures from the
Kernel Model Libraries
Operations
None.
Constraints
checkConnectionUsageBinarySpecialization
ownedEndFeature->size() = 2 implies
specializesFromLibrary('Connections::binaryConnections')
checkConnectionUsageSpecialization
specializesFromLibrary('Connections::connections')
8.3.13.5 ConnectorAsUsage
Description
General Classes
Connector
Usage
Attributes
None.
None.
Constraints
None.
8.3.13.6 FlowConnectionDefinition
Description
General Classes
ActionDefinition
ConnectionDefinition
Interaction
Attributes
None.
Operations
None.
Constraints
checkFlowConnectionDefinitionSpecialization
specializesFromLibrary('Connections::MessageConnection')
8.3.13.7 FlowConnectionUsage
Description
General Classes
ItemFlow
ConnectionUsage
ActionUsage
Attributes
Operations
None.
Constraints
checkFlowConnectionUsageSpecialization
If a FlowConnectionUsage has no ownedEndFeatures, then it must directly or indirectly specialize the base
FlowConnectionUsage Connections::messageConnections from the Systems Library model. Otherwise, it
must directly or indirectly specialize the FlowConnectionUsage Connections::flowConnections.
if ownedEndFeatures->isEmpty() then
specializesFromLibrary('Connections::messageConnections')
else
specializesFromLibrary('Connections::flowConnections')
endif
8.3.13.8 SuccessionAsUsage
Description
General Classes
ConnectorAsUsage
Succession
Attributes
None.
Operations
None.
Constraints
None.
8.3.13.9 SuccessionFlowConnectionUsage
Description
General Classes
SuccessionItemFlow
FlowConnectionUsage
Attributes
Operations
None.
Constraints
checkSuccessionFlowConnectionUsageSpecialization
specializesFromLibrary('Connections::successionFlowConnections')
+/interfaceOwningDefinition
Definition Usage
0..1
{subsets +/interfaceOwningUsage 0..1
connectionOwningDefinition} {subsets
connectionOwningUsage}
OccurrenceDefinition OccurrenceUsage
ItemDefinition ItemUsage
PartDefinition PartUsage
ConnectionDefinition ConnectionUsage
{subsets nestedConnection,
ordered}
+/nestedInterface 0..*
+/ownedInterface
InterfaceUsage
0..*
{subsets ownedConnection, ordered}
+/interfaceDefinition +/definedInterface
InterfaceDefinition
0..* 0..*
{redefines connectionDefinition} {subsets definedConnection}
+/interfaceDefinitionWithEnd +/interfaceEnd
PortUsage
0..* 0..*
{subsets connectionDefinitionWithEnd} {redefines connectionEnd,
ordered}
Description
ConnectionDefinition
Attributes
Operations
None.
Constraints
checkInterfaceDefinitionBinarySpecialization
ownedEndFeature->size() = 2 implies
specializesFromLibrary('Interfaces::BinaryInterface')
checkInterfaceDefinitionSpecialization
specializesFromLibrary('Interfaces::Interface')
8.3.14.3 InterfaceUsage
Description
General Classes
ConnectionUsage
Attributes
Operations
None.
Constraints
checkInterfaceUsageBinarySpecialization
ownedEndFeature->size() = 2 implies
specializesFromLibrary('Interfaces::binaryInterfaces')
checkInterfaceUsageSpecialization
specializesFromLibrary('Interfaces::interfaces')
+/allocationOwningUsage
Definition +allocationOwningDefinition Usage
0..1
0..1
{subsets
{subsets
connectionOwningUsage}
connectionOwningDefinition}
OccurrenceDefinition OccurrenceUsage
ItemDefinition ItemUsage
PartDefinition PartUsage
ConnectionDefinition ConnectionUsage
+/ownedAllocation
AllocationDefinition
AllocationUsage
0..*
{subsets ownedConnection, ordered}
Description
General Classes
ConnectionDefinition
Attributes
The AllocationUsages that refine the allocation mapping defined by this AllocationDefinition.
Operations
None.
Constraints
checkAllocationDefinitionSpecialization
specializesFromLibrary('Allocations::Allocation')
deriveAllocationDefinitionAllocation
The allocations of an AllocationDefinition are all its usages that are AllocationUsages.
allocation = usage->selectAsKind(AllocationUsage)
8.3.15.3 AllocationUsage
Description
General Classes
ConnectionUsage
Attributes
Operations
None.
Constraints
checkAllocationUsageSpecialization
specializesFromLibrary('Allocations::allocations')
+/actionOwningDefinition +/actionOwningUsage
Definition Usage
0..1 0..1
{subsets {subsets
occurrenceOwningDefinition} occurrenceOwningUsage}
OccurrenceDefinition OccurrenceUsage
+/ownedAction
0..* ActionUsage
{subsets ownedOccurrence, +inputParameters() : Feature [0..*]
ordered} +inputParameter( i : Integer ) : Feature [0..1]
+/action +/nestedAction
ActionDefinition +/featuringActionDefinition +argument( i : Integer ) : Expression [0..1]
0..* 0..* +isSubactionUsage() : Boolean 0..*
{subsets featuringBehavior, {subsets step, subsets usage, {subsets nestedOccurrence,
subsets featuringDefinition} ordered} ordered}
+/definedAction
0..*
{subsets definedOccurrence,
subsets typedStep}
+/actionDefinition
Behavior Step
0..*
{redefines behavior, redefines
occurrenceDefinition, ordered}
ActionUsage
ControlNode
PerformActionUsage +/performingAction
+namingFeature() : Feature [0..1]{redefines namingFeature} 0..*
{subsets
referencingOccurrence}
ActionUsage
+/sendingActionUsage +/owningAcceptActionUsage
SendActionUsage AcceptActionUsage
0..1 0..1
+/senderActionUsage 0..1 0..1 +/sendActionUsage +isTriggerAction() : Boolean
{subsets
+/acceptActionUsage 0..1 +/acceptingActionUsage 0..1 referenceOwningUsage}
{subsets nestedReference,
+/payloadParameter subsets parameter}
+/senderArgument 0..1 0..1 +/receiverArgument 1
+/receiverArgument
Expression ReferenceUsage
+/payloadArgument 0..1
1 +/payloadArgument
0..1
InvocationExpression
«enumeration»
TriggerKind
TriggerInvocationExpression when
at
+kind : TriggerKind after
ActionUsage
A_valueExpression_assigningAction
+/valueExpression 0..1
+/targetArgument
Expression
0..1
+/ifElseAction 0..1
+/ifThenAction +/loopAction
IfActionUsage LoopActionUsage
0..1 0..1
+/ifAction 0..1
+/forLoopAction
WhileLoopActionUsage ForLoopActionUsage
0..1
+/forLoopAction 0..1
+/whileLoopAction 0..1 0..1 +/untilLoopAction
+/ifArgument 1
+/whileArgument +/loopVariable 1
Expression
1
ReferenceUsage
+/untilArgument
0..1
+/seqArgument
1
Description
General Classes
ActionUsage
Attributes
An Expression whose result is bound to the payload parameter of this AcceptActionUsage. If provided,
the AcceptActionUsage will only accept a Transfer with exactly this payload.
The nestedReference of this AcceptActionUsage that redefines the payload output parameter of the base
AcceptActionUsage AcceptAction from the Systems Model Library.
Operations
isTriggerAction() : Boolean
Constraints
checkAcceptActionUsageReceiverBindingConnector
checkAcceptActionUsageSpecialization
checkAcceptActionUsageSubactionSpecialization
checkAcceptActionUsageTriggerActionSpecialization
isTriggerAction() implies
specializesFromLibrary('Actions::TransitionAction::accepter')
deriveAcceptActionUsagePayloadArgument
deriveAcceptActionUsagePayloadParameter
payloadParameter =
if parameter->isEmpty() then null
else parameter->first() endif
deriveAcceptActionUsageReceiverArgument
receiverArgument = argument(2)
validateAcceptActionUsageParameters
An AcceptUsageAction must have at least two input parameters, corresponding to its payload and receiver,
respectively (even if they have no FeatureValue). (Note that the payloadParameter is an input as well as an
output.)
inputParameters()->size() >= 2
8.3.16.3 ActionDefinition
Description
An ActionDefinition is a Definition that is also a Behavior that defines an Action performed by a system
or part of a system.
General Classes
OccurrenceDefinition
Behavior
Attributes
The ActionUsages that are steps in this ActionDefinition, which define the actions that specify the behavior
of the ActionDefinition.
Operations
None.
Constraints
checkActionDefinitionSpecialization
specializesFromLibrary('Actions::Action')
deriveActionDefinitionAction
action = usage->selectByKind(ActionUsage)
8.3.16.4 ActionUsage
Description
An ActionUsage is a Usage that is also a Step, and, so, is typed by a Behavior. Nominally, if the type is an
ActionDefinition, an ActionUsage is a Usage of that ActionDefinition within a system. However, other
kinds of kernel Behaviors are also allowed, to permit use of Behaviors from the Kernel Model Libraries.
General Classes
OccurrenceUsage
Step
Attributes
The Behaviors that are the types of this ActionUsage. Nominally, these would be ActionDefinitions, but
other kinds of Kernel Behaviors are also allowed, to permit use of Behaviors from the Kernel Model Libraries.
Operations
Return the i-th argument Expression of an ActionUsage, defined as the value Expression of the
FeatureValue of the i-th owned input parameter of the ActionUsage. Return null if the ActionUsage has
less than i owned input parameters or the i-th owned input parameter has no FeatureValue.
Return the i-th owned input parameter of the ActionUsage. Return null if the ActionUsage has less than i
owned input parameters.
Check if this ActionUsage is composite and has an owningType that is an ActionDefinition or ActionUsage
but is not the entryAction or exitAction of a StateDefinition or StateUsage. If so, then it represents an
Action that is a subaction of another Action.
Constraints
checkActionUsageOwnedActionSpecialization
checkActionUsageSpecialization
An ActionUsage must directly or indirectly specialize the ActionUsage Actions::actions from the Systems
Model Library.
specializesFromLibrary('Actions::actions')
checkActionUsageStateActionRedefinition
An ActionUsage that is the entry, do, or exit Action of a StateDefinition or StateUsage must redefine
the entryAction, doAction, or exitAction feature, respectively, of the StateDefinition
States::StateAction from the Systems Model Library.
checkActionUsageSubactionSpecialization
A composite ActionUsage that is a subaction usage must directly or indirectly specialize the ActionUsage
Actions::Action::subactions from the Systems Model Library.
isSubactionUsage() implies
specializesFromLibrary('Actions::Action::subactions')
8.3.16.5 AssignmentActionUsage
General Classes
ActionUsage
Attributes
The Expression whose value is an occurrence in the domain of the referent Feature, for which the value of
the referent will be set to the result of the valueExpression by this AssignmentActionUsage.
Operations
None.
Constraints
checkAssignmentActionUsageAccessedFeatureRedefinition
The first ownedFeature of the first ownedFeature of the first parameter of an AssignmentActionUsage
must redefine AssignmentAction::target::startingAt::accessedFeature.
checkAssignmentActionUsageReferentRedefinition
The first ownedFeature of the first ownedFeature of the first parameter of an AssignmentActionUsage
must redefine the referent of the AssignmentActionUsage.
checkAssignmentActionUsageSpecialization
specializesFromLibrary('Actions::assignmentActions')
checkAssignmentActionUsageStartingAtRedefinition
checkAssignmentActionUsageSubactionSpecialization
A composite AssignmentActionUsage that is a subaction usage must directly or indirectly specialize the
ActionUsage Actions::Action::assignments from the Systems Model Library.
isSubactionUsage() implies
specializesFromLibrary('Actions::Action::assignments')
deriveAssignmentActionUsageReferent
referent =
let unownedFeatures : Sequence(Feature) = ownedMembership->
reject(oclIsKindOf(FeatureMembership)).memberElement->
selectByKind(Feature) in
if unownedFeatures->isEmpty() then null
else unownedFeatures->first().oclAsType(Feature)
endif
deriveAssignmentActionUsageValueExpression
valueExpression = argument(2)
deriveAssignmentUsageTargetArgument
targetArgument = argument(1)
validateAssignmentActionUsageReferent
ownedMembership->exists(
not oclIsKindOf(OwningMembership) and
memberElement.oclIsKindOf(Feature))
Description
A ControlNode is an ActionUsage that does not have any inherent behavior but provides constraints on incoming
and outgoing Successions that are used to control other Actions. A ControlNode must be a composite owned
usage of an ActionDefinition or ActionUsage.
General Classes
ActionUsage
Attributes
None.
Operations
Check that the given Multiplicity has lowerBound and upperBound expressions that are model-level
evaluable to the given lower and upper values.
Constraints
checkControlNodeSpecialization
A ControlNode must directly or indirectly specialize the ActionUsage Actions::Action::control from the
Systems Model Library.
specializesFromLibrary('Action::Action::controls')
validateControlNodeIncomingSuccessions
targetConnector->selectByKind(Succession)->
collect(connectorEnd->at(2).multiplicity)->
forAll(targetMult |
multiplicityHasBounds(targetMult, 1, 1))
validateControlNodeOutgoingSuccessions
All outgoing Successions from a ControlNode must have a source multiplicity of 1..1.
sourceConnector->selectByKind(Succession)->
collect(connectorEnd->at(1).multiplicity)->
forAll(sourceMult |
multiplicityHasBounds(sourceMult, 1, 1))
8.3.16.7 DecisionNode
Description
General Classes
ControlNode
Attributes
None.
Operations
None.
Constraints
checkDecisionNodeOutgoingSuccessionSpecialization
All outgoing Successions from a DecisionNode must subset the inherited outgoingHBLink feature of the
DecisionNode.
sourceConnector->selectByKind(Succession)->
forAll(subsetsChain(self,
resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink')))
checkDecisionNodeSpecialization
specializesFromLibrary('Actions::Action::decisions')
validateDecisionNodeIncomingSuccessions
targetConnector->selectByKind(Succession)->size() <= 1
validateDecisionNodeOutgoingSuccessions
All outgoing Successions from a DecisionNode must have a target multiplicity of 0..1.
sourceConnector->selectAsKind(Succession)->
collect(connectorEnd->at(2))->
forAll(targetMult |
multiplicityHasBounds(targetMult, 0, 1))
Description
A ForkNode is a ControlNode that must be followed by successor Actions as given by all its outgoing
Successions.
General Classes
ControlNode
Attributes
None.
Operations
None.
Constraints
checkForkNodeSpecialization
A ForkNode must directly or indirectly specialize the ActionUsage Actions::Action::forks from the
Systems Model Library.
specializesFromLibrary('Actions::Action::forks')
validateForkNodeIncomingSuccessions
targetConnector->selectByKind(Succession)->size() <= 1
8.3.16.9 ForLoopActionUsage
Description
General Classes
LoopActionUsage
Attributes
/loopVariable : ReferenceUsage
The ownedFeature of this ForLoopActionUsage that acts as the loop variable, which is assigned the successive
values of the input sequence on each iteration. It is the ownedFeature that redefines ForLoopAction::var.
/seqArgument : Expression
Operations
None.
Constraints
checkForLoopActionUsageSpecialization
specializesFromLibrary('Actions::forLoopActions')
checkForLoopActionUsageSubactionSpecialization
A composite ForLoopActionUsage that is a subaction usage must directly or indirectly specialize the
ActionUsage Actions::Action::forLoops from the Systems Model Library.
isSubactionUsage() implies
specializesFromLibrary('Actions::Action::forLoops')
checkForLoopActionUsageVarRedefinition
deriveForLoopActionUsageLoopVariable
loopVariable =
if ownedFeature->isEmpty() or
not ownedFeature->first().oclIsKindOf(ReferenceUsage) then
null
else
ownedFeature->first().oclAsType(ReferenceUsage)
endif
deriveForLoopActionUsageSeqArgument
seqArgument = argument(1)
validateForLoopActionUsageLoopVariable
ownedFeature->notEmpty() and
ownedFeature->at(1).oclIsKindOf(ReferenceUsage)
inputParameters()->size() = 2
8.3.16.10 IfActionUsage
Description
An IfActionUsage is an ActionUsage that specifies that the thenAction ActionUsage should be performed if
the result of the ifArgument Expression is true. It may also optionally specify an elseAction ActionUsage
that is performed if the result of the ifArgument is false.
General Classes
ActionUsage
Attributes
The ActionUsage that is to be performed if the result of the ifArgument is false. It is the (optional) third
parameter of the IfActionUsage.
/ifArgument : Expression
The Expression whose result determines whether the thenAction or (optionally) the elseAction is performed.
It is the first parameter of the IfActionUsage.
/thenAction : ActionUsage
The ActionUsage that is to be performed if the result of the ifArgument is true. It is the second parameter of
the IfActionUsage.
Operations
None.
Constraints
checkIfActionUsageSpecialization
A IfActionUsage must directly or indirectly specialize the ActionUsage Actions::ifThenActions from the
Systems Model Library. If it has an elseAction, then it must directly or indirectly specialize
Actions::ifThenElseActions
checkIfActionUsageSubactionSpecialization
A composite IfActionUsage that is a subaction usage must directly or indirectly specialize the ActionUsage
Actions::Action::ifSubactions from the Systems Model Library.
deriveIfActionUsageElseAction
The elseAction of an ifActionUsage is its third parameter, if there is one, which must then be an
ActionUsage.
elseAction =
let parameter : Feature = inputParameter(3) in
if parameter <> null and parameter.oclIsKindOf(ActionUsage) then
parameter.oclAsType(ActionUsage)
else
null
endif
deriveIfActionUsageIfArgument
ifArgument =
let parameter : Feature = inputParameter(1) in
if parameter <> null and parameter.oclIsKindOf(Expression) then
parameter.oclAsType(Expression)
else
null
endif
deriveIfActionUsageThenAction
thenAction =
let parameter : Feature = inputParameter(2) in
if parameter <> null and parameter.oclIsKindOf(ActionUsage) then
parameter.oclAsType(ActionUsage)
else
null
endif
validateIfActionUsageParameters
inputParameters()->size() >= 2
8.3.16.11 JoinNode
Description
A JoinNode is a ControlNode that waits for the completion of all the predecessor Actions given by incoming
Successions.
General Classes
ControlNode
Attributes
Operations
None.
Constraints
checkJoinNodeSpecialization
A JoinNode must directly or indirectly specialize the ActionUsage Actions::Action::joins from the
Systems Model Library.
specializesFromLibrary('Actions::Action::join')
validateJoinNodeOutgoingSuccessions
sourceConnector->selectByKind(Succession)->size() <= 1
8.3.16.12 LoopActionUsage
Description
A LoopActionUsage is an ActionUsage that specifies that its bodyAction should be performed repeatedly. Its
subclasses WhileLoopActionUsage and ForLoopActionUsage provide different ways to determine how many
times the bodyAction should be performed.
General Classes
ActionUsage
Attributes
/bodyAction : ActionUsage
The ActionUsage to be performed repeatedly by the LoopActionUsage. It is the second parameter of the
LoopActionUsage.
Operations
None.
Constraints
deriveLoopActionUsageBodyAction
The bodyAction of a LoopActionUsage is its second input parameter, which must be an Action.
bodyAction =
let parameter : Feature = inputParameter(2) in
if parameter <> null and parameter.oclIsKindOf(Action) then
parameter.oclAsType(Action)
else
null
endif
Description
A MergeNode is a ControlNode that asserts the merging of its incoming Successions. A MergeNode may have
at most one outgoing Successions.
General Classes
ControlNode
Attributes
None.
Operations
None.
Constraints
checkMergeNodeIncomingSuccessionSpecialization
All incoming Successions to a MergeNode must subset the inherited incomingHBLink feature of the
MergeNode.
targetConnector->selectByKind(Succession)->
forAll(subsetsChain(self,
resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink')))
checkMergeNodeSpecialization
A MergeNode must directly or indirectly specialize the ActionUsage Actions::Action::merges from the
Systems Model Library.
specializesFromLibrary('Actions::Action::merges')
validateMergeNodeIncomingSuccessions
targetConnector->selectByKind(Succession)->
collect(connectorEnd->at(1))->
forAll(sourceMult |
multiplicityHasBounds(sourceMult, 0, 1))
validateMergeNodeOutgoingSuccessions
sourceConnector->selectAsKind(Succession)->size() <= 1
8.3.16.14 PerformActionUsage
Description
General Classes
EventOccurrenceUsage
ActionUsage
Attributes
Operations
The naming Feature of a PerformActionUsage is its performedAction, if this is different than the
PerformActionUsage. If the PerformActionUsage is its own performedAction, then the naming Feature is
the same as the usual default for a Usage.
Constraints
checkPerformActionUsageSpecialization
validatePerformActionUsageReference
8.3.16.15 SendActionUsage
Description
A SendActionUsage is an ActionUsage that specifies the sending of a payload given by the result of its
payloadArgument Expression via a MessageTransfer whose source is given by the result of the
senderArgument Expression and whose target is given by the result of the receiverArgument
Expression. If no senderArgument is provided, the default is the this context for the action. If no
General Classes
ActionUsage
Attributes
/payloadArgument : Expression
An Expression whose result is bound to the payload input parameter of this SendActionUsage.
An Expression whose result is bound to the receiver input parameter of this SendActionUsage.
An Expression whose result is bound to the sender input parameter of this SendActionUsage.
Operations
None.
Constraints
checkSendActionUsageSpecialization
A SendActionUsage must directly or indirectly specialize the ActionUsage Actions::sendActions from the
Systems Model Library.
specializesFromLibrary('Actions::sendActions')
checkSendActionUsageSubactionSpecialization
A composite SendActionUsage that is a subaction must directly or indirectly specialize the ActionUsage
Actions::Action::sendSubactions from the Systems Model Library.
isSubactionUsage() implies
specializesFromLibrary('Actions::Action::acceptSubactions')
deriveSendActionUsagePayloadArgument
payloadArgument = argument(1)
deriveSendActionUsageReceiverArgument
receiverArgument = argument(3)
deriveSendActionUsageSenderArgument
validateSendActionParameters
A SendActionUsage must have at least three owned input parameters, corresponding to its payload, sender
and receiver, respectively (whether or not they have FeatureValues).
inputParameters()->size() >= 3
8.3.16.16 TriggerInvocationExpression
Description
General Classes
InvocationExpression
Attributes
kind : TriggerKind
Indicates which of the Functions from the Triggers model in the Kernel Semantic Library is to be invoked by
this TriggerInvocationExpression.
Operations
None.
Constraints
checkTriggerInvocationExpressionSpecialization
specializesFromLibrary(
if kind = TriggerKind::when then
'Triggers::TriggerWhen'
else if kind = TriggerKind::at then
'Triggers::TriggerAt'
else
'Triggers::TriggerAfter'
endif endif
)
validateTriggerInvocationExpressionAfterArgument
If a TriggerInvocationExpression has kind = after, then it must have an argument Expression with a
result that conforms to the type Quantities::ScalarQuantityValue and a feature that directly or
indirectly redefines Quantities::TensorQuantityValue::mRef and directly or indirectly specializes
ISQBase::DurationUnit.
validateTriggerInvocationExpressionAtArgument
If a TriggerInvocationExpression has kind = at, then it must have an argument Expression with a
result that conforms to the type Time::TimeInstantValue.
validateTriggerInvocationExpressionWhenArgument
8.3.16.17 TriggerKind
Description
General Classes
None.
Literal Values
after
Indicates a relative time trigger, corresponding to the TriggerAfter Function from the Triggers model in the
Kernel Semantic Library.
at
Indicates an absolute time trigger, corresponding to the TriggerAt Function from the Triggers model in the
Kernel Semantic Library.
when
Indicates a change trigger, corresponding to the TriggerWhen Function from the Triggers model in the Kernel
Semantic Library.
Description
General Classes
LoopActionUsage
Attributes
The Expression whose result, if false, determines that the bodyAction should continue to be performed. It is the
(optional) third owned parameter of the WhileLoopActionUsage.
/whileArgument : Expression
The Expression whose result, if true, determines that the bodyAction should continue to be performed. It is the
first owned parameter of the WhileLoopActionUsage.
Operations
None.
Constraints
checkWhileLoopActionUsageSpecialization
specializesFromLibrary('Actions::whileLoopActions')
checkWhileLoopActionUsageSubactionSpecialization
A composite WhileLoopActionUsage that is a subaction usage must directly or indirectly specialize the
ActionUsage Actions::Action::whileLoops from the Systems Model Library.
isSubactionUsage() implies
specializesFromLibrary('Actions::Action::whileLoops')
deriveWhileLoopActionUsageUntilArgument
The whileArgument of a WhileLoopActionUsage is its third input parameter, which, if it exists, must be an
Expression.
untilArgument =
let parameter : Feature = inputParameter(3) in
if parameter <> null and parameter.oclIsKindOf(Expression) then
parameter.oclAsType(Expression)
else
deriveWhileLoopActionUsageWhileArgument
The whileArgument of a WhileLoopActionUsage is its first input parameter, which must be an Expression.
whileArgument =
let parameter : Feature = inputParameter(1) in
if parameter <> null and parameter.oclIsKindOf(Expression) then
parameter.oclAsType(Expression)
else
null
endif
validateWhileLoopActionUsage
inputParameters()->size() >= 2
{subsets actionOwningDefinition}
+/stateOwningDefinition 0..1
+/stateOwningUsage
Definition Usage
0..1
{redefines
actionOwningUsage}
OccurrenceDefinition OccurrenceUsage
+/entryAction +/entryAction
Behavior ActionDefinition ActionUsage
0..1 0..1
+/doAction +/doAction
+/stateDefinition 0..*
{redefines actionDefinition, 0..1 0..1
ordered} +/exitAction +/exitAction
0..1 0..1
+/activeStateDefintion +/activeState
0..* 0..*
+/enteredState
+/exitedStateDefinition
0..*
0..*
+/featuringStateDefinition +/state +/nestedState
«enumeration» «enumeration»
StateSubactionKind TransitionFeatureKind
entry StateSubactionMembership TransitionFeatureMembership trigger
do guard
exit +kind : StateSubactionKind +kind : TransitionFeatureKind effect
ActionUsage Step
+/exhibitedState
PerformActionUsage StateUsage
1
{redefines performedAction}
+/exhibitingState
ExhibitStateUsage
0..*
{subsets performingAction}
+/source
ActionUsage 1
+/target
1
+/effectAction
0..*
{subsets feature}
Description
General Classes
PerformActionUsage
StateUsage
Attributes
Operations
Constraints
checkExhibitStateUsageSpecialization
validateExhibitStateUsageReference
8.3.17.3 StateSubactionKind
Description
General Classes
None.
Literal Values
do
entry
exit
8.3.17.4 StateSubactionMembership
Description
General Classes
FeatureMembership
kind : StateSubactionKind
Operations
None.
Constraints
validateStateSubactionMembershipOwningType
owningType.oclIsKindOf(StateDefinition) or
owningType.oclIsKindOf(StateUsage)
8.3.17.5 StateDefinition
Description
A StateDefinition is the Definition of the Behavior of a system or part of a system in a certain state
condition.
General Classes
ActionDefinition
Attributes
The ActionUsage of this StateDefinition to be performed while in the state defined by the
StateDefinition. It is the owned ActionUsage related to the StateDefinition by a
StateSubactionMembership with kind = do.
The ActionUsage of this StateDefinition to be performed on entry to the state defined by the
StateDefinition. It is the owned ActionUsage related to the StateDefinition by a
StateSubactionMembership with kind = entry.
The ActionUsage of this StateDefinition to be performed on exit to the state defined by the
StateDefinition. It is the owned ActionUsage related to the StateDefinition by a
StateSubactionMembership with kind = exit.
Whether the ownedStates of this StateDefinition are to all be performed in parallel. If true, none of the
ownedActions (which includes ownedStates) may have any incoming or outgoing Transitions. If false, only
one ownedState may be performed at a time.
The StateUsages, which are actions in the StateDefinition, that specify the discrete states in the behavior
defined by the StateDefinition.
Operations
None.
Constraints
checkStateDefinitionSpecialization
specializesFromLibrary('States::StateAction')
deriveStateDefinitionDoAction
The doAction of a StateDefinition is the action of the owned StateSubactionMembership with kind =
do.
doAction =
let doMemberships : Sequence(StateSubactionMembership) =
ownedMembership->
selectByKind(StateSubactionMembership)->
select(kind = StateSubactionKind::do) in
if doMemberships->isEmpty() then null
else doMemberships->at(1)
endif
deriveStateDefinitionEntryAction
entryAction =
let entryMemberships : Sequence(StateSubactionMembership) =
ownedMembership->
selectByKind(StateSubactionMembership)->
select(kind = StateSubactionKind::entry) in
if entryMemberships->isEmpty() then null
else entryMemberships->at(1)
endif
deriveStateDefinitionExitAction
The exitAction of a StateDefinition is the action of the owned StateSubactionMembership with kind
= exit .
deriveStateDefinitionState
The states of a StateDefinition are those of its actions that are StateUsages.
state = action->selectByKind(StateUsage)
validateStateDefinitionParallelSubactions
If a StateDefinition is parallel, then its ownedActions (which includes its ownedStates) must not have any
incomingTransitions or outgoingTransitions.
isParallel implies
ownedAction.incomingTransition->isEmpty() and
ownedAction.outgoingTransition->isEmpty()
validateStateDefinitionStateSubactionKind
A StateDefinition must not have more than one owned StateSubactionMembership of each kind.
ownedMembership->
selectByKind(StateSubactionMembership)->
isUnique(kind)
8.3.17.6 StateUsage
Description
A StateUsage is an ActionUsage that is nominally the Usage of a StateDefinition. However, other kinds of
kernel Behaviors are also allowed as types, to permit use of Behaviors
General Classes
ActionUsage
Attributes
The ActionUsage of this StateUsage to be performed while in the state defined by the StateDefinition. It is
the owned ActionUsage related to the StateUsage by a StateSubactionMembership with kind = do.
The ActionUsage of this StateUsage to be performed on exit to the state defined by the StateDefinition. It is
the owned ActionUsage related to the StateUsage by a StateSubactionMembership with kind = exit.
isParallel : Boolean
Whether the nestedStates of this StateUsage are to all be performed in parallel. If true, none of the
nestedActions (which include nestedStates) may have any incoming or outgoing Transitions. If false, only
one nestedState may be performed at a time.
The Behaviors that are the types of this StateUsage. Nominally, these would be StateDefinitions, but
kernel Behaviors are also allowed, to permit use of Behaviors from the Kernel Model Libraries.
Operations
Check if this StateUsage is composite and has an owningType that is a StateDefinition or StateUsage with
the given value of isParallel, but is not an entryAction, doAction, or exitAction. If so, then it represents a
StateAction that is a substate or exclusiveState (for isParallel = false) of another StateAction.
Constraints
checkStateUsageExclusiveStateSpecialization
A StateUsage that is a substate usage with a non-parallel owning StateDefinition or StateUsage must
directly or indirectly specialize the StateUsage States::StateAction::exclusiveStates from the Systems
Model Library.
isSubstateUsage(false) implies
specializesFromLibrary('States::StateAction::exclusiveStates')
checkStateUsageSpecialization
A StateUsage must directly or indirectly specialize the StateUsage States::stateActions from the Systems
Model Library.
specializesFromLibrary('States::stateActions')
checkStateUsageSubstateSpecialization
A StateUsage that is a substate usage with a owning StateDefinition or StateUsage that is parallel must
directly or indirectly specialize the StateUsage States::StateAction::substates from the Systems Model
Library.
deriveStateUsageDoAction
The doAction of a StateUsage is the action of the owned StateSubactionMembership with kind = do.
doAction =
let doMemberships : Sequence(StateSubactionMembership) =
ownedMembership->
selectByKind(StateSubactionMembership)->
select(kind = StateSubactionKind::do) in
if doMemberships->isEmpty() then null
else doMemberships->at(1)
endif
deriveStateUsageEntryAction
The entryAction of a StateUsage is the action of the owned StateSubactionMembership with kind =
entry.
entryAction =
let entryMemberships : Sequence(StateSubactionMembership) =
ownedMembership->
selectByKind(StateSubactionMembership)->
select(kind = StateSubactionKind::entry) in
if entryMemberships->isEmpty() then null
else entryMemberships->at(1)
endif
deriveStateUsageExitAction
The exitAction of a StateUsage is the action of the owned StateSubactionMembership with kind =
exit .
exitAction =
let exitMemberships : Sequence(StateSubactionMembership) =
ownedMembership->
selectByKind(StateSubactionMembership)->
select(kind = StateSubactionKind::exit) in
if exitMemberships->isEmpty() then null
else exitMemberships->at(1)
endif
validateStateUsageParallelSubactions
If a StateUsage is parallel, then its nestedActions (which includes nestedStates) must not have any
incomingTransitions or outgoingTransitions.
isParallel implies
nestedAction.incomingTransition->isEmpty() and
nestedAction.outgoingTransition->isEmpty()
validateStateUsageStateSubactionKind
A StateUsage must not have more than one owned StateSubactionMembership of each kind.
ownedMembership->
selectByKind(StateSubactionMembership)->
isUnique(kind)
Description
General Classes
None.
Literal Values
effect
guard
trigger
8.3.17.8 TransitionFeatureMembership
Description
General Classes
FeatureMembership
Attributes
kind : TransitionFeatureKind
Operations
None.
Constraints
validateTransitionFeatureMembershipEffectAction
If the kind of a TransitionUsage is effect, then its transitionFeature must be a kind of ActionUsage.
validateTransitionFeatureMembershipGuardExpression
If the kind of a TransitionUsage is guard, then its transitionFeature must be a kind of Expression
whose result is a Boolean value.
validateTransitionFeatureMembershipOwningType
owningType.oclIsKindOf(TransitionUsage)
validateTransitionFeatureMembershipTriggerAction
8.3.17.9 TransitionUsage
Description
General Classes
ActionUsage
Attributes
The ActionUsages that define the effects of this TransitionUsage, which are the ownedFeatures of the
TransitionUsage related to it by TransitionFeatureMemberships with kind = effect, which must all be
ActionUsages.
/source : ActionUsage
The source ActionUsage of this TransitionUsage, which becomes the source of the succession for the
TransitionUsage.
The Succession that is the ownedFeature of this TransitionUsage, which, if the TransitionUsage is
triggered, asserts the temporal ordering of the source and target.
/target : ActionUsage
The target ActionUsage of this TransitionUsage, which is the targetFeature of the succession
for the TransitionUsage.
The AcceptActionUsages that define the triggers of this TransitionUsage, which are the ownedFeatures of
the TransitionUsage related to it by TransitionFeatureMemberships with kind = trigger, which must
all be AcceptActionUsages.
Operations
Constraints
checkTransitionUsageActionSpecialization
checkTransitionUsagePayloadSpecialization
If a TransitionUsage has a triggerAction, then the payload parameter of the TransitionUsage subsets
the Feature chain of the triggerAction and its payloadParameter.
triggerAction->notEmpty() implies
let payloadParameter : Feature = inputParameter(2) in
checkTransitionUsageSourceBindingConnector
A TransitionUsage must have an ownedMember that is a BindingConnector between its source and its first
input parameter (which redefines Actions::TransitionAction::transitionLinkSource).
ownedMember->selectByKind(BindingConnector)->exists(b |
b.relatedFeatures->includes(source) and
b.relatedFeatures->includes(inputParameter(1)))
checkTransitionUsageSpecialization
specializesFromLibrary('Actions::transitionActions')
checkTransitionUsageStateSpecialization
checkTransitionUsageSuccessionBindingConnector
A TransitionUsage must have an ownedMember that is a BindingConnector between its succession and the
inherited Feature TransitionPerformances::TransitionPerformance::transitionLink.
ownedMember->selectByKind(BindingConnector)->exists(b |
b.relatedFeatures->includes(succession) and
b.relatedFeatures->includes(resolveGlobal(
'TransitionPerformances::TransitionPerformance::transitionLink')))
checkTransitionUsageSuccessionSourceSpecialization
The sourceFeature of the succession of a TransitionUsage must be the source of the TransitionUsage
(i.e., the first connectorEnd of the succession must have a ReferenceSubsetting Relationship with the
source).
succession.sourceFeature = source
checkTransitionUsageTransitionFeatureSpecialization
triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and
guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and
effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect'))
deriveTransitionUsageEffectAction
triggerAction = ownedFeatureMembership->
selectByKind(TransitionFeatureMembership)->
select(kind = TransitionFeatureKind::trigger).transitionFeatures->
selectByKind(AcceptActionUsage)
deriveTransitionUsageGuardExpression
guardExpression = ownedFeatureMembership->
selectByKind(TransitionFeatureMembership)->
select(kind = TransitionFeatureKind::trigger).transitionFeature->
selectByKind(Expression)
deriveTransitionUsageSource
The source of a TransitionUsage is given by the memberElement of its first ownedMembership, which must
be an ActionUsage.
source =
if ownedMembership->isEmpty() then null
else
let member : Element =
ownedMembership->at(1).memberElement in
if not member.oclIsKindOf(ActionUsage) then null
else member.oclAsKindOf(ActionUsage)
endif
endif
deriveTransitionUsageSuccession
succession = ownedMember->selectByKind(Succession)->at(1)
deriveTransitionUsageTarget
The target of a TransitionUsage is given by the targetFeature of its succession, which must be an
ActionUsage.
target =
if succession.targetFeature->isEmpty() then null
else
let targetFeature : Feature =
succession.targetFeature->at(1) in
if not targetFeature.oclIsKindOf(ActionUsage) then null
else targetFeature.oclAsType(ActionUsage)
endif
endif
deriveTransitionUsageTriggerAction
triggerAction = ownedFeatureMembership->
selectByKind(TransitionFeatureMembership)->
select(kind = TransitionFeatureKind::trigger).transitionFeature->
selectByKind(AcceptActionUsage)
validateTransitionUsageParameters
A TransitionUsage must have at least one owned input parameter and, if it has a triggerAction, it must
have at least two.
if triggerAction->isEmpty() then
inputParameters()->size() >= 1
else
inputParameters()->size() >= 2
endif
validateTransitionUsageSuccession
+/calculationOwningDefinition +/calculationOwningUsage
Definition Usage
0..1 0..1
{subsets actionOwningDefinition} {subsets
actionOwningUsage}
OccurrenceDefinition OccurrenceUsage
ActionDefinition ActionUsage
+/ownedCalculation
CalculationUsage
0..*
{subsets ownedAction, ordered} +modelLevelEvaluable( visited : Feature [0..*] ) : Boolean{redefines modelLevelEvaluable}
+/calculation +/nestedCalculation
CalculationDefinition +/featuringCalculationDefinition
0..* 0..* 0..*
{subsets computedFunction, {subsets action, subsets expression, {subsets nestedAction,
subsets featuringActionDefinition} ordered} ordered}
+/definedCalculation
0..*
{subsets definedAction,
subsets typedExpression}
Description
General Classes
ActionDefinition
Function
Attributes
Operations
None.
Constraints
checkCalculationDefinitionSpecialization
specializesFromLibrary('Calculations::Calculation')
deriveCalculationUsageCalculation
The calculations of a CalculationDefinition are those of its actions that are CalculationUsages.
calculation = action->selectByKind(CalculationUsage)
8.3.18.3 CalculationUsage
Description
General Classes
Expression
ActionUsage
Attributes
The Function that is the type of this CalculationUsage. Nominally, this would be a CalculationDefinition,
but a kernel Function is also allowed, to permit use of Functions from the Kernel Model Libraries.
Operations
body: false
Constraints
checkCalculationUsageSpecialization
specializesFromLibrary('Calculations::calculations')
checkCalculationUsageSubcalculationSpecialization
+/constraintOwningDefinition +/constraintOwningUsage
Definition Usage
0..1 0..1
{subsets {subsets
occurrenceOwningDefinition} occurrenceOwningUsage}
OccurrenceDefinition OccurrenceUsage
+/assertedConstraint
ConstraintUsage
1
0..* AssertConstraintUsage
+/constraintAssertion
Invariant
Description
General Classes
ConstraintUsage
Invariant
Attributes
/assertedConstraint : ConstraintUsage
Operations
None.
Constraints
checkAssertConstraintUsageSpecialization
if isNegated then
specializesFromLibrary('Constraints::negatedConstraints')
else
specializesFromLibrary('Constraints::assertedConstraints')
endif
deriveAssertConstraintUsageAssertedConstraint
assertedConstraint =
if ownedReferenceSubsetting = null then self
else ownedReferenceSubsetting.referencedFeature.oclAsType(ConstraintUsage)
endif
validateAssertConstraintUsageReference
8.3.19.3 ConstraintDefinition
Description
General Classes
Predicate
OccurrenceDefinition
Attributes
None.
Operations
None.
Constraints
checkConstraintDefinitionSpecialization
specializesFromLibrary('Constraints::ConstraintCheck')
8.3.19.4 ConstraintUsage
Description
General Classes
OccurrenceUsage
BooleanExpression
Attributes
The (single) Predicate that is the type of this ConstraintUsage. Nominally, this will be a
ConstraintDefinition, but other kinds of Predicates are also allowed, to permit use of Predicates from
the Kernel Model Libraries.
Operations
body: false
Constraints
checkConstraintUsageCheckedConstraintSpecialization
checkConstraintUsageRequirementConstraintSpecialization
checkConstraintUsageSpecialization
specializesFromLibrary('Constraints::constraintChecks')
OccurrenceUsage
OccurrenceDefinition
+/requiredConstraint +/assumedConstraint
{subsets ownedFeature, ordered}
ConstraintDefinition ConstraintUsage
0..*
0..*
{subsets ownedFeature,
ordered}
+/assumedConstraint {subsets ownedFeature, ordered}
+/requiredConstraint
0..* 0..*
+/requiringRequirementDefinition {subsets ownedFeature, +/requiringRequirement
ordered}
RequirementDefinition RequirementUsage 0..1 {subsets owningType}
0..1
+/assumingRequirement
+reqId : String [0..1]{redefines declaredShortName} {subsets owningType} +reqId : String [0..1]{redefines declaredShortName}
+/text : String [0..*] +/assumingRequirementDefinition +/text : String [0..*]
0..1 {subsets owningType}
+/nestedRequirement
0..1
{subsets owningType} 0..* {subsets nestedConstraint, ordered}
0..1 0..1
{subsets parameteredStep, {subsets parameteredStep,
subsets partOwningUsage} subsets partOwningUsage}
+/actorOwningRequirementDefinition 0..1 0..1 +/subjectOwningRequirementDefinition
+/subjectOwningRequirement 0..1 0..1 +actorOwningRequirement
{subsets parameteredBehavior, {subsets owningDefinition,
{subsets owningUsage, {subsets parameteredStep,
subsets partOwningDefinition} subsets parameteredBehavior}
subsets parameteredStep} subsets partOwningUsage}
+/subjectParameter +/subjectParameter
Usage
1 1
{subsets parameter, {subsets parameter,
subsets usage} subsets usage}
+/actorParameter +/actorParameter
PartUsage
0..* 0..*
{subsets parameter, {subsets parameter, subsets
subsets usage, ordered} usage, ordered}
+/stakeholderParameter +/stakeholderParameter
0..* 0..*
{subsets parameter, {subsets parameter, subsets
subsets usage, ordered} usage, ordered}
+/framedConcern +/framedConcern
ConcernUsage
0..* 0..*
{subsets requiredConstraint, ordered} {subsets requiredConstraint, ordered}
{redefines assertedConstraint}
+/satisfiedRequirement
RequirementUsage AssertConstraintUsage
1
0..*
SatisfyRequirementUsage
+/requirementSatisfaction
{subsets constraintAssertion}
+/satisfiedRequirement 0..*
+/satisfyingFeature 1
Feature
OccurrenceDefinition OccurrenceUsage
ConstraintDefinition ConstraintUsage
RequirementDefinition RequirementUsage
+/ownedConcern
ConcernUsage
0..*
{subsets ownedRequirement} +/nestedConcern
+/concernDefinition +/definedConcern 0..*
ConcernDefinition
0..1 0..1 {subsets nestedRequirement}
{redefines requirementDefinition} {subsets definedRequirement}
FeatureMembership
+/requirementConstraintMembership
+/ownedConstraint
«enumeration» RequirementConstraintMembership 0..1 1 ConstraintUsage
RequirementConstraintKind +kind : RequirementConstraintKind {subsets {redefines
assumption owningFeatureMembership}
+/referencingConstraintMembership ownedMemberFeature}
requirement +/referencedConstraint
0..* 1
RequirementUsage
+/framedConstraintMembership
+/ownedConcern
FramedConcernMembership 0..1 1 ConcernUsage
+kind : RequirementConstraintKind = requirement{redefines kind} {subsets {redefines
requirementConstraintMembership}
+/referencingConcernMembership ownedConstraint}
+/referencedConcern
0..* 1
{subsets {redefines
referencingConstraintMembership} referencedConstraint}
{redefines {redefines
ownedMemberParameter} ownedMemberParameter}
+/ownedSubjectParameter 1 +/ownedActorParameter 1
+/ownedStakeholderParameter
Usage PartUsage
1
{redefines
ownedMemberParameter}
Description
General Classes
ParameterMembership
Attributes
Operations
None.
Constraints
validateActorMembershipOwningType
owningType.oclIsKindOf(RequirementUsage) or
owningType.oclIsKindOf(RequirementDefinition) or
owningType.oclIsKindOf(CaseDefinition) or
owningType.oclIsKindOf(CaseUsage)
8.3.20.3 ConcernDefinition
Description
General Classes
RequirementDefinition
Attributes
None.
Operations
None.
Constraints
checkConcernDefinitionSpecialization
specializesFromLibrary('Requirements::ConcernCheck')
8.3.20.4 ConcernUsage
Description
General Classes
RequirementUsage
Attributes
Operations
None.
Constraints
checkConcernUsageFramedConcernSpecialization
If a ConcernUsage is owned via a FramedConcernMembership, then it must directly or indirectly specialize the
ConcernUsage Requirements::RequirementCheck::concerns from the Systems Model Library.
checkConcernUsageSpecialization
specializesFromLibrary('Requirements::concernChecks')
8.3.20.5 FramedConcernMembership
Description
General Classes
RequirementConstraintMembership
Attributes
Operations
None.
Constraints
validateFramedConcernMembershipConstraintKind
kind = RequirementConstraintKind::requirement
8.3.20.6 RequirementConstraintKind
Description
None.
Literal Values
assumption
requirement
8.3.20.7 RequirementConstraintMembership
Description
General Classes
FeatureMembership
Attributes
kind : RequirementConstraintKind
/referencedConstraint : ConstraintUsage
Operations
None.
Constraints
deriveRequirementConstraintMembershipReferencedConstraint
validateRequirementConstraintMembershipIsComposite
ownedConstraint.isComposite
validateRequirementConstraintMembershipOwningType
owningType.oclIsKindOf(RequirementDefinition) or
owningType.oclIsKindOf(RequirementUsage)
8.3.20.8 RequirementDefinition
Description
General Classes
ConstraintDefinition
Attributes
The parameters of this RequirementDefinition that represent actors involved in the requirement.
The owned ConstraintUsages that represent assumptions of this RequirementDefinition, which are the
ownedConstraints of the RequirementConstraintMemberships of the RequirementDefinition with
kind = assumption.
The ConcernUsages framed by this RequirementDefinition, which are the ownedConcerns of all
FramedConcernMemberships of the RequirementDefinition.
An optional modeler-specified identifier for this RequirementDefinition (used, e.g., to link it to an original
requirement text in some source document), which is the declaredShortName for the
RequirementDefinition.
The owned ConstraintUsages that represent requirements of this RequirementDefinition, derived as the
ownedConstraints of the RequirementConstraintMemberships of the RequirementDefinition with
kind = requirement.
An optional textual statement of the requirement represented by this RequirementDefinition, derived from the
bodies of the documentation of the RequirementDefinition.
Operations
None.
Constraints
checkRequirementDefinitionSpecialization
specializesFromLibrary('Requirements::RequirementCheck')
deriveRequirementDefinitionActorParameter
actorParameter = featureMembership->
selectByKind(ActorMembership).
ownedActorParameter
deriveRequirementDefinitionAssumedConstraint
assumedConstraint = ownedFeatureMembership->
selectByKind(RequirementConstraintMembership)->
select(kind = RequirementConstraintKind::assumption).
ownedConstraint
deriveRequirementDefinitionFramedConcern
deriveRequirementDefinitionRequiredConstraint
requiredConstraint = ownedFeatureMembership->
selectByKind(RequirementConstraintMembership)->
select(kind = RequirementConstraintKind::requirement).
ownedConstraint
deriveRequirementDefinitionStakeholderParameter
stakeholderParameter = featureMembership->
selectByKind(StakholderMembership).
ownedStakeholderParameter
deriveRequirementDefinitionSubjectParameter
subjectParameter =
let subjects : OrderedSet(SubjectMembership) =
featureMembership->selectByKind(SubjectMembership) in
if subjects->isEmpty() then null
else subjects->first().ownedSubjectParameter
endif
deriveRequirementDefinitionText
text = documentation.body
validateRequirementDefinitionOnlyOneSubject
featureMembership->
selectByKind(SubjectMembership)->
size() <= 1
validateRequirementDefinitionSubjectParameterPosition
8.3.20.9 RequirementUsage
Description
General Classes
ConstraintUsage
Attributes
The parameters of this RequirementUsage that represent actors involved in the requirement.
The owned ConstraintUsages that represent assumptions of this RequirementUsage, derived as the
ownedConstraints of the RequirementConstraintMemberships of the RequirementUsage with kind =
assumption.
The ConcernUsages framed by this RequirementUsage, which are the ownedConcerns of all
FramedConcernMemberships of the RequirementUsage.
An optional modeler-specified identifier for this RequirementUsage (used, e.g., to link it to an original
requirement text in some source document), which is the declaredShortName for the RequirementUsage.
The owned ConstraintUsages that represent requirements of this RequirementUsage, which are the
ownedConstraints of the RequirementConstraintMemberships of the RequirementUsage with kind =
requirement.
The parameters of this RequirementUsage that represent stakeholders for the requirement.
An optional textual statement of the requirement represented by this RequirementUsage, derived from the bodies
of the documentation of the RequirementUsage.
Operations
None.
Constraints
checkRequirementUsageRequirementVerificationSpecialization
checkRequirementUsageSpecialization
specializesFromLibrary('Requirements::requirementChecks')
checkRequirementUsageSubrequirementSpecialization
deriveRequirementUsageActorParameter
actorParameter = featureMembership->
selectByKind(ActorMembership).
ownedActorParameter
deriveRequirementUsageAssumedConstraint
assumedConstraint = ownedFeatureMembership->
selectByKind(RequirementConstraintMembership)->
deriveRequirementUsageFramedConcern
framedConcern = featureMembership->
selectByKind(FramedConcernMembership).
ownedConcern
deriveRequirementUsageRequiredConstraint
requiredConstraint = ownedFeatureMembership->
selectByKind(RequirementConstraintMembership)->
select(kind = RequirementConstraintKind::requirement).
ownedConstraint
deriveRequirementUsageStakeholderParameter
stakeholderParameter = featureMembership->
selectByKind(AStakholderMembership).
ownedStakeholderParameter
deriveRequirementUsageSubjectParameter
subjectParameter =
let subjects : OrderedSet(SubjectMembership) =
featureMembership->selectByKind(SubjectMembership) in
if subjects->isEmpty() then null
else subjects->first().ownedSubjectParameter
endif
deriveRequirementUsageText
The texts of aRequirementUsage are the bodies of the documentation of the RequirementUsage.
text = documentation.body
validateRequirementUsageOnlyOneSubject
featureMembership->
selectByKind(SubjectMembership)->
size() <= 1
validateRequirementUsageSubjectParameterPosition
8.3.20.10 SatisfyRequirementUsage
Description
General Classes
RequirementUsage
AssertConstraintUsage
Attributes
/satisfyingFeature : Feature
The Feature that represents the actual subject that is asserted to satisfy the satisfiedRequirement. The
satisfyingFeature is bound to the subjectParameter of the SatisfyRequirementUsage.
Operations
None.
Constraints
checkSatisfyRequirementUsageBindingConnector
A SatisfyRequirementUsage must have exactly one ownedMember that is a BindingConnector between its
subjectParameter and some Feature other than the subjectParameter.
ownedMember->selectByKind(BindingConnector)->
select(b |
b.relatedElement->includes(subjectParameter) and
b.relatedElement->exists(r | r <> subjectParameter))->
size() = 1
deriveSatisfyRequirementUsageSatisfyingFeature
satisfyingFeature =
let bindings: BindingConnector = ownedMember->
selectByKind(BindingConnector)->
select(b | b.relatedElement->includes(subjectParameter)) in
validateSatisfyRequirementUsageReference
8.3.20.11 SubjectMembership
Description
General Classes
ParameterMembership
Attributes
Operations
None.
Constraints
validateSubjectMembershipOwningType
owningType.oclIsType(RequirementDefinition) or
owningType.oclIsType(RequiremenCaseRequirementDefinition) or
owningType.oclIsType(CaseDefinition) or
owningType.oclIsType(CaseUsage)
8.3.20.12 StakeholderMembership
Description
General Classes
Attributes
Operations
None.
Constraints
validateStakeholderMembershipOwningType
owningType.oclIsKindOf(RequirementUsage) or
owningType.oclIsKindOf(RequirementDefinition)
OccurrenceDefinition OccurrenceUsage
ActionDefinition ActionUsage
CalculationDefinition CalculationUsage
+/ownedCase +/nestedCase
CaseDefinition CaseUsage
+/objectiveOwningCaseDefinition 0..* 0..*
{subsets ownedCalculation, ordered} {subsets nestedCalculation, ordered}
0..1
{subsets owningType} +/caseDefinition +/definedCase +/objectiveOwningCase
0..1 0..* 0..1
{redefines calculationDefinition} {subsets definedCalculation} {subsets
requirementOwningUsage}
+actorOwningCaseDefinition 0..1 0..1 +/subjectOwningCaseDefinition
+subjectOwningCase 0..1 0..1 +/actorOwningCase
{subsets parameteredBehavior, {subsets owningDefinition,
{subsets owningUsage, {subsets parameteredStep,
subsets partOwningDefinition} subsets parameteredBehavior}
subsets parameteredStep} subsets partOwningUsage}
+/subjectParameter +/subjectParameter
Usage
1 1
{subsets parameter, {subsets parameter,
subsets usage} subsets usage}
+/actorParameter +/actorParameter
PartUsage
0..* 0..*
{subsets parameter, {subsets parameter,
subsets usage, ordered} subsets usage, ordered}
+/objectiveRequirement +/objectiveRequirement
RequirementUsage
0..1 0..1
{subsets usage, {subsets
ordered} usage,
ordered}
FeatureMembership
ObjectiveMembership
+/owningObjectiveMembership 0..1
{subsets owningParameterMembership}
{redefines ownedMemberFeature}
+/ownedObjectiveRequirement 1
RequirementUsage
General Classes
CalculationDefinition
Attributes
The parameters of this CaseDefinition that represent actors involved in the case.
Operations
None.
Constraints
checkCaseDefinitionSpecialization
A CaseDefinition must directly or indirectly specialize the base CaseDefinition Cases::Case> from the
Systems Model Library.
specializesFromLibrary('Cases::Case')
deriveCaseDefinitionActorParameter
actorParameter = featureMembership->
selectByKind(ActorMembership).
ownedActorParameter
deriveCaseDefinitionObjectiveRequirement
objectiveRequirement =
let objectives: OrderedSet(RequirementUsage) =
featureMembership->
selectByKind(ObjectiveMembership).
ownedRequirement in
if objectives->isEmpty() then null
deriveCaseDefinitionSubjectParameter
subjectParameter =
let subjectMems : OrderedSet(SubjectMembership) =
featureMembership->selectByKind(SubjectMembership) in
if subjectMems->isEmpty() then null
else subjectMems->first().ownedSubjectParameter
endif
validateCaseDefinitionOnlyOneObjective
featureMembership->
selectByKind(ObjectiveMembership)->
size() <= 1
validateCaseDefinitionOnlyOneSubject
featureMembership->selectByKind(SubjectMembership)->size() <= 1
validateCaseDefinitionSubjectParameterPosition
8.3.21.3 CaseUsage
Description
General Classes
CalculationUsage
Attributes
The parameters of this CaseUsage that represent actors involved in the case.
Operations
None.
Constraints
checkCaseUsageSpecialization
A CaseUsage must directly or indirectly specialize the base CaseUsage Cases::cases from the Systems Model
Library.
specializesFromLibrary('Cases::cases')
checkCaseUsageSubcaseSpecialization
deriveCaseUsageActorParameter
actorParameter = featureMembership->
selectByKind(ActorMembership).
ownedActorParameter
deriveCaseUsageObjectiveRequirement
objectiveRequirement =
let objectives: OrderedSet(RequirementUsage) =
featureMembership->
selectByKind(ObjectiveMembership).
ownedRequirement in
if objectives->isEmpty() then null
else objectives->first().ownedObjectiveRequirement
endif
deriveCaseUsageSubjectParameter
subjectParameter =
let subjects : OrderedSet(SubjectMembership) =
featureMembership->selectByKind(SubjectMembership) in
if subjects->isEmpty() then null
validateCaseUsageOnlyOneObjective
featureMembership->
selectByKind(ObjectiveMembership)->
size() <= 1
validateCaseUsageOnlyOneSubject
featureMembership->
selectByKind(SubjectMembership)->
size() <= 1
validateCaseUsageSubjectParameterPosition
8.3.21.4 ObjectiveMembership
Description
General Classes
FeatureMembership
Attributes
Operations
None.
Constraints
validateObjectiveMembershipIsComposite
ownedObjectiveRequirement.isComposite
validateObjectiveMembershipOwningType
+/analysisCaseOwningDefinition +/analysisCaseOwningUsage
Definition Usage
0..1 0..1
{subsets caseOwningDefinition} {subsets
analysisCaseOwningUsage}
OccurrenceDefinition OccurrenceUsage
ActionDefinition ActionUsage
CalculationDefinition CalculationUsage
CaseDefinition CaseUsage
+/resultExpression +/resultExpression
Expression
0..1 0..1
{subsets expression, {subsets ownedFeature}
subsets ownedFeature}
Description
General Classes
CaseDefinition
Attributes
Operations
None.
Constraints
checkAnalysisCaseDefinitionSpecialization
specializesFromLibrary('AnalysisCases::AnalysisCase')
deriveAnalysisCaseDefinitionResultExpression
resultExpression =
let results : OrderedSet(ResultExpressionMembership) =
featureMembersip->
selectByKind(ResultExpressionMembership) in
if results->isEmpty() then null
else results->first().ownedResultExpression
endif
8.3.22.3 AnalysisCaseUsage
Description
General Classes
CaseUsage
Attributes
Operations
None.
Constraints
specializesFromLibrary('AnalysisCases::analysisCases')
checkAnalysisCaseUsageSubAnalysisCaseSpecialization
deriveAnalysisCaseUsageResultExpression
resultExpression =
let results : OrderedSet(ResultExpressionMembership) =
featureMembersip->
selectByKind(ResultExpressionMembership) in
if results->isEmpty() then null
else results->first().ownedResultExpression
endif
OccurrenceDefinition OccurrenceUsage
ActionDefinition ActionUsage
CalculationDefinition CalculationUsage
CaseDefinition CaseUsage
VerificationCaseUsage
+/ownedVerificationCase
0..*
+/nestedVerificationCase
{subsets ownedCase, ordered}
0..*
+/verificationCaseDefinition +/definedVerificationCase {subsets nestedCase, ordered}
VerificationCaseDefinition
0..1 0..*
+verifyingCaseDefinition 0..* {subsets caseDefinition} {subsets definedCase}
0..* +/verifyingCase
+/verifiedRequirement +/verifiedRequirement
RequirementUsage
0..* 0..*
{ordered} {ordered}
RequirementConstraintMembership
RequirementVerificationMembership +/requirementVerification
+kind : RequirementConstraintKind = requirement{redefines kind} 0..*
{subsets
+/requirementVerificationMembership 0..1 referencingConstraintMembership}
{subsets requirementConstraintMembership}
{redefines ownedConstraint}
+/ownedRequirement 1
+/verifiedRequirement
RequirementUsage
1
{redefines referencedConstraint}
Description
General Classes
RequirementConstraintMembership
Attributes
Operations
None.
Constraints
validateRequirementVerificationMembershipKind
kind = RequirementConstraintKind::requirement
validateRequirementVerificationMembershipOwningType
owningType.oclIsKindOf(RequirementUsage) and
owningType.owningFeatureMembership <> null and
owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership)
8.3.23.3 VerificationCaseDefinition
Description
General Classes
CaseDefinition
Operations
None.
Constraints
checkVerificationCaseSpecialization
specializesFromLibrary('VerificationCases::VerificationCase')
deriveVerificationCaseDefinitionVerifiedRequirement
verifiedRequirement =
if objectiveRequirement = null then OrderedSet{}
else
objectiveRequirement.featureMembership->
selectByKind(RequirementVerificationMembership).
verifiedRequirement->asOrderedSet()
endif
8.3.23.4 VerificationCaseUsage
Description
General Classes
CaseUsage
Attributes
Operations
Constraints
checkVerificationCaseUsageSpecialization
specializesFromLibrary('VerificationCases::verificationCases')
checkVerificationCaseUsageSubVerificationCaseSpecialization
deriveVerificationCaseUsageVerifiedRequirement
verifiedRequirement =
if objectiveRequirement = null then OrderedSet{}
else
objectiveRequirement.featureMembership->
selectByKind(RequirementVerificationMembership).
verifiedRequirement->asOrderedSet()
endif
ActionDefinition ActionUsage
CalculationDefinition CalculationUsage
CaseDefinition CaseUsage
+/nestedUseCase
+/ownedUseCase
UseCaseDefinition UseCaseUsage
0..* 0..*
{subsets ownedCase, ordered} {subsets nestedCase, ordered}
+/includingUseCaseDefinition +/includedUseCase
+/includedUseCase
0..* 0..*
0..*
{ordered}
{ordered}
+/useCaseDefinition +/definedUseCase +/includingUseCase
0..1 0..*
0..*
{redefines caseDefinition} {subsets definedCase}
+/useCaseIncluded
PerformActionUsage UseCaseUsage
1
{redefines performedAction}
+/useCaseInclusion
IncludeUseCaseUsage
0..*
{subsets performingAction}
Description
General Classes
UseCaseUsage
PerformActionUsage
Operations
None.
Constraints
checkIncludeUseCaseSpecialization
validateIncludeUseCaseUsageReference
8.3.24.3 UseCaseDefinition
Description
General Classes
CaseDefinition
Attributes
The UseCaseUsages that are included by this UseCaseDefinition, which are the useCaseIncludeds of the
IncludeUseCaseUsages owned by this UseCaseDefinition.
Operations
None.
Constraints
specializesFromLibrary('UseCases::UseCase')
deriveUseCaseDefinitionIncludedUseCase
includedUseCase = ownedUseCase->
selectByKind(IncludeUseCaseUsage).
useCaseIncluded
8.3.24.4 UseCaseUsage
Description
General Classes
CaseUsage
Attributes
The UseCaseUsages that are included by this UseCaseUse, which are the useCaseIncludeds of the
IncludeUseCaseUsages owned by this UseCaseUsage.
Operations
None.
Constraints
checkUseCaseUsageSpecialization
A UseCaseUsage must directly or indirectly specializes the base UseCaseUsage UseCases::useCases from the
Systems Model Library.
specializesFromLibrary('UseCases::useCases')
checkUseCaseUsageSubUseCaseSpecialization
deriveUseCaseUsageIncludedUseCase
includedUseCase = ownedUseCase->
selectByKind(IncludeUseCaseUsage).
useCaseIncluded
+/viewOwningDefinition +/viewOwningUsage
Definition Usage
0..1 0..1
{subsets partOwningDefinition} {subsets partOwningUsage}
OccurrenceDefinition OccurrenceUsage
ItemDefinition ItemUsage
PartDefinition PartUsage
+/viewDefinition +/definedView
0..1 0..*
{redefines partDefinition} {subsets definedPart} +/exposedElement
+/featuringView +/view +/exposingView
Element
0..* 0..* 0..* 0..*
{subsets featuringDefinition} {subsets usage, {subsets namespace} {subsets member,
ordered} ordered}
+/owningViewDefinition +/viewCondition +/viewCondition +/owningView
Expression
0..1 0..* 0..* 0..1
{subsets {subsets ownedMember, {subsets ownedMember, {subsets
owningType} ordered} ordered} owningType}
+/satisfiedViewpoint +/satisfiedViewpoint
ViewpointUsage
0..* 0..*
{subsets {subsets nestedRequirement,
ownedRequirement, ordered} ordered}
+/viewRendering +/viewRendering
RenderingUsage
0..1 0..1
OccurrenceDefinition OccurrenceUsage
ConstraintDefinition ConstraintUsage
RequirementDefinition RequirementUsage
+/ownedViewpoint
ViewpointUsage
0..*
{subsets ownedRequirement, ordered}
+/nestedViewpoint
+/viewpointDefinition +/definedViewpoint
ViewpointDefinition 0..*
0..1 0..*
{subsets nestedRequirement, ordered}
+/viewpointDefinitionForStakeholder 0..1 {redefines requirementDefinition} {subsets definedRequirement}
+/viewpointForStakeholder 0..1
+/viewpointStakeholder +/viewpointStakeholder
PartUsage
0..* 0..*
{ordered} {ordered}
+/redenderingOwningDefinition +/renderingOwningUsage
Definition Usage
0..1 0..1
{subsets partOwningDefinition} {subsets partOwningUsage}
OccurrenceDefinition OccurrenceUsage
ItemDefinition ItemUsage
PartDefinition PartUsage
+/ownedRendering
0..* RenderingUsage
{subsets ownedPart, ordered}
RenderingDefinition +/renderingDefinition +/definedRendering +/nestedRendering
0..1 0..* 0..*
{redefines partDefinition} {subsets definedPart} {subsets nestedPart, ordered}
+/featuringRenderingDefinition +/rendering
0..* 0..*
{subsets featuringDefinition} {subsets usage, ordered}
+importedNamespace 1
Expose
+visibility : VisibilityKind = protected{redefines visibility}
+isImportAll : Boolean = true{redefines isImportAll}
MembershipExpose NamespaceExpose
+import
MembershipImport NamespaceImport
0..*
+import 0..*
+importedMembership 1
Membership
FeatureMembership
+/referencingRenderingMembership
ViewRenderingMembership
0..*
+/viewRenderingMembership 0..1
{redefines ownedMemberFeature}
+/ownedRendering 1
+/referencedRendering
RenderingUsage
1
Description
An Expose is an Import of Memberships into a ViewUsage that provide the Elements to be included in a view.
Visibility is always ignored for an Expose (i.e., isImportAll = true).
Import
Attributes
Operations
None.
Constraints
validateExposeIsImportAll
isImportAll
validateExposeOwningNamespace
importOwningNamespace.oclIsType(ViewUsage)
validateExposeVisibility
visibility = VisibilityKind::protected
8.3.25.3 MembershipExpose
Description
General Classes
Expose
MembershipImport
Attributes
None.
Operations
None.
None.
8.3.25.4 NamespaceExpose
Description
General Classes
NamespaceImport
Expose
Attributes
None.
Operations
None.
Constraints
None.
8.3.25.5 RenderingDefinition
Description
A RenderingDefinition is a PartDefinition that defines a specific rendering of the content of a model view
(e.g., symbols, style, layout, etc.).
General Classes
PartDefinition
Attributes
Operations
None.
Constraints
checkRenderingDefinitionSpecialization
deriveRenderingDefinitionRendering
The renderings of a RenderingDefinition are all its usages that are RenderingUsages.
rendering = usages->selectByKind(RenderingUsage)
8.3.25.6 RenderingUsage
Description
A RenderingUsage is the usage of a RenderingDefinition to specify the rendering of a specific model view to
produce a physical view artifact.
General Classes
PartUsage
Attributes
Operations
None.
Constraints
checkRenderingUsageRedefinition
checkRenderingUsageSpecialization
A RenderingUsage must directly or indirectly specialize the base RenderingUsage Views::renderings from
the Systems Model Library.
specializesFromLibrary('Views::renderings')
checkRenderingUsageSubrenderingSpecialization
Description
General Classes
PartDefinition
Attributes
The composite ownedRequirements of this ViewDefinition that are ViewpointUsages for viewpoints
satisfied by the ViewDefinition.
The RenderingUsage to be used to render views defined by this ViewDefinition, which is the
referencedRendering of the ViewRenderingMembership of the ViewDefinition.
Operations
None.
Constraints
checkViewDefinitionSpecialization
A ViewDefinition must directly or indirectly specialize the base ViewDefinition Views::View from the
Systems Model Library.
specializesFromLibrary('Views::View')
deriveViewDefinitionSatisfiedViewpoint
satisfiedViewpoint = ownedRequirement->
selectByKind(ViewpointUsage)->
select(isComposite)
deriveViewDefinitionView
view = usage->selectByKind(ViewUsage)
deriveViewDefinitionViewCondition
viewCondition = ownedMembership->
selectByKind(ElementFilterMembership).
condition
deriveViewDefinitionViewRendering
viewRendering =
let renderings: OrderedSet(ViewRenderingMembership) =
featureMembership->selectByKind(ViewRenderingMembership) in
if renderings->isEmpty() then null
else renderings->first().referencedRendering
endif
validateViewDefinitionOnlyOneViewRendering
featureMembership->
selectByKind(ViewRenderingMembership)->
size() <= 1
8.3.25.8 ViewpointDefinition
Description
General Classes
RequirementDefinition
Attributes
The PartUsages that identify the stakeholders with concerns framed by this ViewpointDefinition, which are
the owned and inherited stakeholderParameters of the framedConcerns of this ViewpointDefinition.
Operations
None.
Constraints
checkViewpointDefinitionSpecialization
specializesFromLibrary('Views::Viewpoint')
deriveViewpointDefinitionViewpointStakeholder
viewpointStakeholder = framedConcern.featureMemberhsip->
selectByKind(StakeholderMembership).
ownedStakeholderParameter
8.3.25.9 ViewpointUsage
Description
General Classes
RequirementUsage
Attributes
The PartUsages that identify the stakeholders with concerns framed by this ViewpointUsage, which are the
owned and inherited stakeholderParameters of the framedConcerns of this ViewpointUsage.
Operations
None.
Constraints
checkViewpointUsageSpecialization
A ViewpointUsage must directly or indirectly specialize the base ViewpointUsage Views::viewpoints from
the Systems Model Library.
specializesFromLibrary('Views::viewpoints')
checkViewpointUsageViewpointSatisfactionSpecialization
deriveViewpointUsageViewpointStakeholder
viewpointStakeholder = framedConcern.featureMemberhsip->
selectByKind(StakeholderMembership).
ownedStakeholderParameter
8.3.25.10 ViewRenderingMembership
Description
General Classes
FeatureMembership
Attributes
The owned RenderingUsage that is either itself the referencedRendering or subsets the
referencedRendering
/referencedRendering : RenderingUsage
Operations
None.
Constraints
deriveVewRenderingMembershipReferencedRendering
referencedRendering =
let reference: ReferenceSubsetting =
ownedRendering.ownedReferenceSubsetting in
if reference = null then ownedRendering
else if not reference.referencedFeature.oclIsKindOf(RenderingUsage) then null
else reference.referencedFeature.oclAsType(RenderingUsage)
endif
validateViewRenderingMembershipOwningType
owningType.oclIsKindOf(ViewDefinition) or
owningType.oclIsKindOf(ViewUsage)
8.3.25.11 ViewUsage
Description
A ViewUsage is a usage of a ViewDefinition to specify the generation of a view of the members of a collection
of exposedNamespaces. The ViewUsage can satisfy more viewpoints than its definition, and it can specialize
the viewRendering specified by its definition.
General Classes
PartUsage
Attributes
The Elements that are exposed by this ViewUsage, which are those memberElements of the imported
Memberships from all the Expose Relationships that meet all the owned and inherited viewConditions.
The nestedRequirements of this ViewUsage that are ViewpointUsages for (additional) viewpoints satisfied by
the ViewUsage.
The RenderingUsage to be used to render views defined by this ViewUsage, which is the
referencedRendering of the ViewRenderingMembership of the ViewUsage.
Operations
Determine whether the given element meets all the owned and inherited viewConditions.
checkViewUsageSpecialization
A ViewUsage must directly or indirectly specialize the base ViewUsage Views::views from the Systems Model
Library.
specializesFromLibrary('Views::views')
checkViewUsageSubviewSpecialization
deriveViewUsageExposedElement
The exposedElements of a ViewUsage are those memberElements of the imported Memberships from all the
Expose Relationships for which the includeAsExposed operation returns true.
exposedElement = ownedImport->selectByKind(Expose).
importedMemberships(Set{}).memberElement->
select(elm | includeAsExposed(elm))->
asOrderedSet()
deriveViewUsageSatisfiedViewpoint
satisfiedViewpoint = ownedRequirement->
selectByKind(ViewpointUsage)->
select(isComposite)
deriveViewUsageViewCondition
viewCondition = ownedMembership->
selectByKind(ElementFilterMembership).
condition
deriveViewUsageViewRendering
viewRendering =
let renderings: OrderedSet(ViewRenderingMembership) =
featureMembership->selectByKind(ViewRenderingMembership) in
if renderings->isEmpty() then null
else renderings->first().referencedRendering
endif
featureMembership->
selectByKind(ViewRenderingMembership)->
size() <= 1
+/metadataOwningDefinition +/metadataOwningUsage
Definition Usage
0..1 0..1
{subsets {subsets
itemOwningDefinition} itemOwningUsage}
OccurrenceDefinition OccurrenceUsage
ItemDefinition ItemUsage
+/ownedMetadata
MetadataDefinition 0..* MetadataUsage
{subsets ownedItem,
+/nestedMetadata
ordered}
0..*
+/metadataDefinition +/definedMetadata {subsets nestedItem,
Metaclass
ordered}
0..1 0..*
{redefines itemDefinition, {subsets definedItem,
redefines metaclass} subsets typedMetadata}
MetadataFeature
Description
General Classes
Metaclass
ItemDefinition
Attributes
None.
Operations
None.
checkMetadataDefinitionSpecialization
specializesFromLibrary('Metadata::MetadataItem')
8.3.26.3 MetadataUsage
Description
A MetadataUsage is a Usage and a MetadataFeature, used to annotate other Elements in a system model with
metadata. As a MetadataFeature, its type must be a Metaclass, which will nominally be a
MetadataDefinition. However, any kernel Metaclass is also allowed, to permit use of Metaclasses from the
Kernel Model Libraries.
General Classes
MetadataFeature
ItemUsage
Attributes
Operations
None.
Constraints
checkMetadataUsageSpecialization
specializesFromLibrary('Metadata::metadataItems')
8.4 Semantics
8.4.1 Semantics Overview
The semantics of constructs in SysML are specified in terms of the constructs defined in KerML supported by reuse
of model elements from the Kernel Semantic Model Library (see [KerML, 9.2]) and the Systems Model Library (see
9.2 ). This is similar to how the KerML Kernel Layer semantics are build on the KerML Core Layer (see [KerML,
8.4.4.1]). The semantic requirements are formalized by semantic constraints included in the SysML abstract syntax
(see also 8.3.1 on the various kinds of constraints in the abstract syntax). Additionally, other semantic constraints
require relationships between elements within a user model necessary for the model to be semantically well formed.
Specifically, there are four categories of semantic constraints used to specify SysML semantics, each dealing with a
different kind of relationship.
A SysML model parsed from the textual or graphical concrete syntax (see 8.2 ) or obtained through model
interchange (see [KerML, Clause 10]) will not necessarily meet the semantic constraints specified for the abstract
syntax. In this case, a tool may insert certain implied Relationships into the model in order to meet the semantic
constraints. In all cases, the semantics of a model are only defined if it meets all semantic and validation constraints
(see 8.3.1 ).
When including implied Relationships for specialization constraints, it is possible that multiple such constraints
may apply to a single Element. For example, a PartDefinition is a kind of ItemDefinition, which is a kind
of OccurrenceDefinition, and there are specialization constraints for all three of these metaclasses, with
corresponding implied Subclassification Relationships. However, simply including all three implied
Subclassification would be redundant, because the Subclassification implied by the
checkPartDefinitionSpecialization constraint will also automatically satisfy the
checkItemDefinitionSpecialization and checkOccurrenceDefinitionSpecialization constraints.
Therefore, in order to avoid redundant Relationships, a tool should observe the following rules when selecting
which Specializations to actually include for a certain constrained Element, out of the set of those implied by
all specialization constraints applicable to the Element:
The following subclauses specify the semantics for each syntactic area of SysML in terms of the semantic
constraints that must be satisfied for various Elements, the pattern of Relationships these imply, and the model
library Elements that are reused to support this. For compactness, the textual notation is used in these subclauses to
present model snippets to illustrate the semantic patterns being discussed. However, it should be understood that,
like the semantic constraints themselves, these semantic patterns are actually defined on the abstract syntax
representation of a model, independent of its textual or graphical concrete syntax representation.
checkItemDefinitionSpecialization Items::Item
checkPartDefinitionSpecialization Parts::Part
checkPortDefinitionSpecialization Ports::Port
checkConnectionDefinitionSpecialization Connections::Connection
checkConnectionDefinitionBinarySpecialization Connections::BinaryConnection
checkFlowConnectionDefinitionSpecialization Connections::MessageConnection
checkInterfaceDefinitionSpecialization Interfaces::Interface
checkInterfaceDefinitionBinarySpecialization Interface::BinaryInterface
checkAllocationDefinitionSpecialization Allocations::Allocation
checkActionDefinitionSpecialization Actions::Action
checkStateDefinitionSpecialization States::StateAction
checkCalculationDefinitionSpecialization Calculations::Calculation
checkConstraintDefinitionSpecialization Constraints::ConstraintCheck
checkRequirementDefinitionSpecialization Requirements::RequirementCheck
checkConcernDefinitionSpecialization Concerns::ConcernCheck
checkCaseDefinitionSpecialization Cases::Case
checkAnalysisCaseDefinitionSpecialization AnalysisCases::AnalysisCase
checkVerificationCaseDefinitionSpecialization VerificationCases::VerificationCase
checkUseCaseDefinitionSpecialization UseCases::UseCase
checkViewDefinitionSpecialization Views::View
checkViewpointDefinitionSpecialization Views::ViewpointCheck
checkRenderingDefinitionSpecialization Views::Rendering
checkMetadataDefinitionSpecialization Views::MetadataItem
Notes
checkAttributeUsageSpecialization Attributes::attributes
Occurrences::Occurrence::
checkEventOccurrenceSpecialization
timeEnclosedOccurrences
checkOccurrenceUsageSuboccurrence Occurrences::Occurrence::
Specialization suboccurrences
checkItemUsageSpecialization Items::items
checkItemUsageSubitemSpecialization Items::Item::subitems
checkPartUsageSpecialization Parts::parts
checkPartUsageSubpartSpecialization Items::Item::subparts
Requirements::Requirement::actors or
checkPartUsageActorSpecialization Cases::Case::actors (depending on the
owningType of the PartUsage)
Requirements::Requirement::
checkPartUsageStakeholderSpecialization
stakeholders
checkPortUsageSpecialization Ports::ports
checkPortSubportSpecialization Ports::Port::subports
checkConnectionUsageSpecialization Connections::connections
checkConnectionUsageBinarySpecialization Connections::binaryConnections
Connections::messageConnections or
Connections::flowConnections (depending on
checkFlowConnectionUsageSpecialization
whether the FlowConnectionUsage has
itemFlowEnds)
checkSuccessionFlowConnectionUsage
Connections::successionFlowConnections
Specialization
checkInterfaceUsageSpecialization Interfaces::interfaces
checkInterfaceUsageBinarySpecialization Interfaces::binaryInterfaces
checkAllocationUsageSpecialization Allocations::allocations
checkActionUsageSpecialization Actions::actions
checkActionUsageSubactionSpecialization Actions::Action::subactions
checkActionUsageOwnedActionSpecialization Parts::Part::ownedActions
checkControlNodeSpecialization Actions::Action::controls
checkJoinNodeSpecialization Actions::Action::joins
checkForkNodeSpecialization Actions::Action::forks
checkMergeNodeSpecialization Actions::Action::merges
checkSendActionUsageSubaction
Actions::Action::sendSubactions
Specialization
checkAcceptActionUsageSpecialization Actions::acceptActions
checkAcceptActionUsageSubaction
Actions::Action::acceptSubctions
Specialization
checkAcceptActionUsageTriggerAction
Actions::TransitionAction::accepter
Specialization
checkAssignmentActionUsageSpecialization Actions::assignmentActions
checkAssignmentActionUsageSubaction
Actions::Action::assignments
Specialization
Actions::ifThenActions or
checkIfActionUsageSpecialization Actions::ifThenElseActions (depending on
whether the IfActionUsage has an elseClause)
checkIfActionUsageSubactionSpecialization Actions::Action::ifSubactions
checkWhileLoopActionUsageSpecialization Actions::whileLoopActions
checkWhileLoopActionUsageSubaction
Actions::Action::whileLoops
Specialization
checkForLoopActionUsageSpecialization Actions::forLoopActions
checkForLoopActionUsageSubaction
Actions::Action::forLoops
Specialization
checkPerformActionUsageSpecialization Parts::Part::performedActions
checkStateUsageSpecialization States::stateActions
checkStateUsageSubstateSpecialization States::State::substates
checkStateUsageExclusiveState
States::State::exclusiveStates
Specialization
checkTransitionUsageActionSpecialization Actions::Action::decisionTransitions
checkTransitionUsageStateSpecialization States::StateAction::stateTransitions
TransitionAction::triggerAction.
checkTransitionUsagePayloadSpecialization payloadParameter (source is
TransitionAction::payload)
checkCalculationUsageSpecialization Calculations::calculations
checkCalculationUsageSubcalculation
Calculations::Calculation::subcalculations
Specialization
checkConstraintUsageSpecialization Constraints::constraintChecks
checkConstraintUsageCheckedConstraint
Items::Item::checkConstraints
Specialization
Requirements::RequirementCheck::assumptions
or
checkConstraintUsageRequirementConstraint Requirements::RequirementCheck::constraints
Specialization (depending on whether the kind of the owning
RequirementConstraintMembership is
assumption or requirement)
checkRequirementUsageSpecialization Requirements::requirementChecks
checkRequirementUsageSubrequirement Requirements::RequirementCheck::
Specialization subrequirement
checkRequirementUsageRequirement VerificationCases::VerificationCase::obj::
VerificationSpecialization requirementVerifications
checkConcernUsageSpecialization Requirements::concernChecks
checkConcernUsageFramedConcern
Requirements::RequirementCheck::concerns
Specialization
checkCaseUsageSpecialization Cases::Cases
checkAnalysisCaseUsageSpecialization AnalysisCases::analysisCases
checkAnalysisCaseUsageSubAnalysisCase AnalysisCases::AnalysisCase::
Specialization subAnalysisCases
checkVerificationCaseUsageSpecialization VerificationCases::verificationCases
checkVerificationCaseUsageSubVerification VerificationCases::VerificationCase::
CaseSpecialization subVerificationCases
checkUseCaseUsageSpecialization UseCases::useCases
checkUseCaseUsageSubUseCaseSpecialization UseCases::UseCase::subUseCases
checkIncludeUseCaseUsageSpecialization UseCases::UseCase::includedUseCases
checkViewUsageSpecialization Views::views
checkViewUsageSubviewSpecialization Views::View::subviews
checkViewpointUsageSpecialization Views::viewpoints
checkViewpointUsageViewpointSatisfaction
Views::View::viewpointSatisfactions
Specialization
checkRenderingUsageSpecialization Views::renderings
checkRenderingUsageSubrendering
Views::Rendering::subrenderings
Specialization
checkMetadataUsageSpecialization Metadata::metadataItems
Notes
1. Unless otherwise indicated, the source of the Subsetting is the Usage to which the constraint applies.
Redefinition
entryAction, doAction, or
exitAction of
checkActionUsageStateAction States::StateAction (depending
The ActionUsage
Redefinition on whether the kind of the owning
StateSubactionMembership is
entry, do, or exit, respectively)
The objectiveRequirement of
each CaseDefinition or
checkRequirementUsage
The RequirementUsage CaseUsage specialized by the
ObjectiveSpecialization
owningType of the
RequirementUsage.
checkRenderingUsage
The RenderingUsage Views::View::viewRendering
Redefinition
TypeFeaturing
BindingConnector
(see Note 1)
The transitionLinkSource
checkTransitionUsageSource The source of the
parameter (first input parameter)
BindingConnector TransitionUsage
of the TransitionUsage
TransitionPerformances::
checkTransitionUsage The succession of the
TransitionPerformance::
SuccessionBindingConnector TransitionUsage
transitionLink
Notes
8.4.2.1 Definitions
8.4.2.2 Usages
A SysML Usage has the semantics of a KerML Feature (see [KerML, 8.4.3.4]). However, a Usage element is
always either instantiated as on of its mode specific subclasses (e.g., AttributeUsage, ItemUsage, etc.), or with
at least one semantic metadata annotation. In the former case, the Usage has the semantics of the more specialized
kind, except that a ReferenceUsage has no additional semantics. In the latter case it has semantics as given by the
base Type(s) from the annotation(s) (see 8.4.22 ).
A Definition or Usage with isVariation = true has additional semantic restrictions. In this case, the
validateDefinitionVariationMembership and validateUsageVariationMembership constraints
require that all the ownedMembers of the Definition or Usage be variant Usages. The
checkUsageVariationDefinitionSpecialization and checkUsageVariationUsageSpecialization
constraints then require that each variant Usage directly or indirectly specialize its owning variation Definition
or Usage.
// KerML
class P specializes Parts::Part {
member feature p1 : P subsets Parts::parts;
member feature p2 : P subsets Parts::parts;
...
}
Note that VariantMemberships are OwningMemberships but not FeatureMemberships, so variant Usages
are ownedMembers but not ownedFeatures of the variation Definition. Similarly, a Usage of the form
variation part p {
variant part p1;
variant part p2;
...
}
// KerML
feature p subsets Parts::parts {
member feature p1 subsets p;
member feature p2 subsets p;
...
}
In addition, the allowable instances of a variation Definition or Usage shall be restricted to values of its
corresponding owned variant Usages. This is the fundamental intent of enumerating the variants in the
variation declaration. Since a variation enumerates in this way a fixed set of allowed variants, it is not valid for a
variation to specialize another variation, since this would imply an inconsistent subsetting of the allowed instances
in the specialized Definition or Usage.
Note. The semantic restriction on the instances of a variation is not currently formally captured in the Systems
semantic model. However, it is required to be enforced by any semantically conformant tool for variability
modeling.
As specified in the Kernel Semantic Library, DataValue is disjoint from Occurrence, which is the base Type of
SysML OccurrenceDefinitions (see 8.4.5 ). This means that an AttributeDefinition cannot specialize an
OccurrenceDefinition (or any of its more specialized kinds, such as ItemDefinition, ActionDefinition
and ConstraintDefinition).
An AttributeUsage is a kind of Usage that is syntactically required to be defined only by DataTypes (including
AttributeDefinitions). The base AttributeUsage Attributes::attributeValues (see 9.2.2.2.2 ) is an
alias for the KerML Feature Base::dataValues (see [KerML, 9.2.2]). The
checkAttributeUsageDataTypeSpecialization constraint requires that an AttributeUsage specialize
Base::dataValues, which is typed by Base::DataValue. AttributeUsages are also syntactically restricted
by the validateAttributeUsageIsReference to be referential (non-composite) and, by the
validateAttributeUsageFeatures constraint to have no composite features.
enum def E {
enum e1;
enum e2;
...
}
is essentially equivalent to
Note, in particular, that this means that the enumeratedValues are not features of the containing
EnumeratedDefinition but, rather, members owned via VariantMemberships. However, other than when
nested in an EnumerationDefinition, an EnumerationUsage is semantically just an AttributeUsage that is
required to be typed by exactly one EnumerationDefinition (syntactically enforced by the 1..1 multiplicity of
EnumerationUsage::enumerationDefinition, see 8.3.8 ).
• checkLifeClassLifeSpecialization requires that it specialize the Class Life from the Kernel
Semantic Library Occurrences (see [KerML, 9.2.4]).
• checkLifeClassOccurrenceSpecialization requires that it specialize its owning
OccurrenceDefinition.
• checkLifeClassMultiplicitySpecialization requires that it have multiplicity zeroOrOne.
• validateLifeClassIsSufficient requires that it have isSufficient = true.
// KerML
class Ind specializes Occurrences::Occurrence {
class all Life specializes Occurrences::Life, Ind {
multiplicity subsets Base::zeroOrOne;
}
}
The Kernel Semantic Library Class Life classifies all Occurrences that are maximal portions, that is, those
Occurrences that are not a portion of any other Occurrence. Every Occurrence is a portion of some Life
(possibly itself), as given by the value of its portionOfLife feature (see [KerML, 9.2.4]). An individual
Occurrence is modeled as the subclass that includes a single Life and all possible portions (in time and space) of
that Life. Colloquially, a Life represents the "identity" of an individual and the totality of its existence in space
and time.
The required Specializations and sufficiency of a LifeClass mean that it is the subclass of all Lives that are
also instances of the owning OccurrenceDefinition. The zeroOrOne multiplicity of the LifeClass then
asserts that the LifeClass has at most a single instance, meaning that there is at most one instance of the owning
OccurrenceDefinition that is a Life. If this instance exists, then all other instances of the
OccurrenceDefinition will be portions of it, and the OccurrenceDefinition will then model exactly a single
individual, as described above. If the instance does not exist, then the extent of OccurrenceDefinition will be
empty, meaning no such individual exits. (The optional multiplicity on a LifeClass thus provides for the
ability to model counterfactual situations in which a certain individual is asserted not to exist.)
An OccurrenceUsage is a kind of Usage that is syntactically required to be defined only by Classes (including
OccurrenceDefinitions). The following specialization constraints apply to an OccurrenceUsage:
// KerML
feature t : Occ subsets Occurrences::occurrences {
// Portioning feature
feature redefines Occurrences::Occurrence::timeSliceOf : Occ {
multiplicity subsets Base::exactlyOne;
}
}
feature s : Occ subsets Occurrences::occurrences {
// Portioning feature
feature redefines Occurrences::Occurrence::snapshotOf : Occ {
multiplicity subsets Base::exactlyOne;
}
}
In the semantic model for Occurrence, the Features timeSliceOf and snapshotOf are the inverses of the
Features timeSlices and snapshots, respectively. The portioningFeatures for t and s, above, therefore,
require that each value of t or s be one of the timeSlices or snapshots of an instance of the defining
OccurrenceDefinition Occ.
occurrence occ1;
occurrence occ2 {
event occurrence evt references occ1;
// Other than having a name, the above is equivalent to
// event occ1;
}
Thus, the values of occ2.evt will be some subset of the Occurrences represented by occ1 that happen within the
lifetime of occ2.
An ItemDefinition is a kind of OccurrenceDefinition and a kind of KerML Structure. As such, all the
general semantic constraints for an OccurrenceDefinition (see 8.4.5 ) and a Structure (see [KerML, 8.4.4.4])
also apply to an ItemDefinition. In addition, the checkItemDefinitionSpecialization constraint requires
that an ItemDefinition specialize the base ItemDefinition Items::Item (see 9.2.3.2.1 ), which subclassifies
the kernel Class Objects::Object (see [KerML, 9.2.5]).
The Item semantic model also includes additional features whose semantics is covered in other subclauses:
• subparts – A subset of subitems and Parts::parts that collects the values of all composite
PartUsages featured by an Item. Covered under Parts Semantics (see 8.4.7 ).
• checkedConstraints – A subset of Constraints::constraintChecks and
Object::ownedPerformances that collects all checks of composite ConstraintUsages featured by
an Item. Covered under Constraints Semantics (see 8.4.15 ).
An ItemUsage is a kind of OccurrenceUsage. As such, all the general semantic constraints for an
OccurrenceUsage (see 8.4.5 ) also apply to an ItemUsage. The following additional specialization constraints
also apply to an ItemUsage:
As a kind of Object, an Item may have a physical extent in three-dimensional space as well as existing over time.
The semantic model for an Item contains a number of specializations of the kernel spatial model (see [KerML, 9.2.4
and 9.2.5]), including the features shape, envelopingShapes, boundingShapes, voids, and isSolid (see
9.2.3.2.1 for details). This provides the basis for the geometric shape model defined in the Geometry Domain
Library (see 9.7 ).
A PartDefinition is a kind of ItemDefinition. As such, all the general semantic constraints for an
ItemDefinition (see 8.4.6 ) also apply to a PartDefinition. In addition, the
checkPartDefinitionSpecialization constraint requires that a PartDefinition specialize the base
PartDefinition Parts::Part (see 9.2.4.2.1 ), which subclassifies Items::Item (see 9.2.3.2.1 ).
The Part semantic model also includes additional features whose semantics is covered in other subclauses:
A PartUsage is a kind of ItemUsage. As such, all the general semantic constraints for an ItemUsage (see 8.4.6 )
also apply to a PartUsage, as well as the following additional specialization constraints:
A PortDefinition is a kind of OccurrenceDefinition and a kind of KerML Structure. As such, all the
general semantic constraints for an OccurrenceDefinition (see 8.4.5 ) and a Structure (see [KerML, 8.4.4.4])
also apply to a PortDefinition. The following additional constraints apply to a PortDefinition:
port def Pd {
// Directed features are always referential
// (ref keyword is optional).
in ref a;
out ref b;
inout ref c;
ref item d;
}
// KerML
struct Pd specializes Ports::Port {
in feature a subsets Base::things;
out feature b subsets Base::things;
inout feature c subsets Base::things;
feature d subsets Items::Item;
The following constraints apply to a PortUsage that is not nested in a PortDefinition or PortUsage:
A PortUsage may have an ownedFeatureTyping that is a ConjugatedPortTyping, in which case the type is
the ConjugatedPortDefinition for the named PortDefinition (see 8.2.2.12 ). Thus, the declaration
port p : ~Pd;
is equivalent to
port p : Pd::'~Pd';
In addition, there are special rules for the semantics of the multiplicity of end Features (see [KerML, 8.4.4.5]).
Note that the relatedFeatures of a ConnectionUsage are determined by the referencedFeatures of its
ends. Therefore, unless the ConnectionUsage is abstract, every end must have an ownedReferenceSubsetting.
bind f1 = f2;
// KerML
connector subsets Links::selfLinks {
end feature thisThing redefines Links::SelfLink::thisThing references f1;
end feature thatThing redefines Links::SelfLink::thatThing references f2;
}
Note that a BindingConnectorAsUsage does not have the semantics of a SysML ConnectionUsage, because a
ConnectionUsage must be defined by AssociationStructures (see 8.4.9.2 ), and Links::selfLink is an
Association but not an AssociationStructure.
A SuccessionAsUsage is a kind of ConnectorAsUsage and a kind of KerML Succession. As such, all the
general semantic constraints for an Usage (see 8.4.2 ) and a Succession (see [KerML, 8.4.4.6.3]) also apply to a
SuccessionAsUsage. In particular, the checkSuccessionSpecialization constraint requires that a
// KerML
connector subsets Occurrences::happensBeforeLinks {
end feature earlierOccurrence references f1
redefines Occurrences::HappensBefore::earlierOccurrence;
end feature laterOccurrence references f2
redefines Occurrences::HappensBefore::laterOccurrence;
}
Note that a SuccessionAsUsage does not have the semantics of a SysML ConnectionUsage, because a
ConnectionUsage must be defined by AssociationStructures (see 8.4.9.2 ), and
Occurrences::HappensBefore is an Association but not an AssociationStructure.
A FlowConnectionDefinition is always binary, with source and target ends corresponding to the
corresponding ends of Transfer. It also inherits MessageConnection::payload, which is a redefinition of
Transfer::item, representing the payload being transferred. These features can be redefined to restrict the
allowed type of the ends connected by a flow and the type of the payload transferred across the flow, as desired.
Note that the source and target ends must be kinds of Occurrences, but that the payload can be anything,
The ends of a MessageConnection identify the Occurrences between which payload values are flowing, but
they do not identify how these values are obtained from the source (the sourceOutput Feature) or to where they
are delivered at the target (the targetInput Feature). In order to restrict the sourceOutput and targetInput
in a FlowConnectionDefinition, the FlowConnectionDefinition can specialize
Connections::FlowConnection (see 9.2.6.2.5 ), which is a MessageConnection that also subclassifies the
kernel Interaction FlowTransfer (see [KerML, 9.2.7]).
// parameters
in redefines Connections::MessageConnection::sourceEvent
references evt1;
in redefines Connections::MessageConnection::targetEvent
Such a FlowConnectionUsage asserts that there is some sourceEvent that occurs to initiate a flow and provide
the payload and some targetEvent that occurs to accept the flow payload, but it does not constrain what the
actually connected source and target Features are. This allows for, e.g., the case in which the sourceEvent is a
SendAction and the targetEvent is an AcceptAction, but the connected source and target Features are
Ports (see also 8.4.12 on the semantics of SendActionUsage and AcceptActionUsage).
is parsed with two ItemFlowEnds (see [KerML, 8.3.4.9]) referencing src and tgt, with nested redefinitions of
src_out and tgt_in (as for a KerML ItemFlow [KerML, 8.4.4.10]), respectively. Since it has ItemFlowEnds,
the checkFlowConnectionUsageSpecification constraint requires it to specialize
Connections::flowConnections. The KerML checkFeatureEndRedefinition and
checkFeatureItemFlowFeatureRedefinition constraints then require both the redefinition of the end
Features (as for a regular ConnectionUsage, see 8.4.9.2 ) and the redefinition of the sourceOutput and
targetInput Features.
// First ItemFlowEnd
end redefines Connections::flowConnections::source references src {
redefines Transfers::Transfer::source::sourceOutput, src_out;
}
// Second ItemFlowEnd
end redefines Connections::flowConnections::target references tgt {
redefines Transfers::Transfer::target::targetInput, tgt_in;
}
}
In this case, the sourceEvent and targetEvent parameters default to the starting and ending snapshots of the
FlowConnection, which are required to occur during the lifetime of the source and target Occurrences,
respectively.
// First ItemFlowEnd
end redefines Connections::flowConnections::source references src {
redefines Transfers::Transfer::source::sourceOutput, src_out;
}
// Second ItemFlowEnd
end redefines Connections::flowConnections::target references tgt {
redefines Transfers::Transfer::target::targetInput, tgt_in;
}
}
An ActionDefinition is a kind of OccurrenceDefinition and a kind of KerML Behavior. As such, all the
general semantic constraints for an OccurrenceDefinition (see 8.4.5 ) and a Behavior (see [KerML, 8.4.4.7.1])
also apply to an ActionDefinition. In addition, the checkActionDefinitionSpecialization constraint
requires that an ActionDefinition specialize the base ActionDefinition Actions::Action (see 9.2.9.2.4 ),
which subclassifies the kernel Behavior Performances::Performance (see [KerML, 9.2.6]). Further, the
KerML checkFeatureParameterRedefinition constraint (see [KerML, 8.4.4.7.1]) requires that any owned
parameters (i.e., directed ownedFeatures) of an ActionDefinition redefine corresponding parameters of
any Behaviors it specializes (including other ActionDefinitions).
The Action semantic model also includes additional features that collect various composite subactions of an
Action:
An ActionUsage is a kind of OccurrenceUsage and a kind of KerML Step. As such, all the general semantic
constraints for an OccurrenceUsage (see 8.4.5 ) and a Step (see [KerML, 8.4.4.7.2]) also apply to an
ActionUsage, as well as the following additional specialization constraints:
action a1 : A1 subsets a {
in ref x redefines A1::x, a::x;
out ref y redefines A2::y, a::y;
}
Semantics of this
Action inherits the kernel Feature Occurrences::Occurrence::this (see [KerML, 9.2.4]). The value for
this Feature is determined in by the semantic model for Object::Object (see [KerML, 9.2.5]) and
Performances::Performance (see [KerML, 9.2.6]), as further specialized for Parts::Part::ownedActions
(see 9.2.4.2.1 ) and Actions::Action::subactions (see 9.2.9.2.4 ). For an Action in a hierarchy of
subactions, the value of this is the top-level Action in the hierarchy (that is, one that is not one of the
subactions of any other Action), unless that top-level Action is itself one of the ownedActions of a Part (or
on of the ownedPerformances of an Item), in which case the value is that Part (or Item).
package Pkg {
action def A specializes Actions::Action {
action b subsets Actions::Action::subactions;
}
action a1 : A[1] subsets Action::actions {
// a1.this == a1
// b.x == a1
}
part p subsets Parts::parts {
action a2: A[1] subsets Parts::Part::ownedActions {
// a2.this == p
// b.this == p
}
}
}
As indicated, the value of this for both the Action a1 and its subaction a1.b will be (the value of) a1, since the
ActionUsage a1 is at "package level", while the value of this for both p.a2 and p.a2.b will be (the value of) p,
since a2 is an ownedAction of p.
The semantics of this are particularly important in the specification of default semantics for SendActionUsages
(see 8.4.12.5 ) and AcceptActionUsages (see 8.4.12.6 ).
For example, consider the following model of a conditional Succession between to ActionUsages:
With implied Relationships included (see 8.2.2.17.3 on the semantic constraints related to a
TransitionUsage), this has the equivalent kernel semantics of:
// KerML
behavior AC specializes Actions::Action {
step a1 subsets Actions::Action::subactions {
out feature test : ScalarValues::Boolean;
}
A ControlNode is a kind of ActionUsage that has no inherent behavior but is used to control other Actions
within a containing Action. All the general semantic constraints of an ActionUsage (see 8.4.12.2 ) also apply to a
ControlNode, as well as the following additional constraints:
Note. Multiplicities are given in a model as MultiplicityRanges which have Expressions for lowerBound
and upperBound. When checking validation constraints such as the above on MultiplicityRanges, the
lowerBound and upperBound Expressions shall be model-level evaluable to the required values for the bounds
(see [KerML, 8.4.4.9]). If the lowerBound is empty, then an upperBound value of 1 is equivalent to multiplicity
1..1. The constraints can also be equivalently satisfied by multiplicities that subset the
MultiplicityRanges ExactlyOne or ZeroOrOne from the Kernel Semantic Library model Base (see [KerML,
9.2.2]).
The ControlNode metaclass is itself abstract, but it has four concrete subclasses representing various specific
ControlNode elements. Each of these places additional constraints on incoming and outgoing Successions, as
appropriate to achieve the specific control constraints required for each kind of element.
Join Nodes
A JoinNode is a kind of ControlNode that represents the joining of control. The following additional constraints
apply to a JoinNode:
The semantics of a JoinNode are entirely a result of the above constraints. Because of the required
multiplicities, for each performance of a JoinNode, every incoming Succession must have a value,
temporally ordering the JoinNode as happening after all the source Occurrences (typically Actions) of the
incoming Successions.
For example, consider the following model of a JoinNode with two incoming Successions and one outgoing
Succession, explicitly showing the required Succession multiplicities:
action def A1 {
action a1;
action a2;
action a3;
}
Fork Nodes
A ForkNode is a kind of ControlNode that represents a forking of control.The following additional constraints
apply to a ForkNode:
The semantics of a ForkNode are entirely a result of the above constraints. Because of the required multiplicities,
for each performance of a ForkNode, every outgoing Succession must have a value, temporally ordering the
ForkNode as happening before all the target Occurrences (typically Actions) of the outcoming Successions.
For example, consider the following model of a ForkNode with two incoming Successions and one outgoing
Succession, explicitly showing the required Succession multiplicities:
action def A2 {
action a1;
action a2;
action a3;
}
A MergeNode is a kind of ControlNode that represents the merging of control. The following additional
constraints apply to a MergeNode.
Since MergePerformance::incomingHBLink has a multiplicity of 1, the result of the above constraints is that,
for any performance of a MergeAction, there must be exactly one incoming Succession that has a value,
representing the incoming "control" that triggers this specific performance of the MergeAction.
For example, consider the following model of a MergeNode with two incoming Successions and one outgoing
Succession, explicitly showing the required Succession multiplicities:
action def A3 {
action a1;
action a2;
action a3;
}
A DecisionNode is a kind of ControlNode that represents a control decision. The following additional
constraints apply to a DecisionNode:
For example, consider the following model of a DecisionNode with one incoming Successions and two
outgoing Successions, explicitly showing the required Succession multiplicities:
action def A4 {
action a1;
action a2;
action a3;
}
action def A5 {
action a1 { out ref x : ScalarValues::Integer; }
action a2;
action a3;
}
Such conditional Successions are actually parsed as TransitionUsages defined by the ActionDefinition
DecisionTransitionAction (see 8.2.2.16.7 ), with a nested Succession. It is this nested Succession that
actually has the DecisionNode as its source, and, therefore, to which the
validateDecisionNodeOutcomingSuccessions constraint applies. See 8.4.12.3 on the semantics of decision
TransitionUsages.
A SendActionUsage is a kind of ActionUsage, so all general semantic constraints for an ActionUsage (see
8.4.12.2 ) also apply to a SendActionUsage, as well as the following additional specialization constraints:
(where all of p, src and tgt are Expressions) is parsed (including implied Specializations) as (see
8.2.2.16.4 ):
SendAction subclassifies the ActionDefinition Actions::Action (see 9.2.9.2.4 ) and the kernel Behavior
Transfers::SendPerformance (see [KerML, 9.2.7]). The semantics of SendPerformance is to initiate a
sentMessage, which is a MessageTransfer (for a SendAction, this will also be a MessageConnection, see
9.2.6.2.7 ) from a given sender. The SendAction::payload parameter (which redefines
SendPerformance::sentItems) provides the values that are transferred.
The sender parameter is mandatory. However, if no explicit value is given for this parameter, it defaults to the
value of this for the SendAction (see 8.4.12.2 on the semantics of this for Actions in general). This is
particularly important when the SendAction is nested in other containing Actions or Parts.
action def AS {
action snd send p to tgt;
}
This is equivalent to
package Sending {
action as1 : AS[1] subsets Action::actions {
// snd.sender == as1
}
part p subsets Parts::parts {
action as2: AS[1] subsets Parts::Part::ownedActions {
// snd.sender == p
}
}
}
the default sender for as1.snd is as1, but the default sender for p.as2.snd is p.
An AcceptActionUsage is a kind of ActionUsage, so all general semantic constraints for an ActionUsage (see
8.4.12.2 ) also apply to an AcceptActionUsage, as well as the following additional specialization constraints:
(where src and tgt are Expressions) is parsed (including implied Specializations) as (see 8.2.2.16.4 ):
The receiver parameter is mandatory. However, if no explicit value is given for this parameter, it defaults to
the value of this for the AcceptAction (see 8.4.12.2 on the semantics of this for Actions in general). This is
particularly important when the AcceptAction is nested in other containing Actions or Parts.
action def AA {
action acpt accept x : T;
}
This is equivalent to
package Accepting {
action aa1 : AA[1] subsets Action::actions {
// acpt.receiver == aa1
}
part p subsets Parts::parts {
action aa2: AA[1] subsets Parts::Part::ownedActions {
// acpt.receiver == p
}
}
}
the default receiver for aa1.acpt is aa1, but the default receiver for p.aa2.accept is p.
action def AT {
action acpt_when accept when boolean_expr;
action acpt_at accept at time_expr;
action acpt_after accept after duration_expr;
}
is equivalent to:
An AssignmentActionUsage has two input parameters for the target Occurrence and the
replacementValues to be assigned. The target has a time slice called startingAt with a nested feature called
accessedFeature. The referent Feature to be assigned by the AssignmentActionUsage is actually parsed
as an alias member of the AssignmentActionUsage (see 8.2.2.16.4 ). The following constraints then apply:
(where tgt and val are Expressions and rfnt is a qualified name or feature chain) is parsed (including implied
Specializations) as
AssignmentAction subclassifies the Actions::Action (see 9.2.9.2.4 ) and the kernel Behavior
ControlPerformances::FeatureWritePerformance (see [KerML, 9.2.9]). The semantics of
FeatureWritePerformance is that, at the time it ends, the accessedFeature of the target Occurrence will
have the given replacementValues.
An IfActionUsage is a kind of ActionUsage, so all general semantic constraints for an ActionUsage (see
8.4.12.2 ) also apply to an IfActionUsage, as well as the following additional specialization constraints:
The ActionDefinition IfThenAction has two input parameters: ifTest, which is a BooleanEvaluation,
and thenClause, which is an Action. IfThenElseAction specializes IfThenAction, adding a third input
parameter: elseClause, which is also an Action. The ifArgument, thenAction and (optionally)
elseAction of an IfActionUsage are then parsed as parameters of the IfActionUsage that redefine the
corresponding parameters of the IfThenAction or IfThenElseAction.
action def AC {
action if1 if test1
then action then1 {
// ...
}
(where test1 and test2 can be arbitrary Boolean-valued Expressions) are parsed, with implied
Specializations included, as (see 8.2.2.16.6 ):
IfThenAction specializes the KerML Behavior IfThenPerformance, whose behavior is to first evaluate the
ifTest and then, if the result of that evaluation is true, perform the thenClause. IfThenElseAction specializes
the KerML Behavior IfThenElsePerformance, which specializes IfThenPerformance, adding the additional
behavior such that, if the result of the evaluation of the ifTest is false, it performs the elseClause.
A LoopActionUsage is a kind of ActionUsage, so all general semantic constraints for an ActionUsage (see
8.4.12.2 ) also apply to a LoopActionUsage. LoopActionUsage is abstract. There are two concrete subclasses of
LoopActionUsage, WhileLoopActionUsage and ForLoopActionUsage, and further semantic constraints are
specific to those subclasses.
While Loops
The whileArgument, bodyAction, and untilArgument of the WhileLoopActionUsage are then parsed as
owned parameters (see 8.2.2.16.6 ), which must redefine the corresponding parameters of WhileLoopAction, as
required by the KerML checkFeatureParameterRedefinition constraint (see [KerML, 8.4.4.7.1]).
(where test1 and test2 can be arbitrary Boolean-valued Expressions) is parsed, with implied
Specializations included, as:
WhileLoopAction specializes the KerML Behavior LoopPerformance, whose behavior is to perform the body
while the whileTest evaluates to true and the untilTest evaluates to false. The whileTest is evaluated before
each (possible) performance of the body, and the untilTest is evaluated after each performance of the body.
For Loops
It also has a protected ownedFeature var that is a subset of seq with multiplicity 0..1. The loopVariable,
seqArgument, and bodyAction of a ForLoopActionUsage are parsed as follows (see 8.2.2.16.6 ):
1. loopVariable is an ownedFeature
2. seqArgument is related by a FeatureValue to an owned parameter
3. bodyAction is an owned parameter
action def AF {
action loop2 for v : T in vals
action body2 {
// ...
}
}
ForLoopAction uses a nested WhileLoopActionUsage to iteratively perform its body Action, with its var
assigned to each successive value from seq in turn.
action act;
part p {
perform action perf references act;
// Other than having a name, the above is equivalent to
// perform act;
}
A StateDefinition is a kind of ActionDefinition. As such, all the general semantic constraints for an
ActionDefinition (see 8.4.12.1 ) also apply to a StateDefinition. In addition, the
checkStateDefinitionSpecialization constraint requires that a StateDefinition specialize the base
StateDefinition States::StateAction (see 9.2.10.2.1 ), which specializes the ActionDefinition
Actions::Action (see 9.2.9.2.4 ) and the kernel Behavior StatePerformances::StatePerformance (see
[KerML, 9.2.6]).
A StateAction is a kind of StatePerformance, which specifies the basic semantics of entry into a state, the
performance of behaviors while in a state, and the acceptance of an incomingTransfer, causing an exit from the
state (see [KerML, 9.2.6]). See also the descriptions of the semantics of StateUsages (see 8.4.13.2 ) and
TransitionUsages (see 8.4.13.3 ). The StateAction semantic model also includes various additional features
related to various kinds of subactions of StateActions:
A StateUsage is a kind of ActionUsage. As such, all the general semantic constraints for an ActionUsage (see
8.4.12.2 ) also apply to a StateUsage, as well as the following additional specialization constraints:
A TransitionUsage is a kind of ActionUsage. As such, all the general semantic constraints for an
ActionUsage (see 8.4.12.2 ) also apply to a TransitionUsage, as well as the following additional specialization
constraints:
• An alias (non-owning) Membership to its source StateUsage (or a Feature chain identifying the
source).
• A ParameterMembership for the transitionLinkSource parameter.
• A ParameterMembership for the payload parameter (if the TransitionUsage has a
triggerAction).
• Zero to three TransitionFeatureMemberships for up to one each of a triggerAction,
guardExpression, and effectAction. Note also that a triggerAction is parsed as an
AcceptActionUsage, with payload and, optionally, receiver parameters (see 8.4.12.6 ).
As a result of all the above semantic constraints, a TransitionUsage such as in the following model
state def ST {
state s1;
transition trns
first s1
accept x : T via tgt
if test
effect action efct {
// ...
}
then s2;
state s2;
}
(where test is a Boolean-valued Expression) has, with implied Relationships included, the equivalent kernel
semantics of:
// KerML
behavior ST specializes States::StateAction {
step s1 subsets States::StateAction::exclusiveStates;
in feature redefines
States::StateTransitionAction::transitionLinkSource;
in feature x
redefines States::StateTransitionAction::payload
state st;
part p {
exhibit state exhb references st;
}
Thus, the values of p.exhb will be the subset of the States represented by st that are performed by p.
A CalculationDefinition is a kind of ActionDefinition and a kind of KerML Function. As such, all the
general semantic constraints for an ActionDefinition (see 8.4.12.1 ) and a Function (see [KerML, 8.4.4.8.1])
apply to a CalculationDefinition. In addition, the checkCalculationDefinitionSpecialization
constraint requires that a CalculationDefinition specialize the base CalculationDefinition
Calculations::Calculation (see 9.2.11.2.1 ), which subclassifies the ActionDefinition
Actions::Action (see 9.2.9.2.4 ) and the kernel Behavior Performances::Evaluation (see [KerML,
9.2.6]). Further, in addition to the KerML checkFeatureParameterRedefinition constraint, that applies to all
kinds of ActionDefinitions (see 8.4.12.1 ), the KerML checkFeatureResultRedefinition constraint (see
[KerML, 8.4.4.8.1]) constraint also requires that the result parameter of a CalculationDefinition
redefine the result parameters of any Functions it specializes (including other
CalculationDefinitions), which means that it ultimately directly or indirectly specializes
Performances::Evaluation::result.
where resultExpr is an arbitrary Expression and resultExpr.result represents a Feature chain to the
Expression result.
A CalculationUsage is a kind of ActionUsage and a kind of KerML Expression. As such, all the general
semantic constraints for an ActionUsage (see 8.4.12.2 ) and an Expression (see [KerML, 8.4.4.8.2]) apply to a
CalculationUsage, as well as the following additional specialization constraints:
where resultExpr is an arbitrary Expression and resultExpr.result represents a Feature chain to the
Expression result.
A ConstraintUsage is a kind of OccurrenceUsage and a kind of KerML Expression. As such, all the general
semantic constraints for an OccurrenceUsage (see 8.4.5 ) and an Expression (see [KerML, 8.4.4.8.2]) also apply
to a ConstraintUsage, as well as the following additional specialization constraints:
An AssertConstraintUsage is a kind of ConstraintUsage and a kind of KerML Invariant. As such, all the
general semantic constraints for a ConstraintUsage (see 8.4.15.2 ) and an Invariant (see [KerML, 8.4.4.8.2]).
In addition, the checkAssertConstraintUsageSpecialization constraint requires that an
AssertConstraintUsage specialize one of the following:
The result of a RequirementCheck is defined to be the following logical test: if all the assumptions have a
true result, then all the constraints must have a true result. In addition to the assumedConstraints and
requiredConstraints declared as above, RequirementCheck includes two other features that contribute to the
requiredConstraints that are checked:
• actors – Collects the values of PartUsages that are owned via ActorMemberships. (See also 8.4.7.2
on the semantics of PartUsages.)
• stakeholders – Collects the values of PartUsages that are owned via StakeholderMemberships.
(See also 8.4.7.2 on the semantics of PartUsages.)
A RequirementUsage is a kind of ConstraintUsage. As such, all the general semantic constraints for a
ConstraintUsage (see 8.4.15.2 ) also apply to a RequirementUsage, as well as the following additional
specialization constraints:
Similarly to RequirementDefinitions, a RequirementUsage also has a subject and assumed and required
constraints (see also 8.4.16.1 ).
satisfy requirement sr : R by f;
where f_expr is the FeatureReferenceExpression that references f as the value Expression of the
FeatureValue.
part p {
satisfy requirement sr1 : R1;
}
A ConcernDefinition is a kind of RequirementDefinition. As such, all the general semantic constraints for
a RequirementDefinition (see 8.4.16.1 ) also apply to a ConcernDefinition. In addition, the
checkConcernDefinitionSpecialization constraint requires that a ConcernDefinition specialize the base
ConcernDefinition Requirements::ConcernCheck (see 9.2.13.2.1 ), which specializes the
RequirementDefinition Requirements::RequirementCheck (see 9.2.13.2.8 ).
A ConcernUsage is a kind of RequirementUsage. As such, all the general semantic constraints for a
RequirementUsage (see 8.4.16.2 ) also apply to a ConcernUsage, as well as the following additional
specialization constraints:
A CaseDefinition is a kind of CalculationDefinition. As such, all the general semantic constraints for a
CalculationDefinition (see 8.4.14.1 ) apply to a CaseDefinition. In addition, the
checkCaseDefinitionSpecialization constraint requires that a CaseDefinition specialize the base
CaseDefinition Cases::Case (see 9.2.14.2.1 ), which subclassifies the CalculationDefinition
Calculations::Calculation (see 9.2.11.2.1 ). Further, the KerML checkFeatureParameterRedefinition
and checkFeatureResultRedefinition constraints (see [KerML, 8.4.4.8.1]) also apply to a CaseDefinition,
as for any CalculationDefinition (see 8.4.14.1 ).
A CaseDefinition differs from a plain CalculationDefinition in that it has a subject and an objective, and it
may also have one or more actor features.
Additional semantics are defined for each of the more specialized kinds of CaseDefinition (see 8.4.18.1 on
AnalysisCaseDefinitions, 8.4.19.1 on VerificationCaseDefinitions, and 8.4.20.1 on
UseCaseDefinitions).
A CaseUsage is a kind of CalculationUsage. As such, all the general semantic constraints for an
CalculationUsage (see 8.4.14.2 ) apply to a CaseUsage, as well as the following additional specialization
constraints:
Similarly to a CaseDefinition, a CaseUsage also has a subject and an objective, and may have one or more actor
features (see also 8.4.17.1 ).
Additional semantics are defined for each of the more specialized kinds of CaseUsage (see 8.4.18.2 on
AnalysisCaseUsages, 8.4.19.2 on VerificationCaseUsages, and 8.4.20.2 on UseCaseUsages).
An AnalysisCaseDefinition is a kind of CaseDefinition. As such, all the general semantic constraints for a
CaseDefinition (see 8.3.21.2 ) apply to an AnalysisCaseDefinition. In addition, the
checkAnalysisCaseDefinitionSpecialization constraint requires that an AnalysisCaseDefinition
specialize the base AnalysisCaseDefinition AnalysisCases::AnalysisCase (see 9.2.15.2.1 ), which
subclassifies the CaseDefinition Cases::Case (see 9.2.14.2.1 ).
The analysisAction property of an AnalysisCaseDefinition (see 8.3.22.2 ) collects all the composite
actions of the AnalysisCaseDefinition that are directly or indirectly defined by the ActionDefinition
ActivityCases::AnalysisAction (see ). The AnalysisCaseDefinition
AnalysisCases::AnalysisCase then has an analysisSteps feature that subsets
Actions::Action::subaction (see 9.2.9.2.4 ) and collects the values of the analysisActions. The
checkActionUsageAnalysisActionSpecialization constraint requires that any ActionUsage that is an
analysisAction of an AnalysisCaseDefinition specialize
AnalysisCases::AnalysisCase::analysisSteps (see 8.4.12.2 ).
An AnalysisCaseUsage is a kind of CaseUsage. As such, all the general semantic constraints for a CaseUsage
(see 8.4.17.2 ) apply to an AnalysisCaseUsage, as well as the following additional specialization constraints:
The intent is that the objective of a VerificationCaseDefinition is to verify the satisfaction of requirements
on the subject of the VerificationCaseDefinition. In addition to regular
RequirementConstraintMemberships (see 8.4.16.2 ), the objectiveRequirement of a
VerificationCaseDefinition can have RequirementVerificationMemberships whose
ownedRequirements reference the verifiedRequirements of the VerificationCaseDefinition. The
checkRequirementUsageRequirementVerificationSpecialization constraint (see 8.4.16.2 ) then
requires that a RequirementUsage owned by the objective of a VerificationCaseDefinition via
a RequirementVerificationMembership specialize the RequirementUsage
VerificationCases::VerificationCase::obj::requirementVerifications, which subsets
Requirements::RequirementCheck::subrequirements. The requirementVerifications feature thus
collects checks, in the context of the objective of the VerificationCase, of the requirements to be verified, which
are then required constraints on the objective of the VerificationCase (since subrequirement subsets
constraints).
A VerificationCaseUsage is a kind of CaseUsage. As such, all the general semantic constraints for a
CaseUsage (see 8.4.17.2 ) apply to a VerificationCaseUsage, as well as the following additional specialization
constraints:
A UseCaseDefinition is a kind of CaseDefinition. As such, all the general semantic constraints for a
CaseDefinition (see 8.3.21.2 ) apply to a UseCaseDefinition. In addition, the
A UseCaseUsage is a kind of CaseUsage. As such, all the general semantic constraints for a CaseUsage (see
8.4.17.2 ) apply to a UseCaseUsage, as well as the following additional specialization constraints:
If the IncludeUseCaseUsage has a ReferenceSubsetting, then this will suffice to satisfy the
checkUseCaseUsageSpecialization constraint, if the referenced UseCaseUsage does. However, if it does not
have a ReferenceSubsetting (or other relevant explicit ownedSpecialization), it requires an implied
Subsetting of UseCases::useCases.
A ViewDefinition is a kind of PartDefinition. As such, all the general semantic constraints for an
PartDefinition (see 8.4.7.1 ) also apply to a ViewDefinition. In addition, the
checkViewDefinitionSpecialization constraint requires that a ViewDefinition specialize the base
ViewDefinition Views::View (see 9.2.18.2.10 ), which subclassifies Parts::Part (see 9.2.4.2.1 ).
A ViewUsage is a kind of PartUsage. As such, all the general semantic constraints for an PartUsage (see
8.4.7.2 ) also apply to a ViewUsage, as well as the following additional specialization constraints:
A ViewpointUsage is a kind of RequirementUsage. As such, all the general semantic constraints for a
RequirementUsage (see 8.4.16.2 ) also apply to a ViewpointUsage, as well as the following additional
specialization constraints:
A RenderingDefinition is a kind of PartDefinition. As such, all the general semantic constraints for a
PartDefinition (see 8.4.7.1 ) also apply to a ViewDefinition. In addition, the
checkRenderingDefinitionSpecialization constraint requires that a RenderingDefinition specialize
the base RenderingDefinition Views::Rendering (see 9.2.18.2.6 ), which subclassifies Parts::Part (see
9.2.4.2.1 ).
A RenderingUsage is a kind of PartUsage. As such, all the general semantic constraints for an PartUsage (see
8.4.7.2 ) also apply to a RenderingUsage, as well as the following additional specialization constraints:
rendering r1;
rendering r2;
view def VR specializes Views::View {
render r1 redefines Views::View::viewRendering;
}
view def vr : VR {
render r2 redefines VR::r1;
}
A MetadataDefinition is a kind of ItemDefinition and a kind of KerML Metaclass. As such, the general
semantic constraints for an ItemDefinition (see 8.4.6.1 ) and a Metaclass (see [KerML, 8.4.4.13]) also apply to
a MetadataDefinition. In addition, the checkMetadataDefinitionSpecialization constraint requires that
a MetadataDefinition specialize the base MetadataDefinition Metadata::MetadataItem (see 9.2.20.2.1
), which subclassifies Items::Item (see 9.2.3.2.1 ) and the kernel Metaclass Metaobjects::Metaobject (see
[KerML, 9.2.16]).
The instances of a MetadataDefinition are MetadataItems that are part of the structure of a model itself,
rather than being an instance in the system represented by the model. The SysML library model is a reflective model
of the MOF abstract syntax for SysML, containing one SysML MetadataDefinition corresponding to each MOF
metaclass in the abstract syntax model (see 9.2.21 for more details on the relationship between the SysML model and
the abstract syntax).
A MetadataUsage is a kind of ItemUsage and a kind of KerML MetadataFeature. As such, the general
semantic constraints for an ItemUsage (see 8.4.6.2 ) and a MetadataFeature (see [KerML, 8.4.4.13]) also apply
to a MetadataUsage. In addition, the checkMetadataUsageSpecialization constraint requires that a
MetadataUsage specialize the base MetadataUsage Metadata::metadataItems (see 9.2.20.2.2 ), which is
defined by Metadata::MetadataItem (see 9.2.20.2.1 ) and subsets Items::items (see 9.2.3.2.2 ) and the kernel
Feature Metaobjects::metaobjects (see [KerML, 9.2.16]).
See [KerML, 8.4.4.13.2] for further description of the model-level semantics of MetadataUsages as
MetadataFeatures that can be used to annotate Elements of a model. See also [KerML, 8.4.4.13.3] for a
discussion of semantic metadata that is also usable in SysML.
SysML also includes a set of domain libraries, which provide models of fundamental concepts from domains of
particular importance in systems engineering. These models are normative and available for use in all SysML user
models. The following domain libraries are included.
• The Metadata Domain Library contains models of attribute definitions for a useful set of standard
metadata annotations (see 9.3 ; see also 7.4 on Annotations).
• The Analysis Domain Library contains models of concepts useful in carrying out analyses of systems. In
particular, it includes frameworks for state space representation of systems and for performing trade-off
studies (see 9.4 ).
• The Cause and Effect Domain Library contains a language extension for modeling cause and effect
relationships (see 9.5 ).
• The Requirement Derivation Domain Library contains a language extension for modeling requirement
derivation relationships (see 9.6 ).
• The Geometry Domain Library contains a model for physical items with spacial extent, including an
extensive set of basic geometric shapes that can be used to construct such items (see 9.7 ).
• The Quantities and Units Domain Library contains a comprehensive set of models for scalar, vector and
tensor quantities, including quantity value and unit definitions covering the ISO/IEC 80000 and ISO
8601-1 standards (see 9.8 ).
The normative machine-readable representation for each of these model libraries is a project interchange file,
formatted consistent with the standard for model interchange given in [KerML, 10.3], as specified for SysML in
Clause 2 under Model Interchange Conformance. The documentation on these models provided in here in Clause 9
is either derived from the model files themselves or gives additional overview information on the use of the models,
and is therefore also considered normative.
Each library model is packaged as a model interchange file in the project interchange file for its corresponding
model library (see [KerML, 10.2]). Regardless of whether such a library model is interchanged in textual notation,
XMI or JSON format, the elementId for any Element in the library model that has a non-null qualifiedName
shall be a name-based (version 5) UUID (see [UUID, 14.2]), constructed as specified in [KerML, 9.1], expect using
the prefix https://www.omg.org/SysML/ when constructing the URL for a standard library package. The
elementIds constructed in this way shall be normative across all forms of interchange of the library models and
shall remain stable for future versions of the library models, though future revisions of this specification may
deprecate certain existing Elements and their names, or introduce new Elements with new names and hence
UUIDs that are distinct (with a high probability). However, the elementIds for library Elements for which the
qualifiedName is null are not determined by this specification, and representations of the models with different
elementIds for these Elements (such as may happen when parsing the textual representation of a library model)
are still considered conformant to the specification.
It also includes a package of StandardViewDefinitions (see 9.2.19 ) and a reflective SysML model of the
SysML abstract syntax (see 9.2.21 ).
9.2.2 Attributes
9.2.2.1 Attributes Overview
This package defines the base types for attributes and related structural elements in the SysML language.
9.2.2.2 Elements
9.2.2.2.1 AttributeValue
Element
AttributeDefinition
Description
AttributeValue is the most general type of data values that represent qualities or characteristics of a system or
part of a system. AttributeValue is the base type of all AttributeDefinitions.
General Types
DataValue
Features
None.
Constraints
None.
9.2.2.2.2 attributeValues
Element
AttributeUsage
Description
General Types
dataValues
AttributeValue
Features
None.
None.
9.2.3 Items
9.2.3.1 Items Overview
This package defines the base types for items and related structural elements in the SysML language.
9.2.3.2 Elements
9.2.3.2.1 Item
Element
ItemDefinition
Description
Item is the most general class of objects that are part of, exist in or flow through a system. Item is the base type of
all ItemDefinitions.
General Types
Object
Features
envelopingShapes that are StructuredSpaceObjects with every face or every edge intersecting this Item.
Shapes that are the shape of an Item that includes this Item in space and time.
isSolid : Boolean
Constraints
None.
9.2.3.2.2 items
Element
ItemUsage
Description
General Types
Item
objects
Features
None.
Constraints
None.
9.2.3.2.3 Touches
Element
ConnectionDefinition
Description
Touching Occurrences are JustOutsideOf each other and happen at the same time (HappensWhile).
General Types
JustOutsideOf
HappensWhile
Features
Constraints
None.
9.2.4 Parts
9.2.4.1 Parts Overview
This package defines the base types for parts and related structural elements in the SysML language.
9.2.4.2 Elements
9.2.4.2.1 Part
Element
PartDefinition
Description
Part is the most general class of objects that represent all or a part of a system. Part is the base type of all
PartDefinitions.
General Types
Item
Features
Actions that are owned by this Part. The this reference of a ownedAction is always its owning Part.
Constraints
None.
9.2.4.2.2 parts
PartUsage
Description
General Types
Part
items
Features
None.
Constraints
None.
9.2.5 Ports
9.2.5.1 Ports Overview
This package defines the base types for ports and related structural elements in the SysML language.
9.2.5.2 Elements
9.2.5.2.1 Port
Element
PortDefinition
Description
Port is the most general class of objects that represent connection points for interacting with a Part. Port is the
base type of all PortDefinitions.
General Types
Object
Features
Constraints
None.
9.2.5.2.2 ports
Element
Description
General Types
Port
objects
Features
None.
Constraints
None.
9.2.6 Connections
9.2.6.1 Connections Overview
This package defines the base types for connections and related structural elements in the SysML language.
9.2.6.2 Elements
9.2.6.2.1 BinaryConnection
Element
ConnectionDefinition
Description
BinaryConnection is the most general class of binary links between two things within some containing structure.
BinaryConnection is the base type of all ConnectionDefinitions with exactly two ends.
General Types
Connection
BinaryLinkObject
Features
Constraints
None.
Element
ConnectionUsage
Description
General Types
BinaryConnection
binaryLinkObjects
connections
Features
None.
Constraints
None.
9.2.6.2.3 Connection
Element
ConnectionDefinition
Description
Connection is the most general class of links between things within some containing structure. Connection is the
base type of all ConnectionDefinitions.
General Types
Part
LinkObject
Features
None.
Constraints
None.
9.2.6.2.4 connections
Element
ConnectionUsage
General Types
linkObjects
parts
Features
None.
Constraints
None.
9.2.6.2.5 FlowConnection
Element
FlowConnectionDefinition
Description
FlowConnection is a subclass of message connections that are also flow transfers. It is the base type for
FlowConnectionUsages that identify their source output and target input.
General Types
FlowTransfer
MessageConnection
Features
Constraints
None.
9.2.6.2.6 flowConnections
Element
FlowConnectionUsage
Description
General Types
flowTransfers
messageConnections
Features
Constraints
None.
9.2.6.2.7 MessageConnection
Element
ConnectionDefinition
Description
MessageConnection is the class of binary connections that represent a transfer of objects or values between two
occurrences. It is the base type of all FlowConnectionDefinitions.
General Types
Action
Transfer
BinaryConnection
Features
Constraints
None.
9.2.6.2.8 messageConnections
Element
FlowConnectionUsage
Description
General Types
binaryConnections
transfers
actions
Features
None.
Constraints
None.
9.2.6.2.9 SuccessionFlowConnection
Element
FlowConnectionDefinition
Description
SuccessionFlowConnection is a subclass of flow connections that happen after their source and before their
target. It is the base type for all SuccessionFlowConnectionUsages.
General Types
FlowConnection
FlowTransferBefore
Features
Constraints
None.
9.2.6.2.10 successionFlowConnections
Element
FlowConnectionUsage
Description
General Types
SuccessionFlowConnection
transfersBefore
Features
Constraints
None.
9.2.7 Interfaces
9.2.7.1 Interfaces Overview
This package defines the base types for interfaces and related structural elements in the SysML language.
9.2.7.2 Elements
9.2.7.2.1 BinaryInterface
Element
InterfaceDefinition
Description
BinaryInterface is the most general class of links between two PortUsages within some containing structure.
BinaryInterface is the base Type of all InterfaceDefinitions with exactly two ends.
General Types
BinaryConnection
Interface
Features
Constraints
None.
9.2.7.2.2 binaryInterfaces
Element
InterfaceUsage
Description
General Types
interfaces
BinaryInterface
binaryConnections
Features
None.
Constraints
None.
9.2.7.2.3 Interface
Element
InterfaceDefinition
Description
Interface is the most general class of links between PortUsages within some containing structure. Interface
is the base type of all InterfaceDefinitions.
General Types
Connection
Features
None.
Constraints
None.
9.2.7.2.4 interfaces
Element
InterfaceUsage
Description
General Types
connections
Interface
None.
Constraints
None.
9.2.8 Allocations
9.2.8.1 Allocations Overview
This package defines the base types for allocations and related structural elements in the SysML language.
9.2.8.2 Elements
9.2.8.2.1 Allocation
Element
AllocationDefinition
Description
Allocation is the most general class of allocations, represented as a connection between the source of the
allocation and the target. Allocation is the base type of all AllocationDefinitions.
General Types
BinaryConnection
Features
Constraints
None.
9.2.8.2.2 allocations
Element
AllocationUsage
Description
General Types
Allocation
Features
None.
Constraints
None.
9.2.9 Actions
9.2.9.1 Actions Overview
This package defines the base types for actions and related behavioral elements in the SysML language.
9.2.9.2 Elements
9.2.9.2.1 AcceptAction
Element
ActionDefinition
Description
General Types
AcceptMessageAction
Features
None.
Constraints
None.
9.2.9.2.2 acceptActions
Element
ActionUsage
Description
General Types
AcceptAction
actions
None.
Constraints
None.
9.2.9.2.3 AcceptMessageAction
Element
ActionDefinition
Description
General Types
Action
AcceptPerformance
Features
The payload received from the incoming Transfer. If an input value is provided for this parameter, then the
Transfer payload must match that value.
Constraints
None.
9.2.9.2.4 Action
Element
ActionDefinition
Description
Action is the most general class of performances of ActionDefinitions in a system or part of a system. Action
is the base class of all ActionDefinitions.
General Types
Performance
Features
Constraints
None.
9.2.9.2.5 actions
Element
ActionUsage
Description
General Types
Action
performances
Features
None.
Constraints
None.
9.2.9.2.6 AssignmentAction
Element
ActionDefinition
Description
General Types
FeatureWritePerformance
Action
Constraints
None.
9.2.9.2.7 assignmentActions
Element
ActionUsage
Description
General Types
AssignmentAction
actions
Features
The default target for assignmentActions is the featuring instance (if that is an Occurrence
Constraints
None.
9.2.9.2.8 ControlAction
Element
ActionDefinition
Description
General Types
Action
Features
Constraints
None.
9.2.9.2.9 DecisionAction
Element
ActionDefinition
Description
General Types
DecisionPerformance
ControlAction
Features
None.
Constraints
None.
9.2.9.2.10 DecisionTransitionAction
Element
ActionDefinition
Description
General Types
NonStateTransitionPerformance
TransitionAction
Features
Constraints
9.2.9.2.11 ForkAction
Element
ActionDefinition
Description
Note: Fork behavior results from requiring that the target multiplicity of all outgoing succession connectors be 1..1.
General Types
ControlAction
Features
None.
Constraints
None.
9.2.9.2.12 ForLoopAction
Element
ActionDefinition
Description
A ForLoopAction is a LoopAction that iterates over an ordered sequence of values. It is the base type for all
ForLoopActionUsages.
General Types
LoopAction
Features
index : Positive
The index of the element of seq assigned to var on the current iteration of the loop.
initialization : AssignmentAction
Initializes index to 1.
var : Anything
The loop variable that is assigned successive elements of seq on each iteration of the loop.
whileLoop : WhileLoopAction
While index is less than or equal to the size of seq, assigns var to the index element of seq, then performs body
and increments index.
Constraints
None.
9.2.9.2.13 forLoopActions
Element
ActionUsage
Description
General Types
loopActions
ForLoopAction
Features
None.
Constraints
None.
9.2.9.2.14 IfThenAction
Element
ActionDefinition
Description
An IfThenAction is a Kernel IfThenPerformance that is also an Action. It is the base type for all
IfActionUsages.
General Types
Action
IfThenPerformance
An evaluation of a Boolean-valued Expression whose result determines whether or not the thenClause is
performed.
An optional Performance that occurs if and only if the result of the ifTest is true.
Constraints
None.
9.2.9.2.15 ifThenActions
Element
ActionUsage
Description
General Types
IfThenAction
actions
Features
None.
Constraints
None.
9.2.9.2.16 IfThenElseAction
Element
ActionDefinition
Description
General Types
IfThenAction
IfThenElsePerformance
An optional Performance that occurs if and only if the result of the ifTest is false.
Constraints
None.
9.2.9.2.17 ifThenElseActions
Element
ActionUsage
Description
ifThenElseActions is the base feature for all IfActionUsages that have an elseAction.
General Types
IfThenElseAction
ifThenActions
Features
None.
Constraints
None.
9.2.9.2.18 JoinAction
Element
ActionDefinition
Description
Note: Join behavior results from requiring that the source multiplicity of all incoming succession connectors be 1..1.
General Types
ControlAction
Features
None.
Constraints
9.2.9.2.19 LoopAction
Element
ActionDefinition
Description
General Types
Action
Features
Constraints
None.
9.2.9.2.20 loopActions
Element
ActionUsage
Description
General Types
LoopAction
actions
Features
None.
Constraints
None.
9.2.9.2.21 MergeAction
Element
ActionDefinition
A MergeAction is the ControlAction for a MergeNode. It is a MergePerformance that selects exactly one
incoming HappensBefore link.
General Types
MergePerformance
ControlAction
Features
None.
Constraints
None.
9.2.9.2.22 SendAction
Element
ActionDefinition
Description
General Types
Action
SendPerformance
Features
Constraints
None.
9.2.9.2.23 sendActions
Element
ActionUsage
Description
General Types
SendAction
actions
Features
None.
Constraints
None.
9.2.9.2.24 TransitionAction
Element
ActionDefinition
Description
General Types
Action
TransitionPerformance
Features
Constraints
None.
9.2.9.2.25 transitionActions
Element
TransitionUsage
Description
General Types
Action
TransitionAction
actions
Features
None.
Constraints
None.
9.2.9.2.26 WhileLoopAction
Element
ActionDefinition
Description
A WhileLoopAction is a Kernel LoopPerformance that is also a LoopAction. It is the base type for all
WhileLoopActionUsages.
General Types
LoopAction
LoopPerformance
Features
The Action that is performed while the whileTest is true and the untilTest is false.
Successive evaluations of a Boolean-valued Expression that must be false for the loop to continue. The
Expression is evaluated after the body is performed.
Successive evaluations of a Boolean-valued Expression that must be true for the loop to continue. the
Expression is evaluated before the body is performed and is always evaluated at least once.
Constraints
None.
9.2.9.2.27 whileLoopActions
ActionUsage
Description
General Types
WhileLoopAction
loopActions
Features
None.
Constraints
None.
9.2.10 States
9.2.10.1 States Overview
This package defines the base types for states and related behavioral elements in the SysML language.
9.2.10.2 Elements
9.2.10.2.1 StateAction
Element
StateDefinition
Description
A StateAction is a kind of Action that is also a StatePerformance. It is the base type for all
StateDefinitions.
General Types
Action
StatePerformance
Features
The subperformances of this StateAction that are Actions, other than the entry and exit Actions. These
subactions all take place in the "middle" of the StatePerformance, that is, after the entry Action and before
the exit Action.
NOTE: This feature is declared as an ActionUsage, not a StateUsage, so that the constraint
checkStateUsageExclusiveStateSpecialization does not apply to it, since this constraint would otherwise
incorrectly require that substates subset exclusiveStates.
Constraints
None.
9.2.10.2.2 stateActions
Element
StateUsage
Description
General Types
StateAction
actions
Features
None.
Constraints
None.
9.2.10.2.3 StateTransitionAction
Element
ActionDefinition
Description
General Types
TransitionAction
StateTransitionPerformance
Features
Constraints
None.
9.2.11 Calculations
9.2.11.1 Calculations Overview
This package defines the base types for calculations and related behavioral elements in the SysML language.
9.2.11.2 Elements
9.2.11.2.1 Calculation
Element
CalculationDefinition
Description
General Types
Evaluation
Action
Features
Constraints
None.
Element
CalculationUsage
Description
General Types
evaluations
Calculation
actions
Features
None.
Constraints
None.
9.2.12 Constraints
9.2.12.1 Constraints Overview
This package defines the base types for constraints and related behavioral elements in the SysML language.
9.2.12.2 Elements
9.2.12.2.1 assertedConstraintChecks
Element
ConstraintUsage
Description
General Types
constraintChecks
trueEvaluations
Features
None.
Constraints
None.
Element
ConstraintDefinition
Description
ConstraintCheck is the most general class for constraint checking. ConstraintCheck is the base type of all
ConstraintDefinitions.
General Types
BooleanEvaluation
Features
None.
Constraints
None.
9.2.12.2.3 constraintChecks
Element
ConstraintUsage
Description
General Types
booleanEvaluations
ConstraintCheck
Features
None.
Constraints
None.
9.2.12.2.4 negatedConstraintChecks
Element
ConstraintUsage
Description
falseEvaluations
constraintChecks
Features
None.
Constraints
None.
9.2.13 Requirements
9.2.13.1 Requirements Overview
This package defines the base types for requirements and related behavioral elements in the SysML language.
9.2.13.2 Elements
9.2.13.2.1 ConcernCheck
Element
ConcernDefinition
Description
ConcernCheck is the most general class for concern checking. ConcernCheck is the base type of all
ConcernDefinitions.
General Types
RequirementCheck
Features
None.
Constraints
None.
9.2.13.2.2 concernChecks
Element
ConcernUsage
Description
General Types
requirementChecks
Features
None.
Constraints
None.
9.2.13.2.3 DesignConstraintCheck
Element
ConstraintDefinition
Description
A DesignConstraintCheck specifies a constraint on the implementation of the system or system part, such as the
system must use a commercial-off-the-shelf component.
General Types
RequirementCheck
Features
Constraints
None.
9.2.13.2.4 FunctionalRequirementCheck
Element
ConstraintDefinition
Description
General Types
RequirementCheck
Features
Constraints
None.
Element
ConstraintDefinition
Description
An InterfaceRequirementCheck specifies an Interface for connecting systems and system parts, which
optionally may include item flows across the Interface and/or Interface constraints.
General Types
RequirementCheck
Features
Constraints
None.
9.2.13.2.6 PerformanceRequirementCheck
Element
ConstraintDefinition
Description
General Types
RequirementCheck
Features
Constraints
None.
9.2.13.2.7 PhysicalRequirementCheck
Element
ConstraintDefinition
Description
RequirementCheck
Features
Constraints
None.
9.2.13.2.8 RequirementCheck
Element
RequirementDefinition
Description
RequirementCheck is the most general class for requirements checking. RequirementCheck is the base type of
all RequirementDefinitions.
General Types
ConstraintCheck
Features
The Parts that fill the role of actors for this RequirementCheck.
The checks of assumptions that must hold for the required constraints to apply.
The Parts that represent stakeholders interested in the requirement being checked.
subj : Anything
The entity that is being check for satisfaction of the required constraints.
Constraints
[no name]
9.2.13.2.9 requirementChecks
Element
RequirementUsage
Description
General Types
constraintChecks
RequirementCheck
Features
None.
Constraints
None.
9.2.14 Cases
9.2.14.1 Cases Overview
This package defines the base types for cases and related behavioral elements in the SysML language.
9.2.14.2 Elements
9.2.14.2.1 Case
Element
CaseDefinition
Description
Case is the most general class of performances of CaseDefinitions. Case is the base class of all
CaseDefinitions.
General Types
Calculation
Features
The Parts that fill the role of actors for this Case.
obj : RequirementCheck
subj : Anything
Constraints
None.
9.2.14.2.2 cases
Element
CaseUsage
Description
General Types
calculations
Case
Features
None.
Constraints
None.
This package defines the base types for analysis cases and related behavioral elements in the SysML language.
9.2.15.2 Elements
9.2.15.2.1 AnalysisCase
Element
AnalysisCaseDefinition
Description
General Types
Case
Features
Constraints
None.
9.2.15.2.2 analysisCases
Element
AnalysisCaseUsage
Description
General Types
AnalysisCase
cases
Features
None.
Constraints
None.
This package defines the base types for verification cases and related behavioral elements in the SysML language.
9.2.16.2 Elements
9.2.16.2.1 PassIf
Element
CalculationDefinition
Description
General Types
None.
Features
isPassing : Boolean
verdict : VerdictKind
Constraints
None.
9.2.16.2.2 VerdictKind
Element
EnumerationDefinition
Description
General Types
AttributeValue
Features
error
fail
inconclusive
pass
Constraints
None.
9.2.16.2.3 VerificationCase
Element
VerificationCaseDefinition
Description
General Types
Case
Features
The objective of this VerificationCase, whose subject is bound to the subject of the VerificationCase
and whose requirementVerifications are bound to the requirementVerifications of the
VerificationCase.
The subject of this VerificationCase, representing the system under test, which is bound to the subject of the
objective of the VerificationCase.
Constraints
None.
9.2.16.2.4 verificationCases
Element
VerificationCaseUsage
Description
General Types
VerificationCase
cases
Features
None.
None.
9.2.16.2.5 VerificationCheck
Element
RequirementDefinition
Description
General Types
RequirementCheck
Features
Constraints
None.
9.2.16.2.6 VerificationMethod
Element
AttributeDefinition
Description
General Types
None.
Features
Constraints
None.
9.2.16.2.7 VerificationMethodKind
Element
Description
VerificationMethodKind is an enumeration of the standard methods by which verification can be carried out.
General Types
AttributeValue
Features
analyze
demo
inspect
test
Constraints
None.
This package defines the base types for use cases and related behavioral elements in the SysML language.
9.2.17.2 Elements
9.2.17.2.1 UseCase
Element
UseCaseDefinition
Description
UseCase is the most general class of performances of UseCaseDefinitions. UseCase is the base class of all
UseCaseDefinitions.
General Types
Case
Features
None.
9.2.17.2.2 useCases
Element
UseCaseUsage
Description
General Types
cases
UseCase
Features
None.
Constraints
None.
9.2.18 Views
9.2.18.1 Views Overview
This package defines the base types for views, viewpoints, renderings and related elements in the SysML language.
9.2.18.2 Elements
9.2.18.2.1 asElementTable
Element
RenderingUsage
Description
asElementTable renders a View as a table, with one row for each exposed Element and columns rendered by
applying the columnViews in order to the Element in each row.
General Types
TabularRendering
Features
The Views to be rendered in the column cells, in order, of each rows of the table.
None.
9.2.18.2.2 asInterconnectionDiagram
Element
RenderingUsage
Description
asInterconnectionDiagram renders a View as an interconnection diagram, using the graphical notation defined
in the SysML specification.
General Types
GraphicalRendering
Features
None.
Constraints
None.
9.2.18.2.3 asTextualNotation
Element
RenderingUsage
Description
asTextualNotation renders a View into textual notation as defined in the KerML and SysML specifications.
General Types
TextualRendering
Features
None.
Constraints
None.
9.2.18.2.4 asTreeDiagram
Element
RenderingUsage
Description
General Types
GraphicalRendering
Features
None.
Constraints
None.
9.2.18.2.5 GraphicalRendering
Element
RenderingDefinition
Description
General Types
Rendering
Features
None.
Constraints
None.
9.2.18.2.6 Rendering
Element
RenderingDefinition
Description
General Types
Part
Features
None.
9.2.18.2.7 renderings
Element
RenderingUsage
Description
General Types
Rendering
parts
Features
None.
Constraints
None.
9.2.18.2.8 TabularRendering
Element
RenderingDefinition
Description
General Types
Rendering
Features
None.
Constraints
None.
9.2.18.2.9 TextualRendering
Element
RenderingDefinition
Description
General Types
Rendering
Features
None.
Constraints
None.
9.2.18.2.10 View
Element
ViewDefinition
Description
General Types
Part
Features
viewpointConformance : viewpointConformance
Constraints
None.
9.2.18.2.11 ViewpointCheck
Element
Description
General Types
RequirementCheck
Features
Constraints
None.
9.2.18.2.12 viewpointChecks
Element
ViewpointUsage
Description
General Types
ViewpointCheck
requirementChecks
Features
None.
Constraints
None.
9.2.18.2.13 viewpointConformance
Element
SatisfyRequirementUsage
Description
General Types
Features
Constraints
None.
9.2.18.2.14 views
Element
ViewUsage
Description
General Types
parts
View
Features
None.
Constraints
None.
This package defines normative standard view definitions that shall be supported by any tool conforming to the
SysML graphical notation. The standard view definitions include filter conditions to specify valid contents for the
view, which shall then be rendered as specified in the graphical notation grammar (see 8.2.3 ). Table 33 lists all the
standard view definitions contained in the package, along with the corresponding graphical notation subclause that
specifies the rendering of each view.
Note. Visualization of SysML models is not limited to these standard views. User-defined view definitions and
usages can be used to provide a wide range of views beyond the standard set (see 8.2.2.25 , 8.2.3.25 , and 8.3.25 ).
Action Flow View (afv) Default compartment for an action, see 8.2.3.16 .
State Transition View (stv) Default compartment for a state, see 8.2.3.17 .
9.2.19.2 Elements
9.2.19.2.1 ActionFlowView
Element
ViewDefinition
Description
ViewDefinition to present connections between actions. Valid nodes and edges in an ActionFlowView are:
InterconnectionView
Features
None.
Constraints
None.
9.2.19.2.2 BrowserView
Element
ViewDefinition
Description
ViewDefinition to present the hierarchical membership structure of model elements starting from an exposed root
element. The typical rendering in graphical notation is as an indented list of rows, consisting of dynamically
collapsible-expandable nodes that represent branches and leaves of the tree.
Short name: bv
General Types
None.
Features
None.
Constraints
None.
9.2.19.2.3 GeneralView
Element
ViewDefinition
Description
ViewDefinition to present any members of exposed model element(s). This is the most general view, enabling
presentation of any model element. The typical rendering in graphical notation is as a graph of nodes and edges.
Note: filters are specified by referencing concepts from the KerML and SysML standard library packages.
Short name: gv
General Types
None.
Features
None.
Constraints
None.
9.2.19.2.4 GeometryView
Element
ViewDefinition
Description
ViewDefinition to present a visualization of exposed spatial items in two or three dimensions Valid nodes and
edges in a GeometryView are:
The typical rendering in graphical notation would include a number of visualization parameters, such as:
• 2D or 3D view
• viewing direction
• zoom level
• light sources
• object projection mode, e.g., isometric, perspective, orthographic
• object rendering mode, e.g., shaded, wireframe, hidden line
• object pan (placement) and rotate (orientation) settings
• color maps
General Types
None.
Features
Constraints
None.
9.2.19.2.5 GridView
Element
ViewDefinition
Description
ViewDefinition to present exposed model elements and their relationships, arranged in a rectangular grid.
GeometryView is the generalization of the following more specialized views:
• Tabular view
• Data value tabular view
• Relationship matrix view
General Types
None.
Features
None.
Constraints
None.
9.2.19.2.6 InterconnectionView
Element
ViewDefinition
Description
ViewDefinition to present exposed features as nodes, nested features as nested nodes, and connections between
features as edges between (nested) nodes. Nested nodes may present boundary features (e.g., ports, parameters).
Short name: iv
General Types
None.
Features
None.
None.
9.2.19.2.7 SequenceView
Element
ViewDefinition
Description
ViewDefinition to present time ordering of event occurrences on lifelines of exposed features. Valid nodes and
edges in a SequenceView are:
The typical rendering in graphical notation depicts the exposed features horizontally along the top, with vertical
lifelines. The time axis is vertical, with time increasing from top to bottom.
Short name: sv
General Types
None.
Features
None.
Constraints
None.
9.2.19.2.8 StateTransitionView
Element
ViewDefinition
Description
ViewDefinition to present states and their transitions. Valid nodes and edges in a StateTransitionView are:
InterconnectionView
Features
None.
Constraints
None.
9.2.20 Metadata
9.2.20.1 Metadata Overview
This package defines the base types for metadata definitions and related metadata annotations in the SysML
language.
9.2.20.2 Elements
9.2.20.2.1 MetadataItem
Element
MetadataDefinition
Description
MetadataItem is the most general class of Items that represent Metaobjects. MetadataItem is the base type of
all MetadataDefinitions.
General Types
Item
Metaobject
Features
None.
Constraints
None.
9.2.20.2.2 metadataItems
Element
ItemUsage
Description
Note: It is not itself a MetadataUsage, because it is not being used as an AnnotatingElement here.
items
MetadataItem
metaobjects
Features
None.
Constraints
None.
9.2.21 SysML
SYSML2_-209: isOrdered and isUnique are missing from the reflective abstract mapping
This package contains a reflective SysML model of the SysML abstract syntax. It is generated from the normative
MOF abstract syntax model (see 8.3 ) as follows.
1. The SysML model imports all elements from the reflective KerML package (see [KerML, 9.2.17]) and
directly contains all metaclasses mapped from the SysML abstract syntax, without any subpackaging.
2. A metaclass from the MOF model is mapped into a MetadataDefinition in the KerML package.
◦ The MOF metaclass name is mapped unchanged.
◦ Generalizations of the MOF metaclass are mapped to ownedSpecializations.
◦ All properties from the MOF metaclass are mapped to usages of the corresponding
MetadataDefinition (see below). All non-association-end properties are grouped before
association-end properties.
3. A property from the MOF model is mapped into an AttributeUsage or ItemUsage, depending on
whether the MOF property type is a data type or a class.
◦ The following feature properties are set as appropriate:
▪ isAbstract = true if the MOF property is a derived union
▪ isReadonly = true if the MOF property is read-only.
▪ isDerived = true if the MOF property is derived.
▪ isReferential = true if the MOF property is not composite.
▪ isOrdered = true if the MOF property is ordered
▪ isUnique = false if the MOF property is non-unique
◦ The MOF property name is mapped unchanged.
◦ The MOF property type is mapped to an ownedTyping relationship.
▪ If the MOF property type is a primitive type, the relationship is to the corresponding
type from the ScalarValues package (see [KerML, 9.3.2]).
▪ If the MOF property type is a metaclass, the relationship is to the corresponding
reflective MetadataDefinition.
◦ The MOF property multiplicity is mapped to an owned MultiplicityRange with bounds
given by LiteralExpressions.
◦ Subsetted properties from the MOF property are mapped to ownedSubsettings of the
corresponding reflective Features or Usages.
◦ Redefined properties from the MOF property are mapped to ownedRedefinitions of the
corresponding reflective Features or Usages.
◦ If the MOF property is annotatedElement, then Metaobject::annotatedElement is
added to the list of redefined properties for the mapping.
Note that associations are not mapped from the MOF model and, hence, non-navigable association-owned end
properties are not included in the reflective model.
This package contains definitions of metadata generally useful for annotating models.
9.3.2.2 Elements
9.3.2.2.1 Issue
Element
MetadataDefinition
Description
General Types
MetadataItem
Features
text : String
Constraints
None.
9.3.2.2.2 Rationale
Element
MetadataDefinition
Description
Rationale is used to explain a choice or other decision made related to the annotated element.
MetadataItem
Features
A reference to a Feature that provides a formal explanation of the rationale. (For example, a trade study whose
result explains the choice of a certain alternative).
text : String
Constraints
None.
9.3.2.2.3 Refinement
Element
MetadataDefinition
Description
Refinement is used to identify a Dependency as modeling a refinement relationship. In such a relationship, the
source elements of the relationship provide a more precise and/or accurate representation than the target elements.
General Types
MetadataItem
Features
Constraints
None.
9.3.2.2.4 StatusInfo
Element
MetadataDefinition
Description
General Types
MetadataItem
status : StatusKind
Constraints
None.
9.3.2.2.5 StatusKind
Element
EnumerationDefinition
Description
General Types
AttributeValue
Features
closed
Status is closed.
done
Status is done.
open
Status is open.
tbc
Status is to be confirmed.
tbd
tbr
Status is to be resolved.
Constraints
None.
This package defines metadata for annotating model elements with assessments of risk.
9.3.3.2 Elements
9.3.3.2.1 Level
Element
AttributeDefinition
Description
General Types
AttributeValue
Real
Features
Constraints
levelRange
9.3.3.2.2 LevelEnum
Element
EnumerationDefinition
Description
LevelEnum provides standard probability Levels for low, medium and high risks.
General Types
Level
high
low
medium
Constraints
None.
9.3.3.2.3 Risk
Element
MetadataDefinition
Description
Risk is used to annotate a model element with an assessment of the risk related to it in some typical risk areas.
General Types
MetadataItem
Features
The risk that work on the annotatedElement will exceed its planned cost.
The risk that work on the annotatedElement will not be completed on schedule.
Constraints
None.
9.3.3.2.4 RiskLevel
AttributeDefinition
Description
RiskLevel gives the probability of a risk occurring and, optionally, the impact if the risk occurs.
General Types
AttributeValue
Features
The impact of the risk if it occurs (with 0.0 being no impact and 1.0 being the most severe impact).
probability : Level
Constraints
None.
9.3.3.2.5 RiskLevelEnum
Element
EnumerationDefinition
Description
RiskLevelEnum enumerates standard RiskLevels for low, medium and high risks (without including impact).
General Types
RiskLevel
Features
high
low
medium
Constraints
None.
This package contains definitions of metadata to identify key parameters of interest, including measures of
effectiveness (MOE) and other key measures of performance (MOP).
9.3.4.2 Elements
9.3.4.2.1 MeasureOfEffectiveness
Element
MetadataDefinition
Description
MeasureOfEffectiveness (short name moe) is semantic metadata for identifying an attribute as a measure of
effectiveness.
General Types
SemanticMetadata
MetadataItem
Features
Constraints
None.
9.3.4.2.2 MeasureOfPerformance
Element
MetadataDefinition
Description
MeasureOfPerformance (short name mop) is semantic metadata for identifying an attribute as a measure of
performance.
General Types
SemanticMetadata
MetadataItem
Features
Constraints
None.
9.3.4.2.3 measuresOfEffectiveness
Element
AttributeUsage
Description
General Types
attributeValues
Features
None.
Constraints
None.
9.3.4.2.4 measuresOfPerformance
Element
AttributeUsage
Description
General Types
attributeValues
Features
None.
Constraints
None.
9.3.5.2 Elements
9.3.5.2.1 Icon
Element
MetadataDefinition
Description
Icon metadata can be used to annotate a model element with an image to be used to show render the element on a
diagram and/or a small image to be used as an adornment on a graphical or textual rendering. Alternatively, another
metadata definition can be annotated with an Icon to indicate that any model element annotated by the containing
metadata can be rendered according to the Icon.
General Types
MetadataItem
Features
A full-sized image that can be used to render the annotated element on a graphical view, potentially as an alternative
to its standard rendering.
A smaller image that can be used as an adornment on the graphical rendering of the annotated element or as a
marker in a textual rendering.
Constraints
None.
9.3.5.2.2 Image
Element
AttributeDefinition
Description
Image provides the data necessary for the physical definition of a graphical image.
General Types
AttributeValue
Features
Binary data for the image according to the given MIME type, encoded as given by the encoding.
Describes how characters in the content are to be decoded into binary data. At least "base64", "hex", "identify", and
"JSONescape" shall be supported.
A URI for the location of a resource containing the image content, as an alternative for embedding it in the content
attribute.
Constraints
None.
This package contains definitions for metadata annotations related to analysis tool integration.
9.4.2.2 Elements
9.4.2.2.1 ToolExecution
Element
MetadataDefinition
Description
ToolExecution metadata identifies an external analysis tool to be used to implement the annotated action.
General Types
MetadataItem
Features
toolName : String
uri : String
Constraints
None.
Element
MetadataDefinition
Description
ToolVariable metadata is used in the context of an action that has been annotated with ToolExecution
metadata. It is used to annotate a parameter or other feature of the action with the name of the variable in the tool
that is to correspond to the annotated feature.
General Types
MetadataItem
Features
name : String
Constraints
None.
A SampledFunction can be used for many engineering purposes. For example, it can represent a time series
observation, where the domain consists of time instants expressed on a given timescale and the range consists of
observed quantity values. It can also capture a physical property of a substance that depends on temperature or
pressure or both.
A SampledFunction with numerical domain and range types can be used as input to an interpolation algorithm in
order to obtain range values for domain values that fall in-between the discretely sampled domain values.
9.4.3.2 Elements
9.4.3.2.1 Domain
Element
CalculationDefinition
Description
General Types
Calculation
Features
fn : SampledFunction
output
Constraints
None.
9.4.3.2.2 Interpolate
Element
CalculationDefinition
Description
An Interpolate calculation returns an interpolated range value from a given SampledFunction for a given
domain value. If the input domain value is outside the bounds of the domainValues of the SampleFunction,
null is returned.
General Types
Calculation
Features
fn : SampledFunction
input
output
value : Anything
input
Constraints
None.
9.4.3.2.3 interpolateLinear
Element
CalculationUsage
Description
General Types
calculations
Features
fn : SampledFunction
input
output
input
Constraints
None.
9.4.3.2.4 Range
Element
CalculationDefinition
Description
General Types
Calculation
Features
fn : SampledFunction
input
output
Constraints
None.
9.4.3.2.5 Sample
Element
CalculationDefinition
Description
General Types
Calculation
Features
input
input
sampling : SampledFunction
output
Constraints
None.
9.4.3.2.6 SampledFunction
Element
AttributeDefinition
Description
It maps discrete domain values to discrete range values. The domain of the function is represented by the sequence
of domainValues of each SamplePair in samples, and the range of the function is represented by the sequence
of rangeValues of each SamplePair in samples.
General Types
OrderedMap
Features
Constraints
[no name]
Note: Assumes the functions '<' and '>' are defined for the domain type.
(1..size(samples)-1)->forAll { in i;
(samples.domainValue[i] < samples.domainValue[i+1]) } or // Strictly increasing
9.4.3.2.7 SamplePair
Element
AttributeDefinition
Description
General Types
KeyValuePair
Features
Constraints
None.
State Space Representation (SSR) is a foundational dynamical systems representation, commonly used in control
systems. In this representation, a system is described by a set of state variables whose evolution by a state equation
(note that this is a different conception of "state" than used in the behavioral state modeling constructs described in
7.17 ). The system outputs are then given by an output equation. This representation provides a description of the
quantitative stateful behavior of the target system in an explicit manner so that external solvers can compute the
behavior by properly integrating input and state variables.
Mathematically, let x be a vector of state variables and x' be its time derivative, u be a vector of inputs, and y be a
vector of outputs. Then the state equation has the form
x' = f(x, u) ,
for some system-specific function f, and the output equation has the form
y = g(x, u) ,
The StateSpaceRepresentation library model is a model of this representation in terms of SysML actions and
calculations. These can be used in combination with end-user action models to describe system functional behaviors.
9.4.4.2 Elements
Fig. 54 shows the action definitions in the State Space Representation library. This library defines
StateSpaceDynamics as the base abstract action definition, which provides the basic structure of input, output,
This package provides a simple framework for defining trade-off study analysis cases.
Element
CalculationDefinition
Description
General Types
Calculation
Features
alternative : Anything
Constraints
None.
9.4.5.2.2 MaximizeObjective
Element
RequirementDefinition
Description
General Types
TradeStudyObjective
Features
None.
9.4.5.2.3 MinimizeObjective
Element
RequirementDefinition
Description
General Types
TradeStudyObjective
Features
Constraints
None.
9.4.5.2.4 TradeStudy
Element
AnalysisCaseDefinition
Description
A TradeStudy is an analysis case whose subject is a set of alternatives (at least one) and whose result is a selection
of one of those alternatives. The alternatives are evaluated based on a given ObjectiveFunction and the selection
is made such that it satisfies the objective of the TradeStudy (which must be a TradeStudyObjective).
General Types
AnalysisCase
Features
selectedAlternative : Anything
The alternative selected by this TradeStudy, which is the one that meets the requirement of the
tradeStudyObjective.
In a TradeStudy usage, bind this feature to the actual collection of alternatives to be considered.
tradeStudyObjective : TradeStudyObjective
Redefine this feature to give it a definition that is a concrete specialization of TradeStudyObjective. That can
either be one of the specializations provided in this package, or a more specific user-defined one.
Constraints
None.
9.4.5.2.5 TradeStudyObjective
Element
RequirementDefinition
Description
A TradeStudyObjective is the base definition for the objective of a TradeStudy. The requirement is to choose
from a given set of alternatives the selectedAlternative for that has the best evaluation according to a given
EvaluationFunction. What value is considered "best" is not defined in the abstract base definition but must be
computed in any concrete specialization.
General Types
RequirementCheck
Features
The alternatives being considered in the TradeStudy for which this TradeStudyObjective is the objective.
best : ScalarValue
Out of the evaluation results of all the given alternatives, the one that is considered "best", in the sense that it is the
value the selectedAlternative should have. This value must be computed in any concrete specialization of
TradeStudyObjective/em>.
fn : EvaluationFunction
The alternative that should be selected, as evaluated using the given EvaluationFunction.
Constraints
[no name]
fn(selectedAlternative) == best
This package provides a library model modeling causes, effects, and causation connections between them.
9.5.2.2 Elements
9.5.2.2.1 Causation
Element
ConnectionDefinition
Description
A Causation is a binary Multicausation in which a single cause occurrence causes a single effect occurrence.
(However, a single cause can separately have multiple effects, and a single effect can have separate Causation
connections with multiple causes.)
General Types
Multicausation
BinaryConnection
Features
Constraints
None.
9.5.2.2.2 causations
ConnectionUsage
Description
General Types
multicausations
Causation
Features
None.
Constraints
None.
9.5.2.2.3 causes
Element
OccurrenceUsage
Description
General Types
occurrences
Features
None.
Constraints
None.
9.5.2.2.4 effects
Element
OccurrenceUsage
Description
General Types
Features
None.
Constraints
None.
9.5.2.2.5 Multicausation
Element
ConnectionDefinition
Description
A Multicausation connection models the situation in which one set of occurrences causes another. All causes
must at least exist before all effects.
To create a Multicausation connection, specialize this connection definition adding specific end features of the
relavent types. Ends representing causes should subset causes, while ends representing effects should subset
effects. There must be at least one cause and at least one effect.
General Types
Connection
Features
Constraints
disjointCauseEffect
isEmpty(intersection(causes, effects))
9.5.2.2.6 multicausations
Element
ConnectionUsage
General Types
Multicausation
connections
Features
None.
Constraints
None.
9.5.3.2 Elements
9.5.3.2.1 CausationMetadata
Element
MetadataDefinition
Description
General Types
MetadataItem
Features
isNecessary : Boolean
Whether all the causes are necessary for all the effects to occur. If this is false (the default), then some or all of the
effects may still have occurred even if some of the causes did not.
isSufficient : Boolean
Whether the causes were sufficient for all the effects to occur. If this is false (the default), then it may be the case
that some other occurrences were also necessary for some or all of the effects to have occurred.
The probability that the causes will actually result in effects occurring.
Constraints
None.
9.5.3.2.2 CausationSemanticMetadata
Element
MetadataDefinition
Description
General Types
SemanticMetadata
CausationMetadata
Features
Constraints
None.
9.5.3.2.3 CauseMetadata
Element
MetadataDefinition
Description
CauseMetadata (short name cause) identifies a Usage as being a cause occurrence. It is intended to be used to tag
the cause ends of a Multicausation.
General Types
SemanticMetadata
MetadataItem
Features
Constraints
None.
9.5.3.2.4 EffectMetadata
Element
MetadataDefinition
Description
EffectMetadata (short name effect) identifies a Usage as being a effect occurrence. It is intended to be used to
tag the effect ends of a Multicausation.
General Types
SemanticMetadata
MetadataItem
Features
Constraints
None.
9.5.3.2.5 MulticausationSemanticMetadata
Element
MetadataDefinition
Description
General Types
SemanticMetadata
CausationMetadata
Features
Constraints
None.
This package provides a library model for derivation connections between requirements.
9.6.2.2 Elements
9.6.2.2.1 Derivation
Element
ConnectionDefinition
Description
A Derivation connection asserts that one or more derivedRequirements are derived from a single
originalRequirement. This means that any subject that satisfies the originalRequirement should, in itself or
though other things related to it, satisfy each of the derivedRequirements.
A ConnectionUsage typed by Derivation must have RequirementUsages for all its ends. The single end for
the original requirement should subset originalRequirement, while the rest of the ends should subset
derivedRequirements.
General Types
Connection
Features
The one or more requirements that are derived from the original requirement.
Constraints
Whenever the originalRequirement is satisfied, all of the derivedRequirements must also be satisfied.
originalNotDerived
derivedRequirements->excludes(originalRequirement)
9.6.2.2.2 derivations
Element
ConnectionUsage
Description
General Types
Derivation
connections
Features
None.
Constraints
None.
9.6.2.2.3 derivedRequirements
Element
RequirementUsage
Description
General Types
occurrences
Features
None.
Constraints
None.
Element
RequirementUsage
Description
General Types
occurrences
Features
None.
Constraints
None.
9.6.3.2 Elements
9.6.3.2.1 DerivationMetadata
Element
MetadataDefinition
Description
General Types
SemanticMetadata
MetadataItem
Features
baseType : Type
Constraints
9.6.3.2.2 DerivedRequirementMetadata
Element
MetadataDefinition
Description
General Types
SemanticMetadata
MetadataItem
Features
annotatedElement : Usage
baseType : Type
Constraints
None.
9.6.3.2.3 OriginalRequirementMetadata
Element
MetadataDefinition
Description
General Types
SemanticMetadata
MetadataItem
Features
annotatedElement : Usage
baseType : Type
None.
This package models physical items that have a spatial extent and act as a spatial frame of reference for obtaining
position and displacement vectors of points within them.
9.7.2.2 Elements
9.7.2.2.1 CurrentDisplacementOf
Element
CalculationDefinition
Description
The CurrentDisplacementOf two Points relative to a SpatialItem and a Clock is the DisplacementOf the
Points relative to the SpacialItem, at the currentTime of the Clock.
General Types
CurrentDisplacementOf
Features
Constraints
None.
9.7.2.2.2 CurrentPositionOf
Element
CalculationDefinition
Description
General Types
CurrentPositionOf
Features
Constraints
None.
9.7.2.2.3 DisplacementOf
Element
CalculationDefinition
Description
General Types
DisplacementOf
Features
Constraints
zeroDisplacementConstraint
If either point1 or point2 occurs within the other, then the displacementVector is the zero vector.
9.7.2.2.4 PositionOf
Element
CalculationDefinition
Description
General Types
PositionOf
Features
Constraints
positionTimePrecondition
spacePositionConstraint
The result positionVector is equal to the PositionOf the Point spaceShot of the frame that encloses the
given point, at the given time.
9.7.2.2.5 SpatialItem
Element
ItemDefinition
Description
General Types
Item
SpatialFrame
Features
A SpatialItem with componentItems is entirely made up of those items (the SpatialItem occurs only as a
collection of its componentItems). By default they have the same localClock and equivalent
coordinateFrame as the SpatialItem they make up. A SpatialItem without componentItems occurs on its
own, separately from its subitems.
coordinateFrame : VectorMeasurementReference
The three-dimensional VectorMeasurementReference to be used as the measurement reference for position and
displacement vector values relative to this SpatialItem.
A local Clock to be used as the corresponding time reference within this SpatialItem. By default this is the
singleton Time::universalClock.
originPoint : Point
Constraints
originPointConstraint
isZeroVector(CurrentPositionOf(originPoint, SpatialItem::self))
This package defines basic geometric Items, most of which can be used as shapes of other Items (see 7.10 ).
Their innerSpaceDimensions are either 1 (Curves) or 2 (Surfaces), which is the number of variables needed
to identify any space point occupied by an Item, without regard to higher dimensional spaces in which it might be
embedded (see Occurrences and Objects in [KerML]). All are StructuredSpaceObjects (Paths and
Shells for Curves and Surfaces, respectively), except for Lines. This enables them to divide their
spaceSlices into faces, edges, and vertices, identifying Surfaces, Curve, and Points, respectively.
Paths have no faces, but Shells do. All the Paths and Shells are closed (isClosed=true, they have no
shape), except for Discs, enabling them to be shapes of other Items.
9.7.3.2 Elements
9.7.3.2.1 Circle
Element
Description
General Types
Ellipse
Features
radius : LengthValue
Constraints
None.
9.7.3.2.2 CircularCone
Element
ItemDefinition
Description
General Types
Cone
Features
radius : LengthValue
Constraints
None.
9.7.3.2.3 CircularCylinder
Element
ItemDefinition
Description
General Types
Cylinder
Features
radius : LengthValue
Constraints
None.
9.7.3.2.4 CircularDisc
Element
Description
General Types
Disc
Features
radius : LengthValue
Constraints
None.
9.7.3.2.5 Cone
Element
ItemDefinition
Description
General Types
Features
Constraints
None.
9.7.3.2.6 ConeOrCylinder
Element
ItemDefinition
Description
A ConeOrCylinder is a Cone or a Cylinder with a given elliptical base, height, width (perpendicular distance
from the base to the center of the top side or vertex), and offsets of this perpendicular at the base from the center of
the base.
General Types
Shell
Features
cf {subsets faces}
height : LengthValue
semiMajorAxis : LengthValue
semiMinorAxis : LengthValue
xoffset : LengthValue
Constraints
None.
9.7.3.2.7 ConicSection
Element
ItemDefinition
Description
General Types
Path
PlanarCurve
Features
Constraints
None.
9.7.3.2.8 ConicSurface
Element
ItemDefinition
Description
General Types
Shell
Features
None.
9.7.3.2.9 Cuboid
Element
ItemDefinition
Description
General Types
CuboidOrTriangularPrism
Features
Constraints
None.
9.7.3.2.10 CuboidOrTriangularPrism
Element
ItemDefinition
Description
General Types
Polyhedron
Features
Constraints
None.
9.7.3.2.11 Cylinder
Element
ItemDefinition
General Types
ConeOrCylinder
Features
af {redefines af}
Constraints
None.
9.7.3.2.12 Disc
Element
ItemDefinition
Description
General Types
Shell
PlanarSurface
Features
semiMajorAxis : LengthValue
semiMinorAxis : LengthValue
Constraints
None.
Element
ItemDefinition
Description
General Types
Cone
Features
None.
Constraints
None.
9.7.3.2.14 EccentricCylinder
Element
ItemDefinition
Description
An EccentricCylinder is a Cylinder
General Types
Cylinder
Features
None.
Constraints
None.
9.7.3.2.15 Ellipse
Element
ItemDefinition
Description
General Types
Features
semiMajorAxis : LengthValue
semiMinorAxis : LengthValue
Constraints
None.
9.7.3.2.16 Ellipsoid
Element
ItemDefinition
Description
General Types
ConicSurface
Features
semiAxis1 : LengthValue
semiAxis2 : LengthValue
semiAxis3 : LengthValue
Constraints
None.
9.7.3.2.17 Hyperbola
Element
ItemDefinition
Description
General Types
ConicSection
Features
tranverseAxis : LengthValue
Constraints
None.
9.7.3.2.18 Hyperboloid
Element
ItemDefinition
Description
General Types
ConicSurface
Features
conjugateAxis : LengthValue
transverseAxis : LengthValue
Constraints
None.
9.7.3.2.19 Line
Element
ItemDefinition
Description
General Types
PlanarCurve
Features
Constraints
None.
9.7.3.2.20 Parabola
Element
Description
General Types
ConicSection
Features
focalDistance : LengthValue
Constraints
None.
9.7.3.2.21 Paraboloid
Element
ItemDefinition
Description
General Types
ConicSurface
Features
focalDistance : LengthValue
Constraints
None.
9.7.3.2.22 Path
Element
ItemDefinition
Description
General Types
Curve
StructuredSpaceObject
Features
Constraints
None.
9.7.3.2.23 PlanarCurve
Element
ItemDefinition
Description
General Types
Item
Curve
Features
length : LengthValue
Constraints
None.
9.7.3.2.24 PlanarSurface
Element
ItemDefinition
Description
General Types
Item
Features
area : LengthValue
Constraints
None.
9.7.3.2.25 Polygon
Element
ItemDefinition
Description
General Types
Path
PlanarCurve
Features
Constraints
None.
9.7.3.2.26 Polyhedron
Element
ItemDefinition
Description
General Types
Shell
Features
isClosed
Constraints
None.
9.7.3.2.27 Pyramid
Element
ItemDefinition
Description
p>A Pyramid is a Polyhedron with the sides of a polygon (base) forming the bases of triangles that join at an
apex point. Its height is the perpindicular distance from the base to the apex, and its offsets are between this
perpindicular at the base and the center of the base.
General Types
Polyhedron
Features
faces [0..*]
height : LengthValue
wallNumber : Positive
xoffset : LengthValue
yoffset : LengthValue
Constraints
None.
9.7.3.2.28 Quadrilateral
Element
Description
General Types
Polygon
Features
e1
e2
e3
Constraints
None.
9.7.3.2.29 Rectangle
Element
ItemDefinition
Description
A Rectangle is a Quadrilateral with four right angles and given length and width.
General Types
Quadrilateral
Features
length : LengthValue
width : LengthValue
Constraints
None.
Element
ItemDefinition
Description
General Types
Cuboid
Features
height : LengthValue
length : LengthValue
width : LengthValue
Constraints
None.
9.7.3.2.31 RectangularPyramid
Element
ItemDefinition
Description
General Types
Pyramid
Features
baseLength : LengthValue
Constraints
None.
9.7.3.2.32 RectangularToroid
Element
ItemDefinition
Description
General Types
Toriod
Features
rectangleLength : LengthValue
rectangleWidth : LengthValue
Constraints
None.
9.7.3.2.33 RightCircularCone
Element
ItemDefinition
Description
General Types
CircularCone
Features
Constraints
None.
9.7.3.2.34 RightCircularCylinder
ItemDefinition
Description
General Types
CircularCylinder
Features
Constraints
None.
9.7.3.2.35 RightTriangle
Element
ItemDefinition
Description
General Types
Triangle
Features
Constraints
None.
9.7.3.2.36 RightTriangularPrism
Element
ItemDefinition
Description
A RightTriangularPrism is a TriangularPrism with two right triangular sides, with given length, width,
and height.
TriangularPrism
Features
height : LengthValue
length : LengthValue
width : LengthValue
Constraints
None.
9.7.3.2.37 Shell
Element
ItemDefinition
Description
General Types
Item
StructuredSpaceObject
Surface
Features
None.
Constraints
None.
9.7.3.2.38 Sphere
Element
ItemDefinition
General Types
Ellipsoid
Features
radius : LengthValue
semiAxis2
Constraints
None.
9.7.3.2.39 Tetrahedron
Element
ItemDefinition
Description
General Types
Pyramid
Features
baseLength : LengthValue
baseWidth : LengthValue
Constraints
None.
9.7.3.2.40 Toriod
Element
ItemDefinition
Description
A Toroid is a surface generated from revolving a planar closed curve about an line coplanar with the curve. It is
single sided with one hole.
Shell
Features
revolutionRadius : LengthValue
revolvedCurve : PlanarCurve
Constraints
None.
9.7.3.2.41 Torus
Element
ItemDefinition
Description
General Types
Toriod
Features
minorRadius : LengthValue
Constraints
None.
9.7.3.2.42 Triangle
Element
ItemDefinition
Description
General Types
Polygon
Features
e2 {subsets edges}
e3 {subsets edges}
length : LengthValue
width : LengthValue
xoffset : LengthValue
Constraints
None.
9.7.3.2.43 TriangularPrism
Element
ItemDefinition
Description
A TriangularPrism is a Polyhedron with five sides, two triangular and the others quadrilateral.
General Types
CuboidOrTriangularPrism
Features
Constraints
None.
The Quantities and Units Domain Library defines reusable and extensible model elements for physical quantities,
including vector and tensor quantities, quantity dimensions, measurement units, measurement scales, coordinate
frames, coordinate transformations and vector spaces. The library also enables the specification of coherent systems
of quantities and systems of units, as well as the operators and functions needed to support quantity arithmetic in
expressions.
The most widely accepted, scrutinized, and globally used specification of quantities and units is captured and
maintained in:
The ISQ and SI are formally standardized through the ISO/IEC 80000 series of standards. The top level concepts
and semantics defined in this domain library are derived from and mapped to the concepts and semantics specified
in [ISO 80000-1] and [VIM], as directly as possible, but staying at a generic level. This enables the representation of
the ISQ and the SI, but also of any other system of quantities or system of units.
The data model specifies a precise representation of the relationships between quantities, units, scales, quantity
dimensions, coordinate frames, coordinate transformations and vectors spaces. As a result, both robust automated
conversion between quantity values expressed in compatible measurement units or scales is enabled, as well as static
type and quantity dimension analysis of expressions and constraints.
This library further contains lower level packages that specify the actual quantities, units and scales as standardized
in parts 3 to 13 of the ISO/IEC 80000 series as SysML AttributeDefinitions and AttributeUsages, that
represent the complete ISQ and SI. These packages provide a broad common basis, that can be extended and tailored
for use by particular communities of practice and industry sectors.
Apart from SI, the system of US Customary Units is still in wide industrial use, in particular in North America. The
library therefore also contains a package of US Customary Units, as specified in [NIST SP-811], and including their
relationships with ISQ quantities as well as the conversion factors to corresponding SI units.
9.8.2 Quantities
9.8.2.1 Quantities Overview
Taxonomy
The Quantities package defines the root elements to represent quantities and their values.
Quantity Values
For a ScalarQuantityValue, the sequence of numbers collapses to one single number, and the measurement
reference is typically a measurement unit or scale. For a VectorQuantityValue, there must be as many numbers
as needed to define the magnitude and direction of the vector quantity, and a measurement reference that typically
specifies a coordinate frame, e.g., a sequence of 3 numbers for the vector components in a standard orthonormal
Cartesian 3D vector space with the same measurement unit on each of the axes. For a TensorQuantityValue, the
measurement reference must establish a reference frame compliant with the full dimensionality of the tensor
quantity involved.
Note. The specification of a quantity value as a tuple of its numerical value and a measurement reference has the big
advantage that the type of a quantity value becomes independent from the choice of measurement reference. For
example: a power expressed as 1.5 watt has the same type (AttributeDefinition PowerValue) as a power
expressed as 1500 milliwatt. This is an improvement over SysML v1, where the choice of measurement unit or scale
was embedded in the value property type.
A TensorQuantityValue can be defined with respect to a free vector space product or a bound vector space
product. Similarly, a VectorQuantityValue can be defined with respect to a free or a bound vector space, and a
ScalarQuantityValue with respect to a free or bound number line, which can be regarded as a one-dimensional
vector space. In a free vector space, vectors can be added and vectors can be multiplied by a scalar number, where
both operations yield a new free vector. Free vectors have only magnitude and direction. A bound vector space
includes a particular choice of origin, and vectors in such a space can not be added nor multiplied by scalars.
AttributeUsage isBound is used to capture this: false specifies a free vector space (product), and true
specifies a bound vector space (product).
Examples that (informally) illustrate the distinction between free and bound vector quantities are given by pairs of
quantities of the same quantity dimension:
1. Displacement vector (free) and position vector (bound), both of quantity dimension length.
Two displacement vectors can be added and yield a resulting displacement vector. A displacement vector
can also be multiplied with a scalar factor, which changes only its magnitude. Two position vectors can
not be added, nor can a position vector be multiplied by a scalar number. A position vector is always
bound to the origin of its bound vector space. One can however subtract one position vector from another,
and the result is a displacement vector. It is the displacement to get from the position defined by the first
vector to that defined by the second vector.
2. Duration (free scalar) and time instant (bound scalar), both of quantity dimension time.
Durations can be added and multiplied, time instants cannot. Time instant values can only be specified
with respect to a measurement reference that is a time scale with some particular choice of zero. Such a
time scale is the same as a (time) coordinate axis in a one-dimensional bound vector space.
9.8.2.2 Elements
9.8.2.2.1 3dVectorQuantityValue
AttributeDefinition
Description
Alias: ThreeDVectorQuantityValue
General Types
VectorQuantityValue
Features
Constraints
None.
9.8.2.2.2 QuantityDimension
Element
AttributeDefinition
Description
A QuantityDimension is the product of powers of the set of base quantities defined for a particular system of
quantities, units and scales.
General Types
None.
Features
Constraints
None.
9.8.2.2.3 QuantityPowerFactor
Element
AttributeDefinition
Description
A QuantityPowerFactor is a representation of a quantity power factor, being the combination of a quantity and
an exponent.
General Types
None.
Features
exponent : Real
quantity : ScalarQuantityValue
Constraints
None.
9.8.2.2.4 scalarQuantities
Element
AttributeUsage
Description
Any particular scalar quantity attribute is specified by subsetting scalarQuantities. In other words, the co-
domain of a scalar quantity attribute is a suitable specialization of ScalarQuantityValue.
General Types
ScalarQuantityValue
vectorQuantities
Features
None.
Constraints
None.
9.8.2.2.5 ScalarQuantityValue
Element
AttributeDefinition
Description
General Types
NumericalValue
VectorQuantityValue
Features
Constraints
oneElement
dimensions[1] == 1
9.8.2.2.6 SystemOfQuantities
Element
AttributeDefinition
Description
General Types
None.
Features
Constraints
None.
9.8.2.2.7 tensorQuantities
Element
AttributeUsage
Description
General Types
dataValues
TensorQuantityValue
Features
None.
Constraints
None.
9.8.2.2.8 TensorQuantityValue
Element
AttributeDefinition
Description
The dimensionality of the tensor quantity is specified in dimensions, from which the order of the tensor is
derived. In engineering the name 'tensor' is typically used if its order is 2 or greater, but mathematically a tensor can
have order 0 or 1.
A TensorQuantityValue must have the same dimensions and order as the TensorMeasurementReference
that it references via AttributeUsage mRef.
It is possible to specify the contravariant and covariant order of a tensor quantity through the AttributeUsages
contravariantOrder and covariantOrder, the sum of which must be equal to order. In applications where it
is not important to distinguish between contravariant and covariant tensors (or vectors), the convention is to use
contravariant by default and therefore set contravariantOrder equal to order, and covariantOrder equal to
zero.
General Types
Array
Features
contravariantOrder : Positive
covariantOrder : Positive
Examples: for a second order 3D tensor dimensions = (3, 3); for fourth order 2D tensor dimensions = (2,
2, 2, 2);
The dimensions must be the same as the dimensions of the associated mRef.
isBound : Boolean
Assertion whether this tensor quantity is defined in a free (isBound == false) or bound (isBound == true)
vector space product.
mRef : TensorMeasurementReference
Sequence of numbers that specify the numerical value of the tensor quantity.
Order of the tensor quantity. The order is equal to the order of the associated TensorMeasurementReference
mRef.
Constraints
boundMatch
orderSum
9.8.2.2.9 vectorQuantities
Element
AttributeUsage
Description
Any particular vector quantity attribute is specified by subsetting vectorQuantities. In other words, the co-
domain of a vector quantity attribute is a suitable specialization of VectorQuantityValue.
General Types
tensorQuantities
VectorQuantityValue
Features
Constraints
None.
9.8.2.2.10 VectorQuantityValue
Element
AttributeDefinition
Description
A VectorQuantityValue can be free (isBound == false) or bound (isBound == true). A value of a free
vector quantity is expressed using a free VectorMeasurementReference, in which there is no particular choice of
zero or origin. A value of a bound vector quantity is expressed using a bound VectorMeasurementReference
that includes a specified choice of origin. In both cases the VectorMeasurementReference typically defines a
coordinate system.
General Types
NumericalVectorValue
TensorQuantityValue
Features
Constraints
[no name]
order == 1
This package defines the general AttributeDefinitions and AttributeUsages to construct measurement
references. This includes:
• measurement units,
• ordinal, logarithmic and cyclic measurement scales,
• unit conversions,
• coordinate frames and coordinate transformations,
• measurement unit prefixes to denote multiples (such as mega) and sub-multiples (such as nano).
9.8.3.2 Elements
9.8.3.2.1 3dCoordinateFrame
Element
AttributeDefinition
Description
General Types
CoordinateFrame
Features
Constraints
None.
9.8.3.2.2 AffineTransformationMatrix3d
Element
AttributeDefinition
Description
( R, R, R, T,
R, R, R, T,
R, R, R, T,
0, 0, 0, 1 )
where the cells marked R form the rotation matrix and the cells marked T form the translation vector.
General Types
Array
Features
Constraints
validSourceDimensions
source.dimensions == 3
9.8.3.2.3 ConversionByConvention
Element
AttributeDefinition
Description
An example is the conversion relationship between "foot" (the owning MeasurementUnit) and "metre" (the
referenceUnit MeasurementUnit), with conversionFactor 3048/10000, since 1 foot = 0.3048 metre, as
defined in [NIST SP-811].
General Types
UnitConversion
Features
None.
Constraints
None.
9.8.3.2.4 ConversionByPrefix
Element
AttributeDefinition
Description
Example 1: "kilometre" (symbol "km") with the 'kilo' UnitPrefix denoting conversion factor 1000 and
referenceUnit "metre".
Example 3: "mebibyte" (symbol "MiB" or alias "MiByte") with the 'mebi' UnitPrefix denoting conversion factor
1024^2 (a binary multiple) and referenceUnit "byte".
General Types
UnitConversion
Features
The Number value of the ratio between the quantity expressed in the owning MeasurementUnit over the quantity
expressed in the referenceUnit.
prefix : UnitPrefix
A UnitPrefix that represents one of the named unit prefixes defined in [ISO/IEC 80000-1] as a decimal or binary
multiple or sub-multiple.
Constraints
None.
9.8.3.2.5 CoordinateFrame
Element
AttributeDefinition
Description
The optional attribute transformation enables specification of the location and orientation of this
CoordinateFrame as with respect to another (reference) CoordinateFrame. If the target of the
transformation is this CoordinateFrame, the transformation specifies a CoordinateFrame that is nested
inside the CoordinateFrame that is the source of the transformation. The primary use of this is to specify a
chain of nested coordinate frames follows the composite structure of a physical architecture. Typically the source
CoordinateFrame of the transformation is the frame is the frame of the next higher containing Item or Part
in a composite structure.
General Types
VectorMeasurementReference
Features
Constraints
9.8.3.2.6 CoordinateFramePlacement
Element
AttributeDefinition
Description
General Types
CoordinateTransformation
Features
origin : VectorQuantityValue
Constraints
validBasisDirectionsDimensions
validBasisDirectionsSize
validOriginDimensions
origin.dimensions == source.dimensions
9.8.3.2.7 CoordinateTransformation
Element
AttributeDefinition
Description
General Types
None.
source : VectorMeasurementReference
target : VectorMeasurementReference
Constraints
[no name]
[no name]
size(basisDirections) == source.dimensions[1]
[no name]
origin.mRef == source
validSourceTargetDimensions
source.dimensions == target.dimensions
9.8.3.2.8 countQuantities
Element
AttributeUsage
Description
General Types
dimensionOneQuantities
CountValue
Features
None.
Constraints
None.
9.8.3.2.9 CountValue
Element
AttributeDefinition
Description
General Types
Features
None.
Constraints
None.
9.8.3.2.10 CyclicRatioScale
Element
AttributeDefinition
Description
Example 1: "cyclic degree" (to express planar angular measures) with modulus 360 and unit 'degree'.
General Types
MeasurementScale
Features
modulus : Number
Attribute modulus is a Number that defines the modulus, i.e. periodic cycle, of this CyclicRatioScale.
Constraints
None.
9.8.3.2.11 DefinitionalQuantityValue
Element
AttributeDefinition
Description
General Types
None.
Features
Constraints
None.
9.8.3.2.12 DerivedUnit
Element
AttributeDefinition
Description
DerivedUnit is a MeasurementUnit that represents a measurement unit that depends on one or more powers of
other measurement units.
General Types
MeasurementUnit
Features
None.
Constraints
None.
9.8.3.2.13 dimensionOneQuantities
Element
AttributeUsage
Description
General Types
DimensionOneValue
scalarQuantities
Features
None.
Constraints
None.
9.8.3.2.14 DimensionOneUnit
Element
Description
DimensionOneUnit is an explicit definition of "unit of dimension one", also known as "dimensionless unit".
General Types
DerivedUnit
Features
Constraints
None.
9.8.3.2.15 DimensionOneValue
Element
AttributeDefinition
Description
General Types
ScalarQuantityValue
Features
Constraints
None.
9.8.3.2.16 IntervalScale
Element
AttributeDefinition
Description
IntervalScale is a MeasurementScale that represents a linear interval measurement scale, i.e. a scale on which
only intervals between two values are meaningful and not their ratios.
Implementation note: In order to enable quantity value conversion between an IntervalScale and another
MeasurementScale, the offset (sometimes also called zero shift) between the source and target scales must be
known. This offset can be indirectly defined through a QuantityValueMapping, see quanityValueMapping of
MeasurementScale. This will be aligned with, and possibly replaced by, a 1D coordinate transformation, so that
scalar and vector transformations are handled in the same way.
MeasurementScale
Features
For an IntervalScale isBound is always true, since the scale must include a definition of what zero means.
Constraints
None.
9.8.3.2.17 LogarithmicScale
Element
AttributeDefinition
Description
where: \(f\) is a multiplication factor, \(\log_b\) is the log function for the given logarithm base \(b\), \(x\) is the
actual quantity, \(x_{ref}\) is a reference quantity, \(a\) is an exponent.
General Types
MeasurementScale
Features
exponent : Number
factor : Number
logarithmBase : Number
The reference quantity value (denominator) \(x_{ref}\) in the logarithmic value expression.
Constraints
9.8.3.2.18 MeasurementScale
Element
AttributeDefinition
Description
Note: the majority of scalar quantities can be expressed by just using a MeasurementUnit directly as its
MeasurementReference. This implies expression of a ScalarQuantityValue on a ratio scale. However, for
full coverage of all quantity value expressions, additional explicit measurement scales with additional semantics are
needed, such as ordinal scale, interval scale, ratio scale with additional limit values, cyclic ratio scale and
logarithmic scale.
General Types
ScalarMeasurementReference
Features
An optional QuantityValueMapping that specifies the relationship between this MeasurementScale and
another MeasurementReference in terms of equivalent QuantityValues.
unit : MeasurementUnit
Constraints
None.
9.8.3.2.19 MeasurementUnit
Element
AttributeDefinition
Description
Direct use of a MeasurementUnit as the mRef attribute of a ScalarQuantitiyValue, establishes expressing the
ScalarQuantitiyValue on a ratio scale.
General Types
ScalarMeasurementReference
Optional UnitConversion that specifies a linear conversion relationship with respect to another
MeasurementUnit. This can be used to support automated quantity value conversion.
A product of powers of base units, that define the quantity dimension of this measurement unit.
Constraints
None.
9.8.3.2.20 NullTransformation
Element
AttributeDefinition
Description
( 1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1 )
General Types
AffineTransformationMatrix3d
Features
None.
Constraints
None.
9.8.3.2.21 nullTransformation
Element
Description
General Types
NullTransformation
Features
None.
Constraints
None.
9.8.3.2.22 one
Element
AttributeUsage
Description
General Types
DimensionOneUnit
Features
None.
Constraints
None.
9.8.3.2.23 OrdinalScale
Element
AttributeDefinition
Description
An OrdinalScale is a MeasurementScale that represents an ordinal measurement scale, i.e. a scale on which
only the ordering of quantity values is meaningful, not the intervals between any pair of values and neither their
ratio.
Note: In order to keep the library simple the associated unit of an OrdinalScale shall be set to the unit of
dimension one, although a unit is meaningless for an OrdinalScale.
Implementation note: The unit attribute of MeasurementScale should be made optional, and its multiplicity be
redefined in the specialization of MeasurementScale.
General Types
Features
None.
Constraints
None.
9.8.3.2.24 QuantityValueMapping
Element
AttributeDefinition
Description
Example: The mapping between the temperature value of 0.01 degree Celsius on the celsius temperature scale to the
equivalent temperature value of 273.16 K on the kelvin temperature scale, would specify a mappedQuantityValue
referencing the DefinitionalQuantityValue (0.01, "absolute thermodynamic temperature of the triple point of
water") of the celsius interval scale, and a referenceQuantityValue referencing the
DefinitionalQuantityValue (273.16, "absolute thermodynamic temperature of the triple point of water") of the
kelvin ratio scale.
General Types
None.
Features
mappedQuantityValue : DefinitionalQuantityValue
referenceQuantityValue : DefinitionalQuantityValue
Constraints
None.
9.8.3.2.25 Rotation
Element
AttributeDefinition
Description
Attribute axisDirection specifies the direction of the rotation axis. Attribute angle specifies the angle of
rotation, where a positive value implies right-handed rotation. Attribute isIntrinsic asserts whether the
intermediate coordinate frame moves with the rotation or not, i.e. whether an instrinsic or extrinsic rotation is
specified.
General Types
TranslationOrRotation
Features
angle : AngularMeasureValue
axisDirection : VectorQuantityValue
isIntrinsic : Boolean
Default is true.
Constraints
None.
9.8.3.2.26 ScalarMeasurementReference
Element
AttributeDefinition
Description
General Types
VectorMeasurementReference
Features
Optionally specifies the connotation of negative quantity values for this ScalarMeasurementReference.
An example is "east" for positive values on the MeasurementReference (CyclicRatioScale) for "longitude"
and "west" for negative values.
Optionally specifies the connotation of positive quantity values for this ScalarMeasurementReference.
An example is "east" for positive values on the MeasurementReference (CyclicRatioScale) for "longitude"
and "west" for negative values.
quantityDimension : QuantityDimension
Constraints
None.
9.8.3.2.27 SimpleUnit
Element
AttributeDefinition
Description
SimpleUnit is a MeasurementUnit that does not depend on any other measurement unit.
Note: As a consequence the unitPowerFactor of a SimpleUnit references itself with an exponent of one.
General Types
MeasurementUnit
Features
Constraints
exponentIsOne
this.unitPowerFactor1.exponent == 1
ExponentIsOne
self.unitPowerFactor.exponent = 1
9.8.3.2.28 SystemOfUnits
Element
AttributeDefinition
Description
None.
Features
longName : String
systemOfQuantities : SystemOfQuantities
Constraints
None.
9.8.3.2.29 TensorMeasurementReference
Element
AttributeDefinition
Description
[VIM] defines measurement reference as a measurement unit, a measurement procedure, a reference material, or a
combination of such. In this generalized definition, the measurement references for all components in all dimensions
of the QuantityValue are specified through the mRefs attribute, which are all
ScalarMeasurementReferences.
As an example a Cartesian 3-dimensional 3x3 moment of inertia tensor would have the following attributes:
The shortName of a TensorMeasurementReference is the unique symbol by which the measurement reference
is known. The name of a TensorMeasurementReference is spelled-out human readable name of the
measurement reference.
General Types
Array
Features
isBound : Boolean
Default is false.
Constraints
None.
9.8.3.2.30 Translation
Element
AttributeDefinition
Description
Attribute translationVector specifies the displacement vector that constitutes the translation.
General Types
TranslationOrRotation
Features
translationVector : VectorQuantityValue
Constraints
None.
9.8.3.2.31 TranslationOrRotation
Element
AttributeDefinition
Description
General Types
None.
Features
None.
Constraints
None.
9.8.3.2.32 TranslationRotationSequence
Element
Description
General Types
List
CoordinateTransformation
Features
Constraints
None.
9.8.3.2.33 UnitConversion
Element
AttributeDefinition
Description
General Types
None.
Features
conversionFactor : Real
The Real value of the ratio between the quantity expressed in the owning MeasurementUnit over the quantity
expressed in the referenceUnit.
isExact : Boolean
Default is true.
referenceUnit : MeasurementUnit
Establishes the reference MeasurementUnit with respect to which this UnitConversion is defined.
None.
9.8.3.2.34 UnitPowerFactor
Element
AttributeDefinition
Description
General Types
None.
Features
exponent : Real
unit : MeasurementUnit
Constraints
None.
9.8.3.2.35 UnitPrefix
Element
AttributeDefinition
Description
General Types
None.
Features
conversionFactor : Real
symbol : String
Examples are: "k" for "kilo", "m" for "milli", "MeBi" for "mega binary".
Constraints
None.
9.8.3.2.36 VectorMeasurementReference
Element
AttributeDefinition
Description
It is possible to specify purely symbolic vector spaces, without committing to particular measurement units or scales
by setting the measurement references for all dimensions to unit one and quantity of dimension one, thereby
basically reverting to the representation of a purely mathematical vector space.
A VectorMeasurementReference can be used to represent a coordinate frame for a vector space. See the
CoordinateFrame specialization.
The attribute isOrthogonal indicates whether the inner products of the basis vectors of the vector space specified
by are orthogonal or not.
General Types
TensorMeasurementReference
Features
isOrthogonal : Boolean
Constraints
placementCheck
9.8.4 ISQ
9.8.4.1 ISQ Overview
Since package ISQ imports all other sub-packages, the statement import ISQ::*; suffices to make the whole ISQ
available in a user model.
9.8.4.2 Elements
9.8.4.2.1 amountOfSubstance
Element
AttributeUsage
Description
General Types
AmountOfSubstanceValue
scalarQuantities
Features
None.
Constraints
None.
9.8.4.2.2 AmountOfSubstanceUnit
Element
AttributeDefinition
General Types
SimpleUnit
Features
None.
Constraints
None.
9.8.4.2.3 AmountOfSubstanceValue
Element
AttributeDefinition
Description
General Types
ScalarQuantityValue
Features
Constraints
None.
9.8.4.2.4 AngularMeasureValue
Element
Description
General Types
None.
Features
None.
Constraints
None.
9.8.4.2.5 Cartesian3dSpatialCoordinateFrame
Element
Description
General Types
Spatial3dCoordinateFrame
Features
xUnit : LengthUnit
yUnit : LengthUnit
zUnit : LengthUnit
Constraints
None.
9.8.4.2.6 Displacement3dVector
Element
AttributeDefinition
Description
General Types
3dVectorQuantityValue
Features
Constraints
None.
9.8.4.2.7 duration
Element
AttributeUsage
Description
General Types
DurationValue
Features
None.
Constraints
None.
9.8.4.2.8 DurationUnit
Element
AttributeDefinition
Description
General Types
SimpleUnit
Features
None.
Constraints
None.
9.8.4.2.9 DurationValue
Element
AttributeDefinition
Description
General Types
ScalarQuantityValue
Features
Constraints
None.
9.8.4.2.10 electricCurrent
Element
AttributeUsage
General Types
ElectricCurrentValue
scalarQuantities
Features
None.
Constraints
None.
9.8.4.2.11 ElectricCurrentUnit
Element
AttributeDefinition
Description
General Types
SimpleUnit
Features
None.
Constraints
None.
9.8.4.2.12 ElectricCurrentValue
Element
AttributeDefinition
Description
General Types
ScalarQuantityValue
Features
Constraints
None.
Element
AttributeUsage
Description
General Types
LengthValue
scalarQuantities
Features
None.
Constraints
None.
9.8.4.2.14 LengthUnit
Element
AttributeDefinition
Description
General Types
SimpleUnit
Features
None.
Constraints
None.
9.8.4.2.15 LengthValue
Element
AttributeDefinition
Description
General Types
ScalarQuantityValue
Features
Constraints
None.
9.8.4.2.16 luminousIntensity
Element
AttributeUsage
Description
General Types
LuminousIntensityValue
scalarQuantities
Features
None.
Constraints
None.
9.8.4.2.17 LuminousIntensityUnit
Element
AttributeDefinition
Description
General Types
SimpleUnit
Features
None.
Constraints
None.
9.8.4.2.18 LuminousIntensityValue
Element
AttributeDefinition
Description
General Types
Features
Constraints
None.
9.8.4.2.19 mass
Element
AttributeUsage
Description
General Types
MassValue
scalarQuantities
Features
None.
Constraints
None.
9.8.4.2.20 MassUnit
Element
AttributeDefinition
Description
General Types
SimpleUnit
Features
None.
Constraints
None.
9.8.4.2.21 MassValue
Element
Description
General Types
ScalarQuantityValue
Features
Constraints
None.
9.8.4.2.22 Position3dVector
Element
AttributeDefinition
Description
General Types
3dVectorQuantityValue
Features
Constraints
None.
9.8.4.2.23 Spatial3dCoordinateFrame
Element
AttributeDefinition
Description
General Types
3dCoordinateFrame
Features
Constraints
9.8.4.2.24 thermodynamicTemperature
Element
AttributeUsage
Description
General Types
ThermodynamicTemperatureValue
scalarQuantities
Features
None.
Constraints
None.
9.8.4.2.25 ThermodynamicTemperatureUnit
Element
AttributeDefinition
Description
General Types
SimpleUnit
Features
None.
Constraints
None.
9.8.4.2.26 ThermodynamicTemperatureValue
Element
AttributeDefinition
Description
General Types
ScalarQuantityValue
Features
Constraints
None.
9.8.4.2.27 universalCartesianSpatial3dCoordinateFrame
Element
AttributeUsage
Description
General Types
attributeValues
Cartesian3dSpatialCoordinateFrame
Features
By default, the universalCartesianSpatial3dCoordinateFrame uses meters as the units on all three axes.
The universalCartesianSpatial3dCoordinateFrame
Constraints
None.
9.8.5 SI Prefixes
9.8.5.1 SI Prefixes Overview
This package specifies the SI unit prefixes as defined in [ISO 80000-1], so that they can be used in automated
quantity value conversion.
ISO/IEC 80000-1 unit prefixes for decimal multiples and sub-multiples. See also https://en.wikipedia.org/wiki/
Unit_prefix.
ISO/IEC 80000-1 prefixes for binary multiples, i.e. multiples of 1024 (= 210). See also https://en.wikipedia.org/wiki/
Binary_prefix.
9.8.5.2 Elements
This package specifies the measurement units as defined in ISO/IEC 80000 parts 3 to 13, the International System of
(Measurement) Units -- Système International d'Unités (SI).
The statement import SI::*; suffices to make all SI units available in a user model.
9.8.6.2 Elements
This package specifies all US Customary measurement units, with conversion factors to compatible SI units, as
defined in Appendix B "Conversion Factors" of [NIST SP-811].
The statement import USCustomaryUnits::*; suffices to make all US Customary measurement units available
in a user model.
9.8.7.2 Elements
9.8.8 Time
9.8.8.1 Time Overview
This package specifies concepts to support time-related quantities and metrology, beyond the quantities duration and
time as defined in [ISO 80000-3].
Representations of the Gregorian calendar date and time of day as specified by the [ISO 8601-1] standard are
included. Also the Coordinated Universal Time (UTC) time scale is captured.
9.8.8.2 Elements
9.8.8.2.1 Clock
Element
PartDefinition
Description
A Clock provides a currentTime as a TimeInstantValue that advances montonically over its lifetime.
General Types
Clock
Features
Constraints
None.
9.8.8.2.2 Date
AttributeDefinition
Description
General Types
TimeInstantValue
Features
None.
Constraints
None.
9.8.8.2.3 DateTime
Element
AttributeDefinition
Description
General Types
TimeInstantValue
Features
None.
Constraints
None.
9.8.8.2.4 DurationOf
Element
CalculationDefinition
Description
DurationOf returns the duration of a given Occurrence relative to a given Clock, which is equal to the TimeOf
the end snapshot of the Occurrence minus the TimeOf
General Types
DurationOf
o : Occurrence {redefines o}
Constraints
None.
9.8.8.2.5 Iso8601DateTime
Element
AttributeDefinition
Description
General Types
UtcTimeInstantValue
Features
val : Iso8601DateTimeEncoding
Constraints
None.
9.8.8.2.6 Iso8601DateTimeEncoding
Element
AttributeDefinition
Description
General Types
String
Features
None.
Constraints
9.8.8.2.7 Iso8601DateTimeStructure
Element
AttributeDefinition
Description
Representation of an ISO 8601 date and time with explicit date and time component attributes.
General Types
UtcTimeInstantValue
Features
day : Natural
hour : Natural
hourOffset : Integer
microsecond : Natural
minute : Natural
minuteOffset : Integer
month : Natural
second : Natural
year : Integer
Constraints
None.
9.8.8.2.8 timeInstant
Element
AttributeUsage
Description
General Types
TimeInstantValue
scalarQuantities
Features
Constraints
None.
9.8.8.2.9 TimeInstantValue
Element
AttributeDefinition
Description
Representation of a time instant quantity. Also known as instant (of time) or point in time.
General Types
ScalarQuantityValue
Features
Constraints
None.
9.8.8.2.10 TimeOf
Element
CalculationDefinition
Description
TimeOf returns a TimeInstantValue for a given Occurrence relative to a given Clock. This
TimeInstantValue is the time of the start of the Occurrence, which is considered to be synchronized with the
snapshot of the Clock with a currentTime equal to the returned timeInstant
General Types
Evaluation
TimeOf
Features
o : Occurrence {redefines o}
Constraints
startTimeConstraint
timeContinuityConstraint
If one Occurrence happens immediately before another, then the TimeOf the end snapshot of the first Occurrence
equals the TimeOf the second Occurrence.
timeOrderingConstraint
If one Occurrence happens before another, then the TimeOf the end snapshot of the first Occurrence is no
greater than the TimeOf the second Occurrence.
9.8.8.2.11 TimeOfDay
Element
AttributeDefinition
Description
General Types
TimeInstantValue
Features
None.
Constraints
None.
9.8.8.2.12 TimeScale
Element
AttributeDefinition
Description
Generic time scale to express a time instant, including a textual definition of the meaning of zero time instant value.
Attribute definitionalEpoch captures the specification of the time instant with value zero, also known as the
(reference) epoch.
General Types
IntervalScale
definitionalEpoch : DefinitionalQuantityValue
unit : DurationUnit
Constraints
None.
9.8.8.2.13 universalClock
Element
PartUsage
Description
universalClock is a single Clock that can be used as a default universal time reference.
General Types
universalClock
parts
Clock
Features
None.
Constraints
None.
9.8.8.2.14 UTC
Element
AttributeDefinition
Description
UTC is the primary time standard by which the world regulates clocks and time. It is within about 1 second of mean
solar time at 0° longitude and is not adjusted for daylight saving time. UTC is obtained from International Atomic
Time (TAI) by the insertion of leap seconds according to the advice of the International Earth Rotation and
Reference Systems Service (IERS) to ensure approximate agreement with the time derived from the rotation of the
Earth.
General Types
TimeScale
Constraints
None.
9.8.8.2.15 utcTimeInstant
Element
AttributeUsage
Description
General Types
UtcTimeInstantValue
timeInstant
Features
None.
Constraints
None.
9.8.8.2.16 UtcTimeInstantValue
Element
AttributeDefinition
Description
Representation of a time instant expressed on the Coordinated Universal Time (UTC) time scale.
General Types
DateTime
Features
Constraints
None.
In order to enable the use of quantities in expressions this library package specifies the mathematical operators and
functions to support quantity arithmetic, and some convenience functions.
Any scalar quantity has a quantity dimension (see 9.8.2.2.2 ) that specifies the product of powers of base quantities
of the applicable system of quantities. Rules for valid quantity dimensions of the variables in quantity expressions
are given below, after definition of the possible quantity expression operations. Such rules specify a necessary but
not a sufficient condition for valid quantity expressions. For example, EnergyValue and TorqueValue have the
same quantity dimension (L2·M·T-2 in ISQ), but it is not valid to add an energy quantity to a torque quantity.
Also each ScalarMeasurementReference has a quantity dimension, that can be used to check the validity of
using constructed quantity values in quantity expressions.
To enable enforcement of model-evaluable type checking on quantity expressions, all direct specializations of
(abstract) ScalarQuantityValue, VectorQuantityValue and TensorQuantityValue must be disjoint.
AttributeDefinitions for quantity types at this first level of specialization are referred to as top level quantity
types. Furthermore all lower level specializations of quantity AttributeDefinitions and AttributeUsages
must be disjoint at each sibling level. For example, a kineticEnergy quantity cannot also be a
potentialEnergy quantity. Both however, are subsettings of generic energy (defined by EnergyValue), that is
a top level quantity type, so they may be added, subtracted, equated or compared.
ScalarQuantityValue Construction
Construction of a literal or variable ScalarQuantityValue is done through the [ operator, matched by a closing
]. The signature of the corresponding CalculationDefinition is:
Examples are:
The provided ScalarMeasurementReference must have a quantity dimension that is the same as the quantity
dimension of the scalar quantity attribute being bound, assigned, defaulted or compared.
ScalarQuantityValue Operations
The following table enumerates the scalar quantity operations. In order to enable concise formulations the following
symbols for quantity AttributeUsages are defined:
Note. A mathematical number or a quantity defined by DimensionOneValue has by definition quantity dimension
1, i.e. all exponents in the product of powers of the base quantities are zero.
Operator or
Result Description
function expression
fs1+fs2 fs3 Addition of two free scalar quantities returns a free scalar quantity.
fs1+bs2 bs3 Addition of a free and a bound scalar quantity returns a bound scalar quantity.
fs1+fs2 bs3 Addition of a bound and a free scalar quantity returns a bound scalar quantity.
bs1+bs2 ERROR. Two bound scalar quantities cannot be added.
Subtraction of a free scalar quantity from a free scalar quantity returns a free
fs1-fs2 fs3
scalar quantity.
Subtraction of a bound scalar quantity from a free scalar quantity returns a
fs1-bs2 bs3
bound scalar quantity.
Subtraction of a free scalar quantity from a bound scalar quantity returns a
bs1-fs2 bs3
bound scalar quantity.
Subtraction of a bound scalar quantity from a bound scalar quantity returns a
bs1-bs2 fs3
free scalar quantity.
fs1*x or x*fs1 fs3 Multiplication of a free scalar quantity with a real returns a free scalar quantity.
bs1*x or x*bs1 ERROR. A bound scalar quantity cannot be an operand in a multiplication.
fs1*fs2 fs3 Multiplication of two free scalar quantities returns a free scalar quantity.
fs1*bs2 or
bs1*fs2 or ERROR. A bound scalar quantity cannot be an operand in a multiplication.
bs1*fs2
fs1/fs2 fs3 Division of two free scalar quantities returns a free scalar quantity.
fs1/bs2 or bs1/
ERROR. A bound scalar quantity cannot be an operand in a division.
fs2 or bs1/fs2
fs1^x fs3 Exponentiation of a free scalar quantity returns a free scalar quantity.
bs1^x ERROR. A bound scalar quantity cannot be an operand in an exponentiation.
Function that asserts whether given scalar quantity is zero or not by returning a
isZero(s1) b
boolean.
Function that asserts whether given scalar quantity is 1 or not by returning a
isUnit(s1) b
boolean.
abs(s1) s3 Return scalar quantity of same type with absolute numerical value.
Return maximum value scalar quantity of same type and mRef of maximum
max(s1, s2) s3
value operand. See note 1.
Return minimum value scalar quantity of same type and mRef of minimum
min(s1, s2) s3
value operand. See note 1.
Return square root value of given scalar quantity. Its quantity dimension
sqrt(s1) s3
exponents are halved.
Note 1. Operands of min, max functions, and relational operators must have the same top level quantity type and be
both either free or bound, but may have different mRefs.
The rules for valid quantity dimensions for the above operations are:
1. The operands and result of addition (+) and subtraction (-) operations must all have the same quantity
dimension, and be of the same top level quantity type.
2. The operands of multiplication (*) operations may differ. The result must have a quantity dimension, in
which the exponent for each base quantity is the sum of the exponents of the corresponding base quantity
of each of the operands.
3. The operands of division (/) operations may differ. The result must have a quantity dimension, in which
the exponent for each base quantity is the difference of the exponent of the corresponding base quantity of
the first operand minus the exponent of the second operand.
4. The first operand of the exponentiation operator (^) may have any quantity dimension. The result must
have a quantity dimension, in which the exponent for each base quantity is the sum of the exponent of the
corresponding base quantity of the first operand plus the value of the second operand (the exponent of the
exponentiation operation).
Basics
In order to enable the use of quantities in expressions this library package specifies the mathematical operators and
functions to support quantity arithmetic, and some convenience functions.
Any scalar quantity has a quantity dimension (see 9.8.2.2.2 ) that specifies the product of powers of base quantities
of the applicable system of quantities. Rules for valid quantity dimensions of the variables in quantity expressions
To enable enforcement of model-evaluable type checking on quantity expressions, all direct specializations of
(abstract) ScalarQuantityValue, VectorQuantityValue and TensorQuantityValue must be disjoint.
AttributeDefinitions for quantity types at this first level of specialization are referred to as top level quantity
types. Furthermore all lower level specializations of quantity AttributeDefinitions and AttributeUsages
must be disjoint at each sibling level. For example, a kineticEnergy quantity cannot also be a
potentialEnergy quantity. Both however, are subsettings of generic energy (defined by EnergyValue), that is
a top level quantity type, so they may be added, subtracted, equated or compared.
ScalarQuantityValue Construction
Construction of a literal or variable ScalarQuantityValue is done through the [ operator, matched by a closing
]. The signature of the corresponding CalculationDefinition is:
Examples are:
The provided ScalarMeasurementReference must have a quantity dimension that is the same as the quantity
dimension of the scalar quantity attribute being bound, assigned, defaulted or compared.
9.8.9.2 Elements
Basics
In order to enable the use of quantities in expressions this library package specifies the mathematical operators and
functions to support vector quantity arithmetic, and some convenience functions. See 9.8.9.1 for a general
introduction.
VectorQuantityValue Construction
Construction of a literal or variable VectorQuantityValue is done through the [ operator, matched by a closing
]. The signature of the corresponding CalculationDefinition is:
Examples are:
The quantity dimensions of the components of a VectorQuantityValue are specified through the mRefs (defined
by ScalarMeasurementReference[1..*]) of the mRef : VectorMeasurementReference[1]
AttributeUsage of the vector quantity. This allows to enforce the rules of scalar quantity arithmetic to the
components of vector quantities, when they are bound, assigned, defaulted, compared or the result of a vector
quantity expression evaluation.
VectorQuantityValue Operations
The following table enumerates the vector quantity operations. In order to enable concise formulations the following
symbols for quantity AttributeUsages are defined:
Note. For completeness also invalid operations are listed, for which the result is empty, and an implementation
should raise a warning or error.
Operator or
Result Description
function expression
fv1+fv2 fv3 Addition of two free vector quantities returns a free vector quantity.
fv1+bv2 bv3 Addition of a free and a bound vector quantity returns a bound vector quantity.
fv1+fv2 bv3 Addition of a bound and a free vector quantity returns a bound vector quantity.
bv1+bv2 ERROR. Two bound vector quantities cannot be added.
Subtraction of a free vector quantity from a free vector quantity returns a free
fv1-fv2 fv3
vector quantity.
Subtraction of a bound vector quantity from a free vector quantity returns a
fv1-bv2 bv3
bound vector quantity.
Subtraction of a free vector quantity from a bound vector quantity returns a
bv1-fv2 bv3
bound vector quantity.
Subtraction of a bound vector quantity from a bound vector quantity returns a
bv1-bv2 fv3
free vector quantity.
The rules for valid quantity dimensions for the above operations are:
1. The vector quantities for all operands and results must have compatible mRef :
VectorMeasurementReference[1]. Here compatible means that the mRef of each vector quantity
must have the same dimensions, and their mRef.mRefs must have the same quantity dimension for each
vector component.
2. The operands and result of addition (+) and subtraction (-) operations must all have the same mRef :
VectorMeasurementReference[1], and be of the same top level quantity type.
3. The operands of a multiplication (*) operation can be any free vector quantity and free scalar quantity.
The result of a must have an mRef, in which for each vector component the exponent for each base
quantity is the sum of the exponent of the corresponding base quantity of the component of the vector
operand plus the exponent of the scalar operand.
4. The operands of a division (/) operation can be any free vector quantity and free scalar quantity. The
result of a must have an mRef, in which for each vector component the exponent for each base quantity is
the difference of the exponent of the corresponding base quantity of the component of the vector operand
minus the exponent of the scalar operand.
5. The operands of the inner product must all have the same mRef, i.e. coordinate frame, and therefore
component-wise the same quantity dimensions.
Basics
In order to enable the use of quantities in expressions this library package specifies the mathematical operators and
functions to support vector quantity arithmetic, and some convenience functions. See 9.8.9.1 for a general
introduction.
VectorQuantityValue Construction
Construction of a literal or variable VectorQuantityValue is done through the [ operator, matched by a closing
]. The signature of the corresponding CalculationDefinition is:
Typically the measurement reference for a vector quantity is a CoordinateFrame, which is a specialization of
VectorMeasurementReference.
Examples are:
The quantity dimensions of the components of a VectorQuantityValue are specified through the mRefs (defined
by ScalarMeasurementReference[1..*]) of the mRef : VectorMeasurementReference[1]
AttributeUsage of the vector quantity. This allows to enforce the rules of scalar quantity arithmetic to the
components of vector quantities, when they are bound, assigned, defaulted, compared or the result of a vector
quantity expression evaluation.
9.8.10.2 Elements
Basics
In order to enable the use of quantities in expressions this library package specifies the mathematical operators and
functions to support tensor quantity arithmetic, and some convenience functions. See 9.8.9.1 for a general
introduction.
Construction of a literal or variable TensorQuantityValue is done through the [ operator, matched by a closing
]. The signature of the corresponding CalculationDefinition is:
The quantity dimensions of the components of a TensorQuantityValue are specified through the mRefs (defined
by ScalarMeasurementReference[1..*]) of the mRef : TensorMeasurementReference[1]
AttributeUsage of the tensor quantity. This allows to enforce the rules of scalar quantity arithmetic to the
components of tensor quantities, when they are bound, assigned, defaulted, compared or the result of a tensor
quantity expression evaluation.
TensorQuantityValue Operations
The following table enumerates the tensor quantity operations. In order to enable concise formulations the following
symbols for AttributeUsages are defined:
Operator or
Result Description
function expression
Addition of two tensor quantities returns a tensor quantity, with all
T1+T2 T3
corresponding component values added.
Subtraction of a tensor quantity from another tensor quantity returns a tensor
T1-T2 T3 quantity, with all corresponding component values of the second operand
subtracted from those of the first operand.
Multiplication of a tensor quantity and a real number returns a tensor quantity,
T1*x or x*T1 T3
with all component values multiplied by x.
Division of a tensor quantity with a real number returns a tensor quantity, with
T1/x T3
all component values divided by x.
Multiplication of a tensor quantity and a vector quantity returns a vector
T1*v1 or v1*T1 v3 quantity. The tensor and vector must have compatible (covariant and
contravariant) dimensions.
Function that asserts whether given tensor quantity is a zero tensor or not by
isZeroTensorQuantity(T1)
b
returning a boolean.
Function that asserts whether given tensor quantity is a unit tensor or not by
isUnitTensorQuantity(T1)
b
returning a boolean.
Transform a tensor quantity according to a coordinate transformation, which
transform(ct,
T3 returns a tensor quantity transformed into the target coordinate frame of the
T1)
given coordinate transformation.
In order to enable the use of quantities in expressions this library package specifies the mathematical operators and
functions to support tensor quantity arithmetic, and some convenience functions. See 9.8.9.1 for a general
introduction.
TensorQuantityValue Construction
Construction of a literal or variable TensorQuantityValue is done through the [ operator, matched by a closing
]. The signature of the corresponding CalculationDefinition is:
The quantity dimensions of the components of a TensorQuantityValue are specified through the mRefs (defined
by ScalarMeasurementReference[1..*]) of the mRef : TensorMeasurementReference[1]
AttributeUsage of the tensor quantity. This allows to enforce the rules of scalar quantity arithmetic to the
components of tensor quantities, when they are bound, assigned, defaulted, compared or the result of a tensor
quantity expression evaluation.
9.8.11.2 Elements
The following table enumerates the measurement unit and coordinate frame operations. In order to enable concise
formulations the following symbols for AttributeUsages are defined:
Operator or
Result Description
function expression
Multiplication of two measurement units returns a (derived) measurement unit,
with quantity dimension exponents changed such that the exponent of the first
u1*u2 u3
operand is added to that of the second, for each base quantity. Equal terms in
nominator and denominator cancel out.
9.8.12.2 Elements
A.1 Introduction
The example presented in this Annex is intended to illustrate how SysML can be used to model a system. The
example is a simple vehicle model that highlights selected language features. Both the graphical and corresponding
textual notation are presented.
The SimpleVehicleModel is organized into a hierarchy of packages, where some packages contain nested
packages. The Definitions package contains nested packages for part definitions, attribute definitions, port
definitions, item definitions, action definitions, requirements definitions, and other kinds of definition elements. The
VehicleConfigurations package contains two design configurations that are modeled as usages of the definition
elements from the Definitions package. Each vehicle configuration contains packages that contain its parts,
actions, and requirements. This model includes separate packages for
VehicleAnalysis, VehicleVerification, Individuals, and View_Viewpoints. The
VehicleAnalysis package contains analysis cases to analyze the system, and the VehicleVerification
package contains verification cases and the verification system to verify the system. The Views_Viewpoints
package specifies user-defined views. Additional packages that are not shown include a MissionContext package
that contains use cases for how the vehicle is used in a particular context, and a VehicleFamily package that
contains a model with variation points from which specific vehicle configurations can be derived. The package for
the International System of Quantities (ISQ) is imported into this model from the SysML model library so its
content can be used to specify standard quantities and units. Imported packages can be shown with a dashed outline
package symbol as shown in the figure or with an import relationship between the importing package and the
imported package.
SimpleVehicleModel_
VehicleConfigurations Definitions
Individuals
VehicleAnalyiss
VehicleConfiguration_b
PortDefinitions InterfaceDefinitions
ItemDefinitions RequirementDefinitions
Requirements View_Viewpoints
ActionDefinitions
ISQ
package SimpleVehicleModel{
private import ISQ::*;
The packages of a system model are often organized and managed to enable team members to work collaboratively
on different aspects of the model, where each package contains cohesive content that can be worked on
independently. The VehicleConfigurations package would typically import packages for each major system
element (e.g., subsystem) to aid in collaborative development, although this was not done for this simple example.
A.3 Definitions
The Definitions package contains a nested PartDefinitions package that contains definitions for the parts
that are used to represent the vehicle configurations. This includes the part definition for a Vehicle, whose features
include attributes, ports, actions, and states.
The attributes called mass, dryMass, and cargoMass are each a kind of the base mass attribute imported from the
standard SysML ISQ library model (see 9.8.4 ). Values of the attribute quantities contained in this library can then
be assigned standard units from the SI (see 9.8.6 ) or USCustomaryUnits (see 9.8.7 ) library models. For example,
The Vehicle contains three ports called ignitionCmdPort, pwrCmdPort and vehicleToRoadPort, which are
interaction points that provide ignition and fuel commands to the vehicle, and transfer vehicle torque to the road.
The Vehicle performs the action providePower to accelerate the vehicle, and other actions that include
performSelfTest and applyParkingBrake. In addition, the Vehicle exhibits its vehicleStates.
The Vehicle represents a class of individual vehicles which is defined by its attributes, ports, actions, and states.
Other part definitions can be specified in a similar way to build a reusable library of part definitions.
The part definition for FuelTank contains an attribute called mass and an attribute called fuelKind. The attribute
fuelKind is defined by the enumeration FuelKind that contains literal values for different kinds of fuel such as gas
and diesel. The FuelTank also contains an item called fuel. An item is often used to represent something that flows
through a system or is stored by a system. The fuel is not considered to be part of the FuelTank, so fuel is
modeled as a referential feature (shown graphically using the white diamond symbol instead of the black diamond).
«part def»
FuelTank
attributes
fuelKind: FuelKind
fuelMassMax:> ISQBase::mass
mass:> ISQBase::mass
ports
fuelInPort: ~FuelPort
fuelOutPort: FuelPort
1
*
«item»
«assert constraint»
fuel: Fuel
fuelConstraint
attributes
operator expressions
fuelMass
{ fuel.fuelMass<=fuelMassMax }
:>>Fuel::fuelMass
Figure 57. Part Definition for FuelTank Referencing Fuel it Stores
The fuel contains an attribute called fuelMass. The FuelTank contains an attribute called fuelMassMax, which
represents the maximum amount of fuel that a FuelTank can store. A constraint is imposed that the fuelMass must
The FuelTank also contains a fuelInPort and a fuelOutPort. The fuelOutPort is defined by FuelPort
that contains a directed feature to represent the fuel flowing out of this port. The fuelInPort is defined by a port
definition that is the conjugate of the FuelPort. The conjugate is notated with a tilda (~) in front of the port
definition name. The conjugate reverses the direction of each directed feature of the port that it conjugates, which in
this case reverses the direction of the fuel to flow in to the port instead of out from the port. Note that the directed
features are not shown in the figure but are specified as part of the definition of FuelPort.
The part definition for Axle contains the attribute mass. FrontAxle is a specialization of Axle that inherits its
mass attribute and contains an additional attribute called steeringAngle.
«part def»
«part def»
FrontAxle
Axle
attributes
attributes
steeringAngle:>
mass:> ISQBase::mass
ISQSpaceTime::angularMeasure
The Definitions package also contains several other kinds of definition elements. The port definition FuelPort
contains an item called fuel that can flow out of the port. The fuel is defined by the item definition Fuel
that contains a mass attribute. The interface definition FuelInterface is used to connect a fuelOutPort to a
fuelInPort. The definition also specifies that Fuel flows across this interface. The item definition FuelCmd
contains an attribute called throttleLevel that is defined by a Real. The action definition ProvidePower
contains an input item fuelCmd that is defined by FuelCmd. It also contains an output attribute called
wheelToRoadTorque that has multiplicity of 2, and is defined by the attribute definition TorqueValue.
«interface def»
FuelInterface
«enum def» «action def»
flows «item def» «port def» «item def»
FuelKind ProvidePower
of : Fuel from fuelOutPort.fuel to Fuel FuelPort FuelCmd
enums fuelInPort.fuel parameters
gas attributes parameters attributes in fuelCmd: FuelCmd
ports fuelMass:> ISQBase::mass out fuel: Fuel throttleLevel: Real
diesel out wheelToRoadTorque: TorqueValue
fuelInPort: ~FuelPort
fuelOutPort: FuelPort
A.4 Parts
The VehicleConfigurations package contains two usages of the Vehicle part definition called vehicle_a
and vehicle_b. The vehicle_b configuration is shown below. The part vehicle_b inherits features from its part
definition Vehicle. It can then redefine or subset its inherited features and add new features. As an example,
vehicle_b redefines the mass attribute it inherited from Vehicle and further constrains it's mass to be the sum of
its dryMass, cargoMass, and fuelMass. It redefines other features including other attributes, ports, actions, and
states in a similar manner. Its actions are redefined to perform actions that are contained in the ActionTree. For
example, the inherited action from Vehicle to providePower is redefined by ActionTree::providePower. As
described in A.6 , the providePower contained in ActionTree is decomposed into other actions.
part vehicle_b:Vehicle{
attribute mass redefines mass=
dryMass+cargoMass+fuelTank.fuel.fuelMass;
attribute dryMass redefines dryMass=sum(partMasses);
attribute redefines cargoMass default 0 [kg];
attribute partMasses=(...); // collection of part.mass
attribute fuelEconomy :> distancePerVolume;
port fuelCmdPort:FuelCmdPort redefines pwrCmdPort{
in item fuelCmd redefines pwrCmd;
port setSpeedPort:~SetSpeedPort;
port vehicleToRoadPort redefines vehicleToRoadPort{
port wheelToRoadPort1;WheelToRoadPort;
port wheelToRoadPort2:WheelOtRoadPort;
}
perform ActionTree::providePower redefines providePower;
perform ActionTree::performSelfTest redefines performSelfTest;
perform ActionTree::applyParkingBrake redefines applyParkingBrake;
perform ActionTree::senseTemperature redefines senseTemperature;
exhibit States::vehicleStates redefines vehicleStates;
}
part fuelTank:FuelTank{
...
}
...
}
part vehicle_b:Vehicle {
...
part starterMotor:StarterMotor;
part fuelTank:FuelTank;
part engine:Engine;
part transmission:Transmission;
part driveshaft:Driveshaft;
part rearAxleAssembly{
part differential:Differential;
part rearAxle:Axle;
part rearWheel1:Wheel;
part rearWheel2:Wheel;
}
part frontAxleAssembly{
part frontAxle:FrontAxle;
part frontWheels:Wheel[2];
}
part vehicleSoftware:VehicleSoftware;
}
The VehicleConfigurations package also contains the engine4Cyl variant that subsets engine. In general, an
engine can contain 4 to 8 cylinders. The engine4Cyl variant redefines the set of 4..8 cylinders to be exactly
4 cylinders, and then subsets the set of 4 cylinders to create cylinder1, cylinder2, cylinder3, and
cylinder4. (See also the example of variability modeling in A.12 .)
1 1 1 1
4 «part» «part»
cylinders engine: Engine
4..8
«part»
cylinders: Cylinder
part engine:Engine{
part cylinders:Cylinder [4..8] ordered;
}
part engine4Cyl:>engine{
part redefines cylinders[4];
part cylinder1[1] subsets cylinders;
part cylinder2[1] subsets cylinders;
part cylinder3[1] subsets cylinders;
part cylinder4[1] subsets cylinders;
}
The drivePwrPort on the engine is connected to the clutchPort on the transmission by an interface. The
interface is defined by an interface definition whose port at one end of the interface is defined as DrivePwrPort
and whose port at the other end of the interface is defined as the conjugate of the DrivePwrPort. The
DrivePwrPort contains the directed feature out engineTorque:Torque. The conjugate of the
DrivePwrPort contains the directed feature in engineTorque:Torque.
The fuelOutPort on the fuelTank is connected to the fuelInPort on the Engine by an interface.
This interface is defined by the interface definition FuelInterface which contains a flow of Fuel. This flow can
be shown as a solid arrowhead on the connection between the ports but is not shown in this particular view.
Connections can be made directly between nested parts without having to establish a connection between the
corresponding composite parts. For example, the port on the driveShaft can connect directly to a port on the
differential without having to connect first to the rearAxleAssembly that composes the differential.
Ports can also be nested within a composite port as shown by the vehicleToRoadPort, which contains a nested
port for each rear wheel.
part starterMotor:StarterMotor{
port ignitionCmdPort;
port gearPort;
}
part engine:Engine{
port fuelCmdPort;
port drivePwrPort:DrivePwrPort;
port fuelInPort;
port flyWheelPort;
port controlPort;
}
part transmission:Transmission{
port clutchPort:~DrivePwrPort;
port shaftPort_a;
}
part driveshaft:Driveshaft{
port shaftPort_b;
port shaftPort_c;
}
part vehicleSoftware:VehicleSoftware{
part vehicleController {
port controlPort;
}
}
//connections
bind engine.fuelCmdPort = fuelCmdPort;
bind starterMotor.ignitionCmdPort = ignitionCmdPort;
interface engineToTransmissionInterface:EngineToTransmissionInterface
connect engine.drivePwrPort to transmission.clutchPort;
interface fuelInterface:FuelInterface
connect fuelTank.fuelOutPort to engine.fuelInPort;
connect vehicleSoftware.vehicleController.controlPort
to engine.controlPort;
connect starterMotor.gearPort
to engine.flyWheelPort;
connect transmission.shaftPort_a
to driveshaft.shaftPort_b;
connect driveshaft.shaftPort_c
to rearAxleAssembly.shaftPort_d;
bind rearAxleAssembly.rearWheel1.wheelToRoadPort
= vehicleToRoadPort.wheelToRoadPort1;
bind rearAxleAssembly.rearWheel2.wheelToRoadPort
= vehicleToRoadPort.wheelToRoadPort2;
}
«action»
providePower: ProvidePower
action providePower:ProvidePower{
action generateTorque:GenerateTorque;
action amplifyTorque:AmplifyTorque;
action transferTorque:TransferTorque;
action distributeTorque:DistributeTorque;
...
}
As shown in Fig. 60 , the part vehicle_b performs the action providePower. The subparts of vehicle_b then
perform the appropriate subactions of providePower. For example, the part engine performs the action
providePower.generateTorque, which redefines the generateTorque action inherited from its definition.
The output of each subaction of providePower is connected by a flow connection to the input of another subaction,
except for distributeTorque, whose outputs are bound to the outputs of providePower. The input and output
parameters are streaming unless designated as succession flows, meaning that the inputs continue to be consumed
and the outputs continue to be produced as the action executes.
action providePower:ProvidePower{
...
bind fuelCmd = generateTorque.fuelCmd;
flow generateTorque.engineTorque to amplifyTorque.engineTorque;
flow amplifyTorque.transmissionTorque to transferTorque.transmissionTorque;
flow transferTorque.driveshaftTorque to distributeTorque.driveshaftTorque;
bind distributeTorque.wheelToRoadTorque = wheelToRoadTorque;
}
vehicle
«use case»
transportPassenger_1
«use case»
start
«action» «action»
driverGetInVehicle passenger1GetInVehicle
«accept action»
ignitionCmd:IgnitionCmd
«action» «action»
driveVehicleToDestination providePower
«action» «action»
driverGetOutOfVehicle passenger1GetOutOfVehicle
«use case»
^done
result
Figure 66. Action flow for transportPassenger
A.7 States
The states of a Vehicle enable selected actions to be performed. The Vehicle exhibits its state vehicleStates.
This state is a parallel state, so its substates operatingStates and healthStates are concurrent. The states
operatingStates and healthStates are not parallel, so only one of each of their substates can be active at any
given time.
state operatingStates {
...
}
state healthStates {
...
}
}
Note that the state vehicleStates has a referential feature controller:VehicleController. This allows the
substates of vehicleStates to send a signal to the controlller or one of its ports, or to access any other feature of
controller.
The ignitionCmd is defined by the item definition IgnitionCmd, which contains an attribute defined by an
enumeration with values on and off. This pattern is used to represent a variety of signals that may be sent by send
actions and accepted by accept actions.
The on state has an entry action to performSelfTest, which is performed upon entry to the state. When the entry
action completes, the do action to providePower starts, and it continues to be performed until the state is exited.
Prior to exiting the state, the exit action to applyParkingBrake is performed. The state also has a constraint that
the electricalPower must not exceed 500 watts.
state operatingStates {
entry action initial;
state off;
state starting;
state on {
entry performSelfTest;
do providePower;
exit applyParkingBrake;
constraint {electricalPower<=500[W]}
}
transition 'off-starting'
first off
accept ignitionCmd:IgnitionCmd via ignitionCmdPort
if ignitionCmd.ignitionOnOff==IgnitionOnOff::on and brakePedalDepressed
do send StartSignal() to controller
then starting;
transition 'starting-on'
first starting
accept VehicleOnSignal
then on;
transition 'on-off'
first on
accept VehicleOffSignal
do send OffSignal() to controller
then off;
}
The healthStates are decomposed into normal, maintenance and degraded states. Starting in the normal
state, healthStates continually monitors the vehicle temperature and, when the temperature exceeds the allowed
maximum, it transitions to the degraded state and notifies the controller. It also transitions from normal to
maintenance when it is time for vehicle maintenance. In either case, it transitions back to the normal state on
receipt of a ReturnToNormal signal.
state healthStates {
entry action initial;
do senseTemperature{
out temp;
}
transition 'normal-maintenance'
first normal
accept at maintenanceTime
then maintenance;
transition 'normal-degraded'
first normal
accept when senseTemperature.temp > Tmax
do send OverTemp() to controller
then degraded;
transition 'maintenance-normal'
first maintenance
accept ReturnToNormal
then normal;
transition 'degraded-normal'
first degraded
accept ReturnToNormal
then normal;
}
A.8 Requirements
The requirement definition MassRequirement has a shall statement that "The actual mass shall be less than the
required mass". This statement is formalized using attributes for massRequired and massActual and the
constraint expression {massActual<=massRequired}.
«requirement def»
MassRequirement
doc
The actual mass shall be less than the
required mass
attributes
massActual:> ISQBase::mass
massRequired:> ISQBase::mass
constraints
require {massActual<=massRequired}
Although not shown, the mass requirement is allocated to the mass of the vehicle using the allocate relationship, and
the engine mass requirement is derived from the vehicle mass requirement using the derivation relationship.
«requirement»
vehicleSpecification
«requirement»
<1> vehicleMassRequirement: MassRequirement
doc
The total mass of the vehicle shall be less *
than or equal to the required mass. «requirement»
* Assume total mass includes a full tank of <2> vehicleFuelEconomyRequirements
gas of 60 kg
«subject» doc
vehicle attributes fuel economy requirements group
massRequired =2000 [kg]
attributes attributes
:>>MassRequirement::massRequired
dryMass:> ISQBase::mass assumedCargoMass:> ISQBase::mass
massActual = vehicle.dryMass +
fuelMassActual subject
:>>MassRequirement::massActual
fuelMassActual:> ISQBase::mass
fuelMassMax:> ISQBase::mass = 60 [kg]
constraints
assume {fuelMassActual==fuelMassMax}
* *
«requirement» «requirement»
<2_1> cityFuelEconomyRequirement: FuelEconomyRequirement <2_2> highwayFuelEconomyRequirement: FuelEconomyRequirement
references references
requiredFuelEconomy = 10 [km / L] requiredFuelEconomy = 12.75 [km / L]
:>>FuelEconomyRequirement::requiredFuelEconomy :>>FuelEconomyRequirement::requiredFuelEconomy
constraints constraints
assume {assumedCargoMass<=500 [kg]} assume {assumedCargoMass<=500 [kg]}
item marketSurvey;
dependency from vehicleSpecification to marketSurvey;
requirement vehicleSpecification{
subject vehicle:Vehicle;
requirement <'1'> vehicleMassRequirement : MassRequirement {
doc /* The total mass of a vehicle shall be less than or equal to the required mass.
Assume total mass includes a full tank of gas of 60 kg*/
attribute redefines massRequired=2000 [kg];
attribute redefines massActual = vehicle.dryMass + fuelMassActual;
attribute fuelMassActual:>ISQ::mass;
attribute fuelMassMax:>ISQ::mass = 60 [kg];
assume constraint {fuelMassActual==fuelMassMax}
}
allocate vehicleMassRequirement to PartsTree::vehicle_b.mass;
In order to evaluate whether vehicle_b satisfies the vehicleMassRequirement, the massActual must be
bound to the mass of vehicle_b. This is accomplished by asserting that vehicle_b satisfies the
vehicleSpecification and binding the actualMass of the requirement to the mass of vehicle_b. Asserting
vehicle_b satisfies the requirement is equivalent to imposing the mass constraint contained in the requirement on
vehicle_b.
A.9 Analysis
The FuelEconomyAnalyisModel package contains an analysis case called fuelEconomyAnalysis. The
objective for this analysis case is to estimate the fuel economy of the vehicle. Its subject is the part vehicle_b. The
analysis case accepts a nominal driving scenario as an input, and returns a calculatedFuelEconomy in
KilometersPerLitre as an output.
analysis fuelEconomyAnalysis {
in attribute scenario: Scenario;
subject = vehicle_b;
objective fuelEconomyAnalysisObjective {
doc /* estimate the vehicle fuel economy */
}
A.10 Verification
The simple verification case massTests is a usage of the verification case definition MassTest. The verification
objective is to verify the vehicleMassRequirement. The subject of the verification case is vehicle_b. The
verification case includes actions to weighVehicle and evaluatePassFail.
The massVerificationSystem performs the massTests. It is composed of an operator and a scale. The
scale performs the action to weighVehicle, and the operator performs the action to evaluatePassFail. The
verification case returns a verdict of pass or fail based on whether the measured mass satisfies the mass
requirement.
package VerificationCaseDefinitions{
verification def MassTest;
verification def AccelerationTest;
verification def ReliabilityTest;
}
package VerificationCases1{
verification massTests:MassTest {
subject = vehicle_b;
objective {
verify vehicleSpecification.vehicleMassRequirement{
redefines massActual=weighVehicle.massMeasured;
}
}
metadata VerificationMethod{
kind = VerificationMethodKind::test;
}
action weighVehicle {
out massMeasured:>ISQ::mass;
}
then action evaluatePassFail {
in massMeasured:>ISQ::mass;
out verdict = PassIf(
vehicleSpecification.vehicleMassRequirement(vehicle_b)
);
}
flow from weighVehicle.massMeasured to evaluatePassFail.massMeasured;
return :>> verdict = evaluatePassFail.verdict;
The view definition TreeView defines views that are rendered as tree diagrams. The view definition
PartsTreeView specializes TreeView with a filter condition that only PartUsages should be included in the
view. The view usage vehiclePartsTree_Safety adds the further condition to only include parts that have the
metadata annotation for Safety. This view then exposes all the nested parts of vehicle_b, such that those parts
meeting all the filter criteria are rendered in a tree diagram.
VehicleSafetyView
«import»**
«satisfy»
«import»*
ViewpointDefinitions
ViewDefinitions
«concern def»
VehicleSafety «viewpoint def»
«part def» SafetyViewpoint «view def» PartsTree
doc
identify system safety features SafetyEngineer concerns PartsTreeView
stakeholders require vs: VehicleSafety
se: SafetyEngineer
«view def»
TreeView
renderings
asTreeDiagram:> Views::asTreeDiagram
package Viewpoints{
part def SafetyEngineer;
concern def VehicleSafety {
doc /* Vehicle must have necessary safety features. */
stakeholder se:SafetyEngineer;
}
viewpoint safetyViewpoint{
frame concern vs:VehicleSafety;
}
}
package ViewDefinitions{
view def TreeView {
A.12 Variability
The part vehicleFamily models a family of Vehicles that allows variations in the subparts engine,
transmission and sunroof. In particular, the part engine has two variants, engine4Cyl and engine6Cyl,
which constrain engine.cylinders to have multiplicity 4 and 6, respectively. The part cylinders of
engine6Cyl has an attribute diameter that is also a variation point, with two variants for smallDiameter and
largeDiameter. There are also two choices for the transmission and a sunroof is optional. The choice of a
selected variant at one variation point can constrain the available choices at another variation point. For this
example, the choices are constrained to be a 4 cylinder engine with a manual transmission or a 6 cylinder engine
with an automatic transmission.
«part»
vehicleFamily
«assert constraint»
1 1 1 selectionConstraint
1 1 1
operator expressions
«variation» «variation» «variation» { (engine==engine::engine4Cyl and «part» «part» «part»
«part» «part» «part»
transmissionChoices==TransmissionChoices::transmissionManual) driveshaft frontAxleAssembly rearAxleAssembly
engine: Engine transmissionChoices: TransmissionChoices sunroof: Sunroof
xor
(engine==engine::engine6Cyl and
transmissionChoices==TransmissionChoices::transmissionAutomatic)
}
«part def»
TransmissionChoices
1 1
«variant» «variant»
«part» «part»
engine4Cyl: Engine4Cyl engine6Cyl: Engine6Cyl
6 * *
«part»
«variant» «variant»
cylinder: Cylinder «part» «part»
attributes transmissionAutomatic: TransmissionAutomatic transmissionManual: TransmissionManual
diameter: LengthValue
A.13 Individuals
The part definition Vehicle represents a class of individual vehicles with common characteristics. The parts
vehicle_a and vehicle_b are usages of Vehicle with different part decompositions. There can be many
individual vehicles that conform to vehicle_a or vehicle_b.
The individual part definition Vehicle_1 is a specialization of Vehicle that restricts the part definition to a single
individual. A usage vehicle_1 of this definition represents that individual within a specific context. This usage can
also subset vehicle_b and inherit the parts hierarchy and other features of vehicle_b.
Additional individual definitions FrontAxleAssembly_1, FrontAxle_1, Wheel_1, Wheel_2, etc., are similarly
specializations of their respective part definitions. The vehicle_1.frontAxleAssembly is a usage of
FrontAxleAssembly_1, whose frontAxle is a usage of FrontAxle_1, whose wheels are Wheel_1 and
Wheel_2. In this way, vehicle_1 can decompose into a hierarchy of individual parts.
An individual definition and usage can be created for any definition and usage element. An individual action for
example, represents a particular performance of an action with individual inputs and outputs.
The part definition VehicleRoadContext defines a context containing vehicle:Vehicle and road:Road
subparts. The individual definition VehicleRoadContext_1 is a specialization of VehicleRoadContext whose
subparts are constrained to be usages of the individual definitions Vehicle_1 and Road_1.
As shown below, there is a time slice of VehicleRoadContext_1 from t0 to t2 called t0_t2_a with three
snapshots t0_a, t1_a and t2_a, at the times t0, t1 and t2, respectively. Each context snapshot contains snapshots
of Vehicle_1 and Road_1 at the respective times. Each of the vehicle and road snapshots are characterized by
specific values for their attributes. In addition, the vehicle snapshot contains snapshots of its individual parts
consistent with the decomposition of vehicle_1.
An analysis may be used to compute the values of the attributes for each snapshot. The analysis results reflect the
time history of the individuals, which may be visualized using typical time-based plots and data representations.
individual a:VehicleRoadContext_1{
timeslice t0_t2_a{
snapshot t0_a {
attribute t0 redefines time=0 [s];
snapshot t0_r:Road_1{
:>>incline=0;
:>>friction=.1;
}
snapshot t0_v:Vehicle_1{
:>>position=0 [m];
:>>velocity=0 [m];
:>>acceleration=1.96 [m/s**2];
snapshot t0_fa:FrontAxleAssembly_1{
snapshot t0_leftFront:Wheel_1;
snapshot t0_rightFront:Wheel_2;
}
}
}
snapshot t1_a{
attribute t1 redefines time=1 [s];
snapshot t1_r:Road_1{
:>>incline=0;
:>>friction=.1;
}
snapshot t1_v:Vehicle_1{
:>>position=.98 [m];
:>>velocity=1.96 [m/s];
:>>acceleration=1.96 [m/s**2];
snapshot t1_fa:FrontAxleAssembly_1{
snapshot t1_leftFront:Wheel_1;
snapshot t1_rightFront:Wheel_2;
}
}