Sys ML
Sys ML
Version 1.6
__________________________________________________
OMG Document Number: formal/19-11-01
Date: November 2019
Standard document URL: https://www.omg.org/spec/SysML/1.6/
Machine Readable File(s):
Normative:
https://www.omg.org/spec/SysML/20181001/sysml.xmi
Non-normative:
https://www.omg.org/spec/SysML/20181001/sysmldi.xmi
https://www.omg.org/spec/SysML/20181001/qudv.xmi
https://www.omg.org/spec/SysML/20181001/iso800000.xmi
Refer to the Roadmap located in the Preface for a list of documents that were generated as
part of the adoption, finalization, and revision process.
Copyright © 2003-2018, American Systems Corporation
Copyright © 2003-2018, PTC Inc.
Copyright © 2003-2018, BAE SYSTEMS
Copyright © 2003-2018, The Boeing Company
Copyright © 2003-2018, Ceira Technologies
Copyright © 2003-2018, Deere & Company
Copyright © 2003-2018, Airbus
Copyright © 2003-2018, EmbeddedPlus Engineering
Copyright © 2007-2018, European Aeronautic Defence and Space Company N.V.
Copyright © 2003-2018, Eurostep Group AB
Copyright © 2003-2018, Gentleware AG
Copyright © 2003-2018, I-Logix, Inc.
Copyright © 2003-2018, International Business Machines
Copyright © 2003-2018, International Council on Systems Engineering
Copyright © 2003-2018, Israel Aircraft Industries
Copyright © 2003-2018, Lockheed Martin Corporation
Copyright © 2003-2018, Mentor Graphics
Copyright © 2003-2018, Motorola, Inc.
Copyright © 2007-2018, National Aeronautics and Space Administration
Copyright © 2007-2018, No Magic, Inc.
Copyright © 2003-2018, Northrop Grumman
Copyright © 1997-2019, Object Management Group
Copyright © 2003-2018, oose Innovative Informatik eG
Copyright © 2003-2018, PivotPoint Technology Corporation
Copyright © 2003-2018, Raytheon Company
Copyright © 2003-2018, Sparx Systems
Copyright © 2003-2018, Telelogic AB
Copyright © 2003-2018, THALES
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.
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.
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.
For a complete list of trademarks, see: http://www.omg.org/legal/tm_list.htm. All other products or company names
mentioned are used for identification purposes only, and may be trademarks of their respective owners.
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
OMG
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.
More information on the OMG is available at https://www.omg.org/.
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
109 Highland Avenue
Needham, MA 02494
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 http://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 Documents, Report a Bug/Issue.
The Finalization Task Force (FTF) process generated the following documents:
Beta 1: ptc/2006-05-04 (a.k.a. Final Adopted Specification)
Beta 2: ptc/2007-03-19 (FTF Report - full record of FTF votes and issue resolutions
ptc/2007-02-03, ptc/2007-03-04 (a.k.a. convenience document, with and without change bars)
ptc/2007-02-05 (XMI)
ptc/2007-03-09 (Annex E - Requirements Traceability)
Version 1.0 Formal Specification: formal/2007-09-01
The SysML 1.1 Revision Task Force (RTF) process generated the following documents:
ptc/2008-05-15 (RTF Report - full record of RTF votes and issue resolutions)
ptc/2008-05-16, ptc/2008-05-17 (a.k.a. convenience document, with and without change bars)
ptc/2008-05-18 (XMI)
Version 1.1 Formal Specification: formal/2008-11-01, formal/2008-11-02
Associated schema files for this specification, at https://www.omg.org/spec/SysML/20090501/, include the following
files:
SysML-profile.xmi XMI 2.1 serialization of the SysML Profile
Activities-model.xmi XMI 2.1 serialization of the Activities model library
Blocks-model.xmi XMI 2.1 serialization of the Blocks model library
UML4SysML-metamodel.xmi XMI 2.1 serialization of the merged UML4SysML subset of UML 2
(used to define the SysML Profile)
The SysML 1.3 Revision Task Force (RTF) process generated the following documents:
ptc/2011-08-08 (RTF Report - full record of RTF votes and issue resolutions)
ptc/2011-08-07 (Submission inventory document)
ptc/2011-08-09, ptc/2011-08-10 (Beta “convenience document,” with and without change bars)
ptc/2011-08-11, ptc/2011-08-12 (Normative and non-normative XMI)
ptc/2012-04-07, ptc/2012-04-08 (Normative and non-normative XMI)
Version 1.3 Formal Specification: formal/2012-06-01, formal/2012-06-02
Associated schema files for this specification, at https://www.omg.org/spec/SysML/20120401/, include the following
files:
SysML.xmi (Normative)
ISO-80000-1-QUDV.xmi (Non-normative)
ISO-80000-1-SysML.xmi (Non-normative)
QUDV.xmi (Non-normative)
The SysML 1.4 Revision Task Force (RTF) process generated the following documents:
ptc/2013-12-08 (RTF Report - full record of RTF votes and issue resolutions)
ptc/2013-12-10, ptc/2013-12-09 (Beta “convenience document,” with and without change bars)
ptc/2013-12-11, ptc/2013-12-12 (Normative and non-normative XMI)
Version 1.4 Formal Specification: formal/2015-06-03, formal/2015-06-04
The SysML 1.5 Revision Task Force (RTF) process generated the following documents:
ptc/2016-11-01 (RTF Report - full record of RTF votes and issue resolutions)
ptc/2016-11-02, ptc/2016-11-03 (Beta “convenience document,” with and without change bars)
ptc/2016-11-05, ptc/2016-11-06, ptc/16-11-07, ptc/16-11-08 (Normative and non-normative XMI)
Associated schema files for this specification, at https://www.omg.org/spec/SysML/20161101/, include the following
files:
SysML.xmi (Normative)
SysMLDI.xmi (Normative)
ISO-80000-1-QUDV.xmi (Non-normative)
ISO-80000-1-SysML.xmi (Non-normative)
QUDV.xmi (Non-normative)
The SysML 1.6 Revision Task Force (RTF) process generated the following documents:
ptc/2018-10-01 (RTF Report - full record of RTF votes and issue resolutions)
ptc/2018-10-02, ptc/2018-10-03 (Beta “convenience document,” with and without change bars)
ptc/2018-10-04, ptc/2018-10-05, ptc/2018-10-06, ptc/2018-10-07, ptc/2018-10-08 (Normative and non-
normative XMI)
Associated schema files for this specification, at https://www.omg.org/spec/SysML/20161101/, include the following
files:
SysML.xmi (Normative)
ISO-80000-1-QUDV.xmi (Non-normative)
ISO-80000-1-SysML.xmi (Non-normative)
QUDV.xmi (Non-normative)
3.2.1 Organization
This International Standard is organized as follows:
Preface
INTRODUCTION
1 Scope
2 Normative References
3 Additional Information - includes Relationships to Other Standards, How to Read this International Standard, and
Acknowledgments
4 Language Architecture - General Information, Design Principles, Architecture, and SysML Diagrams
5 Conformance - General Information and Conformance Types
6 Language Formalism -
• Levels of Formalism
• Clause Structure
• Conventions and Typography
ANNEXES
Annex A - Diagrams
Annex B - SysML Diagram Interchange
Annex C - Deprecated Elements
Annex D - Sample Problem
Annex E - Non-normative Extensions
Annex F - Requirements Traceability
Annex G - Model Interchange
Table 4-1 lists the metaclasses excluded from the UML4SysML subset. Table 4-2 lists the metaclasses and datatypes
included in the UML4SysML subset. Table 4.3 lists the stereotypes, blocks, valuetypes, and datatypes included in
SysML.
As previously stated, the design approach for SysML is to reuse a subset of UML and create extensions to support the
specific concepts needed to satisfy the requirements in the UML for SE RFP. The SysML package structure shown in
Figure 4-2: SysML Extension of UMLFigure contains a set of packages that correspond to concept areas in SysML that
have been extended.
The SysML packages extend UML as follows:
• SysML::Model Elements extends Classification, Common Structure
• SysML::Blocks extends Classification, Structured Classifiers, Common Structure, Simple Classifiers
• SysML::ConstraintBlocks extends Structured Classifiers
• SysML::Ports and Flows extends Actions, Common Behavior, Classification
• SysML::Activities extends Activities.
• SysML::Allocations extends Common Structure, Activities
• SysML::Requirements extends Common Structure, Classification, Common Behavior,
• Structured Classifiers
• SysML::DeprecatedElements extends Common Structure, Simple Classifiers, Classification, Structured
Classifiers, Actions, and SysML Item Flows
Figure 4-4 shows non-normative packages in this International Standard that depend on SysML and UML. Note that the
QUDV and ISO-80000 libraries are described in non-normative annexes to this specification.
6.2.1 Overview
This sub clause provides an overview of the SysML modeling constructs defined in the subject package, which are
usually associated with one or more SysML diagram types.
7.1 Overview
The ModelElements package of SysML defines general-purpose constructs that may be shown on multiple SysML
diagram types. These include package, model, various types of dependencies (e.g., import, access, refine, realization),
constraints, and comments. The package diagram defined in this clause is used to organize the model by partitioning
model elements into packageable elements and establishing dependencies between the packages and/or model elements
within the package. The package defines a namespace for the packageable elements. Model elements from one package
can be imported and/or accessed by another package. This organizational principle is intended to help establish unique
naming of the model elements and avoid overloading a particular model element name. Packages can also be shown on
other diagrams such as the block definition diagram, requirement diagram, and behavior diagrams.
Constraints are used to capture simple constraints associated with one or more model elements and can be represented on
several SysML diagrams. The constraint can represent a logical constraint such as an XOR, a condition on a decision
branch, or a mathematical expression. The constraint has been significantly enhanced in SysML as specified in Clause
10, “Constraint Blocks” to enable it to be reused and parameterized to support engineering analysis.
Comments can be associated with any model element and are quite useful as an informal means of documenting the
model. SysML has introduced an extension to a comment called rationale to facilitate the system modeler in capturing
decisions. The rationale may be attached to any entity, such as a system element (block), or to any relationship, such as
the satisfy relationship between a design element and a requirement. In the latter case, it may be used to capture the basis
for the design decision and may reference an analysis report or trade study for further elaboration of the decision. In
addition, SysML includes an extension of a comment to reflect a problem or issue that can be attached to any other model
element.
Comment UML4SysML::Comment
ConstraintNote UML4SysML::Constraint
ConstraintTextualNote UML4SysML::Constraint
ElementGroup SysML::ModelElements::Element
Group
Model UML4SysML::Model
PackageDiagram UML4SysML::Package
PackageWithNameInTab UML4SysML::Package
PackageWithNameInside UML4SysML::Package
Problem SysML::ModelElements::Problem
Rationale SysML::ModelElements::Rationale
Stakeholder SysML::ModelElements::Stakeholder
View SysML::ModelElements::View
Viewpoint SysML::ModelElements::Viewpoint
Conform UML4SysML::Conform
Expose SysML::ModelElements::Expose
Dependency UML4SysML::Dependency
PackageContainment UML4SysML::Package::ownedElement
Realization UML4SysML::Realization
Refine UML4SysML::Refine
Package ModelElements
7.3.2.1 Conform
Description
A Conform relationship is a generalization between a view and a viewpoint. The view conforms to the specified rules and
conventions detailed in the viewpoint. When this is done, the view is said to conform to the viewpoint. Conform extends
UML generalization.
Association Ends
• base_Generalization : Generalization [1]
Constraints
• 1_general_is_viewpoint
The general classifier shall be an element stereotyped by Viewpoint
Viewpoint.allInstances()->exists(v | v.base_Class = self.base_Generalization.general)
• 2_specific_is_view
The specific classifier shall be an element that is stereotyped by View
View.allInstances()->exists(v | v.base_Class = self.base_Generalization.specific)
7.3.2.2 ElementGroup
Description
The ElementGroup stereotype provides a lightweight mechanism for grouping various and possibly heterogeneous model
elements by extending the capability of comments to refer to multiple annotated elements. For example, it can group
elements that are associated with a particular release of the model, have a certain risk level, or are associated with a
Element groups are named using the name property. The criterion for membership in an element group is specified by the
body of the comment the stereotype is applied to. By grouping elements, the modeler asserts that the criterion of the
group applies to the member. Optionally, members of an element group can be ordered using its orderedMember
property.
ElementGroups appear in diagrams as comments, and properties of the stereotype appear in the notation for stereotype
properties. Grouped elements are the annotated elements of the comment to which the stereotype is applied. This has
several implications:
• Element groups do not own their elements and thus an element can participate in an unlimited number of
groups.
• The elements in a group are identified by the modeler, as opposed to being the result of a query, as in views.
• Element groups can be members of other element groups, but this does not imply that members of the first are
members of the second.
Elements related to the grouped elements are not included in the group, even though the body text can address them. In
particular, element groups annotating deeply nested properties or properties with bindings are grouping only the
properties, rather than their nesting or their bound properties.
Grouped elements are also limited to elements of models, rather than instances of values of those model elements. In
particular, element groups annotating blocks or properties are not grouping the instances of the blocks or the values of the
properties. However, since the semantics of ElementGroup is left to the modeler, the body text can refer to related
elements outside the group, such as instances and values of the grouped elements, or to bound properties. The modeler is
then responsible for writing body text that explains the implications for the related elements. For instance:
• A group with the criterion: "Authored by John" could annotate any model element added in the model by John.
This body text does not address any related elements. For example, if the annotated element is a property bound
to another property, the group would not imply authorship of the second property.
• A group with the criterion: "Instances are manufactured in a foreign country" could annotate Blocks to indicate
that any instances of those Blocks are produced in a foreign country. This body text does not address the Block
itself, which is not necessarily "manufactured" in a foreign country.
• A group with criterion: "Values are manufactured in a foreign country" could annotate properties, including part
properties, to indicate the values of the property are produced in a foreign country. This body text does not
address the property itself, which is not necessarily "manufactured" in a foreign country. Since the text is about
values of the property, it is also about values of other properties that might be bound to the annotated property,
because the values of bound properties are the same.
Attributes
• /criterion : String [0..1]
Specifies the rationale for being member of the group. Adding an element to the group asserts that the criterion
applies to this element. Derived from Comment::body.
(derived)
7.3.2.3 Expose
Description
The expose relationship relates a view to one or more model elements. Each model element is an access point to initiate
the query. The view and the model elements related to the view are passed to the constructor when it is invoked. The
method describes how the exposed elements are navigated to extract the desired information.
Association Ends
Constraints
• 1_client_is_view
The client shall be an element stereotyped by View.
View.allInstances()->exists(v | v.base_Class = self.base_Dependency.client)
7.3.2.4 Problem
Description
A Problem documents a deficiency, limitation, or failure of one or more model elements to satisfy a requirement or need,
or other undesired outcome. It may be used to capture problems identified during analysis, design, verification, or
7.3.2.5 Rationale
Description
A Rationale documents the justification for decisions and the requirements, design, and other decisions. A Rationale can
be attached to any model element including relationships. It allows the user, for example, to specify a rationale that may
reference more detailed documentation such as a trade study or analysis report. Rationale is a stereotype of comment and
may be attached to any other model element in the same manner as a comment.
Association Ends
• base_Comment : Comment [1]
7.3.2.6 Stakeholder
Description
A stakeholder represents a role, group, or individual who has concerns that will be addressed by the View of the model.
Attributes
• /concern : String [0..*]
(derived)
• concernList : Comment [0..*]
Association Ends
• base_Classifier : Classifier [1]
Constraints
• 1_not_association
A Stakeholder stereotype can only be applied to UML::Actor or UML::Class which are not a
UML::Association.
self.base_Classifier.oclIsKindOf(UML::Actor)
or
(self.base_Classifier.oclIsKindOf(UML::Class)
and
not self.base_Classifier.oclIsKindOf(UML::Association))
• not_association
The stakeholder stereotype can only be applied to UML::Actor or UML::Class which are not a
UML::Association
(self.base_Classifier.oclIsKindOf(UML::Actor) or
self.base_Classifier.oclIsKindOf(UML::Class))
and not self.base_Classifier.oclIsKindOf(UML::Association)
7.3.2.7 View
Description
A View is a model element that represents a real world artifact that can be presented to stakeholders. The view is the
result of querying one or more models that are defined by a viewpoint method. The view shall conform to the viewpoint
in terms of the viewpoint stakeholders, concerns, method, language, and presentation requirements.
The information may be presented to the stakeholder in any format specified by the viewpoint, which may include
figures, tables, plots, entire documents, presentation slides, or video.
Attributes
• /stakeholder : Stakeholder [0..*]
The list of stakeholders is derived from the viewpoint the view conforms to.
(derived)
• /viewpoint : Viewpoint [1]
The viewpoint for this View is derived from the conform relationship.
(derived)
Association Ends
• base_Class : Class [1]
Constraints
• 1_single_viewpoint
A view shall only conform to a single viewpoint
Conform.allInstances()->select(base_Generalization.specific = self.base_Class)
->size() = 1
• 2_viewpoint_derived_from_conform
The derived value of the viewpoint shall be the classifier stereotyped by Viewpoint that is the general classifier
of the generalization relationship stereotyped by Conform for which the View is the specific classifier
self.viewpoint = Viewpoint.allInstances()->any(base_Class = Conform.allInstances()
->any(base_Generalization.specific = self.base_Class).base_Generalization.general)
• 3_stakeholder_derived_from_conform
The derived values of the stakeholder attribute shall be the classifiers stereotyped by Stakeholder that are the
values of the stakeholder attribute of the general classifier of the generalization relationship stereotyped by
Conform for which the View is the specific classifier.
self.stakeholder = Viewpoint.allInstances()->any(base_Class = Conform.allInstances()
->any(base_Generalization.specific =
self.base_Class).base_Generalization.general).stakeholder
7.3.2.8 Viewpoint
Description
A Viewpoint is a specification of the conventions and rules for constructing and using a view for the purpose of
addressing a set of stakeholder concerns. They specify the elements expected to be represented in the view, and may be
formally or informally defined. For example, the security viewpoint may require the security requirements, security
functional and physical architecture, and security test cases.
Attributes
• /concern : String [0..*]
The interest of the stakeholders displayed as the body of the comments from concernList.
(derived)
BlockDefinition SysML::Blocks::Block
Diagram
UML4SysML::Package
Block SysML::Blocks::Block
ValueType SysML::Blocks::ValueType
PropertySpecific SysML::Blocks::
Type PropertySpecificType
Behavior SysML::Blocks::Block
Compartment
Namespace SysML::Blocks::Blocks
Compartment
Structure SysML::Blocks::Blocks
Compartment
BoundReference SysML::Blocks::Blocks,
SysML::Blocks::BoundReference,
SysML::Blocks::EndPathMultiplicity
QuantityKind UML4SysML::InstanceSpecification
InstanceSpecification UML4SysML::InstanceSpecification
InstanceSpecification UML4SysML::InstanceSpecification
InstanceSpecification UML4SysML::InstanceSpecification
InstanceSpecification UML4SysML::InstanceSpecification
Namespace SysML::Blocks::Blocks
Compartment
BoundReference SysML::Blocks::Blocks,
SysML::Blocks::BoundReference,
SysML::Blocks::EndPathMultiplicity
Unit UML4SysML::InstanceSpecification
Dependency UML4SysML::Dependency
BlockNamespace UML4SysML::Class::nestedClassifier
Containment
InternalBlockDiagram SysML::Blocks::Block
Property UML4SysML::Property
PropertySpecificType SysML::Blocks::
PropertySpecificType
BoundReference SysML::Blocks::BoundReference
InternalBlockDiagram UML4SysML::Dependency
BindingConnector UML4SysML::Connector
BidirectionalConnector UML4SysML::Connector
UnidirectionalConnector UML4SysML::Connector
SysML defines a special form of compartment, with the label “constraints,” which may contain one or more constraints
owned by the block. A constraint owned by the block may be shown in this compartment using the standard text-based
notation for a constraint, consisting of a string enclosed in brace characters. The use of a compartment to show
constraints is optional. The note-based notation, with a constraint shown in a note box outside the block and linked to it
by a dashed line, may also be used to show a constraint owned by a block.
A constraints compartment may also contain declarations of constraint properties owned by the block. A constraint
property is a property of the block that is typed by a ConstraintBlock, as defined in Clause 10. Only the declaration of the
constraint property may be shown within the compartment, not the details of its parameters or binding connectors that
link them to other properties.
Any ValueSpecification can optionally display the unit's symbol if it has a type which is a ValueType.
If ValueSpecification has no type and it is used as a value of a slot, then it takes the unit from defining feature type.
If ValueSpecification has no type and it is used as a default value of a value property, it takes the unit from that property
type.
If no unit symbol is defined, then the unit name may be displayed.
<value> [" " <unitSymbol | unitName>]
e.g., distance:Length = 10 m
8.3.1.4 UML Diagram Elements not Included in SysML Internal Block Diagrams
The UML Composite Structure diagram has many notations not included in the subset defined in this clause. Other
SysML clauses add some of these notations into the supported contents of an internal block diagram.
8.3.2 Stereotypes
8.3.2.1 Package Blocks
Figure 8-9: Abstract syntax extensions for SysML adjunct properties and classifier behavior properties
Description
The AdjunctProperty stereotype can be applied to properties to constrain their values to the values of connectors typed by
association blocks, call actions, object nodes, variables, parameters, interaction uses, and submachine states. The values
of connectors typed by association blocks are the instances of the association block typing a connector in the block
having the stereotyped property. The values of call actions are the executions of behaviors invoked by the behavior
having the call action and the stereotyped property (see 11.3.1.1.1, Notation for more about this use of the stereotype).
The values of object nodes are the values of tokens in the object nodes of the behavior having the stereotyped property
(see 11.3.1.4.1, Notation for more about this use of the stereotype). The values of variables are those assigned by
executions of activities that have the stereotyped property. The values of parameters are those assigned by executions of
behaviors that have the stereotyped property. The keyword «adjunct» before a property name indicates the property is
stereotyped by AdjunctProperty.
Association Ends
Constraints
• 10_multiplicity_same_or_less_restrictive
Properties with AdjunctProperty applied that have a Variable or Parameter as principal shall have a lower
multiplicity the same as or lower than the lower multiplicity of their principal, and an upper multiplicity the
same as or higher than the upper multiplicity of their principal
self.principal.oclIsKindOf(UML::MultiplicityElement) implies self.base_Property.lower
<= self.principal.oclAsType(UML::MultiplicityElement).lower and
self.base_Property.upper >= self.principal.oclAsType(UML::MultiplicityElement).upper
• 11_submachine_and_interactionuse_composite_and _compatible_type
Properties with AdjunctProperty applied that have an InteractionUse or submachine State as principal shall be
composite and be typed by the interaction or state machine invoked by the interaction use or submachine State
or one of their generalizations.
self.principal.oclIsKindOf(UML::InteractionUse) or
self.principal.oclIsKindOf(UML::State) implies let behavior: UML::Behavior = if
self.principal.oclIsKindOf(UML::InteractionUse) then
self.principal.oclAsType(UML::InteractionUse).refersTo else
self.principal.oclAsType(UML::State).submachine endif in if behavior.oclIsUndefined()
then self.base_Property.type->isEmpty() else self.base_Property.type->notEmpty() and
behavior->closure(generalization)->including(behavior)
->includes(self.base_Property.type) endif
• 1_principal_kind
The principal of an applied AdjunctProperty shall be a Connector, CallAction, ObjectNode, Variable, Parameter,
submachine State, or InteractionUse.
self.principal.oclIsKindOf(UML::Connector) or
self.principal.oclIsKindOf(UML::CallAction) or
self.principal.oclIsKindOf(UML::ObjectNode) or
• 2_same_name
Properties to which AdjunctProperty applied shall have the same name as the principal, if the principal is a
NamedElement.
self.principal.oclIsKindOf(UML::NamedElement) implies self.base_Property.name =
self.principal.oclAsType(UML::NamedElement).name
• 3_connector_and_callaction_composite
Properties with AdjunctProperty applied that have a Connector or CallAction as principal shall be composite.
self.principal.oclIsKindOf(UML::Connector) or
self.principal.oclIsKindOf(UML::CallAction) implies self.base_Property.isComposite()
• 4_same_owner
Properties with AdjunctProperty applied shall be owned by an element that owns the principal, at least
indirectly, or one of that elements specializations.
let owners: Set(UML::Element) = self.principal->closure(owner) in let
specializations: Set(UML::Element) = UML::Classifier.allInstances()->select(c |
c->closure(general)->intersection(owners)->notEmpty()) in owners
->union(specializations)->includes(self.base_Property.owner)
• 5_compatible_type
Properties with AdjunctProperty applied that have as principal a Connector, ObjectNode, Variable, or Parameter
shall have the same type as the principal or one of that types generalizations.
self.principal.oclIsKindOf(UML::Connector) or
self.principal.oclIsKindOf(UML::Variable) or
self.principal.oclIsKindOf(UML::Parameter) implies let principal_type:
UML::Classifier = if self.principal.oclIsKindOf(UML::Connector) then
self.principal.oclAsType(UML::Connector).type else
self.principal.oclAsType(UML::TypedElement).type.oclAsType(UML::Classifier) endif in
principal_type->closure(general)->including(principal_type)
->includes(self.base_Property.type)
• 6_connector_principal_associationblock
Connectors that are principals of an applied AdjunctProperty shall have association blocks as types
self.principal.oclIsKindOf(UML::Connector) implies let type: UML::Association =
self.principal.oclAsType(UML::Connector).type in Block.allInstances().base_Class
->includes(type)
• 7_adjunctproperty_connectorproperty_consistent
AdjunctProperty and ConnectorProperty applied to the same property shall have the same values for principal
and connector, respectively.
AdjunctProperty.allInstances()->forAll(ap | let cp: ConnectorProperty =
ConnectorProperty.allInstances()->any(base_Property=ap.base_Property) in (not
cp.oclIsUndefined()) implies cp.connector = ap.principal)
• 9_objectnode_multiplicity
Properties with AdjunctProperty applied that have an ObjectNode as principal shall have a lower multiplicity of
zero and an upper multiplicity the same as or higher than the upperBound of the ObjectNode.
self.principal.oclIsKindOf(UML::ObjectNode) implies self.base_Property.lower = 0 and
self.base_Property.upper >=
self.principal.oclAsType(UML::ObjectNode).upperBound.unlimitedValue()
8.3.2.3 BindingConnector
Description
A Binding Connector is a connector which specifies that the properties at both ends of the connector have equal values. If
the properties at the ends of a binding connector are typed by a ValueType, the connector specifies that the instances of
the properties shall hold equal values, recursively through any nested properties within the connected properties. If the
properties at the ends of a binding connector are typed by a Block, the connector specifies that the instances of the
properties shall refer to the same block instance. As with any connector owned by a SysML Block, the ends of a binding
connector may be nested within a multi-level path of properties accessible from the owning block. The
NestedConnectorEnd stereotype is used to represent such nested ends just as for nested ends of other SysML connectors.
Association Ends
Constraints
• 1_compatible_types
The two ends of a binding connector shall have either the same type or types that are compatible so that equality
of their values can be defined.
8.3.2.4 Block
Description
A Block is a modular unit that describes the structure of a system or element. It may include both structural and
behavioral features, such as properties and operations, which represent the state of the system and behavior that the
system may exhibit. Some of these properties may hold parts of a system, which can also be described by blocks that type
the properties. Properties without types do not restrict the instances that can be values of the properties, as if they had the
most general type possible. A block may include a structure of connectors between its properties to indicate how its parts
or other properties relate to one another.
SysML blocks provide a general-purpose capability to describe the architecture of a system. They provide the ability to
represent a system hierarchy, in which a system at one level is composed of systems at a more basic level. They can
describe not only the connectivity relationships between the systems at any level, but also quantitative values or other
information about a system.
SysML does not restrict the kind of system or system element that may be described by a block. Any reusable form of
description that may be applied to a system or a set of system characteristics may be described by a block. Such reusable
descriptions, for example, may be applied to purely conceptual aspects of a system design, such as relationships that hold
between parts or properties of a system.
Connectors owned by SysML blocks may be used to define relationships between parts or other properties of the same
containing block. Connectors can be typed by associations, which can specify more detail about the links between parts
or other properties of a system, along with the types of the connected properties. Associations can also be blocks, and
when used to type connectors give relationships their own interconnected parts and other properties. Connectors without
types do not restrict the way the connected properties are linked together, as if they had the most general type possible.
Connectors have both structural and behavioral functions, which can be used together or separately. Connectors as
structure specify links between parts or other properties of a system. Connectors as behavior specify communication and
item flow between parts or other properties. Connected properties can be linked without specifying communication and
item flow, or can specify communication and item flow without specifying a particular kind of link, or both.
SysML excludes variations of associations in UML in which navigable ends can be owned directly by the association. In
SysML, navigation is equivalent to a named property owned directly by a block. The only form of an association end that
SysML allows an association to own directly is an unnamed end used to carry an inverse multiplicity of a reference
property. This unnamed end provides a metamodel element to record an inverse multiplicity, to cover the specific case of
a unidirectional reference that defines no named property for navigation in the inverse direction. SysML enforces its
equivalence of navigation and ownership by means of constraints that the block stereotype enforces on the existing UML
metamodel.
SysML establishes four basic classifications of properties belonging to a SysML Block or ValueType. A property typed
by a SysML Block that has composite aggregation is classified as a part property, except for the special case of a
constraint property. Constraint properties are further defined in Clause 10. A port is another category of property, as
further defined in Section 9. A property typed by a Block that does not have composite aggregation is classified as a
reference property. A property typed by a SysML ValueType is classified as a value property, and always has composite
aggregation. Part, reference, value, and constraint properties may be shown in block definition compartments with the
labels "parts," "references," "values," and "constraints" respectively. Properties of any type may be shown in a
"properties" compartment or in additional compartments with user-defined labels.
SysML also supports properties with shared aggregation, as shown by a white diamond symbol on an association. Like
UML, SysML defines no specific semantics or constraints for properties with shared aggregation, but particular models
or tools may interpret them in specific ways.
In addition to the form of default value specifications that SysML supports on properties of a block (with an optional "="
<value-specification> string following the rest of a property definition), SysML supports an additional form of value
specification for properties using initialValue compartments on an internal block diagram (see Internal Block Diagram on
page 4). An entire tree of context-specific values can be specified on a containing block to carry values of nested
properties as shown on an internal block diagram.
Context-specific values are represented in the SysML metamodel by means of the InstanceValue subtype of UML
ValueSpecification. Selected slots of UML instance specifications referenced by these instance values carry the
individual values shown in initialValue compartments.
If a property belonging to a block has a specification of initial values for any of the properties belonging to its type, then
the default value of that property shall be a UML InstanceValue element. This element shall reference a UML
InstanceSpecification element created to hold the initial values of the individual properties within its usage context.
Selected slots of the referenced instance specification shall contain value specifications for the individual property values
specified in a corresponding initialValues compartment. If a value of a property is shown by a nested property box with
its own initialValues compartment, then the slot of the instance specification for the containing property shall hold a new
InstanceValue element. Selected slots of the instance specification referenced by this value shall contain value
specifications for any nested initial values, recursively through any number of levels of nesting. A tree of instance values
referencing instance specifications, each of which may in turn hold slots carrying instance values, shall exist until self-
contained value specifications are reached at the leaf level.
Attributes
If true, then the block is treated as a black box; a part typed by this black box can only be connected via its ports
or directly to its outer boundary. If false, or if a value is not present, then connections can be established to
elements of its internal structure via deep-nested connector ends.
Association Ends
• 1_associations_binary
For an association in which both ends are typed by blocks, the number of ends shall be exactly two.
UML::Association.allInstances()->select(a| a.memberEnd->forAll(e| e.type->notEmpty()
and Block.allInstances().base_Class->includes(e.type)))->forAll(a | a.memberEnd
->size()=2)
• 2_connectors_binary
The number of ends of a connector owned by a block shall be exactly two. (In SysML, a binding connector is
not typed by an association, so this constraint is not implied entirely by the preceding constraint.)
self.base_Class.ownedConnector->forAll(c | c.end->size()=2 )
• 5_uml_connector_constraint_removed
The following constraint under 11.8, "Connector" in the UML 2 standard is removed by SysML: "The
ConnectableElements attached as roles to each ConnectorEnd owned by a Connector must be roles of the
Classifier that owned the Connector, or they must be ports of such roles.
-- Cannot be expressed in OCL
• 6_valueproperties_composite
If a property owned by a SysML Block or SysML ValueType is typed by a SysML ValueType, then the
aggregation attribute of the property shall be "composite."
self.base_Class.ownedAttribute->select(a| ValueType.allInstances().base_DataType
->includes(a.type))->forAll(a|a.isComposite())
• 7_composition_acyclic
Within an instance of a SysML Block, the values of any property with composite aggregation (aggregation =
composite) shall not contain the block in any of its own properties that also have composite aggregation, or
within any unbroken chain of properties that all have composite aggregation. (Within an instance of a SysML
Block, the instances of properties with composite aggregation shall form an acyclic graph.)
self.base_Class->closure(part-
>select(p|p.type.oclIsKindOf(UML::Class)).type.oclAsType(UML::Class))
->excludes(self.base_Class)
• 8_specializations_are_blocks
Any classifier that specializes a Block shall also have the Block stereotype or one of its specializations applied.
UML::Classifier.allInstances()->select(c | c.general->includes(self.base_Class))
->forAll(c | Block.allInstances()->includes(c))
• 9_uml constraint_removed
The following constraint under 11.8,"ConnectorEnd" in the UML 2 standard is removed by SysML: "[3] The
property held in self.partWithPort must not be a Port."
-- cannot be expressed in OCL
8.3.2.5 BoundReference
Description
The BoundReference stereotype can be applied to properties that have binding connectors, to highlight their usage as
constraining other properties. The bound end of the stereotype is a connector end of one of the binding connectors,
The type of stereotyped property constrains the type of the values of the bound properties. The multiplicity of the
stereotyped property constrains the number of values of the bound properties, which is the total number of values reached
by navigation through property paths of nested connector ends, if any. The multiplicities at the end of path can be
constrained, because bound references are end path multiplicities (see 8.3.2.11, EndPathMultiplicity).
Properties with BoundReference applied and upper multiplicity greater than one are ordered, with values ordered
according to when they are reached in navigating the binding path (and how they are ordered within their blocks), and
non-unique, to support paths that lead to or pass through the same object.
Generalizations
Attributes
Constraints
• 1_bindingconnector_end
Properties to which BoundReference is applied shall be the role of a connector end of at least one binding
connector, or generalized by such a property through redefinition
BindingConnector.allInstances().base_Connector.end.role->exists(r |
r=self.base_Property or self.base_Property->closure(redefinedElement)->includes(r))
• 2_opposite_bindingconnector_end
The value of boundEnd shall be a connector end of a binding connector, as identified in constraint 1, opposite
the property, as identified in constraint 1.
let opposite: UML::ConnectorEnd = BindingConnector.allInstances().base_Connector.end
->any(e | e.role=self.base_Property or self.base_Property->closure(redefinedElement)
->includes(e.role)) in self.boundEnd = opposite.owner.oclAsType(UML::Connector).end
->any(e | e<>opposite)
• 3_navigable
The role of boundEnd shall be a property accessible by navigation from instances of the block owning the
property to which BoundReference is applied, but shall not be the property to which BoundReference is applied,
or one that it is related to by redefinition.
self.base_Property.association->notEmpty() and self.boundEnd.definingEnd->notEmpty()
and self.base_Property.association.navigableOwnedEnd
->includes(self.boundEnd.definingEnd)
• 5_reference_or_valueproperty
Properties to which BoundReference is applied shall either be reference properties or value properties.
ValueType.allInstances().base_DataType->includes(self.base_Property.type) or not
self.base_Property.isComposite()
• 6_ordered_nonunique
Properties with BoundReference applied that have an upper multiplicity greater than one shall be ordered and
non-unique.
self.base_Property.upper > 1 implies self.base_Property.isOrdered and not
self.base_Property.isUnique
• 7_cannot_redefine_boundreference
BoundReferences shall not be applied to properties that are related by redefinition to other properties with
BoundReference applied.
self.base_Property.redefinedElement->notEmpty() implies
BoundReference.allInstances().base_Property
->excludesAll(self.base_Property.redefinedElement)
• 8_notbounded_to_itslef
The binding connector identified in constraint 1 shall not have the same property on both ends, or properties
related by redefinition.
let e1: UML::ConnectorEnd = self.boundEnd.owner.oclAsType(UML::Connector).end->at(1)
in let e2: UML::ConnectorEnd = self.boundEnd.owner.oclAsType(UML::Connector).end
->at(2) in e1.role <> e2.role and (e1.role.oclIsKindOf(UML::Property) and
e2.role.oclIsKindOf(UML::Property) implies
e1.role.oclAsType(UML::Property).redefinedElement->excludes(e2.role) and
e2.role.oclAsType(UML::Property).redefinedElement->excludes(e1.role))
8.3.2.6 ClassifierBehaviorProperty
Description
The ClassifierBehaviorProperty stereotype can be applied to properties to constrain their values to be the executions of
classifier behaviors. The value of properties with ClassifierBehaviorProperty applied are the executions of classifier
behaviors invoked by instantiation of the block that owns the stereotyped property or one of its specializations.
Association Ends
• 1_owner_classifierbehavior
ClassifierBehaviorProperty shall only be applied to properties owned (not inherited) by blocks that have
classifier behaviors.
Block.allInstances().base_Class->exists(c | c.ownedAttribute
->includes(self.base_Property) and c.classifierBehavior->notEmpty())
• 2_composite
Properties to which ClassifierBehaviorProperty is applied shall be composite
self.base_Property.isComposite
• 3_typed_by_classifierbehavior
Properties to which ClassifierBehaviorProperty applied shall be typed by the classifier behavior of their owning
block or a generalization of the classifier behavior.
let clBehavior: UML::Behavior =
self.base_Property.owner.oclAsType(UML::Class).classifierBehavior in
self.base_Property.type->notEmpty() and clBehavior->closure(general)
->including(clBehavior)->includes(self.base_Property.type)
8.3.2.7 ConnectorProperty
Description
Connectors can be typed by association classes that are stereotyped by Block (association blocks, see ParticipantProperty
on page 68). These connectors specify instances of the association block created within the instances of the block that
owns the connector. The values of a connector property are instances of the association block created due to the
connector referred to by the connector property.
A connector property can optionally be shown in an internal block diagram with a dotted line from the connector line to a
rectangle notating the connector property. The keyword «connector» before a property name indicates the property is
stereotyped by ConnectorProperty.
Attributes
Association Ends
Constraints
• 1_block_property
ConnectorProperty shall only be applied to properties of classes stereotyped by Block.
Block.allInstances().base_Class->exists(c | c.ownedAttribute
->includes(self.base_Property))
• 3_composite
The aggregation of a property stereotyped by ConnectorProperty shall be composite.
self.base_Property.isComposite
• 4_typed_by_associationblock
The type of the connector referred to by a connector attribute shall be an association class stereotyped by Block.
Block.allInstances().base_Class->exists(c | c.oclIsKindOf(UML::AssociationClass) and
self.connector.type = c)
• 5_same_name
A property stereotyped by ConnectorProperty shall have the same name and type as the connector referred to by
the connector attribute.
self.base_Property.name = self.connector.name
8.3.2.8 DirectedRelationshipPropertyPath
Description
Association Ends
Constraints
• 1_sourcecontext_iif_property
sourceContext shall have a value when source is a property, otherwise it shall not have a value
self.base_DirectedRelationship.source->exists(s | s.oclIsKindOf(UML::Property)) xor
self.sourceContext->isEmpty()
• 2_targetcontext_iif_property
targetContext shall have a value when target is a property, otherwise it shall not have a value.
self.base_DirectedRelationship.source->exists(s | s.oclIsKindOf(UML::Property)) xor
self.sourceContext->isEmpty()
• 3_sourcepropertypath_implies_property
source shall be a property when sourcePropertyPath has a value.
self.sourcePropertyPath->notEmpty() implies self.base_DirectedRelationship.source
->forAll(s | s.oclIsKindOf(UML::Property))
• 4_targetpropertypath_implies_property
target shall be a property when targetPropertyPath has a value.
self.targetPropertyPath->notEmpty() implies self.base_DirectedRelationship.target
->forAll(s | s.oclIsKindOf(UML::Property))
• 5_sourcecontext_owns_sourcepath_first
The property in the first position of the sourcePropertyPath list, if any, shall be owned by the sourceContext or
one of its generalizations
self.sourcePropertyPath->notEmpty() implies self.sourceContext.allAttributes()
->includes(self.sourcePropertyPath->first())
• 6_targetcontext_owns_targetpath_first
The property in the first position of the targetPropertyPath list, if any, shall be owned by the targetContext or
one of its generalizations.
self.targetPropertyPath->notEmpty() implies self.targetContext.allAttributes()
->includes(self.targetPropertyPath->first())
• 7_path_and_owners_consistency
The property at each successive position of the sourcePropertyPath and targetPropertyPath, following the first
position, shall be owned by the Block or ValueType that types the property at the immediately preceding
position, or a generalization of the Block or ValueType.
(self.sourcePropertyPath->size() >1 implies self.sourcePropertyPath->subSequence(2,
self.sourcePropertyPath->size())->forAll(p | let pp: UML::Property =
self.sourcePropertyPath->at(self.sourcePropertyPath->indexOf(p)-1) in let owners:
Set(UML::Classifier) = pp.type.oclAsType(UML::Classifier)
->including(pp.type.oclAsType(UML::Classifier)) in owners->includes(p.owner))) and
• 8_sourcepath_last_type_owns_source
The type of the property at the last position of the sourcePropertyPath list shall own or inherit the source of the
stereotyped directed relationship.
self.sourcePropertyPath->notEmpty() implies self.sourcePropertyPath
->last().type.oclAsType(UML::Classifier).allAttributes()
->includesAll(self.base_DirectedRelationship.source)
• 9_targetpath_last_type_owns_target
The type of the property at the last position of the targetPropertyPath list shall own or inherit the target of the
stereotyped directed relationship.
self.targetPropertyPath->notEmpty() implies self.targetPropertyPath
->last().type.oclAsType(UML::Classifier).allAttributes()
->includesAll(self.base_DirectedRelationship.target)
8.3.2.9 DistributedProperty
Description
DistributedProperty is a stereotype of Property used to apply a probability distribution to the values of the property.
Specific distributions should be defined as subclasses of the DistributedProperty stereotype with the operands of the
distributions represented by properties of those stereotype subclasses. A sample set of probability distributions that could
be applied to value properties is given in E.7.
Association Ends
Constraints
• 1_block_or_valuetype
The DistributedProperty stereotype shall only be applied to properties of classifiers stereotyped by Block or
ValueType.
Block.allInstances().base_Class.oclAsType(UML::Classifier)
->union(ValueType.allInstances().base_DataType)->includes(self.base_Property.owner)
8.3.2.10 ElementPropertyPath
Description
The ElementPropertyPath stereotype based on UML Element enables elements to identify other elements by a multi-level
path of properties accessible from a context block. The context block is described in specializations of
ElementPropertyPath.
Constraints
• 1_path_consistency
The property at each successive position of the propertyPath attribute, following the first position, shall be
owned by the Block or ValueType that types the property at the immediately preceding position, or a
generalization of the Block or ValueType.
self.propertyPath->size() >1 implies self.propertyPath->subSequence(2,
self.propertyPath->size())->forAll(p | let pp: UML::Property = self.propertyPath
->at(self.propertyPath->indexOf(p)-1) in let owners: Set(UML::Classifier) =
pp.type.oclAsType(UML::Classifier)->including(pp.type.oclAsType(UML::Classifier)) in
owners->includes(p.owner))
8.3.2.11 EndPathMultiplicity
Description
The EndPathMultiplicity stereotype can be applied to properties that are related by redefinition to properties that have
BoundReference applied. The lower and upper properties of the stereotype give the minimum and maximum number of
values, respectively, of the property at the bound end of the related bound reference, for each object reached by
navigation along its binding path.
Attributes
Association Ends
• 1_redefinition
Properties to which EndPathMultiplicity is applied shall be related by redefinition to a property to which
BoundReference is applied.
self.base_Property.redefinedProperty->notEmpty() and
BoundReference.allInstances().base_Property->exists(p |
self.base_Property.redefinedProperty->includes(p))
• 2_non_negative
endPathLower shall be non-negative.
self.lower >= 0
8.3.2.12 NestedConnectorEnd
Description
The NestedConnectorEnd stereotype of UML ConnectorEnd extends a UML ConnectorEnd so that the connected
property may be identified by a multi-level path of accessible properties from the block that owns the connector. The
propertyPath inherited from ElementPropertyPath gives a series of properties that identifies the connected property in the
context of the block that owns the connector. The ordering of properties is from a property of the block that owns the
connector, through a property of each intermediate block that types the preceding property, ending in a property with a
type that owns or inherits the property that is the role of the connector end (the property that the connector graphically
attaches to at that end). The property that is the role of the connector end is not included in the propertyPath list.
Generalizations
Association Ends
Constraints
• 1_propertypath_first_owned_by_connector_owner
The first property in propertyPath shall be owned by the block that owns the connector, or one of the blocks
generalizations.
let owningBlock: UML::Class =
self.base_ConnectorEnd.owner.oclAsType(UML::Connector).owner.oclAsType(UML::Class)
in (not owningBlock.oclIsUndefined()) and owningBlock->closure(general)
->including(owningBlock)->includes(self.propertyPath->first().owner)
• 2_propertypath_last_type_owns_role
The type of the property at the last position of the propertyPath list shall own or inherit the role property of the
stereotyped connector end
8.3.2.13 ParticipantProperty
Description
The Block stereotype extends Class, so it can be applied to any specialization of Class, including Association Classes.
These are informally called "association blocks." An association block can own properties and connectors, like any other
block. Each instance of an association block can link together instances of the end classifiers of the association.
To refer to linked objects and values of an instance of an association block, it is necessary for the modeler to specify
which (participant) properties of the association block identify the instances being linked at which end of the association.
The value of a participant property on an instance (link) of the association block is the value or object at the end of the
link corresponding to this end of the association.
Participant properties can be the ends of connectors owned by an association block. The association block can be the type
of multiple other connectors to reuse the same internal structure for all the connectors. The keyword «participant» before
a property name indicates the property is stereotyped by ParticipantProperty. They are always the same as the
corresponding association end type.
Attributes
Association Ends
Constraints
• 1_associationblock
ParticipantProperty shall only be applied to properties of association classes stereotyped by Block.
self.base_Property.class.oclIsKindOf(UML::AssociationClass) and
Block.allInstances().base_Class->includes(self.base_Property.class)
• 2_memberend
ParticipantProperty shall not be applied to properties that are member ends of an association.
UML::Association.allInstances().memberEnd->flatten()->excludes(self.base_Property)
• 3_aggregationkind_none
The aggregation of a property stereotyped by ParticipantProperty shall be none.
self.base_Property.aggregation = UML::AggregationKind::none
• 5_same_type
A property stereotyped by ParticipantProperty shall have the same type as the property referred to by the end
attribute.
self.base_Property.type = self.end.type
• 6_multiplicity_1
A property to which the ParticipantProperty is applied shall have a multiplicity of 1.
self.base_Property.lower = 1 and self.base_Property.upper = 1
8.3.2.14 PropertySpecificType
Description
The PropertySpecificType stereotype can be applied to classifiers that type exactly one property and that are owned by
the owner of that property. Classifiers with this stereotype applied shall be generalized by at most one other classifier.
Instances of a property-specific type are exactly those that are values of the property it types, in all instances of the
property owner. Values are (de)classified under property-specific types as they are (removed from) added to the property
they type:
Association Ends
1_only_one_property
A classifier to which the PropertySpecificType stereotype is applied shall be referenced as the type of one and only
one property.
UML::Property.allInstances()->select(p | p.type = self.base_Classifier)->size() = 1
8.3.2.15 ValueType
Description
A ValueType defines types of values that may be used to express information about a system, but cannot be identified as
the target of any reference. Since a value cannot be identified except by means of the value itself, each such value within
a model is independent of any other, unless other forms of constraints are imposed.
Value types may be used to type properties, operation parameters, or potentially other elements within SysML. SysML
defines ValueType as a stereotype of UML DataType to establish a more neutral term for system values that may never be
given a concrete data representation. For example, the SysML "Real" ValueType expresses the mathematical concept of a
real number, but does not impose any restrictions on the precision or scale of a fixed or floating-point representation that
expresses this concept. More specific value types can define the concrete data representations that a digital computer can
process, such as conventional Float, Integer, or String types.
SysML ValueType adds an ability to carry a unit of measure and quantity kind associated with the value. A quantity kind
is a kind of quantity that may be stated in terms of defined units, but does not restrict the selection of a unit to state the
value. A unit is a particular value in terms of which a quantity of the same quantity kind may be expressed. A SysML
ValueType and its quantityKind establishes, via UML typing, the associative relationship between a particular "quantity"
[VIM3-1.1] (modeled as a SysML value property typed by a ValueType) and a "kind of quantity" [VIM3-1.2] (the
ValueType::quantityKind of the SysML value propertys type). This UML/SysML associative relationship reflects the
terminological distinction made in VIM3 between the concepts of "quantity" [VIM3-1.1] and "kind-of-quantity" [VIM3-
1.2] that "cannot be in a generic or partitive hierarchical relation to each other" [Dybkaer-2010].
A SysML ValueType may define its own properties and/or operations, just as for a UML DataType. See 8.3.2.4, Block for
property classifications that SysML defines for either a Block or ValueType.
Association Ends
Value types may be used to type properties, operation parameters, or potentially other elements within SysML.
SysML defines ValueType as a stereotype of UML DataType to establish a more neutral term for system values
that may never be given a concrete data representation. For example, the SysML "Real" ValueType expresses the
mathematical concept of a real number, but does not impose any restrictions on the precision or scale of a fixed
or floating-point representation that expresses this concept. More specific value types can define the concrete
data representations that a digital computer can process, such as conventional Float, Integer, or String types.
A SysML ValueType may define its own properties and/or operations, just as for a UML DataType. See 8.3.2.4,
Block for property classifications that SysML defines for either a Block or ValueType.
• unit : InstanceSpecification [0..1]
A unit, represented by an InstanceSpecification classified by a kind of SysML Unit, in terms of which the
magnitudes of other quantities that have the same quantity kind can be stated.
Constraints
• 1_specializations_are_valuetypes
Any classifier that specializes a ValueType shall also have the ValueType stereotype applied.
UML::Classifier.allInstances()->forAll(c | c.general->includes(self.base_DataType)
implies ValueType.allInstances().base_DataType->includes(c))
• 2_unit
The unit of a ValueType, if any, shall be an InstanceSpecification classified by SysMLs Unit block in the
UnitAndQuantityKind model library or a specialization of it.
self.unit->notEmpty() and self.unit.classifier->notEmpty() implies
self.unit.classifier->forAll(c |
c.oclIsKindOf(Libraries::UnitAndQuantityKind::Unit))
• 3_quantitykind
The quantityKind of a ValueType, if any, shall be an InstanceSpecification classified by SysMLs QuantityKind
block in the UnitAndQuantityKind model library or a specialization of it.
self.quantityKind->notEmpty() and self.quantityKind.classifier->notEmpty() implies
self.quantityKind.classifier->forAll(c |
c.oclIsKindOf(Libraries::UnitAndQuantityKind::QuantityKind))
8.3.3.1.1 Boolean
Description
A Boolean value type consists of the predefined values true and false.
8.3.3.1.2 Complex
Description
A Complex value type represents the mathematical concept of a complex number. A complex number consists of a real
part defined by a real number, and an imaginary part defined by a real number multiplied by the square root of -1.
Complex numbers are used to express solutions to various forms of mathematical equations.
Generalizations
Attributes
8.3.3.1.3 Integer
Description
An Integer value type represents the mathematical concept of an integer number. An Integer value type may be used to
type values that hold negative or positive integer quantities, without committing to a specific representation such as a
binary or decimal digits with fixed precision or scale.
8.3.3.1.4 Number
Description
Number is an abstract value type from which other value types that express concepts of mathematical numbers are
specialized.
8.3.3.1.5 Real
Description
A Real value type represents the mathematical concept of a real number. A Real value type may be used to type values
that hold continuous quantities, without committing a specific representation such as a floating point data type with
restrictions on precision and scale.
Generalizations
8.3.3.1.6 String
Description
A String value type consists of a sequence of characters in some suitable character set. Character sets may include non-
Roman alphabets and characters.
Description
A QuantityKind is a kind of quantity that may be stated by means of defined units. For example, the quantity kind of
length may be measured by units of meters, kilometers, or feet. QuantityKind is defined as a non-abstract SysML Block
defined in the SysML UnitAndQuantityKind model library. QuantityKind, or a specialization of it, classifies an
InstanceSpecification to define a particular "kind-of-quantity" in the sense of an "aspect common to mutually comparable
quantities" [VIM3-1.2], where a SysML value property is understood to correspond to the VIM concept of "quantity"
defined as a "property of a phenomenon, body or substance, where the property has a magnitude that can be expressed as
a number and a reference" [VIM3-1.1]. Modelers specialize QuantityKind as done in SysMLs QUDV model library or in
a similar manner in other model libraries.
The definitionURI of an InstanceSpecification classified by a kind of QuantityKind identifies the particular "kind-of-
quantity" [VIM3-1.2] that the InstanceSpecification represents. Two such InstanceSpecifications represent the same
"kind-of-quantity" if and only if their definitionURIs have values and their values are equal. The only valid use of a
QuantityKind instance is to be referenced by the quantityKind property of a ValueType or Unit.
See the non-normative model library in E.5 for an optional way to specify more comprehensive definitions of units and
quantity kinds as part of systems of units and systems of quantities. The name of a QuantityKind, its definitionURI, or
other means may be used to link individual quantity kinds to additional sources of documentation such as this optional
model library.
Attributes
8.3.3.2.2 Unit
Description
QuantityKind is a kind of quantity that may be stated by means of defined units. For example, the quantity kind of length
may be measured by units of meters, kilometers, or feet. QuantityKind is defined as a non-abstract SysML Block defined
in the SysML UnitAndQuantityKind model library. QuantityKind, or a specialization of it, classifies an
InstanceSpecification to define a particular "kind-of-quantity" in the sense of an "aspect common to mutually comparable
quantities" [VIM3-1.2], where a SysML value property is understood to correspond to the VIM concept of "quantity"
defined as a "property of a phenomenon, body or substance, where the property has a magnitude that can be expressed as
a number and a reference" [VIM3-1.1]. Modelers specialize QuantityKind as done in SysMLs QUDV model library or in
a similar manner in other model libraries.
The definitionURI of an InstanceSpecification classified by a kind of QuantityKind identifies the particular "kind-of-
quantity" [VIM3-1.2] that the InstanceSpecification represents. Two such InstanceSpecifications represent the same
"kind-of-quantity" if and only if their definitionURIs have values and their values are equal. The only valid use of a
QuantityKind instance is to be referenced by the quantityKind property of a ValueType or Unit.
See the non-normative model library in E.5 for an optional way to specify more comprehensive definitions of units and
quantity kinds as part of systems of units and systems of quantities. The name of a QuantityKind, its definitionURI, or
A Unit is a quantity in terms of which the magnitudes of other quantities that have the same quantity kind can be stated. A
unit often relies on precise and reproducible ways to measure the unit. For example, a unit of length such as meter may
be specified as a multiple of a particular wavelength of light. A unit may also specify less stable or precise ways to
express some value, such as a cost expressed in some currency, or a severity rating measured by a numerical scale.
Unit is defined as a non-abstract SysML Block defined in the SysML UnitAndQuantityKind model library. Unit, or a
specialization of it, classifies an InstanceSpecification to define a particular "measurement unit" in the sense of a "real
scalar quantity, defined and adopted by convention, with which any other quantity of the same kind can be compared to
express the ratio of the two quantities as a number" [VIM3-1.9], where a SysML value property is understood to
correspond to the VIM concept of "quantity" defined as a "property of a phenomenon, body or substance, where the
property has a magnitude that can be expressed as a number and a reference" [VIM3-1.1]. Modelers specialize Unit as
done in SysMLs QUDV model library or in a similar manner in other model libraries.
The definitionURI of an InstanceSpecification classified by a kind of Unit identifies the particular "measurement unit"
[VIM3-1.9] that the InstanceSpecification represents. Two such InstanceSpecifications represent the same "measurement
unit" if and only if their definitionURIs have values and their values are equal.
The only valid use of a Unit instance is to be referenced by the unit property of a ValueType stereotype.
See the non-normative model library in E.5 for an optional way to specify more comprehensive definitions of units and
quantity kinds as part of systems of units and systems of quantities. The name of a Unit, its definitionURI, or other means
may be used to link individual units to additional sources of documentation such as this optional model library.
Attributes
Association Ends
Figure 8-14: Defining Value Types with units of measure from the International System of Units (SI)
Association blocks can be decomposed into connectors between properties of the associated blocks. These properties can
be ports, as in the water delivery example in 9.4.5, Association and Port Decomposition.
Figure 8-17 shows specializations for vehicles that restrict aspects of nested parts by redefining bound references. Paths
for bound references are based on the property paths of the corresponding binding connectors. The general block on the
top does not restrict the bound properties, except the total number of lug bolts is required to be between 24 and 32, rather
than 24 and 40 as the associations in Figure 8-15 allow. The specialization on the lower left restricts the number of
cylinders to four, requires a light roll bar, and a total of 24 lug bolts over all the wheels. The specialization on the lower
right restricts the number of cylinders to between six and eight, rules out any roll bar, and limits lug bolts per wheel to
between 6 and 7, by giving the end path upper and lower values.
The following example shows a minimal example of the semantics of Unit equivalence (A similar example for
QuantityKind is omitted).
Figure 8-23 shows the classification of a particular machine over time, identified by its serial number. At first it is not an
item or resource and is classified only as a machine. Before delivery to the factory, a new machine is stored in a
warehouse, classified additionally as a warehouse item, and is assigned a storage location. Then it is delivered to a
factory, reclassified from a warehouse item to a factory resource (while still being a machine), and records the percentage
of time it is operating.
9.1.1 Ports
Ports are points at which external entities can connect to and interact with a block in different or more limited ways than
connecting directly to the block itself. They are properties with a type that specifies features available to the external
entities via connectors to the ports. The features might be properties, including flow properties and association ends, as
well as operations and receptions. The remaining overview sub clauses introduce other aspects of ports and flows.
9.1.2 Flow Properties, Provided and Required Features, and Nested Ports
SysML extends blocks to support flow properties and provided and required features. Blocks with ports can type other
ports (nested ports). Flow properties specify the kinds of items that might flow between a block and its environment,
whether it is data, material, or energy. The kind of items that flow is specified by typing flow properties. For example, a
block specifying a car’s automatic transmission could have a flow property for Torque as an input, and another flow
property for Torque as an output. Required and provided features are operations, receptions, and non-flow properties that
a block supports for other blocks to use, or requires other blocks to support for its own use, or both. For example, a block
might provide particular services to other blocks as operations, or have a particular geometry accessible to other block, or
it might require services and geometries of other blocks. Ports nest other ports in the same way that blocks nest other
blocks. The type of the port is a block (or one of its specializations) that also has ports. For example, the ports supporting
torque flows in the transmission example might have nested ports for physical links to the engine or the driveshaft.
Port UML4SysML::Port
ProxyPort SysML::PortsAndFlows::ProxyPort
FullPort SysML::PortsAndFlows::FullPort
FlowProperty SysML::PortsAndFlows::FlowProperty
InterfaceBlock SysML::PortsAndFlows::InterfaceBlock
ItemFlow SysML::PortsAndFlows::ItemFlow
Interface UML4SysML::Interfaces::Interface
Port UML4SysML::Port
ProxyPort SysML::PortsAndFlows::ProxyPort
FullPort SysML::PortsAndFlows::ProxyPort
ItemFlow SysML::PortsAndFlows::ItemFlow
9.3.1.2 FlowProperty
A FlowProperty signifies a single flow element to/from a block. A flow property has the same notation as a Property only
with a direction prefix (in | out | inout). Flow properties are listed in a compartment labeled flow properties.
9.3.1.3 FullPort
Full ports can appear in block compartments labeled full ports. The keyword «full» before a property name can also
indicate the property is stereotyped by FullPort.
9.3.1.4 InvocationOnNestedPortAction
The nested port path is notated with a string “‘via’ <port-name> [‘,’ <port-name>]+” in the name string of the icon for
the invocation action. It shows the values of the onNestedPort property in order, and the value of the onPort property at
the end.
9.3.1.5 ItemFlow
An ItemFlow describes the flow of items across a connector or an association. The notation of an item flow is a black
arrowhead on the connector or association. The arrowhead is towards the target element. For an item flow with an item
property, the label shows the name and type of the item property (in name: type format). Otherwise the item flow is
labeled with the name of the classifier of the conveyed items. When several item flows having the same direction are
represented, only one triangle is shown, and the list of item flows, separated by a comma is presented.
9.3.1.7 ProxyPort
Proxy ports can appear in block compartments labeled proxy ports. The keyword «proxy» before a property name can
also indicate the property is stereotyped by ProxyPort. Nested ports on proxy ports can appear on the portion of the
boundary of the owning port rectangle that is outside the rectangle the owning port overlaps.
9.3.1.8 TriggerOnNestedPort
The nested port path is notated following a trigger signature with a string “‘«from» (’ <port-name> [‘,’ <port-name>]+
‘)’” in the name string of the icon for the trigger. It shows the values of the onNestedPort property in order, and the value
of the port property at the end.
Package PortsAndFlows
Description
Accept change structural feature event actions handle change structural feature events (see clause 9.3.2.10. The actions
have exactly two output pins. The first output pin holds the values of the structural feature just after the values changed,
while the second pin holds the values just before the values changed. The action only accepts events for structural
features on the blocks owning the behavior containing the action, or on the behavior itself, if the behavior is not owned
by a block.
Association Ends
Constraints
• 1_one_trigger
The action has exactly one trigger, the event of which shall be a change structural feature event.
self.base_AcceptEventAction.trigger->size()=1 and let trigger: UML::Trigger =
self.base_AcceptEventAction.trigger->any(true) in
ChangeStructuralFeatureEvent.allInstances().base_ChangeEvent->
includes(trigger.event)
• 2_two_resultpins
The action has two result pins with type and ordering the same as the type and ordering of the structural feature
of the trigger event, and multiplicity compatible with the multiplicity of the structural feature.
let event: ChangeStructuralFeatureEvent =
ChangeStructuralFeatureEvent.allInstances()->any(e | e.base_ChangeEvent =
self.base_AcceptEventAction.trigger->any(true).event) in
self.base_AcceptEventAction.result->size() = 2 and
self.base_AcceptEventAction.result->forAll(r | r.type =
event.structuralFeature.type and r.isOrdered = event.structuralFeature.isOrdered
and r.lower <= event.structuralFeature.lower and r.upper >=
event.structuralFeature.upper)
• 3_context_owns_structuralfeature
The structural feature of the trigger event shall be owned by or inherited by the context of the behavior
containing the action. (The context of a behavior is either its owning block or itself if it is not owned by a block.
See definition in the UML 2 standard.)
let event: ChangeStructuralFeatureEvent =
ChangeStructuralFeatureEvent.allInstances()->any(e | e.base_ChangeEvent =
self.base_AcceptEventAction.trigger->any(true).event) in
self.base_AcceptEventAction._'context'->notEmpty() and
self.base_AcceptEventAction._'context'.allFeatures()
->includes(event.structuralFeature)
• 4_can_access_structuralfeature
Visibility of the structural feature of the trigger event shall allow access to the object performing the action.
let event: ChangeStructuralFeatureEvent =
ChangeStructuralFeatureEvent.allInstances()->any(e | e.base_ChangeEvent =
• 5_uml_constraint_removed
The constraint under 11.3.2, "AcceptEventAction" in the UML 2 standard, "[2] There are no output pins if the
trigger events are only ChangeEvents," shall be removed for accept event actions that have
AcceptChangeStructuralFeatureEventAction applied.
-- cannot be expressed in OCL
9.3.2.2 AddFlowPropertyValueOnNestedPortAction
Description
This enables values added to a flow property to propagate out through a specified behavioral port of an object executing
the action, rather than all behavior ports exposing the flow property. It also enables values added to a flow property to
propagate into objects. Values flowing out of an object are added to an out or inout flow property of the executing object.
In this case, the applied stereotype specifies a (possibly nested) behavioral port at the end of a (possibly multi-level) path
of behavioral ports from a block that supports the flow property. Values flowing into an object are added to an in or inout
flow property of that object, specifying a (possibly nested) port of that object.
Generalizations
Attributes
Association Ends
• 1_feature_flowproperty
The structural feature referred by actions with this stereotype applied must have FlowProperty applied.
FlowProperty.allInstances().base_Property
->includes(self.base_AddStructuralFeatureValueAction.structuralFeature)
• 2_onnestedport_first_owned_by_target_type
The port at the first position in the onNestedPort list shall be owned by the block that types the object pin of the
stereotyped action, or one of that blocks generalizations.
self.base_AddStructuralFeatureValueAction.object.type.oclAsType(UML::Classifier) -
>allFeatures()->includes(self.onNestedPort->first()))
• 3_path_consistency
The port at each successive position of the onNestedPort attribute, following the first position, shall be owned
by the Block that types the port at the immediately preceding position, or a generalization of that Block
self.onNestedPort->size() >1 implies self.propertyPath->subSequence(2,
self.onNestedPort->size())->forAll(p |
let pp: UML::Property = self.onNestedPort->at(self.onNestedPort->indexOf(p)-1) in
let owners: Set(UML::Classifier) = pp.type.oclAsType(UML::Classifier)
->including(pp.type.oclAsType(UML::Classifier)) in
owners->includes(p.owner))
• 4_onnestedport_last_type_owns_invocation_onPort
The type of the port at the last position of the onNestedPort list shall own or inherit the flow property that is the
structural feature of the stereotyped action
self.onNestedPort->last().type.oclAsType(UML::Classifier).allFeatures()
->includes(self.base_AddStructuralFeatureValueAction.structuralFeature)
9.3.2.3 Block
Description
Blocks (including specializations of Block) can own ports, including but not limited to proxy ports and full ports. These
blocks can be the type of ports (specifying nested ports), with some restrictions described in other stereotypes in this sub
clause. All links and interactions with a behavioral port (in the UML sense of standing in for the owning object) are links
and interactions with the owner, so the semantics of behavioral ports is the same as if the value of the port as a property
were always the owning block instance (the owning block instance for behavioral ports on proxy ports is the value of the
block usage the proxy port is standing in for, which might be an internal part). Blocks loosen UML constraints on
connectors to support nested ports. See Clause 8, “Blocks” for further details of blocks.
9.3.2.4 ChangeStructuralFeatureEvent
Description
Constraints
• 1_not_static
The structural feature shall not be static
not self.structuralFeature.isStatic
• 2_one_featuringclassifier
The structural feature shall have exactly one featuringClassifier
self.structuralFeature.featuringClassifier->size()=1
9.3.2.5 DirectedFeature
Description
A DirectedFeature indicates whether the feature is supported by the owning block (provided), or is to be supported by
other blocks for the owning block to use (required), or both (the owning block for features on types of proxy ports is the
type of the block usage the proxy port is standing in for, which might be an internal part). Using non-flow properties
means to read or write them, and using behavioral features means to invoke them. Provided non-flow properties are read
and written on the owning block, while required non-flow properties are read or written on an external block. Provided
behavioral features are invoked with the owning block as target, while required behavioral features are invoked with an
external block as target (required).
Blocks owning or inheriting required behavioral features can have behaviors invoking the behavioral features on
instances of the block. This sends invocations out along connectors from usages of the block in internal structures of
other blocks, provided the behavioral features match on the other end of the connectors.
Invocations of provided behavioral features due to required behavioral features can only occur when the features match.
A single provided behavioral feature shall match each required one according to the following conditions:
Parameters without types are treated as if their type is more general than all other types.
If corresponding parameters in provided and required behavioral features both have defaults, the default value
specification of the required feature is used for in parameters, and the default value specification of the provided
feature is used for out and return parameters.
Reading or writing provided non-flow properties due to required non-flow properties can only occur when the
features match. Matching non-flow properties shall have the same name. For reading non-flow properties, the
types, multiplicities, uniqueness, and ordering shall match in the same way as out parameters for behavioral
features above. For writing non- flow properties, the types, multiplicities, uniqueness, and ordering shall match
in the same way as in parameters for behavioral features above. For both reading and writing non-flow
properties, the types, multiplicities, uniqueness, and ordering shall be the same. If provided and required non-
flow properties both have defaults, the default value specification of the required feature is used for writing and
the default specification of the provided feature is used for reading.
Attributes
Association Ends
Constraints
1_behavioralfeature_or_not_flowproperty
DirectedFeature shall only be applied to behavioral features, or to properties that do not have FlowProperty
applied, including on subsetted or redefined features.
self.base_Feature.oclIsKindOf(UML::BehavioralFeature) or
(self.base_Feature.oclIsKindOf(UML::Property) and let property: UML::Property =
self.base_Feature.oclAsType(UML::Property) in
FlowProperty.allInstances().base_Property->excludesAll(property.redefinedProperty
->union(property.subsettedProperty)->including(property)))
2_method_if_provided
A non-provided operation shall not be associated with a behavior as its method.
9.3.2.6 FeatureDirectionKind
Description
FeatureDirectionKind is an enumeration type that defines literals used by directed features for specifying whether they
are supported by the owning block, or is to be supported by other blocks for the owning block to use.
Literals
• provided
Indicates that the feature shall be supported by the owning block.
• providedRequired
Indicates that the feature shall be both provided and required.
• required
Indicates that the feature shall be supported by other blocks.
Constraints
• 2_specializations_are_constraintblocks
Any classifier that specializes a ConstraintBlock shall also have the ConstraintBlock stereotype applied.
UML::Classifier.allInstances()->forAll(c | c.general->includes(self.base_Class)
implies ConstraintBlock.allInstances().base_Class->includes(c))
9.3.2.7 FlowDirectionKind
Description
FlowDirectionKind is an enumeration type that defines literals used for specifying the direction that items can flow to or
from a block. FlowDirectionKind is used by flow properties to indicate the direction that its items can flow to or from its
owner. (See 9.3.2.13 for definition of owning block of proxy ports in this case.)
Literals
• in
Indicates that items of the flow property can flow into the owning block.
• inout
Indicates that items of the flow property can flow into or out of the owning block.
• out
Indicates that items of the flow property can flow out of the owning block.
Description
A FlowProperty signifies a single kind of flow element that can flow to/from its owning instance that is specified by the
block defining that flow property. A flow propertys values are either received from or transmitted to another instance. An
"in" flow property value cannot be modified by the owning instance of that flow property, or by parts of that instance. An
"out" flow property can only be modified by the owning instance of that flow property, or by parts of that instance. An
"inout" flow property can be used as an "in" flow property or an "out" flow property, and there is no restriction regarding
the way it can be modified. (The owning block of a proxy port in this case depends on how the port is nested in the
internal structures of blocks, because the block directly owning the port might be used to type ports or parts at different
levels of nesting in multiple blocks, or the same block. The owning block of a proxy port in the internal structure of a
block is the block typing the innermost full port or part under which the port is nested.)
Flow due to flow properties can only occur when flow properties match. Matching flow properties shall have matching
direction and types. Matching direction is defined below. Flow property types match when the target flow property type
has the same, or a generalization of, the source flow property type. (See 9.3.2.11, ItemFlow for looser constraints on flow
property types across connectors with item flows.) If multiple flow properties on either end of a connector match by
direction and type, then the names of the flow properties shall also be the same for flow to occur. If multiple flow
properties on either end match by direction, type, and name, which can happen for unnamed flow properties, then no flow
will occur.
Flow properties enable item flows across connectors between usages typed by blocks having the properties. For Block
and ValueType flow properties, setting an "out" or "inout" FlowProperty value of a block usage on one end of a connector
will result in assigning the same value of an "in" or "inout" FlowProperty of a block usage at the other end of the
connector, provided the flow properties are matched. It is not specified whether send/receive signal events are generated
when values are written to out/in flow properties typed by Signal (implementations might choose to do this, but it is not
required). This paragraph does not apply to internal connectors of proxy ports, see next paragraph.
Items going to or from behavioral ports (UML isBehavior = true) are actually going to or from the owning block. (See
9.3.2.8 for definition of owning block of proxy ports in this case.) Items going to or from non-behavioral ports (UML
isBehavior = false) are actually going to the port itself (for full ports) or to internal parts connected to the port (for proxy
ports). Because of this, flow properties of a proxy port are the same as flow properties on the owning block or internal
parts, so the flow property directions shall be the same on the proxy port and owning block or internal parts for items to
flow. See section 9.3.2.13 for the definition of internal connectors and the semantics of proxy ports.
The flow property semantics above applies to each connector of a block usage, including when the block usage has
multiple connectors.
The binding of flow properties on ports to behavior parameters can be achieved in ways not dictated by SysML. One
approach is to perform name and type matching. Another approach is to explicitly use binding relationships between the
ports properties and behavior parameters or block properties.
Attributes
Constraints
• 1_restricted_types
A FlowProperty shall be typed by a ValueType, Block, or Signal.
Block.allInstances().base_Class->includes(self.base_Property.type) or
ValueType.allInstances().base_DataType->includes(self.base_Property.type) or
self.base_Property.oclIsKindOf(UML::Signal)
9.3.2.9 FullPort
Description
Full ports specify a separate element of the system from the owning block or its internal parts. They might have their own
internal parts and behaviors to support interaction with the owning block, its internal parts, or external blocks. They
cannot be behavioral ports, or linked to internal parts by binding connectors, because these constructs imply identity with
the owning block or internal parts. However, full ports can be linked to non-full ports by binding connectors, because this
does not necessarily imply identity with other parts of the system.
Association Ends
Constraints
• 1_not_proxy
Full ports shall not also be proxy ports. This applies even if some of the stereotypes are on subsetted or
redefined ports.
ProxyPort.allInstances()->excludes(self.base_Port)
• 2_not_bound_to_fullport
Binding connectors shall not link full ports (either directly or indirectly through other binding connectors) to
other composite properties of the block owning the full port (or that blocks generalizations or specializations),
unless the composite properties are non-full ports.
let fullPorts: Set(UML::Port) = FullPort.allInstances().base_Port->asSet() in
BindingConnector.allInstances().base_Connector->select(c | c.end.role
->includes(self.base_Port))->forAll(c | fullPorts->excludesAll(c.end.role->reject
(r | r=self.base_Port)))
• 3_not_behavioral
Full ports shall not be behavioral (isBehavior=false).
not self.base_Port.isBehavior
Description
Interface blocks cannot have behaviors, including classifier behaviors or methods, or internal parts.
Generalizations
Operations
Constraints
• 1_no_behavior
Interface blocks shall not own or inherit behaviors, have classifier behaviors, or methods for their behavioral
features.
self.base_Class.inheritedMember->select(m | m.oclIsKindOf(UML::Behavior))
->isEmpty() and self.base_Class.operation.method->flatten()->isEmpty()
• 2_no_part
Interface blocks composite properties are either ports, value properties or flow properties.
self.base_Class.ownedAttribute->select(a|a.isComposite)->forAll(a |
a.oclIsKindOf(UML::Port) or a.oclIsKindOf(ValueType))
• 3_interfaceblock_typed_ports
Ports owned by interface blocks shall only be typed by interface blocks.
self.base_Class.ownedPort->forAll(p|InterfaceBlock.allInstances().base_Class
->includes(p.type))
• isconjugated_not_used
Any port typed by an InterfaceBlock shall have its isConjugated property set to false.
Port.allInstances()->forAll(p | p.type = self.base_Class implies
p.isConjugated=false)
9.3.2.11 InvocationOnNestedPortAction
Description
This extends the capabilities of UMLs onPort property of InvocationAction to support nested ports. It identifies a nested
port by a multi-level path of ports from the block that executes the action. Like UMLs onPort property, this extends
invocation actions to send invocations out of ports of objects executing the actions, or to ports of those objects or other
objects. Invocations intended to go out of the object executing the action shall be sent to the executing object on a proxy
port. Invocations intended to go directly to a target object are sent to that object on a port of that object.
Association Ends
Constraints
• 1_onPort_defined
The onPort property of an invocation action shall have a value when this stereotype is applied.
self.base_InvocationAction.onPort->notEmpty()
• 2_onnestedport_first_owned_by_target_type
The port at the first position in the onNestedPort list shall be owned (directly or via inheritance) by a block that
types the target pin of the invocation action, or one of the blocks generalizations.
let target: UML::InputPin = if
self.base_InvocationAction.oclIsKindOf(UML::CallOperationAction) then
self.base_InvocationAction.oclAsType(UML::CallOperationAction).target
• 3_path_consistency
The port at each successive position of the onNestedPort attribute, following the first position, shall be owned
by the Block that types the port at the immediately preceding position, or a generalization of that Block.
self.onNestedPort->size() >1 implies self.propertyPath->subSequence(2,
self.onNestedPort->size())->forAll(p |
let pp: UML::Property = self.onNestedPort->at(self.onNestedPort->indexOf(p)-1) in
let owners: Set(UML::Classifier) = pp.type.oclAsType(UML::Classifier)
• 4_onnestedport_last_type_owns_invocation_onPort
The type of the port at the last position of the onNestedPort list shall own or inherit the onPort port of the
stereotyped invocation action.
self.onNestedPort->last().type.oclAsType(UML::Classifier).allFeatures()
->includes(self.base_InvocationAction.onPort)
9.3.2.12 ItemFlow
Description
An ItemFlow describes the flow of items across a connector or an association. It may constrain the item exchange
between blocks, block usages, or ports as specified by their flow properties. For example, a pump connected to a tank:
the pump has an "out" flow property of type Liquid and the tank has an "in" FlowProperty of type Liquid. To signify that
only water flows between the pump and the tank, we can specify an ItemFlow of type Water on the connector.
One can label an ItemFlow with the classifiers of the items that may be conveyed. For example: a label Water would
imply that instances of Water might be transmitted over this ItemFlow. In addition, if the item flow identifies an item
property, then one can label the item flow with the item property. For example, a label of "liquid: Water" means Water
items might flow and these items are the values of the property "liquid," i.e., the values of the "liquid" item property are
the instances of Water flowing at any given time. Item properties are owned by the common (possibly indirect) owner of
the source and target of the item flow, rather than by the source and target types, as flow properties are.
Item flows on connectors shall be compatible with flow properties of the blocks usages at each end of the connector, if
any. The direction of the item flow shall be compatible with the direction of flow specified by the flow properties. (See
9.3.2.12 and 9.3.2.13 about flow property direction.) Each classifier of conveyed items on an item flow shall be the same
as, a specialization of, or a generalization of at least one flow property type on each end of the connected block usages
(or their accessible nested block usages recursively, see 9.3.2.8 about encapsulated blocks). The target flow property type
shall be the same as, or a generalization of, a classifier of the item flow or the source flow property type, whichever is
more specialized. (See 9.3.2.13, for tighter constraints on flow property types across connectors without item flows.)
Attributes
Association Ends
Constraints
• 1_source_and_target_linked
A Connector or an Association, or an inherited Association shall exist between the source and the target of the
InformationFlow.
• 2_type_restricted
An ItemFlow itemProperty shall be typed by a ValueType, Block, or Signal.
ValueType.allInstances().base_DataType->includes(self.itemProperty.type) or
Block.allInstances().base_Class->includes(self.itemProperty.type) or
UML::Signal.allInstances()->includes(self.itemProperty.type)
• 3_itemproperty_common_owner
If itemProperty has a value it shall be a property of the common (possibly indirect) owner of the source and the
target.
self.itemProperty->notEmpty() implies (let target: UML::Element =
self.base_InformationFlow.informationTarget->any(true) in let source: UML::Element =
self.base_InformationFlow.informationSource->any(true) in
target.oclIsKindOf(UML::Property) and source.oclIsKindOf(UML::Property) and let
owners: Set(UML::Classifier) = target->closure(owner)->select(o1 |
o1.oclIsKindOf(UML::Classifier))->asSet() ->intersection(source->closure(owner)-
>select(o2 | o2.oclIsKindOf(UML::Classifier))).oclAsType(UML::Classifier)->asSet() in
owners.attribute->flatten()->includes(self.itemProperty))
• 4_association_xor_itemproperty
itemProperty shall not have a value if the item flow is realized by an Association.
self.base_InformationFlow.realization->exists(r | r.oclIsKindOf(UML::Association))
implies self.itemProperty->isEmpty()
• 5_same_type
If an ItemFlow has an itemProperty, one of the classifiers of conveyed items shall be the same as the type of the
item property.
self.itemProperty->notEmpty() implies self.base_InformationFlow.conveyed
->includes(self.itemProperty.type)
• 6_same_name
If an ItemFlow has an itemProperty, its name shall be the same as the name of the item flow.
self.itemProperty->notEmpty() implies self.itemProperty.name =
self.base_InformationFlow.name
Description
Proxy ports identify features of the owning block or its internal parts that are available to external blocks through external
connectors to the ports. They do not specify a separate element of the system from the owning block or internal parts.
Actions on features of a proxy port have the same effect as if they were acting on features of the owning block or internal
parts the port stands in for, and changes to features of the owning block or internal parts that the proxy port makes
available to external blocks are visible to those blocks via connectors to the port. (This applies to provided features; for
required features, see Section 9.3.2.10.) Proxy ports do not specify their own behaviors or internal parts, and shall be
typed by interface blocks. Their nested ports shall also be proxy ports.
A completely specified proxy port shall describe how any interaction through the port is handled or initiated. This can be
achieved in several ways. For instance by making it behavioral, by binding it to a fully specified internal part or by
having all its properties individually bound to internal parts. However, blocks can be defined with non-behavioral proxy
ports that do not have internal connectors, with the expectation that these will be added in specialized blocks. Internal
connectors to ports are the ones inside the ports owner (specifically, they are the ones that do not have a UML
partwithPort on the connector end linked to the port, assuming NestedConnectorEnd is not applied to that end, or if
NestedConnectorEnd is applied to that end, they are the connectors that have only ports in the property path of that end).
The rest of the connectors linked to a port are external.
Proxy ports can be connected to internal parts or ports on internal parts, identifying features on those parts or ports that
are available to external blocks. When a proxy port is connected to a single internal part, the connector shall be a binding
connector, or have the same semantics as a binding connector (the value of the proxy port and the connected internal part
are the same; links of associations typing the connector are between all objects and themselves, and no others). When a
proxy port is connected to multiple internal parts, the connectors have the same semantics as a single binding connector
to an aggregate of those parts, supporting all their features, and treating flows and invocations from outside the aggregate
as if they were to those parts, and flows and invocations it receives from those parts as if they were to the outside. This
aggregate is not a separate element of the system, and only groups the internal parts for purposes of binding to the proxy
port. Internal connectors to proxy ports can be typed by association blocks, including when the connector is binding.
Association Ends
Constraints
• 1_not_fullport
Proxy ports shall not also be full ports. This applies even if some of the stereotypes are on subsetted or redefined
ports.
FullPort.allInstances()->excludes(self.base_Port)
• 2_interfaceblock
Proxy ports shall only be typed by interface blocks.
InterfaceBlock.allInstances().base_Class->includes(self.base_Port.type)
• 3_subports_are_proxyports
Ports owned by the type of a proxy port shall be proxy ports.
ProxyPort.allInstances().base_Port->includesAll(self.base_Port.class.ownedPort)
Description
This extends trigger to support nested ports. It identifies a nested port by a multi-level path of ports from the object
receiving the triggering events. It is not applicable to full ports.
Generalizations
Association Ends
Constraints
• 1_single_proxyport
The port property of the stereotyped trigger shall have exactly one value, and the value cannot be a full port.
self.base_Trigger.port->size()=1 and FullPort.allInstances().base_Port
->excludes(self.base_Trigger.port)
• 2_no_fullport
The values of the onNestedPort property shall not be full ports.
FullPort.allInstances().base_Port->excludesAll(self.onNestedPort)
• 3_onnestedport_first_owned_by_context
The port at the first position in the onNestedPort list shall be owned by a block in which the trigger is used, or
one of the blocks generalizations.
let theContext: UML::Classifier = if self.base_Trigger.owner.oclIsKindOf(UML::Action)
then self.base_Trigger.owner.oclAsType(UML::Action)._'context'.oclAsType(UML::Class)
else
self.base_Trigger.owner.oclAsType(UML::Transition).containingStateMachine()._'context
'.oclAsType(UML::Class) endif in let owners: Set(UML::Classifier) = theContext
->closure(general)->including(theContext) in owners->includes(self.onNestedPort
->first().owner)
• 5_onnestedport_last_type_owns_trigger_port
The type of the port at the last position of the onNestedPort list must own or inherit the port of the stereotyped
trigger.
self.onNestedPort->last().type.oclAsType(UML::Classifier).allFeatures()
->includes(self.base_Trigger.port)
9.3.2.15 ~InterfaceBlock
Description
The ~InterfaceBlock stereotype (shall be pronounced: "conjugated interface block") is a specialization of InterfaceBlock
that has the same features as its original InterfaceBlock except that its DirectedFeatures and FlowProperties are reversed
(conjugated), for example, in flow properties are conjugated as out flow properties and provided features are conjugated
as required features. Conjugation is specified by a constraint giving the features of ~InterfaceBlocks according to those
of their original InterfaceBlocks (see the Constraints subsection below). It is expected that tools conforming to this
specification automatically create features of ~InterfaceBlocks.
Generalizations
Attributes
Operations
Constraints
• enforced_name
The name of an ~InterfaceBlock shall be the name of its original InterfaceBlock with a tilde ("~") character
prepended
self.base_Class.name = '~'+self.original.base_Class.name
• inverted_features
An ~InterfaceBlock has same features and owned rules than its original InterfaceBlock except that – where
applicable – both its DirectedFeatures and FlowProperties have inverted directions (i.e., are "conjugated").
let allAttributes: Set(UML::Property) = self.base_Class.allFeatures()
->select(oclIsKindOf(UML::Property)).oclAsType(UML::Property)->asSet() in
let allOperations: Set(UML::Operation) = self.base_Class.allFeatures()
->select(oclIsKindOf(UML::Operation)).oclAsType(UML::Operation)->asSet() in
let allReceptions: Set(UML::Reception) = self.base_Class.allFeatures()
->select(oclIsKindOf(UML::Reception)).oclAsType(UML::Reception)->asSet() in
let inheritedRules: Set(UML::Constraint) =
self.base_Class.inherit(self.base_Class.inheritedMember
->select(oclIsKindOf(UML::Constraint))).oclAsType(UML::Constraint)->asSet() in
let allRules: Set(UML::Constraint) = self.base_Class.ownedRule->union(inheritedRules)
in
let allOriginalAttributes: Set(UML::Property) =
self.original.base_Class.allFeatures()
->select(oclIsKindOf(UML::Property)).oclAsType(UML::Property)->asSet() in
let allOriginalOperations: Set(UML::Operation) =
self.original.base_Class.allFeatures()
->select(oclIsKindOf(UML::Operation)).oclAsType(UML::Operation)->asSet() in
let allOriginalReceptions: Set(UML::Reception) =
self.original.base_Class.allFeatures()
->select(oclIsKindOf(UML::Reception)).oclAsType(UML::Reception)->asSet() in
let originalInheritedRules: Set(UML::Constraint) =
self.original.base_Class.inherit(self.original.base_Class.inheritedMember
->select(oclIsKindOf(UML::Constraint))).oclAsType(UML::Constraint)->asSet() in
let allOrignalRules: Set(UML::Constraint) = self.original.base_Class.ownedRule
->union(originalInheritedRules) in
allAttributes->size() = allOriginalAttributes->size()
and allOperations->size() = allOriginalOperations->size()
and allReceptions->size() = allOriginalReceptions->size()
Figure 9-6: Usage example of ports with provided and required features
Figure 9-10: Two views of Water Delivery connector within House block
The top portion of Figure 9-11 shows specializations of the block WaterClient into Bath, Sink, and Shower. These are
used as part types in the internal structure of the block House 2 shown in the lower portion of the figure. The composite
connector for Water Delivery is reused three times to establish connections between spigots on the water supply and the
inlets of faucets on the bath, sink, and shower.
Figure 9-14: Water Delivery association block with internal Plumbing connector
ConstraintBlock SysML::ConstraintBlocks:
ConstraintBlock
ParametricDiagram SysML::ConstraintBlocks:
ConstraintBlock
SysML::Blocks::Block
10.3.2 Stereotypes
10.3.2.1 ConstraintBlock
Description
A constraint block is a block that packages the statement of a constraint so it may be applied in a reusable way to
constrain properties of other blocks. A constraint block typically defines one or more constraint parameters, which are
A constraint property is a property of any block that is typed by a constraint block. It holds a localized usage of the
constraint block. Binding connectors may be used to bind the parameters of this constraint block to other properties of the
block that contains the usage.
Generalizations
Constraints
• 1_constraintparameters_only
A constraint block shall not own any structural or behavioral elements beyond the properties that define its
constraint parameters, constraint properties that hold internal usages of constraint blocks, binding connectors
between its internally nested constraint parameters, constraint expressions that define an interpretation for the
constraint block, and general-purpose model management and crosscutting elements.
-- Cannot be expressed in OCL
• 3_composite
Any property of a block that is typed by a ConstraintBlock shall have composite aggregation.
self.base_Class.ownedAttribute->forAll(p| p.isComposite)
11.1.3 Probability
SysML introduces probability into activities as follows (see Probability in Figure 11-8):
• Extension of edges with probabilities for the likelihood that a value leaving the decision node or object node
will traverse an edge.
• Extension of output parameter sets with probabilities for the likelihood that values will be output on a parameter
set.
11.1.5 Timelines
The simple time model in UML can be used to represent timing and duration constraints on actions in an activity model.
These constraints can be notated as constraint notes in an activity diagram. Although the UML 2 timing diagram was not
included in this version of SysML, it can complement SysML behavior diagrams to notate this information. More
sophisticated SysML modeling techniques can incorporate constraint blocks from Clause 10, “Constraint Blocks” to
specify resource and related constraints on the properties of the inputs, outputs, and other system properties. (Note: refer
to 11.3.1.4, ObjectNode, Variables, and Parameters for constraining properties of object nodes).
ActivityFinal UML4SysML::ActivityFinalNode
ControlOperator SysML::Activities::ControlOperator
DecisionNode UML4SysML::DecisionNode
FlowFinal UML4SysML::FlowFinalNode
InitialNode UML4SysML::InitialNode
JoinNode UML4SysML::JoinNode
isControl UML4SysML::Pin.isControl
isStream UML4SysML::Parameter.isStream
MergeNode UML4SysML::MergeNode
NoBuffer SysML::Activities::NoBuffer
Optional SysML::Activities::Optional
OverWrite SysML::Activities::Overwrite
ParameterSet SysML::Activities::ParameterSet
Portability SysML::Activities::Portability
Rate SysML::Activities::Rate
SysML::Activities::Continuous,
SysML::Activities::Discrete
ControlFlow UML4SysML::ControlFlow
SysML::Activities::ControlFlow
ObjectFlow UML4SysML::ObjectFlow
Probability SysML::Activities::Probability
Rate SysML::Activities::Rate,
SysML::Activities::Continuous,
SysML::Activities::Discrete
ActivityPartition UML4SysML::ActivityPartition
StructuredActivityNode UML4SysML::StructuredActivity
Node
11.3.1.1 Activity
11.3.1.1.1 Notation
In UML, all behaviors are classes, including activities, and their instances are executions of the activity. This follows the
general practice that classes define the constraints under which the instances must operate. Creating an instance of an
activity causes the activity to start executing, and vice versa. Destroying an instance of an activity terminates the
corresponding execution, and vice versa. Terminating an execution also terminates the execution of any other activities
that it invoked synchronously, that is, expecting a reply.
Activities as blocks can have associations between each other, including composition associations. Composition means
that destroying an instance at the whole end destroys instances at the part end. When composition is used with activity
blocks, the termination of execution of an activity on the whole end will terminate executions of activities on the part end
of the links.
Combining the two aspects above, when an activity invokes other activities, they can be associated by a composition
association, with the invoking activity on the whole end, and the invoked activity on the part end. If an execution of an
activity on the whole end is terminated, then the executions of the activities on the part end are also terminated. The
upper multiplicity on the part end restricts the number of concurrent synchronous executions of the behavior that can be
invoked by the containing activity. See Constraints below.
Activities in block definition diagrams appear as regular blocks, except the «activity» keyword may be used to indicate
the Block stereotype is applied to an activity, as shown in Figure 11-1. See example in 11.4, Usage Examples. This
provides a means for representing activity decomposition in a way that is similar to classical functional decomposition
hierarchies. Properties with AdjunctProperty applied, where the principal of the AdjunctProperties are call actions,
including call behavior actions, can be used as the part end of the associations. See 8.3.2.2 for constraints when
AdjunctProperty is used with call actions. Activities in block definition diagrams can also appear with the same notation
as CallBehaviorAction, except the rake notation can be omitted, if desired. Also see use of activities in block definition
diagrams that include ObjectNodes.
11.3.1.2 CallBehaviorAction
Stereotypes applied to behaviors may appear on the notation for CallBehaviorAction when invoking those behaviors, as
shown in Figure 11-2.
11.3.1.3 ControlFlow
11.3.1.4.1 Notation
See 11.3.1.1, Activity with regard to activities appearing in block definition diagrams. Associations can be used between
activities and classifiers (blocks or value types) that are the type of object nodes, variables, or parameters in the activity,
Figure 11-5: Block definition diagram with activities as blocks associated with types of object nodes, variables,
and parameter
Object nodes in activity diagrams can optionally show the node name with the name of the type of the object node as
shown in Figure 11-6.
Package Activities
11.3.2.1 Continuous
Description
Continuous rate is a special case of rate of flow (see Rate) where the increment of time between items approaches zero. It
is intended to represent continuous flows that may correspond to water flowing through a pipe, a time continuous signal,
or continuous energy flow. It is independent from UML streaming, see clause 11.3.2.8. A streaming parameter may or
may not apply to continuous flow, and a continuous flow may or may not apply to streaming parameters.
UML places no restriction on the rate at which tokens flow. In particular, the time between tokens can approach as close
to zero as needed, for example to simulate continuous flow. There is also no restriction in UML on the kind of values that
flow through an activity. In particular, the value may represent as small a number as needed, for example to simulate
continuous material or energy flow. Finally, the exact timing of token flow is not completely prescribed in UML. In
particular, token flow on different edges may be coordinated to occur in a clocked fashion, as in time march algorithms
for numerical solvers of ordinary differential equations, such as Runge-Kutta.
11.3.2.2 ControlOperator
Description
A control operator is a behavior that is intended to represent an arbitrarily complex logical operator that can be used to
enable and disable other actions. When the «controlOperator» stereotype is applied to behaviors, the behavior takes
control values as inputs or provides them as outputs, that is, it treats control as data (see 11.3.3.1.1). When the
«controlOperator» stereotype is not applied, the behavior may not have a parameter typed by ControlValue. The
«controlOperator» stereotype also applies to operations with the same semantics.
The control value inputs do not enable or disable the control operator execution based on their value, they only enable
based on their presence as data. Pins for control parameters are regular pins, not UML control pins. This is so the control
value can be passed into or out of the action and the invoked behavior, rather than control the starting of the action, or
indicating the ending of it.
Association Ends
Constraints
• 1_one_parameter_controlvalue
When the «controlOperator» stereotype is applied, the behavior or operation shall have at least one parameter
typed by ControlValue. If the stereotype is not applied, the behavior or operation may not have any parameter
typed by ControlValue.
UML::Behavior.allInstances()->forAll(b | not
(ControlOperator.allInstances().base_Behavior->includes(b) xor b.ownedParameter
->exists(p | p.type=SysML::Libraries::ControlValues::ControlValue))) and
UML::Operation.allInstances()->forAll(o | not
(ControlOperator.allInstances().base_Operation->includes(o) xor o.ownedParameter
->exists(p | p.type=SysML::Libraries::ControlValues::ControlValue)))
• 2_controloperator_operation_method
A behavior shall have the «controlOperator» stereotype applied if it is a method of an operation that has the
«controlOperator» stereotype applied.
(self.base_Operation->notEmpty() and self.base_Operation.method->notEmpty()) implies
self.base_Operation.method->forAll(b | ControlOperator.allInstances().base_Behavior
->includes(b))
Description
Discrete rate is a special case of rate of flow (see clause 11.3.2.8) where the increment of time between items is a non-
zero. Examples include the production of assemblies in a factory and signals set at periodic time intervals.
Generalizations
Constraints
• 1_not_continuous
The «discrete» and «continuous» stereotypes shall not be applied to the same element at the same time.
(self.base_ActivityEdge->notEmpty() implies
Continuous.allInstances().base_ActivityEdge->excludes(self.base_ActivityEdge)) and
(self.base_Parameter->notEmpty() implies Continuous.allInstances().base_Parameter
->excludes(self.base_Parameter))
11.3.2.4 NoBuffer
Description
When the «nobuffer» stereotype is applied to object nodes, tokens arriving at the node are discarded if they are refused
by outgoing edges, or refused by actions for object nodes that are input pins. This is typically used with fast or
continuously flowing data values, to prevent buffer overrun, or to model transient values, such as electrical signals. For
object nodes that are the target of continuous flows, «nobuffer» and «overwrite» have the same effect. The stereotype
does not override UML token offering semantics; it just indicates what happens to the token when it is accepted. When
the stereotype is not applied, the semantics are as in UML, specifically, tokens arriving at an object node that are refused
by outgoing edges, or action for input pins, are held until they can leave the object node.
Association Ends
Constraints
• 1_not_overwrite
The «nobuffer» and «overwrite» stereotypes cannot be applied to the same element at the same time.
Overwrite.allInstances().base_ObjectNode->excludes(self.base_ObjectNode)
Description
When the «overwrite» stereotype is applied to object nodes, a token arriving at a full object node removes one that is
already there before being added (a full object node has as many tokens as allowed by its upper bound). This is typically
used on an input pin with an upper bound of 1 to ensure that stale data is overridden at an input pin. For upper bounds
greater than one, the token removed is the one that has been in the object node the longest. For FIFO ordering, this is the
token that is next to be selected, for LIFO it is the token that would be last to be selected. Tokens arriving at a full object
node with the Overwrite stereotype applied take up their positions in the ordering as normal, if any. The arriving tokens
do not take the positions of the removed tokens. A null token removes all the tokens already there. The number of tokens
replaced is equal to the weight of the incoming edge, which defaults to 1. For object nodes that are the target of
continuous flows, «overwrite» and «nobuffer» have the same effect. The stereotype does not override UML token
offering semantics, just indicates what happens to the token when it is accepted. When the stereotype is not applied, the
semantics is as in UML, specifically, tokens arriving at object nodes do not replace ones that are already there.
Association Ends
Constraints
• 1_not_nobuffer
The «overwrite» and «nobuffer» stereotypes cannot be applied to the same element at the same time.
NoBuffer.allInstances().base_ObjectNode->excludes(self.base_ObjectNode)
11.3.2.6 Optional
Description
When the «optional» stereotype is applied to parameters, the lower multiplicity shall be equal to zero. This means the
parameter is not required to have a value for the activity or any behavior to begin or end execution. Otherwise, the lower
multiplicity shall be greater than zero, which is called "required." The absence of this stereotype indicates a constraint,
see below.
Association Ends
Constraints
• 1_lower_is_0
A parameter with the «optional» stereotypes applied shall have multiplicity.lower equal to zero, otherwise
multiplicity.lower shall be greater than zero
UML::Parameter.allInstances()->forAll(p | Optional.allInstances().base_Parameter
->includes(p) xor p.lower > 0)
Description
When the «probability» stereotype is applied to edges coming out of decision nodes and object nodes, it provides an
expression for the probability that the edge will be traversed. These shall be between zero and one inclusive, and add up
to one for edges with same source at the time the probabilities are used.
When the «probability» stereotype is applied to output parameter sets, it gives the probability the parameter set will be
given values at runtime. These shall be between zero and one inclusive, and add up to one for output parameter sets of the
same behavior at the time the probabilities are used.
Attributes
Association Ends
Constraints
• 1_source_decisionnode_or_objectnode
The «probability» stereotype shall only be applied to activity edges that have decision nodes or object nodes as
sources, or to output parameter sets.
(self.base_ActivityEdge->notEmpty() implies
self.base_ActivityEdge.source.oclIsKindOf(UML::DecisionNode)) and
(self.base_ParameterSet->notEmpty() implies self.base_ParameterSet.parameter
->forAll(p | p.direction=UML::ParameterDirectionKind::out))
• 2_all_outgoing_edges
When the «probability» stereotype is applied to an activity edge, then it shall be applied to all edges coming out
of the same source.
self.base_ActivityEdge->notEmpty() implies
Probability.allInstances().base_ActivityEdge
->includesAll(self.base_ActivityEdge.target.incoming)
• 3_all_parametersets
When the «probability» stereotype is applied to an output parameter set, it shall be applied to all the parameter
sets of the behavior or operation owning the original parameter set.
self.base_ParameterSet->notEmpty() implies
Probability.allInstances().base_ParameterSet
->includesAll(self.base_ParameterSet.namespace.ownedMember->select(m |
m.oclIsKindOf(UML::ParameterSet)))
11.3.2.8 Rate
Description
When the «rate» stereotype is applied to an activity edge, it specifies the expected value of the number of objects and
values that traverse the edge per time interval, that is, the expected value rate at which they leave the source node and
arrive at the target node. It does not refer to the rate at which a value changes over time. When the stereotype is applied to
a parameter, the parameter shall be streaming, and the stereotype gives the number of objects or values that flow in or out
of the parameter per time interval while the behavior or operation is executing. Streaming is a characteristic of UML
behavior parameters that supports the input and output of items while a behavior is executing, rather than only when the
behavior starts and stops. The flow may be continuous or discrete, see the specialized rates in clause 11.3.2.1 and clause
11.3.2.3. The «rate» stereotype has a rate property of type InstanceSpecification. The values of this property shall be
instances of classifiers stereotyped by «valueType» or «distributionDefinition», see Clause 8. In particular, the
denominator for units used in the rate property shall be time units.
Attributes
Association Ends
Constraints
• 1_streaming
When the «rate» stereotype is applied to a parameter, the parameter shall be streaming.
self.base_Parameter->notEmpty() implies self.base_Parameter.isStream
• 2_edges_rates
The rate of a parameter shall be less than or equal to rates on edges that come into or go out from pins and
parameters nodes corresponding to the parameter.
self.base_Parameter->notEmpty() implies (
let nodes: Set(UML::ObjectNode) =
if self.base_Parameter.owner.oclIsKindOf(UML::Behavior) then
let pOwner: UML::Behavior = self.base_Parameter.owner.oclAsType(UML::Behavior) in
UML::CallBehaviorAction.allInstances()->select(a | a.behavior = pOwner)
11.3.3.1.1 ControlValueKind
Description
The ControlValueKind enumeration is a type for treating control values as data (see 11.3.2.2) and for UML control pins.
It can be used as the type of behavior and operation parameters, object nodes, and attributes, and so on. The possible
runtime values are given as enumeration literals. Modelers can extend the enumeration with additional literals, such as
suspend, resume, with their own semantics.
The disable literal means a termination of an executing behavior that can only be started again from the beginning
(compare to suspend). The enable literal means to start a new execution of a behavior (compare to resume).
• disable
The disable literal means a termination of an executing behavior that can only be started again from the
beginning (compare to suspend).
• enable
The enable literal means to start a new execution of a behavior (compare to resume).
Constraints
• 1_node_is_controltype
UML::ObjectNode::isControlType is true for object nodes with type ControlValue
Figure 11-13 shows a block definition diagram with composition associations between the activities and AdjunctProperty
applied to the part ends in Figures 11.10, 11.11, and 11.12, as an alternative way to show the activity decomposition of
Figures 11.10, 11.11, and 11.12. Each instance of Operating Car is an execution of that behavior. It owns the executions
of the behaviors it invokes synchronously, such as Driving. Like all composition, if an instance of Operating Car is
destroyed, terminating the execution, the executions it owns are also terminated.
Lifeline UML4SysML::Lifeline
InteractionUse UML4SysML::InteractionUse
An InteractionUse with just the <interaction-
name>.
An InteractionUse with <attribute - name>,
the value of arguments, the <return-value>,
etc.
CombinedFragment UML4SysML::CombinedFragment
A combined fragment is defined by an
interaction operator and corresponding
interaction operands.
Interaction Operators include:
seq - Weak Sequencing
alt – Alternatives
opt – Option
break – Break
par – Parallel
strict - Strict Sequencing
loop – Loop
critical - Critical Region
neg – Negative
assert – Assertion
ignore – Ignore
consider – Consider
CreationEvent UML4SysML::CreationEvent
DestructionEvent UML4SysML::DestructionEvent
TimeConstraint UML4SysML::Interactions
TimeObservation
SequenceDiagram UML4SysML::Interaction
(advanced)
InteractionUse UML4SysML::InteractionUse
(advanced)
Message UML4SysML::Message
GeneralOrdering UML4SysML::GeneralOrdering
12.3.1.2.1 Notation
In UML, all behaviors are classes, including interactions, and their instances are executions of the interaction.
Interactions as blocks and associations between interactions corresponding to interaction uses have an analogous
semantics to activities as blocks and associations between activities corresponding to call actions, see 11.3.1.1.1,
Notation. Similarly, associations between interactions and classifiers (blocks or value types) have an analogous semantics
to associations between activities and blocks or value types, see 11.3.1.4.1, Notation.
Interactions in block definition diagrams appear as regular blocks, except the «interaction» keyword may be used to
indicate the Block stereotype is applied to an interaction, as shown in Figure 12-1 Properties with AdjunctProperty
applied, where the principal of the AdjunctProperty is an interaction use, can be used as the end of the associations
towards the interaction being used. Properties with AdjunctProperty applied, where the principal of the AdjunctProperty
is a parameter of the interaction, can be used as the end of the associations towards the parameter type. See 8.3.2.2,
AdjunctProperty for constraints when AdjunctProperty is used with interaction uses and parameters. Interactions in block
definition diagrams can also appear with the same notation as InteractionUses.
StateMachineDiagram UML4SysML::StateMachine
Frame and Heading
Action UML4SysML::Transition
Region UML4SysML::Region
Transition UML4SysML::Transition
13.3.1.1.1 Notation
In UML, all behaviors are classes, including state machines, and their instances are executions of the state machine. State
machines as blocks and associations between state machines corresponding to submachine states have an analogous
semantics to activities as blocks and associations between activities corresponding to call actions, see 11.3.1.1.1,
Notation. Similarly, associations between state machines and classifiers (blocks or value types) have an analogous
semantics to associations between activities and blocks or value types, see 11.3.1.4.1, Notation.
Figure 13-1: Block definition diagram with state machines as blocks associated with submachines and types of
parameters
Actor UML4SysML::Actor
Include UML4SysML::include
Extend UML4SysML::Extend
Generalization UML4SysML::Kernel
Package Allocations
15.3.2.1 Allocate
Description
Allocate is a dependency based on UML::Abstraction. It is a mechanism for associating elements of different types, or in
different hierarchies, at an abstract level. Allocate is used for assessing user model consistency and directing future
design activity. It is expected that an «allocate» relationship between model elements is a precursor to a more concrete
relationship between the elements, their properties, operations, attributes, or sub-classes.
The following paragraphs describe types of allocation that are typical in systems engineering.
Behavior allocation relates to the systems engineering concept segregating form from function. This concept requires
independent models of "function" (behavior) and "form" (structure), and a separate, deliberate mapping between
elements in each of these models. It is acknowledged that this concept does not support a standard object-oriented
paradigm, not is this always even desirable. Experience on large scale, complex systems engineering problems have
proven, however, that segregation of form and function is a valuable approach. In addition, behavior allocation may also
include the allocation of Behaviors to BehavioralFeatures of Blocks (e.g., Operations).
Flow between activities can either be control or object flow. The figures in the Usage Examples show concrete syntax for
how object flow is mapped to connectors on Activity Diagrams. Allocation of control flow is not specifically addressed in
SysML, but may be represented by relating an ItemFlow to the Control Flow using the UML relationship
InformationalFlow.realizingActivityEdge.
Note that allocation of ObjectFlow to Connector is an Allocation of Usage, and does NOT imply any relation between
any defining Blocks of ObjectFlows and any defining associations of connectors.
The figures in the Usage Examples illustrate an available mechanism for relating the objectNode from an activity
diagram to the ItemFlow on an internal block diagram. ItemFlow is discussed in 9, "Ports and Flows."
Structure allocation is associated with the concept of separate "logical" and "physical" representations of a system. It is
often necessary to construct separate depictions of a system and define mappings between them. For example, a complete
system hierarchy may be built and maintained at an abstract level. In turn, it shall then be mapped to another complete
assembly hierarchy at a more concrete level. The set of models supporting complex systems development may include
many of these levels of abstraction. This International Standard will not define "logical" or "physical" in this context,
except to acknowledge the stated need to capture allocation relationships between separate system representations.
Generalizations
Association Ends
Operations
Constraints
• 2_binary
A single «allocate» dependency shall have only one client (from) and one supplier (to).
self.base_Abstraction.source->size() = 1 and self.base_Abstraction.target->size() = 1
Description
Association Ends
Constraints
• 1_actions_on_client_ends
An Action appearing in an "AllocateActivityPartition" shall be the /client (from) end of an "allocate"
dependency. The element that represents the "AllocateActivityPartition" shall be the /supplier (to) end of the
same "allocate" dependency. In the «AllocateActivityPartition» name field, Properties are designated by the use
of a fully qualified name (including colon, e.g., "part_name:Block_Name"), and Classifiers are designated by a
simple name (no colons, e.g., "Block_Name").
self.base_ActivityPartition.node->select(n|n.oclIsKindOf(UML::Action)) ->forAll(a |
let allocs: Set(UML::Abstraction) = Allocate.allInstances().base_Abstraction
->select(x |x.client->includes(a))->asSet() in allocs->exists(x | x.supplier
->includes(self.base_ActivityPartition.represents)))
• 2_not_uml_semantics
The «AllocateActivityPartition» shall maintain the constraints, but not the semantics, of the
UML::ActivityPartition. Classifiers or Properties represented by an «AllocateActivityPartition» do not have any
direct responsibility for invoking behavior depicted within the partition boundaries. To depict this kind of direct
responsibility, the modeler is directed to the UML 2 standard, sub clause 12.3.10, "ActivityPartition," Semantics
topic.
-- Cannot be expressed in OCL
Figure 15-9: Allocation Matrix showing Allocation for Hybrid SUV Accelerate Example
Requirement SysML::Requirements::
Diagram
Requirement, SysML::
ModelElements::Package
Requirement SysML::Requirements::
Requirement
NamedElement UML4SysML::NamedElement
Requirement UML4SysML::Nested
containment Classifier
relationship
MasterCallout SysML::Requirements::Copy
DeriveDependency SysML::Requirements::
DeriveReqt
DeriveCallout SysML::Requirements::
DeriveReqt
SatisfyDependency SysML::Requirements::Satisfy
SatisfyCallout SysML::Requirements::Satisfy
VerifyDependency SysML::Requirements::Verify
VerifyCallout SysML::Requirements::Verify
RefineDependency UML4SysML::Refine
RefineCallout UML4SysML::Refine
TraceDependency UML4SysML::Trace
TraceCallout UML4SysML::Trace
Package Requirements
16.3.2.1 AbstractRequirement
Description
An AbstractRequirement establishes the attributes and relationships essential to any potential kind of requirement. Any
intended requirement kind should subclass AbstractRequirement. The only normative stereotype based on
AbstractRequirement is the Requirement stereotype, described in 16.3.2.5. Examples of additional non-normative
stereotypes based on AbstractRequirement are included in E.8.
Attributes
Operations
16.3.2.2 Copy
Description
A Copy relationship is a dependency between a supplier requirement and a client requirement that specifies that the text
of the client requirement is a read-only copy of the text of the supplier requirement.
A Copy dependency created between two requirements maintains a master/slave relationship between the two elements
for the purpose of requirements re-use in different contexts. When a Copy dependency exists between two requirements,
the requirement text of the client requirement is a read-only copy of the requirement text of the requirement at the
supplier end of the dependency.
Generalizations
Operations
Constraints
• 1_source_and_taget_are_requirements
A Copy dependency may only be created between two NamedElements that have a subtype of the
abstractRequirement stereotype applied
AbstractRequirement.allInstances().base_NamedElement
->includesAll(self.base_Abstraction.client) and
AbstractRequirement.allInstances().base_NamedElement
->includesAll(self.base_Abstraction.supplier)
16.3.2.3 DeriveReqt
Description
A DeriveReqt relationship is a dependency between two requirements in which a client requirement can be derived from
the supplier requirement. For example, a system requirement may be derived from a business need, or lower-level
requirements may be derived from a system requirement. As with other dependencies, the arrow direction points from the
derived (client) requirement to the (supplier) requirement from which it is derived.
Generalizations
Constraints
• 1_supplier_is_requirement
The supplier shall be an element stereotyped by a subtype of AbstractRequirement.
AbstractRequirement.allInstances().base_NamedElement
->includesAll(self.base_Abstraction.client)
• 2_client_is_requirement
The client shall be an element stereotyped by a subtype of AbstractRequirement.
AbstractRequirement.allInstances().base_NamedElement
->includesAll(self.base_Abstraction.supplier)
16.3.2.4 Refine
Description
The Refine stereotype specializes UML4SysML Refine and DirectedRelationshipPropertyPath to enable refinements to
identify their sources and targets by a multi-level path of accessible properties from context blocks for the sources and
targets.
Generalizations
Operations
Constraints
• 2_binary
Abstractions with a Refine stereotype or one of its specializations applied shall have exactly one client and one
supplier.
self.base_Abstraction.client->size()=1 and self.base_Abstraction.supplier->size()=1
16.3.2.5 Requirement
Description
A requirement specifies a capability or condition that must (or should) be satisfied. A requirement may specify a function
that a system must perform or a performance condition that a system must satisfy. Requirements are used to establish a
contract between the customer (or other stakeholder) and those responsible for designing and implementing the system.
A requirement is a stereotype of both Class and Abstract Requirement. Compound requirements can be created by using
the nesting capability of the class definition mechanism. The default interpretation of a compound requirement, unless
stated differently by the compound requirement itself, is that all its subrequirements shall be satisfied for the compound
requirement to be satisfied. Subrequirements shall be accessed through the "nestedClassifier" property of a class. When a
requirement has nested requirements, all the nested requirements apply as part of the container requirement. Deleting the
container requirement deleted the nested requirements, a functionality inherited from UML.
Generalizations
Association Ends
• 1_no_operation
The property "ownedOperation" shall be empty.
self.base_Class.ownedOperation->isEmpty()
• 2_no_attribute
The property "ownedAttribute" shall be empty.
self.base_Class.ownedAttribute->isEmpty()
• 3_no_association
Classes stereotyped by «requirement» shall not participate in associations.
UML::Association.allInstances().memberEnd->flatten().type->excludes(self.base_Class)
• 4_no_generalization
Classes stereotyped by «requirement» shall not participate in generalizations.
UML::Classifier.allInstances().general->flatten()->excludes(self.base_Class)
• 5_nestedclassifiers_are_requirements
A nested classifier of a class stereotyped by Requirement or one of its specializations shall also be stereotyped
by Requirement or one of its specializations
self.base_Class.nestedClassifier->forAll(c | Requirement.allInstances().base_Class
->includes(c))
• 6_not_a_type
Classes stereotyped by «requirement» shall not be used to type any other model element.
UML::TypedElement.allInstances().type->excludes(self.base_Class)
16.3.2.6 TestCase
Description
Association Ends
Constraints
• 1_return_verdictkind
The type of return parameter of the stereotyped model element shall be VerdictKind. (note this is consistent with
the UML Testing Profile).
(self.base_Behavior->notEmpty() implies self.base_Behavior.ownedParameter->exists(p |
p.direction=UML::ParameterDirectionKind::return and p.type = VerdictKind )) and
16.3.2.7 Satisfy
Description
A Satisfy relationship is a dependency between a requirement and a model element that fulfills the requirement. As with
other dependencies, the arrow direction points from the satisfying (client) model element to the (supplier) requirement
that is satisfied.
Generalizations
Operations
Constraints
• 1_supplier_is_requirement
The supplier shall be an element stereotyped by any subtype of «AbstractRequirement».
AbstractRequirement.allInstances().base_NamedElement
->includes(self.base_Abstraction.supplier)
16.3.2.8 Trace
Description
The Trace stereotype specializes UML4SysML Trace and DirectedRelationshipPropertyPath to enable traces to identify
their sources and targets by a multi-level path of accessible properties from context blocks for the sources and targets.
Generalizations
Association Ends
Constraints
• 2_binary
Abstractions with a Trace stereotype or one of its specializations applied shall have exactly one client and one
supplier.
self.base_Abstraction.client->size()=1 and self.base_Abstraction.supplier->size()=1
16.3.2.9 Verify
Description
A Verify relationship is a dependency between a requirement and a test case or other model element that can determine
whether a system fulfills the requirement. As with other dependencies, the arrow direction points from the (client)
element to the (supplier) requirement.
Generalizations
Operations
Constraints
• 1_supplier_is_requirement
The supplier shall be an element stereotyped by any subtype of «AbstractRequirement».
AbstractRequirement.allInstances().base_NamedElement
->includes(self.base_Abstraction.supplier)
Figure 16-7: Linkage of a Test Case to a requirement: This figure shows the Test Case as a State Diagram
Stereotype UML4SysML::Stereotype
Metaclass UML4SysML::Class
Profile UML4SysML::Profile
Extension UML4SysML::Extension
Generalization UML4SysML::Generalization
ProfileApplication UML4SysML::Profile
Application
MetamodelReference UML4SysML::PackageImport;
UML4SysML::ElementImport
Unidirectional UML4SysML::Association
Association
17.2.1.1 Extension
In Figure 17-1, a simple stereotype Clock is defined to be applicable at will (dynamically) to instances of the metaclass
Class and describes a clock software component for an embedded software system. It has description of the operating
system version supported, an indication of whether it is compliant to the POSIX operating system standard and a
reference to the operation that starts the clock.
StereotypeNode UML4SysML::Element
StereotypeNode UML4SysML::Element
StereotypeInNode UML4SysML::Element
StereotypeOnEdge UML4SysML::Element
StereotypeCompartment UML4SysML::Element
17.2.2.1 StereotypeInNode
Figure 17-2 shows how the stereotype Clock, as defined in Figure 17-1, is applied to a class called AlarmClock.
17.2.2.2 StereotypeInComment
When two stereotypes, Clock and Creator, are applied to the same model element, as is shown in Figure 17-3, the
attribute values of each of the applied stereotypes can be shown in a comment symbol attached to the model element.
17.2.2.3 StereotypeInCompartment
Finally, the compartment form is shown.
In this case, AlarmClock is valid for OS version 3.4, is POSIX-compliant and has a starting operation called Start. Note
that multiple stereotypes can be shown using multiple compartments.
Figure 17-8: A model with applied profile and imported model library
The HSUVModel is a systems engineering model that needs to use stereotypes from SysML. It therefore needs to have
the SysML profile applied to it. In order to use the predefined SI units, it also needs to import the SI Definitions model
library. Having done this, elements in HSUVModel can be extended by SysML stereotypes and types like SIVolume can
be used to type properties. Both the SI Definitions model library and HSUVModel have applied the profile strictly, which
means that only those metaclasses directly referenced by SysML can be used in those models.
A.1 Overview
SysML diagrams contain diagram elements (mostly nodes connected by paths) that represent model elements in the
SysML model, such as activities, blocks, and associations. The diagram elements are referred to as the concrete syntax.
The SysML diagram taxonomy is shown in Figure A.1. This taxonomy is one example of how to organize the SysML
diagrams. Other categories could also be defined, such as a grouping of the use case diagram and the requirement
diagram into a category called Specification Diagrams.
SysML reuses many of the major diagram types of UML. In some cases, the UML diagrams are strictly reused, such as
use case, sequence, state machine, and package diagrams, whereas in other cases they are modified so that they are
consistent with SysML extensions. For example, the block definition diagram and internal block diagram are similar to
the UML class diagram and composite structure diagram respectively, but include extensions as described in 8, “Blocks.”
Activity diagrams have also been modified via the activity extensions. Tabular representations, such as the allocation
table, are used in SysML but are not considered part of the diagram taxonomy.
SysML does not use all of the UML diagram types such as the object diagram, communication diagram, interaction
overview diagram, timing diagram, deployment diagram, and profile diagram. This is consistent with the approach that
SysML represents a subset of UML. In the case of deployment diagrams, the deployment of software to hardware can be
represented in the SysML internal block diagram. In the case of interaction overview and communication diagrams, it
was felt that the SysML internal block diagram. In the case of interaction overview and communication diagrams, it was
felt that the SysML behavior diagrams provided adequate coverage for representing behavior without the need to include
these diagram types. In the case of the profile diagram, profile definitions can be captured on a package diagram and the
parametric diagram.
A.2 Guidelines
The following provides some general guidelines that apply to all diagram types.
• Decomposition of a model element can be represented by the rake symbol. This does not always mean
decomposition in a formal sense, but rather a reference to a more elaborated diagram of the model element that
includes the rake symbol. This notation adds to the existing decomposition notations defined in UML
(Composite state symbol for States that refer to StateMachines and rake symbol for CallBehaviorActions that
refer to Activities). In SysML, the rake on a model element may also include the following:
o Activity diagram - call behavior actions that can refer to another activity diagram.
o Internal block diagram - parts that can refer to another internal block diagram.
o Package diagram - package that can refer to another package diagrams.
o Parametric diagram - constraint property that can refer to another parametric diagram.
o Requirement diagram - requirement that can refer to another requirement diagram.
o Sequence diagram - interaction fragments that can refer to another sequence diagram.
o State machine diagram - state that can refer to another state machine diagram.
o Use case diagram - use case can that may be realized by other behavior diagrams (activity, state,
interactions).
• The primary mechanism for linking a text label outside of a symbol to the symbol is through proximity of the
label to its symbol. This applies to ports, item flows, pins, etc.
B.1 Overview
This annex provides information regarding the exchange of SysML diagrams. It is an extension of the UML Diagram
Interchange (DI) to support the graphical notation specific to SysML. A first part presents stereotypes that extend the
UML DI. A second part presents modifications in the use of UML DI in SysML diagrams.
Attributes
• isControlFlowDashed : Boolean [1] = false
Specifies whether the control flows in the activity diagram are dashed (isControlFlowDashed=true) or not
(isControlFlowDashed=false).
Constraints
[1] A SysMLActivityDiagram shall have as a defaultNamespace an Activity.
Constraints
[1] SysMLBehaviorDiagram shall only be applied to a UMLBehaviorDiagram.
B.2.3 SysMLBlockDefinitionDiagram
Description
A SysMLBlockDefinitionDiagram represents a block definition diagram. It extends UMLPackageDiagram.
Constraints
[1] A SysMLBlockDefinitionDiagram shall have as a defaultNamespace a Class with a Block stereotype or one of its
specializations applied or a Package.
B.2.4 SysMLDiagram
Description
SysMLDiagram is an abstract stereotype for all SysML diagrams. It extends UMLDiagram.
Attributes
• defaultNamespace : Namespace [1]
Specifies the default namespace of the SysML diagram.
Constraints
[3] A SysMLDiagram that stereotypes a UMLDiagram with a modelElement shall have this modelElement as
defaultNamespace.
B.2.5 SysMLDiagramElement
Description
SysMLDiagramElement is an abstract generalization of all the other SysML DI stereotypes.
Attributes
• isDecompositionSymbolShown : Boolean [1]
Display a decomposition symbol in a diagram element to indicate the corresponding model element is
decomposed in another diagram. Diagram elements that may have a decomposition symbol are listed in Annex
A.
Constraints
[1] A UMLDiagramWithAssociations stereotyped by a specialization of SysMLDiagramWithAssociations shall have
isAssociationDotShown=false.
B.2.7 SysMLInteractionDiagram
Description
A SysMLInteractionDiagram represents an interaction diagram. It extends UMLInteractionDiagram.
Constraints
[1] A SysMLInteractionDiagram shall have as a defaultNamespace an Interaction.
B.2.8 SysMLInternalBlockDiagram
Description
A SysMLInternalBlockDiagram represents an internal block diagram. It extends UMLCompositeStructureDiagram.
Constraints
[1] A SysMLInternalBlockDiagram shall have as a defaultNamespace a Class with a Block stereotype or one of its
specializations applied.
B.2.9 SysMLPackageDiagram
Description
A SysMLPackageDiagram represents a package diagram. It extends UMLPackageDiagram.
B.2.10 SysMLParametricDiagram
Description
A SysMLParametricDiagram represents a parametric diagram. It is a specialization of SysMLInternalBlockDiagram.
Attributes
• isConstraintPropertyRounded: Boolean = false
Specifies whether the constraint properties in the parametric diagram have rounded corners
(isConstraintPropertyRounded=true) or not (isConstraintPropertyRounded=false).
Constraints
[1] A SysMLParametricDiagram shall have as a defaultNamespace a Class with a Block stereotype or one of its
specializations applied.
B.2.11 SysMLRequirementDiagram
Description
A SysMLRequirementDiagram represents a requirement diagram. It is based on the UML class diagram.
Constraints
[1] A SysMLRequirementDiagram shall have as a defaultNamespace a Package or a Class with a Requirement stereotype
or one of its specializations applied.
B.2.12 SysMLStateMachineDiagram
Description
A SysMLStateMachineDiagram represents a state machine diagram. It extends UMLStateMachineDiagram.
Constraints
[1] A SysMLStateMachineDiagram shall have as a defaultNamespace a StateMachine.
B.2.13 SysMLUseCaseDiagram
Description
A SysMLUseCaseDiagram represents a use case diagram. It extends UMLUseCaseDiagram.
C.1 Overview
This annex
• Defines SysML elements that are deprecated, but included for backward compatibility (see Subannexes C.1.1
and C.1.2).
• Provides guidlines for migrating elements to this version of SysML that are deprecated (see above) or that
changed significantly between versions of SysML (see Subannexes C.5 through C.7).
A flow port specifies the input and output items that may flow between a block and its environment. Flow ports are
interaction points through which data, material, or energy can enter or leave the owning block. The specification of what
can flow is achieved by typing the flow port with a specification of things that flow. This can include typing an atomic
flow port with a single type representing the items that flow in or out, or typing a nonatomic flow port with a flow
specification which lists multiple items that flow. A block representing an automatic transmission in a car could have an
atomic flow port that specifies “Torque” as an input and another atomic flow port that specifies “Torque” as an output. A
more complex flow port could specify a set of signals and/or properties that flow in and out of the flow port. In general,
flow ports are intended to be used for asynchronous, broadcast, or send-and-forget interactions. Flow ports exten UML 2
ports.
Port UML4SysML::Port
FlowPort SysML::PortsAndFlows::FlowPort
FlowSpecification SysML::PortsAndFlows::
FlowSpecification
Port UML4SysML::Port
FlowPort SysML::PortsAndFlows::FlowPort
ItemFlow SysML::PortsAndFlows::ItemFlow
The meaning of FlowProperty::direction is reversed for conjugated ports. On conjugated ports, flow properties with
direction "in" are out flow properties and those with direction "out" are in flow properties. Port conjugation has no impact
on "inout" flow properties. The meanings of the "in" and "out" literals in FlowDirection are switched for conjugated
ports. In these cases the actual flow direction is in the opposite direction than the one specified by the enumeration literal.
C.3.1.2 FlowPort
A FlowPorts is an interaction point through which input and/or output of items such as data, material, or energy may
flow. The notation of flow port is a square on the boundary of the owning block or its usage. The label of the flow port is
in the format portName: portType. Atomic flow ports have an arrow inside them indicating the direction of the port with
respect to the owning Block. A nonatomic flow port has two open arrow heads facing away from each other (i.e., < >).
The fill color of the square is white and the line and text colors are black.
In addition, flow ports can be listed in a special compartment labeled “flow ports.” The format of each line is:
C.3.1.3 FlowSpecification
A FlowSpecification specifies inputs and outputs as a set of flow properties. It has a “flowProperties” compartment that
lists the flow properties.
C.3.2 Stereotypes
C.3.2.1 Package PortsAndFlows
A FlowPort is an interaction point through which input and/or output of items such as data, material, or energy may flow.
This enables the owning block to declare which items it may exchange with its environment and the interaction points
through which the exchange is made.
We distinguish between atomic flow port and a nonatomic flow port. Atomic flow ports relay items that are classified by
a single Block, ValueType, or Signal classifier. A nonatomic flow port relays items of several types as specified by a
FlowSpecification.
The distinction between atomic and nonatomic flow ports is made according to the flow port’s type: If a flow port is
typed by a flow specification, then it is nonatomic; if a flow port is typed by a Block, ValueType, or Signal classifier, then
it is atomic.
Flow ports and associated flow specifications define “what can flow” between the block and its environment, whereas
item flows specify “what does flow” in a specific usage context.
Flow ports relay items to their owning block or to a connector that connects them with their owner’s internal parts
(internal connector).
The isBehavior attribute inherited from UML port is interpreted in the following way: if isBehavior is set to true, then the
items are relayed to/from the owning block. More specifically, every flow property within the flow port is bound to a
property owned by the port’s owning block or to a parameter of its behavior. If isBehavior is set to false, then the flow
port shall be connected to an internal connector, which in turn related the items via the port. The need for isBehavior is
mainly to allow specification of internal parts relaying items to their containing part via flow ports.
The isConjugated attribute inherited from the UML Port metaclass is interpreted as follows: It indicates if the flows of
items of a nonatomic flow port maintain the directions specified in the flow specification or if the direction of every flow
property specified in the flow specification is reversed (IN becomes OUT and vice versa). If set to True, then all the
directions of the flow properties specified by the flow specification that types a nonatomic flow port are relayed in the
opposite direction (i.e., an “in” flow property is treated as an “out” flow property by the flow port and vice-versa). By
default, the value is False. This attribute applies only to nonatomic flow ports since atomic flow ports have a direction
attribute signifying the direction of the flow.
In case of flow properties or atomic flow ports of type Signal, inbound properties or atomic flow port are mapped to a
Reception of the signal type (or a subtype) of the flow property’s type. Outbound flow properties only declare the ability
of the flow port to relay the signal over external connectors attached to it and are not mapped to a property of the flow
port’s owning block.
If a flow port is connected to multiple external and/or internal connectors, then the items are propagated (broadcast) over
all connectors that have matching properties at the other end.
C.3.2.4 FlowSpecification
Description
A FlowSpecification specifies inputs and outputs as a set of flow properties. A flow specification is used by flow ports to
specify what items can flow via the port.
Constraints
[1] Flow specifications shall not own operations or receptions (they can only own FlowProperties).
2. Based on the decision in step 1, create a block (for proxy ports, it shall be an interface block specifically).
a. Copy all the flow properties owned by the flow port’s type, a flow specification, to the block created in step 2
(meaning the flow properties will be owned by the newly created block).
b. Replace the type of the port with the block created in step 2.
d. Based on the decision in step 1, apply the ProxyPort or FullPort stereotype, or do nothing if the decision is not
to use either one.
e. If the proxy stereotype is applied in step 3d, and there is a single connector from the port to a part, the
BindingConnector may be applied to the connector.
f. If the flow specification is not referenced by other model elements, delete it.
a. On the block created in step 2, specify a flow property typed by the same type as the flow port and with the
same direction as the original flow port.
• Conform
• Replace v1.3 Conform with v1.4 Conform. The conform target in 1.3 becomes the general classifier in
1.4.
• View
• Replace v1.3 View package with 1.4 View class
• Viewpoint
• For each Stakeholder string, create a stakeholder with the string as the name
• Update the stakeholder property on the new viewpoint with the created stakeholder
• For each method string of the 1.3 viewpoint, create the operation «create»View() and append the string
to the body of a comment that annotates the operation.
• Blocks defined as specializations of SysML 1.3 QUDV::Unit do not require changes in SysML 1.4.
• Blocks defined as specializations of SysML 1.3 QUDV::QuantityKind do not require changes in SysML 1.4
except for the following:
• Blocks defined specializations of QUDV::SpecializedQuantityKind in SysML 1.3 become
corresponding Blocks defined as specializations of QUDV::QuantityKind in SysML 1.4.
• Usages of SysML 1.3 QUDV::SpecializedQuantityKind::general property become corresponding
usages of QUDV::QuantityKind::general in SysML 1.4.
do {
else
D.1 Purpose
The purpose of this annex is to illustrate how SysML can support the specification, analysis, and design of a system using
some of the basic features of the language.
D.2 Scope
The scope of this example is to provide at least one diagram for each SysML diagram type. The intent is to select
simplified fragments of the problem to illustrate how the diagrams can be applied, and to demonstrate some of the
possible inter-relationships among the model elements in the different diagrams. The sample problem does not highlight
all of the features of the language. The reader should refer to the individual clauses for more detailed features of the
language. The diagrams selected for representing a particular aspect of the model, and the ordering of the diagrams are
intended to be representative of applying a typical systems engineering process, but this will vary depending on the
specific process and methodology that is used.
This annex is structured to show each diagram in the context of how it might be used on such an example problem. The
first sub clause shows SysML diagrams as they might be used to establish the system context; establishing system
boundaries, and top level use cases. The next sub clause is provided to show how SysML diagrams can be used to
analyze top level system behavior, using sequence diagrams and state machine diagrams. The following sub clause
focuses on use of SysML diagrams for capturing and deriving requirements, using diagrams and tables. A sub clause is
provided to illustrate how SysML is used to depict system structure, including block hierarchy and part relationships. The
relationship of various system parameters, performance constraints, analyses, and timing diagrams are illustrated in the
next sub clause. A sub clause is then dedicated to illustrating definition and depiction of interfaces and flows in a
structural context. The final sub clause focuses on detailed behavior modeling, functional and flow allocation.
D.4 Diagrams
D.4.1 Package Overview (Structure of the Sample Model)
D.4.1.1 Package Diagram – Applying the SysML Profile
As shown in Figure D.1, the HSUVModel is a package that represents the user model. The SysML Profile shall be
applied to this package in order to include stereotypes from the profile. The HSUVModel may also require model
libraries, such as the SI Units Types model library. The model libraries shall be imported into the user model as indicated.
Figure D.2 details the specification of units and valueTypes employed in this sample problem.
Figure D.2: Defining value Types and units to be used in the Sample Problem
Figure D.3 Establishing Structure of the User Model using Packages and Views (Package Diagram)
Figure D.4 Establishing the Context of the Hybrid SUV System using a User-Defined Context Diagram.
(Internal Block Diagram) Completeness of Diagram Noted in Diagram Description
The use case diagram for “Drive Vehicle” in Figure D.5 depicts the drive vehicle usage of the vehicle system. The subject
(HybridSUV) and the actors (Driver, Registered Owner, Maintainer, Insurance Company, DMV) interact to realize the
use case.
Figure D.6 Establishing Operational Use Cases for “Drive the Vehicle” (Use Case Diagram)
The conditions for each alternative in the alt controlSpeed sub clause are expressed in OCL, and relate to the states of the
HybridSUV block, as shown in Figure D.8.
Figure D.7 Elaborating Black Box Behavior for the “Drive the Vehicle” Use Case (Sequence Diagram)
Figure D.8 Finite State Machine Associated with “Drive the Vehicle” (State Machine Diagram)
D.4.3.3 Sequence Diagram – Start Vehicle Black Box & White Box
Figure D.9 shows a “black box” interaction, but references “StartVehicleWhiteBox” (Figure D.10), which will
decompose the lifelines within the context of the HybridSUV block.
Figure D.9 Black Box Interaction for “StartVehicle,” referencing White Box Interaction (Sequence Diagram)
D.4.5 Breaking Down the Pieces (Block Definition Diagrams, Internal Block
Diagrams)
D.4.5.1 Block Definition Diagram – Automotive Domain
Figure D.15 provides definition for the concepts previously shown in the context diagram. Note that the interactions
DriveBlackBox and Stac4rtVehicleBlackBox (described in D.4.3 Elaborating Behavior (Sequence and State Machine
Diagrams), are depicted as owned by the AutomotiveDomain block.
Figure D.16 Defining Structure of the Hybrid SUV System (Block Definition Diagram)
Figure D.20 Blocks Typing Ports in the Power Subsystem (Block Definition Diagram)
Figure D.20 provides definition of the block that types the ports linked by connector c1 in Figure D.19.
Figure D.22 Consolidating Connectors into the CAN Bus. (Internal Block Diagram)
Figure D.27 Establishing a Performance View of the User Model (Package Diagram)
Figure D.32 Establishing Mathematical Relationships for Fuel Economy Calculations (Parametric Diagram)
Figure D.33 Straight Line Vehicle Dynamics Mathematical Model (Parametric Diagram)
The constraints and parameters in Figure D.33 are detailed in Figure D.34 in Block Definition Diagram format.
Note that the incoming and outgoing object flows for the ProvidePower activity have been decomposed. This was done to
distinguish the flow of electrically generated mechanical power and gas generated mechanical power, and to provide
further insight into the specific vehicle conditions being monitored.
Figure D.38 Detailed Behavior Model for "Provide Power" (Activity Diagram)
Note hierarchical consistency with Figure D.36.
D.4.8.4 Internal Block Diagram – Power Subsystem Behavioral and Flow Allocation
Figure D.39 depicts a subset of the PowerSubsystem, specifically showing the allocation relationships generated in
Figure D.38.
D.4.8.6 Internal Block Diagram: Property Values – EPA Fuel Economy Test
Figure D.40 Tabular Representation of Allocation from “Accelerate” Behavior Model to Power Subsystem (Table)
Figure D.41shows a particular Hybrid SUV (VIN number) satisfying the EPA fuel economy test. Serial numbers of
specific relevant parts are indicated.
E.1 Overview
This annex describes useful non-normative extensions to SysML that may be considered for standardization in future
versions of the language.
Non-normative extensions consist of stereotypes and model libraries and are organized by major diagram type, consistent
with how the main body of this International Standard is organized. Stereotypes in this sub clause are specified using a
tabular format, consistent with how non-normative stereotypes are specified in the UML 2 standard. Model libraries are
specified using the guidelines provided in the Profiles & Model Libraries clause of this International Standard.
E.2.2 Stereotypes
Enhanced Functional Flow Block Diagrams (EFFBD) are a widely-used systems engineering diagram, also called a
behavior diagram. Most of its functionality is a constrained use of UML activities, as described below. This extension
does not address replication, resources, or kill branches. Kill branches can be translated to activities using interruptible
regions and join specifications.
Table E-1: Addition stereotypes for EFFBDs
«effbd» UML4SysML::Activity (or N/A See below. Specifies that the activity
subtype of «nonStreaming» conforms to the constraints
below) necessary for EFFBD.
When the «effbd» stereotype is applied to an activity, its contents shall conform to the following constraints:
[1] (On Activity) Activities shall not have partitions.
[2] (On Activity) All decisions, merges, joins, and forks shall be well-nested. In particular, each decision and merge shall
be matched one-to-one, as are forks and joins, accounting for the output parameter sets acting as decisions, and input
parameters and control acting as a join.
«streaming» UML4SysML::Activity N/A The activity has at Used for activities that can
least one accept inputs or provide
streaming outputs after they start and
parameter. before they finish.
«nonStreaming» UML4SysML::Activity N/A The activity has Used for activities that
no streaming accept inputs only when
parameters. they start, and provide
outputs only when they
finish.
E.3.2 Stereotypes
This non-normative extension includes stereotypes for a simplified requirements taxonomy that is intended to be further
adapted as required to support the particular needs of the application or organization. The requirements categories in this
example include functional, interface, performance, physical requirements, and design constraints as shown in Table E-3.
As shown in the table, each category is represented as a stereotype of the generic SysML «requirement». The table also
includes a brief description of the category. The table does not include any stereotype properties or constraints, although
they can be added as deemed appropriate for the application. For example, a constraint that could be applied to a
functional requirement is that only SysML activities and operations can satisfy this category of requirement. Other
examples of requirements categories may include operational, specialized requirements for reliability and
maintainability, store requirements, activation, deactivation, and a high level category for stakeholder needs.
Some general guidance for applying a requirements profile is as follows:
• The categories should be adapted for the specific application or organization and reflected in the table. This
includes agreement on the categories and their associated descriptions, stereotype properties, and constraints.
Additional categories can be added by further subclassing the categories in the table below, or adding additional
categories at the pier level of these categories.
• The default requirement category should be the generic «requirement».
• Apply the more specialized requirement stereotype (functional, interface, performance, physical, design
constraint) as applicable and ensure consistency with the description, stereotype properties, and constraints.
• A specific text requirement can include the application of more than one requirement category, in which case,
each stereotype should be shown in guillemets.
Table E-4 provides the definition of the non-normative enumerations that are used to type properties of
“extendedRequirement” stereotype of Figure E.3.
A measure of effectiveness (moe) represents a parameter whose value is critical for achieving the desired mission cost
effectiveness. It will also be assumed that the overall mission cost effectiveness can be determined by applying an
objective function to a set of criteria, each of which is represented by a measure of effectiveness.
This non-normative extension includes stereotypes for an objective function and a measure of effectiveness. The
objective function is a stereotype of a ConstraintBlock and the measure of effectiveness is a stereotype of a block
property.
Figure E.4 Example Parametric Diagram using Stereotypes for Measures of Effectiveness
The most widely accepted, scrutinized, and globally used system of quantities and system of units are the International
System of Quantities (ISQ) and the International System of Units (SI). They are formally standardized through [ISO31]
and [IEC60027]. The harmonization of these two sets of standards into one new set [ISO/IEC80000] has been published
by ISO in 2009 and 2010. The present QUDV model in SysML is based on ISO/IEC 80000-1:2009, which refers
normatively to the ISO/IEC Guide 99:2007. The ISO/IEC 80000-1:2009 document is also the baseline for the 2010
revision of the IEEE/ASTM American National Standards for Metric Practice SI-10. All the relevant concepts underlying
ISQ and SI are publicly available in [VIM]. See E.5.3, References for references to these documents.
At a minimum, SysML should provide the means to support the imminent international standard [ISO/IEC80000]. In
addition, many other systems of quantities and units are still in use for particular applications and for historical reasons. A
prime example is the system based on UK Imperial units, which is still widely used in North America. SysML should
provide the means to support all such specific systems of quantities and units, including precise definitions of the
relationships between different systems of units, and with explicit and unambiguous unit conversions to and from SI as
well as other systems.
To provide a solid and stable foundation, the model for defining quantities, units, dimensions, and values in SysML is
explicitly based on the concepts defined in [VIM], which have been written by the authoritative Working Group 2 of the
Joint Committee for Guides in Metrology (JCGM/WG 2), in which the JCGM member organizations are represented:
BIPM, IEC, IFCC, ILAC, ISO, IUPAC, IUPAP, and OIML. At the same time, the model library is designed in such a way
that extensions to the ISQ and SI can be represented, as well as any alternative systems of quantities and units.
The model library can be used to support SysML user models in various ways. A simple approach is to define and
document libraries of reusable systems of units and quantities for reuse across multiple projects, and to link units and
quantity kinds from these libraries to Unit and QuantityKind stereotypes defined in SysML user models. The name of a
Unit or QuantityKind stereotype, its definitionURI, or other means may be used to link it with definitions made using this
library. Instances of blocks conforming to this model library may be created by instance specifications, as shown in E.5.4
Usage Examples, or by other means.
Even though this model library is specified in terms of SysML blocks, its contents could equally be specified by UML
classes without dependencies on any SysML extensions. This annex specifies the model library using SysML blocks to
maintain compatibility with the SysML standard. UML and other forms of this same conceptual model are important and
useful to align different standards with each other and with those of [VIM].
Separate forms of this model library, including a UML class model generated as a simple transformation from the model
library specified in this annex, together with additional mappings and resources, example applications, and reference
libraries of systems of units and quantities built using this model, are expected to be published via the SysML Project
Portal wiki at https://www.omgwiki.org/OMGSysML/.
The QUDV Concepts diagram in Figure E.5 presents the core concepts of System of Units, Unit, SystemOfQuantities,
and QuantityKind. The QUDV concepts of Unit and QuantityKind are specialized by restriction from their respective
SysML concepts shown in gray in Figure E.5. The QUDV concepts form the basis of the QUDV subset of the Vocabulary
of International Metrology (VIM) from ISO 80000-1 and JCGM 200:2012. In SysML, a value property typed by a given
ValueType, with stereotype properties that refer to a SysML Unit and/or QuantityKind, defines a quantity in the sense of
ISO 80000-1, Sub clause 3.1. If specified, the unit of the ValueType designates the measurement unit assumed for the
numerical value of such a quantity.
In the QUDV Unit diagram in Figure E.6, SimpleUnit provides the basis for defining other units via conversion or
derivation. Additionally, QUDV provides support for specifying a coherent derived unit as a product of the baseUnit(s) of
a given SystemOfUnits. In a coherent SystemOfUnits, there is only one base unit for each base quantity kind.
In the QUDV QuantityKind diagram in Figure E.7, SimpleQuantityKind provides the basis for defining other quantity
kinds via specialization or derivation. QUDV provides a declarative specification of dimensional analysis to assign to
each QuantityKind an expression of its dependence on the baseQuantityKind(s) of a SystemOfQuantities. This
dependence is expressed as a list of QuantityKindFactor(s) corresponding to a product of powers of the base quantities.
E.5.2.15 SystemOfQuantities, specifies the derivation of quantity dimensions using an algorithm specified in OCL.
E.5.2.1 AffineConversionUnit
Description
An AffineConversionUnit is a ConversionBasedUnit that represents a measurement unit that is defined with respect to
another reference measurement unit through an affine conversion relationship with a conversion factor and offset.
The unit conversion relationship is defined by the following equation:
valueRU = factor · valueCU + offset
where:
valueRU is the quantity value expressed in the referenceUnit, and,
valueCU is the quantity value expressed in the AffineConversionUnit.
For example, in the definition of the AffineConversionUnit for “degree Fahrenheit” with respect to the referenceUnit
“degree Celsius,” the factor would be 5/9 and the offset would be -160/9, because
T
Celsius = 5/9 · TFahrenheit - 160/9 which is equivalent with TFahrenheit = 9/5 · TCelsius + 32/1
• factor: Number
Number that specifies the factor in the unit conversion relationship.
• offset: Number
Number that specifies the offset in the unit conversion relationship.
E.5.2.2 ConversionBasedUnit
Description
A ConversionBasedUnit is an abstract classifier that is a Unit that represents a measurement unit that is defined with
respect to another reference unit through an explicit conversion relationship.
Properties
• referenceUnit: Unit
Specifies the unit with respect to which the ConversionBasedUnit is defined.
• inInvertible: Boolean
Specifies whether the unit conversion relationship is invertible. For LinearConversionUnit and
AffineConversionUnit this is always true.
Operations
[1] A ConversionBasedUnit transitively depends on its referenceUnit and all of the Units that its referenceUnit depends
on.
dependsOnUnits() : Unit[0..*] {unique}
body: referenceUnit.dependsOnUnits()->including(referenceUnit)->asSet()
E.5.2.3 DerivedQuantityKind
Description
A DerivedQuantityKind is a QuantityKind that represents a kind of quantity that is defined as a product of powers of one
or more other kinds of quantity. A DerivedQuantityKind may also be used to define a synonym kind of quantity for
another kind of quantity.
For example “velocity” can be specified as the product of “length” to the power one times “time” to the power minus
one, and subsequently “speed” can be specified as “velocity” to the power one.
Properties
• factor: QuantityKindFactor [1..*]
Set of QuantityKindFactor that specifies the product of powers of other kind(s) of quantity that define the
DerivedQuantityKind.
Operations
[1] A DerivedQuantityKind transitively depends on its factors' QuantityKinds and all of the QuantityKinds that its
factors' QuantityKinds depend on.
dependsOnQuantityKinds() : QuantityKind[0..*] {unique}
body: factor.quantityKind.dependsOnQuantityKinds()->flatten()->asSet()
->union(factor.quantityKind->flatten()->asSet())->asSet()
[1] The query accessibleQuantityKinds() gives all the QuantityKinds directly defined in the SystemOfQuantities or
transitively in any included or used SystemOfQuantities.
allAccessibleQuantityKinds() : QuantityKind[0..*] {unique}
body: allAccessibleSystemOfQuantities()->collect(quantityKind)->flatten()->asSet()
inv SoU3_3:
getEffectiveSystemOfQuantities() = null or let aqk : Set(QuantityKind) =
getEffectiveSystemOfQuantities().allQuantityKinds() in ->allUnits()
->forAll(u | aqk>includesAll (getKindOfQuantitiesForMeasurementUnit(u)))
E.5.2.5 Dimension
A Dimension represents the [VIM] concept of “quantity dimension” that is defined as “expression of the dependence of a
quantity on the base quantities of a system of quantities as a product of powers of factors corresponding to the base
quantities, omitting any numerical factor.”
For example in the ISQ the quantity dimension of “force” is denoted by dim F = L·M·T-2, where “F” is the symbol for
“force,” and “L,” “M,” and “T” are the symbols for the ISQ base quantities “length,” “mass,” and “time” respectively.
The Dimension of any QuantityKind can be derived through the algorithm that is defined in E.5.2.15 SystemOfQuantities
with SystemOfQuantities. The actual Dimension for a given QuantityKind depends on the choice of baseQuantityKind
specified in a SystemOfQuantities.
Properties
• symbolicExpression: String [0..1]
Symbolic expression of the quantity dimension's product of powers, in terms of symbols of the kinds of quantity
E.5.2.6 GeneralConversionUnit
Description
A GeneralConversionUnit is a ConversionBasedUnit that represents a measurement unit that is defined with respect to
another reference measurement unit through a conversion relationship expressed in some syntax through a general
mathematical expression.
The unit conversion relationship is defined by the following equation:
valueRU / valueCU = f(valueRU, valueCU)
where:
valueRU is the quantity value expressed in the referenceUnit and
valueCU is the quantity value expressed in the GeneralConversionUnit and
f(valueRU, valueCU) is a mathematical expression that includes valueRU and valueCU
Properties
• expression: String
Specifies the unit conversion relationship in some expression syntax.
• expressionLanguageURI: String [0..1]
URI that specifies the language for the expression syntax.
E.5.2.7 LinearConversionUnit
Description
A LinearConversionUnit is a ConversionBasedUnit that represents a measurement unit that is defined with respect to
another measurement reference unit through a linear conversion relationship with a conversion factor.
The unit conversion relationship is defined by the following equation:
valueRU = factor · valueCU
where:
valueRU is the quantity value expressed in the referenceUnit, and,
valueCU is the quantity value expressed in the LinearConversionUnit.
E.5.2.8 Prefix
Description
A Prefix represents a named multiple or submultiple multiplication factor used in the specification of a PrefixedUnit. A
SystemOfUnits may specify a set of prefixes.
Properties
• symbol: String [0..1]
Short symbolic name of the prefix.
• factor: Rational [1]
Specifies the multiple or submultiple multiplication factor.
E.5.2.9 PrefixedUnit
Description
A PrefixedUnit is a ConversionBasedUnit that represents a measurement unit that is defined with respect to another
measurement reference unit through a linear conversion relationship with a named prefix that represents a multiple or
submultiple of a unit.
[VIM] defines “multiple of a unit” as “measurement obtained by multiplying a given measurement unit by an integer
greater than one” and “submultiple of a unit” as “measurement unit obtained by dividing a given measurement unit by an
integer greater than one.”
The unit conversion relationship is defined by the following equation:
valueRU = factor · valueCU
where:
valueRU is the quantity value expressed in the referenceUnit and
valueCU is the quantity value expressed in the PrefixedUnit.
For example, in the definition of the PrefixedUnit for “megabyte” with respect to the referenceUnit “byte,” the prefix
would be the Prefix for “mega” with a factor 106, because 106 byte = 1 megabyte.
See [VIM] for all decimal and binary multiples and decimal submultiples defined in SI.
Properties
• prefix: Prefix
Specifies the prefix that defines the name, symbol, and factor of the multiple or submultiple.
E.5.2.10 QuantityKind
Description
In QUDV, the concept of QuantityKind is an abstract specialization of SysML QuantityKind to support designating a
primary QuantityKind for a given Unit within the scope of a system of units and quantities and to support a richer
vocabulary for defining QuantityKinds.
Properties
• /dependsOnQuantityKinds : QuantityKind[0..*] {readOnly, unique}
The set of all QuantityKinds that this QuantityKind directly or indirectly depends on according to its definition.
• general: QuantityKind[0..*] {unique}
A quantity can be defined to represent a combination of specific characteristics from one or more aspects
defined by general QuantityKinds (see ISO 80000-1, 3.2).
• isNumberOfEntities: Boolean = false
If true, indicates that the QuantityKind represents a number of entities (see ISO 80000-1, 3.8, Note 4).
•isQuantityOfDimensionOne: Boolean = false
If true, indicates that the QuantityKind has dimension one (see ISO 80000-1, 3.8).
Constraints
[1] A QuantityKind cannot be defined in terms of itself. This follows from the quantity calculus used for expressing a
derived QuantityKind in terms of base QuantityKinds chosen for a SystemOfQuantities by means of non- contradictory
equations (See ISO 80000-1, 4.3).
inv acyclic_quantity_kind_dependencies:
dependsOnQuantityKinds()->excludes(self)
Operations
[1] Abstract operation specified in SimpleQuantityKind and DerivedQuantityKind to calculate the value of the derived
property QuantityKind:/dependsOnQuantityKinds.
dependsOnQuantityKinds() : QuantityKind[0..*] {unique}
E.5.2.11 QuantityKindFactor
Description
A QuantityKindFactor represents a factor in the product of powers that defines a DerivedQuantityKind.
E.5.2.12 Rational
Description
A Rational value type represents the mathematical concept of a number that can be expressed as a quotient of two
integers. It may be used to express the exact value of such values, without issues of rounding or other approximations if
the result of the division were used instead.
Properties
• numerator: Integer
An integer number used to express the numerator of a rational number.
• denominator: Integer
An integer number used to express the denominator of a rational number.
Operations
package QUDV
context Rational
def: plus(r : Rational[1]) : Rational[1]
= result.numerator = self.numerator * r.demonimator
+ r.numerator * self.denominator
and result.denominator = self.denominator * r.denominator
context Rational
def: equivalent(r : Rational[1]) : Boolean[1]
= result = ( self.numerator * r.demonimator
= r.numerator * self.denominator)
context Rational
def: times(r : Rational[1]) : Rational[1]
= result.numerator = self.numerator * r.numerator
and result.denominator = self.denominator * r.denominator
endpackage
Constraints
[1] The denominator of a rational number shall not be zero.
package QUDV
context Rational
E.5.2.13 SimpleQuantityKind
Description
A SimpleQuantityKind is a QuantityKind that represents a kind of quantity that does not depend on any other
QuantityKind. Typically a base quantity would be specified as a SimpleQuantityKind.
Operations
E.5.2.14 SimpleUnit
Description
A SimpleUnit is a Unit that represents a measurement unit that does not depend on any other Unit. Typically, a base unit
would be specified as a SimpleUnit.
Operations
[1] A SimpleUnit is a Unit that represents a measurement unit that does not depend on any other Unit. Typically, a base
unit would be specified as a SimpleUnit.
E.5.2.15 SystemofQuantities
Description
A SystemOfQuantities represents the [VIM] concept of “system of quantities” that is defined as a “set of quantities
together with a set of non-contradictory equations relating those quantities.” It collects a list of QuantityKind that
specifies the kinds of quantity that are known in the system.
The International System of Quantities (ISQ) is an example of a SystemOfQuantities, defined in [ISO31] and
[ISO/IEC80000].
Properties
• symbol: String [0..1]
Short symbolic name of the system of quantities.
• description: String [0..1]
Textual description of the system of quantities.
• definitionURI: String [0..1]
URI that references an external definition of the system of quantities. Note that as part of [ISO/IEC80000]
normative URIs for each of the ISQ quantities and SI units are being defined.
-- get the set of units, if any, that a given unit directly or indirectly depends on
context Unit
def: allUnitDependencies : Set(Unit)
= self->closure(directUnitDependencies)
context Unit
-- get the set of quantityKinds, if any, that a given quantityKind directly depends on
context QuantityKind
def: directQKindDependencies : Set(QuantityKind)
= if oclIsKindOf(DerivedQuantityKind)
then oclAsType(DerivedQuantityKind).factor
->collect(quantityKind)->asSet()
else
if oclIsKindOf(SpecializedQuantityKind)
then oclAsType(SpecializedQuantityKind).general
else Set{}
endif
endif
context QuantityKind
def: allQuantityKindDependencies : Set(QuantityKind)
= self->closure(directQKindDependencies)
context QuantityKind
inv acyclic_quantity_kind_dependencies
: allQuantityKindDependencies->excludes(self)
--context SystemOfQuantities::deriveQuantityKindDimensions() :
--post: quantityKind->forAll(qK|qK.hasProperDimension(self))
-- The derived dimension of a simple quantity kind must
-- have exactly one factor
-- whose numerator and denominator are equal to 1.
context SimpleQuantityKind
def: hasProperDimension(sq:SystemOfQuantities) : Boolean
= let d:Dimension=sq.getDimension(self)
in d.factor->size()=1
[3] The set of all QuantityKinds in a given SystemOfQuantities shall be partitioned into two disjoint, covering subsets:
the set of base QuantityKinds (typically chosen to be mutually independent) and its complement, the
set of derived QuantityKinds, each of which can be expressed in terms of the base QuantityKinds (See ISO
80000-1, 4.3).
inv allBaseQuantitiesAreQuantities:
allQuantityKinds()->includesAll(allBaseQuantityKinds())
[4] Every QuantityKind shall be defined in only one SystemOfQuantities but it can be in the scope of several
SystemOfQuantities. A given QuantityKind is in scope of a SystemOfQuantities either because it is defined or used in a
SystemOfQuantities or because it is included from the scope of another SystemOfQuantities.
inv singleProvenance:
includedSystemOfQuantities->collect(allQuantityKinds())
->intersection(quantityKind)->isEmpty()
[5] For a QuantityKind to have a provenance to a single SystemOfQuantities, the use and includes relationships among
SystemOfQuantities shall be acyclic.
inv acyclicProvenance:
allAccessibleSystemOfQuantities()->excludes(self)
Operations
[1] The query accessibleQuantityKinds() gives all the QuantityKinds directly defined in the SystemOfQuantities or
transitively in any included or used SystemOfQuantities.
allAccessibleQuantityKinds() : QuantityKind[0..*] {unique}
body: allAccessibleSystemOfQuantities()->collect(quantityKind)->flatten()->asSet()
[2] The query allAccessibleSystemOfQuantities() gives all the SystemOfQuantities directly or transitively included or
used.
allAccessibleSystemOfQuantities() : SystemOfQuantities[0..*] {unique}
body: self->closure(includedSystemOfQuantities->union(usedSystemOfQuantities))
->asSet()
[3] The query allBaseQuantityKinds() gives all the QuantityKinds directly adopted or transitively adopted from any
included SystemOfQuantities as base QuantityKinds.
[4] The query allIncludedSystemOfQuantities() gives all the SystemOfQuantities directly or transitively included.
allIncludedSystemOfQuantities () : SystemOfQuantities[0..*] {unique}
body: self->closure(includedSystemOfQuantities)->asSet()
[5] The query allQuantityKinds() gives all the QuantityKinds in scope of a SystemOfQuantities; that is, each
QuantityKind is either directly defined in the SystemOfQuantities, selectively used from another SystemOfQuantities or
part of the scope of all the QuantityKinds included from another SystemOfQuantities.
allQuantityKinds(): QuantityKind[0..*] {unique}
body: allIncludedSystemOfQuantities()->collect(quantityKind)->flatten()->asSet()
->union(quantityKind)->asSet())
E.5.2.16 SystemofUnits
Description
A SystemOfUnits represents the [VIM] concept of “system of units” that is defined as “set of base units and derived
units, together with their multiples and submultiples, defined in accordance with given rules, for a given system of
quantities.” It collects a list of Units that are known in the system. A QUDV SystemOfUnits only optionally defines
multiples and submultiples.
Properties
• symbol: String [0..1]
Short symbolic name of the system of units.
• description: String [0..1]
Textual description of the system of units.
• definitionURI: String [0..1]
A URI that references an external definition of the system of units. Note that as part of [ISO/IEC80000]
normative URIs for each of the quantities in the ISQ and units in the SI are being defined.
• unit: Unit [0..*] {ordered}
Ordered set of Unit that specifies the units that are known in the system.
• baseUnit: Unit [0..*] {ordered, subsets unit}
Ordered set of Unit that specifies the base units of the system of units. A “base unit” is defined in [VIM] as a
“measurement unit that is adopted by convention for a base quantity.” It is the (preferred) unit in which base
quantities of the associated systemOfQuantities are expressed.
• prefix: Prefix [0..*] {ordered}
Ordered set of Prefix that specifies the prefixes for multiples and submultiples of units in the system.
• systemOfQuantities: SystemOfQuantities [0..1]
Reference to the SystemOfQuantities for which the units are specified.
• includedSystemOfUnits: SystemOfUnits[0..*] {unique}
Constraints
[1] In a coherent system of units, there shall be only one base unit for each base quantity.
package QUDV
context SystemOfUnits
def: isCoherent() : Boolean =
baseUnit->size() = systemOfQuantities.baseQuantityKind->size()
and baseUnit
->forAll(bU|systemOfQuantities.baseQuantityKind
->one(bQK|bU.primaryQuantityKind=bQK))
and systemOfQuantities.baseQuantityKind
->forAll(bQK|baseUnit->one(bU|bQK=bU.primaryQuantityKind))
Endpackage
[2] A coherent derived unit shall be a derived unit that, for a given system of quantities and for a chosen set of base units,
is a product of powers of base units with no other proportionality factor than one.
package QUDV
context SystemOfUnits
def: isCoherent(du : DerivedUnit) : Boolean =
baseUnit->includesAll(du.factor->collect(unit))
and du.factor->collect(exponent)
->forAll(numerator=1 and denominator=1)
Endpackage
[3] In a well-formed SystemOfUnits, all of the prefixes of PrefixedUnits shall be defined in the SystemOfUnits.
inv SoU3_1:
allPrefixes()->includesAll(allUnits()->select(oclIsTypeOf(PrefixedUnit))
->collect(oclAsType(PrefixedUnit).prefix))
[4] All the dependent Units of a SystemOfUnits shall be in the scope of that SystemOfUnits.
inv SoU3_2:
[5] All of the quantityKinds that are measurementUnits of Units in the SystemOfUnits shall be defined in the
systemOfQuantities of that SystemOfUnits.
inv SoU3_3:
getEffectiveSystemOfQuantities() = null or let aqk : Set(QuantityKind) =
getEffectiveSystemOfQuantities().allQuantityKinds() in ->allUnits()
->forAll(u | aqk
->includesAll(getKindOfQuantitiesForMeasurementUnit(u)))
[6] For a Unit to have a provenance to a single SystemOfUnits, all included systems of units shall be transitively disjoint
with all used systems of units.
inv includedSystemOfUnits_transitivelyDisjoint_usedSystemOfUnits:
allIncludedSystemOfUnits()->intersection(self.oclAsSet()
->closure(usedSystemOfUnits))->isEmpty()
[7] The set of all Units in a given SystemOfUnits shall be capable of being partitioned into two disjoint, covering subsets:
the set of base Units (typically chosen to be mutually independent) and all its complement, the set of derived Units, each
of which can be expressed in terms of the base Units (See ISO 80000-1, 6.4).
inv allBaseUnitsAreUnits:
allUnits()->includesAll(allBaseUnits())
[8] Every Unit shall be defined in only one SystemOfUnits but it can be in the scope of several SystemOfUnits. A given
Unit is in scope of a SystemOfUnits either because it is defined or used in a SystemOfUnits or because it is included
from the scope of another SystemOfUnits.
inv singleProvenance:
includedSystemOfUnits->collect(allUnits())->intersection(unit)->isEmpty())
[9] For a Unit to have a provenance to a single SystemOfUnits, the use and includes relationships among SystemOfUnits
shall be acyclic.
inv acyclicProvenance:
allAccessibleSystemOfUnits()->excludes(self)
Operations
[1] The query accessibleQuantityKinds() gives all the QuantityKinds directly defined in the SystemOfQuantities or
transitively in any included or used SystemOfQuantities.
[2] The query allAccessibleSystemOfUnits() gives all the SystemOfUnits directly or transitively included or used.
allAccessibleSystemOfUnits(): SystemOfUnits[0..*] {unique}
body: self->closure(includedSystemOfUnits->union(usedSystemOfUnits))->asSet()
[3] The query accessibleUnits () gives all the units directly defined in a system of units or transitively in any included or
used system of units.
allAccessibleUnits(): Unit[0..*] {unique}
body: allAccessibleSystemOfUnits()->collect(unit)->flatten()->asSet()
[4] The query allBaseQuantityKinds() gives all the QuantityKinds directly adopted or transitively adopted from any
included SystemOfQuantities as base QuantityKinds in the effective SystemOfQuantities associated to a SystemOfUnits.
allBaseQuantityKinds(): QuantityKind[0..*] {unique}
body: getEffectiveSystemOfQuantities()->allBaseQuantityKinds()->flatten()->asSet()
[5] The query allBaseUnits() gives all the Units directly adopted or transitively adopted from any included
SystemOfUnits as base Units.
allBaseUnits(): Unit[0..*] {unique}
body: allIncludedSystemOfUnits()->collect(baseUnit)->flatten()->asSet()
->union(baseUnit)->asset
[6] The query allIncludedSystemOfUnits() gives all the SystemOfUnits directly or transitively included.
allIncludedSystemOfUnits(): SystemOfUnits[0..*] {unique}
body: self->closure(includedSystemOfUnits->union(usedSystemOfUnits))->asSet()
[9] The query allUnits() gives all the Units in scope of a SystemOfUnits; that is, each Unit is either directly defined in the
SystemOfUnits, selectively used from another SystemOfUnits or part of the scope of all the Units included from another
SystemOfUnits.
allUnits(): Unit[0..*] {unique}
body: allIncludedSystemOfUnits()->collect(unit)->flatten()->asSet()->union(unit)
->asSet()
[10] The query getAdoptedBaseUnitForMeasurementUnit() determines for a Unit u in scope of a SystemOfUnits the base
Unit, if any, corresponding to u, which can be u itself if it is a baseUnit in that SystemOfUnits or its reference Unit if it is
a base Unit and u is a PrefixUnit.
getAdoptedBaseUnitForMeasurementUnit(u : Unit) : Unit[0..1]
body: let abu : Set(Unit) = allBaseUnits() in
if (abu->includes(u)) then u
else if (u.oclIsKindOf(PrefixedUnit))
then abu->intersection(u.oclAsType(PrefixedUnit).referenceUnit->asSet())
->any(true)
else null endif
endif
[12] The query getEffectiveSystemOfQuantities() determines for a SystemOfUnits the SystemOfQuantities, if any, that it
is directly or indirectly associated with via included SystemOfUnits.
getEffectiveSystemOfQuantities () : SystemOfQuantities[0..1]
[13] The query getKindOfQuantitiesForMeasurementUnit() determines for a Unit u in scope of a SystemOfUnits the set
of QuantityKinds corresponding to u, if specified, or to the Units that u is defined in terms of, if any.
getKindOfQuantitiesForMeasurementUnit(u : Unit) : QuantityKind[0..*] {unique}
body: let bu : Unit = getAdoptedBaseUnitForMeasurementUnit(u) in
if (bu = null) then Set{}
else let qks : Set(QuantityKind) = getKindOfQuantitiesForMeasurementUnit(bu) in
allBaseQuantityKinds()->intersection(qks)
endif
E.5.2.17 Unit
Description
In QUDV, the concept of Unit is an abstract specialization of SysML Unit to support designating a primary QuantityKind
for a given Unit within the scope of a system of units and quantities and to support a richer vocabulary for defining Units.
Properties
• /dependsOnUnits : Unit[0..*] {readOnly, unique}
The set of all Units that this Unit directly or indirectly depends on according to its definition.
• general: Unit[0..*] {unique}
A Unit can be defined as a specialization of zero or more Units. This capability is important for specifying the
meaning of a unit for a quantity of dimension one (see ISO 80000-1, 3.8 and 3.10).
• isUnitCountOfEntities: Boolean = false
If true, indicates that the measurement unit represents a number of entities (see ISO 80000-1, 3.10,
Note 3).
• isUnitForQuantityOfDimensionOne: Boolean = false
If true, indicates that the corresponding QuantityKind has dimension one (see ISO 80000-1, 3.8).
Constraints
[1] A Unit cannot be defined in terms of itself. This follows from the requirement that, in a coherent SystemOfUnits, the
Units of all derived QuantityKinds are expressed in terms of the base Units in accordance with the equations in the
SystemOfQuantities (see ISO 80000-1, 6.4).
inv acyclic_unit_dependencies:
dependsOnUnits()->excludes(self)
E.5.2.18 UnitFactor
Description
A UnitFactor represents a factor in the product of powers that defines a DerivedUnit.
Properties
• exponent: Rational
Rational number that specifies the exponent of the power to which the unit is raised.
• unit: Unit
Reference to the Unit that participates in the factor.
E.5.3 References
[VIM]
JCGM 200:2012, International vocabulary of metrology - Basic and general concepts and associated terms (VIM), 3rd
edition (JCGM 200:2008 with minor corrections), 2012, BIPM, Paris, France.
http://www.bipm.org/utils/common/documents/jcgm/JCGM_200_2012.pdf.
[ISO/IEC80000]
ISO/IEC 80000, Quantities and units. 15 parts, some published, some still in progress, harmonized replacement of
[ISO31] and [IEC60027], the new international system of quantities and units.
[ISO31]
ISO 31, Quantities and units (Third edition 1992-08-01). Specifies the international system of units - SI - in 14 parts.
[IEC60027]
IEC 60027-2:2005, Letter symbols to be used in electrical technology - Part 2: Telecommunications and electronics
(Third edition 2005-08).
[SI-Brochure]
Le Système international dunités (SI) / The International System of Units (SI), 8th edition 2006, BIPM, (French and
English). Available for download in PDF format from http://www.bipm.org/en/si/si_brochure.
[NIST330]
The International System of Units (SI), NIST Special Publication 330, 2008 Edition. NOTE: U.S. version of the English
language text of [SI-Brochure].
Guide for the Use of the International System of Units (SI), NIST Special Publication 811, 2008 Edition.
[Dybkaer-2010] Rene Dybkaer, “ISO terminological analysis of the VIM3 concepts of ‘quantity’ and ‘kind-of-quantity’”,
Metrologia 47, (2010) 127-143, http://dx.doi.org/10.1088/0026-1394/47/3/003. See also:
http://www.bipm.org/en/publications/guides/rationale_vim3.html.
Figure E.9diagram shows the definition of “newton” as a DerivedUnit (E.5.2.4 DerivedUnit) corresponding to the “force”
DerivedQuantityKind (E.5.2.3 DerivedQuantityKind). Derived units and quantity kinds are defined as products of factors
on other units and quantity kinds respectively. In the QUDV, the product factors of a DerivedUnit (resp.
DerivedQuantityKind) are all of the UnitFactor (resp. DerivedUnitFactor) at the “factor” ends of association link
instances.
Figure E.8 Base Unit and Quantity Kinds of the SI and ISQ respectively
E.6 Model Library of SysML Quantity Kinds and Units for ISO 8000
E.6.1 Overview
This non-normative extension defines a model library of SysML QuantityKind and Unit definitions for a subset of
quantities and units defined by the International System of Quantities (ISQ) and the International System of Units (SI).
The specific quantities and units in this library are defined by ISO 80000-1 Quantities and units - Part1: General.
ISO/IEC 80000 currently has fourteen parts that define many quantities and units for use within various fields of science
and technology. Part 1 defines base quantities and units used by other parts as well as a starting set of derived quantities
and units with special names and symbols.
Figure E.11 Model libraries of SysML Quantity Kinds and Units for the covered content of ISO 80000 parts
3,4,5,6,7,9,10 and 13
The SysML definitions are indexed and ordered according to their corresponding ISO 80000 definition. The ISO 80000
part document provides the authoritative reference for the meaning of the corresponding SysML definitions of units and
quantity kinds.
Prefixes apply for all units except for units corresponding to quantities of dimension one or for units in non-reduced
form. The 20 decimal prefixes apply to such units in parts 3,4,5,6,7,9,10; the 8 binary prefixes apply to such units in parts
13. For a derived unit defined in terms of N other units, there are 20^N possible prefixed derived units; far too many to
create explicitly. This library contains only the combinations for the first factor for each derived unit. Finally, the library
includes value type definitions for the possible combinations of quantity kinds and compatible units and prefixed units
represented in the library.
All value type definitions follow the same pattern: a toplevel value type is defined with only the quantity kind. This value
type is compatible with values typed by specializations of that toplevel value type that specify a particular unit. The
following diagram shows the resulting taxonomy for the value types about mass (ISO 80000 -4, 4-1) and all applicable
prefixes for the corresponding unit, gram ( ISO 80000-4, 4-1.a).
Figure E.20 Example of value type definitions for a quantity and applicable units and prefixed un
Unit name Description Symbol General units Quantity Kinds is unit for is reduced
quantity of form?
radian per second ISO 80000-3, 3-10.a, rad/s ISO 80000-3, ISO 80000-3,
Unit name Description Symbol General units Quantity Kinds is unit for is reduced
quantity of form?
dimension
number of turns per ISO 80000-3, s-1 ISO 80000-3, ISO 80000-3,
second 3-15.b 3-15.b, 3-16.b 3-15.2 [6]
speed of propagation of
waves
ISO 80000-3, 3-8.2 c ISO 80000-3, 3-8.1 [5]
acceleration of free fall ISO 80000-3, 3-9.2 g ISO 80000-3, 3-9.1 [5]
time constant for an ISO 80000-3, 3-13 ISO 80000-3, 3-7 [5]
exponentially varying
quantity
group velocity ISO 80000-3, 3-20.2 cg, vg ISO 80000-3, 3-8.1 [5]
logarithmic decrement for ISO 80000-3, 3-24 Λ ISO 80000-3, 3-23 [6] TRUE
an exponentially varying
quantity
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
cubic metre ISO 80000-4, 4-16.a ISO 80000-4, ISO 80000-4, TRUE
strain factor 4-16.a [7] 4-16.3 [11]
metre strain factor ISO 80000-4, 4-16.a ISO 80000-4, ISO 80000-4, TRUE
4-16.a [7] 4-16.1 [11]
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
cubic metre strain ISO 80000-4, 4-19.a ISO 80000-4, ISO 80000-4,
factor per pascal 4-19.a [8] 4-19 [11]
metre per second ISO 80000-4, 4-23.a ISO 80000-3, ISO 80000-4, FALSE
per metre 3-15b, 3-16b, 4-23 [13]
3-23.a [4]
pascal second ISO 80000-4, 4-24.a m 2/s ISO 80000-4, ISO 80000-4,
kilogram per cubic 4-24.a [8] 4-24 [13]
metre
mass density of a ISO 80000-4, 4-2, 4-3 ISO 80000-4, 4-24 [10]
reference substance
bending moment of force ISO 80000-4, 4-13.3 ISO 80000-4, 4-13.1 [10]
radial distance from a Q- ISO 80000-4, 4-20.1 ISO 80000-3, 3-1.6 [5]
axis in the plane of the
surface considered
radial distance from a Q- ISO 80000-4, 4-20.2 ISO 80000-3, 3-1.6 [5]
axis perpendicular to the
plane of the surface
considered
maximum radial distance ISO 80000-4, 4-21 ISO 80000-4, 4-20.1 [11]
from a Q-axis in the plane
of the surface considered
contact force between two ISO 80000-4, 4-22 ISO 80000-4, 4-22 [12]
sliding bodies
contact force between two ISO 80000-4, 4-22 F ISO 80000-4, 4-9.1 [10]
bodies
normal component of the ISO 80000-4, 4-22 ISO 80000-4, 4-22 [13]
contact force between two
sliding bodies
maximum contact force ISO 80000-4, 4-22 ISO 80000-4, 4-22 [12]
between two bodies
contact force between two ISO 80000-4, 4-22 ISO 80000-4, 4-22 [12]
bodies at rest
normal component of the ISO 80000-4, 4-22 ISO 80000-4, 4-22 [13]
contact force between two
bodies at rest
normal component of the ISO 80000-4, 4-22 ISO 80000-4, 4-22 [12]
contact force between two
bodies
length of line element in a ISO 80000-4, 4-25 ISO 80000-3, 3-1.1 [5]
surface
Contact force between two bodies is an example of a taxonomy of specialized quantity kinds induced by different
measurement procedures.
Per ISO 80000-4, 4-31, 4-32, 4-33 and 4-35, there are no measurement units defined for these generalized quantity kinds;
the unit of a particular quantity (i.e., SysML value property) typed by a SysML ValueType referencing a generalized
quantity kind depends on the dimension of that particular quantity.
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
pascal ratio per ISO 80000-5, 5-3.3 ISO 80000-5, ISO 80000-5,
kelvin 5-3.a [15] 5-3.1 [17]
cubic metre ratio ISO 80000-5, 5-5.a ISO 80000-4, ISO 80000-5,
per pascal 4-19.a [8] 5-5.1 [17]
watt square metre ISO 80000-5, 5-14.a ISO 80000-4, ISO 80000-5,
per joule 4-24.a [8] 5-14 [18]
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
kelvin joule per ISO 80000-5, 5-20.a ISO 80000-4, ISO 80000-5, FALSE
kelvin 4-27.a, 4-34.a, 5-20.
4-36.a [8] [45]
[19]
pascal cubic metre ISO 80000-5, 5-20.a ISO 80000-4, ISO 80000-5,
4-27.a, 4-34.a, 5-20.3 [19]
4-36.a [8]
kelvin joule per ISO 80000-5, 5-21.a ISO 80000-5, ISO 80000-5, FALSE
kelvin kilogram 5-21.a [16] 5-21.5 [20]
heat flow rate ISO 80000-5, 5-7 ISO 80000-4, 4-26 [13]
surface density of heat ISO 80000-5, 5-8 ISO 80000-5, 5-8 [18]
flow rate
specific heat capacity at ISO 80000-5, 5-16.2 ISO 80000-5, 5-16.1 [18]
constant pressure
specific heat capacity at ISO 80000-5, 5-16.3 ISO 80000-5, 5-16.1 [18]
constant volume
specific heat capacity at ISO 80000-5, 5-16.4 ISO 80000-5, 5-16.1 [18]
saturation
mass of water irrespective ISO 80000-5, 5-24 ISO 80000-4, 4-1 [10]
of the form of aggregation
total volume of water and ISO 80000-5, 5-24 ISO 80000-3, 3-4 [5]
dry matter
mass of water vapour ISO 80000-5, 5-24 ISO 80000-5, 5-24 [20]
mass of water vapour at ISO 80000-5, 5-25 ISO 80000-5, 5-24 [20]
saturation
mass of dry matter ISO 80000-5, 5-26 ISO 80000-4, 4-1 [10] TRUE
mass ratio of water to dry ISO 80000-5, 5-26 ISO 80000-5, 5-26 [20] TRUE
gas at saturation
mass ratio of water vapour ISO 80000-5, 5-27 ISO 80000-5, 5-26 [20] TRUE
to dry gas
mass ration of water ISO 80000-5, 5-27 ISO 80000-5, 5-27 [20] TRUE
vapour to dry gas at
saturation
mass of dry gas ISO 80000-5, 5-27 ISO 80000-5, 5-26 [20]
mass fraction of dry matter ISO 80000-5, 5-29 ISO 80000-5, 5-28 [21] TRUE
partial pressure of a gas in ISO 80000-5, 5-30 ISO 80000-4, 4-15.1 [10]
a mixture
relative partial pressure of ISO 80000-5, 5-30 ISO 80000-5, 5-3.3 [17] TRUE
a gas
dew point thermodynamic ISO 80000-5, 5-33 ISO 80000-5, 5-33 [21]
temperature of humid air
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
coulomb per square IEC 80000-6, 6-7.a IEC 80000-6, IEC 80000-6,
metre per second 6-8.a [22] 6-8 [27]
coulomb per metre IEC 80000-6, 6-7.a IEC 80000-6, IEC 80000-6,
squared 6-4.a [22] 6-7 [27]
coulomb per metre IEC 80000-6, 6-9.a IEC 80000-6, IEC 80000-6,
per second 6-25.a [23] 6-9 [27]
newton per coulomb IEC 80000-6, 6-10.a IEC 80000-6, IEC 80000-6,
6-10.a [22] 6-10 [27]
volt metre per metre IEC 80000-6, 6-11.a IEC 80000-6, FALSE
6-11.a [22]
farad volt per metre IEC 80000-6, 6-12.a IEC 80000-6, IEC 80000-6,
squared 6-7.a [22] 6-12 [27]
farad per metre IEC 80000-6, 6-14.a IEC 80000-6, IEC 80000-6,
6-14.a [22] 6-14.1 [27]
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
volt ampere per IEC 80000-6, 6-34.a ISO 80000-5, IEC 80000-6,
square metre 5-8.a [15] 6-34 [29]
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
watt per volt per IEC 80000-6, 6-58.a IEC 80000-6, TRUE
ampere 6-58 [30]
second joule per IEC 80000-6, 6-62.a s.J/s ISO 80000-4, IEC 80000-6, FALSE
second 4-27.a, 4-34.a, 6-62 [31]
4-36.a [8]
electric current in a thin IEC 80000-6, 6-1 IEC 80000-6, 6-1 [27]
conducting loop n
areic electric current IEC 80000-6, 6-8 IEC 80000-6, 6-8 [27]
electric potential difference IEC 80000-6, 6-11.2 IEC 80000-6, 6-11.1 [27]
electric flux density IEC 80000-6, 6-12 IEC 80000-6, 6-7 [27]
electric flus density in IEC 80000-6, 6-12 IEC 80000-6, 6-12 [27]
vacuum
total current density IEC 80000-6, 6-20 IEC 80000-6, 6-8 [27]
linked flux in a loop IEC 80000-6, 6-22.2 IEC 80000-6, 6-22.2 [28]
caused by an electric
current in that loop
linked flux in a loop m IEC 80000-6, 6-22.2 IEC 80000-6, 6-22.2 [28]
caused by an electric
current in another loop n
magnetic field strength in IEC 80000-6, 6-25 IEC 80000-6, 6-25 [28]
vacuum
energy density of electric IEC 80000-6, 6-33 IEC 80000-6, 6-33 [29]
field
phase speed of light in IEC 80000-6, 6-35.2 IEC 80000-6, 6-35.1 [29]
vacuum
scalar magnetic potential IEC 80000-6, 6-37.1 IEC 80000-6, 6-1 [27]
initial phase of electric IEC 80000-6, 6-48 ISO 80000-3, 3-5 [5]
voltage
initial phase of electric IEC 80000-6, 6-48 ISO 80000-3, 3-5 [5]
current
electric current phasor IEC 80000-6, 6-49 IEC 80000-6, 6-1 [27]
loss angle IEC 80000-6, 6-55 ISO 80000-3, 3-5 [5] TRUE
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension 1?
speed of light in vacuum ISO 80000-7, 7-4.1 ISO 80000-3, 3-8.1 [5]
phase speed of light in ISO 80000-7, 7-4.2 ISO 80000-3, 3-8.2 [5]
medium
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
Unit name Description Symbol General units Quantity is unit for is reduced
Kinds quantity of form?
dimension
1?
Expressing requirements as text strings alone fundamentally limits their ability to be evaluated and verified. This Annex
addresses a more formal expression of requirements generally referred to as property based requirements (PBR); one that
includes quantitative specification of numerical parameters, relationships, equations and/or constraints.
Current users of text-based requirements have frequently expressed a basic need to represent numerical requirements
more precisely, both to reduce ambiguity and facilitate verification by analysis and other methods. This basic need can be
decomposed into three primary needs: 1) Requirements shall have numerical properties (properties capable of
representing numerical values), 2) these numerical properties shall be typeable (preferably by ValueType) to account for
quantity kind and units, and 3) these numerical properties shall be bindable (preferably using BindingConnector) to other
model elements (e.g., ConstraintParameters) so they can be evaluated using analysis tools. For the purpose of this
discussion, a requirement that meets these three conditions is said to be a property-based requirement.
This kind of property-based requirement is intended to be used with the overall system model to assist in specifying and
architecting systems. More generally, the system model may be used as a model-based specification, such as when block
instances with specific property values represent the requirement. In this latter case, the model-based specification can
further refine the property-based requirement.
Users of property-based requirements may desire a more elaborate capability than the primary need described above. For
example, it may be desirable for the requirement to contain a constraint or mathematical expression that formally states
an acceptance condition, threshold, or goal. This may alternatively need to be expressed as a set of valued pairs,
elaborating both the conditions and the acceptance thresholds for each condition, or by an arbitrary graphical
The need for this kind of property-based requirement is illustrated in the simple example of specifying a vehicle’s
required stopping distance for various initial speeds and road conditions. The requirement can be expressed in a table as
follows:
The Vehicle stopping distance shall not exceed the values in Table E-42 as a function of initial speed and pavement
condition.
Table E-42: Example of Requirement in Tabular Form
0 dry 0 0 wet 0
10 dry 4 10 wet 6
20 dry 17 20 wet 22
30 dry 38 30 wet 50
40 dry 67 40 wet 89
alpha
dry 0.8
wet 0.6
More generally, the input and output parameter values may be complex functions of other parameters, and may have
probability distributions associated with them.
This annex addresses mechanisms and approaches for building SysML profiles to enable property-based requirements.
While examples of property-based requirement profiles are provided in this annex, these are not to be considered
normative or even authoritative. Instead, they are intended to be illustrative of the kind of extensions that some users may
find desirable. Ultimate responsibility for the compatibility of any property-based requirement profile with a particular
requirements management process or toolset rests fully with the user.
The requirement is captured via a PBR (RequirementConstraintBlock), which includes a constraint expression that
reflects the textual requirements statement in terms of two defined parameters, actualMass and requiredMass. Both of
these parameters are typed by the kilogram value type from the SI value types library. The required value for mass is
expressed as a default value of the requiredMass parameter. Note that the required value may have alternatively been
expressed as a second constraint expression, e.g., {requiredMass = 1450}. The vehicle itself is represented in the model
by a block with a value property for mass, also typed by the kilogram SI value type.
Figure E.25 Example of Requirement Evaluation Context Using PBR Based on Constraint Block
Table E-26 shows a parametric diagram of the Requirement Context block, useful for establishing the method of
evaluating compliance of the vehicleMass value with the Vehicle Mass Requirement. As with any parametric model, it
does not actually perform the evaluation/analysis, but it does specify the key relationships so that an evaluation tool may
determine if the weight requirement has been met.
Figure E.26 Example of Parametric Diagram Using PBR based on Constraint Block
Table E-30 shows use of both “abstractRequirement” and “Block” to define a new PBR stereotype, named «PBR» in this
example.
G.1 Overview
This annex describes two methods for exchanging SysML models between tools. The first method discussed is XML
Metadata Interchange (XMI), which is the preferred method for exchanging models between UML-based tools. The
second approach describes the use of ISO 10303-233 Application Protocol: Systems engineering (AP233), which is one
of the series of STEP (Standard for the Exchange of Product Model Data) engineering data exchange standards. Other
model interchange approaches are possible, but the ones described in this annex are expected to be the primary ones
supported by SysML.
Many of these artifacts pertain to shared engineering data (e.g., requirements, system structural and behavioral models,
verification & validation) that transcend the entire life cycle of the system of interest and are the basis for important
systems engineering considerations and decisions. So it is critical that the system information contained in these artifacts
and information models be accurately captured and readable by all appropriate team members in a timely manner.
Today, this information resides in an array of tools where each is only concerned with a portion of systems engineering
data and can’t share its data with other tools because they only understand their own native schema. To mitigate this
situation, collaborating organizations are usually forced to either adopt a common set of tools or develop a unique,
bidirectional interface between many of the tools that each organization uses. This can be an expensive and untimely
approach to data exchange between team members. So, there is a need to define standardized approaches for model
interchange between the different data schemas in use.
The UML language includes an extension mechanism called UML Profiles. UML Profiles are themselves defined as
UML models (MOF is not used). However, their intent is to specify extensions to the UML language semantics in much
the same way one could extend the UML language by adding to the MOF definition of UML. As UML Profiles are valid
UML models, XMI does provide a mechanism for exchanging the UML Profiles between UML tools. However, as they
are extensions to concepts defined in the UML language itself, the definition of a UML Profile refers to the UML
language definitions. An XMI 2.5.1 representation of the SysML profile (i.e., the UML Profile for SysML), as well as
XMI 2.5.1 representations of Model Libraries defined by SysML, are provided as support documents to this International
Standard. As with UML, XMI provides a convenient serialized format for model interchange between SysML tools and
basic validation of those files using an XML Schema as well.
STEP also standardizes a series of implementation methods: a text file structure (ISO 10303-21), a data access interface
(ISO 10303-22) and an XML file format (ISO 10303-28). The data access interface has bindings that provide
standardized APIs for accessing EXPRESS-based data in various programming languages. A conforming STEP
implementation is the combination of a STEP application protocol and one or more of the implementation methods.
The scope of STEP is very large and a number of data exchange standards (e.g., geometry, product life-cycle support,
structural, electrical, and engineering analysis) have been in wide use in industry for more than 15 years. Support for
several systems engineering viewpoints within the scope of AP233 are shared with other application protocols. Since
AP233 is part of STEP, it is easy to relate systems engineering data to that of other engineering disciplines over the life
cycle of a system and to related product models.
For more information on the STEP architecture see the ISO TC184/SC4 Industrial Data subcommittee web page at
http://www.tc184-sc4.org.
G.4.3 EXPRESS
AP233, like all STEP application protocols, is defined using the EXPRESS modeling language. EXPRESS is a precise
text-based information modeling language with a related graphical representation called EXPRESS-G.
SCHEMA Ap233_systems_engineering_arm_excerpt;
ENTITY Product;
id : STRING;
name : STRING;
END_ENTITY;
ENTITY Product_version;
id : STRING;
of_product : Product;
END_ENTITY;
ENTITY Product_view_definition;
initial_context : View_definition_context;
defined_version : Product_version;
WHERE
END_ENTITY;
ENTITY View_definition_context;
application_domain : STRING;
life_cycle_stage : STRING;
WHERE
PRODUCT_VIEW_DEFINITION.INITIAL_CONTEXT )) > 0) OR
END_ENTITY;
ENTITY System
SUBTYPE OF (Product);
END_ENTITY;
ENTITY System_version
SUBTYPE OF (Product_version);
SELF\Product_version.of_product : System;
ENTITY System_view_definition
SUBTYPE OF (Product_view_definition);
SELF\Product_view_definition.defined_version : System_version;
END_ENTITY;
END_SCHEMA;
EXPRESS expressions are similar in nature to OCL expressions and the two languages have similar expressiveness.
EXPRESS has also been approved as an OMG standard with a September 2009 publication of Version 1.0 of the
Reference Metamodel for the EXPRESS Information Modeling Language Specification. This will enable the use of
OMG Model Driven Architecture technologies against AP233 and other STEP models written in EXPRESS.