diff --git a/.gitignore b/.gitignore
index 63926a65..3cdf4d79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -353,4 +353,5 @@ MigrationBackup/
.idea
# WinMerge bak files
-*.bak
\ No newline at end of file
+*.bak
+/switcher.json
diff --git a/Resources/KerML.xmi b/Resources/KerML.xmi
new file mode 100644
index 00000000..a45713dc
--- /dev/null
+++ b/Resources/KerML.xmi
@@ -0,0 +1,9208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Resources/KerML_only_xmi.uml b/Resources/KerML_only_xmi.uml
deleted file mode 100644
index fdbe3eab..00000000
--- a/Resources/KerML_only_xmi.uml
+++ /dev/null
@@ -1,7858 +0,0 @@
-
-
-
-
- The Root layer provides the syntactic foundation for KerML.
-
-
-
-
-
- <p>A <code>Dependency</code> is a <code>Relationship</code> that indicates that one or more <code>client</code> <code>Elements</code> require one more <code>supplier</code> <code>Elements</code> for their complete specification. In general, this means that a change to one of the <code>supplier</code> <code>Elements</code> may necessitate a change to, or re-specification of, the <code>client</code> <code>Elements</code>.</p>
-
-<p>Note that a <code>Dependency</code> is entirely a model-level <code>Relationship</code>, without instance-level semantics.</p>
-
-
-
-
- <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</code>.</p>
-
-
-
-
-
-
- <p>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Comment</code> is an <code>AnnotatingElement</code> whose <code>body</code> in some way describes its <code>annotatedElements</code>.</p>
-
-
-
-
-
- <p>Identification of the language of the <code>body</code> text and, optionally, the region and/or encoding. The format shall be a POSIX locale conformant to ISO/IEC 15897, with the format <code>[language[_territory][.codeset][@modifier]]</code>.</p>
-
-
-
-
-
-
-
- <p>The annotation text for the <code>Comment</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>Annotation</code> is a Relationship between an <code>AnnotatingElement</code> and the <code>Element</code> that is annotated by that <code>AnnotatingElement</code>.</p>
-
-
-
-
- <p>An <code>Annotation</code> owns its <code>annotatingElement</code> if and only if it is owned by its <code>annotatedElement</code>.</p>
-
-
- OCL2.0
- (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null)
-
-
-
-
- <p>Either the <code>ownedAnnotatingElement</code> of an <code>Annotation</code> must be non-null, or the <code>owningAnnotatingElement</code> must be non-null, but not both.</p>
-
-
- OCL2.0
- ownedAnnotatingElement <> null xor owningAnnotatingElement <> null
-
-
-
-
- <p>The <code>ownedAnnotatingElement</code> of an <code>Annotation</code> is the first <code>ownedRelatedElement</code> that is an <code>AnnotatingElement</code>, if any.</p>
-
-
- OCL2.0
- ownedAnnotatingElement =
- let ownedAnnotatingElements : Sequence(AnnotatingElement) =
- ownedRelatedElement->selectByKind(AnnotatingElement) in
- if ownedAnnotatingElements->isEmpty() then null
- else ownedAnnotatingElements->first()
- endif
-
-
-
-
- <p>The <code>annotatingElement</code> of an <code>Annotation</code> is either its <code>ownedAnnotatingElement</code> or its <code>owningAnnotatingElement</code>.</p>
-
-
- OCL2.0
- annotatingElement =
- if ownedAnnotatingElement <> null then ownedAnnotatingElement
- else owningAnnotatingElement
- endif
-
-
-
-
-
- <p>The <code>AnnotatingElement</code> that annotates the <code>annotatedElement</code> of this <code>Annotation</code>. This is always either the <code>ownedAnnotatingElement</code> or the <code>owningAnnotatingElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p>
-
-
-
-
-
-
-
- <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is the <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
- <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is an <code>ownedRelatedElement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Annotations associated with a certain <code>annotatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AnnotatingElement</code> is an <code>Element</code> that provides additional description of or metadata on some other <code>Element</code>. An <code>AnnotatingElement</code> is either attached to its <code>annotatedElements</code> by <code>Annotation</code> <code>Relationships</code>, or it implicitly annotates its <code>owningNamespace</code>.</p>
-
-
-
-
- <p>If an <code>AnnotatingElement</code> has <code>annotations</code>, then its <code>annotatedElements</code> are the <code>annotatedElements</code> of all its <code>annotations</code>. Otherwise, it's single <code>annotatedElement</code> is its <code>owningNamespace</code>.</p>
-
-
- OCL2.0
- annotatedElement =
- if annotation->notEmpty() then annotation.annotatedElement
- else Sequence{owningNamespace} endif
-
-
-
-
- <p>The <code>ownedAnnotatingRelationships</code> of an <code>AnnotatingElement</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>AnnotatingElement</code> is not the <code>annotatedElement</code>.</p>
-
-
- OCL2.0
- ownedAnnotatingRelationship = ownedRelationship->
- selectByKind(Annotation)->
- select(a | a.annotatedElement <> self)
-
-
-
-
- <p>The <code>annotations</code> of an <code>AnnotatingElement</code> are its <code>owningAnnotatingRelationship</code> (if any) followed by all its <code>ownedAnnotatingRelationships</code>.</p>
-
-
- OCL2.0
- annotation =
- if owningAnnotatingRelationship = null then ownedAnnotatingRelationship
- else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship)
- endif
-
-
-
-
-
- <p>The <code>Elements</code> that are annotated by this <code>AnnotatingElement</code>. If <code>annotation</code> is not empty, these are the <code>annotatedElements</code> of the <code>annotations</code>. If <code>annotation</code> is empty, then it is the <code>owningNamespace</code> of the <code>AnnotatingElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>AnnotatingElement</code> that are <code>Annotations</code>, for which this <code>AnnotatingElement</code> is the <code>annotatingElement</code>.</p>
-
-
-
-
-
-
- <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p>
-
-
-
-
-
-
- <p>The <code>Annotations</code> that relate this <code>AnnotatingElement</code> to its <code>annotatedElements</code>. This includes the <code>owningAnnotatingRelationship</code> (if any) followed by all the <code>ownedAnnotatingRelationshps</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TextualRepresentation</code> is an <code>AnnotatingElement</code> whose <code>body</code> represents the <code>representedElement</code> in a given <code>language</code>. The <code>representedElement</code> must be the <code>owner</code> of the <code>TextualRepresentation</code>. The named <code>language</code> can be a natural language, in which case the <code>body</code> is an informal representation, or an artificial language, in which case the <code>body</code> is expected to be a formal, machine-parsable representation.</p>
-
-<p>If the named <code>language</code> of a <code>TextualRepresentation</code> is machine-parsable, then the <code>body</code> text should be legal input text as defined for that <code>language</code>. The interpretation of the named language string shall be case insensitive. The following <code>language</code> names are defined to correspond to the given standard languages:</p>
-
-<table border="1" cellpadding="1" cellspacing="1" width="498">
- <thead>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: center; width: 154px;"><code>kerml</code></td>
- <td style="width: 332px;">Kernel Modeling Language</td>
- </tr>
- <tr>
- <td style="text-align: center; width: 154px;"><code>ocl</code></td>
- <td style="width: 332px;">Object Constraint Language</td>
- </tr>
- <tr>
- <td style="text-align: center; width: 154px;"><code>alf</code></td>
- <td style="width: 332px;">Action Language for fUML</td>
- </tr>
- </tbody>
-</table>
-
-<p>Other specifications may define specific <code>language</code> strings, other than those shown above, to be used to indicate the use of languages from those specifications in KerML <code>TextualRepresentation</code>.</p>
-
-<p>If the <code>language</code> of a <code>TextualRepresentation</code> is "<code>kerml</code>", then the <code>body</code> text shall be a legal representation of the <code>representedElement</code> in the KerML textual concrete syntax. A conforming tool can use such a <code>TextualRepresentation</code> <code>Annotation</code> to record the original KerML concrete syntax text from which an <code>Element</code> was parsed. In this case, it is a tool responsibility to ensure that the <code>body</code> of the <code>TextualRepresentation</code> remains correct (or the Annotation is removed) if the annotated <code>Element</code> changes other than by re-parsing the <code>body</code> text.</p>
-
-<p>An <code>Element</code> with a <code>TextualRepresentation</code> in a language other than KerML is essentially a semantically "opaque" <code>Element</code> specified in the other language. However, a conforming KerML tool may interpret such an element consistently with the specification of the named language.</p>
-
-
-
-
-
- <p>The natural or artifical language in which the <code>body</code> text is written.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p>
-
-
-
-
-
-
-
- <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Documentation</code> is a <code>Comment</code> that specifically documents a <code>documentedElement</code>, which must be its <code>owner</code>.</p>
-
-
-
-
-
- <p>The <code>Element</code> that is documented by this <code>Documentation</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Namespace</code> is an <code>Element</code> that contains other <code>Elements</code>, known as its <code>members</code>, via <code>Membership</code> <code>Relationships</code> with those <code>Elements</code>. The <code>members</code> of a <code>Namespace</code> may be owned by the <code>Namespace</code>, aliased in the <code>Namespace</code>, or imported into the <code>Namespace</code> via <code>Import</code> <code>Relationships</code>.</p>
-
-<p>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</code>.</p>
-
-
-
-
- <p>All <code>memberships</code> of a <code>Namespace</code> must be distinguishable from each other.</p>
-
-
- OCL2.0
- membership->forAll(m1 |
- membership->forAll(m2 |
- m1 <> m2 implies m1.isDistinguishableFrom(m2)))
-
-
-
-
- <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</code>.</p>
-
-
- OCL2.0
- member = membership.memberElement
-
-
-
-
- <p>The <code>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>.
-
-
- OCL2.0
- ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement
-
-
-
-
- <p>The <code>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</p>
-
-
- OCL2.0
- importedMembership = importedMemberships(Set{})
-
-
-
-
- <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</code>.</p>
-
-
- OCL2.0
- ownedImport = ownedRelationship->selectByKind(Import)
-
-
-
-
- <p>The <code>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</code>.</p>
-
-
- OCL2.0
- ownedMembership = ownedRelationship->selectByKind(Membership)
-
-
-
-
-
- <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>The set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</code>.</p>
-
-
-
-
-
-
-
- <p>The owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <code>Namespace</code>.</p>
-
-
-
-
-
-
-
- <p>Return the names of the given <code>element</code> as it is known in this <code>Namespace</code>.</p>
-
-
-
-
- OCL2.0
- let elementMemberships : Sequence(Membership) =
- memberships->select(memberElement = element) in
-memberships.memberShortName->
- union(memberships.memberName)->
- asSet()
-
-
-
-
-
-
-
-
-
-
-
- <p>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</p>
-
-
-
-
- OCL2.0
- if importedMembership->includes(mem) then
- ownedImport->
- select(importedMemberships(Set{})->includes(mem)).
- first().visibility
-else if memberships->includes(mem) then
- mem.visibility
-else
- VisibilityKind::private
-endif
-
-
-
-
-
-
-
- <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p>
-
-
-
-
- OCL2.0
- let visibleMemberships : OrderedSet(Membership) =
- if includeAll then membershipsOfVisibility(null, excluded)
- else membershipsOfVisibility(VisibilityKind::public, excluded)
- endif in
-if not isRecursive then visibleMemberships
-else visibleMemberships->union(ownedMember->
- selectAsKind(Namespace).
- select(includeAll or owningMembership.visibility = VisibilityKind::public)->
- visibleMemberships(excluded->including(self), true, includeAll))
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</code>.</p>
-
-
-
-
- OCL2.0
- ownedImport.importedMemberships(excluded->including(self))
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p>
-
-
-
- OCL2.0
- ownedMembership->
- select(mem | visibility = null or mem.visibility = visibility)->
- union(ownedImport->
- select(imp | visibility = null or imp.visibility = visibility).
- importedMemberships(excluded->including(self)))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</p>
-
-
-
-
- OCL2.0
- let qualification : String = qualificationOf(qualifiedName) in
-let name : String = unqualifiedNameOf(qualifiedName) in
-if qualification = null then resolveLocal(name)
-else if qualification = '$' then resolveGlobal(name)
-else
- let namespaceMembership : Membership = resolve(qualification) in
- if namespaceMembership = null or
- not namespaceMembership.memberElement.oclIsKindOf(Namespace)
- then null
- else
- namespaceMembership.memberElement.oclAsType(Namespace).
- resolveVisible(name)
- endif
-endif endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</p>
-
-
-
-
- English
- No OCL
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</p>
-
-
-
-
- OCL2.0
- if owningNamespace = null then resolveGlobal(name)
-else
- let memberships : Membership = membership->
- select(memberShortName = name or memberName = name) in
- if memberships->notEmpty() then memberships->first()
- else owningNamspace.resolveLocal(name)
- endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</code>.</p>
-
-
-
-
- OCL2.0
- let memberships : Sequence(Membership) =
- visibleMemberships(Set{}, false, false)->
- select(memberShortName = name or memberName = name) in
-if memberships->isEmpty() then null
-else memberships->first()
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</p>
-
-
-
- English
- No OCL
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p>
-
-
-
- English
- No OCL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>An <code>Import</code> is an <code>Relationship</code> between its <code>importOwningNamespace</code> and either a <code>Membership</code> (for a <code>MembershipImport</code>) or another <code>Namespace</code> (for a <code>NamespaceImport</code>), which determines a set of <code>Memberships</code> that become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. If <code>isImportAll = false</code> (the default), then only public <code>Memberships</code> are considered "visible". If <code>isImportAll = true</code>, then all <code>Memberships</code> are considered "visible", regardless of their declared <code>visibility</code>. If <code>isRecursive = true</code>, then visible <code>Memberships</code> are also recursively imported from owned sub-<code>Namespaces</code>.</p>
-
-
-
-
-
- <p>A top-level <code>Import</code> (that is, one that is owned by a root <code>Namespace</code>) must have a <code>visibility</code> of <code>private</code>.</p>
-
-
- OCL2.0
- importOwningNamespace.owner = null implies
- visibility = VisibilityKind::private
-
-
-
-
-
- <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p>
-
-
-
-
-
-
-
- <p>The visibility level of the imported <code>members</code> from this Import relative to the <code>importOwningNamespace</code>. The default is <code>private</code>.</p>
-
-
-
-
-
-
- <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p>
-
-
-
-
-
-
- <p>Whether to import memberships without regard to declared visibility.</p>
-
-
-
-
-
-
-
- <p>The effectively imported <code>Element</code> for this </code>Import</code>. For a <code>MembershipImport</code>, this is the <code>memberElement</code> of the <code>importedMembership</code>. For a <code>NamespaceImport</code>, it is the <code>importedNamespace</code>.</p>
-
-
-
-
-
-
- <p>Returns Memberships that are to become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. (The <code>excluded</code> parameter is used to handle the possibility of circular Import Relationships.)</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on that <code>Namespace</code>.</p>
-
-
-
-
- <p>The <code>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p>
-
-
- OCL2.0
- importedElement = importedMembership.memberElement
-
-
-
-
-
- <p>The <code>Membership</code> to be imported.</p>
-
-
-
-
-
-
-
- <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p>
-
-
-
-
- OCL2.0
- if not isRecursive or
- not importedElement.oclIsKindOf(Namespace) or
- excluded->includes(importedElement)
-then Sequence{importedMembership}
-else importedElement.oclAsType(Namespace).
- visibleMemberships(excluded, true, importAll)->
- prepend(importedMembership)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Membership with a certain Element as its <code>memberElement</code>.</p>
-
-
-
-
-
-
-
-
- <p>An Import with a certain <code>importedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>NamespaceImport</code> is an Import that imports <code>Memberships</code> from its <code>importedNamespace</code> into the <code>importOwningNamespace</code>. If <code> isRecursive = false</code>, then only the visible <code>Memberships</code> of the <code>importedNamespace</code> are imported. If <code> isRecursive = true</code>, then, in addition, <code>Memberships</code> are recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are <code>Namespaces</code>.</p>
-
-
-
-
- <p>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p>
-
-
- OCL2.0
- importedElement = importedNamespace
-
-
-
-
-
- <p>The <code>Namespace</code> whose visible <code>Memberships</code> are imported by this <code>NamespaceImport</code>.</p>
-
-
-
-
-
-
-
- <p>Returns at least the visible <code>Memberships</code> of the <code>importedNamespace</code>. If <code>isRecursive = true</code>, then <code>Memberships</code> are also recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are themselves <code>Namespaces</code>.</p>
-
-
-
-
- OCL2.0
- if excluded->includes(importedNamespace) then Sequence{}
-else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Namespace that has a certain <code>membership</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Membership</code> is a <code>Relationship</code> between a <code>Namespace</code> and an <code>Element</code> that indicates the <code>Element</code> is a <code>member</code> of (i.e., is contained in) the Namespace. Any <code>memberNames</code> specify how the <code>memberElement</code> is identified in the <code>Namespace</code> and the <code>visibility</code> specifies whether or not the <code>memberElement</code> is publicly visible from outside the <code>Namespace</code>.</p>
-
-<p>If a <code>Membership</code> is an <code>OwningMembership</code>, then it owns its <code>memberElement</code>, which becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>. Otherwise, the <code>memberNames</code> of a <code>Membership</code> are effectively aliases within the <code>membershipOwningNamespace</code> for an <code>Element</code> with a separate <code>OwningMembership</code> in the same or a different <code>Namespace</code>.</p>
-
-<p> </p>
-
-
-
-
- <p>The <code>memberElementId</code> of a <code>Membership</code> is the <code>elementId</code> of its <code>memberElement</code>.</p>
-
-
- OCL2.0
- memberElementId = memberElement.elementId
-
-
-
-
-
- <p>The <code>elementId</code> of the <code>memberElement</code>.</p>
-
-
-
-
-
- <p>The <code>Namespace</code> of which the <code>memberElement</code> becomes a <code>member</code> due to this <code>Membership</code>.</p>
-
-
-
-
-
-
-
- <p>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Element</code> that becomes a <code>member</code> of the <code>membershipOwningNamespace</code> due to this <code>Membership</code>.</p>
-
-
-
-
-
-
-
- <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
-
-
-
-
- <p>Whether or not the <code>Membership</code> of the <code>memberElement</code> in the <code>membershipOwningNamespace</code> is publicly visible outside that <code>Namespace</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>Membership</code> is distinguishable from a given <code>other</code> <code>Membership</code>. By default, this is true if this <code>Membership</code> has no <code>memberShortName</code> or <code>memberName</code>; or each of the <code>memberShortName</code> and <code>memberName</code> are different than both of those of the <code>other</code> <code>Membership</code>; or neither of the metaclasses of the <code>memberElement</code> of this <code>Membership</code> and the <code>memberElement</code> of the <code>other</code> <code>Membership</code> conform to the other. But this may be overridden in specializations of <code>Membership</code>.</p>
-
-
-
-
- OCL2.0
- not (memberElement.oclKindOf(other.memberElement.oclType()) or
- other.memberElement.oclKindOf(memberElement.oclType())) or
-(shortMemberName = null or
- (shortMemberName <> other.shortMemberName and
- shortMemberName <> other.memberName)) and
-(memberName = null or
- (memberName <> other.shortMemberName and
- memberName <> other.memberName)))
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Namespace with a certain <code>importedMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>OwningMembership</code> is a <code>Membership</code> that owns its <code>memberElement</code> as a <code>ownedRelatedElement</code>. The <code>ownedMemberElement</code> becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
- <p>The <code>ownedMemberName</code> of an <code>OwningMembership</code> is the <code>name</code> of its <code>ownedMemberElement</code>.</p>
-
-
- OCL2.0
- ownedMemberName = ownedMemberElement.name
-
-
-
-
- <p>The <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</code>.</p>
-
-
- OCL2.0
- ownedMemberShortName = ownedMemberElement.shortName
-
-
-
-
-
- <p>The <code>Element</code> that becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code> due to this <code>OwningMembership</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>elementId</code> of the <code>ownedMemberElement</code>.</p>
-
-
-
-
-
- <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>name</code> of the <code>ownedMemberElement</code>.</p>
-
-
-
-
-
-
-
-
- <p>If the <code>ownedMemberElement</code> of this <code>OwningMembership</code> has a non-null <code>qualifiedName</code>, then return the string constructed by appending to that <code>qualifiedName</code> the string <code>"/owningMembership"</code>. Otherwise, return the <code>path</code> of the <code>OwningMembership</code> as specified for a <code>Relationship</code> in general.
-
-
-
- OCL2.0
- if ownedElement.qualifiedName <> null then
- ownedElement.qualifiedName + '/owningMembership'
-else self.oclAsType(Relationship).path()
-endif
-
-
-
-
-
-
-
-
-
-
- <p>The Namespace the has a certain Element as a <code>member</code>.</p>
-
-
-
-
-
-
-
- <p><code>VisibilityKind</code> is an enumeration whose literals specify the visibility of a <code>Membership</code> of an <code>Element</code> in a <code>Namespace</code> outside of that <code>Namespace</code>. Note that "visibility" specifically restricts whether an <code>Element</code> in a <code>Namespace</code> may be referenced by name from outside the <code>Namespace</code> and only otherwise restricts access to an <code>Element</code> as provided by specific constraints in the abstract syntax (e.g., preventing the import or inheritance of private <code>Elements</code>).</p>
-
-
-
-
- <p>Indicates a <code>Membership</code> is not visible outside its owning <code>Namespace</code>.</p>
-
-
-
-
- <p>An intermediate level of visibility between <code>public</code> and <code>private</code>. By default, it is equivalent to <code>private</code> for the purposes of normal access to and import of <code>Elements</code> from a <code>Namespace</code>. However, other <code>Relationships</code> may be specified to include <code>Memberships</code> with <code>protected</code> visibility in the list of <code>memberships</code> for a <code>Namespace</code> (e.g., <code>Specialization</code>).</p>
-
-
-
-
-
- <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p>
-
-
-
-
-
-
- <p>A MembershipImport that has a certain <code>importedMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>Element</code> is a constituent of a model that is uniquely identified relative to all other <code>Elements</code>. It can have <code>Relationships</code> with other <code>Elements</code>. Some of these <code>Relationships</code> might imply ownership of other <code>Elements</code>, which means that if an <code>Element</code> is deleted from a model, then so are all the <code>Elements</code> that it owns.</p>
-
-
-
-
- <p>The <code>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</code>.</p>
-
-
- OCL2.0
- ownedElement = ownedRelationship.ownedRelatedElement
-
-
-
-
- <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p>
-
-
- OCL2.0
- owner = owningRelationship.owningRelatedElement
-
-
-
-
- <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</p>
-
-
- OCL2.0
- qualifiedName =
- if owningNamespace = null then null
- else if name <> null and
- owningNamespace.ownedMember->
- select(m | m.name = name).indexOf(self) <> 1 then null
- else if owningNamespace.owner = null then escapedName()
- else if owningNamespace.qualifiedName = null or
- escapedName() = null then null
- else owningNamespace.qualifiedName + '::' + escapedName()
- endif endif endif endif
-
-
-
-
- <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p>
-
-
- OCL2.0
- documentation = ownedElement->selectByKind(Documentation)
-
-
-
-
- <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p>
-
-
- OCL2.0
- ownedAnnotation = ownedRelationship->
- selectByKind(Annotation)->
- select(a | a.annotatedElement = self)
-
-
-
-
- <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</p>
-
-
- OCL2.0
- name = effectiveName()
-
-
-
-
- <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p>
-
-
- OCL2.0
- ownedRelationship->exists(isImplied) implies isImpliedIncluded
-
-
-
-
- <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p>
-
-
- OCL2.0
- isLibraryElement = libraryNamespace() <> null
-
-
-
-
-
- <p>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p>
-
-
- OCL2.0
- shortName = effectiveShortName()
-
-
-
-
- <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamspace</code> of its <code>owningMembership</code> (if any).</p>
-
-
- OCL2.0
- owningNamespace =
- if owningMembership = null then null
- else owningMembership.membershipOwningNamespace
- endif
-
-
-
-
- <p>The <code>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p>
-
-
- OCL2.0
- textualRepresentation = ownedElement->selectByKind(TextualRepresentation)
-
-
-
-
- <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p>
-
-
-
-
-
-
-
- <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p>
-
-
-
-
-
-
-
- <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p>
-
-
-
-
-
-
-
- <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p>
-
-
-
-
-
- <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p>
-
-
-
-
-
-
- <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p>
-
-
-
-
-
-
- <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</p>
-
-
-
-
-
-
-
- <p>The Documentation owned by this Element.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code>
-
-
-
-
-
-
- <p>The <code>TextualRepresentations</code> that annotate this <code>Element</code>.</p>
-
-
-
-
-
-
- <p>Various alternative identifiers for this Element. Generally, these will be set by tools.</p>
-
-
-
-
-
-
-
- <p>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</p>
-
-
-
-
-
-
-
-
- <p>The declared name of this <code>Element</code>.</p>
-
-
-
-
-
-
-
-
- <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p>
-
-
-
-
-
-
-
- <p>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</p>
-
-
-
-
-
-
-
- <p>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</p>
-
-
-
-
-
-
-
- <p>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</p>
-
-
-
-
-
-
- <p>Whether this Element is contained in the ownership tree of a library model.</p>
-
-
-
-
-
- <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p>
-
-
-
-
-
-
-
-
-
- <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</code>.</p>
-
-
-
- OCL2.0
- declaredShortName
-
-
-
-
-
-
-
-
-
-
- <p>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</code>.</p>
-
-
-
- OCL2.0
- declaredName
-
-
-
-
-
-
-
-
-
-
- <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p>
-
-
-
- OCL2.0
- if owningRelationship <> null then owningRelationship.libraryNamespace()
-else null endif
-
-
-
-
-
-
-
-
-
- <p>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p>
-
-<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p>
-
-
-
- OCL2.0
- if qualifiedName <> null then qualifiedName
-else if owningRelationship <> null then
- owningRelationship.path() + '/' +
- owningRelationship.ownedRelatedElement->indexOf(self).toString()
- -- A position index shall be converted to a decimal string representation
- -- consisting of only decimal digits, with no sign, leading zeros or leading
- -- or trailing whitespace.
-else ''
-endif endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Relationship</code> is an <code>Element</code> that relates other <code>Element</code>. Some of its <code>relatedElements</code> may be owned, in which case those <code>ownedRelatedElements</code> will be deleted from a model if their <code>owningRelationship</code> is. A <code>Relationship</code> may also be owned by another <code>Element</code>, in which case the <code>ownedRelatedElements</code> of the <code>Relationship</code> are also considered to be transitively owned by the <code>owningRelatedElement</code> of the <code>Relationship</code>.</p>
-
-<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p>
-
-<p>A "relationship <code>Element</code>" in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a "non-relationship <code>Element</code>". It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</code>.</p>
-
-
-
-
- <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p>
-
-
- OCL2.0
- relatedElement = source->union(target)
-
-
-
-
-
- <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p>
-
-
-
-
-
-
- <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</p>
-
-
-
-
-
-
-
- <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p>
-
-
-
-
-
-
- <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</p>
-
-
-
-
-
-
- <p>The <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p>
-
-
-
-
-
-
- <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p>
-
-
-
-
-
-
- <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p>
-
-
-
- OCL2.0
- if owningRelatedElement <> null then owningRelatedElement.libraryNamespace()
-else if owningRelationship <> null then owningRelationship.libraryNamespace()
-else null endif endif
-
-
-
-
-
-
-
-
-
- <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p>
-
-
-
- OCL2.0
- if owningRelationship = null and owningRelatedElement <> null then
- owningRelatedElement.path() + '/' +
- owningRelatedElement.ownedRelationship->indexOf(self).toString()
- -- A position index shall be converted to a decimal string representation
- -- consisting of only decimal digits, with no sign, leading zeros or leading
- -- or trailing whitespace.
-else self.oclAsType(Element).path()
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The Core layer provides the semantic foundation for KerML.
-
-
-
-
-
-
- <p>A Type with a certain <code>input</code>.</p>
-
-
-
-
-
-
-
-
- <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A Type with a certain <code>output</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Specialization</code> is a <code>Relationship</code> between two <code>Types</code> that requires all instances of the <code>specific</code> type to also be instances of the <code>general</code> Type (i.e., the set of instances of the <code>specific</code> Type is a <em>subset</em> of those of the <code>general</code> Type, which might be the same set).</p>
-
-
-
-
- <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p>
-
-
- OCL2.0
- not specific.isConjugated
-
-
-
-
-
- <p>The <code>Type</code> that is the <code>specific</code> <code>Type</code> of this <code>Specialization</code> and owns it as its <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Type</code> with a superset of all instances of the <code>specific</code> <code>Type</code>, which might be the same set.</p>
-
-
-
-
-
-
-
- <p>A <code>Type</code> with a subset of all instances of the <code>general</code> <code>Type</code>, which might be the same set.</p>
-
-
-
-
-
-
-
-
- <p><code>FeatureDirectionKind</code> enumerates the possible kinds of <code>direction</code> that a <code>Feature</code> may be given as a member of a <code>Type</code>.</p>
-
-
-
-
- <p>Values of the <code>Feature</code> on each instance of its domain are determined externally to that instance and used internally.</p>
-
-
-
-
-
- <p>Values of the <code>Feature</code> on each instance are determined either as <em>in</em> or <em>out</em> directions, or both.</p>
-
-
-
-
-
- <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p>
-
-
-
-
-
-
-
- <p>The Specializations with a certain <code>specific</code> Type.</p>
-
-
-
-
-
-
-
-
-
- <p>The Specializations with a certain <code>general<code> Type.</p>
-
-
-
-
-
-
-
- <p>A <code>Type</code> is a <code>Namespace</code> that is the most general kind of <code>Element</code> supporting the semantics of classification. A <code>Type</code> may be a <code>Classifier</code> or a <code>Feature</code>, defining conditions on what is classified by the <code>Type</code> (see also the description of <code>isSufficient</code>).</p>
-
-
-
-
- <p>The <code>ownedSpecializations</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Specializations</code> whose <code>special</code> <code>Type</code> is the owning <code>Type</code>.</p>
-
-
- OCL2.0
- ownedSpecialization = ownedRelationship->selectByKind(Specialization)->
- select(s | s.special = self)
-
-
-
-
-
- <p>If a <code>Type</code> has an owned <code>Multiplicity</code>, then that is its <code>multiplicity</code>. Otherwise, if the <code>Type</code> has an <code>ownedSpecialization</code>, then its <code>multiplicity</code> is the <code>multiplicity</code> of the <code>general</code> <code>Type</code> of that <code>Specialization</code>.</p>
-
-
- OCL2.0
- multiplicity =
- let ownedMultiplicities: Sequence(Multiplicity) =
- ownedMember->selectByKind(Multiplicity) in
- if ownedMultiplicities->isEmpty() then null
- else ownedMultiplicities->first()
- endif
-
-
-
-
- <p>The <code>ownedFeatureMemberships</code> of a <code>Type</code> are its <code>ownedMemberships</code> that are <code>FeatureMemberships</code>.</p>
-
-
- OCL2.0
- ownedFeatureMembership = ownedRelationship->selectByKind(FeatureMembership)
-
-
-
-
- <p>The <code>ownedConjugator</code> of a <code>Type</code> is the its single <code>ownedRelationship</code> that is a <code>Conjugation</code>.</p>
-
-
- OCL2.0
- ownedConjugator =
- let ownedConjugators: Sequence(Conjugator) =
- ownedRelationship->selectByKind(Conjugation) in
- if ownedConjugators->isEmpty() then null
- else ownedConjugators->at(1) endif
-
-
-
-
- <p>The <code>outputs</code> of a <code>Type</code> are those of its <code>features</code> that have a direction of <ode>out</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p>
-
-
- OCL2.0
- output = feature->select(f |
- let direction: FeatureDirectionKind = directionOf(f) in
- direction = FeatureDirectionKind::out or
- direction = FeatureDirectionKind::inout)
-
-
-
-
- <p>The <code>inputs</code> of a <code>Type</code> are those of its features that have a direction of <code>in</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p>
-
-
- OCL2.0
- input = feature->select(f |
- let direction: FeatureDirectionKind = directionOf(f) in
- direction = FeatureDirectionKind::_'in' or
- direction = FeatureDirectionKind::inout)
-
-
-
-
- <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</p>
-
-
- OCL2.0
- inheritedMembership = inheritedMemberships(Set{}, Set{}, false)
-
-
-
-
- <p>A <code>Type</code> must directly or indirectly specialize <code><em>Base::Anything</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::Anything')
-
-
-
-
- <p>The <code>directedFeatures</code> of a <code>Type</code> are those <code>features</code> for which the <code>direction</code> is non-null.</p>
-
-
- OCL2.0
- directedFeature = feature->select(f | directionOf(f) <> null)
-
-
-
-
- <p>The <code>features</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>featureMemberships</code>.
-
-
- OCL2.0
- feature = featureMembership.ownedMemberFeature
-
-
-
-
- <p>The <code>featureMemberships</code> of a <code>Type</code> is the union of the <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p>
-
-
- OCL2.0
- featureMembership = ownedFeatureMembership->union(
- inheritedMembership->selectByKind(FeatureMembership))
-
-
-
-
- <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>.
-
-
- English
- ownedFeature = ownedFeatureMembership.ownedMemberFeature
-
-
-
-
- <p>The <code>differencingTypes</code> of a <code>Type</code> are the <code>differencingTypes</code> of its <code>ownedDifferencings</code>, in the same order.</p>
-
-
- English
- differencingType = ownedDifferencing.differencingType
-
-
-
-
- <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p>
-
-
- English
- intersectingType->excludes(self)
-
-
-
-
- <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</p>
-
-
- English
- differencingType->excludes(self)
-
-
-
-
- <p>The <code>unioningTypes</code> of a <code>Type</code> are the <code>unioningTypes</code> of its <code>ownedUnionings</code>.<p>
-
-
- OCL2.0
- unioningType = ownedUnioning.unioningType
-
-
-
-
- <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p>
-
-
- English
- unioningType->excludes(self)
-
-
-
-
- <p>The <code>intersectingTypes</code> of a <code>Type</code> are the <code>intersectingTypes</code> of its <code>ownedIntersectings</code>.</p>
-
-
- OCL2.0
- intersectingType = ownedIntersecting.intersectingType
-
-
-
-
- A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>.
-
-
- OCL2.0
- ownedRelationship->selectByKind(Conjugation)->size() <= 1
-
-
-
-
- <p>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(Multiplicity)->size() <= 1
-
-
-
-
- <p>The <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</code>.</p>
-
-
- OCL2.0
- endFeature = feature->select(isEnd)
-
-
-
-
- <p>The <code>ownedDisjoinings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Disjoinings</code>.</p>
-
-
- OCL2.0
- ownedDisjoining =
- ownedRelationship->selectByKind(Disjoining)
-
-
-
-
- <p>The <code>ownedUnionings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Unionings</code>.</p>
-
-
- OCL2.0
- ownedUnioning =
- ownedRelationship->selectByKind(Unioning)
-
-
-
-
- <p>The <code>ownedIntersectings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Intersectings</code>.</p>
-
-
- OCL2.0
- ownedRelationship->selectByKind(Intersecting)
-
-
-
-
- <p>The <code>ownedDifferencings</code> of a <code>Type</code> are its <code>ownedRelationships</code> that are <code>Differencings</code>.</p>
-
-
- OCL2.0
- ownedDifferencing =
- ownedRelationship->selectByKind(Differencing)
-
-
-
-
- <p>The <code>ownedEndFeatures</code> of a <code>Type</code> are all its <code>ownedFeatures</code> for which <code>isEnd = true</code>.</p>
-
-
- OCL2.0
- ownedEndFeature = ownedFeature->select(isEnd)
-
-
-
-
- <p>The <code>inheritedFeatures</code> of this <code>Type</code> are the <code>memberFeatures</code> of the <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p>
-
-
- OCL2.0
- inheritedFeature = inheritedMemberships->
- selectByKind(FeatureMembership).memberFeature
-
-
-
-
- A <code>Type</code> must not have exactly one <code>ownedUnioning</code>.
-
-
- OCL2.0
- ownedUnioning->size() <> 1
-
-
-
-
- A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>.
-
-
- OCL2.0
- ownedIntersecting->size() <> 1
-
-
-
-
- A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>.
-
-
- OCL2.0
- ownedDifferencing->size() <> 1
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Specializations</code>, for which the <code>Type</code> is the <code>specific</code> <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>, for which the <code>Type</code> is the <code>owningType</code>. Each such <code>FeatureMembership</code> identifies an <code>ownedFeature</code> of the <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>in</code> or <code>inout</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>out</code> or <code>inout</code>.</p>
-
-
-
-
-
-
-
- <p>Indicates whether instances of this <code>Type</code> must also be instances of at least one of its specialized <code>Types</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>Memberships</code> inherited by this <code>Type</code> via <code>Specialization</code> or <code>Conjugation</code>. These are included in the derived union for the <code>memberships</code> of the <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p>
-
-
-
-
-
-
- <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</code>.</p>
-
-
-
-
-
-
-
- <p>Whether all things that meet the classification conditions of this <code>Type</code> must be classified by the <code>Type</code>.</p>
-
-<p>(A <code>Type</code> gives conditions that must be met by whatever it classifies, but when <code>isSufficient</code> is false, things may meet those conditions but still not be classified by the <code>Type</code>. For example, a Type <code><em>Car</em></code> that is not sufficient could require everything it classifies to have four wheels, but not all four wheeled things would classify as cars. However, if the <code>Type</code> <code><em>Car</em></code> were sufficient, it would classify all four-wheeled things.)</p>
-
-
-
-
-
-
-
- <p>A <code>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p>
-
-
-
-
-
-
-
- <p>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p>
-
-
-
-
-
-
- <p>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>ownedMember</code> of this <code>Type</code> that is a <code>Multiplicity</code>, which constraints the cardinality of the <code>Type</code>. If there is no such <code>ownedMember</code>, then the cardinality of this <code>Type</code> is constrained by all the <code>Multiplicity</code> constraints applicable to any direct supertypes.</p>
-
-
-
-
-
-
- <p>The interpretations of a <code>Type</code> with <code>unioningTypes</code> are asserted to be the same as those of all the <code>unioningTypes</code> together, which are the <code>Types</code> derived from the <code>unioningType</code> of the <code>ownedUnionings</code> of this <code>Type</code>. For example, a <code>Classifier</code> for people might be the union of <code>Classifiers</code> for all the sexes. Similarly, a feature for people's children might be the union of features dividing them in the same ways as people in general.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Intersectings</code>, have the <code>Type</code> as their <code>typeIntersected</code>.</p>
-
-
-
-
-
-
-
- <p>The interpretations of a <code>Type</code> with <code>intersectingTypes</code> are asserted to be those in common among the <code>intersectingTypes</code>, which are the <code>Types</code> derived from the <code>intersectingType</code> of the <code>ownedIntersectings</code> of this <code>Type</code>. For example, a <code>Classifier</code> might be an intersection of <code>Classifiers</code> for people of a particular sex and of a particular nationality. Similarly, a feature for people's children of a particular sex might be the intersection of a <code>Feature</code> for their children and a <code>Classifier</code> for people of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the Classifier for that sex).</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Unionings</code>, having the <code>Type</code> as their <code>typeUnioned</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Disjoinings</code>, for which the <code>Type</code> is the <code>typeDisjoined</code> <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>FeatureMemberships</code> for <code>features</code> of this <code>Type</code>, which include all <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code> (but does <em>not</em> include any <code>importedMemberships</code>).</p>
-
-
-
-
-
-
-
- <p>The interpretations of a <code>Type</code> with <code>differencingTypes</code> are asserted to be those of the first of those <code>Types</code>, but not including those of the remaining <code>Types</code>. For example, a <code>Classifier</code> might be the difference of a <code>Classifier</code> for people and another for people of a particular nationality, leaving people who are not of that nationality. Similarly, a feature of people might be the difference between a feature for their children and a <code>Classifier</code> for people of a particular sex, identifying their children not of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the <code>Classifier</code> for that sex).</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Differencings</code>, having this <code>Type</code> as their <code>typeDifferenced</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p>
-
-
-
-
-
-
-
- <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</code>.</p>
-
-
-
-
- OCL2.0
- let visibleMemberships : OrderedSet(Membership) =
- self.oclAsType(Namespace).
- visibleMemberships(excluded, isRecursive, includeAll) in
-let visibleInheritedMemberships : OrderedSet(Membership) =
- inheritedMemberships(excluded->including(self), Set{}, isRecursive)->
- select(includeAll or visibility = VisibilityKind::public) in
-visibleMemberships->union(visibleInheritedMemberships)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>Memberships</code> inheritable from supertypes of this <code>Type</code> with redefined <code>Features</code> removed. When computing inheritable <code>Memberships</code>, exclude <code>Imports</code> of <code>excludedNamespaces</code>, <code>Specializations</code> of <code>excludedTypes</code>, and, if <code>excludeImplied = true</code>, all implied <code>Specializations</code>.</p>
-
-
-
-
- OCL2.0
- removeRedefinedFeatures(
- inheritableMemberships(excludedNamespaces, excludedTypes, excludeImplied))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return all the non-<code>private</code> <code>Memberships</code> of all the supertypes of this <code>Type</code>, excluding any supertypes that are this <code>Type</code> or are in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also transitively exclude any supertypes from implied <code>Specializations</code>.</p>
-
-
-
- OCL2.0
- let excludingSelf : Set(Type) = excludedType->including(self) in
-supertypes(excludeImplied)->reject(t | excludingSelf->includes(t)).
- nonPrivateMemberships(excludedNamespaces, excludingSelf, excludeImplied)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>public</code>, <code>protected</code> and inherited <code>Memberships</code> of this <code>Type</code>. When computing imported <code>Memberships</code>, exclude the given set of <code>excludedNamespaces</code>. When computing inherited <code>Memberships</code>, exclude <code>Types</code> in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also exclude any supertypes from implied <code>Specializations</code>.</p>
-
-
-
- OCL2.0
- let publicMemberships : OrderedSet(Membership) =
- membershipsOfVisibility(VisibilityKind::public, excludedNamespaces) in
-let protectedMemberships : OrderedSet(Membership) =
- membershipsOfVisibility(VisibilityKind::protected, excludedNamespaces) in
-let inheritedMemberships : OrderedSet(Membership) =
- inheritedMemberships(excludedNamespaces, excludedTypes, excludeImplied) in
-publicMemberships->
- union(protectedMemberships)->
- union(inheritedMemberships)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return a subset of <code>memberships</code>, removing those <code>Memberships</code> whose <code>memberElements</code> are <code>Features</code> and for which either of the following two conditions holds:</p>
-
-<ol>
- <li>The <code>memberElement</code> of the <code>Membership</code> is included in redefined <code>Features</code> of another <code>Membership</code> in <code>memberships</code>.</li>
- <li>One of the redefined <code>Features</code> of the <code>Membership</code> is a directly <code>redefinedFeature</code> of an <code>ownedFeature</code> of this <code>Type</code>.</li>
-</ol>
-
-<p>For this purpose, the redefined <code>Features</code> of a <code>Membership</code> whose <code>memberElement</code> is a <code>Feature</code> includes the <code>memberElement</code> and all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p>
-
-
-
- OCL2.0
- let reducedMemberships : Sequence(Membership) =
- memberships->reject(mem1 |
- memberships->excluding(mem1)->
- exists(mem2 | allRedefinedFeaturesOf(mem2)->
- includes(mem1.memberElement))) in
-let redefinedFeatures : Set(Feature) =
- ownedFeature.redefinition.redefinedFeature->asSet() in
-reducedMemberships->reject(mem | allRedefinedFeaturesOf(mem)->
- exists(feature | redefinedFeatures->includes(feature)))
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If the <code>memberElement</code> of the given <code>membership</code> is a <code>Feature</code>, then return all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p>
-
-
-
- OCL2.0
- if not membership.memberElement.oclIsType(Feature) then Set{}
-else membership.memberElement.oclAsType(Feature).allRedefinedFeatures()
-endif
-
-
-
-
-
-
-
-
-
-
- <p>If the given <code>feature</code> is a <code>feature</code> of this <code>Type</code>, then return its direction relative to this <code>Type</code>, taking conjugation into account.</p>
-
-
-
-
- OCL2.0
- directionOfExcluding(f, Set{})
-
-
-
-
-
-
-
-
-
-
- <p>Return the direction of the given <code>feature</code> relative to this <code>Type</code>, excluding a given set of <code>Types</code> from the search of supertypes of this <code>Type</code>.</p>
-
-
-
- OCL2.0
- let excludedSelf : Set(Type) = excluded->including(self) in
-if feature.owningType = self then feature.direction
-else
- let directions : Sequence(FeatureDirectionKind) =
- supertypes(false)->excluding(excludedSelf).
- directionOfExcluding(feature, excludedSelf)->
- select(d | d <> null) in
- if directions->isEmpty() then null
- else
- let direction : FeatureDirectionKind = directions->first() in
- if not isConjugated then direction
- else if direction = FeatureDirectionKind::_'in' then FeatureDirectionKind::out
- else if direction = FeatureDirectionKind::out then FeatureDirectionKind::_'in'
- else direction
- endif endif endif endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If this <code>Type</code> is conjugated, then return just the <code>originalType</code> of the <code>Conjugation</code>. Otherwise, return the <code>general</code> <code>Types</code> from all <code>ownedSpecializations</code> of this type, if <code>excludeImplied = false</code>, or all non-implied <code>ownedSpecializations</code>, if <code>excludeImplied = true</code>.</p>
-
-
-
- OCL2.0
- if isConjugated then Sequence{conjugator.originalType}
-else if not excludeImplied then ownedSpecialization.general
-else ownedSpecialization->reject(isImplied).general
-endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return this <code>Type</code> and all <code>Types</code> that are directly or transitively supertypes of this <code>Type</code> (as determined by the <code>supertypes</code> operation with <code>excludeImplied = false</code>).</p>
-
-
-
-
- OCL2.0
- OrderedSet{self}->closure(supertypes(false))
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Type</code> is a direct or indirect specialization of the given <code>supertype<code>.</p>
-
-
-
- OCL2.0
- if isConjugated then
- ownedConjugator.originalType.specializes(supertype)
-else
- allSupertypes()->includes(supertype)
-endif
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Type</code> is a direct or indirect specialization of the named library <code>Type</code>. <code>libraryTypeName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Type</code> in global scope.</p>
-
-
-
-
- OCL2.0
- let mem : Membership = resolveGlobal(libraryTypeName) in
-mem <> null and mem.memberElement.oclIsKindOf(Type) and
-specializes(mem.memberElement.oclAsType(Type))
-
-
-
-
-
-
-
-
-
-
-
- <p>By default, this <code>Type</code> is compatible with an <code>otherType</code> if it directly or indirectly specializes the <code>otherType</code>.</p>
-
-
-
- OCL2.0
- specializes(otherType)
-
-
-
-
-
-
-
-
-
- <p>Return the owned or inherited <code>Multiplicities</code> for this <code>Type<./code>.</p>
-
-
-
- OCL2.0
- if multiplicity <> null then OrderedSet{multiplicity}
-else
- ownedSpecialization.general->closure(t |
- if t.multiplicity <> null then OrderedSet{}
- else ownedSpecialization.general
- )->select(multiplicity <> null).multiplicity->asOrderedSet()
-endif
-
-
-
-
-
-
-
-
-
-
-
- <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>FeatureMembership</code> is an <code>OwningMembership</code> between an <code>ownedMemberFeature</code> and an <code>owningType</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = false</code>, then the <code>FeatureMembership</code> implies that the <code>owningType</code> is also a <code>featuringType</code> of the <code>ownedMemberFeature</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = true</code>, then the <code>FeatureMembership</code> implies that the <code>ownedMemberFeature</code> is featured by the <em><code>snapshots</code></em> of the <code>owningType</code>, which must specialize the Kernel Semantic Library base class <em><code>Occurrence</code></em>.</p>
-
-
-
-
-
- <p>The <code>Type</code> that owns this <code>FeatureMembership</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that this <code>FeatureMembership</code> relates to its <code>owningType</code>, making it an <code>ownedFeature</code> of the <code>owningType</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Type that inherits the <code>inheritedMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Conjugations with a certain Type as the <code>originalType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Conjugation</code> is a <code>Relationship</code> between two types in which the <code>conjugatedType</code> inherits all the <code>Features</code> of the <code>originalType</code>, but with all <code>input</code> and <code>output</code> <code>Features</code> reversed. That is, any <code>Features</code> with a <code>direction</code> <em>in</em> relative to the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>out</em> relative to the <code>conjugatedType</code> and, similarly, <code>Features</code> with <code>direction</code> <em>out</em> in the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>in</em> in the <code>conjugatedType</code>. <code>Features</code> with <code>direction</code> <em>inout</em>, or with no <code>direction</code>, in the <code>originalType</code>, are inherited without change.</p>
-
-<p>A <code>Type</code> may participate as a <code>conjugatedType</code> in at most one <code>Conjugation</code> relationship, and such a <code>Type</code> may not also be the <code>specific</code> <code>Type</code> in any <code>Specialization</code> relationship.</p>
-
-
-
-
-
- <p>The <code>Type</code> to be conjugated.</p>
-
-
-
-
-
-
-
- <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Multiplicity</code> is a <code>Feature</code> whose co-domain is a set of natural numbers giving the allowed cardinalities of each <code>typeWithMultiplicity</code>. The <em>cardinality</em> of a <code>Type</code> is defined as follows, depending on whether the <code>Type</code> is a <code>Classifier</code> or <code>Feature</code>.
-<ul>
-<li><code>Classifier</code> – The number of basic instances of the <code>Classifier</code>, that is, those instances representing things, which are not instances of any subtypes of the <code>Classifier</code> that are <code>Features</code>.
-<li><code>Features</code> – The number of instances with the same featuring instances. In the case of a <code>Feature</code> with a <code>Classifier</code> as its <code>featuringType</code>, this is the number of values of <code>Feature</code> for each basic instance of the <code>Classifier</code>. Note that, for non-unique <code>Features</code>, all duplicate values are included in this count.</li>
-</ul>
-
-<p><code>Multiplicity</code> co-domains (in models) can be specified by <code>Expression</code> that might vary in their results. If the <code>typeWithMultiplicity</code> is a <code>Classifier</code>, the domain of the <code>Multiplicity</code> shall be <em><code>Base::Anything</code></em>. If the <code>typeWithMultiplicity</code> is a <code>Feature</code>, the <code>Multiplicity</code> shall have the same domain as the <code>typeWithMultiplicity</code>.</p>
-
-
-
-
- <p>If the <code>owningType</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p>
-
-
- OCL2.0
- if owningType <> null and owningType.oclIsKindOf(Feature) then
- featuringType =
- owningType.oclAsType(Feature).featuringType
-else
- featuringType->isEmpty()
-endif
-
-
-
-
- <p>A <code>Multiplicity</code> must directly or indirectly specialize the <code>Feature</code> <code><em>Base::naturals</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::naturals')
-
-
-
-
-
-
-
- <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Disjoining</code> is a <code>Relationship</code> between <code>Types</code> asserted to have interpretations that are not shared (disjoint) between them, identified as <code>typeDisjoined</code> and <code>disjoiningType</code>. For example, a <code>Classifier</code> for mammals is disjoint from a <code>Classifier</code> for minerals, and a <code>Feature</code> for people's parents is disjoint from a <code>Feature</code> for their children.</p>
-
-
-
-
-
- <p><code>Type</code> asserted to be disjoint with the <code>disjoiningType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>A Type that owns or inherits the <code>featureMembership</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Differencings that identify this Type as their <code>differencingType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Types that include this one among their <code>unioningTypes</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Unionings that identify all these Types as their <code>unioningType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Types that include this one among their <code>intersectingTypes</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Types that include this one among their <code>differencingTypes</code>.</p>
-
-
-
-
-
-
-
- <p><code>Differencing</code> is a <code>Relationship</code> that makes its <code>differencingType</code> one of the <code>differencingTypes</code> of its <code>typeDifferenced</code>.</p>
-
-
-
-
-
- <p><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Unioning</code> is a <code>Relationship</code> that makes its <code>unioningType</code> one of the <code>unioningTypes</code> of its <code>typeUnioned</code>.</p>
-
-
-
-
-
- <p><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Intersecting</code> is a <code>Relationship</code> that makes its <code>intersectingType</code> one of the <code>intersectingTypes</code> of its <code>typeIntersected</code>.</p>
-
-
-
-
-
- <p><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>The Subclassifications with a certain <code>subclassifier</code>.</p>
-
-
-
-
-
-
-
-
- <p><code>Subclassification</code> is <code>Specialization</code> in which both the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Classifier</code>. This means all instances of the specific <code>Classifier</code> are also instances of the general <code>Classifier</code>.</p>
-
-
-
-
-
- <p>The more <code>general</code> Classifier in this <code>Subclassification</code>.</p>
-
-
-
-
-
-
-
- <p>The more specific <code>Classifier</code> in this <code>Subclassification</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</p>
-
-<ul>
- <li>Things (in the universe) regardless of how <code>Features</code> relate them. (These are interpreted semantically as sequences of exactly one thing.)</li>
- <li>How the above things are related by <code>Features.</code> (These are interpreted semantically as sequences of multiple things, such that the last thing in the sequence is also classified by the <code>Classifier</code>. Note that this means that a <code>Classifier</code> modeled as specializing a <code>Feature</code> cannot classify anything.)</li>
-</ul>
-
-
-
-
-
- <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p>
-
-
- OCL2.0
- ownedSubclassification =
- ownedSpecialization->selectByKind(Subclassification)
-
-
-
-
- <p>If a <code>Classifier</code> has a <code>multiplicity</code>, then the <code>multiplicity</code> must have no <code>featuringTypes</code> (meaning that its domain is implicitly <em>Base::Anything</em>).</p>
-
-
- OCL2.0
- multiplicity <> null implies multiplicity.featuringType->isEmpty()
-
-
-
-
-
- <p>The <code>ownedSpecializations</code> of this <code>Classifier</code> that are <code>Subclassifications</code>, for which this <code>Classifier</code> is the <code>subclassifier</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Subclassifications with a certain <code>superclassifier</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Redefinition</code> is a kind of <code>Subsetting</code> that requires the <code>redefinedFeature</code> and the <code>redefiningFeature</code> to have the same values (on each instance of the domain of the <code>redefiningFeature</code>). This means any restrictions on the <code>redefiningFeature</code>, such as <code>type</code> or <code>multiplicity</code>, also apply to the <code>redefinedFeature</code> (on each instance of the domain of the <code>redefiningFeature</code>), and vice versa. The <code>redefinedFeature</code> might have values for instances of the domain of the <code>redefiningFeature</code>, but only as instances of the domain of the <code>redefinedFeature</code> that happen to also be instances of the domain of the <code>redefiningFeature</code>. This is supported by the constraints inherited from <code>Subsetting</code> on the domains of the <code>redefiningFeature</code> and <code>redefinedFeature</code>. However, these constraints are narrowed for <code>Redefinition</code> to require the <code>owningTypes</code> of the <code>redefiningFeature</code> and <code>redefinedFeature</code> to be different and the <code>redefinedFeature</code> to not be inherited into the <code>owningNamespace</code> of the <code>redefiningFeature</code>.This enables the <code>redefiningFeature</code> to have the same name as the <code>redefinedFeature</code>, if desired.</p>
-
-
-
-
- <p>The <code>redefiningFeature</code> of a <code>Redefinition</code> must have at least one <code>featuringType</code> that is not also a <code>featuringType</code> of the <code>redefinedFeature</code>.</p>
-
-
- OCL2.0
- let anythingType: Type =
- redefiningFeature.resolveGlobal('Base::Anything').modelElement.oclAsType(Type) in
--- Including "Anything" accounts for implicit featuringType of Features
--- with no explicit featuringType.
-let redefiningFeaturingTypes: Set(Type) =
- if redefiningFeature.isVariable then Set{redefiningFeature.owningType}
- else redefiningFeature.featuringTypes->asSet()->including(anythingType)
- endif in
-let redefinedFeaturingTypes: Set(Type) =
- if redefinedFeature.isVariable then Set{redefinedFeature.owningType}
- else redefinedFeature.featuringTypes->asSet()->including(anythingType)
- endif in
-redefiningFeaturingTypes <> redefinedFeaturingType
-
-
-
-
- <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has a direction of <code>in</code> or <code>out</code> (relative to any <code>featuringType</code> of the <code>redefiningFeature</code> or the <code>owningType</code>, if the <code>redefiningFeature</code> has <code>isVariable = true</code>), then the <code>redefiningFeature</code> must have the same <code>direction</code>. If the <code>redefinedFeature</code> has a direction of <code>inout</code>, then the <code>redefiningFeature</code> must have a non-null <code>direction</code>. (Note: the direction of the <code>redefinedFeature</code> relative to a <code>featuringType</code> of the <code>redefiningFeature</code> is the direction it would have if it had been inherited and not redefined.)</p>
-
-
- OCL2.0
- let featuringTypes : Sequence(Type) =
- if redefiningFeature.isVariable then Sequence{redefiningFeature.owningType}
- else redefiningFeature.featuringType
- endif in
-featuringTypes->forAll(t |
- let direction : FeatureDirectionKind = t.directionOf(redefinedFeature) in
- ((direction = FeatureDirectionKind::_'in' or
- direction = FeatureDirectionKind::out) implies
- redefiningFeature.direction = direction)
- and
- (direction = FeatureDirectionKind::inout implies
- redefiningFeature.direction <> null))
-
-
-
-
- <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p>
-
-
- OCL2.0
- redefinedFeature.isEnd implies redefiningFeature.isEnd
-
-
-
-
-
- <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The FeatureTyping relating this Type to a Feature.</p>
-
-
-
-
-
-
-
-
- <p>The Features for which a certain Type is a <code>type</code>.</p>
-
-
-
-
-
-
-
-
- <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Feature</code> is a <code>Type</code> that classifies relations between multiple things (in the universe). The domain of the relation is the intersection of the <code>featuringTypes</code> of the <code>Feature</code>. (The domain of a <code>Feature</code> with no <code>featuringTyps</code> is implicitly the most general <code>Type</code> <em><code>Base::Anything</code></em> from the Kernel Semantic Library.) The co-domain of the relation is the intersection of the <code>types</code> of the <code>Feature</code>.
-
-<p>In the simplest cases, the <code>featuringTypes</code> and <code>types</code> are <code>Classifiers</code> and the <code>Feature</code> relates two things, one from the domain and one from the range. Examples include cars paired with wheels, people paired with other people, and cars paired with numbers representing the car length.</p>
-
-<p>Since <code>Features</code> are <code>Types</code>, their <code>featuringTypes</code> and <code>types</code> can be <code>Features</code>. In this case, the <code>Feature</code> effectively classifies relations between relations, which can be interpreted as the sequence of things related by the domain <code>Feature</code> concatenated with the sequence of things related by the co-domain <code>Feature</code>.</p>
-
-<p>The <em>values</em> of a <code>Feature</code> for a given instance of its domain are all the instances of its co-domain that are related to that domain instance by the <code>Feature</code>. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with values of the first <code>Feature</code>, then using those values as domain instances to obtain valus of the second <code>Feature</code>, and so on, to values of the last <code>Feature</code>.</p>
-
-
-
-
- <p>The <code>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</code>.</p>
-
-
- OCL2.0
- ownedRedefinition = ownedSubsetting->selectByKind(Redefinition)
-
-
-
-
- <p>The <code>ownedTypeFeaturings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>TypeFeaturings</code> and which have the <code>Feature</code> as their <code>featureOfType</code>.</p>
-
-
- OCL2.0
- ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)->
- select(tf | tf.featureOfType = self)
-
-
-
-
- <p>The <code>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p>
-
-
- OCL2.0
- ownedSubsetting = ownedSpecialization->selectByKind(Subsetting)
-
-
-
-
- <p>The <code>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</code>.</p>
-
-
- OCL2.0
- ownedTyping = ownedGeneralization->selectByKind(FeatureTyping)
-
-
-
-
- <p>The <code>types</code> of a <code>Feature</code> are the union of the <code>types</code> of its <code>typings</code> and the <code>types</code> of the <code>Features</code> it subsets, with all redundant supertypes removed. If the <code>Feature</code> has <code>chainingFeatures</code>, then the union also includes the types of the last <code>chainingFeature</code>.</p>
-
-
- OCL2.0
- type =
- let types : OrderedSet(Types) = OrderedSet{self}->
- -- Note: The closure operation automatically handles circular relationships.
- closure(typingFeatures()).typing.type->asOrderedSet() in
- types->reject(t1 | types->exist(t2 | t2 <> t1 and t2.specializes(t1)))
-
-
-
-
- <p>If a <code>Feature</code> has a <code>multiplicity</code>, then the <code>featuringTypes</code> of the <code>multiplicity</code> must be the same as those of the <code>Feature</code> itself.</p>
-
-
- OCL2.0
- multiplicity <> null implies multiplicity.featuringType = featuringType
-
-
-
-
- <p>A <code>Feature</code> must directly or indirectly specialize <code><em>Base::things</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::things')
-
-
-
-
- <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p>
-
-
- English
- chainingFeature->excludes(self)
-
-
-
-
- <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p>
-
-
- OCL2.0
- ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining)
-
-
-
-
- <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</code>.</p>
-
-
- OCL2.0
- chainingFeature = ownedFeatureChaining.chainingFeature
-
-
-
-
- A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one.
-
-
- OCL2.0
- chainingFeature->size() <> 1
-
-
-
-
- <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is not empty, then, for each direct supertype of its <code>owningType</code>, it must redefine the <code>endFeature</code> at the same position, if any.</p>
-
-
- OCL2.0
- isEnd and owningType <> null implies
- let i : Integer =
- owningType.ownedEndFeature->indexOf(self) in
- owningType.ownedSpecialization.general->
- forAll(supertype |
- supertype.endFeature->size() >= i implies
- redefines(supertype.endFeature->at(i))
-
-
-
-
- <p>If a <code>Feature</code> has a <code>FeatureValue</code>, no <code>ownedSpecializations</code> that are not implied, and is not directed, then it must specialize the <code>result</code> of the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code>.</p>
-
-
- OCL2.0
- direction = null and
-ownedSpecializations->forAll(isImplied) implies
- ownedMembership->
- selectByKind(FeatureValue)->
- forAll(fv | specializes(fv.value.result))
-
-
-
-
- <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is an <code>Association</code> or a <code>Connector</code>, then it must directly or indirectly specialize <code><em>Links::Link::participant</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isEnd and owningType <> null and
-(owningType.oclIsKindOf(Association) or
- owningType.oclIsKindOf(Connector)) implies
- specializesFromLibrary('Links::Link::participant')
-
-
-
-
- <p>A composite <code>Feature</code> typed by a <code>Structure</code>, and whose <code>ownedType</code> is a <code>Structure</code> or another <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize <em><code>Objects::Object::subobjects</code></em>.
-
-
- OCL2.0
- isComposite and
-ownedTyping.type->includes(oclIsKindOf(Structure)) and
-owningType <> null and
-(owningType.oclIsKindOf(Structure) or
- owningType.type->includes(oclIsKindOf(Structure))) implies
- specializesFromLibrary('Occurrence::Occurrence::suboccurrences')
-
-
-
-
- <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Class</code>, then it must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- ownedTyping.type->exists(selectByKind(Class)) implies
- specializesFromLibrary('Occurrences::occurrences')
-
-
-
-
- <p>A composite <code>Feature</code> that has an <code>ownedTyping</code> relationship to a <code>Class</code>, and whose <code>ownedType</code> is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>.
-
-
- OCL2.0
- isComposite and
-ownedTyping.type->includes(oclIsKindOf(Class)) and
-owningType <> null and
-(owningType.oclIsKindOf(Class) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKindOf(Class))) implies
- specializesFromLibrary('Occurrence::Occurrence::suboccurrences')
-
-
-
-
- <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>DataType</code>, then it must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- ownedTyping.type->exists(selectByKind(DataType)) implies
- specializesFromLibrary('Base::dataValues')
-
-
-
-
- <p>If a <code>Feature</code> is the first <code>ownedFeature</code> of a first or second <code>FlowEnd</code>, then it must directly or indirectly specialize either <em><code>Transfers::Transfer::source::sourceOutput</code></em> or <em><code>Transfers::Transfer::target::targetInput</code></em>, respectively, from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- owningType <> null and
-owningType.oclIsKindOf(FlowEnd) and
-owningType.ownedFeature->at(1) = self implies
- let flowType : Type = owningType.owningType in
- flowType <> null implies
- let i : Integer =
- flowType.ownedFeature.indexOf(owningType) in
- (i = 1 implies
- redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and
- (i = 2 implies
- redefinesFromLibrary('Transfers::Transfer::source::targetInput'))
-
-
-
-
-
- <p>If a <code>Feature</code> is a <code>parameter</code> of an <code>owningType</code> that is a <code>Behavior</code> or <code>Step</code>, but <em>not</em>
-</p>
-<ul>
- <li>A <code>result</code> <code>parameter</code></li>
- <li>A <code>parameter</code> of an <code>InvocationExpression</code>, with at least one non-implied <code>ownedRedefinition</code></li>
-</ul>
-<p>then, for each direct supertype of its <code>owningType</code> that is also a <code>Behavior</code> or <code>Step</code>, it must redefine the <code>parameter</code> at the same position, if any.</p>
-
-
- OCL2.0
- owningType <> null and
-not owningFeatureMembership.
- oclIsKindOf(ReturnParameterMembership) and
-(owningType.oclIsKindOf(Behavior) or
- owningType.oclIsKindOf(Step) and
- (owningType.oclIsKindOf(InvocationExpression) implies
- not ownedRedefinition->exists(not isImplied))
-implies
- let i : Integer =
- owningType.ownedFeature->select(direction <> null)->
- reject(owningFeatureMembership.
- oclIsKindOf(ReturnParameterMembership))->
- indexOf(self) in
- owningType.ownedSpecialization.general->
- forAll(supertype |
- let ownedParameters : Sequence(Feature) =
- supertype.ownedFeature->select(direction <> null)->
- reject(owningFeatureMembership.
- oclIsKindOf(ReturnParameterMembership)) in
- ownedParameters->size() >= i implies
- redefines(ownedParameters->at(i))
-
-
-
-
- <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Structure</code>, then it must directly or indirectly specialize <code><em>Objects::objects</em></code> from the Kernel Semantics Library.</p>
-
-
- OCL2.0
- ownedTyping.type->exists(selectByKind(Structure)) implies
- specializesFromLibary('Objects::objects')
-
-
-
-
- <p>If a <code>Feature</code> is a <code>result</code> <code>parameter</code> of an <code>owningType</code> that is a <code>Function</code> or <code>Expression</code>, then, for each direct supertype of its <code>owningType</code> that is also a <code>Function</code> or <code>Expression</code>, it must redefine the <code>result</code> <code>parameter</code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(Function) and
- self = owningType.oclAsType(Function).result or
- owningType.oclIsKindOf(Expression) and
- self = owningType.oclAsType(Expression).result) implies
- owningType.ownedSpecialization.general->
- select(oclIsKindOf(Function) or oclIsKindOf(Expression))->
- forAll(supertype |
- redefines(
- if superType.oclIsKindOf(Function) then
- superType.oclAsType(Function).result
- else
- superType.oclAsType(Expression).result
- endif)
-
-
-
-
- <p>The <code>ownedFeatureInvertings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>FeatureInvertings</code>.</p>
-
-
- OCL2.0
- ownedFeatureInverting = ownedRelationship->selectByKind(FeatureInverting)->
- select(fi | fi.featureInverted = self)
-
-
-
-
- The <code>featuringTypes</code> of a <code>Feature</code> include the <code>featuringTypes</code> of all the <code>typeFeaturings</code> of the <code>Feature</code>. If the <code>Feature</code> has <code>chainingFeatures</code>, then its <code>featuringTypes</code> also include the <code>featuringTypes</code> of the first <code>chainingFeature</code>.
-
-
- OCL2.0
- featuringType =
- let featuringTypes : OrderedSet(Type) =
- featuring.type->asOrderedSet() in
- if chainingFeature->isEmpty() then featuringTypes
- else
- featuringTypes->
- union(chainingFeature->first().featuringType)->
- asOrderedSet()
- endif
-
-
-
-
- <p>The <code>ownedReferenceSubsetting</code> of a <code>Feature</code> is the first
-<code>ownedSubsetting</code> that is a <code>ReferenceSubsetting</code> (if any).</p>
-
-
- OCL2.0
- ownedReferenceSubsetting =
- let referenceSubsettings : OrderedSet(ReferenceSubsetting) =
- ownedSubsetting->selectByKind(ReferenceSubsetting) in
- if referenceSubsettings->isEmpty() then null
- else referenceSubsettings->first() endif
-
-
-
-
- <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is an <code>ReferenceSubsetting</code>.</p>
-
-
- OCL2.0
- ownedSubsetting->selectByKind(ReferenceSubsetting)->size() <= 1
-
-
-
-
- <p>Each <code>chainingFeature</code> (other than the first) must be featured within the previous <code>chainingFeature</code>.</p>
-
-
- OCL2.0
- Sequence{2..chainingFeature->size()}->forAll(i |
- chainingFeature->at(i).isFeaturedWithin(chainingFeature->at(i-1)))
-
-
-
-
-
- <p>If a <code>Feature</code> has <code>isPortion = true</code>, an <code>ownedTyping </code> relationship to a <code>Class</code>, and an <code>owningType</code> that is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::portions</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isPortion and
-ownedTyping.type->includes(oclIsKindOf(Class)) and
-owningType <> null and
-(owningType.oclIsKindOf(Class) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKindOf(Class))) implies
- specializesFromLibrary('Occurrence::Occurrence::portions')
-
-
-
-
- <p>If a <code>Feature</code> has no <code>chainingFeatures</code>, then its <code>featureTarget</code> is the <code>Feature</code> itself, otherwise the <code>featureTarget</code> is the last of the <code>chainingFeatures</code>.</p>
-
-
- OCL2.0
- featureTarget = if chainingFeature->isEmpty() then self else chainingFeature->last() endif
-
-
-
-
- <p>The <code>ownedCrossSubsetting</code> of a <code>Feature</code> is the <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>, if any.</p>
-
-
- OCL2.0
- ownedCrossSubsetting =
- let crossSubsettings: Sequence(CrossSubsetting) =
- ownedSubsetting->selectByKind(CrossSubsetting) in
- if crossSubsettings->isEmpty() then null
- else crossSubsettings->first()
- endif
-
-
-
-
- <p>If a <code>Feature</code> has <code>isEnd = true</code>, then it must have multiplicity <code>1..1</code>.</p>
-
-
- OCL2.0
- isEnd implies
- multiplicities().allSuperTypes()->flatten()->
- selectByKind(MultiplicityRange)->exists(hasBounds(1,1))
-
-
-
-
- <p>The <code>crossFeature</code> of a <code>Feature</code> must have the same <code>types</code> as the <code>Feature</code>.</p>
-
-
- OCL2.0
- crossFeature <> null implies
- crossFeature.type->asSet() = type->asSet()
-
-
-
-
- <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>.</p>
-
-
- OCL2.0
- ownedSubsetting->selectByKind(CrossSubsetting)->size() <= 1
-
-
-
-
- <p>The <code>crossFeature</code> of a <code>Feature</code> is the second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of the <code>Feature</code>, if any.</p>
-
-
- OCL2.0
- crossFeature =
- if ownedCrossSubsetting = null then null
- else
- let chainingFeatures: Sequence(Feature) =
- ownedCrossSubsetting.crossedFeature.chainingFeature in
- if chainingFeatures->size() < 2 then null
- else chainingFeatures->at(2)
- endif
-
-
-
-
- <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must directly or indirectly specialize the <code>types</code> of its owning end <code>Feature</code>.</p>
-
-
- OCL2.0
- isOwnedCrossFeature() implies
- owner.oclAsType(Feature).type->forAll(t | self.specializes(t))
-
-
-
-
- <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then, for any end <code>Feature</code> that is redefined by the owning end <code>Feature</code> of this <code>Feature</code>, this <code>Feature</code> must subset the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p>
-
-
- OCL2.0
- isOwnedCrossFeature() implies
- ownedSubsetting.subsettedFeature->includesAll(
- owner.oclAsType(Feature).ownedRedefinition.redefinedFeature->
- select(crossFeature <> null).crossFeature)
-
-
-
-
- <p>If this <code>Feature</code> has a <code>crossFeature</code>, then, for any <code>Feature</code> that is redefined by this <code>Feature</code>, the <code>crossFeature</code> must specialize the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p>
-
-
- OCL2.0
- crossFeature <> null implies
- ownedRedefinition.redefinedFeature.crossFeature->
- forAll(f | f <> null implies crossFeature.specializes(f))
-
-
-
-
- <p>If this <code>Feature</code> has <code>isEnd = true</code> and <code>ownedCrossFeature</code> returns a non-null value, then the <code>crossFeature</code> of the <code>Feature</code> must be the <code>Feature</code> returned from <code>ownedCrossFeature</code> (which implies that this <code>Feature</code> has an appropriate <code>ownedCrossSubsetting</code> to realize this).</p>
-
-
- OCL2.0
- ownedCrossFeature() <> null implies
- crossFeature = ownedCrossFeature()
-
-
-
-
- <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must have <code>featuringTypes</code> consistent with the crossing from other end <code>Features</code> of the <code>owningType</code> of its end <code>Feature</code>.</p>
-
-
- OCL2.0
- isOwnedCrossFeature() implies
- let otherEnds : OrderedSet(Feature) =
- owner.oclAsType(Feature).owningType.endFeature->excluding(self) in
- if (otherEnds->size() = 1) then
- featuringType = otherEnds->first().type
- else
- featuringType->size() = 1 and
- featuringType->first().isCartesianProduct() and
- featuringType->first().asCartesianProduct() = otherEnds.type and
- featuringType->first().allSupertypes()->includesAll(
- owner.oclAsType(Feature).ownedRedefinition.redefinedFeature->
- select(crossFeature() <> null).crossFeature().featuringType)
- endif
-
-
-
-
- OCL2.0
- isPortion implies not isVariable
-
-
-
-
- <p>A <code>Feature</code> with <code>isEnd = true</code> must have no direction.</p>
-
-
- OCL2.0
- isEnd implied direction = null
-
-
-
-
- <p>If a <code>Feature</code> is owned via a <code>FeatureMembership</code>, then it must have a <code>featuringType</code> for which the operation <code>isFeaturingType</code> returns true.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null implies
- featuringTypes->exists(t | isFeaturingType(t))
-
-
-
-
- <p>A <code>Feature</code> with <code>isConstant = true</code> must have <code>isVariable = true</code>.
-
-
- OCL2.0
- isConstant implies isVariable
-
-
-
-
- <p>A <code>Feature</code> with <code>isVariable = true</code> must have an <code>owningType</code> that directly or indirectly specializes the <code>Class</code> <em><code>Occurrences::Occurrence</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isVariable implies
- owningType <> null and
- owningType.specializes('Occurrences::Occurrence')
-
-
-
-
- <p>A <code>Feature</code> with <code>isEnd = true</code> must have all of <code>isDerived = false</code>, <code>isAbstract = false</code>, <code>isComposite = false</code>, and <code>isPortion = false</code>.</p>
-
-
- OCL2.0
- isEnd implies not (isDerived or isAbstract or isComposite or isPortion)
-
-
-
-
- <p>A <code>Feature</code> with <code>isEnd = true</code> and <code>isVariable = true</code> must have <code>isConstant = true</code>.</p>
-
-
- OCL2.0
- isEnd and isVariable implies isConstant
-
-
-
-
-
- <p>The <code>Type</code> that is the <code>owningType</code> of the <code>owningFeatureMembership</code> of this <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>Whether or not values for this <code>Feature</code> must have no duplicates or not.</p>
-
-
-
-
-
-
-
- <p>Whether an order exists for the values of this <code>Feature</code> or not.</p>
-
-
-
-
-
-
- <p><code>Types</code> that restrict the values of this <code>Feature</code>, such that the values must be instances of all the <code>types</code>. The types of a <code>Feature</code> are derived from its <code>typings</code> and the <code>types</code> of its <code>subsettings</code>. If the <code>Feature</code> is chained, then the <code>types</code> of the last <code>Feature</code> in the chain are also <code>types</code> of the chained <code>Feature</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedSubsettings</code> of this <code>Feature</code> that are <code>Redefinitions</code>, for which the <code>Feature</code> is the <code>redefiningFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>Subsettings</code>, for which the <code>Feature</code> is the <code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>FeatureMembership</code> that owns this <code>Feature</code> as an <code>ownedMemberFeature</code>, determining its <code>owningType</code>.</p>
-
-
-
-
-
-
- <p>Whether the <code>Feature</code> is a composite <code>feature</code> of its <code>featuringType</code>. If so, the values of the <code>Feature</code> cannot exist after its featuring instance no longer does and cannot be values of another composite feature that is not on the same featuring instance.</p>
-
-
-
-
-
-
-
- <p>Whether or not this <code>Feature</code> is an end <code>Feature</code>. An end <code>Feature</code> always has multiplicity 1, mapping each of its domain instances to a single co-domain instance. However, it may have a <code>crossFeature</code>, in which case values of the <code>crossFeature</code> must be the same as those found by navigation across instances of the <code>owningType</code> from values of other end <code>Features</code> to values of this Feature. If the <code>owningType</code> has <em>n</em> end <code>Features</code>, then the multiplicity, ordering, and uniqueness declared for the <code>crossFeature</code> of any one of these end <code>Features</code> constrains the cardinality, ordering, and uniqueness of the collection of values of that <code>Feature</code> reached by navigation when the values of the other <em>n-1</em> end <code>Features</code> are held fixed.</p>
-
-
-
-
-
-
-
- <p>The <code>Type</code> that is related to this <code>Feature</code> by an <code>EndFeatureMembership</code> in which the <code>Feature</code> is an <code>ownedMemberFeature</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>FeatureTypings</code>, for which the <code>Feature</code> is the <code>typedFeature</code>.</p>
-
-
-
-
-
-
- <p><code>Types</code> that feature this <code>Feature</code>, such that any instance in the domain of the <code>Feature</code> must be classified by all of these <code>Types</code>, including at least all the <code>featuringTypes</code> of its <code>typeFeaturings</code>. If the <code>Feature</code> is chained, then the <code>featuringTypes</code> of the first <code>Feature</code> in the chain are also <code>featuringTypes</code> of the chained <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>TypeFeaturings</code> and for which the <code>Feature</code> is the <code>featureOfType</code>.</p>
-
-
-
-
-
-
- <p>Whether the values of this <code>Feature</code> can always be computed from the values of other <code>Features</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that are chained together to determine the values of this <code>Feature</code>, derived from the <code>chainingFeatures</code> of the <code>ownedFeatureChainings</code> of this <code>Feature</code>, in the same order. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with the values of the first <code>Feature</code> (for each instance of the domain of the original <code>Feature</code>), then using each of those as domain instances to find the values of the second <code>Feature</code> in chainingFeatures, and so on, to values of the last <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureInvertings</code> and for which the <code>Feature</code> is the <code>featureInverted</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureChainings</code>, for which the <code>Feature</code> will be the <code>featureChained</code>.</p>
-
-
-
-
-
-
- <p>Whether the values of this <code>Feature</code> are contained in the space and time of instances of the domain of the <code>Feature</code> and represent the same thing as those instances.</p>
-
-
-
-
-
-
-
- <p>Whether the value of this <code>Feature</code> might vary over time. That is, whether the <code>Feature</code> may have a different value for each <em><code>snapshot</code></em> of an <code>owningType</code> that is an <em><code>Occurrence</code></em>.</p>
-
-
-
-
-
-
- <p>If <code>isVariable</code> is true, then whether the value of this <code>Feature</code> nevertheless does not change over all <code><em>snapshots</em></code> of its <code>owningType</code>.</p>
-
-
-
-
-
-
-
- <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>ReferenceSubsetting</code>, for which the <code>Feature</code> is the <code>referencingFeature</code>.</p>
-
-
-
-
-
-
- <p>The last of the <code>chainingFeatures</code> of this <code>Feature</code>, if it has any. Otherwise, this <code>Feature</code> itself.</p>
-
-
-
-
-
-
- <p>The second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of this <code>Feature</code>, if it has one. Semantically, the values of the <code>crossFeature</code> of an end <code>Feature</code> must include all values of the end <code>Feature</code> obtained when navigating from values of the other end <code>Features</code> of the same <code>owningType</code>.
-</p>
-
-
-
-
-
-
- <p>Indicates how values of this <code>Feature</code> are determined or used (as specified for the <code>FeatureDirectionKind</code>).</p>
-
-
-
-
-
-
-
- <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>CrossSubsetting}, for which the <code>Feature</code> is the <code>crossingFeature</code>.</p>
-
-
-
-
-
-
- <p>Return the <code>directionOf</code> this <code>Feature</code> relative to the given <code>type</code>.</p>
-
-
-
- OCL2.0
- type.directionOf(self)
-
-
-
-
-
-
-
-
-
-
- <p>If a <code>Feature</code> has no <code>declaredShortName</code> or <code>declaredName</code>, then its effective <code>shortName</code> is given by the effective <code>shortName</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p>
-
-
-
- OCL2.0
- if declaredShortName <> null or declaredName <> null then
- declaredShortName
-else
- let namingFeature : Feature = namingFeature() in
- if namingFeature = null then
- null
- else
- namingFeature.effectiveShortName()
- endif
-endif
-
-
-
-
-
-
-
-
-
-
- <p>If a <code>Feature</code> has no <code>declaredName</code> or <code>declaredShortName</code>
-, then its effective <code>name</code> is given by the effective <code>name</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p>
-
-
-
- OCL2.0
- if declaredShortName <> null or declaredName <> null then
- declaredName
-else
- let namingFeature : Feature = namingFeature() in
- if namingFeature = null then
- null
- else
- namingFeature.effectiveName()
- endif
-endif
-
-
-
-
-
-
-
-
-
-
- <p>By default, the naming <code>Feature</code> of a <code>Feature</code> is given by its first <code>redefinedFeature</code> of its first <code>ownedRedefinition</code>, if any.</p>
-
-
-
- OCL2.0
- if ownedRedefinition->isEmpty() then
- null
-else
- ownedRedefinition->at(1).redefinedFeature
-endif
-
-
-
-
-
-
-
-
-
-
- OCL2.0
- let supertypes : OrderedSet(Type) =
- self.oclAsType(Type).supertypes(excludeImplied) in
-if featureTarget = self then supertypes
-else supertypes->append(featureTarget)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> <em>directly</em> redefines the given <code>redefinedFeature</code>.</p>
-
-
-
- OCL2.0
- ownedRedefinition.redefinedFeature->includes(redefinedFeature)
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> <em>directly</em> redefines the named library <code>Feature</code>. <code>libraryFeatureName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Feature</code> in global scope.</p>
-
-
-
- OCL2.0
- let mem: Membership = resolveGlobal(libraryFeatureName) in
-mem <> null and mem.memberElement.oclIsKindOf(Feature) and
-redefines(mem.memberElement.oclAsType(Feature))
-
-
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> directly or indirectly specializes a <code>Feature</code> whose last two <code>chainingFeatures</code> are the given <code>Features</code> <code>first</code> and <code>second</code>.</p>
-
-
-
- OCL2.0
- allSuperTypes()->selectAsKind(Feature)->
- exists(f | let n: Integer = f.chainingFeature->size() in
- n >= 2 and
- f.chainingFeature->at(n-1) = first and
- f.chainingFeature->at(n) = second)
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Feature</code> is compatible with an <code>otherType</code> if it either directly or indirectly specializes the <code>otherType</code> or if the <code>otherType</code> is also a <code>Feature</code> and all of the following are true.</p>
-<ol>
- <li>Neither this <code>Feature</code> or the <code>otherType</code> have any <code>ownedFeatures</code>.</li>
- <li>This <code>Feature</code> directly or indirectly redefines a <code>Feature</code> that is also directly or indirectly redefined by the <code>otherType</code>.</li>
- <li>This <code>Feature</code> can access the <code>otherType</code>.
-</li></ol>
-
-
-
- OCL2.0
- specializes(otherType) or
- supertype.oclIsKindOf(Feature) and
- ownedFeature->isEmpty() and
- otherType.ownedFeature->isEmpty() and
- ownedRedefinitions.allRedefinedFeatures()->exists(f |
- otherType.oclAsType(Feature).allRedefinedFeatures()->includes(f)) and
- canAccess(otherType.oclAsType(Feature))
-
-
-
-
-
-
-
-
-
- <p>Return the <code>Features</code> used to determine the <code>types</code> of this <code>Feature</code> (other than this <code>Feature</code> itself). If this <code>Feature</code> is <em>not</em> conjugated, then the <code>typingFeatures</code> consist of all subsetted <code>Features</code>, <em>except</em> from <code>CrossSubsetting</code>, and the last <code>chainingFeature</code> (if any). If this <code>Feature</code> <em>is</em> conjugated, then the <code>typingFeatures</code> are only its <code>originalType</code> (if the <code>originalType</code> is a <code>Feature</code>).</p>
-
-<p><strong>Note.</strong> <code>CrossSubsetting</code> is excluded from the determination of the <code>type</code> of a <code>Feature</code> in order to avoid circularity in the construction of implied <code>CrossSubsetting</code> relationships. The <code>validateFeatureCrossFeatureType</code> requires that the <code>crossFeature</code> of a <code>Feature</code> have the same <code>type</code> as the <code>Feature</code>.</p>
-
-
-
-
- OCL2.0
- if not isConjugated then
- let subsettedFeatures : OrderedSet(Feature) =
- subsetting->reject(s | s.oclIsKindOf(CrossSubsetting)).subsettedFeatures in
- if chainingFeature->isEmpty() or
- subsettedFeature->includes(chainingFeature->last())
- then subsettedFeatures
- else subsettedFeatures->append(chainingFeature->last())
- endif
-else if conjugator.originalType.oclIsKindOf(Feature) then
- OrderedSet{conjugator.originalType.oclAsType(Feature)}
-else OrderedSet{}
-endif endif
-
-
-
-
-
-
-
-
-
- <p>If <code>isCartesianProduct</code> is true, then return the list of <code>Types</code> whose Cartesian product can be represented by this <code>Feature</code>. (If <code>isCartesianProduct</code> is not true, the operation will still return a valid value, it will just not represent anything useful.)</p>
-
-
-
- OCL2.0
- featuringType->select(t | t.owner <> self)->
- union(featuringType->select(t | t.owner = self)->
- selectByKind(Feature).asCartesianProduct())->
- union(type)
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> can be used to represent a Cartesian product of <code>Types</code>.</p>
-
-
-
- OCL2.0
- type->size() = 1 and
-featuringType.size() = 1 and
-(featuringType.first().owner = self implies
- featuringType.first().oclIsKindOf(Feature) and
- featuringType.first().oclAsType(Feature).isCartesianProduct())
-
-
-
-
-
-
-
-
- <p>Return whether this <code>Feature</code> is an owned cross <code>Feature</code> of an end <code>Feature</code>.</p>
-
-
-
- OCL2.0
- owningNamespace <> null and
-owningNamespace.oclIsKindOf(Feature) and
-owningNamespace.oclAsType(Feature).ownedCrossFeature() = self
-
-
-
-
-
-
-
-
- <p>If this <code>Feature</code> is an end <code>Feature</code> of its <code>owningType</code>, then return the first <code>ownedMember</code> of the <code>Feature</code> that is a <code>Feature</code>, but not a <code>Multiplicity</code> or a <code>MetadataFeature</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p>
-
-
-
- OCL2.0
- if not isEnd or owningType = null then null
-else
- let ownedMemberFeatures: Sequence(Feature) =
- ownedMember->selectByKind(Feature)->
- reject(oclIsKindOf(Multiplicity) or
- oclIsKindOf(MetadataFeature) or
- oclIsKindOf(FeatureValue))->
- reject(owningMembership.oclIsKindOf(FeatureMembership)) in
- if ownedMemberFeatures.isEmpty() then null
- else ownedMemberFeatures->first()
- endif
-
-
-
-
-
-
-
-
-
- <p>Return this <code>Feature</code> and all the <code>Features</code> that are directly or indirectly <code>Redefined</code> by this <code>Feature</code>.</p>
-
-
-
- OCL2.0
- ownedRedefinition.redefinedFeature->
- closure(ownedRedefinition.redefinedFeature)->
- asOrderedSet()->prepend(self)
-
-
-
-
-
-
-
-
-
-
- <p>Return if the <code>featuringTypes</code> of this <code>Feature</code> are compatible with the given <code>type</code>. If <code>type</code> is null, then check if this <code>Feature</code> is explicitly or implicitly featured by <em><code>Base::Anything</code></em>. If this <code>Feature</code> has <code>isVariable = true</code>, then also consider it to be featured within its <code>owningType</code>. If this <code>Feature</code> is a feature chain whose first <code>chainingFeature</code> has <code>isVariable = true</code>, then also consider it to be featured within the <code>owningType</code> of its first <code>chainingFeature</code>.</p>
-
-
-
- OCL2.0
- if type = null then
- featuringType->forAll(f | f = resolveGlobal('Base::Anything').memberElement)
-else
- featuringType->forAll(f | type.isCompatibleWith(f)) or
- isVariable and type.specializes(owningType) or
- chainingFeature->notEmpty() and chainingFeature->first().isVariable and
- type.specializes(chainingFeature->first().owningType)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Feature</code> can access another <code>feature</code> if the other <code>feature</code> is featured within one of the direct or indirect <code>featuringTypes</code> of this <code>Feature</code>.</p>
-
-
-
- OCL2.0
- let anythingType: Element =
- subsettingFeature.resolveGlobal('Base::Anything').memberElement in
-let allFeaturingTypes : Sequence(Type) =
- featuringTypes->closure(t |
- if not t.oclIsKindOf(Feature) then Sequence{}
- else
- let featuringTypes : OrderedSet(Type) = t.oclAsType(Feature).featuringType in
- if featuringTypes->isEmpty() then Sequence{anythingType}
- else featuringTypes
- endif
- endif) in
-allFeaturingTypes->exists(t | feature.isFeaturedWithin(t))
-
-
-
-
-
-
-
-
-
- <p>Return whether the given <code>type</code> must be a <code>featuringType</code> of this <code>Feature</code>. If this <code>Feature</code> has <code>isVariable = false</code>, then return true if the <code>type</code> is the <code>owningType</code> of the <code>Feature</code>. If <code>isVariable = true</code>, then return true if the <code>type</code> is a <code>Feature</code> representing the <em><code>snapshots</code></em> of the <code>owningType</code> of this <code>Feature</code>.</p>
-
-
-
- OCL2.0
- owningType <> null and
-if not isVariable then type = owningType
-else if owningType = resolveGlobal('Occurrences::Occurrence').memberElement then
- type = resolveGlobal('Occurrences::Occurrence::snapshots').memberElement
-else
- type.oclIsKindOf(Feature) and
- let feature : Feature = type.oclAsType(Feature) in
- feature.featuringType->includes(owningType) and
- feature.redefinesFromLibrary('Occurrences::Occurrence::snapshots')
-endif
-
-
-
-
-
-
-
-
-
-
-
- <p><code>FeatureTyping</code> is <code>Specialization</code> in which the <code>specific</code> <code>Type</code> is a <code>Feature</code>. This means the set of instances of the (specific) <code>typedFeature</code> is a subset of the set of instances of the (general) <code>type</code>. In the simplest case, the <code>type</code> is a <code>Classifier</code>, whereupon the <code>typedFeature</code> has values that are instances of the <code>Classifier</code>.</p>
-
-
-
-
-
- <p>The <code>Feature</code> that has a <code>type</code> determined by this <code>FeatureTyping</code>.</p>
-
-
-
-
-
-
- <p>The <code>Type</code> that is being applied by this <code>FeatureTyping</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</code>.</p>
-
-
-
-
-
-
-
- <p><code>Subsetting</code> is <code>Specialization</code> in which the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Features</code>. This means all values of the <code>subsettingFeature</code> (on instances of its domain, i.e., the intersection of its <code>featuringTypes</code>) are values of the <code>subsettedFeature</code> on instances of its domain. To support this the domain of the <code>subsettingFeature</code> must be the same or specialize (at least indirectly) the domain of the <code>subsettedFeature</code> (via <code>Specialization</code>), and the co-domain (intersection of the <code>types</code>) of the <code>subsettingFeature</code> must specialize the co-domain of the <code>subsettedFeature</code>.</p>
-
-
-
-
- <p>The <code>subsettedFeature</code> must be accessible by the <code>subsettingFeature</code>.</p>
-
-
- OCL2.0
- subsettingFeature.canAccess(subsettedFeature)
-
-
-
-
- <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isUnique = true</code>, then the <code>subsettingFeature</code> must have <code>isUnique = true</code>.</p>
-
-
- OCL2.0
- subsettedFeature.isUnique implies subsettingFeature.isUnique
-
-
-
-
- <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isConstant = true</code> and the <code>subsettingFeature</code> has <code>isVariable = true</code>, then the <code>subsettingFeature</code> must have <code>isConstant = true</code>.</p>
-
-
- OCL2.0
- subsettedFeature.isConstant and subsettingFeature.isVariable implies
- subsettingFeature.isConstant
-
-
-
-
-
-
- <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Features for which a certain Type is a <code>featuringType</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TypeFeaturing</code> is a <code>Featuring</code> <code>Relationship</code> in which the <code>featureOfType</code> is the <code>source</code> and the <code>featuringType</code> is the <code>target</code>.</p>
-
-
-
-
- <p>The <code>Feature</code> that is featured by the <code>featuringType</code>. It is the <code>source</code> of the <code>TypeFeaturing</code>.</p>
-
-
-
-
-
-
- <p>The <code>Type</code> that features the <code>featureOfType</code>. It is the <code>target</code> of the <code>TypeFeaturing</code>.</p>
-
-
-
-
-
-
- <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p>
-
-
-
-
-
-
-
-
- <p><code>EndFeatureMembership</code> is a <code>FeatureMembership</code> that requires its <code>memberFeature</code> be owned and have <code>isEnd = true</code>.</p>
-
-
-
-
- <p>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p>
-
-
- OCL2.0
- ownedMemberFeature.isEnd
-
-
-
-
-
-
-
-
-
-
- <p>Relationship for chainedFeatures.</p>
-
-
-
- <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p>
-
-
-
-
-
-
-
- <p><code>FeatureChaining</code> is a <code>Relationship</code> that makes its target <code>Feature</code> one of the <code>chainingFeatures</code> of its owning <code>Feature</code>.</p>
-
-
-
-
- <p>The <code>Feature</code> whose values partly determine values of <code>featureChained</code>, as described in <code>Feature::chainingFeature</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>Feature::chainingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>Features</code> that have a particular <code>chainingFeature</code> in their <code>Feature</code> chain, whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>chainingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureInverting</code> is a <code>Relationship</code> between <code>Features</code> asserting that their interpretations (sequences) are the reverse of each other, identified as <code>featureInverted</code> and <code>invertingFeature</code>. For example, a <code>Feature</code> identifying each person's parents is the inverse of a <code>Feature</code> identifying each person's children. A person identified as a parent of another will identify that other as one of their children.</p>
-
-
-
-
-
- <p>The <code>Feature</code> that is an inverse of the <code>invertingFeature</code>.</p>
-
-
-
-
-
-
- <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p>
-
-
-
-
-
-
- <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p>
-
-
-
-
-
-
-
-
- <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>ReferenceSubsetting</code> is a kind of <code>Subsetting</code> in which the <code>referencedFeature</code> is syntactically distinguished from other <code>Features</code> subsetted by the <code>referencingFeature</code>. <code>ReferenceSubsetting</code> has the same semantics as <code>Subsetting</code>, but the <code>referencedFeature</code> may have a special purpose relative to the <code>referencingFeature</code>. For instance, <code>ReferenceSubsetting</code> is used to identify the <code>relatedFeatures</code> of a <code>Connector</code>.</p>
-
-<p><code>ReferenceSubsetting</code> is always an <code>ownedRelationship</code> of its <code>referencingFeature</code>. A <code>Feature</code> can have at most one <code>ownedReferenceSubsetting</code>.</p>
-
-
-
-
-
- <p>The <code>Feature</code> that is referenced by the <code>referencingFeature</code> of this <code>ReferenceSubsetting</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</code>.</p>
-
-
- <p>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</code>.</p>
-
-
-
-
-
-
-
- <p><code>CrossSubsetting</code> is a kind of <code>Subsetting</code> for end <code>Features</code>, as identified by <code>crossingFeature</code>, to subset a chained <code>Feature</code>, identified by <code>crossedFeature.</code> It navigates to instances of the end <code>Feature</code>’s type from instances of other end <code>Feature</code> types on the same <code>owningType</code> (at least two end <code>Features</code> are required for any of them to have a <code>CrossSubsetting</code>).</p>
-
-<p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have a feature chain of exactly two <code>Features</code>. The second <code>Feature</code> in the chain is the <code>crossFeature</code> of the <code>crossingFeature</code> (end <code>Feature</code>), which has the same type as the <code>crossingFeature</code>. When the <code>owningType</code> of the <code>crossingFeature</code> has exactly two end <code>Features</code>, the first <code>Feature</code> in the chain of the <code>crossedFeature</code> is the other end <code>Feature</code>. The <code>crossFeature</code>’s <code>featuringType</code> in this case is the other end <code>Feature</code>. When the <code>owningType</code> has more than two end <code>Features</code>, the first <code>Feature</code> in the chain is a <code>Feature</code> that <code>CrossMultiplies</code> all the other end <code>Features</code>, which is also the <code>featuringType</code> of the <code>crossFeature</code>.</p>
-
-<p>A <code>crossFeature</code> must be owned by its <code>featureCrossing</code> (end <code>Feature</code>) when the <code>featureCrossing</code> <code>owningType</code> has more than two end <code>Features</code>. Otherwise, for exactly two end <code>Features</code>, the <code>crossFeatures</code> of each the ends can instead optionally be inherited by the other end from one of its <code>types</code> or a subsetted <code>Feature</code>.</p>
-
-
-
- <p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have exactly two <code>chainingFeatures</code>. If the <code>crossingFeature</code> of the <code>CrossSubsetting</code> is one of two end <code>Features</code>, then the first <code>chainingFeature</code> must be the other end <code>Feature</code>.</p>
-
-
- OCL2.0
- crossingFeature.isEnd and crossingFeature.owningType <> null implies
- let endFeatures: Sequence(Feature) = crossingFeature.owningType.endFeature in
- let chainingFeatures: Sequence(Feature) = crossedFeature.chainingFeature in
- chainingFeatures->size() = 2 and
- endFeatures->size() = 2 implies
- chainingFeatures->at(1) = endFeatures->excluding(crossingFeature)->at(1)
-
-
-
-
- <p>The <code>crossingFeature</code> of a <code>CrossSubsetting</code> must be an end <code>Feature</code> that is owned by a <code>Type</code> with at least two end <code>Features</code>.</p>
-
-
- OCL2.0
- crossingFeature.isEnd and
-crossingFeature.owningType<>null and
-crossingFeature.owningType.endFeature ->size() > 1
-
-
-
-
-
- <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p>
-
-
-
-
-
-
-
- <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- The Kernel layer completes the KerML metamodel.
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p>
-
-
-
- <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- redefinesFromLibrary('Transfers::Transfer::payload')
-
-
-
-
-
-
- <p>The ItemFlow that has a certain <code>itemType</code>.</p>
-
-
-
-
-
-
-
-
- <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p>
-
-
-
-
-
-
-
- <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p>
-
-
-
- <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Transfers::flowTransfersBefore')
-
-
-
-
-
-
-
-
- <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Flow</code> is a <code>Step</code> that represents the transfer of values from one <code>Feature</code> to another. <code>Flows</code> can take non-zero time to complete.</p>
-
-
-
-
- <p>A <code>Flow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::transfers</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Transfers::transfers')
-
-
-
-
- <p>The <code>payloadTypes</code> of a <code>Flow</code> are the <code>types</code> of the <code>payloadFeature</code> of the <code>Flow</code> (if any).</p>
-
-
- OCL2.0
- payloadType =
- if payloadFeature = null then Sequence{}
- else payloadFeature.type
- endif
-
-
-
-
- <p>The <code>sourceOutputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the first <code>connectorEnd</code> of the <code>Flow</code>.</p>
-
-
- OCL2.0
- sourceOutputFeature =
- if connectorEnd->isEmpty() or
- connectorEnd.ownedFeature->isEmpty()
- then null
- else connectorEnd.ownedFeature->first()
- endif
-
-
-
-
- <p>The <code>targetInputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the second <code>connectorEnd</code> of the <code>Flow</code>.</p>
-
-
- OCL2.0
- targetInputFeature =
- if connectorEnd->size() < 2 or
- connectorEnd->at(2).ownedFeature->isEmpty()
- then null
- else connectorEnd->at(2).ownedFeature->first()
- endif
-
-
-
-
- <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p>
-
-
- OCL2.0
- flowEnd = connectorEnd->selectByKind(FlowEnd)
-
-
-
-
- <p>The <code>payloadFeature</code> of a <code>Flow</code> is the single one of its <code>ownedFeatures</code> that is a <code>PayloadFeature</code>.</p>
-
-
- OCL2.0
- payloadFeature =
- let payloadFeatures : Sequence(PayloadFeature) =
- ownedFeature->selectByKind(PayloadFeature) in
- if payloadFeatures->isEmpty() then null
- else payloadFeatures->first()
- endif
-
-
-
-
- <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p>
-
-
- OCL2.0
- ownedFeature->selectByKind(PayloadFeature)->size() <= 1
-
-
-
-
- <p>A <code>Flow</code> with <code>ownedEndFeatures</code> must specialize the <code>Step</code> <code><em>Transfers::flowTransfers</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- ownedEndFeatures->notEmpty() implies
- specializesFromLibrary('Transfers::flowTransfers')
-
-
-
-
-
-
- <p>The type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that receives the values carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>target</code> of the <code>Flow</code>.</p>
-
-
-
-
-
-
- <p>The <code>Feature</code> that provides the items carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>source</code> of the <code>Flow</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p>
-
-
-
-
-
-
-
- <p>The <code>Interactions</code> that type this <code>Flow</code>. <code>Interactions</code> are both <code>Associations</code> and <code>Behaviors</code>, which can type <code>Connectors</code> and <code>Steps</code>, respectively.</p>
-
-
-
-
-
-
-
- <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p>
-
-
-
- <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</p>
-
-
- OCL2.0
- isEnd
-
-
-
-
- <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p>
-
-
- OCL2.0
- ownedFeature->size() = 1
-
-
-
-
- <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p>
-
-
- OCL2.0
- owningType <> null and owningType.oclIsKindOf(Flow)
-
-
-
-
-
-
-
-
- <p>A <code>LibraryPackage</code> is a <code>Package</code> that is the container for a model library. A <code>LibraryPackage</code> is itself a library <code>Element</code> as are all <code>Elements</code> that are directly or indirectly contained in it.</p>
-
-
-
-
-
- <p>Whether this <code>LibraryPackage</code> contains a standard library model. This should only be set to true for <code>LibraryPackages</code> in the standard Kernel Model Libraries or in normative model libraries for a language built on KerML.</p>
-
-
-
-
-
-
- <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</p>
-
-
-
- OCL2.0
- self
-
-
-
-
-
-
-
-
-
-
- <p><code>ElementFilterMembership</code> is a <code>Membership</code> between a <code>Namespace</code> and a model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code>, asserting that imported <code>members</code> of the <code>Namespace</code> should be filtered using the <code>condition</code> <code>Expression</code>. A general <code>Namespace</code> does not define any specific filtering behavior, but such behavior may be defined for various specialized kinds of <code>Namespaces</code>.</p>
-
-
-
-
- <p>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</p>
-
-
- OCL2.0
- condition.isModelLevelEvaluable
-
-
-
-
- <p>The <code>result</code> <code>parameter</code> of the <code>condition</code> <code>Expression</code> must directly or indirectly specialize <code><em>ScalarValues::Boolean</em></code>.</p>
-
-
- OCL2.0
- condition.result.specializesFromLibrary('ScalarValues::Boolean')
-
-
-
-
-
- <p>The model-level evaluable <code>Boolean</code>-valued <code>Expression</code> used to filter the imported <code>members</code> of the <code>membershipOwningNamespace</code> of this <code>ElementFilterMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Package</code> is a <code>Namespace</code> used to group <code>Elements</code>, without any instance-level semantics. It may have one or more model-level evaluable <code>filterCondition</code> <code>Expressions</code> used to filter its <code>importedMemberships</code>. Any imported <code>member</code> must meet all of the <code>filterConditions</code>.</p>
-
-
-
- <p>The <code>filterConditions</code> of a <code>Package</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p>
-
-
- OCL2.0
- filterCondition = ownedMembership->
- selectByKind(ElementFilterMembership).condition
-
-
-
-
-
- <p>The model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code> used to filter the <code>members</code> of this <code>Package</code>, which are owned by the <code>Package</code> are via <code>ElementFilterMemberships</code>.</p>
-
-
-
-
-
-
-
- <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p>
-
-
-
-
- OCL2.0
- self.oclAsType(Namespace).importedMemberships(excluded)->
- select(m | self.includeAsMember(m.memberElement))
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p>
-
-
-
- OCL2.0
- let metadataFeatures: Sequence(AnnotatingElement) =
- element.ownedAnnotation.annotatingElement->
- selectByKind(MetadataFeature) in
- self.filterCondition->forAll(cond |
- metadataFeatures->exists(elem |
- cond.checkCondition(elem)))
-
-
-
-
-
-
-
-
-
-
-
- <p>The ElementFilterMembership that owns the <code>condition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Class</code> is a <code>Classifier</code> of things (in the universe) that can be distinguished without regard to how they are related to other things (via <code>Features</code>). This means multiple things classified by the same <code>Class</code> can be distinguished, even when they are related other things in exactly the same way.</p>
-
-
-
-
- <p>A <code>Class</code> must directly or indirectly specialize the base <code>Class</code> <code><em>Occurrences::Occurrence</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Occurrences::Occurrence')
-
-
-
-
- <p>A <code>Class</code> must not specialize a <code>DataType</code> and it can only specialize an <code>Association</code> if it is also itself a kind of <code>Association</code> (such as an <code>AssociationStructure</code> or <code>Interaction</code>).</p>
-
-
- OCL2.0
- ownedSpecialization.general->
- forAll(not oclIsKindOf(DataType)) and
-not oclIsKindOf(Association) implies
- ownedSpecialization.general->
- forAll(not oclIsKindOf(Association))
-
-
-
-
-
-
-
-
- <p><code>LiteralBoolean</code> is a <code>LiteralExpression</code> that provides a <code><em>Boolean</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have type <code><em>Boolean</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalBooleanEvaluations')
-
-
-
-
-
- <p>The <code><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</code>.</p>
-
-
- <p>The Boolean value that is the result of evaluating this Expression.</p>
-
-
-
-
-
-
-
- <p>A <code>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</p>
-
-
-
-
- <p>A <code>LiteralExpression</code> is always model-level evaluable.</p>
-
-
- OCL2.0
- isModelLevelEvaluable = true
-
-
-
-
- <p>A <code>LiteralExpression</code> must directly or indirectly specialize the base <code>LiteralExpression</code> <code><em>Performances::literalEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalEvaluations')
-
-
-
-
-
- <p>A <code>LiteralExpression</code> is always model-level evaluable.</p>
-
-
-
- OCL2.0
- true
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The model-level value of a <code>LiteralExpression</code> is itself.</p>
-
-
-
- OCL2.0
- Sequence{self}
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>LiteralRational</code> is a <code>LiteralExpression</code> that provides a <code><em>Rational</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Rational</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalRationalEvaluations')
-
-
-
-
-
- <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p>
-
-
-
- <p>The Real value that is the result of evaluating this Expression.</p>
-
-
-
-
-
-
- <p>A <code>LiteralInfinity</code> is a <code>LiteralExpression</code> that provides the positive infinity value (<code>*</code>). It's <code>result</code> must have the type <code><em>Positive</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralInfinity</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalIntegerEvaluations')
-
-
-
-
-
-
- <p>A <code>LiteralInteger</code> is a <code>LiteralExpression</code> that provides an <code><em>Integer</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Integer</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalIntegerEvaluations')
-
-
-
-
-
- <p>The <code><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p>
-
-
- <p>The Integer value that is the result of evaluating this Expression.</p>
-
-
-
-
-
-
-
- <p>A <code>NullExpression</code> is an <code>Expression</code> that results in a null value.</p>
-
-
-
-
- <p>A <code>NullExpression</code> must directly or indirectly specialize the base <code>NullExpression</code> <code><em>Performances::nullEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::nullEvaluations')
-
-
-
-
-
- <p>A <code>NullExpression</code> is always model-level evaluable.</p>
-
-
-
- OCL2.0
- true
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p>
-
-
-
- OCL2.0
- Sequence{}
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>LiteralString</code> is a <code>LiteralExpression</code> that provides a <code><em>String</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>String</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralString</code> must directly or indirectly specialize <em><code>Performances::literalStringEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalStringEvaluations')
-
-
-
-
-
- <p>The String value that is the result of evaluating this Expression.</p>
-
-
- <p>The <code><em>String</em></code> value that is the result of evaluating this <code>LiteralString</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>InvocationExpression</code> is an <code>InstantiationExpression</code> whose <code>instantiatedType</code> must be a <code>Behavior</code> or a <code>Feature</code> typed by a single <code>Behavior</code> (such as a <code>Step</code>). Each of the input <code>parameters</code> of the <code>instantiatedType</code> are bound to the <code>result</code> of an <code>argument</code> <code>Expression</code>. If the <code>instantiatedType</code> is a <code>Function</code> or a <code>Feature</code> typed by a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> is the <code>result</code> of the invoked <code>Function</code>. Otherwise, the <code>result</code> is an instance of the <code>instantiatedType</code> (essentially like a behavioral <code>ConstructorExpression</code>).</p>
-
-
-
-
- <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>InvocationExpression</code> must own a <code>BindingConnector</code> between itself and its <code>result</code> parameter.</p>
-
-
- OCL2.0
- not instantiatedType.oclIsKindOf(Function) and
-not (instantiatedType.oclIsKindOf(Feature) and
- instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies
- ownedFeature.selectByKind(BindingConnector)->exists(
- relatedFeature->includes(self) and
- relatedFeature->includes(result))
-
-
-
-
- <p>An <code>InvocationExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- TBD
-
-
-
-
- <p>The <code>arguments</code> of an <code>InvocationExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of its <code>ownedFeatures</code>, in an order corresponding to the order of the <code>input</code> parameters of the <code>instantiatedType</code> that the <code>ownedFeatures</code> redefine.</p>
-
-
- OCL2.0
- instantiatedType.input->collect(inp |
- ownedFeatures->select(redefines(inp)).valuation->
- select(v | v <> null).value
-)
-
-
-
-
- <p>Each <code>input</code> parameter of an <code>InvocationExpression</code> must redefine exactly one <code>input</code> parameter of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- let parameters : OrderedSet(Feature) = instantiatedType.input in
-input->forAll(inp |
- inp.ownedRedefinition.redefinedFeature->
- intersection(parameters)->size() = 1)
-
-
-
-
- <p>Two different <code>ownedFeatures</code> of an <code>InvocationExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- let features : OrderedSet(Feature) = instantiatedType.feature in
-input->forAll(inp1 | input->forAll(inp2 |
- inp1 <> inp2 implies
- inp1.ownedRedefinition.redefinedFeature->
- intersection(inp2.ownedRedefinition.redefinedFeature)->
- intersection(features)->isEmpty()))
-
-
-
-
- <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> must specialize the <code>instantiatedType</code>.</p>
-
-
- OCL2.0
- not instantiatedType.oclIsKindOf(Function) and
-not (instantiatedType.oclIsKindOf(Feature) and
- instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies
- result.specializes(instantiatedType)
-
-
-
-
- <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p>
-
-
- OCL2.0
- specializes(instantiatedType)
-
-
-
-
- <p>The <code>instantiatedType</code> of an <code>InvocationExpression</code> must be either a <code>Behavior</code> or a <code>Feature</code> with a single <code>type</code>, which is a <code>Behavior</code>.</p>
-
-
- OCL2.0
- instantiatedType.oclIsKindOf(Behavior) or
-instantiatedType.oclIsKindOf(Feature) and
- instantiatedType.type->exists(oclIsKindOf(Behavior)) and
- instantiatedType.type->size(1)
-
-
-
-
- <p>Other than its <code>result</code>, all the <code>ownedFeatures</code> of an <code>InvocationExpression</code> must have <code>direction = in</code>.</p>
-
-
- OCL2.0
- ownedFeature->forAll(f |
- f <> result implies
- f.direction = FeatureDirectionKind::_'in')
-
-
-
-
-
- <p>An <code>InvocationExpression</code> is model-level evaluable if all its <code>argument</code> <code>Expressions</code> are model-level evaluable and its <code>function</code> is model-level evaluable.</p>
-
-
-
-
- OCL2.0
- argument->forAll(modelLevelEvaluable(visited)) and
- function.isModelLevelEvaluable
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Apply the <code>Function</code> that is the <code>type</code> of this <code>InvocationExpression</code> to the argument values resulting from evaluating each of the <code>argument</code> <code>Expressions</code> on the given <code>target</code>. If the application is not possible, then return an empty sequence.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</code>.</p>
-
-
-
- <p>The <code>referent</code> of a <code>FeatureReferenceExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p>
-
-
- OCL2.0
- referent =
- let nonParameterMemberships : Sequence(Membership) = ownedMembership->
- reject(oclIsKindOf(ParameterMembership)) in
- if nonParameterMemberships->isEmpty() or
- not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature)
- then null
- else nonParameterMemberships->first().memberElement.oclAsType(Feature)
- endif
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between the <code>referent</code> and <code>result</code> of the <code>FeatureReferenceExpression</code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(targetFeature) and
- b.relatedFeatures->includes(result))
-
-
-
-
- <p>The first <code>ownedMembership</code> of a <code>FeatureReferenceExpression</code> that is not a <code>ParameterMembership</code> must have a <code>Feature</code> as its <code>memberElement</code>.</p>
-
-
- OCL2.0
- let membership : Membership =
- ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in
-membership->notEmpty() and
-membership->at(1).memberElement.oclIsKindOf(Feature)
-
-
-
-
- <p>The <code>result</code> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</p>
-
-
- OCL2.0
- result.owningType() = self and result.specializes(referent)
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p>
-
-
- OCL2.0
- result.owningType = self
-
-
-
-
-
- <p>The <code>Feature</code> that is referenced by this <code>FeatureReferenceExpression</code>, which is its first non-<code>parameter</code> <code>member</code>.<p>
-
-
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> is model-level evaluable if it's <code>referent</code></p>
-
-<ul>
- <li>conforms to the self-reference feature <code><em>Anything::self</em></code>;</li>
- <li>is an <code>Expression</code> that is model-level evaluable;</li>
- <li>has an <code>owningType</code> that is a <code>Metaclass</code> or <code>MetadataFeature</code>; or</li>
- <li>has no <code>featuringTypes</code> and, if it has a <code>FeatureValue</code>, the <code>value</code> <code>Expression</code> is model-level evaluable.</li>
-</ul>
-
-
-
-
- OCL2.0
- referent.conformsTo('Anything::self') or
-visited->excludes(referent) and
-(referent.oclIsKindOf(Expression) and
- referent.oclAsType(Expression).modelLevelEvaluable(visited->including(referent)) or
-referent.owningType <> null and
- (referent.owningType.isOclKindOf(MetaClass) or
- referent.owningType.isOclKindOf(MetadataFeature)) or
-referent.featuringType->isEmpty() and
- (referent.valuation = null or
- referent.valuation.modelLevelEvaluable(visited->including(referent))))
-
-
-
-
-
-
-
-
-
-
-
-
- <p>First, determine a <code>value</code> <code>Expression</code> for the <code>referent</code>:</p>
-
-<ul>
- <li>If the <code>target</code> <code>Element</code> is a Type that has a <code>feature</code> that is the <code>referent</code> or (directly or indirectly) redefines it, then the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for that <code>feature</code> (if any).</li>
- <li>Else, if the <code>referent</code> has no <code>featuringTypes</code>, the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for the <code>referent</code> (if any).</li>
-</ul>
-
-<p>Then:</p>
-
-<ul>
- <li>If such a value <code>Expression</code> exists, return the result of evaluating that <code>Expression</code> on the <code>target</code>.</li>
- <li>Else, if the <code>referent</code> is not an <code>Expression</code>, return the <code>referent</code>.</li>
- <li>Else return the empty sequence.</li>
-</ul>
-
-
-
-
- OCL2.0
- if not target.oclIsKindOf(Type) then Sequence{}
-else
- let feature: Sequence(Feature) =
- target.oclAsType(Type).feature->select(f |
- f.ownedRedefinition.redefinedFeature->
- includes(referent)) in
- if feature->notEmpty() then
- feature.valuation.value.evaluate(target)
- else if referent.featuringType->isEmpty()
- then referent
- else Sequence{}
- endif endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SelectExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"select"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::select</code></em> from the Kernel Functions Library.</p>
-
-
-
- <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p>
-
-
- OCL2.0
- operator = 'select'
-
-
-
-
- <p>The <code>result</code> of a <code>SelectExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>SelectExpression</code>.</p>
-
-
- OCL2.0
- arguments->notEmpty() implies
- result.specializes(arguments->first().result)
-
-
-
-
-
-
-
-
-
-
- <p>An <code>OperatorExpression</code> is an <code>InvocationExpression</code> whose <code>function</code> is determined by resolving its <code>operator</code> in the context of one of the standard packages from the Kernel Function Library.</p>
-
-
-
-
- <p>An <code>operator</code> symbol that names a corresponding <code>Function</code> from one of the standard packages from the Kernel Function Library .</p>
-
-
-
-
-
- <p>The <code>instantiatedType</code> of an <code>OperatorExpression</code> is the resolution of it's <code>operator</code> from one of the packages <em><code>BaseFunctions</code></em>, <em><code>DataFunctions</code></em>, or <em><code>ControlFunctions</code></em> from the Kernel Function Library.</p>
-
-
-
- OCL2.0
- let libFunctions : Sequence(Element) =
- Sequence{'BaseFunctions', 'DataFunctions', 'ControlFunctions'}->
- collect(ns | resolveGlobal(ns + "::'" + operator + "'").
- memberElement) in
-if libFunctions->isEmpty() then null
-else libFunctions->first().oclAsType(Type)
-endif
-
-
-
-
-
-
-
- <p>A <code>CollectExpression</code> is an <code>OperatorExpression</code> whose <code>operator</code> is <code>"collect"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::collect</code></em> from the Kernel Functions Library.</p>
-
-
-
- <p>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p>
-
-
- OCL2.0
- operator = 'collect'
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureChainExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"."</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::'.'</code></em> from the Kernel Functions Library. It evaluates to the result of chaining the <code>result</code> <code>Feature</code> of its single <code>argument</code> <code>Expression</code> with its <code>targetFeature</code>.</p>
-
-
-
- <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine the <code>Feature</code> <code><em>ControlFunctions::'.'::source::target</em></code> from the Kernel Functions Library.</p>
-
-
- OCL2.0
- let sourceParameter : Feature = sourceTargetFeature() in
-sourceTargetFeature <> null and
-sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine its <code>targetFeature</code>.</p>
-
-
- OCL2.0
- let sourceParameter : Feature = sourceTargetFeature() in
-sourceTargetFeature <> null and
-sourceTargetFeature.redefines(targetFeature)
-
-
-
-
- <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p>
-
-
- OCL2.0
- targetFeature =
- let nonParameterMemberships : Sequence(Membership) = ownedMembership->
- reject(oclIsKindOf(ParameterMembership)) in
- if nonParameterMemberships->isEmpty() or
- not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature)
- then null
- else nonParameterMemberships->first().memberElement.oclAsType(Feature)
- endif
-
-
-
-
- <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> must be featured within the <code>result</code> parameter of the <code>argument</code> <code>Expression</code> of the <code>FeatureChainExpression</code>.</p>
-
-
-
-
- OCL2.0
- argument->notEmpty() implies
- targetFeature.isFeaturedWithin(argument->first().result)
-
-
-
-
- <p>The <code>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</code>.</p>
-
-
- OCL2.0
- operator = '.'
-
-
-
-
- <p>The <code>result</code> parameter of a <code>FeatureChainExpression</code> must specialize the feature chain of the <code>FeatureChainExpression</code>.</p>
-
-
- OCL2.0
- let inputParameters : Sequence(Feature) =
- ownedFeatures->select(direction = _'in') in
-let sourceTargetFeature : Feature =
- owningExpression.sourceTargetFeature() in
-sourceTargetFeature <> null and
-result.subsetsChain(inputParameters->first(), sourceTargetFeature) and
-result.owningType = self
-
-
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p>
-
-
-
-
-
-
- <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p>
-
-
-
- OCL2.0
- let inputParameters : Feature = ownedFeatures->
- select(direction = _'in') in
-if inputParameters->isEmpty() or
- inputParameters->first().ownedFeature->isEmpty()
-then null
-else inputParameters->first().ownedFeature->first()
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>MetadataAccessExpression</code> is an <code>Expression</code> whose <code>result</code> is a sequence of instances of <code>Metaclasses</code> representing all the <code>MetadataFeature</code> annotations of the <code>referencedElement</code>. In addition, the sequence includes an instance of the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code>, with values for all the abstract syntax properties of the <code>referencedElement</code>.</p>
-
-
-
- <p>A <code>MetadataAccessExpression</code> must directly or indirectly specialize the base <code>MetadataAccessExpression</code> <code><em>Performances::metadataAccessEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::metadataAccessEvaluations')
-
-
-
-
- <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p>
-
-
- OCL2.0
- ownedMembership->exists(not oclIsKindOf(FeatureMembership))
-
-
-
-
- <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p>
-
-
- OCL2.0
- referencedElement =
- let elements : Sequence(Element) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement in
- if elements->isEmpty() then null
- else elements->first()
- endif
-
-
-
-
-
- <p>The <code>Element</code> whose metadata is being accessed.</p>
-
-
-
-
-
-
- <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p>
-
-
-
- OCL2.0
- true
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>ownedElements</code> of the <code>referencedElement</code> that are <code>MetadataFeatures</code> and have the <code>referencedElement</code> as an <code>annotatedElement</code>, plus a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the values of the MOF properties of the <code>referencedElement</code>.</p>
-
-
-
- OCL2.0
- referencedElement.ownedElement->
- select(oclIsKindOf(MetadataFeature)
- and annotatedElement->includes(referencedElement))->
- including(metaclassFeature())
-
-
-
-
-
-
-
-
-
-
- <p>Return a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the MOF properties of the <code>referencedElement</code>.</p>
-
-
-
-
-
-
- <p>An <code>IndexExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"#"</code>, which resolves to the <code>Function</code> <em><code>BasicFunctions::'#'</code></em> from the Kernel Functions Library.</p>
-
-
-
- <p>The <code>result</code> of an <code>IndexExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>IndexExpression</code>, unless that <code>result</code> already directly or indirectly specializes the <code>DataType</code> <em><code>Collections::Array</code></em> from the Kernel Data Type Library.</p>
-
-
- OCL2.0
- arguments->notEmpty() and
-not arguments->first().result.specializesFromLibrary('Collections::Array') implies
- result.specializes(arguments->first().result)
-
-
-
-
- <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p>
-
-
- OCL2.0
- operator = '#'
-
-
-
-
-
-
-
-
-
-
- <p>An <code>InstantiationExpression</code> is an <code>Expression</code> that instantiates its <code>instantiatedType</code>, binding some or all of the <code>features</code> of that <code>Type</code> to the <code>results</code> of its <code>arguments</code>.</p>
-
-<p><code>InstantiationExpression</code> is abstract, with concrete subclasses <code>InvocationExpression</code> and <code>ConstructorExpression</code>.</p>
-
-
-
- <p>An <code>InstantiationExpression</code> must own its <code>result</code> parameter.</p>
-
-
- OCL2.0
- result.owningType = self
-
-
-
-
- <p>The <code>instantiatedType</code> of an <code>InstantiationExpression</code> is given by the result of the <code>instantiatedType()</code> operation.</p>
-
-
- OCL2.0
- instantiatedType = instantiatedType()
-
-
-
-
- <p>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</code>.</p>
-
-
- OCL2.0
- instantiatedType() <> null
-
-
-
-
-
- <p>The <code>Expressions</code> whose <code>results</code> are bound to <code>features</code> of the <code>instantiatedType</code>. The <code>arguments</code> are ordered consistent with the order of the <code>features</code>, though they may not be one-to-one with all the <code>features</code>.</p>
-
-<p><strong>Note.</strong> The derivation of <code>argument</code> is given in the concrete subclasses of <code>InstantiationExpression</code>.</p>
-
-
-
-
-
-
- <p>The <code>Type</code> that is being instantiated.</p>
-
-
-
-
-
-
- <p>Return the <code>Type</code> to act as the <code>instantiatedType</code> for this <code>InstantiationExpression</code>. By default, this is the <code>memberElement</code> of the first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>, which must be a <code>Type</code>.</p>
-
-<p><b>Note.</b> This operation is overridden in the subclass <code>OperatorExpression</code>.</p>
-
-
-
- OCL2.0
- let members : Sequence(Element) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement in
-if members->isEmpty() or not members->first().oclIsKindOf(Type) then null
-else typeMembers->first().oclAsType(Type)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstructorExpression</code> is an <code>InstantiationExpression</code> whose <code>result</code> specializes its <code>instantiatedType</code>, binding some or all of the <code>features</code> of the <code>instantiatedType</code> to the <code>results</code> of its <code>argument</code> <code>Expressions</code>.</p>
-
-
-
- <p>The <code>arguments</code> of a <code>ConstructorExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of the <code>ownedFeatures</code> of its <code>result</code> parameter, in an order corresponding to the order of the <code>features</code> of the <code>instantiatedType</code> that the <code>result</code> <code>ownedFeatures</code> redefine.</p>
-
-
- OCL2.0
- instantiatedType.feature->collect(f |
- result.ownedFeatures->select(redefines(f)).valuation->
- select(v | v <> null).value
-)
-
-
-
-
- <p>Two different <code>ownedFeatures</code> of the <code>result</code> of a <code>ConstructorExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- let features : OrderedSet(Feature) = instantiatedType.feature->
- select(visibility = VisibilityKind::public) in
-result.ownedFeature->forAll(f1 | result.ownedFeature->forAll(f2 |
- f1 <> f2 implies
- f1.ownedRedefinition.redefinedFeature->
- intersection(f2.ownedRedefinition.redefinedFeature)->
- intersection(features)->isEmpty()))
-
-
-
-
- <p>Each <code>ownedFeature</code> of the result of a <code>ConstructionExpression</code> must redefine exactly one public <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- let features : OrderedSet(Feature) = instantiatedType.feature->
- select(owningMembership.visibility = VisibilityKind::public) in
-result.ownedFeature->forAll(f |
- f.ownedRedefinition.redefinedFeature->
- intersection(features)->size() = 1)
-
-
-
-
- <p>The <code>result</code> of a <code>ConstructorExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- TBD
-
-
-
-
- <p>A <code>ConstructorExpression</code> must directly or indirectly specialize the <code>Expression</code> <em><code>Performances::constructorEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializes('Performances::constructorEvaluations')
-
-
-
-
- <p>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- result.specializes(instantiatedType)
-
-
-
-
- <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p>
-
-
- OCL2.0
- ownedFeatures->excluding(result)->isEmpty()
-
-
-
-
-
- <p>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p>
-
-
-
-
- OCL2.0
- argument->forAll(modelLevelEvaluable(visited))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Structure</code> is a <code>Class</code> of objects in the modeled universe that are primarily structural in nature. While such an object is not itself behavioral, it may be involved in and acted on by <code>Behaviors</code>, and it may be the performer of some of them.</p>
-
-
-
-
- <p>A <code>Structure</code> must directly or indirectly specialize the base <code>Structure</code> <code><em>Objects::Object</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Objects::Object')
-
-
-
-
- <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p>
-
-
- OCL2.0
- ownedSpecialization.general->forAll(not oclIsKindOf(Behavior))
-
-
-
-
-
-
-
-
-
- <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Predicate</code> is a <code>Function</code> whose <code>result</code> <code>parameter</code> has type <code><em>Boolean</em></code> and multiplicity <code>1..1</code>.</p>
-
-
-
-
- <p>A <code>Predicate</code> must directly or indirectly specialize the base <code>Predicate</code> <code><em>Performances::BooleanEvaluation</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::BooleanEvaluation')
-
-
-
-
-
-
- <p>A <code>ReturnParameterMembership</code> is a <code>ParameterMembership</code> that indicates that the <code>ownedMemberParameter</code> is the <code>result</code> <code>parameter</code> of a <code>Function</code> or <code>Expression</code>. The <code>direction</code> of the <code>ownedMemberParameter</code> must be <code>out</code>.</p>
-
-
-
-
- <p>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression)
-
-
-
-
-
- <p>The <code>ownedMemberParameter</code> of a <code>ReturnParameterMembership</code> must have direction <code>out</code>. (This is a leaf operation that cannot be further redefined.)</p>
-
-
-
- OCL2.0
- FeatureDirectionKind::out
-
-
-
-
-
-
-
-
-
-
-
- <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Invariant</code> is a <code>BooleanExpression</code> that is asserted to have a specific <code><em>Boolean</em></code> result value. If <code>isNegated = false</code>, then the result is asserted to be true. If <code>isNegated = true</code>, then the result is asserted to be false.</p>
-
-
-
-
- <p>An <code>Invariant</code> must directly or indirectly specialize either of the following <code>BooleanExpressions</code> from the Kernel Semantic Library: <code><em>Performances::trueEvaluations</em></code>, if <code>isNegated = false</code>, or <code><em>Performances::falseEvaluations</em></code>, if <code>isNegated = true</code>.</p>
-
-
- OCL2.0
- if isNegated then
- specializesFromLibrary('Performances::falseEvaluations')
-else
- specializesFromLibrary('Performances::trueEvaluations')
-endif
-
-
-
-
-
- <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p>
-
-
-
-
-
-
-
-
- <p>A <code>BooleanExpression</code> is a <em><code>Boolean</code></em>-valued <code>Expression</code> whose type is a <code>Predicate</code>. It represents a logical condition resulting from the evaluation of the <code>Predicate</code>.</p>
-
-
-
-
- <p>A <code>BooleanExpression</code> must directly or indirectly specialize the base <code>BooleanExpression</code> <code><em>Performances::booleanEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::booleanEvaluations')
-
-
-
-
-
- <p>The Predicate that types the Expression.</p>
-
-
-
- <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Expression</code> is a <code>Step</code> that is typed by a <code>Function</code>. An <code>Expression</code> that also has a <code>Function</code> as its <code>featuringType</code> is a computational step within that <code>Function</code>. An <code>Expression</code> always has a single <code>result</code> parameter, which redefines the <code>result</code> parameter of its defining <code>function</code>. This allows <code>Expressions</code> to be interconnected in tree structures, in which inputs to each <code>Expression</code> in the tree are determined as the results of other <code>Expression</code> in the tree.</p>
-
-
-
-
- <p>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p>
-
-
- OCL2.0
- isModelLevelEvaluable = modelLevelEvaluable(Set(Element){})
-
-
-
-
- <p>An <code>Expression</code> must directly or indirectly specialize the base <code>Expression</code> <code><em>Performances::evaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::evaluations')
-
-
-
-
- <p>If this <code>Expression</code> is owned by a <code>FeatureValue</code>, then it must have the same <code>featuringTypes</code> as the <code>featureWithValue</code> of the <code>FeatureValue</code>.</p>
-
-
- OCL2.0
- owningMembership <> null and
-owningMembership.oclIsKindOf(FeatureValue) implies
- let featureWithValue : Feature =
- owningMembership.oclAsType(FeatureValue).featureWithValue in
- featuringType = featureWithValue.featuringType
-
-
-
-
- <p>If an <code>Expression</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Expression</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p>
-
-
- OCL2.0
- ownedMembership.selectByKind(ResultExpressionMembership)->
- forAll(mem | ownedFeature.selectByKind(BindingConnector)->
- exists(binding |
- binding.relatedFeature->includes(result) and
- binding.relatedFeature->includes(mem.ownedResultExpression.result)))
-
-
-
-
- <p>The <code>result</code> parameter of an <code>Expression</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p>
-
-
- OCL2.0
- result =
- let resultParams : Sequence(Feature) =
- featureMemberships->
- selectByKind(ReturnParameterMembership).
- ownedMemberParameter in
- if resultParams->notEmpty() then resultParams->first()
- else null
- endif
-
-
-
-
-
- <p>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ReturnParameterMembership)->
- size() = 1
-
-
-
-
- <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p>
-
-
- OCL2.0
- membership->selectByKind(ResultExpressionMembership)->size() <= 1
-
-
-
-
-
- <p>The <code>Function</code> that types this <code>Expression</code>.</p>
-
-
-
- <p>This is the Function that types the Expression.</p>
-
-
-
-
-
-
-
- <p><p>An <code>output</code> <code>parameter</code> of the <code>Expression</code> whose value is the result of the <code>Expression</code>. The result of an <code>Expression</code> is either inherited from its <code>function</code> or it is related to the <code>Expression</code> via a <code>ReturnParameterMembership</code>, in which case it redefines the <code>result</code> <code>parameter</code> of its <code>function</code>.</p>
-
-
-
-
-
-
-
- <p>Whether this <code>Expression</code> meets the constraints necessary to be evaluated at <em>model level</em>, that is, using metadata within the model.</p>
-
-
-
-
-
- <p>Return whether this <code>Expression</code> is model-level evaluable. The <code>visited</code> parameter is used to track possible circular <code>Feature</code> references made from <code>FeatureReferenceExpressions</code> (see the redefinition of this operation for <code>FeatureReferenceExpression</code>). Such circular references are not allowed in model-level evaluable expressions.</p>
-
-<p>An <code>Expression</code> that is not otherwise specialized is model-level evaluable if it has no (non-implied) <code>ownedSpecializations</code> and all its <code>ownedFeatures</code> are either <code>in</code> parameters, the <code>result</code> <code>parameter</code> or a result <code>Expression</code> owned via a <code>ResultExpressionMembership</code>. The <code>parameters</code> must not have any <code>ownedFeatures</code> or a <code>FeatureValue</code>, and the result <code>Expression</code> must be model-level evaluable.</p>
-
-
-
- OCL2.0
- ownedSpecialization->forAll(isImplied) and
-ownedFeature->forAll(f |
- (directionOf(f) = FeatureDirectionKind::_'in' or f = result) and
- f.ownedFeature->isEmpty() and f.valuation = null or
- f.owningFeatureMembership.oclIsKindOf(ResultExpressionMembership) and
- f.oclAsType(Expression).modelLevelEvaluable(visited)
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If this <code>Expression</code> <code>isModelLevelEvaluable</code>, then evaluate it using the <code>target</code> as the context <code>Element</code> for resolving <code>Feature</code> names and testing classification. The result is a collection of <code>Elements</code>, which, for a fully evaluable <code>Expression</code>, will be a <code>LiteralExpression</code> or a <code>Feature</code> that is not an <code>Expression</code>.</p>
-
-
-
- OCL2.0
- isModelLevelEvaluable
-
-
-
-
- OCL2.0
- let resultExprs : Sequence(Expression) =
- ownedFeatureMembership->
- selectByKind(ResultExpressionMembership).
- ownedResultExpression in
-if resultExpr->isEmpty() then Sequence{}
-else resultExprs->first().evaluate(target)
-endif
-
-
-
-
-
-
-
-
-
-
- <p>Model-level evaluate this <code>Expression</code> with the given <code>target</code>. If the result is a <code>LiteralBoolean</code>, return its <code>value</code>. Otherwise return <code>false</code>.</p>
-
-
-
-
- OCL2.0
- let results: Sequence(Element) = evaluate(target) in
- result->size() = 1 and
- results->first().oclIsKindOf(LiteralBoolean) and
- results->first().oclAsType(LiteralBoolean).value
-
-
-
-
-
-
-
-
-
-
-
- <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Functions that hasve a certain <code>expression</code> as a step.</p>
-
-
-
-
-
-
-
- <p>A <code>Function</code> is a <code>Behavior</code> that has an <code>out</code> <code>parameter</code> that is identified as its <code>result</code>. A <code>Function</code> represents the performance of a calculation that produces the values of its <code>result</code> <code>parameter</code>. This calculation may be decomposed into <code>Expressions</code> that are <code>steps</code> of the <code>Function</code>.</p>
-
-
-
-
- <p>A <code>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ReturnParameterMembership)->
- size() = 1
-
-
-
-
- <p>A <code>Function</code> must directly or indirectly specialize the base <code>Function</code> <code><em>Performances::Evaluation</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::Evaluation')
-
-
-
-
- <p>If a <code>Function</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Function</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p>
-
-
- OCL2.0
- ownedMembership.selectByKind(ResultExpressionMembership)->
- forAll(mem | ownedFeature.selectByKind(BindingConnector)->
- exists(binding |
- binding.relatedFeature->includes(result) and
- binding.relatedFeature->includes(mem.ownedResultExpression.result)))
-
-
-
-
- <p>The <code>result</code> <code>parameter</code> of a <code>Function</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p>
-
-
- OCL2.0
- result =
- let resultParams : Sequence(Feature) =
- featureMemberships->
- selectByKind(ReturnParameterMembership).
- ownedMemberParameter in
- if resultParams->notEmpty() then resultParams->first()
- else null
- endif
-
-
-
-
- <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p>
-
-
- OCL2.0
- membership->selectByKind(ResultExpressionMembership)->size() <= 1
-
-
-
-
-
- <p>The <code>Expressions</code> that are <code>steps</code> in the calculation of the <code>result</code> of this <code>Function</code>.</p>
-
-
-
- <p>The set of expressions that represent computational steps or parts of a system of equations within the Function.</p>
-
-
-
-
-
-
-
- <p>The object or value that is the result of evaluating the Function.</p>
-
-
- <p>The <code>result</code> <code>parameter</code> of the <code>Function</code>, which is owned by the <code>Function</code> via a <code>ReturnParameterMembership</code>.</p>
-
-
-
-
-
-
-
- <p>Whether this <code>Function</code> can be used as the <code>function</code> of a model-level evaluable <code>InvocationExpression</code>. Certain <code>Functions</code> from the Kernel Functions Library are considered to have <code>isModelLevelEvaluable = true</code>. For all other <code>Functions</code> it is <code>false</code>.</p>
-
-<p><strong>Note:</strong> See the specification of the KerML concrete syntax notation for <code>Expressions</code> for an identification of which library <code>Functions</code> are model-level evaluable.</p>
-
-
-
-
-
-
-
- <p>The Expressions that are typed by a certain <code>function</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ResultExpressionMembership</code> is a <code>FeatureMembership</code> that indicates that the <code>ownedResultExpression</code> provides the result values for the <code>Function</code> or <code>Expression</code> that owns it. The owning <code>Function</code> or <code>Expression</code> must contain a <code>BindingConnector</code> between the <code>result</code> <code>parameter</code> of the <code>ownedResultExpression</code> and the <code>result</code> <code>parameter</code> of the owning <code>Function</code> or <code>Expression</code>.</p>
-
-
-
-
- <p>The <code>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression)
-
-
-
-
-
- <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>MultiplicityRange</code> is a <code>Multiplicity</code> whose value is defined to be the (inclusive) range of natural numbers given by the result of a <code>lowerBound</code> <code>Expression</code> and the result of an <code>upperBound</code> <code>Expression</code>. The result of these <code>Expressions</code> shall be of type <code><em>Natural</em></code>. If the result of the <code>upperBound</code> <code>Expression</code> is the unbounded value <code>*</code>, then the specified range includes all natural numbers greater than or equal to the <code>lowerBound</code> value. If no <code>lowerBound</code> <code>Expression</code>, then the default is that the lower bound has the same value as the upper bound, except if the <code>upperBound</code> evaluates to <code>*</code>, in which case the default for the lower bound is 0.</p>
-
-
-
-
- <p>The <code>bounds</code> of a <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>.</p>
-
-
- OCL2.0
- bound->forAll(b | b.featuringType = self.featuringType)
-
-
-
-
- <p>The <code>results</code> of the <code>bound</code> <code>Expression(s)</code> of a <code>MultiplicityRange</code> must be typed by <code><em>ScalarValues::Intger</em></code> from the Kernel Data Types Library. If a <code>bound</code> is model-level evaluable, then it must evaluate to a non-negative value.</p>
-
-
- OCL2.0
- bound->forAll(b |
- b.result.specializesFromLibrary('ScalarValues::Integer') and
- let value : UnlimitedNatural = valueOf(b) in
- value <> null implies value >= 0
-)
-
-
-
-
- <p>If a <code>MultiplicityRange</code> has two <code>ownedMembers</code> that are <code>Expressions</code>, then the <code>lowerBound</code> is the first of these, otherwise it is <code>null</code>.</p>
-
-
- OCL2.0
- lowerBound =
- let ownedExpressions : Sequence(Expression) =
- ownedMember->selectByKind(Expression) in
- if ownedExpressions->size() < 2 then null
- else ownedExpressions->first()
- endif
-
-
-
-
- <p>If a <code>MultiplicityRange</code> has one <code>ownedMember</code> that is an <code>Expression</code>, then this is the <code>upperBound</code>. If it has more than one <code>ownedMember</code> that is an <code>Expression</code>, then the <code>upperBound</code> is the second of those. Otherwise, it is null.</p>
-
-
- OCL2.0
- upperBound =
- let ownedExpressions : Sequence(Expression) =
- ownedMember->selectByKind(Expression) in
- if ownedExpressions->isEmpty() then null
- else if ownedExpressions->size() = 1 then ownedExpressions->at(1)
- else ownedExpressions->at(2)
- endif endif
-
-
-
-
- <p>The <code>bounds</code> of a <code>MultiplicityRange</code> are the <code>lowerBound</code> (if any) followed by the <code>upperBound</code>.</p>
-
-
- OCL2.0
- bound =
- if upperBound = null then Sequence{}
- else if lowerBound = null then Sequence{upperBound}
- else Sequence{lowerBound, upperBound}
- endif endif
-
-
-
-
- <p>The <code>lowerBound</code> (if any) and <code>upperBound</code> <code>Expressions</code> must be the first <code>ownedMembers</code> of a <code>MultiplicityRange</code>.</p>
-
-
- OCL2.0
- if lowerBound = null then
- ownedMember->notEmpty() and
- ownedMember->at(1) = upperBound
-else
- ownedMember->size() > 1 and
- ownedMember->at(1) = lowerBound and
- ownedMember->at(2) = upperBound
-endif
-
-
-
-
-
- <p>The <code>Expression</code> whose result provides the lower bound of the <code>MultiplicityRange</code>. If no <code>lowerBound</code> <code>Expression</code> is given, then the lower bound shall have the same value as the upper bound, unless the upper bound is unbounded (<code>*</code>), in which case the lower bound shall be 0.</p>
-
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</code>.</p>
-
-
-
-
-
-
- <p>The owned <code>Expressions</code> of the <code>MultiplicityRange</code> whose results provide its bounds. These must be the first <code>ownedMembers</code> of the <code>MultiplicityRange</code>.</p>
-
-
-
-
-
-
- <p>Check whether this <code>MultiplicityRange</code> represents the range bounded by the given values <code>lower</code> and <code>upper</code>, presuming the <code>lowerBound</code> and <code>upperBound</code> <code>Expressions</code> are model-level evaluable.</p>
-
-
-
- OCL2.0
- valueOf(upperBound) = upper and
-let lowerValue: UnlimitedNatural = valueOf(lowerBound) in
-(lowerValue = lower or
- lowerValue = null and
- (lower = upper or
- lower = 0 and upper = *))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Evaluate the given <code>bound</code> <code>Expression</code> (at model level) and return the result represented as a MOF <code>UnlimitedNatural</code> value.</p>
-
-
-
- OCL2.0
- if bound = null or not bound.isModelLevelEvaluable then
- null
-else
- let boundEval: Sequence(Element) = bound.evaluate(owningType) in
- if boundEval->size() <> 1 then null else
- let valueEval: Element = boundEval->at(1) in
- if valueEval.oclIsKindOf(LiteralInfinity) then *
- else if valueEval.oclIsKindOf(LiteralInteger) then
- let value : Integer =
- valueEval.oclAsKindOf(LiteralInteger).value in
- if value >= 0 then value else null endif
- else null
- endif endif
- endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Step</code> is a <code>Feature</code> that is typed by one or more <code>Behaviors</code>. <code>Steps</code> may be used by one <code>Behavior</code> to coordinate the performance of other <code>Behaviors</code>, supporting a steady refinement of behavioral descriptions. <code>Steps</code> can be ordered in time and can be connected using <code>Flows</code> to specify things flowing between their <code>parameters</code>.</p>
-
-
-
-
- <p>A <code>Step</code> must directly or indirectly specialize the base <code>Step</code> <code><em>Performances::performances</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::performances')
-
-
-
-
- <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code> must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::enclosedPerformance</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
- (owningType.oclIsKindOf(Behavior) or
- owningType.oclIsKindOf(Step)) implies
- specializesFromLibrary('Performances::Performance::enclosedPerformance')
-
-
-
-
- <p>A composite <code>Step</code> whose <code>owningType</code> is a <code>Structure</code> or a <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize the <code>Step</code> <code><em>Objects::Object::ownedPerformance</em></code>.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(Structure) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKindOf(Structure)) implies
- specializesFromLibrary('Objects::Object::ownedPerformance')
-
-
-
-
- <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code>, and which is composite, must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::subperformance</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
- (owningType.oclIsKindOf(Behavior) or
- owningType.oclIsKindOf(Step)) and
- self.isComposite implies
- specializesFromLibrary('Performances::Performance::subperformance')
-
-
-
-
- <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p>
-
-
- OCL2.0
- behavior = type->selectByKind(Behavior)
-
-
-
-
-
- <p>The <code>Behaviors</code> that type this <code>Step</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>Step</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Step</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>Behavior </code>coordinates occurrences of other <code>Behaviors</code>, as well as changes in objects. <code>Behaviors</code> can be decomposed into <code>Steps</code> and be characterized by <code>parameters</code>.</p>
-
-
-
-
- <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p>
-
-
- OCL2.0
- ownedSpecialization.general->forAll(not oclIsKindOf(Structure))
-
-
-
-
- <p>A <code>Behavior</code> must directly or indirectly specialize the base <code>Behavior</code> <code><em>Performances::Performance</em></code> from the Kernel Semantic Library.</p>
-
-
- English
- specializesFromLibrary('Performances::Performance')
-
-
-
-
- <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p>
-
-
- OCL2.0
- step = feature->selectByKind(Step)
-
-
-
-
-
- <p>The <code>Steps</code> that make up this <code>Behavior</code>.</p>
-
-
-
-
-
-
-
- <p>The parameters of this <code>Behavior</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Behavior</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ParameterMembership</code> is a <code>FeatureMembership</code> that identifies its <code>memberFeature</code> as a parameter, which is always owned, and must have a <code>direction</code>. A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>, a <code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p>
-
-
-
- <p>The <code>ownedMemberParameter</code> of a <code>ParameterMembership</code> must have a <code>direction</code> equal to the result of the <code>parameterDirection()</code> operation.</p>
-
-
- OCL2.0
- ownedMemberParameter.direction = parameterDirection()
-
-
-
-
- <p>A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>,<code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or
-owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and
- owningType.owningNamespace.oclIsKindOf(ConstructorExpression)
-
-
-
-
-
- <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p>
-
-
-
-
-
-
-
- <p>Return the required value of the <code>direction</code> of the <code>ownedMemberParameter</code>. By default, this is <code>in</code>.</p>
-
-
-
- OCL2.0
- FeatureDirectionKind::_'in'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Metaclass</code> is a <code>Structure</code> used to type <code>MetadataFeatures</code>.</p>
-
-
-
- <p>A <code>Metaclass</code> must directly or indirectly specialize the base <code>Metaclass</code> <code><em>Metaobjects::Metaobject</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metaobjects::Metaobject')
-
-
-
-
-
-
- <p>A <code>MetadataFeature</code> is a <code>Feature</code> that is an <code>AnnotatingElement</code> used to annotate another <code>Element</code> with metadata. It is typed by a <code>Metaclass</code>. All its <code>ownedFeatures</code> must redefine <code>features</code> of its <code>metaclass</code> and any feature bindings must be model-level evaluable.</p>
-
-
-
-
-
- <p>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p>
-
-
- OCL2.0
- type->selectByKind(Metaclass).size() = 1
-
-
-
-
- <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p>
-
-
- OCL2.0
- not metaclass.isAbstract
-
-
-
-
- <p>A <code>MetadataFeature</code> must directly or indirectly specialize the base <code>MetadataFeature</code> <code><em>Metaobjects::metaobjects</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metaobjects::metaobjects')
-
-
-
-
- <p>Each <code>ownedFeature</code> of a <code>MetadataFeature</code> must have no declared name, redefine a single <code>Feature</code>, either have no <code>featureValue</code> or a <code>featureValue</code> with a <code>value</code> <code>Expression</code> that is model-level evaluable, and only have <code>ownedFeatures</code> that also meet these restrictions.</p>
-
-
- OCL2.0
- ownedFeature->closure(ownedFeature)->forAll(f |
- f.declaredName = null and f.declaredShortName = null and
- f.valuation <> null implies f.valuation.value.isModelLevelEvaluable and
- f.redefinition.redefinedFeature->size() = 1)
-
-
-
-
- <p>The <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>.
-
-
- OCL2.0
- metaclass =
- let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in
- if metaclassTypes->isEmpty() then null
- else metaClassTypes->first()
- endif
-
-
-
-
- <p>The <code>annotatedElements</code> of a <code>MetadataFeature</code> must have an abstract syntax metaclass consistent with the <code>annotatedElement</code> declarations for the <code>MetadataFeature</code>.</p>
-
-
- OCL2.0
- let baseAnnotatedElementFeature : Feature =
- resolveGlobal('Metaobjects::Metaobject::annotatedElement').memberElement.
- oclAsType(Feature) in
-let annotatedElementFeatures : OrderedSet(Feature) = feature->
- select(specializes(baseAnnotatedElementFeature))->
- excluding(baseAnnotatedElementFeature) in
-annotatedElementFeatures->notEmpty() implies
- let annotatedElementTypes : Set(Feature) =
- annotatedElementFeatures.typing.type->asSet() in
- let metaclasses : Set(Metaclass) =
- annotatedElement.oclType().qualifiedName->collect(qn |
- resolveGlobal(qn).memberElement.oclAsType(Metaclass)) in
- metaclasses->forAll(m | annotatedElementTypes->exists(t | m.specializes(t)))
-
-
-
-
- <p>If this <code>MetadataFeature</code> is an application of <code><em>SemanticMetadata</em></code>, then its <code>annotatingElement</code> must be a <code>Type</code>. The annotated <code>Type</code> must then directly or indirectly specialize the specified value of the <code><em>baseType</em></code>, <em>unless</em> the <code>Type</code> is a <code>Classifier</code> and the <code><em>baseType</em></code> represents a kind of <code>Feature</code>, in which case the <code>Classifier</code> must directly or indirectly specialize each of the <code>types</code> of the <code>Feature</code>.</p>
-
-
- OCL2.0
- isSemantic() implies
- let annotatedTypes : Sequence(Type) =
- annotatedElement->selectAsKind(Type) in
- let baseTypes : Sequence(MetadataFeature) =
- evaluateFeature(resolveGlobal(
- 'Metaobjects::SemanticMetadata::baseType').
- memberElement.
- oclAsType(Feature))->
- selectAsKind(MetadataFeature) in
- annotatedTypes->notEmpty() and
- baseTypes()->notEmpty() and
- baseTypes()->first().isSyntactic() implies
- let annotatedType : Type = annotatedTypes->first() in
- let baseType : Element = baseTypes->first().syntaxElement() in
- if annotatedType.oclIsKindOf(Classifier) and
- baseType.oclIsKindOf(Feature) then
- baseType.oclAsType(Feature).type->
- forAll(t | annotatedType.specializes(t))
- else if baseType.oclIsKindOf(Type) then
- annotatedType.specializes(baseType.oclAsType(Type))
- else
- true
- endif
-
-
-
-
-
-
- <p>The <code>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</code>.</p>
-
-
-
-
-
-
- <p>If the given <code>baseFeature</code> is a <code>feature</code> of this <code>MetadataFeature</code>, or is directly or indirectly redefined by a <code>feature</code>, then return the result of evaluating the appropriate (model-level evaluable) <code>value</code> <code>Expression</code> for it (if any), with the <code>MetadataFeature</code> as the target.</p>
-
-
-
- OCL2.0
- let selectedFeatures : Sequence(Feature) = feature->
- select(closure(ownedRedefinition.redefinedFeature)->
- includes(baseFeature)) in
-if selectedFeatures->isEmpty() then null
-else
- let selectedFeature : Feature = selectedFeatures->first() in
- let featureValues : FeatureValue = selectedFeature->
- closure(ownedRedefinition.redefinedFeature).ownedMember->
- selectAsKind(FeatureValue) in
- if featureValues->isEmpty() then null
- else featureValues->first().value.evaluate(self)
- endif
-
-
-
-
-
-
-
-
-
-
- <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> which is a kind of <code><em>SemanticMetadata</code>.<p>
-
-
-
- OCL2.0
- specializesFromLibrary('Metaobjects::SemanticMetadata')
-
-
-
-
-
-
-
-
- <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> that is a kind of <code><em>KerML::Element</em></code> (that is, it is from the reflective abstract syntax model).</p>
-
-
-
- OCL2.0
- specializesFromLibrary('KerML::Element')
-
-
-
-
-
-
-
-
- <p>If this <code>MetadataFeature</code> reflectively represents a model element, then return the corresponding <code>Element</code> instance from the MOF abstract syntax representation of the model.</p>
-
-
-
- English
- No OCL
-
-
-
-
- OCL2.0
- isSyntactic()
-
-
-
-
-
-
-
-
-
-
-
- <p>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>DataType</code> is a <code>Classifier</code> of things (in the universe) that can only be distinguished by how they are related to other things (via Features). This means multiple things classified by the same <code>DataType</code></p>
-
-<ul>
- <li>Cannot be distinguished when they are related to other things in exactly the same way, even when they are intended to be about different things.</li>
- <li>Can be distinguished when they are related to other things in different ways, even when they are intended to be about the same thing.</li>
-</ul>
-
-
-
-
- <p>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p>
-
-
- OCL2.0
- ownedSpecialization.general->
- forAll(not oclIsKindOf(Class) and
- not oclIsKindOf(Association))
-
-
-
-
- <p>A <code>DataType</code> must directly or indirectly specialize the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::DataValue')
-
-
-
-
-
-
-
-
- <p>An <code>AssociationStructure</code> is an <code>Association</code> that is also a <code>Structure</code>, classifying link objects that are both links and objects. As objects, link objects can be created and destroyed, and their non-end <code>Features</code> can change over time. However, the values of the end <code>Features</code> of a link object are fixed and cannot change over its lifetime.</p>
-
-
-
- <p>An <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::LinkObject</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Objects::LinkObject')
-
-
-
-
- <p>A binary <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::BinaryLinkObject</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- endFeature->size() = 2 implies
- specializesFromLibrary('Objects::BinaryLinkObject')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>An <code>Association</code> is a <code>Relationship</code> and a <code>Classifier</code> to enable classification of links between things (in the universe). The co-domains (<code>types</code>) of the <code>associationEnd</code> <code>Features</code> are the <code>relatedTypes</code>, as co-domain and participants (linked things) of an <code>Association</code> identify each other.</p>
-
-
-
-
- <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p>
-
-
- OCL2.0
- relatedType = associationEnd.type
-
-
-
-
- <p>An <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::Link</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Links::Link')
-
-
-
-
- <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p>
-
-
- English
- oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure)
-
-
-
-
- <p>A binary <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::binaryLink</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- associationEnd->size() = 2 implies
- specializesFromLibrary('Links::BinaryLink')
-
-
-
-
- <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p>
-
-
- OCL2.0
- not isAbstract implies relatedType->size() >= 2
-
-
-
-
- <p>If an <code>Association</code> has more than two <code>associationEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- associationEnds->size() > 2 implies
- not specializesFromLibrary('Links::BinaryLink')
-
-
-
-
- <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p>
-
-
- OCL2.0
- sourceType =
- if relatedType->isEmpty() then null
- else relatedType->first() endif
-
-
-
-
- OCL2.0
- targetType =
- if relatedType->size() < 2 then OrderedSet{}
- else
- relatedType->
- subSequence(2, relatedType->size())->
- asOrderedSet()
- endif
-
-
-
-
- <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>.
-
-
- OCL2.0
- ownedEndFeature->forAll(type->size() = 1)
-
-
-
-
-
-
- <p>The <code>types</code> of the <code>associationEnds</code> of the <code>Association</code>, which are the <code>relatedElements</code> of the <code>Association</code> considered as a <code>Relationship</code>.</p>
-
-
-
-
-
-
-
- <p>The source <code>relatedType</code> for this <code>Association</code>. It is the first <code>relatedType</code> of the <code>Association</code>.</p>
-
-
-
-
-
-
-
- <p>The target <code>relatedTypes</code> for this <code>Association</code>. This includes all the <code>relatedTypes</code> other than the <code>sourceType</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>features</code> of the <code>Association</code> that identify the things that can be related by it. A concrete <code>Association</code> must have at least two <code>associationEnds</code>. When it has exactly two, the <code>Association</code> is called a <em>binary</em> <code>Association</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>The (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p>
-
-
-
-
-
-
-
-
- <p>The FeatureValue that owns the <code>value</code> Expression.</p>
-
-
-
-
-
-
-
- <p>A <code>FeatureValue</code> is a <code>Membership</code> that identifies a particular member <code>Expression</code> that provides the value of the <code>Feature</code> that owns the <code>FeatureValue</code>. The value is specified as either a bound value or an initial value, and as either a concrete or default value. A <code>Feature</code> can have at most one <code>FeatureValue</code>.</p>
-
-<p>The result of the <code>value</code> <code>Expression</code> is bound to the <code>featureWithValue</code> using a <code>BindingConnector</code>. If <code>isInitial = false</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is the same as the <code>featuringType</code> of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is restricted to its <code>startShot</code>.
-
-<p>If <code>isDefault = false</code>, then the above semantics of the <code>FeatureValue</code> are realized for the given <code>featureWithValue</code>. Otherwise, the semantics are realized for any individual of the <code>featuringType</code> of the <code>featureWithValue</code>, unless another value is explicitly given for the <code>featureWithValue</code> for that individual.</p>
-
-
-
-
- <p>If <code>isDefault = false</code>, then the <code>featureWithValue</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> whose <code>relatedElements</code> are the <code>featureWithValue</code> and a feature chain consisting of the <code>value</code> <code>Expression</code> and its <code>result</code>. If <code>isInitial = false</code>, then this <code>BindingConnector</code> must have <code>featuringTypes</code> that are the same as those of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>BindingConnector</code> must have <code><em>that.startShot</em><code> as its <code>featuringType</code>.</p>
-
-
- OCL2.0
- not isDefault implies
- featureWithValue.ownedMember->
- selectByKind(BindingConnector)->exists(b |
- b.relatedFeature->includes(featureWithValue) and
- b.relatedFeature->exists(f |
- f.chainingFeature = Sequence{value, value.result}) and
- if not isInitial then
- b.featuringType = featureWithValue.featuringType
- else
- b.featuringType->exists(t |
- t.oclIsKindOf(Feature) and
- t.oclAsType(Feature).chainingFeature =
- Sequence{
- resolveGlobal('Base::things::that').
- memberElement,
- resolveGlobal('Occurrences::Occurrence::startShot').
- memberElement
- }
- )
- endif)
-
-
-
-
- <p>All <code>Features</code> directly or indirectly redefined by the <code>featureWithValue</code> of a <code>FeatureValue</code> must have only default <code>FeatureValues</code>.</p>
-
-
- OCL2.0
- featureWithValue.redefinition.redefinedFeature->
- closure(redefinition.redefinedFeature).valuation->
- forAll(isDefault)
-
-
-
-
- <p>If a <code>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</p>
-
-
- OCL2.0
- isInitial implies featureWithValue.isVariable
-
-
-
-
-
- <p>The Feature to be provided a value.</p>
-
-
- <p>The <code>Feature</code> to be provided a value.</p>
-
-
-
-
-
-
-
- <p>The Expression that provides the value as a result.</p>
-
-
- <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p>
-
-
-
-
-
-
-
- <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>FeatureValue</code> is a concrete specification of the bound or initial value of the <code>featureWithValue</code>, or just a default value that may be overridden.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Connector</code> is a usage of <code>Associations</code>, with links restricted according to instances of the <code>Type</code> in which they are used (domain of the <code>Connector</code>). The <code>associations</code> of the <code>Connector</code> restrict what kinds of things might be linked. The <code>Connector</code> further restricts these links to be between values of <code>Features</code> on instances of its domain.</p>
-
-
-
-
- <p>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p>
-
-
- OCL2.0
- relatedFeature = connectorEnd.ownedReferenceSubsetting->
- select(s | s <> null).subsettedFeature
-
-
-
-
- <p>Each <code>relatedFeature</code> of a <code>Connector</code> must have each <code>featuringType</code> of the <code>Connector</code> as a direct or indirect <code>featuringType</code> (where a <code>Feature</code> with no <code>featuringType</code> is treated as if the <code>Classifier</code> <code><em>Base::Anything</em></code> was its <code>featuringType</code>).</p>
-
-
- OCL2.0
- relatedFeature->forAll(f |
- if featuringType->isEmpty() then f.isFeaturedWithin(null)
- else featuringType->forAll(t | f.isFeaturedWithin(t))
- endif)
-
-
-
-
- <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p>
-
-
- OCL2.0
- sourceFeature =
- if relatedFeature->isEmpty() then null
- else relatedFeature->first()
- endif
-
-
-
-
- <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p>
-
-
- OCL2.0
- targetFeature =
- if relatedFeature->size() < 2 then OrderedSet{}
- else
- relatedFeature->
- subSequence(2, relatedFeature->size())->
- asOrderedSet()
- endif
-
-
-
-
- <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p>
-
-
- OCL2.0
- not isAbstract implies relatedFeature->size() >= 2
-
-
-
-
- <p>A <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::links</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Links::links')
-
-
-
-
- <p>A <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::linkObjects</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- association->exists(oclIsKindOf(AssociationStructure)) implies
- specializesFromLibrary('Objects::linkObjects')
-
-
-
-
- <p>A binary <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::binaryLinkObjects</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- connectorEnds->size() = 2 and
-association->exists(oclIsKindOf(AssociationStructure)) implies
- specializesFromLibrary('Objects::binaryLinkObjects')
-
-
-
-
- <p>A binary <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::binaryLinks</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- connectorEnd->size() = 2 implies
- specializesFromLibrary('Links::binaryLinks')
-
-
-
-
- <p>If a <code>Connector</code> has more than two <code>connectorEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- connectorEnds->size() > 2 implies
- not specializesFromLibrary('Links::BinaryLink')
-
-
-
-
- <p>The <code>defaultFeaturingType</code> of a <code>Connector</code> is the innermost common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code> of the <code>Connector</code>, so that each <code>relatedElement</code> is featured within the <code>defaultFeaturingType</code>, if such exists.</p>
-
-
- OCL2.0
- let commonFeaturingTypes : OrderedSet(Type) =
- relatedFeature->closure(featuringType)->select(t |
- relatedFeature->forAll(f | f.isFeaturedWithin(t))
- ) in
-let nearestCommonFeaturingTypes : OrderedSet(Type) =
- commonFeaturingTypes->reject(t1 |
- commonFeaturingTypes->exists(t2 |
- t2 <> t1 and t2->closure(featuringType)->contains(t1)
- )) in
-if nearestCommonFeaturingTypes->isEmpty() then null
-else nearestCommonFeaturingTypes->first()
-endif
-
-
-
-
-
-
- <p>The <code>Features</code> that are related by this <code>Connector</code> considered as a <code>Relationship</code> and that restrict the links it identifies, given by the referenced <code>Features</code> of the <code>connectorEnds</code> of the <code>Connector</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Associations</code> that type the <code>Connector</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>endFeatures</code> of a <code>Connector</code>, which redefine the <code>endFeatures</code> of the <code>associations</code> of the <code>Connector</code>. The <code>connectorEnds</code> determine via <code>ReferenceSubsetting</code> <code>Relationships</code> which <code>Features</code> are related by the <code>Connector</code>.</p>
-
-
-
-
-
-
- <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p>
-
-
-
-
-
-
- <p>The target <code>relatedFeatures</code> for this <code>Connector</code>. This includes all the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p>
-
-
-
-
-
-
- <p>The innermost <code>Type</code> that is a common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code>, such that, if it exists and was the <code>featuringType</code> of this <code>Connector</code>, the <code>Connector</code> would satisfy the <code>checkConnectorTypeFeaturing</code> constraint.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p>
-
-
-
-
- <p>A <code>BindingConnector</code> must be binary.</p>
-
-
- OCL2.0
- relatedFeature->size() = 2
-
-
-
-
- <p>A <code>BindingConnector</code> must directly or indirectly specialize the base <code>BindingConnector</code> <code><em>Links::selfLinks</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Links::selfLinks')
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</p>
-
-
-
-
- <p>A <code>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Occurrences::happensBeforeLinks')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p>
-
-
-
-
-
-
-
-
diff --git a/Resources/SysML_only_xmi.uml b/Resources/SysML_only_xmi.uml
deleted file mode 100644
index 7f368fdc..00000000
--- a/Resources/SysML_only_xmi.uml
+++ /dev/null
@@ -1,8543 +0,0 @@
-
-
-
-
-
-
-
-
-
- <p>A <code>PortUsage</code> is a usage of a <code>PortDefinition</code>. A <code>PortUsage</code> itself as well as all its <code>nestedUsages</code> must be referential (non-composite).</p>
-
-
-
- <p>The <code>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</p>
-
-
- OCL2.0
- nestedUsage->
- reject(oclIsKindOf(PortUsage))->
- forAll(not isComposite)
-
-
-
-
- <p>A <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::ports</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Ports::ports')
-
-
-
-
- <p>A composite <code>PortUsage</code> with an <code>owningType</code> that is a <code>PortDefinition</code> or <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::Port::subports</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(PortDefinition) or
- owningType.oclIsKindOf(PortUsage)) implies
- specializesFromLibrary('Ports::Port::subports')
-
-
-
-
- <p>Unless a <code>PortUsage</code> has an <code>owningType</code> that is a <code>PortDefinition</code> or a <code>PortUsage</code>, it must be referential (non-composite).</p>
-
-
- OCL2.0
- owningType = null or
-not owningType.oclIsKindOf(PortDefinition) and
-not owningType.oclIsKindOf(PortUsage) implies
- isReference
-
-
-
-
- <p>A <code>PortUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Parts::Part::ownedPorts</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(PartDefinition) or
- owningType.oclIsKindOf(PartUsage)) implies
- specializesFromLibrary('Parts::Part::ownedPorts')
-
-
-
-
-
- <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</p>
-
-
-
-
-
-
-
-
- <p>The PortUsages that are typed by a certain PortDefinition.</p>
-
-
-
-
-
-
-
- <p>A <code>PortDefinition</code> defines a point at which external entities can connect to and interact with a system or part of a system. Any <code>ownedUsages</code> of a <code>PortDefinition</code>, other than <code>PortUsages</code>, must not be composite.</p>
-
-
-
-
-
-
- <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p>
-
-
- OCL2.0
- conjugatedPortDefinition =
-let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) =
- ownedMember->selectByKind(ConjugatedPortDefinition) in
-if conjugatedPortDefinitions->isEmpty() then null
-else conjugatedPortDefinitions->first()
-endif
-
-
-
-
- <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p>
-
-
- OCL2.0
- ownedUsage->
- reject(oclIsKindOf(PortUsage))->
- forAll(not isComposite)
-
-
-
-
- <p>Unless it is a <code>ConjugatedPortDefinition</code>, a <code>PortDefinition</code> must have exactly one <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p>
-
-
- OCL2.0
- not oclIsKindOf(ConjugatedPortDefinition) implies
- ownedMember->
- selectByKind(ConjugatedPortDefinition)->
- size() = 1
-
-
-
-
- <p>A <code>PortDefinition</code> must directly or indirectly specialize the <code>PortDefinition</code> <em><code>Ports::Port</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Ports::Port')
-
-
-
-
-
-
-
-
- <p>The <codeConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p>
-
-
-
-
-
-
-
-
- <p>A <code>ConjugatedPortDefinition</code> is a <code>PortDefinition</code> that is a <code>PortDefinition</code> of its original <code>PortDefinition</code>. That is, a <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>. Every <code>PortDefinition</code> (that is not itself a <code><code>ConjugatedPortDefinition</code></code>) has exactly one corresponding <code>ConjugatedPortDefinition</code>, whose effective name is the name of the <code>originalPortDefinition</code>, with the character <code>~</code> prepended.</p>
-
-
-
- <p>The <code>originalPortDefinition</code> of the <code>ownedPortConjugator</code> of a <code>ConjugatedPortDefinition</code> must be the <code>originalPortDefinition</code> of the <code>ConjugatedPortDefinition</code>.</p>
-
-
- OCL2.0
- ownedPortConjugator.originalPortDefinition = originalPortDefinition
-
-
-
-
- <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>.
-
-
- OCL2.0
- conjugatedPortDefinition = null
-
-
-
-
-
- <p>The original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>If the <code>name</code> of the <code>originalPortDefinition</code> is non-empty, then return that with the character <code>~</code> prepended.</p>
-
-
-
- OCL2.0
- let originalName : String = originalPortDefinition.name in
-if originalName = null then null
-else '~' + originalName
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>PortConjugation</code> is a <code>Conjugation</code> <code>Relationship</code> between a <code>PortDefinition</code> and its corresponding <code>ConjugatedPortDefinition</code>. As a result of this <code>Relationship</code>, the <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>.</code></p>
-
-
-
-
-
-
-
- <p>The <code>PortDefinition</code> being conjugated.</p>
-
-
-
-
-
-
-
- <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>ConjugatedPortTyping</code> is a <code>FeatureTyping</code> whose <code>type</code> is a <code>ConjugatedPortDefinition</code>. (This relationship is intended to be an abstract-syntax marker for a special surface notation for conjugated typing of ports.)</p>
-
-
-
- <p>The <code>portDefinition</code> of a <code>ConjugatedPortTyping</code> is the <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of the <code>ConjugatedPortTyping</code>.</p>
-
-
- OCL2.0
- portDefinition = conjugatedPortDefinition.originalPortDefinition
-
-
-
-
-
-
-
- <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</code>.</p>
-
-
-
-
-
-
- <p>The <code>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p>
-
-
-
-
-
-
-
-
-
- <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p>
-
-
-
-
-
-
-
-
-
-
- <p>An <code>AttributeDefinition</code> is a <code>Definition</code> and a <code>DataType</code> of information about a quality or characteristic of a system or part of a system that has no independent identity other than its value. All <code>features</code> of an <code>AttributeDefinition</code> must be referential (non-composite).</p>
-
-<p>As a <code>DataType</code>, an <code>AttributeDefinition</code> must specialize, directly or indirectly, the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p>
-
-
-
- <p>All <code>features</code> of an <code>AttributeDefinition</code> must be non-composite.</p>
-
-
- OCL2.0
- feature->forAll(not isComposite)
-
-
-
-
-
-
-
-
-
-
- <p>The AttributeUsages that are typed by a certain DataType.</p>
-
-
-
-
-
-
-
- <p>An <code>AttributeUsage</code> is a <code>Usage</code> whose type is a <code>DataType</code>. Nominally, if the type is an <code>AttributeDefinition</code>, an <code>AttributeUsage</code> is a usage of a <code>AttributeDefinition</code> to represent the value of some system quality or characteristic. However, other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries. An <code>AttributeUsage</code> itself as well as all its nested <code>features</code> must be referential (non-composite).</p>
-
-<p>An <code>AttributeUsage</code> must specialize, directly or indirectly, the base <code>Feature</code> <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p>
-
-
-
- <p>An <code>AttributeUsage</code> is always referential.</p>
-
-
- OCL2.0
- isReference
-
-
-
-
- <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p>
-
-
- OCL2.0
- feature->forAll(not isComposite)
-
-
-
-
- <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::dataValues')
-
-
-
-
-
- <p>The <code>DataTypes</code> that are the types of this <code>AttributeUsage</code>. Nominally, these are <code>AttributeDefinitions</code>, but other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
- <p>Always true for an <code>AttributeUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AcceptActionUsage</code> is an <code>ActionUsage</code> that specifies the acceptance of an <em><code>incomingTransfer</code></em> from the <code><em>Occurrence</em></code> given by the result of its <code>receiverArgument</code> Expression. (If no <code>receiverArgument</code> is provided, the default is the <em><code>this</code></em> context of the AcceptActionUsage.) The payload of the accepted <em><code>Transfer</em></code> is output on its <code>payloadParameter</code>. Which <em><code>Transfers</em></code> may be accepted is determined by conformance to the typing and (potentially) binding of the <code>payloadParameter</code>.</p>
-
-
-
-
- <p>An <code>AcceptUsageAction</code> must have at least two input <code>parameters</code>, corresponding to its <em><code>payload</code></em> and <em><code>receiver</code>, respectively (even if they have no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p>
-
-
- OCL2.0
- inputParameters()->size() >= 2
-
-
-
-
- <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p>
-
-
- OCL2.0
- receiverArgument = argument(2)
-
-
-
-
- <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- payloadArgument = argument(1)
-
-
-
-
- <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p>
-
-
- OCL2.0
- payloadParameter =
- if parameter->isEmpty() then null
- else parameter->first() endif
-
-
-
-
- <p>An <code>AcceptActionUsage</code> that is not the <code>triggerAction</code> of a <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::acceptActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- not isTriggerAction() implies
- specializesFromLibrary('Actions::acceptActions')
-
-
-
-
- <p>A composite <code>AcceptActionUsage</code> that is a subaction usage, but is <em>not</em> the <code>triggerAction</code> of a <code>TransitionUsage</code>, must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::acceptSubactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() and not isTriggerAction() implies
- specializesFromLibrary('Actions::Action::acceptSubactions')
-
-
-
-
- <p>An <code>AcceptActionUsage</code> that is the <code>triggerAction</code> of <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::TransitionAction::accepter</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isTriggerAction() implies
- specializesFromLibrary('Actions::TransitionAction::accepter')
-
-
-
-
- <p>If the <code>payloadArgument</code> of an <code>AcceptActionUsage</code> is a <code>TriggerInvocationExpression</code>, then the <code>AcceptActionusage</code> must have an <code>ownedFeature</code> that is a <code>BindingConnector</code> between its <code><em>receiver</em></code> <code>parameter</code> and the <code><em>receiver</em></code> <code>parameter</code> of the <code>TriggerInvocationExpression</code>.</p>
-
-
- OCL2.0
- payloadArgument <> null and
-payloadArgument.oclIsKindOf(TriggerInvocationExpression) implies
- let invocation : Expression =
- payloadArgument.oclAsType(Expression) in
- parameter->size() >= 2 and
- invocation.parameter->size() >= 2 and
- ownedFeature->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(parameter->at(2)) and
- b.relatedFeatures->includes(invocation.parameter->at(2)))
-
-
-
-
-
- <p>An <code>Expression</code> whose <code>result</code> is bound to the <em><code>receiver</code></em> input <code>parameter</code> of this <code>AcceptActionUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>nestedReference</code> of this <code>AcceptActionUsage</code> that redefines the <code>payload</code> output <code>parameter</code> of the base <code>AcceptActionUsage</code> <em><code>AcceptAction</code></em> from the Systems Model Library.</p>
-
-
-
-
-
-
-
-
- <p>An <code>Expression</code> whose <code>result</code> is bound to the <code><em>payload</em></code> <code>parameter</code> of this <code>AcceptActionUsage</code>. If provided, the <code>AcceptActionUsage</code> will only accept a <code><em>Transfer</em></code> with exactly this <code><em>payload</em></code>.</p>
-
-
-
-
-
-
-
-
- <p>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</code>.</p>
-
-
-
- OCL2.0
- owningType <> null and
-owningType.oclIsKindOf(TransitionUsage) and
-owningType.oclAsType(TransitionUsage).triggerAction->includes(self)
-
-
-
-
-
-
-
-
-
-
- <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SendActionUsage</code> is an <code>ActionUsage</code> that specifies the sending of a payload given by the result of its <code>payloadArgument</code> <code>Expression</code> via a <em><code>MessageTransfer</code></em> whose <em><code>source</code></em> is given by the result of the <code>senderArgument</code> <code>Expression</code> and whose <code>target</code> is given by the result of the <code>receiverArgument</code> <code>Expression</code>. If no <code>senderArgument</code> is provided, the default is the <em><code>this</code></em> context for the action. If no <code>receiverArgument</code> is given, then the receiver is to be determined by, e.g., outgoing <em><code>Connections</code></em> from the sender.</p>
-
-
-
-
- <p>The <code>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</code>.</p>
-
-
- OCL2.0
- senderArgument = argument(2)
-
-
-
-
- <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- payloadArgument = argument(1)
-
-
-
-
- <p>A <code>SendActionUsage</code> must have at least three owned input <code>parameters</code>, corresponding to its <em><code>payload</code></em>, <em><code>sender</code></em> and <em><code>receiver</code></em>, respectively (whether or not they have <code>FeatureValues</code>).</p>
-
-
- OCL2.0
- inputParameters()->size() >= 3
-
-
-
-
- <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p>
-
-
- OCL2.0
- receiverArgument = argument(3)
-
-
-
-
- <p>A composite <code>SendActionUsage</code> that is a subaction must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::sendSubactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::acceptSubactions')
-
-
-
-
- <p>A <code>SendActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::sendActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::sendActions')
-
-
-
-
-
- <p>An <code>Expression</code> whose result is bound to the <em><code>receiver</code></em> input parameter of this <code>SendActionUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>An <code>Expression</code> whose result is bound to the <code><em>payload</em></code> input parameter of this <code>SendActionUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>An <code>Expression</code> whose result is bound to the <em><code>sender</code></em> input parameter of this <code>SendActionUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>PerformActionUsage</code> is an <code>ActionUsage</code> that represents the performance of an <code>ActionUsage</code>. Unless it is the <code>PerformActionUsage</code> itself, the <code>ActionUsage</code> to be performed is related to the <code>PerformActionUsage</code> by a <code>ReferenceSubsetting</code> relationship. A <code>PerformActionUsage</code> is also an <code>EventOccurrenceUsage</code>, with its <code>performedAction</code> as the <code>eventOccurrence</code>.</p>
-
-
-
- <p>If a <code>PerformActionUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(ActionUsage)
-
-
-
-
- <p>If a <code>PerformActionUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>ActionUsage</code> <code><em>Parts::Part::performedActions</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(PartDefinition) or
- owningType.oclIsKindOf(PartUsage)) implies
- specializesFromLibrary('Parts::Part::performedActions')
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> to be performed by this <code>PerformedActionUsage</code>. It is the <code>eventOccurrence</code> of the <code>PerformActionUsage</code> considered as an <code>EventOccurrenceUsage</code>, which must be an <code>ActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The naming <code>Feature</code> of a <code>PerformActionUsage</code> is its <code>performedAction</code>, if this is different than the <code>PerformActionUsage</code>. If the <code>PerformActionUsage</code> is its own <code>performedAction</code>, then the naming <code>Feature</code> is the same as the usual default for a <code>Usage</code>.</p>
-
-
-
- OCL2.0
- if performedAction <> self then performedAction
-else self.oclAsType(Usage).namingFeature()
-endif
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ForkNode</code> is a <code>ControlNode</code> that must be followed by successor <code>Actions</code> as given by all its outgoing <code>Successions</code>.</p>
-
-
-
- <p>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->size() <= 1
-
-
-
-
- <p>A <code>ForkNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::forks')
-
-
-
-
-
-
- <p>A <code>JoinNode</code> is a <code>ControlNode</code> that waits for the completion of all the predecessor <code>Actions</code> given by incoming <code>Successions</code>.</p>
-
-
-
- <p>A <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectByKind(Succession)->size() <= 1
-
-
-
-
- <p>A <code>JoinNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::joins</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::join')
-
-
-
-
-
-
- <p>A <code>ControlNode</code> is an <code>ActionUsage</code> that does not have any inherent behavior but provides constraints on incoming and outgoing <code>Successions</code> that are used to control other <code>Actions</code>. A <code>ControlNode</code> must be a composite owned <code>usage</code> of an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p>
-
-
-
-
- <p>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectByKind(Succession)->
- collect(connectorEnd->at(1).multiplicity)->
- forAll(sourceMult |
- multiplicityHasBounds(sourceMult, 1, 1))
-
-
-
-
- <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(ActionDefinition) or
- owningType.oclIsKindOf(ActionUsage))
-
-
-
-
- <p>All incoming <code>Successions</code> to a <code>ControlNode</code> must have a target <code>multiplicity</code> of <code>1..1</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->
- collect(connectorEnd->at(2).multiplicity)->
- forAll(targetMult |
- multiplicityHasBounds(targetMult, 1, 1))
-
-
-
-
- <p>A <code>ControlNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::control</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Action::Action::controls')
-
-
-
-
- <p>A <code>ControlNode</code> must be composite.</p>
-
-
- OCL2.0
- isComposite
-
-
-
-
-
- <p>Check that the given <code>Multiplicity</code> has <code>lowerBound</code> and <code>upperBound</code> expressions that are model-level evaluable to the given <code>lower</code> and <code>upper</code> values.</p>
-
-
-
- OCL2.0
- mult <> null and
-if mult.oclIsKindOf(MultiplicityRange) then
- mult.oclAsType(MultiplicityRange).hasBounds(lower, upper)
-else
- mult.allSuperTypes()->exists(
- oclisKindOf(MultiplicityRange) and
- oclAsType(MultiplicityRange).hasBounds(lower, upper)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>An <code>ActionUsage</code> is a <code>Usage</code> that is also a <code>Step</code>, and, so, is typed by a <code>Behavior</code>. Nominally, if the type is an <code>ActionDefinition</code>, an <code>ActionUsage</code> is a <code>Usage</code> of that <code>ActionDefinition</code> within a system. However, other kinds of kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p>
-
-
-
-
- <p>A composite <code>ActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::subactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::subactions')
-
-
-
-
- <p>An <code>ActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::actions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::actions')
-
-
-
-
- <p>A composite <code>ActionUsage</code> whose <code>owningType</code> is <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Parts::Part::ownedActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(PartDefinition) or
- owningType.oclIsKindOf(PartUsage)) implies
- specializesFromLibrary('Parts::Part::ownedActions')
-
-
-
-
- <p>An <code>ActionUsage</code> that is the <code><em>entry</em></code>, <code><em>do</em></code>, or <code><em>exit</em></code> <code><em>Action</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code> must redefine the <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code> <code>feature</code>, respectively, of the <code>StateDefinition</code> <code><em>States::StateAction</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies
- let kind : StateSubactionKind =
- owningFeatureMembership.oclAsType(StateSubactionMembership).kind in
- if kind = StateSubactionKind::entry then
- redefinesFromLibrary('States::StateAction::entryAction')
- else if kind = StateSubactionKind::do then
- redefinesFromLibrary('States::StateAction::doAction')
- else
- redefinesFromLibrary('States::StateAction::exitAction')
- endif endif
-
-
-
-
-
-
-
-
- <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>ActionUsage</code>. Nominally, these would be <code>ActionDefinitions</code>, but other kinds of Kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
-
-
-
- <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</code>.</p>
-
-
-
- OCL2.0
- input->select(f | f.owner = self)
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code>.</p>
-
-
-
- OCL2.0
- if inputParameters()->size() < i then null
-else inputParameters()->at(i)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>i</code>-th argument <code>Expression</code> of an <code>ActionUsage</code>, defined as the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> of the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code> or the <code>i</code>-th owned input <code>parameter</code> has no <code>FeatureValue</code>.</p>
-
-
-
- OCL2.0
- if inputParameter(i) = null then null
-else
- let featureValue : Sequence(FeatureValue) = inputParameter(i).
- ownedMembership->select(oclIsKindOf(FeatureValue)) in
- if featureValue->isEmpty() then null
- else featureValue->at(1).value
- endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Check if this <code>ActionUsage</code> is composite and has an <code>owningType</code> that is an <code>ActionDefinition</code> or <code>ActionUsage</code> but is <em>not</em> the <code>entryAction</code> or <code>exitAction</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code>. If so, then it represents an <code><em>Action</em></code> that is a <code><em>subaction</em></code> of another <code><em>Action</em></code>.</p>
-
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ActionDefinition) or
- owningType.oclIsKindOf(ActionUsage)) and
-(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies
- owningFeatureMembership.oclAsType(StateSubactionMembership).kind =
- StateSubactionKind::do)
-
-
-
-
-
-
-
-
-
-
- <p>The Activities that feature a certain ActionUsage.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p>
-
-
-
- <p>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->size() <= 1
-
-
-
-
- <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must have a target <code>multiplicity</code> of <code>0..1</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectAsKind(Succession)->
- collect(connectorEnd->at(2))->
- forAll(targetMult |
- multiplicityHasBounds(targetMult, 0, 1))
-
-
-
-
- <p>A <code>DecisionNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::decisions')
-
-
-
-
- <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must subset the inherited <em><code>outgoingHBLink</code></em> <code>feature</code> of the <code>DecisionNode</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectByKind(Succession)->
- forAll(subsetsChain(self,
- resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink')))
-
-
-
-
-
-
- <p>A <code>MergeNode</code> is a <code>ControlNode</code> that asserts the merging of its incoming <code>Successions</code>. A <code>MergeNode</code> may have at most one outgoing <code>Successions</code>.</p>
-
-
-
- <p>A <code>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectAsKind(Succession)->size() <= 1
-
-
-
-
- <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must have a source <code>multiplicity</code> of <code>0..1</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->
- collect(connectorEnd->at(1))->
- forAll(sourceMult |
- multiplicityHasBounds(sourceMult, 0, 1))
-
-
-
-
- <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must subset the inherited <em><code>incomingHBLink</code></em> <code>feature</code> of the <code>MergeNode</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->
- forAll(subsetsChain(self,
- resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink')))
-
-
-
-
- <p>A <code>MergeNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::merges</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::merges')
-
-
-
-
-
-
-
- <p>The ActionUsages being typed by a certain Behavior.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>ActionDefinition</code> is a <code>Definition</code> that is also a <code>Behavior</code> that defines an <em><code>Action</code></em> performed by a system or part of a system.</p>
-
-
-
- <p>An <code>ActionDefinition</code> must directly or indirectly specialize the <code>ActionDefinition</code> <em><code>Actions::Action</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action')
-
-
-
-
- <p> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- action = usage->selectByKind(ActionUsage)
-
-
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that are <code>steps</code> in this <code>ActionDefinition</code>, which define the actions that specify the behavior of the <code>ActionDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>IfActionUsage</code> is an <code>ActionUsage</code> that specifies that the <code>thenAction</code> <code>ActionUsage</code> should be performed if the result of the <code>ifArgument</code> <code>Expression</code> is true. It may also optionally specify an <code>elseAction</code> <code>ActionUsage</code> that is performed if the result of the <code>ifArgument</code> is false.</p>
-
-
-
- <p>The <code>thenAction</code> of an <code>ifActionUsage</code> is its second <code>parameter</code>, which must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- thenAction =
- let parameter : Feature = inputParameter(2) in
- if parameter <> null and parameter.oclIsKindOf(ActionUsage) then
- parameter.oclAsType(ActionUsage)
- else
- null
- endif
-
-
-
-
- <p>A composite <code>IfActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::ifSubactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::ifSubactions')
-
-
-
-
- <p>A <code>IfActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::ifThenActions</code></em> from the Systems Model Library. If it has an <code>elseAction</code>, then it must directly or indirectly specialize <em><code>Actions::ifThenElseActions</code></em>.
-
-
- OCL2.0
- if elseAction = null then
- specializesFromLibrary('Actions::ifThenActions')
-else
- specializesFromLibrary('Actions::ifThenElseActions')
-endif
-
-
-
-
- <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p>
-
-
- OCL2.0
- ifArgument =
- let parameter : Feature = inputParameter(1) in
- if parameter <> null and parameter.oclIsKindOf(Expression) then
- parameter.oclAsType(Expression)
- else
- null
- endif
-
-
-
-
- <p>The <code>elseAction</code> of an <code>ifActionUsage</code> is its third <code>parameter</code>, if there is one, which must then be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- elseAction =
- let parameter : Feature = inputParameter(3) in
- if parameter <> null and parameter.oclIsKindOf(ActionUsage) then
- parameter.oclAsType(ActionUsage)
- else
- null
- endif
-
-
-
-
- <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p>
-
-
- OCL2.0
- inputParameters()->size() >= 2
-
-
-
-
-
- <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is false. It is the (optional) third <code>parameter</code> of the <code>IfActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is true. It is the second <code>parameter<code> of the <code>IfActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result determines whether the <code>thenAction</code> or (optionally) the <code>elseAction</code> is performed. It is the first <code>parameter<code> of the <code>IfActionUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p>
-
-
-
-
-
-
-
-
- <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>LoopActionUsage</code> is an <code>ActionUsage</code> that specifies that its <code>bodyAction</code> should be performed repeatedly. Its subclasses <code>WhileLoopActionUsage</code> and <code>ForLoopActionUsage</code> provide different ways to determine how many times the <code>bodyAction</code> should be performed.</p>
-
-
-
- <p>The <code>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p>
-
-
- OCL2.0
- bodyAction =
- let parameter : Feature = inputParameter(2) in
- if parameter <> null and parameter.oclIsKindOf(Action) then
- parameter.oclAsType(Action)
- else
- null
- endif
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> to be performed repeatedly by the <code>LoopActionUsage</code>. It is the second <code>parameter</code> of the <code>LoopActionUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ForLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that its <code>bodyAction</code> <code>ActionUsage</code> should be performed once for each value, in order, from the sequence of values obtained as the result of the <code>seqArgument</code> <code>Expression</code>, with the <code>loopVariable</code> set to the value for each iteration.</p>
-
-
-
- <p>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- seqArgument = argument(1)
-
-
-
-
-
- <p>A composite <code>ForLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forLoops</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::forLoops')
-
-
-
-
- <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> must redefine the <code>ActionUsage</code> <code><em>Actions::ForLoopAction::var</em></code>.</p>
-
-
- OCL2.0
- loopVariable <> null and
-loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var')
-
-
-
-
- <p>A <code>ForLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::forLoopActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::forLoopActions')
-
-
-
-
- <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</code>.</p>
-
-
- OCL2.0
- loopVariable =
- if ownedFeature->isEmpty() or
- not ownedFeature->first().oclIsKindOf(ReferenceUsage) then
- null
- else
- ownedFeature->first().oclAsType(ReferenceUsage)
- endif
-
-
-
-
- <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p>
-
-
- OCL2.0
- ownedFeature->notEmpty() and
-ownedFeature->at(1).oclIsKindOf(ReferenceUsage)
-
-
-
-
-
- <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p>
-
-
- OCL2.0
- inputParameters()->size() = 2
-
-
-
-
-
- <p>The <code>Expression</code> whose result provides the sequence of values to which the <code>loopVariable</code> is set for each iterative performance of the <code>bodyAction</code>. It is the <code>Expression</code> whose <code>result</code> is bound to the <em><code>seq</code></em> <code>input</code> <code>parameter</code> of this <code>ForLoopActionUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ownedFeature</code> of this <co>ForLoopActionUsage</code> that acts as the loop variable, which is assigned the successive values of the input sequence on each iteration. It is the <code>ownedFeature</code> that redefines <em><code>ForLoopAction::var</code></em>.</p>
-
-
-
-
-
-
-
- <p>An <code>AssignmentActionUsage</code> is an <code>ActionUsage</code> that is defined, directly or indirectly, by the <code>ActionDefinition</code> <em><code>AssignmentAction</code></em> from the Systems Model Library. It specifies that the value of the <code>referent</code> <code>Feature</code>, relative to the target given by the result of the <code>targetArgument</code> <code>Expression</code>, should be set to the result of the <code>valueExpression</code>.</p>
-
-
-
-
- <p>An <code>AssignmentActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::assignmentActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::assignmentActions')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt</em></code>.</p>
-
-
- OCL2.0
- let targetParameter : Feature = inputParameter(1) in
-targetParameter <> null and
-targetParameter.ownedFeature->notEmpty() and
-targetParameter.ownedFeature->first().
- redefines('AssignmentAction::target::startingAt')
-
-
-
-
- <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p>
-
-
- OCL2.0
- valueExpression = argument(2)
-
-
-
-
- <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- targetArgument = argument(1)
-
-
-
-
- <p>A composite <code>AssignmentActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::assignments</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::assignments')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt::accessedFeature</em></code>.</p>
-
-
- OCL2.0
- let targetParameter : Feature = inputParameter(1) in
-targetParameter <> null and
-targetParameter.ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->first().
- redefines('AssigmentAction::target::startingAt::accessedFeature')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine the <code>referent</code> of the <code>AssignmentActionUsage</code>.</p>
-
-
- OCL2.0
- let targetParameter : Feature = inputParameter(1) in
-targetParameter <> null and
-targetParameter.ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->first().redefines(referent)
-
-
-
-
- <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p>
-
-
- OCL2.0
- referent =
- let unownedFeatures : Sequence(Feature) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement->
- selectByKind(Feature) in
- if unownedFeatures->isEmpty() then null
- else unownedFeatures->first().oclAsType(Feature)
- endif
-
-
-
-
- <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code>.</p>
-
-
- OCL2.0
- ownedMembership->exists(
- not oclIsKindOf(OwningMembership) and
- memberElement.oclIsKindOf(Feature))
-
-
-
-
- <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p>
-
-
- OCL2.0
- referent <> null implies referent.featureTarget.mayTimeVary
-
-
-
-
-
- <p>The <code>Expression</code> whose value is an occurrence in the domain of the <code>referent</code> <code>Feature</code>, for which the value of the <code>referent</code> will be set to the result of the <code>valueExpression</code> by this <code>AssignmentActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result is to be assigned to the <code>referent</code> <code>Feature</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> whose value is to be set.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>WhileLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that the <code>bodyAction</code> <code>ActionUsage</code> should be performed repeatedly while the result of the <code>whileArgument</code> <code>Expression</code> is true or until the result of the <code>untilArgument</code> <code>Expression</code> (if provided) is true. The <code>whileArgument</code> <code>Expression</code> is evaluated before each (possible) performance of the <code>bodyAction</code>, and the <code>untilArgument</code> <code>Expression</code> is evaluated after each performance of the <code>bodyAction</code>.</p>
-
-
-
- <p>A composite <code>WhileLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::whileLoops</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::whileLoops')
-
-
-
-
- <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its third input <code>parameter</code>, which, if it exists, must be an <code>Expression</code>.</p>
-
-
- OCL2.0
- untilArgument =
- let parameter : Feature = inputParameter(3) in
- if parameter <> null and parameter.oclIsKindOf(Expression) then
- parameter.oclAsType(Expression)
- else
- null
- endif
-
-
-
-
-
- <p>A <code>WhileLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::whileLoopActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::whileLoopActions')
-
-
-
-
- <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its first input <code>parameter</code>, which must be an <code>Expression</code>.</p>
-
-
- OCL2.0
- whileArgument =
- let parameter : Feature = inputParameter(1) in
- if parameter <> null and parameter.oclIsKindOf(Expression) then
- parameter.oclAsType(Expression)
- else
- null
- endif
-
-
-
-
-
- <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p>
-
-
- OCL2.0
- inputParameters()->size() >= 2
-
-
-
-
-
- <p>The <code>Expression</code> whose result, if true, determines that the <code>bodyAction</code> should continue to be performed. It is the first owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result, if false, determines that the <code>bodyAction</code> should continue to be performed. It is the (optional) third owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
- The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>.
-
-
-
-
-
-
-
-
- <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p>
-
-
-
-
-
-
-
- <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p>
-
-
-
- <p>Indicates a <em>change trigger</em>, corresponding to the <em><code>TriggerWhen</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p>
-
-
-
-
- <p>Indicates an <em>absolute time trigger</em>, corresponding to the <em><code>TriggerAt</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p>
-
-
-
-
- <p>Indicates a <em>relative time trigger</em>, corresponding to the <em><code>TriggerAfter</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the <code>Kernel Semantic Library.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>TriggerInvocationExpression</code> is an <code>InvocationExpression</code> that invokes one of the trigger <code>Functions</code> from the Kernel Semantic Library <code><em>Triggers<em></code> package, as indicated by its <code>kind</code>.</p>
-
-
-
- <p>If a <code>TriggerInvocationExpression</code> has <code>kind = after</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Quantities::ScalarQuantityValue</code></em> and a <code>feature</code> that directly or indirectly redefines <em><code>Quantities::TensorQuantityValue::mRef</code></em> and directly or indirectly specializes <em><code>ISQBase::DurationUnit</code></em>.</p>
-
-
- OCL2.0
- kind = TriggerKind::after implies
- argument->notEmpty() and
- argument->at(1).result.specializesFromLibrary('Quantities::ScalarQuantityValue') and
- let mRef : Element =
- resolveGlobal('Quantities::TensorQuantityValue::mRef').ownedMemberElement in
- argument->at(1).result.feature->
- select(ownedRedefinition.redefinedFeature->
- closure(ownedRedefinition.redefinedFeature)->
- includes(mRef))->
- exists(specializesFromLibrary('ISQBase::DurationUnit'))
-
-
-
-
- <p>If a <code>TriggerInvocationExpression</code> has <code>kind = at</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Time::TimeInstantValue</code></em>.</p>
-
-
- OCL2.0
- kind = TriggerKind::at implies
- argument->notEmpty() and
- argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue')
-
-
-
-
- <p>If a <code>TriggerInvocationExpression</code> has <code>kind = when</code>, then it must have an <code>argument</code> that is a <code>FeatureReferenceExpression</code> whose <code>referent</code> is an <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>ScalarValues::Boolean</code></em>.</p>
-
-
- OCL2.0
- kind = TriggerKind::when implies
- argument->notEmpty() and
- argument->at(1).oclIsKindOf(FeatureReferenceExpression) and
- let referent : Feature =
- argument->at(1).oclAsType(FeatureReferenceExpression).referent in
- referent.oclIsKindOf(Expression) and
- referent.oclAsType(Expression).result.specializesFromLibrary('ScalarValues::Boolean')
-
-
-
-
-
-
-
- <p>Indicates which of the <code>Functions</code> from the <code><em>Triggers</em></code> model in the Kernel Semantic Library is to be invoked by this <code>TriggerInvocationExpression</code>.</p>
-
-
-
-
- <p>Return one of the <code>Functions</code> <em><code>TriggerWhen</code></em>, <em><code>TriggerAt</code></em> or <em><code>TriggerAfter</code></em>, from the Kernel Semantic Library <em><code>Triggers</code></em> package, depending on whether the <code>kind</code> of this <code>TriggerInvocationExpression</code> is <code>when</code>, <code>at</code> or <code>after</code>, respectively.</p>
-
-
-
- OCL2.0
- resolveGlobal(
- if kind = TriggerKind::when then
- 'Triggers::TriggerWhen'
- else if kind = TriggerKind::at then
- 'Triggers::TriggerAt'
- else
- 'Triggers::TriggerAfter'
- endif endif
-).memberElement.oclAsType(Type)
-
-
-
-
-
-
-
-
-
-
-
- <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TerminateActionUsage</code> is an <code>ActionUsage</code> that directly or indirectly specializes the <code>ActionDefinition</code> <em><code>TerminateAction</code></em> from the Systems Model Library, which causes a given <em><code>terminatedOccurrence</code></em> to end during its performance. By default, the <code>terminatedOccurrence</code> is the featuring instance (<em><code>that</code></em>) of the performance of the <code>TerminateActionUsage</code>, generally the performance of its immediately containing <code>ActionDefinition</code> or <code>ActionUsage</code>.</p>
-
-
-
- <p>A <code>TerminateActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::terminateActions</code></em> from the Systems Modeling Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::terminateActions')
-
-
-
-
- <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p>
-
-
- OCL2.0
- terminatedOccurrenceArgument = argument(1)
-
-
-
-
- <p>A composite <code>TerminateActionUsage</code> that is a subaction must must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::terminateSubactions</code></em> from the Systems Modeling Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::terminateSubactions')
-
-
-
-
-
- <p>The <code>Expression</code> that is the <code>featureValue</code> of the <em><code>terminateOccurrence</code></em> <code>parameter</code> of this <code>TerminateActionUsage</code>.
-
-
-
-
-
-
-
-
-
- <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Definitions that have a certain Usage as a <code>flow</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Definitions that feature a certain Usage.</p>
-
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p>
-
-
-
-
-
-
-
- <p>A <code>Definition</code> is a <code>Classifier</code> of <code>Usages</code>. The actual kinds of <code>Definition</code> that may appear in a model are given by the subclasses of <code>Definition</code> (possibly as extended with user-defined <em><code>SemanticMetadata</code></em>).</p>
-
-<p>Normally, a <code>Definition</code> has owned Usages that model <code>features</code> of the thing being defined. A <code>Definition</code> may also have other <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Definition</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p>
-
-<p>However, if a <code>Definition</code> has <code>isVariation</code> = <code>true</code>, then it represents a <em>variation point</em> <code>Definition</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Definition</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Definition</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for an abstract <code>Usage</code> of the variation point <code>Definition</code>.</p>
-
-
-
-
- <p>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p>
-
-
- OCL2.0
- isVariation implies ownedFeatureMembership->isEmpty()
-
-
-
-
- <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p>
-
-
- OCL2.0
- variant = variantMembership.ownedVariantUsage
-
-
-
-
- <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p>
-
-
- OCL2.0
- variantMembership = ownedMembership->selectByKind(VariantMembership)
-
-
-
-
- <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</code>.</p>
-
-
- OCL2.0
- isVariation implies
- not ownedSpecialization.specific->exists(
- oclIsKindOf(Definition) and
- oclAsType(Definition).isVariation)
-
-
-
-
- <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- usage = feature->selectByKind(Usage)
-
-
-
-
- <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- directedUsage = directedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- ownedUsage = ownedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedAttributes</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p>
-
-
- OCL2.0
- ownedAttribute = ownedUsage->selectByKind(AttributeUsage)
-
-
-
-
- <p>The <code>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p>
-
-
- OCL2.0
- ownedReference = ownedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p>
-
-
- OCL2.0
- ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage)
-
-
-
-
- <p>The <code>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p>
-
-
- OCL2.0
- ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage)
-
-
-
-
- <p>The <code>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p>
-
-
- OCL2.0
- ownedItem = ownedUsage->selectByKind(ItemUsage)
-
-
-
-
- <p>The <code>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p>
-
-
- OCL2.0
- ownedPart = ownedUsage->selectByKind(PartUsage)
-
-
-
-
- <p>The <code>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p>
-
-
- OCL2.0
- ownedPort = ownedUsage->selectByKind(PortUsage)
-
-
-
-
- <p>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p>
-
-
- OCL2.0
- ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage)
-
-
-
-
- <p>The <code>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p>
-
-
- OCL2.0
- ownedFlow = ownedUsage->selectByKind(FlowConnectionUsage)
-
-
-
-
- <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p>
-
-
- OCL2.0
- ownedInterface = ownedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedAllocations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p>
-
-
- OCL2.0
- ownedAllocation = ownedUsage->selectByKind(AllocationUsage)
-
-
-
-
- <p>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- ownedAction = ownedUsage->selectByKind(ActionUsage)
-
-
-
-
- <p>The <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p>
-
-
- OCL2.0
- ownedState = ownedUsage->selectByKind(StateUsage)
-
-
-
-
- <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p>
-
-
- OCL2.0
- ownedTransition = ownedUsage->selectByKind(TransitionUsage)
-
-
-
-
- <p>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p>
-
-
- OCL2.0
- ownedCalculation = ownedUsage->selectByKind(CalculationUsage)
-
-
-
-
- <p>The <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p>
-
-
- OCL2.0
- ownedConstraint = ownedUsage->selectByKind(ConstraintUsage)
-
-
-
-
- <p>The <code>ownedRequirements</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p>
-
-
- OCL2.0
- ownedRequirement = ownedUsage->selectByKind(RequirementUsage)
-
-
-
-
- <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p>
-
-
- OCL2.0
- ownedConcern = ownedUsage->selectByKind(ConcernUsage)
-
-
-
-
- <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p>
-
-
- OCL2.0
- ownedCase = ownedUsage->selectByKind(CaseUsage)
-
-
-
-
- <p>The <code>ownedAnalysisCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p>
-
-
- OCL2.0
- ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage)
-
-
-
-
- <p>The <code>ownedValidationCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p>
-
-
- OCL2.0
- ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage)
-
-
-
-
- <p>The <code>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p>
-
-
- OCL2.0
- ownedUseCase = ownedUsage->selectByKind(UseCaseUsage)
-
-
-
-
- <p>The <code>ownedViews</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p>
-
-
- OCL2.0
- ownedView = ownedUsage->selectByKind(ViewUsage)
-
-
-
-
- <p>The <code>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p>
-
-
- OCL2.0
- ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage)
-
-
-
-
- <p>The <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p>
-
-
- OCL2.0
- ownedRendering = ownedUsage->selectByKind(RenderingUsage)
-
-
-
-
- <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p>
-
-
- OCL2.0
- ownedMetadata = ownedUsage->selectByKind(MetadataUsage)
-
-
-
-
- <p>If a <code>Definition</code> is a variation, then it must be abstract.</p>
-
-
- OCL2.0
- isVariation implies isAbstract
-
-
-
-
-
-
-
- <p>Whether this <code>Definition</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Definition</code> must be <code>VariantMemberships</code>.</p>
-
-
-
-
-
- <p>The <code>Usages</code> which represent the variants of this <code>Definition</code> as a variation point <code>Definition</code>, if <code>isVariation</code> = true. If <code>isVariation = false</code>, the there must be no <code>variants</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberships</code> of this <code>Definition</code> that are <code>VariantMemberships</code>. If <code>isVariation</code> = true, then this must be all <code>ownedMemberships</code> of the <code>Definition</code>. If <code>isVariation</code> = false, then <code>variantMembership</code>must be empty.</p>
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>features</code> of this <code>Definition</code> (not necessarily owned).</p>
-
-
-
-
-
-
-
- <p>The <code>usages</code> of this <code>Definition</code> that are <code>directedFeatures</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ReferenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>AttributeUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p>
-
-
-
-
-
-
- <p>The <code>EnumerationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p>
-
-
-
-
-
-
- <p>The <code>OccurrenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ItemUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>PartUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>PortUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConnectorAsUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p>
-
-
-
-
-
-
- <p>The <code>FlowUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>InterfaceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>AllocationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>MetadataUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ItemUsages being typed by a certain Structure.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedAction</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedPort</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Usage</code> is a usage of a <code>Definition</code>.</p>
-
-<p>A <code>Usage</code> may have <code>nestedUsages</code> that model <code>features</code> that apply in the context of the <code>owningUsage</code>. A <code>Usage</code> may also have <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Usage</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p>
-
-<p>However, if a <code>Usage</code> has <code>isVariation = true</code>, then it represents a <em>variation point</em> <code>Usage</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Usage</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Usage</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for the variation point <code>Usage</code>.</p>
-
-
-
- <p>The <code>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p>
-
-
- OCL2.0
- variant = variantMembership.ownedVariantUsage
-
-
-
-
- <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p>
-
-
- OCL2.0
- variantMembership = ownedMembership->selectByKind(VariantMembership)
-
-
-
-
- <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p>
-
-
- OCL2.0
- isVariation implies ownedFeatureMembership->isEmpty()
-
-
-
-
- <p>A <code>Usage</code> is referential if it is not composite.</p>
-
-
- OCL2.0
- isReference = not isComposite
-
-
-
-
- <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p>
-
-
- OCL2.0
- owningVariationUsage <> null implies
- specializes(owningVariationUsage)
-
-
-
-
- <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</p>
-
-
- OCL2.0
- isVariation implies
- not ownedSpecialization.specific->exists(
- oclIsKindOf(Definition) and
- oclAsType(Definition).isVariation or
- oclIsKindOf(Usage) and
- oclAsType(Usage).isVariation)
-
-
-
-
- <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p>
-
-
- OCL2.0
- owningVariationDefinition <> null implies
- specializes(owningVariationDefinition)
-
-
-
-
- <p>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- directedUsage = directedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- nestedAction = nestedUsage->selectByKind(ActionUsage)
-
-
-
-
- <p>The <code>ownedAllocations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p>
-
-
- OCL2.0
- nestedAllocation = nestedUsage->selectByKind(AllocationUsage)
-
-
-
-
- <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p>
-
-
- OCL2.0
- nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage)
-
-
-
-
- <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p>
-
-
- OCL2.0
- nestedAttribute = nestedUsage->selectByKind(AttributeUsage)
-
-
-
-
- <p>The <code>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p>
-
-
- OCL2.0
- nestedCalculation = nestedUsage->selectByKind(CalculationUsage)
-
-
-
-
- <p>The <code>ownedCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p>
-
-
- OCL2.0
- nestedCase = nestedUsage->selectByKind(CaseUsage)
-
-
-
-
- <p>The <code>ownedConcerns</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p>
-
-
- OCL2.0
- nestedConcern = nestedUsage->selectByKind(ConcernUsage)
-
-
-
-
- <p>The <code>ownedConnections</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p>
-
-
- OCL2.0
- nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage)
-
-
-
-
- <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p>
-
-
- OCL2.0
- nestedConstraint = nestedUsage->selectByKind(ConstraintUsage)
-
-
-
-
- <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p>
-
-
- OCL2.0
- ownedNested = nestedUsage->selectByKind(EnumerationUsage)
-
-
-
-
- <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p>
-
-
- OCL2.0
- nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage)
-
-
-
-
- <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p>
-
-
- OCL2.0
- nestedInterface = nestedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p>
-
-
- OCL2.0
- nestedItem = nestedUsage->selectByKind(ItemUsage)
-
-
-
-
- <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p>
-
-
- OCL2.0
- nestedMetadata = nestedUsage->selectByKind(MetadataUsage)
-
-
-
-
- <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p>
-
-
- OCL2.0
- nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage)
-
-
-
-
- <p>The <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p>
-
-
- OCL2.0
- nestedPart = nestedUsage->selectByKind(PartUsage)
-
-
-
-
- <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p>
-
-
- OCL2.0
- nestedPort = nestedUsage->selectByKind(PortUsage)
-
-
-
-
- <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p>
-
-
- OCL2.0
- nestedReference = nestedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p>
-
-
- OCL2.0
- nestedRendering = nestedUsage->selectByKind(RenderingUsage)
-
-
-
-
- <p>The <code>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p>
-
-
- OCL2.0
- nestedRequirement = nestedUsage->selectByKind(RequirementUsage)
-
-
-
-
- <p>The <code>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p>
-
-
- OCL2.0
- nestedState = nestedUsage->selectByKind(StateUsage)
-
-
-
-
- <p>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p>
-
-
- OCL2.0
- nestedTransition = nestedUsage->selectByKind(TransitionUsage)
-
-
-
-
- <p>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- nestedUsage = ownedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p>
-
-
- OCL2.0
- nestedUseCase = nestedUsage->selectByKind(UseCaseUsage)
-
-
-
-
- <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p>
-
-
- OCL2.0
- nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage)
-
-
-
-
- <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p>
-
-
- OCL2.0
- nestedView = nestedUsage->selectByKind(ViewUsage)
-
-
-
-
- <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p>
-
-
- OCL2.0
- nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage)
-
-
-
-
- <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- usage = feature->selectByKind(Usage)
-
-
-
-
- <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p>
-
-
- OCL2.0
- direction <> null or isEnd or featuringType->isEmpty() implies
- isReference
-
-
-
-
- <p>If a <code>Usage</code> is a variation, then it must be abstract.</p>
-
-
- OCL2.0
- isVariation implies isAbstract
-
-
-
-
- <p>A <code>Usage</code> <code>mayTimeVary</code> if and only if all of the following are true</p>
-<ul>
- <li>It has an <code>owningType</code> that specializes <em><code>Occurrences::Occurrence</code></em> (from the Kernel Semantic Library).</li>
- <li>It is not a portion.</li>
- <li>It does not specialize <em><code>Links::SelfLink</code></em> or <em><code>Occurrences::HappensLink</code></em> (from the Kernel Semantic Library).</li>
- <li>If <code>isComposite = true</code>, it does not specialize <em><code>Actions::Action</code></em> (from the Systems Model Library).
-</li></ul>
-
-
- OCL2.0
- mayTimeVary =
- owningType <> null and
- owningType.specializesFromLibrary('Occurrences::Occurrence') and
- not (
- isPortion or
- specializesFromLibrary('Links::SelfLink') or
- specializesFromLibrary('Occurrences::HappensLink') or
- isComposite and specializesFromLibrary('Actions::Action')
- )
-
-
-
-
- <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must have the same <code>featuringTypes</code> as that <code>Usage</code>.</p>
-
-
- OCL2.0
- owningVariationUsage <> null implies
- featuringType->asSet() = owningVariationUsage.featuringType->asSet()
-
-
-
-
-
-
-
- <p>Whether this <code>Usage</code> may be time varying (that is, whether it is featured by the snapshots of its <code>owningType</code>, rather than being featured by the <code>owningType</code> itself). However, if <code>isConstant</code> is also true, then the value of the <code>Usage</code> is nevertheless constant over the entire duration of an instance of its <code>owningType</code> (that is, it has the same value on all snapshots).</p>
-
-<p>The property <code>mayTimeVary</code> redefines the KerML property <code>Feature::isVariable</code>, making it derived. The property <code>isConstant</code> is inherited from <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>Usage</code> is a referential <code>Usage</code>, that is, it has <code>isComposite = false</code>.<p>
-
-
-
-
-
- <p>The <code>Usages</code> which represent the variants of this <code>Usage</code> as a variation point <code>Usage</code>, if <code>isVariation = true</code>. If <code>isVariation = false</code>, then there must be no <code>variants</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberships</code> of this <code>Usage</code> that are <code>VariantMemberships</code>. If <code>isVariation = true</code>, then this must be all <code>memberships</code> of the <code>Usage</code>. If <code>isVariation = false</code>, then <code>variantMembership</code>must be empty.</p>
-
-
-
-
-
-
-
- <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</p>
-
-
-
-
-
-
-
-
- <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</p>
-
-
-
-
-
-
-
- <p>The <code>Classifiers</code> that are the types of this <code>Usage</code>. Nominally, these are <code>Definitions</code>, but other kinds of Kernel <code>Classifiers</code> are also allowed, to permit use of <code>Classifiers</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p>
-
-
-
-
-
-
-
-
-
-
- <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p>
-
-
-
-
-
-
- <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowConnectionUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p>
-
-
-
-
-
-
- <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>MetadataUsages</code> that are <code>nestedUsages</code> of this of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>Usage</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Usage</code> must be <code>VariantMemberships</code>.</p>
-
-
-
-
-
- <p>If this <code>Usage</code> is a variant, then its naming <code>Feature</code> is the <code>referencedFeature</code> of its <code>ownedReferenceSubsetting</code>.</p>
-
-
-
- OCL2.0
- if not owningMembership.oclIsKindOf(VariantMembership) then
- self.oclAsType(Feature).namingFeature()
-else if ownedReferenceSubsetting = null then null
-else ownedReferenceSubsetting.referencedFeature
-endif endif
-
-
-
-
-
-
-
-
-
-
-
- <p>If <code>ownedReferenceSubsetting</code> is not null, return the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>.</p>
-
-
-
- OCL2.0
- if ownedReferenceSubsetting = null then null
-else ownedReferenceSubsetting.referencedFeature.featureTarget
-endif
-
-
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedState</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedState</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedConstraint</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedTransition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedConstraint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedTransition</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedRequirement</code> is nested.</p>
-
-
-
-
-
-
-
- <p>A <code>ReferenceUsage</code> is a <code>Usage</code> that specifies a non-compositional (<code>isComposite = false</code>) reference to something. The <code>definition</code> of a <code>ReferenceUsage</code> can be any kind of <code>Classifier</code>, with the default being the top-level <code>Classifier</code> <code><em>Base::Anything</em></code> from the Kernel Semantic Library. This allows the specification of a generic reference without distinguishing if the thing referenced is an attribute value, item, action, etc.</p>
-
-
-
- <p>A <code>ReferenceUsage</code> is always referential.</p>
-
-
- OCL2.0
- isReference
-
-
-
-
-
- <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code>
-
-
-
-
-
-
- <p>If this <code>ReferenceUsage</code> is the <em><code>payload</code></em> <code>parameter</code> of a <code>TransitionUsage</code>, then its naming <code>Feature</code> is the <code>payloadParameter</code> of the <code>triggerAction</code> of that <code>TransitionUsage</code> (if any).</p>
-
-
-
- OCL2.0
- if owningType <> null and owningType.oclIsKindOf(TransitionUsage) and
- owningType.oclAsType(TransitionUsage).inputParameter(2) = self then
- owningType.oclAsType(TransitionUsage).triggerPayloadParameter()
-else self.oclAsType(Usage).namingFeature()
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p>
-
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedItem</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedInterface</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedReference</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usages that feature a certain Usage.</p>
-
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedPart</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usages that have a certain Usage as a <code>flow</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedInterface</code>.</p>
-
-
-
-
-
-
-
-
- <p>The variation point Definition that for which this Usage represents a variant, derived as the <code>owningVariationDefinition</code> of the <code>owningVariantMembership</code> of the Usage.</p>
-
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedReference</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedItem</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAction</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedPart</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedUsage</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The variation point Usage that for which this Usage represents a variant, derived as the <code>owningVariationUsage</code> of the <code>owningVariantMembership</code> of the Usage.</p>
-
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedAttribute</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAttribute</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usages that have a certain Classifier as a <code>definition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedConnection</code>.</p>
-
-
-
-
-
-
-
- <p>The Definition that owns this CaseUsage (if any).</p>
-
-
-
- <p>The Definition that owns the <code>ownedCase</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>VariantMembership</code> is a <code>Membership</code> between a variation point <code>Definition</code> or <code>Usage</code> and a <code>Usage</code> that represents a variant in the context of that variation. The <code>membershipOwningNamespace</code> for the <code>VariantMembership</code> must be either a Definition or a <code>Usage</code> with <code>isVariation = true</code>.</p>
-
-
-
- <p>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</code>.</p>
-
-
- OCL2.0
- membershipOwningNamespace.oclIsKindOf(Definition) and
- membershipOwningNamespace.oclAsType(Definition).isVariation or
-membershipOwningNamespace.oclIsKindOf(Usage) and
- membershipOwningNamespace.oclAsType(Usage).isVariation
-
-
-
-
-
-
-
-
- <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</p>
-
-
-
-
-
-
-
-
-
- <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p>
-
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedView</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedRendering</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedRendering</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedView</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedEnumeration</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedEnumeration</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAllocation</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedAllocation</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedConcern</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedConcern</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedOccurrence</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedUseCase</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedUseCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedMetadata</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedMetadata</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>PartDefinition</code> is an <code>ItemDefinition</code> of a <code>Class</code> of systems or parts of systems. Note that all parts may be considered items for certain purposes, but not all items are parts that can perform actions within a system.</p>
-
-
-
-
- </p>A <code>PartDefinition</code> must directly or indirectly specialize the base <code>PartDefinition</code> <em><code>Parts::Part</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Parts::Part')
-
-
-
-
-
-
- <p>A <code>PartUsage</code> is a usage of a <code>PartDefinition</code> to represent a system or a part of a system. At least one of the <code>itemDefinitions</code> of the <code>PartUsage</code> must be a <code>PartDefinition</code>.</p>
-
-<p>A <code>PartUsage</code> must subset, directly or indirectly, the base <code>PartUsage</code> <em><code>parts</code></em> from the Systems Model Library.</p>
-
-
-
- <p>The <code>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p>
-
-
- OCL2.0
- itemDefinition->selectByKind(PartDefinition)
-
-
-
-
- <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p>
-
-
- OCL2.0
- partDefinition->notEmpty()
-
-
-
-
- <p>A <code>PartUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Parts::parts</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Parts::parts')
-
-
-
-
- <p>A composite <code>PartUsage</code> whose <code>owningType</code> is a <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Items::Item::subparts</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ItemDefinition) or
- owningType.oclIsKindOf(ItemUsage)) implies
- specializesFromLibrary('Items::Item::subparts')
-
-
-
-
- <p>If a <code>PartUsage</code> is owned via an <code>ActorMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::actors</em></code> (if its <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> or <code><em>Cases::Case::actors</em></code> (otherwise).</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(ActorMembership) implies
- if owningType.oclIsKindOf(RequirementDefinition) or
- owningType.oclIsKindOf(RequirementUsage)
- then specializesFromLibrary('Requirements::RequirementCheck::actors')
- else specializesFromLibrary('Cases::Case::actors')
-
-
-
-
- <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies
- specializesFromLibrary('Requirements::RequirementCheck::stakeholders')
-
-
-
-
-
- <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p>
-
-
-
-
-
-
-
-
- <p>The PartUsages typed by a certain PartDefinition.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>InterfaceUsage</code> is a Usage of an <code>InterfaceDefinition</code> to represent an interface connecting parts of a system through specific ports.</p>
-
-
-
- <p>A binary <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::binaryInterfaces</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Interfaces::binaryInterfaces')
-
-
-
-
- <p>An <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::interfaces</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Interfaces::interfaces')
-
-
-
-
-
- <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p>
-
-
-
-
-
-
-
- <p>An <code>InterfaceDefinition</code> is a <code>ConnectionDefinition</code> all of whose ends are <code>PortUsages</code>, defining an interface between elements that interact through such ports.</p>
-
-
-
- <p>An <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::Interface</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Interfaces::Interface')
-
-
-
-
- <p>A binary <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::BinaryInterface</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Interfaces::BinaryInterface')
-
-
-
-
-
- <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>StateUsage</code> is an <code>ActionUsage</code> that is nominally the <code>Usage</code> of a <code>StateDefinition</code>. However, other kinds of kernel <code>Behaviors</code> are also allowed as <code>types</code>, to permit use of <code>Behaviors</code from the Kernel Model Libraries.</p>
-
-<p>A <code>StateUsage</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateSubactionMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateUsage</code>.</p>
-
-
-
-
- <p>The <code>doAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
- OCL2.0
- doAction =
- let doMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::do) in
- if doMemberships->isEmpty() then null
- else doMemberships->at(1)
- endif
-
-
-
-
- <p>The <code>entryAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
- OCL2.0
- entryAction =
- let entryMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::entry) in
- if entryMemberships->isEmpty() then null
- else entryMemberships->at(1)
- endif
-
-
-
-
- <p>If a <code>StateUsage</code> is parallel, then its <code>nestedActions</code> (which includes <code>nestedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p>
-
-
- OCL2.0
- isParallel implies
- nestedAction.incomingTransition->isEmpty() and
- nestedAction.outgoingTransition->isEmpty()
-
-
-
-
- <p>A <code>StateUsage</code> that is a substate usage with a non-parallel owning <code>StateDefinition</code> or <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::exclusiveStates</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubstateUsage(false) implies
- specializesFromLibrary('States::StateAction::exclusiveStates')
-
-
-
-
- <p>The <code>exitAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit
-</code>.</p>
-
-
- OCL2.0
- exitAction =
- let exitMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::exit) in
- if exitMemberships->isEmpty() then null
- else exitMemberships->at(1)
- endif
-
-
-
-
- <p>A <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::stateActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('States::stateActions')
-
-
-
-
- <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p>
-
-
- OCL2.0
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- isUnique(kind)
-
-
-
-
- <p>A <code>StateUsage</code> that is a substate usage with a owning <code>StateDefinition</code> or <code>StateUsage</code> that is parallel must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::substates</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubstateUsage(true) implies
- specializesFromLibrary('States::StateAction::substates')
-
-
-
-
- <p>A composite <code>StateUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>Parts::Part::ownedStates</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(PartDefinition) or
- owningType.oclIsKindOf(PartUsage)) implies
- specializesFromLibrary('Parts::Part::ownedStates')
-
-
-
-
-
- <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>StateUsage</code>. Nominally, these would be <code>StateDefinitions</code>, but kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p>
-
-
-
-
-
-
- <p>Whether the <code>nestedStates</code> of this <code>StateUsage</code> are to all be performed in parallel. If true, none of the <code>nestedActions</code> (which include <code>nestedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>nestedState</code> may be performed at a time.</p>
-
-
-
-
-
-
-
- <p>Check if this <code>StateUsage</code> is composite and has an <code>owningType</code> that is a <code>StateDefinition</code> or <code>StateUsage</code> with the given value of <code>isParallel</code>, but is <em>not</em> an <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code>. If so, then it represents a <code><em>StateAction</em></code> that is a <code><em>substate</em></code> or <code><em>exclusiveState</em></code> (for <code>isParallel = false</code>) of another <code><em>StateAction</em></code>.</p>
-
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(StateDefinition) and
- owningType.oclAsType(StateDefinition).isParallel = isParallel or
- owningType.oclIsKindOf(StateUsage) and
- owningType.oclAsType(StateUsage).isParallel = isParallel) and
-not owningFeatureMembership.oclIsKindOf(StateSubactionMembership)
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The StateDefinitions featuring a certain StateUsage.</p>
-
-
-
-
-
-
-
-
- <p>A <code>StateSubactionKind</code> indicates whether the <code>action</code> of a StateSubactionMembership is an entry, do or exit action.</p>
-
-
-
- <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>entryAction</code>.</p>
-
-
-
-
- <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is a <code>doAction</code>.</p>
-
-
-
-
- <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p>
-
-
-
-
-
- <p>A <code>StateSubactionMembership</code> is a <code>FeatureMembership</code> for an entry, do or exit <code>ActionUsage<code> of a <code>StateDefinition</code> or <code>StateUsage</code>.</p>
-
-
-
- <p>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(StateDefinition) or
-owningType.oclIsKindOf(StateUsage)
-
-
-
-
-
-
-
- <p>Whether this <code>StateSubactionMembership</code> is for an <code>entry<code>, <code>do</code> or <code>exit</code> <code>ActionUsage</code>.</p>
-
-
-
-
- <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>StateDefinition</code> is the <code>Definition</code> of the </code>Behavior</code> of a system or part of a system in a certain state condition.</p>
-
-<p>A <code>StateDefinition</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateBehaviorMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateDefinition</code>.</p>
-
-
-
- <p>A <code>StateDefinition</code> must directly or indirectly specialize the <code>StateDefinition</code> <em><code>States::StateAction</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('States::StateAction')
-
-
-
-
- <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p>
-
-
- OCL2.0
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- isUnique(kind)
-
-
-
-
- <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p>
-
-
- OCL2.0
- state = action->selectByKind(StateUsage)
-
-
-
-
- <p>The <code>doAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
- OCL2.0
- doAction =
- let doMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::do) in
- if doMemberships->isEmpty() then null
- else doMemberships->at(1)
- endif
-
-
-
-
- <p>The <code>entryAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
- OCL2.0
- entryAction =
- let entryMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::entry) in
- if entryMemberships->isEmpty() then null
- else entryMemberships->at(1)
- endif
-
-
-
-
- <p>If a <code>StateDefinition</code> is parallel, then its <code>ownedActions</code> (which includes its <code>ownedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p>
-
-
- OCL2.0
- isParallel implies
- ownedAction.incomingTransition->isEmpty() and
- ownedAction.outgoingTransition->isEmpty()
-
-
-
-
- <p>The <code>exitAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit
-</code>.</p>
-
-
- OCL2.0
- exitAction =
- let exitMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::exit) in
- if exitMemberships->isEmpty() then null
- else exitMemberships->at(1)
- endif
-
-
-
-
-
- <p>The <code>StateUsages</code>, which are <code>actions</code> in the <code>StateDefinition</code>, that specify the discrete states in the behavior defined by the <code>StateDefinition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p>
-
-
-
-
-
-
- <p>Whether the <code>ownedStates</code> of this <code>StateDefinition</code> are to all be performed in parallel. If true, none of the <code>ownedActions</code> (which includes <code>ownedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>ownedState</code> may be performed at a time.</p>
-
-
-
-
-
-
-
-
-
- <p>The Behaviors that are the types of this StateUsage. Nominally, these would be StateDefinition, but non-StateDefinition Behaviors are also allowed, to permit use of Behaviors from the Kernel Library.</p>
-
-
-
-
-
-
-
- <p>A <code>TransitionUsage</code> is an <code>ActionUsage</code> representing a triggered transition between <code>ActionUsages</code> or <code>StateUsages</code>. When triggered by a <code>triggerAction</code>, when its <code>guardExpression</code> is true, the <code>TransitionUsage</code> asserts that its <code>source</code> is exited, then its <code>effectAction</code> (if any) is performed, and then its <code>target</code> is entered.</p>
-
-<p>A <code>TransitionUsage</code> can be related to some of its <code>ownedFeatures</code> using <code>TransitionFeatureMembership</code> <code>Relationships</code>, corresponding to the <code>triggerAction</code>, <code>guardExpression</code> and <code>effectAction</code> of the <code>TransitionUsage</code>.</p>
-
-
-
- <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is an <code>ActionDefinition</code> or <code>ActionUsage</code> and whose <code>source</code> is <em>not</em> a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisionTransitions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ActionDefinition) or
- owningType.oclIsKindOf(ActionUsage)) and
-source <> null and not source.oclIsKindOf(StateUsage) implies
- specializesFromLibrary('Actions::Action::decisionTransitions')
-
-
-
-
- <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is a <code>StateDefinition</code> or <code>StateUsage</code> and whose <code>source</code> is a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>States::StateAction::stateTransitions</code></em> from the Systems Model Library</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(StateDefinition) or
- owningType.oclIsKindOf(StateUsage)) and
-source <> null and source.oclIsKindOf(StateUsage) implies
- specializesFromLibrary('States::StateAction::stateTransitions')
-
-
-
-
-
- <p>A <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::transitionActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::transitionActions')
-
-
-
-
- <p>The <code>source</code> of a <code>TransitionUsage</code> is <code>featureTarget</code> of the result of <code>sourceFeature()</code>, which must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- source =
- let sourceFeature : Feature = sourceFeature() in
- if sourceFeature = null then null
- else sourceFeature.featureTarget.oclAsType(ActionUsage)
-
-
-
-
- <p>The <code>target</code> of a <code>TransitionUsage</code> is given by the <code>featureTarget</code> of the <code>targetFeature</code> of its <code>succession</code>, which must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- target =
- if succession.targetFeature->isEmpty() then null
- else
- let targetFeature : Feature =
- succession.targetFeature->first().featureTarget in
- if not targetFeature.oclIsKindOf(ActionUsage) then null
- else targetFeature.oclAsType(ActionUsage)
- endif
- endif
-
-
-
-
-
- <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p>
-
-
- OCL2.0
- triggerAction = ownedFeatureMembership->
- selectByKind(TransitionFeatureMembership)->
- select(kind = TransitionFeatureKind::trigger).transitionFeature->
- selectByKind(AcceptActionUsage)
-
-
-
-
- <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>Succession</code> with an <code>ActionUsage</code> as the <code>featureTarget</code> of its <code>targetFeature</code>.</p>
-
-
- OCL2.0
- let successions : Sequence(Successions) =
- ownedMember->selectByKind(Succession) in
-successions->notEmpty() and
-successions->at(1).targetFeature.featureTarget->
- forAll(oclIsKindOf(ActionUsage))
-
-
-
-
- <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>Expressions</code>.</p>
-
-
- OCL2.0
- guardExpression = ownedFeatureMembership->
- selectByKind(TransitionFeatureMembership)->
- select(kind = TransitionFeatureKind::trigger).transitionFeature->
- selectByKind(Expression)
-
-
-
-
- <p>The <code>triggerActions</code>, <code>guardExpressions</code>, and <code>effectActions</code> of a <code>TransitionUsage</code> must specialize, respectively, the <em><code>accepter</code></em>, <em><code>guard</code></em>, and <em><code>effect</code></em> <code>features</code> of the <code>ActionUsage</code> <em><code>Actions::TransitionActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and
-guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and
-effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect'))
-
-
-
-
- <p>The <code>effectActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- triggerAction = ownedFeatureMembership->
- selectByKind(TransitionFeatureMembership)->
- select(kind = TransitionFeatureKind::trigger).transitionFeatures->
- selectByKind(AcceptActionUsage)
-
-
-
-
- <p>The <code>sourceFeature</code> of the <code>succession</code> of a <code>TransitionUsage</code> must be the <code>source</code> of the <code>TransitionUsage</code> (i.e., the first <code>connectorEnd</code> of the <code>succession</code> must have a <code>ReferenceSubsetting</code> <code>Relationship</code> with the <code>source</code>).</p>
-
-
- OCL2.0
- succession.sourceFeature = source
-
-
-
-
- <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>source</code> and its first input <code>parameter</code> (which redefines <code><em>Actions::TransitionAction::transitionLinkSource</em></code>).</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(source) and
- b.relatedFeatures->includes(inputParameter(1)))
-
-
-
-
- <p>If a <code>TransitionUsage</code> has a <code>triggerAction</code>, then the <em><code>payload</code></em> <code>parameter</code> of the <code>TransitionUsage</code> subsets the <code>Feature</code> chain of the <code>triggerAction</code> and its <code>payloadParameter</code>.</p>
-
-
- OCL2.0
- triggerAction->notEmpty() implies
- let payloadParameter : Feature = inputParameter(2) in
- payloadParameter <> null and
- payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter())
-
-
-
-
- <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>succession</code> and the inherited <code>Feature</code> <code><em>TransitionPerformances::TransitionPerformance::transitionLink</em></code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(succession) and
- b.relatedFeatures->includes(resolveGlobal(
- 'TransitionPerformances::TransitionPerformance::transitionLink')))
-
-
-
-
- <p>A <code>TransitionUsage</code> must have at least one owned input <code>parameter</code> and, if it has a <code>triggerAction</code>, it must have at least two.</p>
-
-
- OCL2.0
- if triggerAction->isEmpty() then
- inputParameters()->size() >= 1
-else
- inputParameters()->size() >= 2
-endif
-
-
-
-
-
- <p>The <code>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p>
-
-
- OCL2.0
- succession = ownedMember->selectByKind(Succession)->at(1)
-
-
-
-
- <p>If the <code>source</code> of a <code>TransitionUsage</code> is <em>not</em> a <code>StateUsage</code>, then the <code>TransitionUsage</code> must not have any <code>triggerActions</code>.</p>
-
-
- OCL2.0
- source <> null and not source.oclIsKindOf(StateUsage) implies
- triggerAction->isEmpty()
-
-
-
-
-
- <p>The source <code>ActionUsage</code> of this <code>TransitionUsage</code>, which becomes the <code>source</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p>
-
-
-
-
-
-
- <p>The target <code>ActionUsage</code> of this <code>TransitionUsage<code>, which is the <code>targetFeature</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>AcceptActionUsages</code> that define the triggers of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Expressions</code> that define the guards of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = guard</code>, which must all be <code>Expressions</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that define the effects of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Succession</code> that is the <code>ownedFeature</code> of this <code>TransitionUsage</code>, which, if the <code>TransitionUsage</code> is triggered, asserts the temporal ordering of the <code>source</code> and <code>target</code>.</p>
-
-
-
-
-
-
-
-
- <p>Return the <code>payloadParameter</code> of the <code>triggerAction</code> of this <code>TransitionUsage</code>, if it has one.</p>
-
-
-
- OCL2.0
- if triggerAction->isEmpty() then null
-else triggerAction->first().payloadParameter
-endif
-
-
-
-
-
-
-
-
-
- <p>Return the <code>Feature</code> to be used as the <code>source</code> of the <code>succession</code> of this <code>TransitionUsage</code>, which is the first <code>member</code> of the <code>TransitionUsage</code> that is a <code>Feature</code>, that is owned by the <code>TransitionUsage</code> via a <code>Membership</code> that is <em>not</em> a <code>FeatureMembership</code>, and whose <code>featureTarget</code> is an <code>ActionUsage</code>.</p>
-
-
-
- OCL2.0
- let features : Sequence(Feature) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement->
- selectByKind(Feature)->
- select(featureTarget.oclIsKindOf(ActionUsage)) in
-if features->isEmpty() then null
-else features->first()
-endif
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>TransitionFeatureMembership</code> is a <code>FeatureMembership</code> for a trigger, guard or effect of a <code>TransitionUsage</code>, whose <code>transitionFeature</code> is a <code>AcceptActionUsage</code>, <em><code>Boolean</code></em>-valued <code>Expression</code> or <code>ActionUsage</code>, depending on its <code>kind</code>. </p>
-
-
-
- <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>trigger</code>, then its <code>transitionFeature</code> must be a kind of <code>AcceptActionUsage</code>.</p>
-
-
- OCL2.0
- kind = TransitionFeatureKind::trigger implies
- transitionFeature.oclIsKindOf(AcceptActionUsage)
-
-
-
-
- <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(TransitionUsage)
-
-
-
-
- <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>guard</code>, then its <code>transitionFeature</code> must be a kind of <code>Expression</code> whose result is a <em><code>Boolean</code></em> value.</p>
-
-
- OCL2.0
- kind = TransitionFeatureKind::guard implies
- transitionFeature.oclIsKindOf(Expression) and
- let guard : Expression = transitionFeature.oclIsKindOf(Expression) in
- guard.result.specializesFromLibrary('ScalarValues::Boolean') and
- guard.result.multiplicity <> null and
- guard.result.multiplicity.hasBounds(1,1)
-
-
-
-
- <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>effect</code>, then its <code>transitionFeature</code> must be a kind of <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- kind = TransitionFeatureKind::effect implies
- transitionFeature.oclIsKindOf(ActionUsage)
-
-
-
-
-
-
-
- <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</code>.</p>
-
-
-
-
- <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>ExhibitStateUsage</code> is a <code>StateUsage</code> that represents the exhibiting of a <code>StateUsage</code>. Unless it is the <code>StateUsage</code> itself, the <code>StateUsage</code> to be exhibited is related to the <code>ExhibitStateUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>ExhibitStateUsage</code> is also a <code>PerformActionUsage</code>, with its <code>exhibitedState</code> as the <code>performedAction</code>.</p>
-
-
-
-
- <p>If an <code>ExhibitStateUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>StateUsage</code> <code><em>Parts::Part::exhibitedStates</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(PartDefinition) or
- owningType.oclIsKindOf(PartUsage)) implies
- specializesFromLibrary('Parts::Part::exhibitedStates')
-
-
-
-
- <p>If an <code>ExhibitStateUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>StateUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(StateUsage)
-
-
-
-
-
-
- <p>The <code>StateUsage</code> to be exhibited by the <code>ExhibitStateUsage</code>. It is the <code>performedAction</code> of the <code>ExhibitStateUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>StateUsage</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TransitionActionKind</code> indicates whether the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a trigger, guard or effect.</p>
-
-
-
- <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</code>.</p>
-
-
-
-
- <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</p>
-
-
-
-
- <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p>
-
-
-
-
-
-
- <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The Transition that owns a certain Succession.</p>
-
-
-
-
-
-
-
-
-
- <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p>
-
-
-
-
-
-
-
-
-
- <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p>
-
-
-
-
-
-
-
-
-
- <p>The TransitionUsage that is guarded by a certain Expression.</p>
-
-
-
-
-
-
-
-
-
- <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateDefinitions with a certain <tt>doAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateUsages with a certain <tt>entryAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionFeatureMembership that owns a certain Step (if any).</p>
-
-
-
-
-
-
-
-
-
- <p>The StateUsages with a certain <tt>exitAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateUsages with a certain <tt>doAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</p>
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstraintUsage</code> is an <code>OccurrenceUsage</code> that is also a <code>BooleanExpression</code>, and, so, is typed by a <code>Predicate</code>. Nominally, if the type is a <code>ConstraintDefinition</code>, a <code>ConstraintUsage</code> is a <code>Usage</code> of that <code>ConstraintDefinition</code>. However, other kinds of kernel <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies
- if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind =
- RequirementConstraintKind::assumption then
- specializesFromLibrary('Requirements::RequirementCheck::assumptions')
- else
- specializesFromLibrary('Requirements::RequirementCheck::constraints')
- endif
-
-
-
-
- <p>A <code>ConstraintUsage</code> must directly or indirectly specialize the base <code>ConstraintUsage</code> <em><code>Constraints::constraintChecks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Constraints::constraintChecks')
-
-
-
-
- <p>A <code>ConstraintUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>ConstraintUsage</code> <em><code>Items::Item::checkedConstraints</code></em>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(ItemDefinition) or
- owningType.oclIsKindOf(ItemUsage)) implies
- specializesFromLibrary('Items::Item::checkedConstraints')
-
-
-
-
-
-
-
-
- <p>The (single) <code>Predicate</code> that is the type of this <code>ConstraintUsage</code>. Nominally, this will be a <code>ConstraintDefinition</code>, but other kinds of <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
-
- <p>The naming <code>Feature</code> of a <code>ConstraintUsage</code> that is owned by a <code>RequirementConstraintMembership</code> and has an <code>ownedReferenceSubsetting</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of that <code>ownedReferenceSubsetting</code>.</p>
-
-
-
- OCL2.0
- if owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) and
-ownedReferenceSubsetting <> null then
- ownedReferenceSubsetting.referencedFeature.featureTarget
-else
- self.oclAsType(OccurrenceUsage).namingFeature()
-endif
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstraintUsage</code> is not model-level evaluable.</p>
-
-
-
- OCL2.0
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstraintDefinition</code> is an <code>OccurrenceDefinition</code> that is also a <code>Predicate</code> that defines a constraint that may be asserted to hold on a system or part of a system.</p>
-
-
-
-
-
- <p>A <code>ConstraintDefinition</code> must directly or indirectly specialize the base <code>ConstraintDefinition</code> <em><code>Constraints::ConstraintCheck</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Constraints::ConstraintCheck')
-
-
-
-
-
-
-
-
-
-
- <p>The ConstraintUsages typed by a certain Predicate.</p>
-
-
-
-
-
-
-
-
-
- <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p>
-
-
-
-
-
-
-
- <p>An <code>AssertConstraintUsage</code> is a <code>ConstraintUsage</code> that is also an <code>Invariant</code> and, so, is asserted to be true (by default). Unless it is the <code>AssertConstraintUsage</code> itself, the asserted <code>ConstraintUsage</code> is related to the <code>AssertConstraintUsage</code> by a ReferenceSubsetting <code>Relationship</code>.</p>
-
-
-
- <p>If an <code>AssertConstraintUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>assertedConstraint</code> is the <code>AssertConstraintUsage</code> itself. Otherwise, the <code>assertedConstraint</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>, which must be a <code>ConstraintUsage</code>.</p>
-
-
- OCL2.0
- assertedConstraint =
- if referencedFeatureTarget() = null then self
- else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then
- referencedFeatureTarget().oclAsType(ConstraintUsage)
- else null
- endif endif
-
-
-
-
- <p>If a <code>AssertConstraintUsage</code> is negated, then it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::negatedConstraintChecks</em></code>. Otherwise, it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::assertedConstraintChecks</em></code>.</p>
-
-
- OCL2.0
- if isNegated then
- specializesFromLibrary('Constraints::negatedConstraintChecks')
-else
- specializesFromLibrary('Constraints::assertedConstraintChecks')
-endif
-
-
-
-
- <p>If an <code>AssertConstraintUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a </code>ConstraintUsage</code>.</p>
-
-
- OCL2.0
- referencedFeaureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(ConstraintUsage)
-
-
-
-
-
-
-
-
- <p>The <code>ConstraintUsage</code> to be performed by the <code>AssertConstraintUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>AssertConstraintUsage</code>, if there is one, and, otherwise, the <code>AssertConstraintUsage</code> itself.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p>
-
-
-
-
-
-
-
-
-
- <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p>
-
-
-
-
-
-
-
-
-
- <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementDefinition</code> is a <code>ConstraintDefinition</code> that defines a requirement used in the context of a specification as a constraint that a valid solution must satisfy. The specification is relative to a specified subject, possibly in collaboration with one or more external actors.</p>
-
-
-
- <p>The <code>texts</code> of a<code>RequirementDefinition</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- text = documentation.body
-
-
-
-
- <p>The <code>assumedConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p>
-
-
- OCL2.0
- assumedConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::assumption).
- ownedConstraint
-
-
-
-
- <p>The <code>requiredConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- requiredConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::requirement).
- ownedConstraint
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjects : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjects->isEmpty() then null
- else subjects->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>framedConcerns</code> of a <code>RequirementDefinition</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- framedConcern = featureMembership->
- selectByKind(FramedConcernMembership).
- ownedConcern
-
-
-
-
- <p>The <code>actorParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>The <code>stakeHolderParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- stakeholderParameter = featureMembership->
- selectByKind(StakholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(SubjectMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>RequirementDefinition</code> must directly or indirectly specialize the base <code>RequirementDefinition</code> <code><em>Requirements::RequirementCheck</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::RequirementCheck')
-
-
-
-
-
- <p>An optional modeler-specified identifier for this <code>RequirementDefinition</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>An optional textual statement of the requirement represented by this <code>RequirementDefinition</code>, derived from the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p>
-
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p>
-
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for th requirement.</p>
-
-
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementDefinition</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p>
-
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementDefinition</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind</code> = <code>requirement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> framed by this <code>RequirementDefinition</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementUsages typed by a certain RequirementDefinition.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p>
-
-
-
-
-
-
-
-
- <p>A <code>SatisfyRequirementUsage</code> is an <code>AssertConstraintUsage</code> that asserts, by default, that a satisfied <code>RequirementUsage</code> is true for a specific <code>satisfyingFeature</code>, or, if <code>isNegated = true</code>, that the <code>RequirementUsage</code> is false. The satisfied <code>RequirementUsage</code> is related to the <code>SatisfyRequirementUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p>
-
-
-
- <p>The <code>satisfyingFeature</code> of a <code>SatisfyRequirementUsage</code> is the <code>Feature</code> to which the <code>subjectParameter</code> is bound.</p>
-
-
- OCL2.0
- satisfyingFeature =
- let bindings: BindingConnector = ownedMember->
- selectByKind(BindingConnector)->
- select(b | b.relatedElement->includes(subjectParameter)) in
- if bindings->isEmpty() or
- bindings->first().relatedElement->exits(r | r <> subjectParameter)
- then null
- else bindings->first().relatedElement->any(r | r <> subjectParameter)
- endif
-
-
-
-
- <p>A <code>SatisfyRequirementUsage</code> must have exactly one <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>subjectParameter</code> and some <code>Feature</code> other than the <code>subjectParameter</code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->
- select(b |
- b.relatedElement->includes(subjectParameter) and
- b.relatedElement->exists(r | r <> subjectParameter))->
- size() = 1
-
-
-
-
- <p>If a <code>SatisfyRequirementUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(RequirementUsage)
-
-
-
-
- <p>If a <code>SatisfyRequirementUsage</code> is negated, then it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::notSatisfiedRequirementChecks</code></em>. Otherwise, it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::satisfiedRequirementChecks</code></em>.</p>
-
-
- OCL2.0
- if isNegated then
- specializesFromLibrary('Requirements::notSatisfiedRequirementChecks')
-else
- specializesFromLibrary('Requirements::satisfiedRequirementChecks')
-endif
-
-
-
-
-
-
- <p>The <code>RequirementUsage</code> that is satisfied by the <code>satisfyingSubject</code> of this <code>SatisfyRequirementUsage</code>. It is the <code>assertedConstraint</code> of the <code>SatisfyRequirementUsage</code> considered as an <code>AssertConstraintUsage</code>, which must be a <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>Feature</code> that represents the actual subject that is asserted to satisfy the <code>satisfiedRequirement</code>. The <code>satisfyingFeature</code> is bound to the <code>subjectParameter</code> of the <code>SatisfyRequirementUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</code>.</p>
-
-
-
- <p>The <code>actorParameters</code> of a <code>RequirementUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>The <code>assumedConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p>
-
-
- OCL2.0
- assumedConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::assumption).
- ownedConstraint
-
-
-
-
- <p>The <code>framedConcerns</code> of a <code>RequirementUsage</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- framedConcern = featureMembership->
- selectByKind(FramedConcernMembership).
- ownedConcern
-
-
-
-
- <p>The <code>requiredConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- requiredConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::requirement).
- ownedConstraint
-
-
-
-
- <p>The <code>stakeHolderParameters</code> of a <code>RequirementUsage</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- stakeholderParameter = featureMembership->
- selectByKind(AStakholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjects : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjects->isEmpty() then null
- else subjects->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>texts</code> of a<code>RequirementUsage</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- text = documentation.body
-
-
-
-
- <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(SubjectMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>RequirementUsage</code> must directly or indirectly specialize the base <code>RequirementUsage</code> <em><code>Requirements::requirementChecks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::requirementChecks')
-
-
-
-
- <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or ,code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
- (owningType.oclIsKindOf(RequirementDefinition) or
- owningType.oclIsKindOf(RequirementUsage)) implies
- specializesFromLibrary('Requirements::RequirementCheck::subrequirements')
-
-
-
-
- <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>ObjectiveMembership</code> must redefine the <code>objectiveRequirement</code> of each <code>CaseDefinition</code> or <code>CaseUsage</code> that is specialized by the <code>owningType</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- owningfeatureMembership <> null and
-owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies
- owningType.ownedSpecialization.general->forAll(gen |
- (gen.oclIsKindOf(CaseDefinition) implies
- redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and
- (gen.oclIsKindOf(CaseUsage) implies
- redefines(gen.oclAsType(CaseUsage).objectiveRequirement))
-
-
-
-
- <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementVerificationMembership</code> must directly or indirectly specialize the <code>RequirementUsage</code> <code><em>VerificationCases::VerificationCase::obj::requirementVerifications</em></code>.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies
- specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications')
-
-
-
-
-
- <p>The <code>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
- <p>An optional modeler-specified identifier for this <code>RequirementUsage</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>An optional textual statement of the requirement represented by this <code>RequirementUsage</code>, derived from the <code>bodies<code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementUsage</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>requirement</code>.</p>
-
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementUsage</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>assumption</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> framed by this <code>RequirementUsage</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p>
-
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p>
-
-
-
-
-
-
-
-
-
- <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>RequirementConstraintMembership</code> is a <code>FeatureMembership</code> for an assumed or required <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage<code>.</p>
-
-
-
- <p>The <code>referencedConstraint</code> of a <code>RequirementConstraintMembership</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p>
-
-
- OCL2.0
- referencedConstraint =
- let referencedFeature : Feature =
- ownedConstraint.referencedFeatureTarget() in
- if referencedFeature = null then ownedConstraint
- else if referencedFeature.oclIsKindOf(ConstraintUsage) then
- refrencedFeature.oclAsType(ConstraintUsage)
- else null
- endif endif
-
-
-
-
- <p>The <code>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementDefinition) or
-owningType.oclIsKindOf(RequirementUsage)
-
-
-
-
- <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p>
-
-
- OCL2.0
- ownedConstraint.isComposite
-
-
-
-
-
-
-
- <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</p>
-
-
-
-
- <p>The <code>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</code>.</p>
-
-
-
-
-
-
-
- <p> The <code>ConstraintUsage</code> that is referenced through this <code>RequirementConstraintMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementConstraintKind</code> indicates whether a <code>ConstraintUsage</code> is an assumption or a requirement in a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p>
-
-
-
- <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code> represents an assumption.</p>
-
-
-
-
- <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p>
-
-
-
-
-
-
- <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>SubjectMembership</code> is a <code>ParameterMembership</code> that indicates that its <code>ownedSubjectParameter</code> is the subject of its <code>owningType</code>. The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p>
-
-
-
- <p>The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsType(RequirementDefinition) or
-owningType.oclIsType(RequiremenCaseRequirementDefinition) or
-owningType.oclIsType(CaseDefinition) or
-owningType.oclIsType(CaseUsage)
-
-
-
-
-
-
-
-
- <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>FramedConcernMembership</code> is a <code>RequirementConstraintMembership</code> for a framed <code>ConcernUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p>
-
-
-
- <p>A <code>FramedConcernMembership</code> must have <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- kind = RequirementConstraintKind::requirement
-
-
-
-
-
- <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p>
-
-
-
-
-
- <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p>
-
-
-
-
-
-
- <p> The <code>ConcernUsage</code> that is referenced through this <code>FramedConcernMembership</code>. It is the <code>referencedConstraint</code> of the <code>FramedConcernMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>ConcernUsage</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ConcernDefinition</code> is a <code>RequirementDefinition</code> that one or more stakeholders may be interested in having addressed. These stakeholders are identified by the <code>ownedStakeholders</code>of the <code>ConcernDefinition</code>.</p>
-
-
-
-
- <p>A <code>ConcernDefinition</code> must directly or indirectly specialize the base <code>ConcernDefinition</code> <em><code>Requirements::ConcernCheck</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::ConcernCheck')
-
-
-
-
-
-
-
- <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ConcernUsage</code> is a <code>Usage</code> of a <code>ConcernDefinition</code>.</p>
-
- The <code>ownedStakeholder</code> features of the ConcernUsage shall all subset the <em><code>ConcernCheck::concernedStakeholders</code> </em>feature. If the ConcernUsage is an <code>ownedFeature</code> of a StakeholderDefinition or StakeholderUsage, then the ConcernUsage shall have an <code>ownedStakeholder</code> feature that is bound to the <em><code>self</code></em> feature of its owner.</p>
-
-
-
-
- <p>A <code>ConcernUsage</code> must directly or indirectly specialize the base <code>ConcernUsage</code> <em><code>Requirements::concernChecks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::concernChecks')
-
-
-
-
- <p>If a <code>ConcernUsage</code> is owned via a <code>FramedConcernMembership</code>, then it must directly or indirectly specialize the <code>ConcernUsage</code> <code><em>Requirements::RequirementCheck::concerns</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies
- specializesFromLibrary('Requirements::RequirementCheck::concerns')
-
-
-
-
-
- <p>The ConcernDefinition that is the single type of this ConcernUsage.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>StakeholderMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as a <code>stakeholderParameter</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>, which specifies a role played by an entity with concerns framed by the <code>owningType</code>.</p>
-
-
-
- <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementUsage) or
-owningType.oclIsKindOf(RequirementDefinition)
-
-
-
-
-
-
-
- <p>The <code>PartUsage</code> specifying the stakeholder.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>An <code>ActorMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as an <em>actor</em> <code>parameter</code>, which specifies a role played by an external entity in interaction with the <code>owningType</code> of the <code>ActorMembership</code>.</p>
-
-
-
- <p>The <code>owningType</code> of an <code>ActorMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementUsage) or
-owningType.oclIsKindOf(RequirementDefinition) or
-owningType.oclIsKindOf(CaseDefinition) or
-owningType.oclIsKindOf(CaseUsage)
-
-
-
-
-
-
-
-
- <p>The <code>PartUsage</code> specifying the actor.</p>
-
-
-
-
-
-
-
-
-
-
- <p>A <code>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</code>.</p>
-
-
-
- <p>A <code>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Calculations::Calculation')
-
-
-
-
- <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</p>
-
-
- OCL2.0
- calculation = action->selectByKind(CalculationUsage)
-
-
-
-
-
-
-
-
- <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The CalculationUsage being typed by a certain Function.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>CalculationUsage</code> is an <code>ActionUsage</code> that is also an <code>Expression</code>, and, so, is typed by a <code>Function</code>. Nominally, if the <code>type</code> is a <code>CalculationDefinition</code>, a <code>CalculationUsage</code> is a <code>Usage</code> of that <code>CalculationDefinition</code> within a system. However, other kinds of kernel <code>Functions</code> are also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>CalculationUsage</code> must specialize directly or indirectly the <code>CalculationUsage</code> <em><code>Calculations::calculations</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Calculations::calculations')
-
-
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(CalculationDefinition) or
- owningType.oclIsKindOf(CalculationUsage)) implies
- specializesFromLibrary('Calculations::Calculation::subcalculations')
-
-
-
-
-
-
-
-
- <p>The <ode>Function</code> that is the <code>type</code> of this <code>CalculationUsage</code>. Nominally, this would be a <code>CalculationDefinition</code>, but a kernel <code>Function</code> is also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>CalculationUsage</code> is not model-level evaluable.</p>
-
-
-
- OCL2.0
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The CalculationDefinitions that feature a certain CalculationUsage.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedCalculation</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedCalculation<code> is nested.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>ConnectionDefinition</code> is a <code>PartDefinition</code> that is also an <code>AssociationStructure</code>. The end <code>Features</code> of a <code>ConnectionDefinition</code> must be <code>Usages</code>.</p>
-
-
-
- <p>A <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::Connection</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Connections::Connection')
-
-
-
-
- <p>A binary <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::BinaryConnection</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Connections::BinaryConnections')
-
-
-
-
- <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p>
-
-
- OCL2.0
- isSufficient
-
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>ConnectionUsage</code> is a <code>ConnectorAsUsage</code> that is also a <code>PartUsage</code>. Nominally, if its type is a <code>ConnectionDefinition</code>, then a <code>ConnectionUsage</code> is a Usage of that <code>ConnectionDefinition</code>, representing a connection between parts of a system. However, other kinds of kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::connections</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Connections::connections')
-
-
-
-
- <p>A binary <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::binaryConnections</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Connections::binaryConnections')
-
-
-
-
-
-
- <p>The <code>AssociationStructures</code> that are the types of this <code>ConnectionUsage</code>. Nominally, these are , but other kinds of Kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries</p>
-
-
-
-
-
-
-
-
-
-
- <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p>
-
-
-
-
-
-
-
-
- <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowConnectionUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p>
-
-
-
- <p>The <code>objectiveRequirement</code> of a <code>CaseUsage</code> is the <code>RequirementUsage</code> it owns via an <case>ObjectiveMembership</code>, if any.</p>
-
-
- OCL2.0
- objectiveRequirement =
- let objectives: OrderedSet(RequirementUsage) =
- featureMembership->
- selectByKind(ObjectiveMembership).
- ownedRequirement in
- if objectives->isEmpty() then null
- else objectives->first().ownedObjectiveRequirement
- endif
-
-
-
-
- <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ObjectiveMembership)->
- size() <= 1
-
-
-
-
- <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(SubjectMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>actorParameters</code> of a <code>CaseUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjects : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjects->isEmpty() then null
- else subjects->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>CaseUsage</code> must directly or indirectly specialize the base <code>CaseUsage</code> <em><code>Cases::cases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Cases::cases')
-
-
-
-
- <p>A composite <code>CaseUsage</code> whose <code>owningType</code> is a <code>CaseDefinition</code> or <code>CaseUsage</code> must directly or indirectly specialize the <code>CaseUsage</code> <em><code>Cases::Case::subcases</code></em>.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
- (owningType.oclIsKindOf(CaseDefinition) or
- owningType.oclIsKindOf(CaseUsage)) implies
- specializesFromLibrary('Cases::Case::subcases')
-
-
-
-
-
- <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The CaseDefinition that is the type of this CaseUsage.</p>
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>CaseUsage</code> that represents its subject.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>CaseUsage</code> that represent actors involved in the case.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedCase</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The CaseUsages being typed by a certain CaseDefinition.</p>
-
-
-
-
-
-
-
- <p>A <code>CaseDefinition</code> is a <code>CalculationDefinition</code> for a process, often involving collecting evidence or data, relative to a subject, possibly involving the collaboration of one or more other actors, producing a result that meets an objective.</p>
-
-
-
- <p>The <code>objectiveRequirement</code> of a <code>CaseDefinition</code> is the <code>ownedObjectiveRequirement</code> of its <case>ObjectiveMembership</code>, if any.</p>
-
-
- OCL2.0
- objectiveRequirement =
- let objectives: OrderedSet(RequirementUsage) =
- featureMembership->
- selectByKind(ObjectiveMembership).
- ownedRequirement in
- if objectives->isEmpty() then null
- else objectives->first().ownedObjectiveRequirement
- endif
-
-
-
-
- <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ObjectiveMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjectMems : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjectMems->isEmpty() then null
- else subjectMems->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>actorParameters</code> of a <code>CaseDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseDefinition</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- English
- featureMembership->selectByKind(SubjectMembership)->size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>CaseDefinition</code> must directly or indirectly specialize the base <code>CaseDefinition</code> <em><code>Cases::Case></code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Cases::Case')
-
-
-
-
-
- <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</p>
-
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>ObjectiveMembership</code> is a <code>FeatureMembership</code> that indicates that its <code>ownedObjectiveRequirement</code> is the objective <code>RequirementUsage</code> for its <code>owningType</code>, which must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p>
-
-
-
- <p>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsType(CaseDefinition) or
-owningType.oclIsType(CaseUsage)
-
-
-
-
-
- <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p>
-
-
- OCL2.0
- ownedObjectiveRequirement.isComposite
-
-
-
-
-
-
-
- <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p>
-
-
-
-
-
-
-
- <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</p>
-
-
-
- <p>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p>
-
-
- OCL2.0
- resultExpression =
- let results : OrderedSet(ResultExpressionMembership) =
- featureMembersip->
- selectByKind(ResultExpressionMembership) in
- if results->isEmpty() then null
- else results->first().ownedResultExpression
- endif
-
-
-
-
- <p>An <code>AnalysisCaseUsage</code> must directly or indirectly specialize the base <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::analysisCases</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('AnalysisCases::analysisCases')
-
-
-
-
- <p>A composite <code>AnalysisCaseUsage</code> whose <code>owningType</code> is an <code>AnalysisCaseDefinition</code> or <code>AnalysisCaseUsage</code> must specialize the <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::AnalysisCase::subAnalysisCases</code> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
- (owningType.oclIsKindOf(AnalysisCaseDefinition) or
- owningType.oclIsKindOf(AnalysisCaseUsage)) implies
- specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases')
-
-
-
-
-
- <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</code>.</p>
-
-
-
-
-
-
- <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</code>, owned via a <code>ResultExpressionMembership</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p>
-
-
-
-
-
-
-
-
- <p>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p>
-
-
-
- <p>The <code>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p>
-
-
- OCL2.0
- resultExpression =
- let results : OrderedSet(ResultExpressionMembership) =
- featureMembersip->
- selectByKind(ResultExpressionMembership) in
- if results->isEmpty() then null
- else results->first().ownedResultExpression
- endif
-
-
-
-
- <p>An <code>AnalysisCaseDefinition</code> must directly or indirectly specialize the base <code>AnalysisCaseDefinition</code> <code><em>AnalysisCases::AnalysisCase</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('AnalysisCases::AnalysisCase')
-
-
-
-
-
- <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseDefinition</code>, owned via a <code>ResultExpressionMembership</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>An <code>ItemUsage</code> is a <code>ItemUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p>
-
-
- OCL2.0
- itemDefinition = occurrenceDefinition->selectByKind(Structure)
-
-
-
-
- <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</p>
-
-
- OCL2.0
- specializesFromLibrary('Items::items')
-
-
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ItemDefinition) or
- owningType.oclIsKindOf(ItemUsage)) implies
- specializesFromLibrary('Items::Item::subitem')
-
-
-
-
-
- <p>The Structures that are the <code>definitions</code> of this ItemUsage. Nominally, these are ItemDefinitions, but other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Library.</p>
-
-
-
-
-
-
-
-
- <p>An <code>ItemDefinition</code> is an <code>OccurrenceDefinition</code> of the <code>Structure</code> of things that may themselves be systems or parts of systems, but may also be things that are acted on by a system or parts of a system, but which do not necessarily perform actions themselves. This includes items that can be exchanged between parts of a system, such as water or electrical signals.</p>
-
-
-
-
- <p>An <code>ItemDefinition</code> must directly or indirectly specialize the Systems Library Model <code>ItemDefinition</code> <em><code>Items::Item</code>.</p>
-
-
- OCL2.0
- specializesFromLibrary('Items::Item')
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ViewpointDefinition</code> is a <code>RequirementDefinition</code> that specifies one or more stakeholder concerns that are to be satisfied by creating a view of a model.</p>
-
-
-
- <p>The <code>viewpointStakeholders</code> of a <code>ViewpointDefinition</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p>
-
-
- OCL2.0
- viewpointStakeholder = framedConcern.featureMemberhsip->
- selectByKind(StakeholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::Viewpoint</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::Viewpoint')
-
-
-
-
-
- <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointDefinition</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ViewUsage</code> is a usage of a <code>ViewDefinition</code> to specify the generation of a view of the <code>members</code> of a collection of <code>exposedNamespaces</code>. The <code>ViewUsage</code> can satisfy more <code>viewpoints</code> than its definition, and it can specialize the <code>viewRendering</code> specified by its definition.<p>
-
-
-
- <p>The <code>exposedElements</code> of a <code>ViewUsage</code> are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> for which the <code>includeAsExposed</code> operation returns true.</p>
-
-
- OCL2.0
- exposedElement = ownedImport->selectByKind(Expose).
- importedMemberships(Set{}).memberElement->
- select(elm | includeAsExposed(elm))->
- asOrderedSet()
-
-
-
-
- <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>.
-
-
- OCL2.0
- satisfiedViewpoint = ownedRequirement->
- selectByKind(ViewpointUsage)->
- select(isComposite)
-
-
-
-
- <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p>
-
-
- OCL2.0
- viewCondition = ownedMembership->
- selectByKind(ElementFilterMembership).
- condition
-
-
-
-
- <p>The <code>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p>
-
-
- OCL2.0
- viewRendering =
- let renderings: OrderedSet(ViewRenderingMembership) =
- featureMembership->selectByKind(ViewRenderingMembership) in
- if renderings->isEmpty() then null
- else renderings->first().referencedRendering
- endif
-
-
-
-
- <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ViewRenderingMembership)->
- size() <= 1
-
-
-
-
- <p>A <code>ViewUsage</code> must directly or indirectly specialize the base <code>ViewUsage</code> <code><em>Views::views</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::views')
-
-
-
-
- <p>A <code>ViewUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must specialize the <code>ViewUsage</code> <code><em>Views::View::subviews</em></code> from the Systems Library Model.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(ViewDefinition) or
- owningType.oclIsKindOf(ViewUsage)) implies
- specializesFromLibrary('Views::View::subviews')
-
-
-
-
-
- <p>The <code>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>nestedRequirements</code> of this <code>ViewUsage</code> that are <code>ViewpointUsages</code> for (additional) viewpoints satisfied by the <code>ViewUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>Elements</code> that are exposed by this <code>ViewUsage</code>, which are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> that meet all the owned and inherited <code>viewConditions</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewUsage</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewUsage</code>.<p>
-
-
-
-
-
-
- <p>The <code>Expressions</code> related to this <code>ViewUsage</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p>
-
-
-
-
-
-
-
-
- <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p>
-
-
-
- OCL2.0
- let metadataFeatures: Sequence(AnnotatingElement) =
- element.ownedAnnotation.annotatingElement->
- select(oclIsKindOf(MetadataFeature)) in
-self.membership->selectByKind(ElementFilterMembership).
- condition->forAll(cond |
- metadataFeatures->exists(elem |
- cond.checkCondition(elem)))
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The ViewUsage that owns a certain <code>rendering</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewDefinition that owns a certain <code>rendering</code>.</p>
-
-
-
-
-
-
-
-
- p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewDefinitions that feature a certain ViewUsage.</p>
-
-
-
-
-
-
-
- <p>A <code>RenderingDefinition</code> is a <code>PartDefinition</code> that defines a specific rendering of the content of a model view (e.g., symbols, style, layout, etc.).</p>
-
-
-
- <p>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</code>.</p>
-
-
- OCL2.0
- rendering = usages->selectByKind(RenderingUsage)
-
-
-
-
- <p>A <code>RenderingDefinition</code> must directly or indirectly specialize the base <code>RenderingDefinition</code> <code><em>Views::Rendering</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::Rendering')
-
-
-
-
-
- <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</code>.</p>
-
-
-
-
-
- <p>The <code>viewpointStakeholders</code> of a <code>ViewpointUsage</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p>
-
-
- OCL2.0
- viewpointStakeholder = framedConcern.featureMemberhsip->
- selectByKind(StakeholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpoints</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::viewpoints')
-
-
-
-
- <p>A composite <code>ViewpointUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must directly or indirectly specialize the <code>ViewpointUsage</code> <code><em>Views::View::viewpointSatisfactions</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ViewDefinition) or
- owningType.oclIsKindOf(ViewUsage)) implies
- specializesFromLibrary('Views::View::viewpointSatisfactions')
-
-
-
-
-
- <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<code>.</p>
-
-
-
-
-
-
- <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointUsage</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ViewDefinition</code> is a <code>PartDefinition</code> that specifies how a view artifact is constructed to satisfy a <code>viewpoint</code>. It specifies a <code>viewConditions</code> to define the model content to be presented and a <code>viewRendering</code> to define how the model content is presented.</p>
-
-
-
- <p>The <code>views</code> of a <code>ViewDefinition</code> are all its <code>usages</code> that are <code>ViewUsages</code>.</p>
-
-
- OCL2.0
- view = usage->selectByKind(ViewUsage)
-
-
-
-
- <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>.
-
-
- OCL2.0
- satisfiedViewpoint = ownedRequirement->
- selectByKind(ViewpointUsage)->
- select(isComposite)
-
-
-
-
- <p>The <code>viewRendering</code> of a <code>ViewDefinition</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p>
-
-
- OCL2.0
- viewRendering =
- let renderings: OrderedSet(ViewRenderingMembership) =
- featureMembership->selectByKind(ViewRenderingMembership) in
- if renderings->isEmpty() then null
- else renderings->first().referencedRendering
- endif
-
-
-
-
- <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p>
-
-
- OCL2.0
- viewCondition = ownedMembership->
- selectByKind(ElementFilterMembership).
- condition
-
-
-
-
- <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ViewRenderingMembership)->
- size() <= 1
-
-
-
-
- </p>A <code>ViewDefinition</code> must directly or indirectly specialize the base <code>ViewDefinition</code> <code><em>Views::View</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::View')
-
-
-
-
-
- <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</code>.</p>
-
-
-
-
-
-
- <p>The composite <code>ownedRequirements</code> of this <code>ViewDefinition</code> that are <code>ViewpointUsages</code> for viewpoints satisfied by the <code>ViewDefinition</code>.</p>
-
-
-
-
-
-
- <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewDefinition</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewDefinition</code>.<p>
-
-
-
-
-
-
- <p>The <code>Expressions</code> related to this <code>ViewDefinition</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>Expose</code> is an <code>Import</code> of <code>Memberships</code> into a <code>ViewUsage</code> that provide the <code>Elements</code> to be included in a view. Visibility is always ignored for an <code>Expose</code> (i.e., <code>isImportAll = true</code>).</p>
-
-
-
- <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p>
-
-
- OCL2.0
- isImportAll
-
-
-
-
- <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p>
-
-
- OCL2.0
- importOwningNamespace.oclIsType(ViewUsage)
-
-
-
-
- <p>An <code>Expose</code> always has <code>protected</code> visibility.</p>
-
-
- OCL2.0
- visibility = VisibilityKind::protected
-
-
-
-
-
-
-
- <p>An <code>Expose</code> always has <code>protected</code> visibility.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p>
-
-
-
-
-
-
-
-
-
- <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>RenderingUsage</code> is the usage of a <code>RenderingDefinition</code> to specify the rendering of a specific model view to produce a physical view artifact.</p>
-
-
-
-
-
- <p>A <code>RenderingUsage</code> must directly or indirectly specialize the base <code>RenderingUsage</code> <code><em>Views::renderings</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::renderings')
-
-
-
-
- <p>A <code>RenderingUsage</code> whose <code>owningType</code> is a <code>RenderingDefinition</code> or <code>RenderingUsage</code> must directly or indirectly specialize the <code>RenderingUsage</code> <code><em>Views::Rendering::subrenderings</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(RenderingDefinition) or
- owningType.oclIsKindOf(RenderingUsage)) implies
- specializesFromLibrary('Views::Rendering::subrenderings')
-
-
-
-
- <p>A <code>RenderingUsage</code> whose <code>owningFeatureMembership</code> is a <code>ViewRenderingMembership</code> must redefine the <code>RenderingUsage</code> <code><em>Views::View::viewRendering</em></code>.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies
- redefinesFromLibrary('Views::View::viewRendering')
-
-
-
-
-
- <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ViewRenderingMembership</code> is a <coed>FeatureMembership</code> that identifies the <code>viewRendering</code> of a <code>ViewDefinition</code> or <code>ViewUsage</code>.</p>
-
-
-
- <p>The <code>referencedRendering</code> of a <code>ViewRenderingMembership</code> is the the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be a <code>RenderingUsage</code>) of the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p>
-
-
- OCL2.0
- referencedRendering =
- let referencedFeature : Feature =
- ownedRendering.referencedFeatureTarget() in
- if referencedFeature = null then ownedRendering
- else if referencedFeature.oclIsKindOf(RenderingUsage) then
- refrencedFeature.oclAsType(RenderingUsage)
- else null
- endif endif
-
-
-
-
- <p>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(ViewDefinition) or
-owningType.oclIsKindOf(ViewUsage)
-
-
-
-
-
-
-
- <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>.
-
-
-
-
-
-
-
- <p> The <code>RenderingUsage</code> that is referenced through this <code>ViewRenderingMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p>
-
-
-
-
-
-
-
-
- <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>NamespaceExpose</code> is an <code>Expose</code> <code>Relationship</code> that exposes the <code>Memberships</code> of a specific <code>importedNamespace</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p>
-
-
-
-
-
-
-
-
- <p>A <code>MembershipExpose</code> is an <code>Expose</code> <code.Relationship</code> that exposes a specific <code>importedMembership</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p>
-
-
-
-
-
-
-
-
-
-
- <p>A <code>VerificationCaseDefinition</code> is a <code>CaseDefinition</code> for the purpose of verification of the subject of the case against its requirements.</p>
-
-
-
- <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p>
-
-
- OCL2.0
- verifiedRequirement =
- if objectiveRequirement = null then OrderedSet{}
- else
- objectiveRequirement.featureMembership->
- selectByKind(RequirementVerificationMembership).
- verifiedRequirement->asOrderedSet()
- endif
-
-
-
-
- <p>A <code>VerificationCaseDefinition</code> must directly or indirectly specialize the base <code>VerificationCaseDefinition</code> <em><code>VerificationCases::VerificationCase</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('VerificationCases::VerificationCase')
-
-
-
-
-
- <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseDefinition</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</code>.</p>
-
-
-
- <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p>
-
-
- OCL2.0
- verifiedRequirement =
- if objectiveRequirement = null then OrderedSet{}
- else
- objectiveRequirement.featureMembership->
- selectByKind(RequirementVerificationMembership).
- verifiedRequirement->asOrderedSet()
- endif
-
-
-
-
- <p>A <code>VerificationCaseUsage</code> must subset, directly or indirectly, the base <code>VerificationCaseUsage</code> <code><em>VerificationCases::verificationCases</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('VerificationCases::verificationCases')
-
-
-
-
- If it is composite and owned by a <code>VerificationCaseDefinition</code> or <code>VerificationCaseUsage</code>, then it must specialize <code>VerificationCaseUsage</code> <code><em>VerificationCases::VerificationCase::subVerificationCases</code>.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
- (owningType.oclIsKindOf(VerificationCaseDefinition) or
- owningType.oclIsKindOf(VerificationCaseUsage)) implies
- specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases')
-
-
-
-
-
- <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseUsage</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementVerificationMembership</code> is a <code>RequirementConstraintMembership </code> used in the objective of a <code>VerificationCase</code> to identify a <code>RequirementUsage</code> that is verified by the <code>VerificationCase</code>.</p>
-
-
-
- <p>A <code>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- kind = RequirementConstraintKind::requirement
-
-
-
-
- <p>The <code>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementUsage) and
-owningType.owningFeatureMembership <> null and
-owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership)
-
-
-
-
-
- <p>The owned <code>RequirementUsage</code> that acts as the <code>ownedConstraint</code> for this <code>RequirementVerificationMembership</code>. This will either be the <code>verifiedRequirement</code>, or it will subset the <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
- <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p>
-
-
-
-
-
- <p> The <code>RequirementUsage</code> that is identified as being verified. It is the <code>referencedConstraint</code> of the <code>RequirementVerificationMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>EnumerationDefinition</code> is an <code>AttributeDefinition</code> all of whose instances are given by an explicit list of <code>enumeratedValues</code>. This is realized by requiring that the <code>EnumerationDefinition</code> have <code>isVariation = true</code>, with the <code>enumeratedValues</code> being its <code>variants</code>.</p>
-
-
-
- <p>An <code>EnumerationDefinition</code> must be a variation.</p>
-
-
- OCL2.0
- isVariation
-
-
-
-
-
- <p><code>EnumerationUsages</code> of this <code>EnumerationDefinition</code>that have distinct, fixed values. Each <code>enumeratedValue</code> specifies one of the allowed instances of the <code>EnumerationDefinition</code>.</p>
-
-
-
-
-
-
- <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>EnumerationUsage</code> is an <code>AttributeUsage</code> whose <code>attributeDefinition</code> is an <code>EnumerationDefinition</code>.</p>
-
-
-
-
- <p>The single EnumerationDefinition that is the type of this EnumerationUsage.</p>
-
-
-
-
-
-
-
-
- <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p>
-
-
-
-
-
-
-
-
- <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AllocationDefinition</code> is a <code>ConnectionDefinition</code> that specifies that some or all of the responsibility to realize the intent of the <code>source</code> is allocated to the <code>target</code> instances. Such allocations define mappings across the various structures and hierarchies of a system model, perhaps as a precursor to more rigorous specifications and implementations. An <code>AllocationDefinition</code> can itself be refined using nested <code>allocations</code> that give a finer-grained decomposition of the containing allocation mapping.</p>
-
-
-
- <p> The <code>allocations</code> of an <code>AllocationDefinition</code> are all its <code>usages</code> that are <code>AllocationUsages</code>.</p>
-
-
- OCL2.0
- allocation = usage->selectAsKind(AllocationUsage)
-
-
-
-
- <p>An <code>AllocationDefinition</code> must directly or indirectly specialize the <code>AllocationDefinition</code> <em><code>Allocations::Allocation</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Allocations::Allocation')
-
-
-
-
-
- <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AllocationUsage</code> is a usage of an <code>AllocationDefinition</code> asserting the allocation of the <code>source</code> feature to the <code>target</code> feature.</p>
-
-
-
- <p>An <code>AllocationUsage</code> must directly or indirectly specialize the <code>AllocationUsage</code> <em><code>Allocations::allocations</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Allocations::allocations')
-
-
-
-
-
- <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p>
-
-
-
-
-
-
-
- <p><code>PortionKind</code> is an enumeration of the specific kinds of <code><em>Occurrence</em></code> portions that can be represented by an <code>OccurrenceUsage</code>.</p>
-
-
-
- <p>A time slice of an <code>Occurrence</code> (a portion over time).</p>
-
-
-
-
- <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</p>
-
-
-
-
-
- <p>An <code>OccurrenceUsage</code> is a <code>Usage</code> whose <code>types</code> are all <code>Classes</code>. Nominally, if a <code>type</code> is an <code>OccurrenceDefinition</code>, an <code>OccurrenceUsage</code> is a <code>Usage</code> of that <code>OccurrenceDefinition</code> within a system. However, other types of Kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p>
-
-
-
-
- <p>The <code>individualDefinition</code> of an <code>OccurrenceUsage</code> is the <code>occurrenceDefinition</code> that is an <code>OccurrenceDefinition</code> with <code>isIndividual = true</code>, if any.</p>
-
-
- OCL2.0
- individualDefinition =
- let individualDefinitions : OrderedSet(OccurrenceDefinition) =
- occurrenceDefinition->
- selectByKind(OccurrenceDefinition)->
- select(isIndividual) in
- if individualDefinitions->isEmpty() then null
- else individualDefinitions->first() endif
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p>
-
-
- OCL2.0
- isIndividual implies individualDefinition <> null
-
-
-
-
- <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Occurrences::occurrences')
-
-
-
-
- <p>A composite <code>OccurrenceUsage</code>, whose <code>ownedType</code> is a <code>Class</code>, another <code>OccurrenceUsage</code>, or any kind of <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>.
-
-
- OCL2.0
- isComposite and
-owningType <> null and
-(owningType.oclIsKindOf(Class) or
- owningType.oclIsKindOf(OccurrenceUsage) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKind(Class))) implies
- specializesFromLibrary('Occurrences::Occurrence::suboccurrences')
-
-
-
-
- <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p>
-
-
- OCL2.0
- occurrenceDefinition->
- selectByKind(OccurrenceDefinition)->
- select(isIndividual).size() <= 1
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has <code>portionKind = snapshot</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::snapshots</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- portionKind = PortionKind::snapshot implies
- specializesFromLibrary('Occurrences::Occurrence::snapshots')
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has <code>portionKind = timeslice</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::timeSlices</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- portionKind = PortionKind::timeslice implies
- specializesFromLibrary('Occurrences::Occurrence::timeSlices')
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then its <code>owningType</code> must be an <code>OccurrenceDefinition</code> or an <code>OccurrenceUsage</code>.</p>
-
-
- OCL2.0
- portionKind <> null implies
- owningType <> null and
- (owningType.oclIsKindOf(OccurrenceDefinition) or
- owningType.oclIsKindOf(OccurrenceUsage))
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p>
-
-
- OCL2.0
- portionKind <> null implies isPortion
-
-
-
-
-
- <p>The <code>Classes</code> that are the types of this <code>OccurrenceUsage</code>. Nominally, these are <code>OccurrenceDefinitions</code>, but other kinds of kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
- <p>The at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p>
-
-
-
-
-
-
- <p>The kind of temporal portion (time slice or snapshot) is represented by this <code>OccurrenceUsage</code>. If <code>portionKind</code> is not null, then the <code>owningType</code> of the <code>OccurrenceUsage</code> must be non-null, and the <code>OccurrenceUsage</code> represents portions of the featuring instance of the <code>owningType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>OccurrenceDefinition</code> is a <code>Definition</code> of a <code>Class</code> of individuals that have an independent life over time and potentially an extent over space. This includes both structural things and behaviors that act on such structures. If <code>isIndividual</code> is true, then the <code>OccurrenceDefinition</code> is constrained to have (at most) a single instance that is the entire life of a single individual.</p>
-
-
-
- <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must directly or indirectly specialize <em><code>Occurrences::Life</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isIndividual implies specializesFromLibrary('Occurrences::Life')
-
-
-
-
- <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must have a <code>multiplicity</code> that specializes <em><code>Base::zeroOrOne</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isIndividual implies
- multiplicity <> null and
- multiplicity.specializesFromLibrary('Base::zeroOrOne')
-
-
-
-
-
-
-
-
- <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p>
-
-
-
-
-
-
-
-
- <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>EventOccurrenceUsage</code> is an <code>OccurrenceUsage</code> that represents another <code>OccurrenceUsage</code> occurring as a <code><em>suboccurrence</em></code> of the containing occurrence of the <code>EventOccurrenceUsage</code>. Unless it is the <code>EventOccurrenceUsage</code> itself, the referenced <code>OccurrenceUsage</code> is related to the <code>EventOccurrenceUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p>
-
-<p>If the <code>EventOccurrenceUsage</code> is owned by an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it also subsets the <em><code>timeEnclosedOccurrences</code></em> property of the <code>Class</code> <em><code>Occurrence</code></em> from the Kernel Semantic Library model <em><code>Occurrences</code></em>.</p>
-
-
-
- <p>If an <code>EventOccurrenceUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>eventOccurrence</code> is the <code>EventOccurrenceUsage</code> itself. Otherwise, the <code>eventOccurrence</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be an <code>OccurrenceUsage</code>).</p>
-
-
- OCL2.0
- eventOccurrence =
- if referencedFeatureTarget() = null then self
- else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then
- referencedFeatureTarget().oclAsType(OccurrenceUsage)
- else null
- endif endif
-
-
-
-
- <p>If an <code>EventOccurrenceUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>OccurrenceUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(OccurrenceUsage)
-
-
-
-
- <p>If an <code>EventOccurrenceUsage</code> has an <code>owningType</code> that is an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it must directly or indirectly specialize the <code>Feature</code> <code><em>Occurrences::Occurrence::timeEnclosedOccurrences</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(OccurrenceDefinition) or
- owningType.oclIsKindOf(OccurrenceUsage)) implies
- specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences')
-
-
-
-
- <p>An <code>EventOccurrenceUsage</code> must be referential.</p>
-
-
- OCL2.0
- isReference
-
-
-
-
-
- <p>The <code>OccurrenceUsage</code> referenced as an event by this <code>EventOccurrenceUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>EventOccurrenceUsage</code>, if there is one, and, otherwise, the <code>EventOccurrenceUsage</code> itself.</p>
-
-
-
-
-
-
- <p>Always true for an <code>EventOccurrenceUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The UseCaseDefinition that includes a certain <code>includedUseCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p>
-
-
-
-
- <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(UseCaseDefinition) or
- owningType.oclIsKindOf(UseCaseUsage) implies
- specializesFromLibrary('UseCases::UseCase::includedUseCases')
-
-
-
-
- <p>If an <code>IncludeUseCaseUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>UseCaseUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(UseCaseUsage)
-
-
-
-
-
-
- <p>The <code>UseCaseUsage</code> to be included by this <code>IncludeUseCaseUsage</code>. It is the <code>performedAction</code> of the <code>IncludeUseCaseUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>UseCaseUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p>
-
-
-
-
-
-
-
- <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</code>.</p>
-
-
-
- <p>The <code>includedUseCases<code> of a <code>UseCaseUsage</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseUsage<code>.</p>
-
-
- OCL2.0
- includedUseCase = ownedUseCase->
- selectByKind(IncludeUseCaseUsage).
- useCaseIncluded
-
-
-
-
- <p>A <code>UseCaseUsage</code> must directly or indirectly specializes the base <code>UseCaseUsage</code> <em><code>UseCases::useCases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('UseCases::useCases')
-
-
-
-
- <p>A composite <code>UseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::subUseCases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(UseCaseDefinition) or
- owningType.oclIsKindOf(UseCaseUsage)) implies
- specializesFromLibrary('UseCases::UseCase::subUseCases')
-
-
-
-
-
- <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseUse</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseUsage<code>.</p>
-
-
-
-
-
-
-
- <p>A <code>UseCaseDefinition</code> is a <code>CaseDefinition</code> that specifies a set of actions performed by its subject, in interaction with one or more actors external to the subject. The objective is to yield an observable result that is of value to one or more of the actors.</p>
-
-
-
-
- <p>The <code>includedUseCases<code> of a <code>UseCaseDefinition</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseDefinition<code>.</p>
-
-
- OCL2.0
- includedUseCase = ownedUseCase->
- selectByKind(IncludeUseCaseUsage).
- useCaseIncluded
-
-
-
-
- <p>A <code>UseCaseDefinition</code> must directly or indirectly specializes the base <code>UseCaseDefinition</code> <code><em>UseCases::UseCase</em></code> from the Systems Model Library.</p>
-
-
-
-
-
- OCL2.0
- specializesFromLibrary('UseCases::UseCase')
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseDefinition</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseDefinition<code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</code>.</p>
-
-
-
- <p>A <code>MetadataDefinition</code> must directly or indirectly specialize the base <code>MetadataDefinition</code> <code><em>Metadata::MetadataItem</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metadata::MetadataItem')
-
-
-
-
-
-
-
-
-
- <p>A <code>MetadataUsage</code> is a <code>Usage</code> and a <code>MetadataFeature</code>, used to annotate other <code>Elements</code> in a system model with metadata. As a <code>MetadataFeature</code>, its type must be a <code>Metaclass</code>, which will nominally be a <code>MetadataDefinition</code>. However, any kernel <code>Metaclass</code> is also allowed, to permit use of <code>Metaclasses</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>MetadataUsage</code> must directly or indirectly specialize the base <code>MetadataUsage</code> <code><em>Metadata::metadataItems</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metadata::metadataItems')
-
-
-
-
-
-
-
-
- <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FlowUsage</code> is an <code>ActionUsage</code> that is also a <code>ConnectorAsUsage</code> and a KerML <code>Flow</code>.</p>
-
-
-
- <p>A <code>FlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::messages</code></em> from the Systems Library model.</p>
-
-
- OCL2.0
- specializesFromLibrary('Flows::messages')
-
-
-
-
- <p>If a <code>FlowUsage</code> has <code>ownedEndFeatures</code>, it must directly or indirectly specialize the <code>FlowUsage</code> <em><code>Flows::flows</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeatures->notEmpty() implies
- specializesFromLibrary('Flows::flows')
-
-
-
-
-
-
-
-
-
- <p>The <code>Interactions</code> that are the <code>types</code> of this <code>FlowUsage</code>. Nominally, these are <code>FlowDefinitions</code>, but other kinds of Kernel <code>Interactions</code> are also allowed, to permit use of Interactions from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FlowDefinition</code> is an <code>ActionDefinition</code> that is also an <code>Interaction</code> (which is both a KerML <code>Behavior</code> and <code>Association</code>), representing flows between <code>Usages</code>.</p>
-
-
-
- <p>A <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition</code> <em><code>Flows::MessageAction</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Flows::MessageAction')
-
-
-
-
- <p>A binary <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition<code> <em><code>Flows::Message</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- flowEnd->size() = 2 implies
- specializesFromLibrary('Flows::Message')
-
-
-
-
- <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p>
-
-
- OCL2.0
- flowEnd->size() <= 2
-
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</p>
-
-
-
- <p>A <code>SuccessionFlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::successionFlows</code></em> from the Systems Library model.</p>
-
-
- OCL2.0
- specializesFromLibrary('Flows::successionFlows')
-
-
-
-
-
-
-
-
-
-
diff --git a/Resources/SysML_xmi.uml b/Resources/SysML_xmi.uml
index 33875557..84e2eae7 100644
--- a/Resources/SysML_xmi.uml
+++ b/Resources/SysML_xmi.uml
@@ -1,8689 +1,3731 @@
-
-
-
-
- The Root layer provides the syntactic foundation for KerML.
-
-
-
-
-
- <p>A <code>Dependency</code> is a <code>Relationship</code> that indicates that one or more <code>client</code> <code>Elements</code> require one more <code>supplier</code> <code>Elements</code> for their complete specification. In general, this means that a change to one of the <code>supplier</code> <code>Elements</code> may necessitate a change to, or re-specification of, the <code>client</code> <code>Elements</code>.</p>
-
-<p>Note that a <code>Dependency</code> is entirely a model-level <code>Relationship</code>, without instance-level semantics.</p>
-
-
-
-
- <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</code>.</p>
-
-
-
-
-
-
- <p>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Comment</code> is an <code>AnnotatingElement</code> whose <code>body</code> in some way describes its <code>annotatedElements</code>.</p>
-
-
-
-
-
- <p>Identification of the language of the <code>body</code> text and, optionally, the region and/or encoding. The format shall be a POSIX locale conformant to ISO/IEC 15897, with the format <code>[language[_territory][.codeset][@modifier]]</code>.</p>
-
-
-
-
-
-
-
- <p>The annotation text for the <code>Comment</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>Annotation</code> is a Relationship between an <code>AnnotatingElement</code> and the <code>Element</code> that is annotated by that <code>AnnotatingElement</code>.</p>
-
-
-
-
- <p>An <code>Annotation</code> owns its <code>annotatingElement</code> if and only if it is owned by its <code>annotatedElement</code>.</p>
-
-
- OCL2.0
- (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null)
-
-
-
-
- <p>Either the <code>ownedAnnotatingElement</code> of an <code>Annotation</code> must be non-null, or the <code>owningAnnotatingElement</code> must be non-null, but not both.</p>
-
-
- OCL2.0
- ownedAnnotatingElement <> null xor owningAnnotatingElement <> null
-
-
-
-
- <p>The <code>ownedAnnotatingElement</code> of an <code>Annotation</code> is the first <code>ownedRelatedElement</code> that is an <code>AnnotatingElement</code>, if any.</p>
-
-
- OCL2.0
- ownedAnnotatingElement =
- let ownedAnnotatingElements : Sequence(AnnotatingElement) =
- ownedRelatedElement->selectByKind(AnnotatingElement) in
- if ownedAnnotatingElements->isEmpty() then null
- else ownedAnnotatingElements->first()
- endif
-
-
-
-
- <p>The <code>annotatingElement</code> of an <code>Annotation</code> is either its <code>ownedAnnotatingElement</code> or its <code>owningAnnotatingElement</code>.</p>
-
-
- OCL2.0
- annotatingElement =
- if ownedAnnotatingElement <> null then ownedAnnotatingElement
- else owningAnnotatingElement
- endif
-
-
-
-
-
- <p>The <code>AnnotatingElement</code> that annotates the <code>annotatedElement</code> of this <code>Annotation</code>. This is always either the <code>ownedAnnotatingElement</code> or the <code>owningAnnotatingElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p>
-
-
-
-
-
-
-
- <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is the <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
- <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is an <code>ownedRelatedElement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Annotations associated with a certain <code>annotatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AnnotatingElement</code> is an <code>Element</code> that provides additional description of or metadata on some other <code>Element</code>. An <code>AnnotatingElement</code> is either attached to its <code>annotatedElements</code> by <code>Annotation</code> <code>Relationships</code>, or it implicitly annotates its <code>owningNamespace</code>.</p>
-
-
-
-
- <p>If an <code>AnnotatingElement</code> has <code>annotations</code>, then its <code>annotatedElements</code> are the <code>annotatedElements</code> of all its <code>annotations</code>. Otherwise, it's single <code>annotatedElement</code> is its <code>owningNamespace</code>.</p>
-
-
- OCL2.0
- annotatedElement =
- if annotation->notEmpty() then annotation.annotatedElement
- else Sequence{owningNamespace} endif
-
-
-
-
- <p>The <code>ownedAnnotatingRelationships</code> of an <code>AnnotatingElement</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>AnnotatingElement</code> is not the <code>annotatedElement</code>.</p>
-
-
- OCL2.0
- ownedAnnotatingRelationship = ownedRelationship->
- selectByKind(Annotation)->
- select(a | a.annotatedElement <> self)
-
-
-
-
- <p>The <code>annotations</code> of an <code>AnnotatingElement</code> are its <code>owningAnnotatingRelationship</code> (if any) followed by all its <code>ownedAnnotatingRelationships</code>.</p>
-
-
- OCL2.0
- annotation =
- if owningAnnotatingRelationship = null then ownedAnnotatingRelationship
- else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship)
- endif
-
-
-
-
-
- <p>The <code>Elements</code> that are annotated by this <code>AnnotatingElement</code>. If <code>annotation</code> is not empty, these are the <code>annotatedElements</code> of the <code>annotations</code>. If <code>annotation</code> is empty, then it is the <code>owningNamespace</code> of the <code>AnnotatingElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>AnnotatingElement</code> that are <code>Annotations</code>, for which this <code>AnnotatingElement</code> is the <code>annotatingElement</code>.</p>
-
-
-
-
-
-
- <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p>
-
-
-
-
-
-
- <p>The <code>Annotations</code> that relate this <code>AnnotatingElement</code> to its <code>annotatedElements</code>. This includes the <code>owningAnnotatingRelationship</code> (if any) followed by all the <code>ownedAnnotatingRelationshps</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TextualRepresentation</code> is an <code>AnnotatingElement</code> whose <code>body</code> represents the <code>representedElement</code> in a given <code>language</code>. The <code>representedElement</code> must be the <code>owner</code> of the <code>TextualRepresentation</code>. The named <code>language</code> can be a natural language, in which case the <code>body</code> is an informal representation, or an artificial language, in which case the <code>body</code> is expected to be a formal, machine-parsable representation.</p>
-
-<p>If the named <code>language</code> of a <code>TextualRepresentation</code> is machine-parsable, then the <code>body</code> text should be legal input text as defined for that <code>language</code>. The interpretation of the named language string shall be case insensitive. The following <code>language</code> names are defined to correspond to the given standard languages:</p>
-
-<table border="1" cellpadding="1" cellspacing="1" width="498">
- <thead>
- </thead>
- <tbody>
- <tr>
- <td style="text-align: center; width: 154px;"><code>kerml</code></td>
- <td style="width: 332px;">Kernel Modeling Language</td>
- </tr>
- <tr>
- <td style="text-align: center; width: 154px;"><code>ocl</code></td>
- <td style="width: 332px;">Object Constraint Language</td>
- </tr>
- <tr>
- <td style="text-align: center; width: 154px;"><code>alf</code></td>
- <td style="width: 332px;">Action Language for fUML</td>
- </tr>
- </tbody>
-</table>
-
-<p>Other specifications may define specific <code>language</code> strings, other than those shown above, to be used to indicate the use of languages from those specifications in KerML <code>TextualRepresentation</code>.</p>
-
-<p>If the <code>language</code> of a <code>TextualRepresentation</code> is "<code>kerml</code>", then the <code>body</code> text shall be a legal representation of the <code>representedElement</code> in the KerML textual concrete syntax. A conforming tool can use such a <code>TextualRepresentation</code> <code>Annotation</code> to record the original KerML concrete syntax text from which an <code>Element</code> was parsed. In this case, it is a tool responsibility to ensure that the <code>body</code> of the <code>TextualRepresentation</code> remains correct (or the Annotation is removed) if the annotated <code>Element</code> changes other than by re-parsing the <code>body</code> text.</p>
-
-<p>An <code>Element</code> with a <code>TextualRepresentation</code> in a language other than KerML is essentially a semantically "opaque" <code>Element</code> specified in the other language. However, a conforming KerML tool may interpret such an element consistently with the specification of the named language.</p>
-
-
-
-
-
- <p>The natural or artifical language in which the <code>body</code> text is written.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p>
-
-
-
-
-
-
-
- <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Documentation</code> is a <code>Comment</code> that specifically documents a <code>documentedElement</code>, which must be its <code>owner</code>.</p>
-
-
-
-
-
- <p>The <code>Element</code> that is documented by this <code>Documentation</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Namespace</code> is an <code>Element</code> that contains other <code>Elements</code>, known as its <code>members</code>, via <code>Membership</code> <code>Relationships</code> with those <code>Elements</code>. The <code>members</code> of a <code>Namespace</code> may be owned by the <code>Namespace</code>, aliased in the <code>Namespace</code>, or imported into the <code>Namespace</code> via <code>Import</code> <code>Relationships</code>.</p>
-
-<p>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</code>.</p>
-
-
-
-
- <p>All <code>memberships</code> of a <code>Namespace</code> must be distinguishable from each other.</p>
-
-
- OCL2.0
- membership->forAll(m1 |
- membership->forAll(m2 |
- m1 <> m2 implies m1.isDistinguishableFrom(m2)))
-
-
-
-
- <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</code>.</p>
-
-
- OCL2.0
- member = membership.memberElement
-
-
-
-
- <p>The <code>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>.
-
-
- OCL2.0
- ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement
-
-
-
-
- <p>The <code>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</p>
-
-
- OCL2.0
- importedMembership = importedMemberships(Set{})
-
-
-
-
- <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</code>.</p>
-
-
- OCL2.0
- ownedImport = ownedRelationship->selectByKind(Import)
-
-
-
-
- <p>The <code>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</code>.</p>
-
-
- OCL2.0
- ownedMembership = ownedRelationship->selectByKind(Membership)
-
-
-
-
-
- <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>The set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</code>.</p>
-
-
-
-
-
-
-
- <p>The owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <code>Namespace</code>.</p>
-
-
-
-
-
-
-
- <p>Return the names of the given <code>element</code> as it is known in this <code>Namespace</code>.</p>
-
-
-
-
- OCL2.0
- let elementMemberships : Sequence(Membership) =
- memberships->select(memberElement = element) in
-memberships.memberShortName->
- union(memberships.memberName)->
- asSet()
-
-
-
-
-
-
-
-
-
-
-
- <p>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</p>
-
-
-
-
- OCL2.0
- if importedMembership->includes(mem) then
- ownedImport->
- select(importedMemberships(Set{})->includes(mem)).
- first().visibility
-else if memberships->includes(mem) then
- mem.visibility
-else
- VisibilityKind::private
-endif
-
-
-
-
-
-
-
- <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p>
-
-
-
-
- OCL2.0
- let visibleMemberships : OrderedSet(Membership) =
- if includeAll then membershipsOfVisibility(null, excluded)
- else membershipsOfVisibility(VisibilityKind::public, excluded)
- endif in
-if not isRecursive then visibleMemberships
-else visibleMemberships->union(ownedMember->
- selectAsKind(Namespace).
- select(includeAll or owningMembership.visibility = VisibilityKind::public)->
- visibleMemberships(excluded->including(self), true, includeAll))
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</code>.</p>
-
-
-
-
- OCL2.0
- ownedImport.importedMemberships(excluded->including(self))
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p>
-
-
-
- OCL2.0
- ownedMembership->
- select(mem | visibility = null or mem.visibility = visibility)->
- union(ownedImport->
- select(imp | visibility = null or imp.visibility = visibility).
- importedMemberships(excluded->including(self)))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</p>
-
-
-
-
- OCL2.0
- let qualification : String = qualificationOf(qualifiedName) in
-let name : String = unqualifiedNameOf(qualifiedName) in
-if qualification = null then resolveLocal(name)
-else if qualification = '$' then resolveGlobal(name)
-else
- let namespaceMembership : Membership = resolve(qualification) in
- if namespaceMembership = null or
- not namespaceMembership.memberElement.oclIsKindOf(Namespace)
- then null
- else
- namespaceMembership.memberElement.oclAsType(Namespace).
- resolveVisible(name)
- endif
-endif endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</p>
-
-
-
-
- English
- No OCL
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</p>
-
-
-
-
- OCL2.0
- if owningNamespace = null then resolveGlobal(name)
-else
- let memberships : Membership = membership->
- select(memberShortName = name or memberName = name) in
- if memberships->notEmpty() then memberships->first()
- else owningNamspace.resolveLocal(name)
- endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</code>.</p>
-
-
-
-
- OCL2.0
- let memberships : Sequence(Membership) =
- visibleMemberships(Set{}, false, false)->
- select(memberShortName = name or memberName = name) in
-if memberships->isEmpty() then null
-else memberships->first()
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</p>
-
-
-
- English
- No OCL
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p>
-
-
-
- English
- No OCL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>An <code>Import</code> is an <code>Relationship</code> between its <code>importOwningNamespace</code> and either a <code>Membership</code> (for a <code>MembershipImport</code>) or another <code>Namespace</code> (for a <code>NamespaceImport</code>), which determines a set of <code>Memberships</code> that become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. If <code>isImportAll = false</code> (the default), then only public <code>Memberships</code> are considered "visible". If <code>isImportAll = true</code>, then all <code>Memberships</code> are considered "visible", regardless of their declared <code>visibility</code>. If <code>isRecursive = true</code>, then visible <code>Memberships</code> are also recursively imported from owned sub-<code>Namespaces</code>.</p>
-
-
-
-
-
- <p>A top-level <code>Import</code> (that is, one that is owned by a root <code>Namespace</code>) must have a <code>visibility</code> of <code>private</code>.</p>
-
-
- OCL2.0
- importOwningNamespace.owner = null implies
- visibility = VisibilityKind::private
-
-
-
-
-
- <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p>
-
-
-
-
-
-
-
- <p>The visibility level of the imported <code>members</code> from this Import relative to the <code>importOwningNamespace</code>. The default is <code>private</code>.</p>
-
-
-
-
-
-
- <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p>
-
-
-
-
-
-
- <p>Whether to import memberships without regard to declared visibility.</p>
-
-
-
-
-
-
-
- <p>The effectively imported <code>Element</code> for this </code>Import</code>. For a <code>MembershipImport</code>, this is the <code>memberElement</code> of the <code>importedMembership</code>. For a <code>NamespaceImport</code>, it is the <code>importedNamespace</code>.</p>
-
-
-
-
-
-
- <p>Returns Memberships that are to become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. (The <code>excluded</code> parameter is used to handle the possibility of circular Import Relationships.)</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on that <code>Namespace</code>.</p>
-
-
-
-
- <p>The <code>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p>
-
-
- OCL2.0
- importedElement = importedMembership.memberElement
-
-
-
-
-
- <p>The <code>Membership</code> to be imported.</p>
-
-
-
-
-
-
-
- <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p>
-
-
-
-
- OCL2.0
- if not isRecursive or
- not importedElement.oclIsKindOf(Namespace) or
- excluded->includes(importedElement)
-then Sequence{importedMembership}
-else importedElement.oclAsType(Namespace).
- visibleMemberships(excluded, true, importAll)->
- prepend(importedMembership)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Membership with a certain Element as its <code>memberElement</code>.</p>
-
-
-
-
-
-
-
-
- <p>An Import with a certain <code>importedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>NamespaceImport</code> is an Import that imports <code>Memberships</code> from its <code>importedNamespace</code> into the <code>importOwningNamespace</code>. If <code> isRecursive = false</code>, then only the visible <code>Memberships</code> of the <code>importedNamespace</code> are imported. If <code> isRecursive = true</code>, then, in addition, <code>Memberships</code> are recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are <code>Namespaces</code>.</p>
-
-
-
-
- <p>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p>
-
-
- OCL2.0
- importedElement = importedNamespace
-
-
-
-
-
- <p>The <code>Namespace</code> whose visible <code>Memberships</code> are imported by this <code>NamespaceImport</code>.</p>
-
-
-
-
-
-
-
- <p>Returns at least the visible <code>Memberships</code> of the <code>importedNamespace</code>. If <code>isRecursive = true</code>, then <code>Memberships</code> are also recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are themselves <code>Namespaces</code>.</p>
-
-
-
-
- OCL2.0
- if excluded->includes(importedNamespace) then Sequence{}
-else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Namespace that has a certain <code>membership</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Membership</code> is a <code>Relationship</code> between a <code>Namespace</code> and an <code>Element</code> that indicates the <code>Element</code> is a <code>member</code> of (i.e., is contained in) the Namespace. Any <code>memberNames</code> specify how the <code>memberElement</code> is identified in the <code>Namespace</code> and the <code>visibility</code> specifies whether or not the <code>memberElement</code> is publicly visible from outside the <code>Namespace</code>.</p>
-
-<p>If a <code>Membership</code> is an <code>OwningMembership</code>, then it owns its <code>memberElement</code>, which becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>. Otherwise, the <code>memberNames</code> of a <code>Membership</code> are effectively aliases within the <code>membershipOwningNamespace</code> for an <code>Element</code> with a separate <code>OwningMembership</code> in the same or a different <code>Namespace</code>.</p>
-
-<p> </p>
-
-
-
-
- <p>The <code>memberElementId</code> of a <code>Membership</code> is the <code>elementId</code> of its <code>memberElement</code>.</p>
-
-
- OCL2.0
- memberElementId = memberElement.elementId
-
-
-
-
-
- <p>The <code>elementId</code> of the <code>memberElement</code>.</p>
-
-
-
-
-
- <p>The <code>Namespace</code> of which the <code>memberElement</code> becomes a <code>member</code> due to this <code>Membership</code>.</p>
-
-
-
-
-
-
-
- <p>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Element</code> that becomes a <code>member</code> of the <code>membershipOwningNamespace</code> due to this <code>Membership</code>.</p>
-
-
-
-
-
-
-
- <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
-
-
-
-
- <p>Whether or not the <code>Membership</code> of the <code>memberElement</code> in the <code>membershipOwningNamespace</code> is publicly visible outside that <code>Namespace</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>Membership</code> is distinguishable from a given <code>other</code> <code>Membership</code>. By default, this is true if this <code>Membership</code> has no <code>memberShortName</code> or <code>memberName</code>; or each of the <code>memberShortName</code> and <code>memberName</code> are different than both of those of the <code>other</code> <code>Membership</code>; or neither of the metaclasses of the <code>memberElement</code> of this <code>Membership</code> and the <code>memberElement</code> of the <code>other</code> <code>Membership</code> conform to the other. But this may be overridden in specializations of <code>Membership</code>.</p>
-
-
-
-
- OCL2.0
- not (memberElement.oclKindOf(other.memberElement.oclType()) or
- other.memberElement.oclKindOf(memberElement.oclType())) or
-(shortMemberName = null or
- (shortMemberName <> other.shortMemberName and
- shortMemberName <> other.memberName)) and
-(memberName = null or
- (memberName <> other.shortMemberName and
- memberName <> other.memberName)))
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Namespace with a certain <code>importedMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>OwningMembership</code> is a <code>Membership</code> that owns its <code>memberElement</code> as a <code>ownedRelatedElement</code>. The <code>ownedMemberElement</code> becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>.</p>
-
-
-
-
- <p>The <code>ownedMemberName</code> of an <code>OwningMembership</code> is the <code>name</code> of its <code>ownedMemberElement</code>.</p>
-
-
- OCL2.0
- ownedMemberName = ownedMemberElement.name
-
-
-
-
- <p>The <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</code>.</p>
-
-
- OCL2.0
- ownedMemberShortName = ownedMemberElement.shortName
-
-
-
-
-
- <p>The <code>Element</code> that becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code> due to this <code>OwningMembership</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>elementId</code> of the <code>ownedMemberElement</code>.</p>
-
-
-
-
-
- <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>name</code> of the <code>ownedMemberElement</code>.</p>
-
-
-
-
-
-
-
-
- <p>If the <code>ownedMemberElement</code> of this <code>OwningMembership</code> has a non-null <code>qualifiedName</code>, then return the string constructed by appending to that <code>qualifiedName</code> the string <code>"/owningMembership"</code>. Otherwise, return the <code>path</code> of the <code>OwningMembership</code> as specified for a <code>Relationship</code> in general.
-
-
-
- OCL2.0
- if ownedElement.qualifiedName <> null then
- ownedElement.qualifiedName + '/owningMembership'
-else self.oclAsType(Relationship).path()
-endif
-
-
-
-
-
-
-
-
-
-
- <p>The Namespace the has a certain Element as a <code>member</code>.</p>
-
-
-
-
-
-
-
- <p><code>VisibilityKind</code> is an enumeration whose literals specify the visibility of a <code>Membership</code> of an <code>Element</code> in a <code>Namespace</code> outside of that <code>Namespace</code>. Note that "visibility" specifically restricts whether an <code>Element</code> in a <code>Namespace</code> may be referenced by name from outside the <code>Namespace</code> and only otherwise restricts access to an <code>Element</code> as provided by specific constraints in the abstract syntax (e.g., preventing the import or inheritance of private <code>Elements</code>).</p>
-
-
-
-
- <p>Indicates a <code>Membership</code> is not visible outside its owning <code>Namespace</code>.</p>
-
-
-
-
- <p>An intermediate level of visibility between <code>public</code> and <code>private</code>. By default, it is equivalent to <code>private</code> for the purposes of normal access to and import of <code>Elements</code> from a <code>Namespace</code>. However, other <code>Relationships</code> may be specified to include <code>Memberships</code> with <code>protected</code> visibility in the list of <code>memberships</code> for a <code>Namespace</code> (e.g., <code>Specialization</code>).</p>
-
-
-
-
-
- <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p>
-
-
-
-
-
-
- <p>A MembershipImport that has a certain <code>importedMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>Element</code> is a constituent of a model that is uniquely identified relative to all other <code>Elements</code>. It can have <code>Relationships</code> with other <code>Elements</code>. Some of these <code>Relationships</code> might imply ownership of other <code>Elements</code>, which means that if an <code>Element</code> is deleted from a model, then so are all the <code>Elements</code> that it owns.</p>
-
-
-
-
- <p>The <code>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</code>.</p>
-
-
- OCL2.0
- ownedElement = ownedRelationship.ownedRelatedElement
-
-
-
-
- <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p>
-
-
- OCL2.0
- owner = owningRelationship.owningRelatedElement
-
-
-
-
- <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</p>
-
-
- OCL2.0
- qualifiedName =
- if owningNamespace = null then null
- else if name <> null and
- owningNamespace.ownedMember->
- select(m | m.name = name).indexOf(self) <> 1 then null
- else if owningNamespace.owner = null then escapedName()
- else if owningNamespace.qualifiedName = null or
- escapedName() = null then null
- else owningNamespace.qualifiedName + '::' + escapedName()
- endif endif endif endif
-
-
-
-
- <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p>
-
-
- OCL2.0
- documentation = ownedElement->selectByKind(Documentation)
-
-
-
-
- <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p>
-
-
- OCL2.0
- ownedAnnotation = ownedRelationship->
- selectByKind(Annotation)->
- select(a | a.annotatedElement = self)
-
-
-
-
- <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</p>
-
-
- OCL2.0
- name = effectiveName()
-
-
-
-
- <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p>
-
-
- OCL2.0
- ownedRelationship->exists(isImplied) implies isImpliedIncluded
-
-
-
-
- <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p>
-
-
- OCL2.0
- isLibraryElement = libraryNamespace() <> null
-
-
-
-
-
- <p>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p>
-
-
- OCL2.0
- shortName = effectiveShortName()
-
-
-
-
- <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamspace</code> of its <code>owningMembership</code> (if any).</p>
-
-
- OCL2.0
- owningNamespace =
- if owningMembership = null then null
- else owningMembership.membershipOwningNamespace
- endif
-
-
-
-
- <p>The <code>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p>
-
-
- OCL2.0
- textualRepresentation = ownedElement->selectByKind(TextualRepresentation)
-
-
-
-
- <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p>
-
-
-
-
-
-
-
- <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p>
-
-
-
-
-
-
-
- <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p>
-
-
-
-
-
-
-
- <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p>
-
-
-
-
-
- <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p>
-
-
-
-
-
-
- <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p>
-
-
-
-
-
-
- <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</p>
-
-
-
-
-
-
-
- <p>The Documentation owned by this Element.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code>
-
-
-
-
-
-
- <p>The <code>TextualRepresentations</code> that annotate this <code>Element</code>.</p>
-
-
-
-
-
-
- <p>Various alternative identifiers for this Element. Generally, these will be set by tools.</p>
-
-
-
-
-
-
-
- <p>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</p>
-
-
-
-
-
-
-
-
- <p>The declared name of this <code>Element</code>.</p>
-
-
-
-
-
-
-
-
- <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p>
-
-
-
-
-
-
-
- <p>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</p>
-
-
-
-
-
-
-
- <p>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</p>
-
-
-
-
-
-
-
- <p>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</p>
-
-
-
-
-
-
- <p>Whether this Element is contained in the ownership tree of a library model.</p>
-
-
-
-
-
- <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p>
-
-
-
-
-
-
-
-
-
- <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</code>.</p>
-
-
-
- OCL2.0
- declaredShortName
-
-
-
-
-
-
-
-
-
-
- <p>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</code>.</p>
-
-
-
- OCL2.0
- declaredName
-
-
-
-
-
-
-
-
-
-
- <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p>
-
-
-
- OCL2.0
- if owningRelationship <> null then owningRelationship.libraryNamespace()
-else null endif
-
-
-
-
-
-
-
-
-
- <p>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p>
-
-<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p>
-
-
-
- OCL2.0
- if qualifiedName <> null then qualifiedName
-else if owningRelationship <> null then
- owningRelationship.path() + '/' +
- owningRelationship.ownedRelatedElement->indexOf(self).toString()
- -- A position index shall be converted to a decimal string representation
- -- consisting of only decimal digits, with no sign, leading zeros or leading
- -- or trailing whitespace.
-else ''
-endif endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Relationship</code> is an <code>Element</code> that relates other <code>Element</code>. Some of its <code>relatedElements</code> may be owned, in which case those <code>ownedRelatedElements</code> will be deleted from a model if their <code>owningRelationship</code> is. A <code>Relationship</code> may also be owned by another <code>Element</code>, in which case the <code>ownedRelatedElements</code> of the <code>Relationship</code> are also considered to be transitively owned by the <code>owningRelatedElement</code> of the <code>Relationship</code>.</p>
-
-<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p>
-
-<p>A "relationship <code>Element</code>" in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a "non-relationship <code>Element</code>". It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</code>.</p>
-
-
-
-
- <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p>
-
-
- OCL2.0
- relatedElement = source->union(target)
-
-
-
-
-
- <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p>
-
-
-
-
-
-
- <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</p>
-
-
-
-
-
-
-
- <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p>
-
-
-
-
-
-
- <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</p>
-
-
-
-
-
-
- <p>The <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p>
-
-
-
-
-
-
- <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p>
-
-
-
-
-
-
- <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p>
-
-
-
- OCL2.0
- if owningRelatedElement <> null then owningRelatedElement.libraryNamespace()
-else if owningRelationship <> null then owningRelationship.libraryNamespace()
-else null endif endif
-
-
-
-
-
-
-
-
-
- <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p>
-
-
-
- OCL2.0
- if owningRelationship = null and owningRelatedElement <> null then
- owningRelatedElement.path() + '/' +
- owningRelatedElement.ownedRelationship->indexOf(self).toString()
- -- A position index shall be converted to a decimal string representation
- -- consisting of only decimal digits, with no sign, leading zeros or leading
- -- or trailing whitespace.
-else self.oclAsType(Element).path()
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- The Core layer provides the semantic foundation for KerML.
-
-
-
-
-
-
- <p>A Type with a certain <code>input</code>.</p>
-
-
-
-
-
-
-
-
- <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A Type with a certain <code>output</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Specialization</code> is a <code>Relationship</code> between two <code>Types</code> that requires all instances of the <code>specific</code> type to also be instances of the <code>general</code> Type (i.e., the set of instances of the <code>specific</code> Type is a <em>subset</em> of those of the <code>general</code> Type, which might be the same set).</p>
-
-
-
-
- <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p>
-
-
- OCL2.0
- not specific.isConjugated
-
-
-
-
-
- <p>The <code>Type</code> that is the <code>specific</code> <code>Type</code> of this <code>Specialization</code> and owns it as its <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Type</code> with a superset of all instances of the <code>specific</code> <code>Type</code>, which might be the same set.</p>
-
-
-
-
-
-
-
- <p>A <code>Type</code> with a subset of all instances of the <code>general</code> <code>Type</code>, which might be the same set.</p>
-
-
-
-
-
-
-
-
- <p><code>FeatureDirectionKind</code> enumerates the possible kinds of <code>direction</code> that a <code>Feature</code> may be given as a member of a <code>Type</code>.</p>
-
-
-
-
- <p>Values of the <code>Feature</code> on each instance of its domain are determined externally to that instance and used internally.</p>
-
-
-
-
-
- <p>Values of the <code>Feature</code> on each instance are determined either as <em>in</em> or <em>out</em> directions, or both.</p>
-
-
-
-
-
- <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p>
-
-
-
-
-
-
-
- <p>The Specializations with a certain <code>specific</code> Type.</p>
-
-
-
-
-
-
-
-
-
- <p>The Specializations with a certain <code>general<code> Type.</p>
-
-
-
-
-
-
-
- <p>A <code>Type</code> is a <code>Namespace</code> that is the most general kind of <code>Element</code> supporting the semantics of classification. A <code>Type</code> may be a <code>Classifier</code> or a <code>Feature</code>, defining conditions on what is classified by the <code>Type</code> (see also the description of <code>isSufficient</code>).</p>
-
-
-
-
- <p>The <code>ownedSpecializations</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Specializations</code> whose <code>special</code> <code>Type</code> is the owning <code>Type</code>.</p>
-
-
- OCL2.0
- ownedSpecialization = ownedRelationship->selectByKind(Specialization)->
- select(s | s.special = self)
-
-
-
-
-
- <p>If a <code>Type</code> has an owned <code>Multiplicity</code>, then that is its <code>multiplicity</code>. Otherwise, if the <code>Type</code> has an <code>ownedSpecialization</code>, then its <code>multiplicity</code> is the <code>multiplicity</code> of the <code>general</code> <code>Type</code> of that <code>Specialization</code>.</p>
-
-
- OCL2.0
- multiplicity =
- let ownedMultiplicities: Sequence(Multiplicity) =
- ownedMember->selectByKind(Multiplicity) in
- if ownedMultiplicities->isEmpty() then null
- else ownedMultiplicities->first()
- endif
-
-
-
-
- <p>The <code>ownedFeatureMemberships</code> of a <code>Type</code> are its <code>ownedMemberships</code> that are <code>FeatureMemberships</code>.</p>
-
-
- OCL2.0
- ownedFeatureMembership = ownedRelationship->selectByKind(FeatureMembership)
-
-
-
-
- <p>The <code>ownedConjugator</code> of a <code>Type</code> is the its single <code>ownedRelationship</code> that is a <code>Conjugation</code>.</p>
-
-
- OCL2.0
- ownedConjugator =
- let ownedConjugators: Sequence(Conjugator) =
- ownedRelationship->selectByKind(Conjugation) in
- if ownedConjugators->isEmpty() then null
- else ownedConjugators->at(1) endif
-
-
-
-
- <p>The <code>outputs</code> of a <code>Type</code> are those of its <code>features</code> that have a direction of <ode>out</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p>
-
-
- OCL2.0
- output = feature->select(f |
- let direction: FeatureDirectionKind = directionOf(f) in
- direction = FeatureDirectionKind::out or
- direction = FeatureDirectionKind::inout)
-
-
-
-
- <p>The <code>inputs</code> of a <code>Type</code> are those of its features that have a direction of <code>in</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p>
-
-
- OCL2.0
- input = feature->select(f |
- let direction: FeatureDirectionKind = directionOf(f) in
- direction = FeatureDirectionKind::_'in' or
- direction = FeatureDirectionKind::inout)
-
-
-
-
- <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</p>
-
-
- OCL2.0
- inheritedMembership = inheritedMemberships(Set{}, Set{}, false)
-
-
-
-
- <p>A <code>Type</code> must directly or indirectly specialize <code><em>Base::Anything</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::Anything')
-
-
-
-
- <p>The <code>directedFeatures</code> of a <code>Type</code> are those <code>features</code> for which the <code>direction</code> is non-null.</p>
-
-
- OCL2.0
- directedFeature = feature->select(f | directionOf(f) <> null)
-
-
-
-
- <p>The <code>features</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>featureMemberships</code>.
-
-
- OCL2.0
- feature = featureMembership.ownedMemberFeature
-
-
-
-
- <p>The <code>featureMemberships</code> of a <code>Type</code> is the union of the <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p>
-
-
- OCL2.0
- featureMembership = ownedFeatureMembership->union(
- inheritedMembership->selectByKind(FeatureMembership))
-
-
-
-
- <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>.
-
-
- English
- ownedFeature = ownedFeatureMembership.ownedMemberFeature
-
-
-
-
- <p>The <code>differencingTypes</code> of a <code>Type</code> are the <code>differencingTypes</code> of its <code>ownedDifferencings</code>, in the same order.</p>
-
-
- English
- differencingType = ownedDifferencing.differencingType
-
-
-
-
- <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p>
-
-
- English
- intersectingType->excludes(self)
-
-
-
-
- <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</p>
-
-
- English
- differencingType->excludes(self)
-
-
-
-
- <p>The <code>unioningTypes</code> of a <code>Type</code> are the <code>unioningTypes</code> of its <code>ownedUnionings</code>.<p>
-
-
- OCL2.0
- unioningType = ownedUnioning.unioningType
-
-
-
-
- <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p>
-
-
- English
- unioningType->excludes(self)
-
-
-
-
- <p>The <code>intersectingTypes</code> of a <code>Type</code> are the <code>intersectingTypes</code> of its <code>ownedIntersectings</code>.</p>
-
-
- OCL2.0
- intersectingType = ownedIntersecting.intersectingType
-
-
-
-
- A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>.
-
-
- OCL2.0
- ownedRelationship->selectByKind(Conjugation)->size() <= 1
-
-
-
-
- <p>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(Multiplicity)->size() <= 1
-
-
-
-
- <p>The <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</code>.</p>
-
-
- OCL2.0
- endFeature = feature->select(isEnd)
-
-
-
-
- <p>The <code>ownedDisjoinings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Disjoinings</code>.</p>
-
-
- OCL2.0
- ownedDisjoining =
- ownedRelationship->selectByKind(Disjoining)
-
-
-
-
- <p>The <code>ownedUnionings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Unionings</code>.</p>
-
-
- OCL2.0
- ownedUnioning =
- ownedRelationship->selectByKind(Unioning)
-
-
-
-
- <p>The <code>ownedIntersectings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Intersectings</code>.</p>
-
-
- OCL2.0
- ownedRelationship->selectByKind(Intersecting)
-
-
-
-
- <p>The <code>ownedDifferencings</code> of a <code>Type</code> are its <code>ownedRelationships</code> that are <code>Differencings</code>.</p>
-
-
- OCL2.0
- ownedDifferencing =
- ownedRelationship->selectByKind(Differencing)
-
-
-
-
- <p>The <code>ownedEndFeatures</code> of a <code>Type</code> are all its <code>ownedFeatures</code> for which <code>isEnd = true</code>.</p>
-
-
- OCL2.0
- ownedEndFeature = ownedFeature->select(isEnd)
-
-
-
-
- <p>The <code>inheritedFeatures</code> of this <code>Type</code> are the <code>memberFeatures</code> of the <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p>
-
-
- OCL2.0
- inheritedFeature = inheritedMemberships->
- selectByKind(FeatureMembership).memberFeature
-
-
-
-
- A <code>Type</code> must not have exactly one <code>ownedUnioning</code>.
-
-
- OCL2.0
- ownedUnioning->size() <> 1
-
-
-
-
- A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>.
-
-
- OCL2.0
- ownedIntersecting->size() <> 1
-
-
-
-
- A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>.
-
-
- OCL2.0
- ownedDifferencing->size() <> 1
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Specializations</code>, for which the <code>Type</code> is the <code>specific</code> <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>, for which the <code>Type</code> is the <code>owningType</code>. Each such <code>FeatureMembership</code> identifies an <code>ownedFeature</code> of the <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>in</code> or <code>inout</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>out</code> or <code>inout</code>.</p>
-
-
-
-
-
-
-
- <p>Indicates whether instances of this <code>Type</code> must also be instances of at least one of its specialized <code>Types</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>Memberships</code> inherited by this <code>Type</code> via <code>Specialization</code> or <code>Conjugation</code>. These are included in the derived union for the <code>memberships</code> of the <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p>
-
-
-
-
-
-
- <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</code>.</p>
-
-
-
-
-
-
-
- <p>Whether all things that meet the classification conditions of this <code>Type</code> must be classified by the <code>Type</code>.</p>
-
-<p>(A <code>Type</code> gives conditions that must be met by whatever it classifies, but when <code>isSufficient</code> is false, things may meet those conditions but still not be classified by the <code>Type</code>. For example, a Type <code><em>Car</em></code> that is not sufficient could require everything it classifies to have four wheels, but not all four wheeled things would classify as cars. However, if the <code>Type</code> <code><em>Car</em></code> were sufficient, it would classify all four-wheeled things.)</p>
-
-
-
-
-
-
-
- <p>A <code>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p>
-
-
-
-
-
-
-
- <p>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p>
-
-
-
-
-
-
- <p>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>ownedMember</code> of this <code>Type</code> that is a <code>Multiplicity</code>, which constraints the cardinality of the <code>Type</code>. If there is no such <code>ownedMember</code>, then the cardinality of this <code>Type</code> is constrained by all the <code>Multiplicity</code> constraints applicable to any direct supertypes.</p>
-
-
-
-
-
-
- <p>The interpretations of a <code>Type</code> with <code>unioningTypes</code> are asserted to be the same as those of all the <code>unioningTypes</code> together, which are the <code>Types</code> derived from the <code>unioningType</code> of the <code>ownedUnionings</code> of this <code>Type</code>. For example, a <code>Classifier</code> for people might be the union of <code>Classifiers</code> for all the sexes. Similarly, a feature for people's children might be the union of features dividing them in the same ways as people in general.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Intersectings</code>, have the <code>Type</code> as their <code>typeIntersected</code>.</p>
-
-
-
-
-
-
-
- <p>The interpretations of a <code>Type</code> with <code>intersectingTypes</code> are asserted to be those in common among the <code>intersectingTypes</code>, which are the <code>Types</code> derived from the <code>intersectingType</code> of the <code>ownedIntersectings</code> of this <code>Type</code>. For example, a <code>Classifier</code> might be an intersection of <code>Classifiers</code> for people of a particular sex and of a particular nationality. Similarly, a feature for people's children of a particular sex might be the intersection of a <code>Feature</code> for their children and a <code>Classifier</code> for people of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the Classifier for that sex).</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Unionings</code>, having the <code>Type</code> as their <code>typeUnioned</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Disjoinings</code>, for which the <code>Type</code> is the <code>typeDisjoined</code> <code>Type</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>FeatureMemberships</code> for <code>features</code> of this <code>Type</code>, which include all <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code> (but does <em>not</em> include any <code>importedMemberships</code>).</p>
-
-
-
-
-
-
-
- <p>The interpretations of a <code>Type</code> with <code>differencingTypes</code> are asserted to be those of the first of those <code>Types</code>, but not including those of the remaining <code>Types</code>. For example, a <code>Classifier</code> might be the difference of a <code>Classifier</code> for people and another for people of a particular nationality, leaving people who are not of that nationality. Similarly, a feature of people might be the difference between a feature for their children and a <code>Classifier</code> for people of a particular sex, identifying their children not of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the <code>Classifier</code> for that sex).</p>
-
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Differencings</code>, having this <code>Type</code> as their <code>typeDifferenced</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p>
-
-
-
-
-
-
-
- <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</code>.</p>
-
-
-
-
- OCL2.0
- let visibleMemberships : OrderedSet(Membership) =
- self.oclAsType(Namespace).
- visibleMemberships(excluded, isRecursive, includeAll) in
-let visibleInheritedMemberships : OrderedSet(Membership) =
- inheritedMemberships(excluded->including(self), Set{}, isRecursive)->
- select(includeAll or visibility = VisibilityKind::public) in
-visibleMemberships->union(visibleInheritedMemberships)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>Memberships</code> inheritable from supertypes of this <code>Type</code> with redefined <code>Features</code> removed. When computing inheritable <code>Memberships</code>, exclude <code>Imports</code> of <code>excludedNamespaces</code>, <code>Specializations</code> of <code>excludedTypes</code>, and, if <code>excludeImplied = true</code>, all implied <code>Specializations</code>.</p>
-
-
-
-
- OCL2.0
- removeRedefinedFeatures(
- inheritableMemberships(excludedNamespaces, excludedTypes, excludeImplied))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return all the non-<code>private</code> <code>Memberships</code> of all the supertypes of this <code>Type</code>, excluding any supertypes that are this <code>Type</code> or are in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also transitively exclude any supertypes from implied <code>Specializations</code>.</p>
-
-
-
- OCL2.0
- let excludingSelf : Set(Type) = excludedType->including(self) in
-supertypes(excludeImplied)->reject(t | excludingSelf->includes(t)).
- nonPrivateMemberships(excludedNamespaces, excludingSelf, excludeImplied)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>public</code>, <code>protected</code> and inherited <code>Memberships</code> of this <code>Type</code>. When computing imported <code>Memberships</code>, exclude the given set of <code>excludedNamespaces</code>. When computing inherited <code>Memberships</code>, exclude <code>Types</code> in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also exclude any supertypes from implied <code>Specializations</code>.</p>
-
-
-
- OCL2.0
- let publicMemberships : OrderedSet(Membership) =
- membershipsOfVisibility(VisibilityKind::public, excludedNamespaces) in
-let protectedMemberships : OrderedSet(Membership) =
- membershipsOfVisibility(VisibilityKind::protected, excludedNamespaces) in
-let inheritedMemberships : OrderedSet(Membership) =
- inheritedMemberships(excludedNamespaces, excludedTypes, excludeImplied) in
-publicMemberships->
- union(protectedMemberships)->
- union(inheritedMemberships)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return a subset of <code>memberships</code>, removing those <code>Memberships</code> whose <code>memberElements</code> are <code>Features</code> and for which either of the following two conditions holds:</p>
-
-<ol>
- <li>The <code>memberElement</code> of the <code>Membership</code> is included in redefined <code>Features</code> of another <code>Membership</code> in <code>memberships</code>.</li>
- <li>One of the redefined <code>Features</code> of the <code>Membership</code> is a directly <code>redefinedFeature</code> of an <code>ownedFeature</code> of this <code>Type</code>.</li>
-</ol>
-
-<p>For this purpose, the redefined <code>Features</code> of a <code>Membership</code> whose <code>memberElement</code> is a <code>Feature</code> includes the <code>memberElement</code> and all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p>
-
-
-
- OCL2.0
- let reducedMemberships : Sequence(Membership) =
- memberships->reject(mem1 |
- memberships->excluding(mem1)->
- exists(mem2 | allRedefinedFeaturesOf(mem2)->
- includes(mem1.memberElement))) in
-let redefinedFeatures : Set(Feature) =
- ownedFeature.redefinition.redefinedFeature->asSet() in
-reducedMemberships->reject(mem | allRedefinedFeaturesOf(mem)->
- exists(feature | redefinedFeatures->includes(feature)))
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If the <code>memberElement</code> of the given <code>membership</code> is a <code>Feature</code>, then return all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p>
-
-
-
- OCL2.0
- if not membership.memberElement.oclIsType(Feature) then Set{}
-else membership.memberElement.oclAsType(Feature).allRedefinedFeatures()
-endif
-
-
-
-
-
-
-
-
-
-
- <p>If the given <code>feature</code> is a <code>feature</code> of this <code>Type</code>, then return its direction relative to this <code>Type</code>, taking conjugation into account.</p>
-
-
-
-
- OCL2.0
- directionOfExcluding(f, Set{})
-
-
-
-
-
-
-
-
-
-
- <p>Return the direction of the given <code>feature</code> relative to this <code>Type</code>, excluding a given set of <code>Types</code> from the search of supertypes of this <code>Type</code>.</p>
-
-
-
- OCL2.0
- let excludedSelf : Set(Type) = excluded->including(self) in
-if feature.owningType = self then feature.direction
-else
- let directions : Sequence(FeatureDirectionKind) =
- supertypes(false)->excluding(excludedSelf).
- directionOfExcluding(feature, excludedSelf)->
- select(d | d <> null) in
- if directions->isEmpty() then null
- else
- let direction : FeatureDirectionKind = directions->first() in
- if not isConjugated then direction
- else if direction = FeatureDirectionKind::_'in' then FeatureDirectionKind::out
- else if direction = FeatureDirectionKind::out then FeatureDirectionKind::_'in'
- else direction
- endif endif endif endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If this <code>Type</code> is conjugated, then return just the <code>originalType</code> of the <code>Conjugation</code>. Otherwise, return the <code>general</code> <code>Types</code> from all <code>ownedSpecializations</code> of this type, if <code>excludeImplied = false</code>, or all non-implied <code>ownedSpecializations</code>, if <code>excludeImplied = true</code>.</p>
-
-
-
- OCL2.0
- if isConjugated then Sequence{conjugator.originalType}
-else if not excludeImplied then ownedSpecialization.general
-else ownedSpecialization->reject(isImplied).general
-endif
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return this <code>Type</code> and all <code>Types</code> that are directly or transitively supertypes of this <code>Type</code> (as determined by the <code>supertypes</code> operation with <code>excludeImplied = false</code>).</p>
-
-
-
-
- OCL2.0
- OrderedSet{self}->closure(supertypes(false))
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Type</code> is a direct or indirect specialization of the given <code>supertype<code>.</p>
-
-
-
- OCL2.0
- if isConjugated then
- ownedConjugator.originalType.specializes(supertype)
-else
- allSupertypes()->includes(supertype)
-endif
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Type</code> is a direct or indirect specialization of the named library <code>Type</code>. <code>libraryTypeName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Type</code> in global scope.</p>
-
-
-
-
- OCL2.0
- let mem : Membership = resolveGlobal(libraryTypeName) in
-mem <> null and mem.memberElement.oclIsKindOf(Type) and
-specializes(mem.memberElement.oclAsType(Type))
-
-
-
-
-
-
-
-
-
-
-
- <p>By default, this <code>Type</code> is compatible with an <code>otherType</code> if it directly or indirectly specializes the <code>otherType</code>.</p>
-
-
-
- OCL2.0
- specializes(otherType)
-
-
-
-
-
-
-
-
-
- <p>Return the owned or inherited <code>Multiplicities</code> for this <code>Type<./code>.</p>
-
-
-
- OCL2.0
- if multiplicity <> null then OrderedSet{multiplicity}
-else
- ownedSpecialization.general->closure(t |
- if t.multiplicity <> null then OrderedSet{}
- else ownedSpecialization.general
- )->select(multiplicity <> null).multiplicity->asOrderedSet()
-endif
-
-
-
-
-
-
-
-
-
-
-
- <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>FeatureMembership</code> is an <code>OwningMembership</code> between an <code>ownedMemberFeature</code> and an <code>owningType</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = false</code>, then the <code>FeatureMembership</code> implies that the <code>owningType</code> is also a <code>featuringType</code> of the <code>ownedMemberFeature</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = true</code>, then the <code>FeatureMembership</code> implies that the <code>ownedMemberFeature</code> is featured by the <em><code>snapshots</code></em> of the <code>owningType</code>, which must specialize the Kernel Semantic Library base class <em><code>Occurrence</code></em>.</p>
-
-
-
-
-
- <p>The <code>Type</code> that owns this <code>FeatureMembership</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that this <code>FeatureMembership</code> relates to its <code>owningType</code>, making it an <code>ownedFeature</code> of the <code>owningType</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Type that inherits the <code>inheritedMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Conjugations with a certain Type as the <code>originalType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Conjugation</code> is a <code>Relationship</code> between two types in which the <code>conjugatedType</code> inherits all the <code>Features</code> of the <code>originalType</code>, but with all <code>input</code> and <code>output</code> <code>Features</code> reversed. That is, any <code>Features</code> with a <code>direction</code> <em>in</em> relative to the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>out</em> relative to the <code>conjugatedType</code> and, similarly, <code>Features</code> with <code>direction</code> <em>out</em> in the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>in</em> in the <code>conjugatedType</code>. <code>Features</code> with <code>direction</code> <em>inout</em>, or with no <code>direction</code>, in the <code>originalType</code>, are inherited without change.</p>
-
-<p>A <code>Type</code> may participate as a <code>conjugatedType</code> in at most one <code>Conjugation</code> relationship, and such a <code>Type</code> may not also be the <code>specific</code> <code>Type</code> in any <code>Specialization</code> relationship.</p>
-
-
-
-
-
- <p>The <code>Type</code> to be conjugated.</p>
-
-
-
-
-
-
-
- <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Multiplicity</code> is a <code>Feature</code> whose co-domain is a set of natural numbers giving the allowed cardinalities of each <code>typeWithMultiplicity</code>. The <em>cardinality</em> of a <code>Type</code> is defined as follows, depending on whether the <code>Type</code> is a <code>Classifier</code> or <code>Feature</code>.
-<ul>
-<li><code>Classifier</code> – The number of basic instances of the <code>Classifier</code>, that is, those instances representing things, which are not instances of any subtypes of the <code>Classifier</code> that are <code>Features</code>.
-<li><code>Features</code> – The number of instances with the same featuring instances. In the case of a <code>Feature</code> with a <code>Classifier</code> as its <code>featuringType</code>, this is the number of values of <code>Feature</code> for each basic instance of the <code>Classifier</code>. Note that, for non-unique <code>Features</code>, all duplicate values are included in this count.</li>
-</ul>
-
-<p><code>Multiplicity</code> co-domains (in models) can be specified by <code>Expression</code> that might vary in their results. If the <code>typeWithMultiplicity</code> is a <code>Classifier</code>, the domain of the <code>Multiplicity</code> shall be <em><code>Base::Anything</code></em>. If the <code>typeWithMultiplicity</code> is a <code>Feature</code>, the <code>Multiplicity</code> shall have the same domain as the <code>typeWithMultiplicity</code>.</p>
-
-
-
-
- <p>If the <code>owningType</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p>
-
-
- OCL2.0
- if owningType <> null and owningType.oclIsKindOf(Feature) then
- featuringType =
- owningType.oclAsType(Feature).featuringType
-else
- featuringType->isEmpty()
-endif
-
-
-
-
- <p>A <code>Multiplicity</code> must directly or indirectly specialize the <code>Feature</code> <code><em>Base::naturals</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::naturals')
-
-
-
-
-
-
-
- <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Disjoining</code> is a <code>Relationship</code> between <code>Types</code> asserted to have interpretations that are not shared (disjoint) between them, identified as <code>typeDisjoined</code> and <code>disjoiningType</code>. For example, a <code>Classifier</code> for mammals is disjoint from a <code>Classifier</code> for minerals, and a <code>Feature</code> for people's parents is disjoint from a <code>Feature</code> for their children.</p>
-
-
-
-
-
- <p><code>Type</code> asserted to be disjoint with the <code>disjoiningType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>A Type that owns or inherits the <code>featureMembership</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Differencings that identify this Type as their <code>differencingType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Types that include this one among their <code>unioningTypes</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Unionings that identify all these Types as their <code>unioningType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Types that include this one among their <code>intersectingTypes</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Types that include this one among their <code>differencingTypes</code>.</p>
-
-
-
-
-
-
-
- <p><code>Differencing</code> is a <code>Relationship</code> that makes its <code>differencingType</code> one of the <code>differencingTypes</code> of its <code>typeDifferenced</code>.</p>
-
-
-
-
-
- <p><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Unioning</code> is a <code>Relationship</code> that makes its <code>unioningType</code> one of the <code>unioningTypes</code> of its <code>typeUnioned</code>.</p>
-
-
-
-
-
- <p><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Intersecting</code> is a <code>Relationship</code> that makes its <code>intersectingType</code> one of the <code>intersectingTypes</code> of its <code>typeIntersected</code>.</p>
-
-
-
-
-
- <p><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p>
-
-
-
-
-
-
-
- <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>The Subclassifications with a certain <code>subclassifier</code>.</p>
-
-
-
-
-
-
-
-
- <p><code>Subclassification</code> is <code>Specialization</code> in which both the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Classifier</code>. This means all instances of the specific <code>Classifier</code> are also instances of the general <code>Classifier</code>.</p>
-
-
-
-
-
- <p>The more <code>general</code> Classifier in this <code>Subclassification</code>.</p>
-
-
-
-
-
-
-
- <p>The more specific <code>Classifier</code> in this <code>Subclassification</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</p>
-
-<ul>
- <li>Things (in the universe) regardless of how <code>Features</code> relate them. (These are interpreted semantically as sequences of exactly one thing.)</li>
- <li>How the above things are related by <code>Features.</code> (These are interpreted semantically as sequences of multiple things, such that the last thing in the sequence is also classified by the <code>Classifier</code>. Note that this means that a <code>Classifier</code> modeled as specializing a <code>Feature</code> cannot classify anything.)</li>
-</ul>
-
-
-
-
-
- <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p>
-
-
- OCL2.0
- ownedSubclassification =
- ownedSpecialization->selectByKind(Subclassification)
-
-
-
-
- <p>If a <code>Classifier</code> has a <code>multiplicity</code>, then the <code>multiplicity</code> must have no <code>featuringTypes</code> (meaning that its domain is implicitly <em>Base::Anything</em>).</p>
-
-
- OCL2.0
- multiplicity <> null implies multiplicity.featuringType->isEmpty()
-
-
-
-
-
- <p>The <code>ownedSpecializations</code> of this <code>Classifier</code> that are <code>Subclassifications</code>, for which this <code>Classifier</code> is the <code>subclassifier</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Subclassifications with a certain <code>superclassifier</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>Redefinition</code> is a kind of <code>Subsetting</code> that requires the <code>redefinedFeature</code> and the <code>redefiningFeature</code> to have the same values (on each instance of the domain of the <code>redefiningFeature</code>). This means any restrictions on the <code>redefiningFeature</code>, such as <code>type</code> or <code>multiplicity</code>, also apply to the <code>redefinedFeature</code> (on each instance of the domain of the <code>redefiningFeature</code>), and vice versa. The <code>redefinedFeature</code> might have values for instances of the domain of the <code>redefiningFeature</code>, but only as instances of the domain of the <code>redefinedFeature</code> that happen to also be instances of the domain of the <code>redefiningFeature</code>. This is supported by the constraints inherited from <code>Subsetting</code> on the domains of the <code>redefiningFeature</code> and <code>redefinedFeature</code>. However, these constraints are narrowed for <code>Redefinition</code> to require the <code>owningTypes</code> of the <code>redefiningFeature</code> and <code>redefinedFeature</code> to be different and the <code>redefinedFeature</code> to not be inherited into the <code>owningNamespace</code> of the <code>redefiningFeature</code>.This enables the <code>redefiningFeature</code> to have the same name as the <code>redefinedFeature</code>, if desired.</p>
-
-
-
-
- <p>The <code>redefiningFeature</code> of a <code>Redefinition</code> must have at least one <code>featuringType</code> that is not also a <code>featuringType</code> of the <code>redefinedFeature</code>.</p>
-
-
- OCL2.0
- let anythingType: Type =
- redefiningFeature.resolveGlobal('Base::Anything').modelElement.oclAsType(Type) in
--- Including "Anything" accounts for implicit featuringType of Features
--- with no explicit featuringType.
-let redefiningFeaturingTypes: Set(Type) =
- if redefiningFeature.isVariable then Set{redefiningFeature.owningType}
- else redefiningFeature.featuringTypes->asSet()->including(anythingType)
- endif in
-let redefinedFeaturingTypes: Set(Type) =
- if redefinedFeature.isVariable then Set{redefinedFeature.owningType}
- else redefinedFeature.featuringTypes->asSet()->including(anythingType)
- endif in
-redefiningFeaturingTypes <> redefinedFeaturingType
-
-
-
-
- <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has a direction of <code>in</code> or <code>out</code> (relative to any <code>featuringType</code> of the <code>redefiningFeature</code> or the <code>owningType</code>, if the <code>redefiningFeature</code> has <code>isVariable = true</code>), then the <code>redefiningFeature</code> must have the same <code>direction</code>. If the <code>redefinedFeature</code> has a direction of <code>inout</code>, then the <code>redefiningFeature</code> must have a non-null <code>direction</code>. (Note: the direction of the <code>redefinedFeature</code> relative to a <code>featuringType</code> of the <code>redefiningFeature</code> is the direction it would have if it had been inherited and not redefined.)</p>
-
-
- OCL2.0
- let featuringTypes : Sequence(Type) =
- if redefiningFeature.isVariable then Sequence{redefiningFeature.owningType}
- else redefiningFeature.featuringType
- endif in
-featuringTypes->forAll(t |
- let direction : FeatureDirectionKind = t.directionOf(redefinedFeature) in
- ((direction = FeatureDirectionKind::_'in' or
- direction = FeatureDirectionKind::out) implies
- redefiningFeature.direction = direction)
- and
- (direction = FeatureDirectionKind::inout implies
- redefiningFeature.direction <> null))
-
-
-
-
- <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p>
-
-
- OCL2.0
- redefinedFeature.isEnd implies redefiningFeature.isEnd
-
-
-
-
-
- <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The FeatureTyping relating this Type to a Feature.</p>
-
-
-
-
-
-
-
-
- <p>The Features for which a certain Type is a <code>type</code>.</p>
-
-
-
-
-
-
-
-
- <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Feature</code> is a <code>Type</code> that classifies relations between multiple things (in the universe). The domain of the relation is the intersection of the <code>featuringTypes</code> of the <code>Feature</code>. (The domain of a <code>Feature</code> with no <code>featuringTyps</code> is implicitly the most general <code>Type</code> <em><code>Base::Anything</code></em> from the Kernel Semantic Library.) The co-domain of the relation is the intersection of the <code>types</code> of the <code>Feature</code>.
-
-<p>In the simplest cases, the <code>featuringTypes</code> and <code>types</code> are <code>Classifiers</code> and the <code>Feature</code> relates two things, one from the domain and one from the range. Examples include cars paired with wheels, people paired with other people, and cars paired with numbers representing the car length.</p>
-
-<p>Since <code>Features</code> are <code>Types</code>, their <code>featuringTypes</code> and <code>types</code> can be <code>Features</code>. In this case, the <code>Feature</code> effectively classifies relations between relations, which can be interpreted as the sequence of things related by the domain <code>Feature</code> concatenated with the sequence of things related by the co-domain <code>Feature</code>.</p>
-
-<p>The <em>values</em> of a <code>Feature</code> for a given instance of its domain are all the instances of its co-domain that are related to that domain instance by the <code>Feature</code>. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with values of the first <code>Feature</code>, then using those values as domain instances to obtain valus of the second <code>Feature</code>, and so on, to values of the last <code>Feature</code>.</p>
-
-
-
-
- <p>The <code>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</code>.</p>
-
-
- OCL2.0
- ownedRedefinition = ownedSubsetting->selectByKind(Redefinition)
-
-
-
-
- <p>The <code>ownedTypeFeaturings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>TypeFeaturings</code> and which have the <code>Feature</code> as their <code>featureOfType</code>.</p>
-
-
- OCL2.0
- ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)->
- select(tf | tf.featureOfType = self)
-
-
-
-
- <p>The <code>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p>
-
-
- OCL2.0
- ownedSubsetting = ownedSpecialization->selectByKind(Subsetting)
-
-
-
-
- <p>The <code>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</code>.</p>
-
-
- OCL2.0
- ownedTyping = ownedGeneralization->selectByKind(FeatureTyping)
-
-
-
-
- <p>The <code>types</code> of a <code>Feature</code> are the union of the <code>types</code> of its <code>typings</code> and the <code>types</code> of the <code>Features</code> it subsets, with all redundant supertypes removed. If the <code>Feature</code> has <code>chainingFeatures</code>, then the union also includes the types of the last <code>chainingFeature</code>.</p>
-
-
- OCL2.0
- type =
- let types : OrderedSet(Types) = OrderedSet{self}->
- -- Note: The closure operation automatically handles circular relationships.
- closure(typingFeatures()).typing.type->asOrderedSet() in
- types->reject(t1 | types->exist(t2 | t2 <> t1 and t2.specializes(t1)))
-
-
-
-
- <p>If a <code>Feature</code> has a <code>multiplicity</code>, then the <code>featuringTypes</code> of the <code>multiplicity</code> must be the same as those of the <code>Feature</code> itself.</p>
-
-
- OCL2.0
- multiplicity <> null implies multiplicity.featuringType = featuringType
-
-
-
-
- <p>A <code>Feature</code> must directly or indirectly specialize <code><em>Base::things</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::things')
-
-
-
-
- <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p>
-
-
- English
- chainingFeature->excludes(self)
-
-
-
-
- <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p>
-
-
- OCL2.0
- ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining)
-
-
-
-
- <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</code>.</p>
-
-
- OCL2.0
- chainingFeature = ownedFeatureChaining.chainingFeature
-
-
-
-
- A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one.
-
-
- OCL2.0
- chainingFeature->size() <> 1
-
-
-
-
- <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is not empty, then, for each direct supertype of its <code>owningType</code>, it must redefine the <code>endFeature</code> at the same position, if any.</p>
-
-
- OCL2.0
- isEnd and owningType <> null implies
- let i : Integer =
- owningType.ownedEndFeature->indexOf(self) in
- owningType.ownedSpecialization.general->
- forAll(supertype |
- supertype.endFeature->size() >= i implies
- redefines(supertype.endFeature->at(i))
-
-
-
-
- <p>If a <code>Feature</code> has a <code>FeatureValue</code>, no <code>ownedSpecializations</code> that are not implied, and is not directed, then it must specialize the <code>result</code> of the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code>.</p>
-
-
- OCL2.0
- direction = null and
-ownedSpecializations->forAll(isImplied) implies
- ownedMembership->
- selectByKind(FeatureValue)->
- forAll(fv | specializes(fv.value.result))
-
-
-
-
- <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is an <code>Association</code> or a <code>Connector</code>, then it must directly or indirectly specialize <code><em>Links::Link::participant</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isEnd and owningType <> null and
-(owningType.oclIsKindOf(Association) or
- owningType.oclIsKindOf(Connector)) implies
- specializesFromLibrary('Links::Link::participant')
-
-
-
-
- <p>A composite <code>Feature</code> typed by a <code>Structure</code>, and whose <code>ownedType</code> is a <code>Structure</code> or another <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize <em><code>Objects::Object::subobjects</code></em>.
-
-
- OCL2.0
- isComposite and
-ownedTyping.type->includes(oclIsKindOf(Structure)) and
-owningType <> null and
-(owningType.oclIsKindOf(Structure) or
- owningType.type->includes(oclIsKindOf(Structure))) implies
- specializesFromLibrary('Occurrence::Occurrence::suboccurrences')
-
-
-
-
- <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Class</code>, then it must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- ownedTyping.type->exists(selectByKind(Class)) implies
- specializesFromLibrary('Occurrences::occurrences')
-
-
-
-
- <p>A composite <code>Feature</code> that has an <code>ownedTyping</code> relationship to a <code>Class</code>, and whose <code>ownedType</code> is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>.
-
-
- OCL2.0
- isComposite and
-ownedTyping.type->includes(oclIsKindOf(Class)) and
-owningType <> null and
-(owningType.oclIsKindOf(Class) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKindOf(Class))) implies
- specializesFromLibrary('Occurrence::Occurrence::suboccurrences')
-
-
-
-
- <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>DataType</code>, then it must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- ownedTyping.type->exists(selectByKind(DataType)) implies
- specializesFromLibrary('Base::dataValues')
-
-
-
-
- <p>If a <code>Feature</code> is the first <code>ownedFeature</code> of a first or second <code>FlowEnd</code>, then it must directly or indirectly specialize either <em><code>Transfers::Transfer::source::sourceOutput</code></em> or <em><code>Transfers::Transfer::target::targetInput</code></em>, respectively, from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- owningType <> null and
-owningType.oclIsKindOf(FlowEnd) and
-owningType.ownedFeature->at(1) = self implies
- let flowType : Type = owningType.owningType in
- flowType <> null implies
- let i : Integer =
- flowType.ownedFeature.indexOf(owningType) in
- (i = 1 implies
- redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and
- (i = 2 implies
- redefinesFromLibrary('Transfers::Transfer::source::targetInput'))
-
-
-
-
-
- <p>If a <code>Feature</code> is a <code>parameter</code> of an <code>owningType</code> that is a <code>Behavior</code> or <code>Step</code>, but <em>not</em>
-</p>
-<ul>
- <li>A <code>result</code> <code>parameter</code></li>
- <li>A <code>parameter</code> of an <code>InvocationExpression</code>, with at least one non-implied <code>ownedRedefinition</code></li>
-</ul>
-<p>then, for each direct supertype of its <code>owningType</code> that is also a <code>Behavior</code> or <code>Step</code>, it must redefine the <code>parameter</code> at the same position, if any.</p>
-
-
- OCL2.0
- owningType <> null and
-not owningFeatureMembership.
- oclIsKindOf(ReturnParameterMembership) and
-(owningType.oclIsKindOf(Behavior) or
- owningType.oclIsKindOf(Step) and
- (owningType.oclIsKindOf(InvocationExpression) implies
- not ownedRedefinition->exists(not isImplied))
-implies
- let i : Integer =
- owningType.ownedFeature->select(direction <> null)->
- reject(owningFeatureMembership.
- oclIsKindOf(ReturnParameterMembership))->
- indexOf(self) in
- owningType.ownedSpecialization.general->
- forAll(supertype |
- let ownedParameters : Sequence(Feature) =
- supertype.ownedFeature->select(direction <> null)->
- reject(owningFeatureMembership.
- oclIsKindOf(ReturnParameterMembership)) in
- ownedParameters->size() >= i implies
- redefines(ownedParameters->at(i))
-
-
-
-
- <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Structure</code>, then it must directly or indirectly specialize <code><em>Objects::objects</em></code> from the Kernel Semantics Library.</p>
-
-
- OCL2.0
- ownedTyping.type->exists(selectByKind(Structure)) implies
- specializesFromLibary('Objects::objects')
-
-
-
-
- <p>If a <code>Feature</code> is a <code>result</code> <code>parameter</code> of an <code>owningType</code> that is a <code>Function</code> or <code>Expression</code>, then, for each direct supertype of its <code>owningType</code> that is also a <code>Function</code> or <code>Expression</code>, it must redefine the <code>result</code> <code>parameter</code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(Function) and
- self = owningType.oclAsType(Function).result or
- owningType.oclIsKindOf(Expression) and
- self = owningType.oclAsType(Expression).result) implies
- owningType.ownedSpecialization.general->
- select(oclIsKindOf(Function) or oclIsKindOf(Expression))->
- forAll(supertype |
- redefines(
- if superType.oclIsKindOf(Function) then
- superType.oclAsType(Function).result
- else
- superType.oclAsType(Expression).result
- endif)
-
-
-
-
- <p>The <code>ownedFeatureInvertings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>FeatureInvertings</code>.</p>
-
-
- OCL2.0
- ownedFeatureInverting = ownedRelationship->selectByKind(FeatureInverting)->
- select(fi | fi.featureInverted = self)
-
-
-
-
- The <code>featuringTypes</code> of a <code>Feature</code> include the <code>featuringTypes</code> of all the <code>typeFeaturings</code> of the <code>Feature</code>. If the <code>Feature</code> has <code>chainingFeatures</code>, then its <code>featuringTypes</code> also include the <code>featuringTypes</code> of the first <code>chainingFeature</code>.
-
-
- OCL2.0
- featuringType =
- let featuringTypes : OrderedSet(Type) =
- featuring.type->asOrderedSet() in
- if chainingFeature->isEmpty() then featuringTypes
- else
- featuringTypes->
- union(chainingFeature->first().featuringType)->
- asOrderedSet()
- endif
-
-
-
-
- <p>The <code>ownedReferenceSubsetting</code> of a <code>Feature</code> is the first
-<code>ownedSubsetting</code> that is a <code>ReferenceSubsetting</code> (if any).</p>
-
-
- OCL2.0
- ownedReferenceSubsetting =
- let referenceSubsettings : OrderedSet(ReferenceSubsetting) =
- ownedSubsetting->selectByKind(ReferenceSubsetting) in
- if referenceSubsettings->isEmpty() then null
- else referenceSubsettings->first() endif
-
-
-
-
- <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is an <code>ReferenceSubsetting</code>.</p>
-
-
- OCL2.0
- ownedSubsetting->selectByKind(ReferenceSubsetting)->size() <= 1
-
-
-
-
- <p>Each <code>chainingFeature</code> (other than the first) must be featured within the previous <code>chainingFeature</code>.</p>
-
-
- OCL2.0
- Sequence{2..chainingFeature->size()}->forAll(i |
- chainingFeature->at(i).isFeaturedWithin(chainingFeature->at(i-1)))
-
-
-
-
-
- <p>If a <code>Feature</code> has <code>isPortion = true</code>, an <code>ownedTyping </code> relationship to a <code>Class</code>, and an <code>owningType</code> that is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::portions</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isPortion and
-ownedTyping.type->includes(oclIsKindOf(Class)) and
-owningType <> null and
-(owningType.oclIsKindOf(Class) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKindOf(Class))) implies
- specializesFromLibrary('Occurrence::Occurrence::portions')
-
-
-
-
- <p>If a <code>Feature</code> has no <code>chainingFeatures</code>, then its <code>featureTarget</code> is the <code>Feature</code> itself, otherwise the <code>featureTarget</code> is the last of the <code>chainingFeatures</code>.</p>
-
-
- OCL2.0
- featureTarget = if chainingFeature->isEmpty() then self else chainingFeature->last() endif
-
-
-
-
- <p>The <code>ownedCrossSubsetting</code> of a <code>Feature</code> is the <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>, if any.</p>
-
-
- OCL2.0
- ownedCrossSubsetting =
- let crossSubsettings: Sequence(CrossSubsetting) =
- ownedSubsetting->selectByKind(CrossSubsetting) in
- if crossSubsettings->isEmpty() then null
- else crossSubsettings->first()
- endif
-
-
-
-
- <p>If a <code>Feature</code> has <code>isEnd = true</code>, then it must have multiplicity <code>1..1</code>.</p>
-
-
- OCL2.0
- isEnd implies
- multiplicities().allSuperTypes()->flatten()->
- selectByKind(MultiplicityRange)->exists(hasBounds(1,1))
-
-
-
-
- <p>The <code>crossFeature</code> of a <code>Feature</code> must have the same <code>types</code> as the <code>Feature</code>.</p>
-
-
- OCL2.0
- crossFeature <> null implies
- crossFeature.type->asSet() = type->asSet()
-
-
-
-
- <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>.</p>
-
-
- OCL2.0
- ownedSubsetting->selectByKind(CrossSubsetting)->size() <= 1
-
-
-
-
- <p>The <code>crossFeature</code> of a <code>Feature</code> is the second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of the <code>Feature</code>, if any.</p>
-
-
- OCL2.0
- crossFeature =
- if ownedCrossSubsetting = null then null
- else
- let chainingFeatures: Sequence(Feature) =
- ownedCrossSubsetting.crossedFeature.chainingFeature in
- if chainingFeatures->size() < 2 then null
- else chainingFeatures->at(2)
- endif
-
-
-
-
- <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must directly or indirectly specialize the <code>types</code> of its owning end <code>Feature</code>.</p>
-
-
- OCL2.0
- isOwnedCrossFeature() implies
- owner.oclAsType(Feature).type->forAll(t | self.specializes(t))
-
-
-
-
- <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then, for any end <code>Feature</code> that is redefined by the owning end <code>Feature</code> of this <code>Feature</code>, this <code>Feature</code> must subset the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p>
-
-
- OCL2.0
- isOwnedCrossFeature() implies
- ownedSubsetting.subsettedFeature->includesAll(
- owner.oclAsType(Feature).ownedRedefinition.redefinedFeature->
- select(crossFeature <> null).crossFeature)
-
-
-
-
- <p>If this <code>Feature</code> has a <code>crossFeature</code>, then, for any <code>Feature</code> that is redefined by this <code>Feature</code>, the <code>crossFeature</code> must specialize the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p>
-
-
- OCL2.0
- crossFeature <> null implies
- ownedRedefinition.redefinedFeature.crossFeature->
- forAll(f | f <> null implies crossFeature.specializes(f))
-
-
-
-
- <p>If this <code>Feature</code> has <code>isEnd = true</code> and <code>ownedCrossFeature</code> returns a non-null value, then the <code>crossFeature</code> of the <code>Feature</code> must be the <code>Feature</code> returned from <code>ownedCrossFeature</code> (which implies that this <code>Feature</code> has an appropriate <code>ownedCrossSubsetting</code> to realize this).</p>
-
-
- OCL2.0
- ownedCrossFeature() <> null implies
- crossFeature = ownedCrossFeature()
-
-
-
-
- <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must have <code>featuringTypes</code> consistent with the crossing from other end <code>Features</code> of the <code>owningType</code> of its end <code>Feature</code>.</p>
-
-
- OCL2.0
- isOwnedCrossFeature() implies
- let otherEnds : OrderedSet(Feature) =
- owner.oclAsType(Feature).owningType.endFeature->excluding(self) in
- if (otherEnds->size() = 1) then
- featuringType = otherEnds->first().type
- else
- featuringType->size() = 1 and
- featuringType->first().isCartesianProduct() and
- featuringType->first().asCartesianProduct() = otherEnds.type and
- featuringType->first().allSupertypes()->includesAll(
- owner.oclAsType(Feature).ownedRedefinition.redefinedFeature->
- select(crossFeature() <> null).crossFeature().featuringType)
- endif
-
-
-
-
- OCL2.0
- isPortion implies not isVariable
-
-
-
-
- <p>A <code>Feature</code> with <code>isEnd = true</code> must have no direction.</p>
-
-
- OCL2.0
- isEnd implied direction = null
-
-
-
-
- <p>If a <code>Feature</code> is owned via a <code>FeatureMembership</code>, then it must have a <code>featuringType</code> for which the operation <code>isFeaturingType</code> returns true.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null implies
- featuringTypes->exists(t | isFeaturingType(t))
-
-
-
-
- <p>A <code>Feature</code> with <code>isConstant = true</code> must have <code>isVariable = true</code>.
-
-
- OCL2.0
- isConstant implies isVariable
-
-
-
-
- <p>A <code>Feature</code> with <code>isVariable = true</code> must have an <code>owningType</code> that directly or indirectly specializes the <code>Class</code> <em><code>Occurrences::Occurrence</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isVariable implies
- owningType <> null and
- owningType.specializes('Occurrences::Occurrence')
-
-
-
-
- <p>A <code>Feature</code> with <code>isEnd = true</code> must have all of <code>isDerived = false</code>, <code>isAbstract = false</code>, <code>isComposite = false</code>, and <code>isPortion = false</code>.</p>
-
-
- OCL2.0
- isEnd implies not (isDerived or isAbstract or isComposite or isPortion)
-
-
-
-
- <p>A <code>Feature</code> with <code>isEnd = true</code> and <code>isVariable = true</code> must have <code>isConstant = true</code>.</p>
-
-
- OCL2.0
- isEnd and isVariable implies isConstant
-
-
-
-
-
- <p>The <code>Type</code> that is the <code>owningType</code> of the <code>owningFeatureMembership</code> of this <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>Whether or not values for this <code>Feature</code> must have no duplicates or not.</p>
-
-
-
-
-
-
-
- <p>Whether an order exists for the values of this <code>Feature</code> or not.</p>
-
-
-
-
-
-
- <p><code>Types</code> that restrict the values of this <code>Feature</code>, such that the values must be instances of all the <code>types</code>. The types of a <code>Feature</code> are derived from its <code>typings</code> and the <code>types</code> of its <code>subsettings</code>. If the <code>Feature</code> is chained, then the <code>types</code> of the last <code>Feature</code> in the chain are also <code>types</code> of the chained <code>Feature</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedSubsettings</code> of this <code>Feature</code> that are <code>Redefinitions</code>, for which the <code>Feature</code> is the <code>redefiningFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>Subsettings</code>, for which the <code>Feature</code> is the <code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>FeatureMembership</code> that owns this <code>Feature</code> as an <code>ownedMemberFeature</code>, determining its <code>owningType</code>.</p>
-
-
-
-
-
-
- <p>Whether the <code>Feature</code> is a composite <code>feature</code> of its <code>featuringType</code>. If so, the values of the <code>Feature</code> cannot exist after its featuring instance no longer does and cannot be values of another composite feature that is not on the same featuring instance.</p>
-
-
-
-
-
-
-
- <p>Whether or not this <code>Feature</code> is an end <code>Feature</code>. An end <code>Feature</code> always has multiplicity 1, mapping each of its domain instances to a single co-domain instance. However, it may have a <code>crossFeature</code>, in which case values of the <code>crossFeature</code> must be the same as those found by navigation across instances of the <code>owningType</code> from values of other end <code>Features</code> to values of this Feature. If the <code>owningType</code> has <em>n</em> end <code>Features</code>, then the multiplicity, ordering, and uniqueness declared for the <code>crossFeature</code> of any one of these end <code>Features</code> constrains the cardinality, ordering, and uniqueness of the collection of values of that <code>Feature</code> reached by navigation when the values of the other <em>n-1</em> end <code>Features</code> are held fixed.</p>
-
-
-
-
-
-
-
- <p>The <code>Type</code> that is related to this <code>Feature</code> by an <code>EndFeatureMembership</code> in which the <code>Feature</code> is an <code>ownedMemberFeature</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>FeatureTypings</code>, for which the <code>Feature</code> is the <code>typedFeature</code>.</p>
-
-
-
-
-
-
- <p><code>Types</code> that feature this <code>Feature</code>, such that any instance in the domain of the <code>Feature</code> must be classified by all of these <code>Types</code>, including at least all the <code>featuringTypes</code> of its <code>typeFeaturings</code>. If the <code>Feature</code> is chained, then the <code>featuringTypes</code> of the first <code>Feature</code> in the chain are also <code>featuringTypes</code> of the chained <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>TypeFeaturings</code> and for which the <code>Feature</code> is the <code>featureOfType</code>.</p>
-
-
-
-
-
-
- <p>Whether the values of this <code>Feature</code> can always be computed from the values of other <code>Features</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that are chained together to determine the values of this <code>Feature</code>, derived from the <code>chainingFeatures</code> of the <code>ownedFeatureChainings</code> of this <code>Feature</code>, in the same order. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with the values of the first <code>Feature</code> (for each instance of the domain of the original <code>Feature</code>), then using each of those as domain instances to find the values of the second <code>Feature</code> in chainingFeatures, and so on, to values of the last <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureInvertings</code> and for which the <code>Feature</code> is the <code>featureInverted</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureChainings</code>, for which the <code>Feature</code> will be the <code>featureChained</code>.</p>
-
-
-
-
-
-
- <p>Whether the values of this <code>Feature</code> are contained in the space and time of instances of the domain of the <code>Feature</code> and represent the same thing as those instances.</p>
-
-
-
-
-
-
-
- <p>Whether the value of this <code>Feature</code> might vary over time. That is, whether the <code>Feature</code> may have a different value for each <em><code>snapshot</code></em> of an <code>owningType</code> that is an <em><code>Occurrence</code></em>.</p>
-
-
-
-
-
-
- <p>If <code>isVariable</code> is true, then whether the value of this <code>Feature</code> nevertheless does not change over all <code><em>snapshots</em></code> of its <code>owningType</code>.</p>
-
-
-
-
-
-
-
- <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>ReferenceSubsetting</code>, for which the <code>Feature</code> is the <code>referencingFeature</code>.</p>
-
-
-
-
-
-
- <p>The last of the <code>chainingFeatures</code> of this <code>Feature</code>, if it has any. Otherwise, this <code>Feature</code> itself.</p>
-
-
-
-
-
-
- <p>The second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of this <code>Feature</code>, if it has one. Semantically, the values of the <code>crossFeature</code> of an end <code>Feature</code> must include all values of the end <code>Feature</code> obtained when navigating from values of the other end <code>Features</code> of the same <code>owningType</code>.
-</p>
-
-
-
-
-
-
- <p>Indicates how values of this <code>Feature</code> are determined or used (as specified for the <code>FeatureDirectionKind</code>).</p>
-
-
-
-
-
-
-
- <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>CrossSubsetting}, for which the <code>Feature</code> is the <code>crossingFeature</code>.</p>
-
-
-
-
-
-
- <p>Return the <code>directionOf</code> this <code>Feature</code> relative to the given <code>type</code>.</p>
-
-
-
- OCL2.0
- type.directionOf(self)
-
-
-
-
-
-
-
-
-
-
- <p>If a <code>Feature</code> has no <code>declaredShortName</code> or <code>declaredName</code>, then its effective <code>shortName</code> is given by the effective <code>shortName</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p>
-
-
-
- OCL2.0
- if declaredShortName <> null or declaredName <> null then
- declaredShortName
-else
- let namingFeature : Feature = namingFeature() in
- if namingFeature = null then
- null
- else
- namingFeature.effectiveShortName()
- endif
-endif
-
-
-
-
-
-
-
-
-
-
- <p>If a <code>Feature</code> has no <code>declaredName</code> or <code>declaredShortName</code>
-, then its effective <code>name</code> is given by the effective <code>name</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p>
-
-
-
- OCL2.0
- if declaredShortName <> null or declaredName <> null then
- declaredName
-else
- let namingFeature : Feature = namingFeature() in
- if namingFeature = null then
- null
- else
- namingFeature.effectiveName()
- endif
-endif
-
-
-
-
-
-
-
-
-
-
- <p>By default, the naming <code>Feature</code> of a <code>Feature</code> is given by its first <code>redefinedFeature</code> of its first <code>ownedRedefinition</code>, if any.</p>
-
-
-
- OCL2.0
- if ownedRedefinition->isEmpty() then
- null
-else
- ownedRedefinition->at(1).redefinedFeature
-endif
-
-
-
-
-
-
-
-
-
-
- OCL2.0
- let supertypes : OrderedSet(Type) =
- self.oclAsType(Type).supertypes(excludeImplied) in
-if featureTarget = self then supertypes
-else supertypes->append(featureTarget)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> <em>directly</em> redefines the given <code>redefinedFeature</code>.</p>
-
-
-
- OCL2.0
- ownedRedefinition.redefinedFeature->includes(redefinedFeature)
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> <em>directly</em> redefines the named library <code>Feature</code>. <code>libraryFeatureName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Feature</code> in global scope.</p>
-
-
-
- OCL2.0
- let mem: Membership = resolveGlobal(libraryFeatureName) in
-mem <> null and mem.memberElement.oclIsKindOf(Feature) and
-redefines(mem.memberElement.oclAsType(Feature))
-
-
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> directly or indirectly specializes a <code>Feature</code> whose last two <code>chainingFeatures</code> are the given <code>Features</code> <code>first</code> and <code>second</code>.</p>
-
-
-
- OCL2.0
- allSuperTypes()->selectAsKind(Feature)->
- exists(f | let n: Integer = f.chainingFeature->size() in
- n >= 2 and
- f.chainingFeature->at(n-1) = first and
- f.chainingFeature->at(n) = second)
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Feature</code> is compatible with an <code>otherType</code> if it either directly or indirectly specializes the <code>otherType</code> or if the <code>otherType</code> is also a <code>Feature</code> and all of the following are true.</p>
-<ol>
- <li>Neither this <code>Feature</code> or the <code>otherType</code> have any <code>ownedFeatures</code>.</li>
- <li>This <code>Feature</code> directly or indirectly redefines a <code>Feature</code> that is also directly or indirectly redefined by the <code>otherType</code>.</li>
- <li>This <code>Feature</code> can access the <code>otherType</code>.
-</li></ol>
-
-
-
- OCL2.0
- specializes(otherType) or
- supertype.oclIsKindOf(Feature) and
- ownedFeature->isEmpty() and
- otherType.ownedFeature->isEmpty() and
- ownedRedefinitions.allRedefinedFeatures()->exists(f |
- otherType.oclAsType(Feature).allRedefinedFeatures()->includes(f)) and
- canAccess(otherType.oclAsType(Feature))
-
-
-
-
-
-
-
-
-
- <p>Return the <code>Features</code> used to determine the <code>types</code> of this <code>Feature</code> (other than this <code>Feature</code> itself). If this <code>Feature</code> is <em>not</em> conjugated, then the <code>typingFeatures</code> consist of all subsetted <code>Features</code>, <em>except</em> from <code>CrossSubsetting</code>, and the last <code>chainingFeature</code> (if any). If this <code>Feature</code> <em>is</em> conjugated, then the <code>typingFeatures</code> are only its <code>originalType</code> (if the <code>originalType</code> is a <code>Feature</code>).</p>
-
-<p><strong>Note.</strong> <code>CrossSubsetting</code> is excluded from the determination of the <code>type</code> of a <code>Feature</code> in order to avoid circularity in the construction of implied <code>CrossSubsetting</code> relationships. The <code>validateFeatureCrossFeatureType</code> requires that the <code>crossFeature</code> of a <code>Feature</code> have the same <code>type</code> as the <code>Feature</code>.</p>
-
-
-
-
- OCL2.0
- if not isConjugated then
- let subsettedFeatures : OrderedSet(Feature) =
- subsetting->reject(s | s.oclIsKindOf(CrossSubsetting)).subsettedFeatures in
- if chainingFeature->isEmpty() or
- subsettedFeature->includes(chainingFeature->last())
- then subsettedFeatures
- else subsettedFeatures->append(chainingFeature->last())
- endif
-else if conjugator.originalType.oclIsKindOf(Feature) then
- OrderedSet{conjugator.originalType.oclAsType(Feature)}
-else OrderedSet{}
-endif endif
-
-
-
-
-
-
-
-
-
- <p>If <code>isCartesianProduct</code> is true, then return the list of <code>Types</code> whose Cartesian product can be represented by this <code>Feature</code>. (If <code>isCartesianProduct</code> is not true, the operation will still return a valid value, it will just not represent anything useful.)</p>
-
-
-
- OCL2.0
- featuringType->select(t | t.owner <> self)->
- union(featuringType->select(t | t.owner = self)->
- selectByKind(Feature).asCartesianProduct())->
- union(type)
-
-
-
-
-
-
-
-
-
- <p>Check whether this <code>Feature</code> can be used to represent a Cartesian product of <code>Types</code>.</p>
-
-
-
- OCL2.0
- type->size() = 1 and
-featuringType.size() = 1 and
-(featuringType.first().owner = self implies
- featuringType.first().oclIsKindOf(Feature) and
- featuringType.first().oclAsType(Feature).isCartesianProduct())
-
-
-
-
-
-
-
-
- <p>Return whether this <code>Feature</code> is an owned cross <code>Feature</code> of an end <code>Feature</code>.</p>
-
-
-
- OCL2.0
- owningNamespace <> null and
-owningNamespace.oclIsKindOf(Feature) and
-owningNamespace.oclAsType(Feature).ownedCrossFeature() = self
-
-
-
-
-
-
-
-
- <p>If this <code>Feature</code> is an end <code>Feature</code> of its <code>owningType</code>, then return the first <code>ownedMember</code> of the <code>Feature</code> that is a <code>Feature</code>, but not a <code>Multiplicity</code> or a <code>MetadataFeature</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p>
-
-
-
- OCL2.0
- if not isEnd or owningType = null then null
-else
- let ownedMemberFeatures: Sequence(Feature) =
- ownedMember->selectByKind(Feature)->
- reject(oclIsKindOf(Multiplicity) or
- oclIsKindOf(MetadataFeature) or
- oclIsKindOf(FeatureValue))->
- reject(owningMembership.oclIsKindOf(FeatureMembership)) in
- if ownedMemberFeatures.isEmpty() then null
- else ownedMemberFeatures->first()
- endif
-
-
-
-
-
-
-
-
-
- <p>Return this <code>Feature</code> and all the <code>Features</code> that are directly or indirectly <code>Redefined</code> by this <code>Feature</code>.</p>
-
-
-
- OCL2.0
- ownedRedefinition.redefinedFeature->
- closure(ownedRedefinition.redefinedFeature)->
- asOrderedSet()->prepend(self)
-
-
-
-
-
-
-
-
-
-
- <p>Return if the <code>featuringTypes</code> of this <code>Feature</code> are compatible with the given <code>type</code>. If <code>type</code> is null, then check if this <code>Feature</code> is explicitly or implicitly featured by <em><code>Base::Anything</code></em>. If this <code>Feature</code> has <code>isVariable = true</code>, then also consider it to be featured within its <code>owningType</code>. If this <code>Feature</code> is a feature chain whose first <code>chainingFeature</code> has <code>isVariable = true</code>, then also consider it to be featured within the <code>owningType</code> of its first <code>chainingFeature</code>.</p>
-
-
-
- OCL2.0
- if type = null then
- featuringType->forAll(f | f = resolveGlobal('Base::Anything').memberElement)
-else
- featuringType->forAll(f | type.isCompatibleWith(f)) or
- isVariable and type.specializes(owningType) or
- chainingFeature->notEmpty() and chainingFeature->first().isVariable and
- type.specializes(chainingFeature->first().owningType)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Feature</code> can access another <code>feature</code> if the other <code>feature</code> is featured within one of the direct or indirect <code>featuringTypes</code> of this <code>Feature</code>.</p>
-
-
-
- OCL2.0
- let anythingType: Element =
- subsettingFeature.resolveGlobal('Base::Anything').memberElement in
-let allFeaturingTypes : Sequence(Type) =
- featuringTypes->closure(t |
- if not t.oclIsKindOf(Feature) then Sequence{}
- else
- let featuringTypes : OrderedSet(Type) = t.oclAsType(Feature).featuringType in
- if featuringTypes->isEmpty() then Sequence{anythingType}
- else featuringTypes
- endif
- endif) in
-allFeaturingTypes->exists(t | feature.isFeaturedWithin(t))
-
-
-
-
-
-
-
-
-
- <p>Return whether the given <code>type</code> must be a <code>featuringType</code> of this <code>Feature</code>. If this <code>Feature</code> has <code>isVariable = false</code>, then return true if the <code>type</code> is the <code>owningType</code> of the <code>Feature</code>. If <code>isVariable = true</code>, then return true if the <code>type</code> is a <code>Feature</code> representing the <em><code>snapshots</code></em> of the <code>owningType</code> of this <code>Feature</code>.</p>
-
-
-
- OCL2.0
- owningType <> null and
-if not isVariable then type = owningType
-else if owningType = resolveGlobal('Occurrences::Occurrence').memberElement then
- type = resolveGlobal('Occurrences::Occurrence::snapshots').memberElement
-else
- type.oclIsKindOf(Feature) and
- let feature : Feature = type.oclAsType(Feature) in
- feature.featuringType->includes(owningType) and
- feature.redefinesFromLibrary('Occurrences::Occurrence::snapshots')
-endif
-
-
-
-
-
-
-
-
-
-
-
- <p><code>FeatureTyping</code> is <code>Specialization</code> in which the <code>specific</code> <code>Type</code> is a <code>Feature</code>. This means the set of instances of the (specific) <code>typedFeature</code> is a subset of the set of instances of the (general) <code>type</code>. In the simplest case, the <code>type</code> is a <code>Classifier</code>, whereupon the <code>typedFeature</code> has values that are instances of the <code>Classifier</code>.</p>
-
-
-
-
-
- <p>The <code>Feature</code> that has a <code>type</code> determined by this <code>FeatureTyping</code>.</p>
-
-
-
-
-
-
- <p>The <code>Type</code> that is being applied by this <code>FeatureTyping</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</code>.</p>
-
-
-
-
-
-
-
- <p><code>Subsetting</code> is <code>Specialization</code> in which the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Features</code>. This means all values of the <code>subsettingFeature</code> (on instances of its domain, i.e., the intersection of its <code>featuringTypes</code>) are values of the <code>subsettedFeature</code> on instances of its domain. To support this the domain of the <code>subsettingFeature</code> must be the same or specialize (at least indirectly) the domain of the <code>subsettedFeature</code> (via <code>Specialization</code>), and the co-domain (intersection of the <code>types</code>) of the <code>subsettingFeature</code> must specialize the co-domain of the <code>subsettedFeature</code>.</p>
-
-
-
-
- <p>The <code>subsettedFeature</code> must be accessible by the <code>subsettingFeature</code>.</p>
-
-
- OCL2.0
- subsettingFeature.canAccess(subsettedFeature)
-
-
-
-
- <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isUnique = true</code>, then the <code>subsettingFeature</code> must have <code>isUnique = true</code>.</p>
-
-
- OCL2.0
- subsettedFeature.isUnique implies subsettingFeature.isUnique
-
-
-
-
- <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isConstant = true</code> and the <code>subsettingFeature</code> has <code>isVariable = true</code>, then the <code>subsettingFeature</code> must have <code>isConstant = true</code>.</p>
-
-
- OCL2.0
- subsettedFeature.isConstant and subsettingFeature.isVariable implies
- subsettingFeature.isConstant
-
-
-
-
-
-
- <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Features for which a certain Type is a <code>featuringType</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TypeFeaturing</code> is a <code>Featuring</code> <code>Relationship</code> in which the <code>featureOfType</code> is the <code>source</code> and the <code>featuringType</code> is the <code>target</code>.</p>
-
-
-
-
- <p>The <code>Feature</code> that is featured by the <code>featuringType</code>. It is the <code>source</code> of the <code>TypeFeaturing</code>.</p>
-
-
-
-
-
-
- <p>The <code>Type</code> that features the <code>featureOfType</code>. It is the <code>target</code> of the <code>TypeFeaturing</code>.</p>
-
-
-
-
-
-
- <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p>
-
-
-
-
-
-
-
-
- <p><code>EndFeatureMembership</code> is a <code>FeatureMembership</code> that requires its <code>memberFeature</code> be owned and have <code>isEnd = true</code>.</p>
-
-
-
-
- <p>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p>
-
-
- OCL2.0
- ownedMemberFeature.isEnd
-
-
-
-
-
-
-
-
-
-
- <p>Relationship for chainedFeatures.</p>
-
-
-
- <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p>
-
-
-
-
-
-
-
- <p><code>FeatureChaining</code> is a <code>Relationship</code> that makes its target <code>Feature</code> one of the <code>chainingFeatures</code> of its owning <code>Feature</code>.</p>
-
-
-
-
- <p>The <code>Feature</code> whose values partly determine values of <code>featureChained</code>, as described in <code>Feature::chainingFeature</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>Feature::chainingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>Features</code> that have a particular <code>chainingFeature</code> in their <code>Feature</code> chain, whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>chainingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureInverting</code> is a <code>Relationship</code> between <code>Features</code> asserting that their interpretations (sequences) are the reverse of each other, identified as <code>featureInverted</code> and <code>invertingFeature</code>. For example, a <code>Feature</code> identifying each person's parents is the inverse of a <code>Feature</code> identifying each person's children. A person identified as a parent of another will identify that other as one of their children.</p>
-
-
-
-
-
- <p>The <code>Feature</code> that is an inverse of the <code>invertingFeature</code>.</p>
-
-
-
-
-
-
- <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p>
-
-
-
-
-
-
- <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p>
-
-
-
-
-
-
-
-
- <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p><code>ReferenceSubsetting</code> is a kind of <code>Subsetting</code> in which the <code>referencedFeature</code> is syntactically distinguished from other <code>Features</code> subsetted by the <code>referencingFeature</code>. <code>ReferenceSubsetting</code> has the same semantics as <code>Subsetting</code>, but the <code>referencedFeature</code> may have a special purpose relative to the <code>referencingFeature</code>. For instance, <code>ReferenceSubsetting</code> is used to identify the <code>relatedFeatures</code> of a <code>Connector</code>.</p>
-
-<p><code>ReferenceSubsetting</code> is always an <code>ownedRelationship</code> of its <code>referencingFeature</code>. A <code>Feature</code> can have at most one <code>ownedReferenceSubsetting</code>.</p>
-
-
-
-
-
- <p>The <code>Feature</code> that is referenced by the <code>referencingFeature</code> of this <code>ReferenceSubsetting</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</code>.</p>
-
-
- <p>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</code>.</p>
-
-
-
-
-
-
-
- <p><code>CrossSubsetting</code> is a kind of <code>Subsetting</code> for end <code>Features</code>, as identified by <code>crossingFeature</code>, to subset a chained <code>Feature</code>, identified by <code>crossedFeature.</code> It navigates to instances of the end <code>Feature</code>’s type from instances of other end <code>Feature</code> types on the same <code>owningType</code> (at least two end <code>Features</code> are required for any of them to have a <code>CrossSubsetting</code>).</p>
-
-<p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have a feature chain of exactly two <code>Features</code>. The second <code>Feature</code> in the chain is the <code>crossFeature</code> of the <code>crossingFeature</code> (end <code>Feature</code>), which has the same type as the <code>crossingFeature</code>. When the <code>owningType</code> of the <code>crossingFeature</code> has exactly two end <code>Features</code>, the first <code>Feature</code> in the chain of the <code>crossedFeature</code> is the other end <code>Feature</code>. The <code>crossFeature</code>’s <code>featuringType</code> in this case is the other end <code>Feature</code>. When the <code>owningType</code> has more than two end <code>Features</code>, the first <code>Feature</code> in the chain is a <code>Feature</code> that <code>CrossMultiplies</code> all the other end <code>Features</code>, which is also the <code>featuringType</code> of the <code>crossFeature</code>.</p>
-
-<p>A <code>crossFeature</code> must be owned by its <code>featureCrossing</code> (end <code>Feature</code>) when the <code>featureCrossing</code> <code>owningType</code> has more than two end <code>Features</code>. Otherwise, for exactly two end <code>Features</code>, the <code>crossFeatures</code> of each the ends can instead optionally be inherited by the other end from one of its <code>types</code> or a subsetted <code>Feature</code>.</p>
-
-
-
- <p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have exactly two <code>chainingFeatures</code>. If the <code>crossingFeature</code> of the <code>CrossSubsetting</code> is one of two end <code>Features</code>, then the first <code>chainingFeature</code> must be the other end <code>Feature</code>.</p>
-
-
- OCL2.0
- crossingFeature.isEnd and crossingFeature.owningType <> null implies
- let endFeatures: Sequence(Feature) = crossingFeature.owningType.endFeature in
- let chainingFeatures: Sequence(Feature) = crossedFeature.chainingFeature in
- chainingFeatures->size() = 2 and
- endFeatures->size() = 2 implies
- chainingFeatures->at(1) = endFeatures->excluding(crossingFeature)->at(1)
-
-
-
-
- <p>The <code>crossingFeature</code> of a <code>CrossSubsetting</code> must be an end <code>Feature</code> that is owned by a <code>Type</code> with at least two end <code>Features</code>.</p>
-
-
- OCL2.0
- crossingFeature.isEnd and
-crossingFeature.owningType<>null and
-crossingFeature.owningType.endFeature ->size() > 1
-
-
-
-
-
- <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p>
-
-
-
-
-
-
-
- <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</p>
-
-
-
-
-
-
-
-
-
- The Kernel layer completes the KerML metamodel.
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p>
-
-
-
- <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- redefinesFromLibrary('Transfers::Transfer::payload')
-
-
-
-
-
-
- <p>The ItemFlow that has a certain <code>itemType</code>.</p>
-
-
-
-
-
-
-
-
- <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p>
-
-
-
-
-
-
-
- <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p>
-
-
-
- <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Transfers::flowTransfersBefore')
-
-
-
-
-
-
-
-
- <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Flow</code> is a <code>Step</code> that represents the transfer of values from one <code>Feature</code> to another. <code>Flows</code> can take non-zero time to complete.</p>
-
-
-
-
- <p>A <code>Flow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::transfers</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Transfers::transfers')
-
-
-
-
- <p>The <code>payloadTypes</code> of a <code>Flow</code> are the <code>types</code> of the <code>payloadFeature</code> of the <code>Flow</code> (if any).</p>
-
-
- OCL2.0
- payloadType =
- if payloadFeature = null then Sequence{}
- else payloadFeature.type
- endif
-
-
-
-
- <p>The <code>sourceOutputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the first <code>connectorEnd</code> of the <code>Flow</code>.</p>
-
-
- OCL2.0
- sourceOutputFeature =
- if connectorEnd->isEmpty() or
- connectorEnd.ownedFeature->isEmpty()
- then null
- else connectorEnd.ownedFeature->first()
- endif
-
-
-
-
- <p>The <code>targetInputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the second <code>connectorEnd</code> of the <code>Flow</code>.</p>
-
-
- OCL2.0
- targetInputFeature =
- if connectorEnd->size() < 2 or
- connectorEnd->at(2).ownedFeature->isEmpty()
- then null
- else connectorEnd->at(2).ownedFeature->first()
- endif
-
-
-
-
- <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p>
-
-
- OCL2.0
- flowEnd = connectorEnd->selectByKind(FlowEnd)
-
-
-
-
- <p>The <code>payloadFeature</code> of a <code>Flow</code> is the single one of its <code>ownedFeatures</code> that is a <code>PayloadFeature</code>.</p>
-
-
- OCL2.0
- payloadFeature =
- let payloadFeatures : Sequence(PayloadFeature) =
- ownedFeature->selectByKind(PayloadFeature) in
- if payloadFeatures->isEmpty() then null
- else payloadFeatures->first()
- endif
-
-
-
-
- <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p>
-
-
- OCL2.0
- ownedFeature->selectByKind(PayloadFeature)->size() <= 1
-
-
-
-
- <p>A <code>Flow</code> with <code>ownedEndFeatures</code> must specialize the <code>Step</code> <code><em>Transfers::flowTransfers</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- ownedEndFeatures->notEmpty() implies
- specializesFromLibrary('Transfers::flowTransfers')
-
-
-
-
-
-
- <p>The type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that receives the values carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>target</code> of the <code>Flow</code>.</p>
-
-
-
-
-
-
- <p>The <code>Feature</code> that provides the items carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>source</code> of the <code>Flow</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p>
-
-
-
-
-
-
-
- <p>The <code>Interactions</code> that type this <code>Flow</code>. <code>Interactions</code> are both <code>Associations</code> and <code>Behaviors</code>, which can type <code>Connectors</code> and <code>Steps</code>, respectively.</p>
-
-
-
-
-
-
-
- <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p>
-
-
-
- <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</p>
-
-
- OCL2.0
- isEnd
-
-
-
-
- <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p>
-
-
- OCL2.0
- ownedFeature->size() = 1
-
-
-
-
- <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p>
-
-
- OCL2.0
- owningType <> null and owningType.oclIsKindOf(Flow)
-
-
-
-
-
-
-
-
- <p>A <code>LibraryPackage</code> is a <code>Package</code> that is the container for a model library. A <code>LibraryPackage</code> is itself a library <code>Element</code> as are all <code>Elements</code> that are directly or indirectly contained in it.</p>
-
-
-
-
-
- <p>Whether this <code>LibraryPackage</code> contains a standard library model. This should only be set to true for <code>LibraryPackages</code> in the standard Kernel Model Libraries or in normative model libraries for a language built on KerML.</p>
-
-
-
-
-
-
- <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</p>
-
-
-
- OCL2.0
- self
-
-
-
-
-
-
-
-
-
-
- <p><code>ElementFilterMembership</code> is a <code>Membership</code> between a <code>Namespace</code> and a model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code>, asserting that imported <code>members</code> of the <code>Namespace</code> should be filtered using the <code>condition</code> <code>Expression</code>. A general <code>Namespace</code> does not define any specific filtering behavior, but such behavior may be defined for various specialized kinds of <code>Namespaces</code>.</p>
-
-
-
-
- <p>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</p>
-
-
- OCL2.0
- condition.isModelLevelEvaluable
-
-
-
-
- <p>The <code>result</code> <code>parameter</code> of the <code>condition</code> <code>Expression</code> must directly or indirectly specialize <code><em>ScalarValues::Boolean</em></code>.</p>
-
-
- OCL2.0
- condition.result.specializesFromLibrary('ScalarValues::Boolean')
-
-
-
-
-
- <p>The model-level evaluable <code>Boolean</code>-valued <code>Expression</code> used to filter the imported <code>members</code> of the <code>membershipOwningNamespace</code> of this <code>ElementFilterMembership</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Package</code> is a <code>Namespace</code> used to group <code>Elements</code>, without any instance-level semantics. It may have one or more model-level evaluable <code>filterCondition</code> <code>Expressions</code> used to filter its <code>importedMemberships</code>. Any imported <code>member</code> must meet all of the <code>filterConditions</code>.</p>
-
-
-
- <p>The <code>filterConditions</code> of a <code>Package</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p>
-
-
- OCL2.0
- filterCondition = ownedMembership->
- selectByKind(ElementFilterMembership).condition
-
-
-
-
-
- <p>The model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code> used to filter the <code>members</code> of this <code>Package</code>, which are owned by the <code>Package</code> are via <code>ElementFilterMemberships</code>.</p>
-
-
-
-
-
-
-
- <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p>
-
-
-
-
- OCL2.0
- self.oclAsType(Namespace).importedMemberships(excluded)->
- select(m | self.includeAsMember(m.memberElement))
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p>
-
-
-
- OCL2.0
- let metadataFeatures: Sequence(AnnotatingElement) =
- element.ownedAnnotation.annotatingElement->
- selectByKind(MetadataFeature) in
- self.filterCondition->forAll(cond |
- metadataFeatures->exists(elem |
- cond.checkCondition(elem)))
-
-
-
-
-
-
-
-
-
-
-
- <p>The ElementFilterMembership that owns the <code>condition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Class</code> is a <code>Classifier</code> of things (in the universe) that can be distinguished without regard to how they are related to other things (via <code>Features</code>). This means multiple things classified by the same <code>Class</code> can be distinguished, even when they are related other things in exactly the same way.</p>
-
-
-
-
- <p>A <code>Class</code> must directly or indirectly specialize the base <code>Class</code> <code><em>Occurrences::Occurrence</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Occurrences::Occurrence')
-
-
-
-
- <p>A <code>Class</code> must not specialize a <code>DataType</code> and it can only specialize an <code>Association</code> if it is also itself a kind of <code>Association</code> (such as an <code>AssociationStructure</code> or <code>Interaction</code>).</p>
-
-
- OCL2.0
- ownedSpecialization.general->
- forAll(not oclIsKindOf(DataType)) and
-not oclIsKindOf(Association) implies
- ownedSpecialization.general->
- forAll(not oclIsKindOf(Association))
-
-
-
-
-
-
-
-
- <p><code>LiteralBoolean</code> is a <code>LiteralExpression</code> that provides a <code><em>Boolean</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have type <code><em>Boolean</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalBooleanEvaluations')
-
-
-
-
-
- <p>The <code><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</code>.</p>
-
-
- <p>The Boolean value that is the result of evaluating this Expression.</p>
-
-
-
-
-
-
-
- <p>A <code>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</p>
-
-
-
-
- <p>A <code>LiteralExpression</code> is always model-level evaluable.</p>
-
-
- OCL2.0
- isModelLevelEvaluable = true
-
-
-
-
- <p>A <code>LiteralExpression</code> must directly or indirectly specialize the base <code>LiteralExpression</code> <code><em>Performances::literalEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalEvaluations')
-
-
-
-
-
- <p>A <code>LiteralExpression</code> is always model-level evaluable.</p>
-
-
-
- OCL2.0
- true
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The model-level value of a <code>LiteralExpression</code> is itself.</p>
-
-
-
- OCL2.0
- Sequence{self}
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>LiteralRational</code> is a <code>LiteralExpression</code> that provides a <code><em>Rational</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Rational</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalRationalEvaluations')
-
-
-
-
-
- <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p>
-
-
-
- <p>The Real value that is the result of evaluating this Expression.</p>
-
-
-
-
-
-
- <p>A <code>LiteralInfinity</code> is a <code>LiteralExpression</code> that provides the positive infinity value (<code>*</code>). It's <code>result</code> must have the type <code><em>Positive</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralInfinity</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalIntegerEvaluations')
-
-
-
-
-
-
- <p>A <code>LiteralInteger</code> is a <code>LiteralExpression</code> that provides an <code><em>Integer</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Integer</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalIntegerEvaluations')
-
-
-
-
-
- <p>The <code><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p>
-
-
- <p>The Integer value that is the result of evaluating this Expression.</p>
-
-
-
-
-
-
-
- <p>A <code>NullExpression</code> is an <code>Expression</code> that results in a null value.</p>
-
-
-
-
- <p>A <code>NullExpression</code> must directly or indirectly specialize the base <code>NullExpression</code> <code><em>Performances::nullEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::nullEvaluations')
-
-
-
-
-
- <p>A <code>NullExpression</code> is always model-level evaluable.</p>
-
-
-
- OCL2.0
- true
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p>
-
-
-
- OCL2.0
- Sequence{}
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>LiteralString</code> is a <code>LiteralExpression</code> that provides a <code><em>String</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>String</em></code>.</p>
-
-
-
-
- <p>A <code>LiteralString</code> must directly or indirectly specialize <em><code>Performances::literalStringEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::literalStringEvaluations')
-
-
-
-
-
- <p>The String value that is the result of evaluating this Expression.</p>
-
-
- <p>The <code><em>String</em></code> value that is the result of evaluating this <code>LiteralString</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>InvocationExpression</code> is an <code>InstantiationExpression</code> whose <code>instantiatedType</code> must be a <code>Behavior</code> or a <code>Feature</code> typed by a single <code>Behavior</code> (such as a <code>Step</code>). Each of the input <code>parameters</code> of the <code>instantiatedType</code> are bound to the <code>result</code> of an <code>argument</code> <code>Expression</code>. If the <code>instantiatedType</code> is a <code>Function</code> or a <code>Feature</code> typed by a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> is the <code>result</code> of the invoked <code>Function</code>. Otherwise, the <code>result</code> is an instance of the <code>instantiatedType</code> (essentially like a behavioral <code>ConstructorExpression</code>).</p>
-
-
-
-
- <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>InvocationExpression</code> must own a <code>BindingConnector</code> between itself and its <code>result</code> parameter.</p>
-
-
- OCL2.0
- not instantiatedType.oclIsKindOf(Function) and
-not (instantiatedType.oclIsKindOf(Feature) and
- instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies
- ownedFeature.selectByKind(BindingConnector)->exists(
- relatedFeature->includes(self) and
- relatedFeature->includes(result))
-
-
-
-
- <p>An <code>InvocationExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- TBD
-
-
-
-
- <p>The <code>arguments</code> of an <code>InvocationExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of its <code>ownedFeatures</code>, in an order corresponding to the order of the <code>input</code> parameters of the <code>instantiatedType</code> that the <code>ownedFeatures</code> redefine.</p>
-
-
- OCL2.0
- instantiatedType.input->collect(inp |
- ownedFeatures->select(redefines(inp)).valuation->
- select(v | v <> null).value
-)
-
-
-
-
- <p>Each <code>input</code> parameter of an <code>InvocationExpression</code> must redefine exactly one <code>input</code> parameter of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- let parameters : OrderedSet(Feature) = instantiatedType.input in
-input->forAll(inp |
- inp.ownedRedefinition.redefinedFeature->
- intersection(parameters)->size() = 1)
-
-
-
-
- <p>Two different <code>ownedFeatures</code> of an <code>InvocationExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- let features : OrderedSet(Feature) = instantiatedType.feature in
-input->forAll(inp1 | input->forAll(inp2 |
- inp1 <> inp2 implies
- inp1.ownedRedefinition.redefinedFeature->
- intersection(inp2.ownedRedefinition.redefinedFeature)->
- intersection(features)->isEmpty()))
-
-
-
-
- <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> must specialize the <code>instantiatedType</code>.</p>
-
-
- OCL2.0
- not instantiatedType.oclIsKindOf(Function) and
-not (instantiatedType.oclIsKindOf(Feature) and
- instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies
- result.specializes(instantiatedType)
-
-
-
-
- <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p>
-
-
- OCL2.0
- specializes(instantiatedType)
-
-
-
-
- <p>The <code>instantiatedType</code> of an <code>InvocationExpression</code> must be either a <code>Behavior</code> or a <code>Feature</code> with a single <code>type</code>, which is a <code>Behavior</code>.</p>
-
-
- OCL2.0
- instantiatedType.oclIsKindOf(Behavior) or
-instantiatedType.oclIsKindOf(Feature) and
- instantiatedType.type->exists(oclIsKindOf(Behavior)) and
- instantiatedType.type->size(1)
-
-
-
-
- <p>Other than its <code>result</code>, all the <code>ownedFeatures</code> of an <code>InvocationExpression</code> must have <code>direction = in</code>.</p>
-
-
- OCL2.0
- ownedFeature->forAll(f |
- f <> result implies
- f.direction = FeatureDirectionKind::_'in')
-
-
-
-
-
- <p>An <code>InvocationExpression</code> is model-level evaluable if all its <code>argument</code> <code>Expressions</code> are model-level evaluable and its <code>function</code> is model-level evaluable.</p>
-
-
-
-
- OCL2.0
- argument->forAll(modelLevelEvaluable(visited)) and
- function.isModelLevelEvaluable
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Apply the <code>Function</code> that is the <code>type</code> of this <code>InvocationExpression</code> to the argument values resulting from evaluating each of the <code>argument</code> <code>Expressions</code> on the given <code>target</code>. If the application is not possible, then return an empty sequence.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</code>.</p>
-
-
-
- <p>The <code>referent</code> of a <code>FeatureReferenceExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p>
-
-
- OCL2.0
- referent =
- let nonParameterMemberships : Sequence(Membership) = ownedMembership->
- reject(oclIsKindOf(ParameterMembership)) in
- if nonParameterMemberships->isEmpty() or
- not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature)
- then null
- else nonParameterMemberships->first().memberElement.oclAsType(Feature)
- endif
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between the <code>referent</code> and <code>result</code> of the <code>FeatureReferenceExpression</code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(targetFeature) and
- b.relatedFeatures->includes(result))
-
-
-
-
- <p>The first <code>ownedMembership</code> of a <code>FeatureReferenceExpression</code> that is not a <code>ParameterMembership</code> must have a <code>Feature</code> as its <code>memberElement</code>.</p>
-
-
- OCL2.0
- let membership : Membership =
- ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in
-membership->notEmpty() and
-membership->at(1).memberElement.oclIsKindOf(Feature)
-
-
-
-
- <p>The <code>result</code> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</p>
-
-
- OCL2.0
- result.owningType() = self and result.specializes(referent)
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p>
-
-
- OCL2.0
- result.owningType = self
-
-
-
-
-
- <p>The <code>Feature</code> that is referenced by this <code>FeatureReferenceExpression</code>, which is its first non-<code>parameter</code> <code>member</code>.<p>
-
-
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> is model-level evaluable if it's <code>referent</code></p>
-
-<ul>
- <li>conforms to the self-reference feature <code><em>Anything::self</em></code>;</li>
- <li>is an <code>Expression</code> that is model-level evaluable;</li>
- <li>has an <code>owningType</code> that is a <code>Metaclass</code> or <code>MetadataFeature</code>; or</li>
- <li>has no <code>featuringTypes</code> and, if it has a <code>FeatureValue</code>, the <code>value</code> <code>Expression</code> is model-level evaluable.</li>
-</ul>
-
-
-
-
- OCL2.0
- referent.conformsTo('Anything::self') or
-visited->excludes(referent) and
-(referent.oclIsKindOf(Expression) and
- referent.oclAsType(Expression).modelLevelEvaluable(visited->including(referent)) or
-referent.owningType <> null and
- (referent.owningType.isOclKindOf(MetaClass) or
- referent.owningType.isOclKindOf(MetadataFeature)) or
-referent.featuringType->isEmpty() and
- (referent.valuation = null or
- referent.valuation.modelLevelEvaluable(visited->including(referent))))
-
-
-
-
-
-
-
-
-
-
-
-
- <p>First, determine a <code>value</code> <code>Expression</code> for the <code>referent</code>:</p>
-
-<ul>
- <li>If the <code>target</code> <code>Element</code> is a Type that has a <code>feature</code> that is the <code>referent</code> or (directly or indirectly) redefines it, then the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for that <code>feature</code> (if any).</li>
- <li>Else, if the <code>referent</code> has no <code>featuringTypes</code>, the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for the <code>referent</code> (if any).</li>
-</ul>
-
-<p>Then:</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- OCL2.0
- if not target.oclIsKindOf(Type) then Sequence{}
+ The <code>ownedStakeholder</code> features of the ConcernUsage shall all subset the <em><code>ConcernCheck::concernedStakeholders</code> </em>feature. If the ConcernUsage is an <code>ownedFeature</code> of a StakeholderDefinition or StakeholderUsage, then the ConcernUsage shall have an <code>ownedStakeholder</code> feature that is bound to the <em><code>self</code></em> feature of its owner.</p>
+">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SelectExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"select"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::select</code></em> from the Kernel Functions Library.</p>
-
-
-
- <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p>
-
-
- OCL2.0
- operator = 'select'
-
-
-
-
- <p>The <code>result</code> of a <code>SelectExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>SelectExpression</code>.</p>
-
-
- OCL2.0
- arguments->notEmpty() implies
- result.specializes(arguments->first().result)
-
-
-
-
-
-
-
-
-
-
- <p>An <code>OperatorExpression</code> is an <code>InvocationExpression</code> whose <code>function</code> is determined by resolving its <code>operator</code> in the context of one of the standard packages from the Kernel Function Library.</p>
-
-
-
-
- <p>An <code>operator</code> symbol that names a corresponding <code>Function</code> from one of the standard packages from the Kernel Function Library .</p>
-
-
-
-
-
- <p>The <code>instantiatedType</code> of an <code>OperatorExpression</code> is the resolution of it's <code>operator</code> from one of the packages <em><code>BaseFunctions</code></em>, <em><code>DataFunctions</code></em>, or <em><code>ControlFunctions</code></em> from the Kernel Function Library.</p>
-
-
-
- OCL2.0
- let libFunctions : Sequence(Element) =
- Sequence{'BaseFunctions', 'DataFunctions', 'ControlFunctions'}->
- collect(ns | resolveGlobal(ns + "::'" + operator + "'").
- memberElement) in
-if libFunctions->isEmpty() then null
-else libFunctions->first().oclAsType(Type)
-endif
-
-
-
-
-
-
-
- <p>A <code>CollectExpression</code> is an <code>OperatorExpression</code> whose <code>operator</code> is <code>"collect"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::collect</code></em> from the Kernel Functions Library.</p>
-
-
-
- <p>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p>
-
-
- OCL2.0
- operator = 'collect'
-
-
-
-
-
-
-
-
-
-
- <p>A <code>FeatureChainExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"."</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::'.'</code></em> from the Kernel Functions Library. It evaluates to the result of chaining the <code>result</code> <code>Feature</code> of its single <code>argument</code> <code>Expression</code> with its <code>targetFeature</code>.</p>
-
-
-
- <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine the <code>Feature</code> <code><em>ControlFunctions::'.'::source::target</em></code> from the Kernel Functions Library.</p>
-
-
- OCL2.0
- let sourceParameter : Feature = sourceTargetFeature() in
-sourceTargetFeature <> null and
-sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine its <code>targetFeature</code>.</p>
-
-
- OCL2.0
- let sourceParameter : Feature = sourceTargetFeature() in
-sourceTargetFeature <> null and
-sourceTargetFeature.redefines(targetFeature)
-
-
-
-
- <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p>
-
-
- OCL2.0
- targetFeature =
- let nonParameterMemberships : Sequence(Membership) = ownedMembership->
- reject(oclIsKindOf(ParameterMembership)) in
- if nonParameterMemberships->isEmpty() or
- not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature)
+ specializesFromLibrary('Requirements::satisfiedRequirementChecks')
+endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
-
- <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> must be featured within the <code>result</code> parameter of the <code>argument</code> <code>Expression</code> of the <code>FeatureChainExpression</code>.</p>
-
-
-
-
- OCL2.0
- argument->notEmpty() implies
- targetFeature.isFeaturedWithin(argument->first().result)
-
-
-
-
- <p>The <code>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</code>.</p>
-
-
- OCL2.0
- operator = '.'
-
-
-
-
- <p>The <code>result</code> parameter of a <code>FeatureChainExpression</code> must specialize the feature chain of the <code>FeatureChainExpression</code>.</p>
-
-
- OCL2.0
- let inputParameters : Sequence(Feature) =
- ownedFeatures->select(direction = _'in') in
-let sourceTargetFeature : Feature =
- owningExpression.sourceTargetFeature() in
-sourceTargetFeature <> null and
-result.subsetsChain(inputParameters->first(), sourceTargetFeature) and
-result.owningType = self
-
-
-
-
-
-
-
-
-
- <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p>
-
-
-
-
-
-
- <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p>
-
-
-
- OCL2.0
- let inputParameters : Feature = ownedFeatures->
- select(direction = _'in') in
-if inputParameters->isEmpty() or
- inputParameters->first().ownedFeature->isEmpty()
-then null
-else inputParameters->first().ownedFeature->first()
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>MetadataAccessExpression</code> is an <code>Expression</code> whose <code>result</code> is a sequence of instances of <code>Metaclasses</code> representing all the <code>MetadataFeature</code> annotations of the <code>referencedElement</code>. In addition, the sequence includes an instance of the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code>, with values for all the abstract syntax properties of the <code>referencedElement</code>.</p>
-
-
-
- <p>A <code>MetadataAccessExpression</code> must directly or indirectly specialize the base <code>MetadataAccessExpression</code> <code><em>Performances::metadataAccessEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::metadataAccessEvaluations')
-
-
-
-
- <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p>
-
-
- OCL2.0
- ownedMembership->exists(not oclIsKindOf(FeatureMembership))
-
-
-
-
- <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p>
-
-
- OCL2.0
- referencedElement =
- let elements : Sequence(Element) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement in
- if elements->isEmpty() then null
- else elements->first()
- endif
-
-
-
-
-
- <p>The <code>Element</code> whose metadata is being accessed.</p>
-
-
-
-
-
-
- <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p>
-
-
-
- OCL2.0
- true
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>ownedElements</code> of the <code>referencedElement</code> that are <code>MetadataFeatures</code> and have the <code>referencedElement</code> as an <code>annotatedElement</code>, plus a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the values of the MOF properties of the <code>referencedElement</code>.</p>
-
-
-
- OCL2.0
- referencedElement.ownedElement->
- select(oclIsKindOf(MetadataFeature)
- and annotatedElement->includes(referencedElement))->
- including(metaclassFeature())
-
-
-
-
-
-
-
-
-
-
- <p>Return a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the MOF properties of the <code>referencedElement</code>.</p>
-
-
-
-
-
-
- <p>An <code>IndexExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"#"</code>, which resolves to the <code>Function</code> <em><code>BasicFunctions::'#'</code></em> from the Kernel Functions Library.</p>
-
-
-
- <p>The <code>result</code> of an <code>IndexExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>IndexExpression</code>, unless that <code>result</code> already directly or indirectly specializes the <code>DataType</code> <em><code>Collections::Array</code></em> from the Kernel Data Type Library.</p>
-
-
- OCL2.0
- arguments->notEmpty() and
-not arguments->first().result.specializesFromLibrary('Collections::Array') implies
- result.specializes(arguments->first().result)
-
-
-
-
- <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p>
-
-
- OCL2.0
- operator = '#'
-
-
-
-
-
-
-
-
-
-
- <p>An <code>InstantiationExpression</code> is an <code>Expression</code> that instantiates its <code>instantiatedType</code>, binding some or all of the <code>features</code> of that <code>Type</code> to the <code>results</code> of its <code>arguments</code>.</p>
-
-<p><code>InstantiationExpression</code> is abstract, with concrete subclasses <code>InvocationExpression</code> and <code>ConstructorExpression</code>.</p>
-
-
-
- <p>An <code>InstantiationExpression</code> must own its <code>result</code> parameter.</p>
-
-
- OCL2.0
- result.owningType = self
-
-
-
-
- <p>The <code>instantiatedType</code> of an <code>InstantiationExpression</code> is given by the result of the <code>instantiatedType()</code> operation.</p>
-
-
- OCL2.0
- instantiatedType = instantiatedType()
-
-
-
-
- <p>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</code>.</p>
-
-
- OCL2.0
- instantiatedType() <> null
-
-
-
-
-
- <p>The <code>Expressions</code> whose <code>results</code> are bound to <code>features</code> of the <code>instantiatedType</code>. The <code>arguments</code> are ordered consistent with the order of the <code>features</code>, though they may not be one-to-one with all the <code>features</code>.</p>
-
-<p><strong>Note.</strong> The derivation of <code>argument</code> is given in the concrete subclasses of <code>InstantiationExpression</code>.</p>
-
-
-
-
-
-
- <p>The <code>Type</code> that is being instantiated.</p>
-
-
-
-
-
-
- <p>Return the <code>Type</code> to act as the <code>instantiatedType</code> for this <code>InstantiationExpression</code>. By default, this is the <code>memberElement</code> of the first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>, which must be a <code>Type</code>.</p>
-
-<p><b>Note.</b> This operation is overridden in the subclass <code>OperatorExpression</code>.</p>
-
-
-
- OCL2.0
- let members : Sequence(Element) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement in
-if members->isEmpty() or not members->first().oclIsKindOf(Type) then null
-else typeMembers->first().oclAsType(Type)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstructorExpression</code> is an <code>InstantiationExpression</code> whose <code>result</code> specializes its <code>instantiatedType</code>, binding some or all of the <code>features</code> of the <code>instantiatedType</code> to the <code>results</code> of its <code>argument</code> <code>Expressions</code>.</p>
-
-
-
- <p>The <code>arguments</code> of a <code>ConstructorExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of the <code>ownedFeatures</code> of its <code>result</code> parameter, in an order corresponding to the order of the <code>features</code> of the <code>instantiatedType</code> that the <code>result</code> <code>ownedFeatures</code> redefine.</p>
-
-
- OCL2.0
- instantiatedType.feature->collect(f |
- result.ownedFeatures->select(redefines(f)).valuation->
- select(v | v <> null).value
-)
-
-
-
-
- <p>Two different <code>ownedFeatures</code> of the <code>result</code> of a <code>ConstructorExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- let features : OrderedSet(Feature) = instantiatedType.feature->
- select(visibility = VisibilityKind::public) in
-result.ownedFeature->forAll(f1 | result.ownedFeature->forAll(f2 |
- f1 <> f2 implies
- f1.ownedRedefinition.redefinedFeature->
- intersection(f2.ownedRedefinition.redefinedFeature)->
- intersection(features)->isEmpty()))
-
-
-
-
- <p>Each <code>ownedFeature</code> of the result of a <code>ConstructionExpression</code> must redefine exactly one public <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- let features : OrderedSet(Feature) = instantiatedType.feature->
- select(owningMembership.visibility = VisibilityKind::public) in
-result.ownedFeature->forAll(f |
- f.ownedRedefinition.redefinedFeature->
- intersection(features)->size() = 1)
-
-
-
-
- <p>The <code>result</code> of a <code>ConstructorExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p>
-
-
- OCL2.0
- TBD
-
-
-
-
- <p>A <code>ConstructorExpression</code> must directly or indirectly specialize the <code>Expression</code> <em><code>Performances::constructorEvaluations</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializes('Performances::constructorEvaluations')
-
-
-
-
- <p>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- result.specializes(instantiatedType)
-
-
-
-
- <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p>
-
-
- OCL2.0
- ownedFeatures->excluding(result)->isEmpty()
-
-
-
-
-
- <p>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p>
-
-
-
-
- OCL2.0
- argument->forAll(modelLevelEvaluable(visited))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Structure</code> is a <code>Class</code> of objects in the modeled universe that are primarily structural in nature. While such an object is not itself behavioral, it may be involved in and acted on by <code>Behaviors</code>, and it may be the performer of some of them.</p>
-
-
-
-
- <p>A <code>Structure</code> must directly or indirectly specialize the base <code>Structure</code> <code><em>Objects::Object</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Objects::Object')
-
-
-
-
- <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p>
-
-
- OCL2.0
- ownedSpecialization.general->forAll(not oclIsKindOf(Behavior))
-
-
-
-
-
-
-
-
-
- <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>Predicate</code> is a <code>Function</code> whose <code>result</code> <code>parameter</code> has type <code><em>Boolean</em></code> and multiplicity <code>1..1</code>.</p>
-
-
-
-
- <p>A <code>Predicate</code> must directly or indirectly specialize the base <code>Predicate</code> <code><em>Performances::BooleanEvaluation</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::BooleanEvaluation')
-
-
-
-
-
-
- <p>A <code>ReturnParameterMembership</code> is a <code>ParameterMembership</code> that indicates that the <code>ownedMemberParameter</code> is the <code>result</code> <code>parameter</code> of a <code>Function</code> or <code>Expression</code>. The <code>direction</code> of the <code>ownedMemberParameter</code> must be <code>out</code>.</p>
-
-
-
-
- <p>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression)
-
-
-
-
-
- <p>The <code>ownedMemberParameter</code> of a <code>ReturnParameterMembership</code> must have direction <code>out</code>. (This is a leaf operation that cannot be further redefined.)</p>
-
-
-
- OCL2.0
- FeatureDirectionKind::out
-
-
-
-
-
-
-
-
-
-
-
- <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Invariant</code> is a <code>BooleanExpression</code> that is asserted to have a specific <code><em>Boolean</em></code> result value. If <code>isNegated = false</code>, then the result is asserted to be true. If <code>isNegated = true</code>, then the result is asserted to be false.</p>
-
-
-
-
- <p>An <code>Invariant</code> must directly or indirectly specialize either of the following <code>BooleanExpressions</code> from the Kernel Semantic Library: <code><em>Performances::trueEvaluations</em></code>, if <code>isNegated = false</code>, or <code><em>Performances::falseEvaluations</em></code>, if <code>isNegated = true</code>.</p>
-
-
- OCL2.0
- if isNegated then
- specializesFromLibrary('Performances::falseEvaluations')
-else
- specializesFromLibrary('Performances::trueEvaluations')
-endif
-
-
-
-
-
- <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p>
-
-
-
-
-
-
-
-
- <p>A <code>BooleanExpression</code> is a <em><code>Boolean</code></em>-valued <code>Expression</code> whose type is a <code>Predicate</code>. It represents a logical condition resulting from the evaluation of the <code>Predicate</code>.</p>
-
-
-
-
- <p>A <code>BooleanExpression</code> must directly or indirectly specialize the base <code>BooleanExpression</code> <code><em>Performances::booleanEvaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::booleanEvaluations')
-
-
-
-
-
- <p>The Predicate that types the Expression.</p>
-
-
-
- <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Expression</code> is a <code>Step</code> that is typed by a <code>Function</code>. An <code>Expression</code> that also has a <code>Function</code> as its <code>featuringType</code> is a computational step within that <code>Function</code>. An <code>Expression</code> always has a single <code>result</code> parameter, which redefines the <code>result</code> parameter of its defining <code>function</code>. This allows <code>Expressions</code> to be interconnected in tree structures, in which inputs to each <code>Expression</code> in the tree are determined as the results of other <code>Expression</code> in the tree.</p>
-
-
-
-
- <p>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p>
-
-
- OCL2.0
- isModelLevelEvaluable = modelLevelEvaluable(Set(Element){})
-
-
-
-
- <p>An <code>Expression</code> must directly or indirectly specialize the base <code>Expression</code> <code><em>Performances::evaluations</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::evaluations')
-
-
-
-
- <p>If this <code>Expression</code> is owned by a <code>FeatureValue</code>, then it must have the same <code>featuringTypes</code> as the <code>featureWithValue</code> of the <code>FeatureValue</code>.</p>
-
-
- OCL2.0
- owningMembership <> null and
-owningMembership.oclIsKindOf(FeatureValue) implies
- let featureWithValue : Feature =
- owningMembership.oclAsType(FeatureValue).featureWithValue in
- featuringType = featureWithValue.featuringType
-
-
-
-
- <p>If an <code>Expression</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Expression</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p>
-
-
- OCL2.0
- ownedMembership.selectByKind(ResultExpressionMembership)->
- forAll(mem | ownedFeature.selectByKind(BindingConnector)->
- exists(binding |
- binding.relatedFeature->includes(result) and
- binding.relatedFeature->includes(mem.ownedResultExpression.result)))
-
-
-
-
- <p>The <code>result</code> parameter of an <code>Expression</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p>
-
-
- OCL2.0
- result =
- let resultParams : Sequence(Feature) =
- featureMemberships->
- selectByKind(ReturnParameterMembership).
- ownedMemberParameter in
- if resultParams->notEmpty() then resultParams->first()
- else null
- endif
-
-
-
-
-
- <p>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ReturnParameterMembership)->
- size() = 1
-
-
-
-
- <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p>
-
-
- OCL2.0
- membership->selectByKind(ResultExpressionMembership)->size() <= 1
-
-
-
-
-
- <p>The <code>Function</code> that types this <code>Expression</code>.</p>
-
-
-
- <p>This is the Function that types the Expression.</p>
-
-
-
-
-
-
-
- <p><p>An <code>output</code> <code>parameter</code> of the <code>Expression</code> whose value is the result of the <code>Expression</code>. The result of an <code>Expression</code> is either inherited from its <code>function</code> or it is related to the <code>Expression</code> via a <code>ReturnParameterMembership</code>, in which case it redefines the <code>result</code> <code>parameter</code> of its <code>function</code>.</p>
-
-
-
-
-
-
-
- <p>Whether this <code>Expression</code> meets the constraints necessary to be evaluated at <em>model level</em>, that is, using metadata within the model.</p>
-
-
-
-
-
- <p>Return whether this <code>Expression</code> is model-level evaluable. The <code>visited</code> parameter is used to track possible circular <code>Feature</code> references made from <code>FeatureReferenceExpressions</code> (see the redefinition of this operation for <code>FeatureReferenceExpression</code>). Such circular references are not allowed in model-level evaluable expressions.</p>
-
-<p>An <code>Expression</code> that is not otherwise specialized is model-level evaluable if it has no (non-implied) <code>ownedSpecializations</code> and all its <code>ownedFeatures</code> are either <code>in</code> parameters, the <code>result</code> <code>parameter</code> or a result <code>Expression</code> owned via a <code>ResultExpressionMembership</code>. The <code>parameters</code> must not have any <code>ownedFeatures</code> or a <code>FeatureValue</code>, and the result <code>Expression</code> must be model-level evaluable.</p>
-
-
-
- OCL2.0
- ownedSpecialization->forAll(isImplied) and
-ownedFeature->forAll(f |
- (directionOf(f) = FeatureDirectionKind::_'in' or f = result) and
- f.ownedFeature->isEmpty() and f.valuation = null or
- f.owningFeatureMembership.oclIsKindOf(ResultExpressionMembership) and
- f.oclAsType(Expression).modelLevelEvaluable(visited)
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>If this <code>Expression</code> <code>isModelLevelEvaluable</code>, then evaluate it using the <code>target</code> as the context <code>Element</code> for resolving <code>Feature</code> names and testing classification. The result is a collection of <code>Elements</code>, which, for a fully evaluable <code>Expression</code>, will be a <code>LiteralExpression</code> or a <code>Feature</code> that is not an <code>Expression</code>.</p>
-
-
-
- OCL2.0
- isModelLevelEvaluable
-
-
-
-
- OCL2.0
- let resultExprs : Sequence(Expression) =
- ownedFeatureMembership->
- selectByKind(ResultExpressionMembership).
- ownedResultExpression in
-if resultExpr->isEmpty() then Sequence{}
-else resultExprs->first().evaluate(target)
-endif
-
-
-
-
-
-
-
-
-
-
- <p>Model-level evaluate this <code>Expression</code> with the given <code>target</code>. If the result is a <code>LiteralBoolean</code>, return its <code>value</code>. Otherwise return <code>false</code>.</p>
-
-
-
-
- OCL2.0
- let results: Sequence(Element) = evaluate(target) in
- result->size() = 1 and
- results->first().oclIsKindOf(LiteralBoolean) and
- results->first().oclAsType(LiteralBoolean).value
-
-
-
-
-
-
-
-
-
-
-
- <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Functions that hasve a certain <code>expression</code> as a step.</p>
-
-
-
-
-
-
-
- <p>A <code>Function</code> is a <code>Behavior</code> that has an <code>out</code> <code>parameter</code> that is identified as its <code>result</code>. A <code>Function</code> represents the performance of a calculation that produces the values of its <code>result</code> <code>parameter</code>. This calculation may be decomposed into <code>Expressions</code> that are <code>steps</code> of the <code>Function</code>.</p>
-
-
-
-
- <p>A <code>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ReturnParameterMembership)->
- size() = 1
-
-
-
-
- <p>A <code>Function</code> must directly or indirectly specialize the base <code>Function</code> <code><em>Performances::Evaluation</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::Evaluation')
-
-
-
-
- <p>If a <code>Function</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Function</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p>
-
-
- OCL2.0
- ownedMembership.selectByKind(ResultExpressionMembership)->
- forAll(mem | ownedFeature.selectByKind(BindingConnector)->
- exists(binding |
- binding.relatedFeature->includes(result) and
- binding.relatedFeature->includes(mem.ownedResultExpression.result)))
-
-
-
-
- <p>The <code>result</code> <code>parameter</code> of a <code>Function</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p>
-
-
- OCL2.0
- result =
- let resultParams : Sequence(Feature) =
- featureMemberships->
- selectByKind(ReturnParameterMembership).
- ownedMemberParameter in
- if resultParams->notEmpty() then resultParams->first()
+ else bindings->first().relatedElement->any(r | r <> subjectParameter)
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p>
-
-
- OCL2.0
- membership->selectByKind(ResultExpressionMembership)->size() <= 1
-
-
-
-
-
- <p>The <code>Expressions</code> that are <code>steps</code> in the calculation of the <code>result</code> of this <code>Function</code>.</p>
-
-
-
- <p>The set of expressions that represent computational steps or parts of a system of equations within the Function.</p>
-
-
-
-
-
-
-
- <p>The object or value that is the result of evaluating the Function.</p>
-
-
- <p>The <code>result</code> <code>parameter</code> of the <code>Function</code>, which is owned by the <code>Function</code> via a <code>ReturnParameterMembership</code>.</p>
-
-
-
-
-
-
-
- <p>Whether this <code>Function</code> can be used as the <code>function</code> of a model-level evaluable <code>InvocationExpression</code>. Certain <code>Functions</code> from the Kernel Functions Library are considered to have <code>isModelLevelEvaluable = true</code>. For all other <code>Functions</code> it is <code>false</code>.</p>
-
-<p><strong>Note:</strong> See the specification of the KerML concrete syntax notation for <code>Expressions</code> for an identification of which library <code>Functions</code> are model-level evaluable.</p>
-
-
-
-
-
-
-
- <p>The Expressions that are typed by a certain <code>function</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ResultExpressionMembership</code> is a <code>FeatureMembership</code> that indicates that the <code>ownedResultExpression</code> provides the result values for the <code>Function</code> or <code>Expression</code> that owns it. The owning <code>Function</code> or <code>Expression</code> must contain a <code>BindingConnector</code> between the <code>result</code> <code>parameter</code> of the <code>ownedResultExpression</code> and the <code>result</code> <code>parameter</code> of the owning <code>Function</code> or <code>Expression</code>.</p>
-
-
-
-
- <p>The <code>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression)
-
-
-
-
-
- <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>MultiplicityRange</code> is a <code>Multiplicity</code> whose value is defined to be the (inclusive) range of natural numbers given by the result of a <code>lowerBound</code> <code>Expression</code> and the result of an <code>upperBound</code> <code>Expression</code>. The result of these <code>Expressions</code> shall be of type <code><em>Natural</em></code>. If the result of the <code>upperBound</code> <code>Expression</code> is the unbounded value <code>*</code>, then the specified range includes all natural numbers greater than or equal to the <code>lowerBound</code> value. If no <code>lowerBound</code> <code>Expression</code>, then the default is that the lower bound has the same value as the upper bound, except if the <code>upperBound</code> evaluates to <code>*</code>, in which case the default for the lower bound is 0.</p>
-
-
-
-
- <p>The <code>bounds</code> of a <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>.</p>
-
-
- OCL2.0
- bound->forAll(b | b.featuringType = self.featuringType)
-
-
-
-
- <p>The <code>results</code> of the <code>bound</code> <code>Expression(s)</code> of a <code>MultiplicityRange</code> must be typed by <code><em>ScalarValues::Intger</em></code> from the Kernel Data Types Library. If a <code>bound</code> is model-level evaluable, then it must evaluate to a non-negative value.</p>
-
-
- OCL2.0
- bound->forAll(b |
- b.result.specializesFromLibrary('ScalarValues::Integer') and
- let value : UnlimitedNatural = valueOf(b) in
- value <> null implies value >= 0
-)
-
-
-
-
- <p>If a <code>MultiplicityRange</code> has two <code>ownedMembers</code> that are <code>Expressions</code>, then the <code>lowerBound</code> is the first of these, otherwise it is <code>null</code>.</p>
-
-
- OCL2.0
- lowerBound =
- let ownedExpressions : Sequence(Expression) =
- ownedMember->selectByKind(Expression) in
- if ownedExpressions->size() < 2 then null
- else ownedExpressions->first()
- endif
-
-
-
-
- <p>If a <code>MultiplicityRange</code> has one <code>ownedMember</code> that is an <code>Expression</code>, then this is the <code>upperBound</code>. If it has more than one <code>ownedMember</code> that is an <code>Expression</code>, then the <code>upperBound</code> is the second of those. Otherwise, it is null.</p>
-
-
- OCL2.0
- upperBound =
- let ownedExpressions : Sequence(Expression) =
- ownedMember->selectByKind(Expression) in
- if ownedExpressions->isEmpty() then null
- else if ownedExpressions->size() = 1 then ownedExpressions->at(1)
- else ownedExpressions->at(2)
- endif endif
-
-
-
-
- <p>The <code>bounds</code> of a <code>MultiplicityRange</code> are the <code>lowerBound</code> (if any) followed by the <code>upperBound</code>.</p>
-
-
- OCL2.0
- bound =
- if upperBound = null then Sequence{}
- else if lowerBound = null then Sequence{upperBound}
- else Sequence{lowerBound, upperBound}
- endif endif
-
-
-
-
- <p>The <code>lowerBound</code> (if any) and <code>upperBound</code> <code>Expressions</code> must be the first <code>ownedMembers</code> of a <code>MultiplicityRange</code>.</p>
-
-
- OCL2.0
- if lowerBound = null then
- ownedMember->notEmpty() and
- ownedMember->at(1) = upperBound
-else
- ownedMember->size() > 1 and
- ownedMember->at(1) = lowerBound and
- ownedMember->at(2) = upperBound
-endif
-
-
-
-
-
- <p>The <code>Expression</code> whose result provides the lower bound of the <code>MultiplicityRange</code>. If no <code>lowerBound</code> <code>Expression</code> is given, then the lower bound shall have the same value as the upper bound, unless the upper bound is unbounded (<code>*</code>), in which case the lower bound shall be 0.</p>
-
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</code>.</p>
-
-
-
-
-
-
- <p>The owned <code>Expressions</code> of the <code>MultiplicityRange</code> whose results provide its bounds. These must be the first <code>ownedMembers</code> of the <code>MultiplicityRange</code>.</p>
-
-
-
-
-
-
- <p>Check whether this <code>MultiplicityRange</code> represents the range bounded by the given values <code>lower</code> and <code>upper</code>, presuming the <code>lowerBound</code> and <code>upperBound</code> <code>Expressions</code> are model-level evaluable.</p>
-
-
-
- OCL2.0
- valueOf(upperBound) = upper and
-let lowerValue: UnlimitedNatural = valueOf(lowerBound) in
-(lowerValue = lower or
- lowerValue = null and
- (lower = upper or
- lower = 0 and upper = *))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Evaluate the given <code>bound</code> <code>Expression</code> (at model level) and return the result represented as a MOF <code>UnlimitedNatural</code> value.</p>
-
-
-
- OCL2.0
- if bound = null or not bound.isModelLevelEvaluable then
- null
+ endif endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Step</code> is a <code>Feature</code> that is typed by one or more <code>Behaviors</code>. <code>Steps</code> may be used by one <code>Behavior</code> to coordinate the performance of other <code>Behaviors</code>, supporting a steady refinement of behavioral descriptions. <code>Steps</code> can be ordered in time and can be connected using <code>Flows</code> to specify things flowing between their <code>parameters</code>.</p>
-
-
-
-
- <p>A <code>Step</code> must directly or indirectly specialize the base <code>Step</code> <code><em>Performances::performances</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Performances::performances')
-
-
-
-
- <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code> must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::enclosedPerformance</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
- (owningType.oclIsKindOf(Behavior) or
- owningType.oclIsKindOf(Step)) implies
- specializesFromLibrary('Performances::Performance::enclosedPerformance')
-
-
-
-
- <p>A composite <code>Step</code> whose <code>owningType</code> is a <code>Structure</code> or a <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize the <code>Step</code> <code><em>Objects::Object::ownedPerformance</em></code>.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(Structure) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKindOf(Structure)) implies
- specializesFromLibrary('Objects::Object::ownedPerformance')
-
-
-
-
- <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code>, and which is composite, must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::subperformance</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
- (owningType.oclIsKindOf(Behavior) or
- owningType.oclIsKindOf(Step)) and
- self.isComposite implies
- specializesFromLibrary('Performances::Performance::subperformance')
-
-
-
-
- <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p>
-
-
- OCL2.0
- behavior = type->selectByKind(Behavior)
-
-
-
-
-
- <p>The <code>Behaviors</code> that type this <code>Step</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>Step</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Step</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>Behavior </code>coordinates occurrences of other <code>Behaviors</code>, as well as changes in objects. <code>Behaviors</code> can be decomposed into <code>Steps</code> and be characterized by <code>parameters</code>.</p>
-
-
-
-
- <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p>
-
-
- OCL2.0
- ownedSpecialization.general->forAll(not oclIsKindOf(Structure))
-
-
-
-
- <p>A <code>Behavior</code> must directly or indirectly specialize the base <code>Behavior</code> <code><em>Performances::Performance</em></code> from the Kernel Semantic Library.</p>
-
-
- English
- specializesFromLibrary('Performances::Performance')
-
-
-
-
- <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p>
-
-
- OCL2.0
- step = feature->selectByKind(Step)
-
-
-
-
-
- <p>The <code>Steps</code> that make up this <code>Behavior</code>.</p>
-
-
-
-
-
-
-
- <p>The parameters of this <code>Behavior</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Behavior</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ParameterMembership</code> is a <code>FeatureMembership</code> that identifies its <code>memberFeature</code> as a parameter, which is always owned, and must have a <code>direction</code>. A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>, a <code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p>
-
-
-
- <p>The <code>ownedMemberParameter</code> of a <code>ParameterMembership</code> must have a <code>direction</code> equal to the result of the <code>parameterDirection()</code> operation.</p>
-
-
- OCL2.0
- ownedMemberParameter.direction = parameterDirection()
-
-
-
-
- <p>A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>,<code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or
-owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and
- owningType.owningNamespace.oclIsKindOf(ConstructorExpression)
-
-
-
-
-
- <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p>
-
-
-
-
-
-
-
- <p>Return the required value of the <code>direction</code> of the <code>ownedMemberParameter</code>. By default, this is <code>in</code>.</p>
-
-
-
- OCL2.0
- FeatureDirectionKind::_'in'
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Metaclass</code> is a <code>Structure</code> used to type <code>MetadataFeatures</code>.</p>
-
-
-
- <p>A <code>Metaclass</code> must directly or indirectly specialize the base <code>Metaclass</code> <code><em>Metaobjects::Metaobject</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metaobjects::Metaobject')
-
-
-
-
-
-
- <p>A <code>MetadataFeature</code> is a <code>Feature</code> that is an <code>AnnotatingElement</code> used to annotate another <code>Element</code> with metadata. It is typed by a <code>Metaclass</code>. All its <code>ownedFeatures</code> must redefine <code>features</code> of its <code>metaclass</code> and any feature bindings must be model-level evaluable.</p>
+ specializesFromLibrary('Constraints::assertedConstraintChecks')
+endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p>
-
-
- OCL2.0
- type->selectByKind(Metaclass).size() = 1
-
-
-
-
- <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p>
-
-
- OCL2.0
- not metaclass.isAbstract
-
-
-
-
- <p>A <code>MetadataFeature</code> must directly or indirectly specialize the base <code>MetadataFeature</code> <code><em>Metaobjects::metaobjects</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metaobjects::metaobjects')
-
-
-
-
- <p>Each <code>ownedFeature</code> of a <code>MetadataFeature</code> must have no declared name, redefine a single <code>Feature</code>, either have no <code>featureValue</code> or a <code>featureValue</code> with a <code>value</code> <code>Expression</code> that is model-level evaluable, and only have <code>ownedFeatures</code> that also meet these restrictions.</p>
-
-
- OCL2.0
- ownedFeature->closure(ownedFeature)->forAll(f |
- f.declaredName = null and f.declaredShortName = null and
- f.valuation <> null implies f.valuation.value.isModelLevelEvaluable and
- f.redefinition.redefinedFeature->size() = 1)
-
-
-
-
- <p>The <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>.
-
-
- OCL2.0
- metaclass =
- let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in
- if metaclassTypes->isEmpty() then null
- else metaClassTypes->first()
- endif
-
-
-
-
- <p>The <code>annotatedElements</code> of a <code>MetadataFeature</code> must have an abstract syntax metaclass consistent with the <code>annotatedElement</code> declarations for the <code>MetadataFeature</code>.</p>
-
-
- OCL2.0
- let baseAnnotatedElementFeature : Feature =
- resolveGlobal('Metaobjects::Metaobject::annotatedElement').memberElement.
- oclAsType(Feature) in
-let annotatedElementFeatures : OrderedSet(Feature) = feature->
- select(specializes(baseAnnotatedElementFeature))->
- excluding(baseAnnotatedElementFeature) in
-annotatedElementFeatures->notEmpty() implies
- let annotatedElementTypes : Set(Feature) =
- annotatedElementFeatures.typing.type->asSet() in
- let metaclasses : Set(Metaclass) =
- annotatedElement.oclType().qualifiedName->collect(qn |
- resolveGlobal(qn).memberElement.oclAsType(Metaclass)) in
- metaclasses->forAll(m | annotatedElementTypes->exists(t | m.specializes(t)))
-
-
-
-
- <p>If this <code>MetadataFeature</code> is an application of <code><em>SemanticMetadata</em></code>, then its <code>annotatingElement</code> must be a <code>Type</code>. The annotated <code>Type</code> must then directly or indirectly specialize the specified value of the <code><em>baseType</em></code>, <em>unless</em> the <code>Type</code> is a <code>Classifier</code> and the <code><em>baseType</em></code> represents a kind of <code>Feature</code>, in which case the <code>Classifier</code> must directly or indirectly specialize each of the <code>types</code> of the <code>Feature</code>.</p>
-
-
- OCL2.0
- isSemantic() implies
- let annotatedTypes : Sequence(Type) =
- annotatedElement->selectAsKind(Type) in
- let baseTypes : Sequence(MetadataFeature) =
- evaluateFeature(resolveGlobal(
- 'Metaobjects::SemanticMetadata::baseType').
- memberElement.
- oclAsType(Feature))->
- selectAsKind(MetadataFeature) in
- annotatedTypes->notEmpty() and
- baseTypes()->notEmpty() and
- baseTypes()->first().isSyntactic() implies
- let annotatedType : Type = annotatedTypes->first() in
- let baseType : Element = baseTypes->first().syntaxElement() in
- if annotatedType.oclIsKindOf(Classifier) and
- baseType.oclIsKindOf(Feature) then
- baseType.oclAsType(Feature).type->
- forAll(t | annotatedType.specializes(t))
- else if baseType.oclIsKindOf(Type) then
- annotatedType.specializes(baseType.oclAsType(Type))
- else
- true
- endif
-
-
-
-
-
-
- <p>The <code>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</code>.</p>
-
-
-
-
-
-
- <p>If the given <code>baseFeature</code> is a <code>feature</code> of this <code>MetadataFeature</code>, or is directly or indirectly redefined by a <code>feature</code>, then return the result of evaluating the appropriate (model-level evaluable) <code>value</code> <code>Expression</code> for it (if any), with the <code>MetadataFeature</code> as the target.</p>
-
-
-
- OCL2.0
- let selectedFeatures : Sequence(Feature) = feature->
- select(closure(ownedRedefinition.redefinedFeature)->
- includes(baseFeature)) in
-if selectedFeatures->isEmpty() then null
+">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> which is a kind of <code><em>SemanticMetadata</code>.<p>
-
-
-
- OCL2.0
- specializesFromLibrary('Metaobjects::SemanticMetadata')
-
-
-
-
-
-
-
-
- <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> that is a kind of <code><em>KerML::Element</em></code> (that is, it is from the reflective abstract syntax model).</p>
-
-
-
- OCL2.0
- specializesFromLibrary('KerML::Element')
-
-
-
-
-
-
-
-
- <p>If this <code>MetadataFeature</code> reflectively represents a model element, then return the corresponding <code>Element</code> instance from the MOF abstract syntax representation of the model.</p>
-
-
-
- English
- No OCL
-
-
-
-
- OCL2.0
- isSyntactic()
-
-
-
-
-
-
-
-
-
-
-
- <p>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>DataType</code> is a <code>Classifier</code> of things (in the universe) that can only be distinguished by how they are related to other things (via Features). This means multiple things classified by the same <code>DataType</code></p>
-
-<ul>
- <li>Cannot be distinguished when they are related to other things in exactly the same way, even when they are intended to be about different things.</li>
- <li>Can be distinguished when they are related to other things in different ways, even when they are intended to be about the same thing.</li>
-</ul>
-
-
-
-
- <p>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p>
-
-
- OCL2.0
- ownedSpecialization.general->
- forAll(not oclIsKindOf(Class) and
- not oclIsKindOf(Association))
-
-
-
-
- <p>A <code>DataType</code> must directly or indirectly specialize the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::DataValue')
-
-
-
-
-
-
-
-
- <p>An <code>AssociationStructure</code> is an <code>Association</code> that is also a <code>Structure</code>, classifying link objects that are both links and objects. As objects, link objects can be created and destroyed, and their non-end <code>Features</code> can change over time. However, the values of the end <code>Features</code> of a link object are fixed and cannot change over its lifetime.</p>
-
-
-
- <p>An <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::LinkObject</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Objects::LinkObject')
-
-
-
-
- <p>A binary <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::BinaryLinkObject</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- endFeature->size() = 2 implies
- specializesFromLibrary('Objects::BinaryLinkObject')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>An <code>Association</code> is a <code>Relationship</code> and a <code>Classifier</code> to enable classification of links between things (in the universe). The co-domains (<code>types</code>) of the <code>associationEnd</code> <code>Features</code> are the <code>relatedTypes</code>, as co-domain and participants (linked things) of an <code>Association</code> identify each other.</p>
-
-
-
-
- <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p>
-
-
- OCL2.0
- relatedType = associationEnd.type
-
-
-
-
- <p>An <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::Link</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Links::Link')
-
-
-
-
- <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p>
-
-
- English
- oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure)
-
-
-
-
- <p>A binary <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::binaryLink</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- associationEnd->size() = 2 implies
- specializesFromLibrary('Links::BinaryLink')
-
-
-
-
- <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p>
-
-
- OCL2.0
- not isAbstract implies relatedType->size() >= 2
-
-
-
-
- <p>If an <code>Association</code> has more than two <code>associationEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- associationEnds->size() > 2 implies
- not specializesFromLibrary('Links::BinaryLink')
-
-
-
-
- <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p>
-
-
- OCL2.0
- sourceType =
- if relatedType->isEmpty() then null
- else relatedType->first() endif
-
-
-
-
- OCL2.0
- targetType =
- if relatedType->size() < 2 then OrderedSet{}
- else
- relatedType->
- subSequence(2, relatedType->size())->
- asOrderedSet()
- endif
-
-
-
-
- <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>.
-
-
- OCL2.0
- ownedEndFeature->forAll(type->size() = 1)
-
-
-
-
-
-
- <p>The <code>types</code> of the <code>associationEnds</code> of the <code>Association</code>, which are the <code>relatedElements</code> of the <code>Association</code> considered as a <code>Relationship</code>.</p>
-
-
-
-
-
-
-
- <p>The source <code>relatedType</code> for this <code>Association</code>. It is the first <code>relatedType</code> of the <code>Association</code>.</p>
-
-
-
-
-
-
-
- <p>The target <code>relatedTypes</code> for this <code>Association</code>. This includes all the <code>relatedTypes</code> other than the <code>sourceType</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>features</code> of the <code>Association</code> that identify the things that can be related by it. A concrete <code>Association</code> must have at least two <code>associationEnds</code>. When it has exactly two, the <code>Association</code> is called a <em>binary</em> <code>Association</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>The (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p>
-
-
-
-
-
-
-
-
- <p>The FeatureValue that owns the <code>value</code> Expression.</p>
-
-
-
-
-
-
-
- <p>A <code>FeatureValue</code> is a <code>Membership</code> that identifies a particular member <code>Expression</code> that provides the value of the <code>Feature</code> that owns the <code>FeatureValue</code>. The value is specified as either a bound value or an initial value, and as either a concrete or default value. A <code>Feature</code> can have at most one <code>FeatureValue</code>.</p>
-
-<p>The result of the <code>value</code> <code>Expression</code> is bound to the <code>featureWithValue</code> using a <code>BindingConnector</code>. If <code>isInitial = false</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is the same as the <code>featuringType</code> of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is restricted to its <code>startShot</code>.
+ self.oclAsType(OccurrenceUsage).namingFeature()
+endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>If <code>isDefault = false</code>, then the <code>featureWithValue</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> whose <code>relatedElements</code> are the <code>featureWithValue</code> and a feature chain consisting of the <code>value</code> <code>Expression</code> and its <code>result</code>. If <code>isInitial = false</code>, then this <code>BindingConnector</code> must have <code>featuringTypes</code> that are the same as those of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>BindingConnector</code> must have <code><em>that.startShot</em><code> as its <code>featuringType</code>.</p>
-
-
- OCL2.0
- not isDefault implies
- featureWithValue.ownedMember->
- selectByKind(BindingConnector)->exists(b |
- b.relatedFeature->includes(featureWithValue) and
- b.relatedFeature->exists(f |
- f.chainingFeature = Sequence{value, value.result}) and
- if not isInitial then
- b.featuringType = featureWithValue.featuringType
- else
- b.featuringType->exists(t |
- t.oclIsKindOf(Feature) and
- t.oclAsType(Feature).chainingFeature =
- Sequence{
- resolveGlobal('Base::things::that').
- memberElement,
- resolveGlobal('Occurrences::Occurrence::startShot').
- memberElement
- }
- )
- endif)
-
-
-
-
- <p>All <code>Features</code> directly or indirectly redefined by the <code>featureWithValue</code> of a <code>FeatureValue</code> must have only default <code>FeatureValues</code>.</p>
-
-
- OCL2.0
- featureWithValue.redefinition.redefinedFeature->
- closure(redefinition.redefinedFeature).valuation->
- forAll(isDefault)
-
-
-
-
- <p>If a <code>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</p>
-
-
- OCL2.0
- isInitial implies featureWithValue.isVariable
-
-
-
-
-
- <p>The Feature to be provided a value.</p>
-
-
- <p>The <code>Feature</code> to be provided a value.</p>
-
-
-
-
-
-
-
- <p>The Expression that provides the value as a result.</p>
-
-
- <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p>
-
-
-
-
-
-
-
- <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>FeatureValue</code> is a concrete specification of the bound or initial value of the <code>featureWithValue</code>, or just a default value that may be overridden.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Connector</code> is a usage of <code>Associations</code>, with links restricted according to instances of the <code>Type</code> in which they are used (domain of the <code>Connector</code>). The <code>associations</code> of the <code>Connector</code> restrict what kinds of things might be linked. The <code>Connector</code> further restricts these links to be between values of <code>Features</code> on instances of its domain.</p>
-
-
-
-
- <p>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p>
-
-
- OCL2.0
- relatedFeature = connectorEnd.ownedReferenceSubsetting->
- select(s | s <> null).subsettedFeature
-
-
-
-
- <p>Each <code>relatedFeature</code> of a <code>Connector</code> must have each <code>featuringType</code> of the <code>Connector</code> as a direct or indirect <code>featuringType</code> (where a <code>Feature</code> with no <code>featuringType</code> is treated as if the <code>Classifier</code> <code><em>Base::Anything</em></code> was its <code>featuringType</code>).</p>
-
-
- OCL2.0
- relatedFeature->forAll(f |
- if featuringType->isEmpty() then f.isFeaturedWithin(null)
- else featuringType->forAll(t | f.isFeaturedWithin(t))
- endif)
-
-
-
-
- <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p>
-
-
- OCL2.0
- sourceFeature =
- if relatedFeature->isEmpty() then null
- else relatedFeature->first()
- endif
-
-
-
-
- <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p>
-
-
- OCL2.0
- targetFeature =
- if relatedFeature->size() < 2 then OrderedSet{}
- else
- relatedFeature->
- subSequence(2, relatedFeature->size())->
- asOrderedSet()
- endif
-
-
-
-
- <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p>
-
-
- OCL2.0
- not isAbstract implies relatedFeature->size() >= 2
-
-
-
-
- <p>A <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::links</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Links::links')
-
-
-
-
- <p>A <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::linkObjects</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- association->exists(oclIsKindOf(AssociationStructure)) implies
- specializesFromLibrary('Objects::linkObjects')
-
-
-
-
- <p>A binary <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::binaryLinkObjects</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- connectorEnds->size() = 2 and
-association->exists(oclIsKindOf(AssociationStructure)) implies
- specializesFromLibrary('Objects::binaryLinkObjects')
-
-
-
-
- <p>A binary <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::binaryLinks</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- connectorEnd->size() = 2 implies
- specializesFromLibrary('Links::binaryLinks')
-
-
-
-
- <p>If a <code>Connector</code> has more than two <code>connectorEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- connectorEnds->size() > 2 implies
- not specializesFromLibrary('Links::BinaryLink')
-
-
-
-
- <p>The <code>defaultFeaturingType</code> of a <code>Connector</code> is the innermost common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code> of the <code>Connector</code>, so that each <code>relatedElement</code> is featured within the <code>defaultFeaturingType</code>, if such exists.</p>
-
-
- OCL2.0
- let commonFeaturingTypes : OrderedSet(Type) =
- relatedFeature->closure(featuringType)->select(t |
- relatedFeature->forAll(f | f.isFeaturedWithin(t))
- ) in
-let nearestCommonFeaturingTypes : OrderedSet(Type) =
- commonFeaturingTypes->reject(t1 |
- commonFeaturingTypes->exists(t2 |
- t2 <> t1 and t2->closure(featuringType)->contains(t1)
- )) in
-if nearestCommonFeaturingTypes->isEmpty() then null
-else nearestCommonFeaturingTypes->first()
-endif
-
-
-
-
-
-
- <p>The <code>Features</code> that are related by this <code>Connector</code> considered as a <code>Relationship</code> and that restrict the links it identifies, given by the referenced <code>Features</code> of the <code>connectorEnds</code> of the <code>Connector</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Associations</code> that type the <code>Connector</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>endFeatures</code> of a <code>Connector</code>, which redefine the <code>endFeatures</code> of the <code>associations</code> of the <code>Connector</code>. The <code>connectorEnds</code> determine via <code>ReferenceSubsetting</code> <code>Relationships</code> which <code>Features</code> are related by the <code>Connector</code>.</p>
-
-
-
-
-
-
- <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p>
-
-
-
-
-
-
- <p>The target <code>relatedFeatures</code> for this <code>Connector</code>. This includes all the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p>
-
-
-
-
-
-
- <p>The innermost <code>Type</code> that is a common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code>, such that, if it exists and was the <code>featuringType</code> of this <code>Connector</code>, the <code>Connector</code> would satisfy the <code>checkConnectorTypeFeaturing</code> constraint.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p>
-
-
-
-
- <p>A <code>BindingConnector</code> must be binary.</p>
-
-
- OCL2.0
- relatedFeature->size() = 2
-
-
-
-
- <p>A <code>BindingConnector</code> must directly or indirectly specialize the base <code>BindingConnector</code> <code><em>Links::selfLinks</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Links::selfLinks')
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</p>
-
-
-
-
- <p>A <code>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Occurrences::happensBeforeLinks')
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>PortUsage</code> is a usage of a <code>PortDefinition</code>. A <code>PortUsage</code> itself as well as all its <code>nestedUsages</code> must be referential (non-composite).</p>
-
-
-
- <p>The <code>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</p>
-
-
- OCL2.0
- nestedUsage->
- reject(oclIsKindOf(PortUsage))->
- forAll(not isComposite)
-
-
-
-
- <p>A <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::ports</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Ports::ports')
-
-
-
-
- <p>A composite <code>PortUsage</code> with an <code>owningType</code> that is a <code>PortDefinition</code> or <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::Port::subports</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(PortDefinition) or
- owningType.oclIsKindOf(PortUsage)) implies
- specializesFromLibrary('Ports::Port::subports')
-
-
-
-
- <p>Unless a <code>PortUsage</code> has an <code>owningType</code> that is a <code>PortDefinition</code> or a <code>PortUsage</code>, it must be referential (non-composite).</p>
-
-
- OCL2.0
- owningType = null or
-not owningType.oclIsKindOf(PortDefinition) and
-not owningType.oclIsKindOf(PortUsage) implies
- isReference
-
-
-
-
- <p>A <code>PortUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Parts::Part::ownedPorts</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningType <> null and
+">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</p>
-
-
-
-
-
-
-
-
- <p>The PortUsages that are typed by a certain PortDefinition.</p>
-
-
-
-
-
-
-
- <p>A <code>PortDefinition</code> defines a point at which external entities can connect to and interact with a system or part of a system. Any <code>ownedUsages</code> of a <code>PortDefinition</code>, other than <code>PortUsages</code>, must not be composite.</p>
-
-
-
-
-
-
- <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p>
-
-
- OCL2.0
- conjugatedPortDefinition =
-let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) =
- ownedMember->selectByKind(ConjugatedPortDefinition) in
-if conjugatedPortDefinitions->isEmpty() then null
-else conjugatedPortDefinitions->first()
-endif
-
-
-
-
- <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p>
-
-
- OCL2.0
- ownedUsage->
- reject(oclIsKindOf(PortUsage))->
- forAll(not isComposite)
-
-
-
-
- <p>Unless it is a <code>ConjugatedPortDefinition</code>, a <code>PortDefinition</code> must have exactly one <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p>
-
-
- OCL2.0
- not oclIsKindOf(ConjugatedPortDefinition) implies
- ownedMember->
- selectByKind(ConjugatedPortDefinition)->
- size() = 1
-
-
-
-
- <p>A <code>PortDefinition</code> must directly or indirectly specialize the <code>PortDefinition</code> <em><code>Ports::Port</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Ports::Port')
-
-
-
-
-
-
- <p>The <codeConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p>
-
-
-
-
-
-
-
- <p>A <code>ConjugatedPortDefinition</code> is a <code>PortDefinition</code> that is a <code>PortDefinition</code> of its original <code>PortDefinition</code>. That is, a <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>. Every <code>PortDefinition</code> (that is not itself a <code><code>ConjugatedPortDefinition</code></code>) has exactly one corresponding <code>ConjugatedPortDefinition</code>, whose effective name is the name of the <code>originalPortDefinition</code>, with the character <code>~</code> prepended.</p>
-
-
-
- <p>The <code>originalPortDefinition</code> of the <code>ownedPortConjugator</code> of a <code>ConjugatedPortDefinition</code> must be the <code>originalPortDefinition</code> of the <code>ConjugatedPortDefinition</code>.</p>
-
-
- OCL2.0
- ownedPortConjugator.originalPortDefinition = originalPortDefinition
-
-
-
-
- <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>.
-
-
- OCL2.0
- conjugatedPortDefinition = null
-
-
-
-
-
- <p>The original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</code>.</p>
-
-
-
-
-
-
- <p>The <code>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</code>.</p>
-
-
-
-
-
-
- <p>If the <code>name</code> of the <code>originalPortDefinition</code> is non-empty, then return that with the character <code>~</code> prepended.</p>
-
-
-
- OCL2.0
- let originalName : String = originalPortDefinition.name in
-if originalName = null then null
-else '~' + originalName
-endif
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>PortConjugation</code> is a <code>Conjugation</code> <code>Relationship</code> between a <code>PortDefinition</code> and its corresponding <code>ConjugatedPortDefinition</code>. As a result of this <code>Relationship</code>, the <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>.</code></p>
-
-
-
-
-
- <p>The <code>PortDefinition</code> being conjugated.</p>
-
-
-
-
-
-
- <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>ConjugatedPortTyping</code> is a <code>FeatureTyping</code> whose <code>type</code> is a <code>ConjugatedPortDefinition</code>. (This relationship is intended to be an abstract-syntax marker for a special surface notation for conjugated typing of ports.)</p>
-
-
-
- <p>The <code>portDefinition</code> of a <code>ConjugatedPortTyping</code> is the <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of the <code>ConjugatedPortTyping</code>.</p>
-
-
- OCL2.0
- portDefinition = conjugatedPortDefinition.originalPortDefinition
-
-
-
-
-
- <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</code>.</p>
-
-
-
-
-
-
- <p>The <code>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p>
-
-
-
-
-
-
-
-
- <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>AttributeDefinition</code> is a <code>Definition</code> and a <code>DataType</code> of information about a quality or characteristic of a system or part of a system that has no independent identity other than its value. All <code>features</code> of an <code>AttributeDefinition</code> must be referential (non-composite).</p>
+ specializesFromLibrary('Parts::Part::exhibitedStates')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>All <code>features</code> of an <code>AttributeDefinition</code> must be non-composite.</p>
-
-
- OCL2.0
- feature->forAll(not isComposite)
-
-
-
-
-
-
-
-
- <p>The AttributeUsages that are typed by a certain DataType.</p>
-
-
-
-
-
-
-
- <p>An <code>AttributeUsage</code> is a <code>Usage</code> whose type is a <code>DataType</code>. Nominally, if the type is an <code>AttributeDefinition</code>, an <code>AttributeUsage</code> is a usage of a <code>AttributeDefinition</code> to represent the value of some system quality or characteristic. However, other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries. An <code>AttributeUsage</code> itself as well as all its nested <code>features</code> must be referential (non-composite).</p>
-
-<p>An <code>AttributeUsage</code> must specialize, directly or indirectly, the base <code>Feature</code> <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p>
-
-
-
- <p>An <code>AttributeUsage</code> is always referential.</p>
-
-
- OCL2.0
- isReference
-
-
-
-
- <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p>
-
-
- OCL2.0
- feature->forAll(not isComposite)
-
-
-
-
- <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Base::dataValues')
-
-
-
-
-
- <p>The <code>DataTypes</code> that are the types of this <code>AttributeUsage</code>. Nominally, these are <code>AttributeDefinitions</code>, but other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
- <p>Always true for an <code>AttributeUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AcceptActionUsage</code> is an <code>ActionUsage</code> that specifies the acceptance of an <em><code>incomingTransfer</code></em> from the <code><em>Occurrence</em></code> given by the result of its <code>receiverArgument</code> Expression. (If no <code>receiverArgument</code> is provided, the default is the <em><code>this</code></em> context of the AcceptActionUsage.) The payload of the accepted <em><code>Transfer</em></code> is output on its <code>payloadParameter</code>. Which <em><code>Transfers</em></code> may be accepted is determined by conformance to the typing and (potentially) binding of the <code>payloadParameter</code>.</p>
-
-
-
-
- <p>An <code>AcceptUsageAction</code> must have at least two input <code>parameters</code>, corresponding to its <em><code>payload</code></em> and <em><code>receiver</code>, respectively (even if they have no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p>
-
-
- OCL2.0
- inputParameters()->size() >= 2
-
-
-
-
- <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p>
-
-
- OCL2.0
- receiverArgument = argument(2)
-
-
-
-
- <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- payloadArgument = argument(1)
-
-
-
-
- <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p>
-
-
- OCL2.0
- payloadParameter =
- if parameter->isEmpty() then null
- else parameter->first() endif
-
-
-
-
- <p>An <code>AcceptActionUsage</code> that is not the <code>triggerAction</code> of a <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::acceptActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- not isTriggerAction() implies
- specializesFromLibrary('Actions::acceptActions')
-
-
-
-
- <p>A composite <code>AcceptActionUsage</code> that is a subaction usage, but is <em>not</em> the <code>triggerAction</code> of a <code>TransitionUsage</code>, must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::acceptSubactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() and not isTriggerAction() implies
- specializesFromLibrary('Actions::Action::acceptSubactions')
-
-
-
-
- <p>An <code>AcceptActionUsage</code> that is the <code>triggerAction</code> of <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::TransitionAction::accepter</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isTriggerAction() implies
- specializesFromLibrary('Actions::TransitionAction::accepter')
-
-
-
-
- <p>If the <code>payloadArgument</code> of an <code>AcceptActionUsage</code> is a <code>TriggerInvocationExpression</code>, then the <code>AcceptActionusage</code> must have an <code>ownedFeature</code> that is a <code>BindingConnector</code> between its <code><em>receiver</em></code> <code>parameter</code> and the <code><em>receiver</em></code> <code>parameter</code> of the <code>TriggerInvocationExpression</code>.</p>
-
-
- OCL2.0
- payloadArgument <> null and
-payloadArgument.oclIsKindOf(TriggerInvocationExpression) implies
- let invocation : Expression =
- payloadArgument.oclAsType(Expression) in
- parameter->size() >= 2 and
- invocation.parameter->size() >= 2 and
- ownedFeature->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(parameter->at(2)) and
- b.relatedFeatures->includes(invocation.parameter->at(2)))
-
-
-
-
-
- <p>An <code>Expression</code> whose <code>result</code> is bound to the <em><code>receiver</code></em> input <code>parameter</code> of this <code>AcceptActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>nestedReference</code> of this <code>AcceptActionUsage</code> that redefines the <code>payload</code> output <code>parameter</code> of the base <code>AcceptActionUsage</code> <em><code>AcceptAction</code></em> from the Systems Model Library.</p>
-
-
-
-
-
-
- <p>An <code>Expression</code> whose <code>result</code> is bound to the <code><em>payload</em></code> <code>parameter</code> of this <code>AcceptActionUsage</code>. If provided, the <code>AcceptActionUsage</code> will only accept a <code><em>Transfer</em></code> with exactly this <code><em>payload</em></code>.</p>
-
-
-
-
-
-
-
- <p>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</code>.</p>
-
-
-
- OCL2.0
- owningType <> null and
-owningType.oclIsKindOf(TransitionUsage) and
-owningType.oclAsType(TransitionUsage).triggerAction->includes(self)
-
-
-
-
-
-
-
-
-
-
- <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SendActionUsage</code> is an <code>ActionUsage</code> that specifies the sending of a payload given by the result of its <code>payloadArgument</code> <code>Expression</code> via a <em><code>MessageTransfer</code></em> whose <em><code>source</code></em> is given by the result of the <code>senderArgument</code> <code>Expression</code> and whose <code>target</code> is given by the result of the <code>receiverArgument</code> <code>Expression</code>. If no <code>senderArgument</code> is provided, the default is the <em><code>this</code></em> context for the action. If no <code>receiverArgument</code> is given, then the receiver is to be determined by, e.g., outgoing <em><code>Connections</code></em> from the sender.</p>
-
-
-
-
- <p>The <code>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</code>.</p>
-
-
- OCL2.0
- senderArgument = argument(2)
-
-
-
-
- <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- payloadArgument = argument(1)
-
-
-
-
- <p>A <code>SendActionUsage</code> must have at least three owned input <code>parameters</code>, corresponding to its <em><code>payload</code></em>, <em><code>sender</code></em> and <em><code>receiver</code></em>, respectively (whether or not they have <code>FeatureValues</code>).</p>
-
-
- OCL2.0
- inputParameters()->size() >= 3
-
-
-
-
- <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p>
-
-
- OCL2.0
- receiverArgument = argument(3)
-
-
-
-
- <p>A composite <code>SendActionUsage</code> that is a subaction must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::sendSubactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::acceptSubactions')
-
-
-
-
- <p>A <code>SendActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::sendActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::sendActions')
-
-
-
-
-
- <p>An <code>Expression</code> whose result is bound to the <em><code>receiver</code></em> input parameter of this <code>SendActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Expression</code> whose result is bound to the <code><em>payload</em></code> input parameter of this <code>SendActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>Expression</code> whose result is bound to the <em><code>sender</code></em> input parameter of this <code>SendActionUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>PerformActionUsage</code> is an <code>ActionUsage</code> that represents the performance of an <code>ActionUsage</code>. Unless it is the <code>PerformActionUsage</code> itself, the <code>ActionUsage</code> to be performed is related to the <code>PerformActionUsage</code> by a <code>ReferenceSubsetting</code> relationship. A <code>PerformActionUsage</code> is also an <code>EventOccurrenceUsage</code>, with its <code>performedAction</code> as the <code>eventOccurrence</code>.</p>
-
-
-
- <p>If a <code>PerformActionUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(ActionUsage)
-
-
-
-
- <p>If a <code>PerformActionUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>ActionUsage</code> <code><em>Parts::Part::performedActions</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
+<p>A <code>StateUsage</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateSubactionMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateUsage</code>.</p>
+">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- <p>The <code>ActionUsage</code> to be performed by this <code>PerformedActionUsage</code>. It is the <code>eventOccurrence</code> of the <code>PerformActionUsage</code> considered as an <code>EventOccurrenceUsage</code>, which must be an <code>ActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The naming <code>Feature</code> of a <code>PerformActionUsage</code> is its <code>performedAction</code>, if this is different than the <code>PerformActionUsage</code>. If the <code>PerformActionUsage</code> is its own <code>performedAction</code>, then the naming <code>Feature</code> is the same as the usual default for a <code>Usage</code>.</p>
-
-
-
- OCL2.0
- if performedAction <> self then performedAction
-else self.oclAsType(Usage).namingFeature()
-endif
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ForkNode</code> is a <code>ControlNode</code> that must be followed by successor <code>Actions</code> as given by all its outgoing <code>Successions</code>.</p>
-
-
-
- <p>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->size() <= 1
-
-
-
-
- <p>A <code>ForkNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::forks')
-
-
-
-
-
-
- <p>A <code>JoinNode</code> is a <code>ControlNode</code> that waits for the completion of all the predecessor <code>Actions</code> given by incoming <code>Successions</code>.</p>
-
-
-
- <p>A <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectByKind(Succession)->size() <= 1
-
-
-
-
- <p>A <code>JoinNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::joins</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::join')
-
-
-
-
-
-
- <p>A <code>ControlNode</code> is an <code>ActionUsage</code> that does not have any inherent behavior but provides constraints on incoming and outgoing <code>Successions</code> that are used to control other <code>Actions</code>. A <code>ControlNode</code> must be a composite owned <code>usage</code> of an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p>
-
-
-
-
- <p>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectByKind(Succession)->
- collect(connectorEnd->at(1).multiplicity)->
- forAll(sourceMult |
- multiplicityHasBounds(sourceMult, 1, 1))
-
-
-
-
- <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- owningType <> null and
+ specializesFromLibrary('Parts::Part::ownedStates')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>All incoming <code>Successions</code> to a <code>ControlNode</code> must have a target <code>multiplicity</code> of <code>1..1</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->
- collect(connectorEnd->at(2).multiplicity)->
- forAll(targetMult |
- multiplicityHasBounds(targetMult, 1, 1))
-
-
-
-
- <p>A <code>ControlNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::control</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Action::Action::controls')
-
-
-
-
- <p>A <code>ControlNode</code> must be composite.</p>
-
-
- OCL2.0
- isComposite
-
-
-
-
-
- <p>Check that the given <code>Multiplicity</code> has <code>lowerBound</code> and <code>upperBound</code> expressions that are model-level evaluable to the given <code>lower</code> and <code>upper</code> values.</p>
-
-
-
- OCL2.0
- mult <> null and
-if mult.oclIsKindOf(MultiplicityRange) then
- mult.oclAsType(MultiplicityRange).hasBounds(lower, upper)
-else
- mult.allSuperTypes()->exists(
- oclisKindOf(MultiplicityRange) and
- oclAsType(MultiplicityRange).hasBounds(lower, upper)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>An <code>ActionUsage</code> is a <code>Usage</code> that is also a <code>Step</code>, and, so, is typed by a <code>Behavior</code>. Nominally, if the type is an <code>ActionDefinition</code>, an <code>ActionUsage</code> is a <code>Usage</code> of that <code>ActionDefinition</code> within a system. However, other kinds of kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p>
-
-
-
-
- <p>A composite <code>ActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::subactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::subactions')
-
-
-
-
- <p>An <code>ActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::actions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::actions')
-
-
-
-
- <p>A composite <code>ActionUsage</code> whose <code>owningType</code> is <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Parts::Part::ownedActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
+ owningType.oclIsKindOf(ActionUsage)) and
+source <> null and not source.oclIsKindOf(StateUsage) implies
+ specializesFromLibrary('Actions::Action::decisionTransitions')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>An <code>ActionUsage</code> that is the <code><em>entry</em></code>, <code><em>do</em></code>, or <code><em>exit</em></code> <code><em>Action</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code> must redefine the <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code> <code>feature</code>, respectively, of the <code>StateDefinition</code> <code><em>States::StateAction</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
+ specializesFromLibrary('Parts::Part::performedActions')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>ActionUsage</code>. Nominally, these would be <code>ActionDefinitions</code>, but other kinds of Kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
- <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</code>.</p>
-
-
-
- OCL2.0
- input->select(f | f.owner = self)
-
-
-
-
-
-
-
-
-
- <p>Return the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code>.</p>
-
-
-
- OCL2.0
- if inputParameters()->size() < i then null
-else inputParameters()->at(i)
-endif
-
-
-
-
-
-
-
-
-
-
-
-
- <p>Return the <code>i</code>-th argument <code>Expression</code> of an <code>ActionUsage</code>, defined as the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> of the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code> or the <code>i</code>-th owned input <code>parameter</code> has no <code>FeatureValue</code>.</p>
-
-
-
- OCL2.0
- if inputParameter(i) = null then null
-else
- let featureValue : Sequence(FeatureValue) = inputParameter(i).
- ownedMembership->select(oclIsKindOf(FeatureValue)) in
- if featureValue->isEmpty() then null
- else featureValue->at(1).value
+ endif endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
- <p>Check if this <code>ActionUsage</code> is composite and has an <code>owningType</code> that is an <code>ActionDefinition</code> or <code>ActionUsage</code> but is <em>not</em> the <code>entryAction</code> or <code>exitAction</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code>. If so, then it represents an <code><em>Action</em></code> that is a <code><em>subaction</em></code> of another <code><em>Action</em></code>.</p>
-
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ActionDefinition) or
- owningType.oclIsKindOf(ActionUsage)) and
-(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies
- owningFeatureMembership.oclAsType(StateSubactionMembership).kind =
- StateSubactionKind::do)
-
-
-
-
-
-
-
-
-
-
- <p>The Activities that feature a certain ActionUsage.</p>
-
-
-
-
-
-
-
- <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p>
-
-
-
- <p>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->size() <= 1
-
-
-
-
- <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must have a target <code>multiplicity</code> of <code>0..1</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectAsKind(Succession)->
- collect(connectorEnd->at(2))->
+" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>DecisionNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::decisions')
-
-
-
-
- <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must subset the inherited <em><code>outgoingHBLink</code></em> <code>feature</code> of the <code>DecisionNode</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectByKind(Succession)->
+ multiplicityHasBounds(targetMult, 0, 1))" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- <p>A <code>MergeNode</code> is a <code>ControlNode</code> that asserts the merging of its incoming <code>Successions</code>. A <code>MergeNode</code> may have at most one outgoing <code>Successions</code>.</p>
-
-
-
- <p>A <code>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p>
-
-
- OCL2.0
- sourceConnector->selectAsKind(Succession)->size() <= 1
-
-
-
-
- <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must have a source <code>multiplicity</code> of <code>0..1</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->
- collect(connectorEnd->at(1))->
+ resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink')))" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must subset the inherited <em><code>incomingHBLink</code></em> <code>feature</code> of the <code>MergeNode</code>.</p>
-
-
- OCL2.0
- targetConnector->selectByKind(Succession)->
+ multiplicityHasBounds(sourceMult, 0, 1))" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
-
- <p>A <code>MergeNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::merges</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action::merges')
-
-
-
-
-
-
-
- <p>The ActionUsages being typed by a certain Behavior.</p>
-
-
-
-
-
-
-
- <p>An <code>ActionDefinition</code> is a <code>Definition</code> that is also a <code>Behavior</code> that defines an <em><code>Action</code></em> performed by a system or part of a system.</p>
-
-
-
- <p>An <code>ActionDefinition</code> must directly or indirectly specialize the <code>ActionDefinition</code> <em><code>Actions::Action</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::Action')
-
-
-
-
- <p> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- action = usage->selectByKind(ActionUsage)
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that are <code>steps</code> in this <code>ActionDefinition</code>, which define the actions that specify the behavior of the <code>ActionDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p>
-
-
-
-
-
-
-
-
- <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>IfActionUsage</code> is an <code>ActionUsage</code> that specifies that the <code>thenAction</code> <code>ActionUsage</code> should be performed if the result of the <code>ifArgument</code> <code>Expression</code> is true. It may also optionally specify an <code>elseAction</code> <code>ActionUsage</code> that is performed if the result of the <code>ifArgument</code> is false.</p>
-
-
-
- <p>The <code>thenAction</code> of an <code>ifActionUsage</code> is its second <code>parameter</code>, which must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- thenAction =
- let parameter : Feature = inputParameter(2) in
- if parameter <> null and parameter.oclIsKindOf(ActionUsage) then
- parameter.oclAsType(ActionUsage)
- else
- null
- endif
-
-
-
-
- <p>A composite <code>IfActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::ifSubactions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::ifSubactions')
-
-
-
-
- <p>A <code>IfActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::ifThenActions</code></em> from the Systems Model Library. If it has an <code>elseAction</code>, then it must directly or indirectly specialize <em><code>Actions::ifThenElseActions</code></em>.
-
-
- OCL2.0
- if elseAction = null then
- specializesFromLibrary('Actions::ifThenActions')
-else
- specializesFromLibrary('Actions::ifThenElseActions')
-endif
-
-
-
-
- <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p>
-
-
- OCL2.0
- ifArgument =
+ resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink')))" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>The <code>elseAction</code> of an <code>ifActionUsage</code> is its third <code>parameter</code>, if there is one, which must then be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- elseAction =
+ endif
+" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p>
-
-
- OCL2.0
- inputParameters()->size() >= 2
-
-
-
-
-
- <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is false. It is the (optional) third <code>parameter</code> of the <code>IfActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is true. It is the second <code>parameter<code> of the <code>IfActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result determines whether the <code>thenAction</code> or (optionally) the <code>elseAction</code> is performed. It is the first <code>parameter<code> of the <code>IfActionUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p>
-
-
-
-
-
-
-
-
- <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>LoopActionUsage</code> is an <code>ActionUsage</code> that specifies that its <code>bodyAction</code> should be performed repeatedly. Its subclasses <code>WhileLoopActionUsage</code> and <code>ForLoopActionUsage</code> provide different ways to determine how many times the <code>bodyAction</code> should be performed.</p>
-
-
-
- <p>The <code>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p>
-
-
- OCL2.0
- bodyAction =
+ endif
+" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- <p>The <code>ActionUsage</code> to be performed repeatedly by the <code>LoopActionUsage</code>. It is the second <code>parameter</code> of the <code>LoopActionUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ForLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that its <code>bodyAction</code> <code>ActionUsage</code> should be performed once for each value, in order, from the sequence of values obtained as the result of the <code>seqArgument</code> <code>Expression</code>, with the <code>loopVariable</code> set to the value for each iteration.</p>
-
-
-
- <p>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- seqArgument = argument(1)
-
-
-
-
-
- <p>A composite <code>ForLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forLoops</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::forLoops')
-
-
-
-
- <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> must redefine the <code>ActionUsage</code> <code><em>Actions::ForLoopAction::var</em></code>.</p>
-
-
- OCL2.0
- loopVariable <> null and
-loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var')
-
-
-
-
- <p>A <code>ForLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::forLoopActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::forLoopActions')
-
-
-
-
- <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</code>.</p>
-
-
- OCL2.0
- loopVariable =
- if ownedFeature->isEmpty() or
- not ownedFeature->first().oclIsKindOf(ReferenceUsage) then
- null
- else
- ownedFeature->first().oclAsType(ReferenceUsage)
- endif
-
-
-
-
- <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p>
-
-
- OCL2.0
- ownedFeature->notEmpty() and
-ownedFeature->at(1).oclIsKindOf(ReferenceUsage)
-
-
-
-
-
- <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p>
-
-
- OCL2.0
- inputParameters()->size() = 2
-
-
-
-
-
- <p>The <code>Expression</code> whose result provides the sequence of values to which the <code>loopVariable</code> is set for each iterative performance of the <code>bodyAction</code>. It is the <code>Expression</code> whose <code>result</code> is bound to the <em><code>seq</code></em> <code>input</code> <code>parameter</code> of this <code>ForLoopActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ownedFeature</code> of this <co>ForLoopActionUsage</code> that acts as the loop variable, which is assigned the successive values of the input sequence on each iteration. It is the <code>ownedFeature</code> that redefines <em><code>ForLoopAction::var</code></em>.</p>
-
-
-
-
-
-
-
- <p>An <code>AssignmentActionUsage</code> is an <code>ActionUsage</code> that is defined, directly or indirectly, by the <code>ActionDefinition</code> <em><code>AssignmentAction</code></em> from the Systems Model Library. It specifies that the value of the <code>referent</code> <code>Feature</code>, relative to the target given by the result of the <code>targetArgument</code> <code>Expression</code>, should be set to the result of the <code>valueExpression</code>.</p>
-
-
-
-
- <p>An <code>AssignmentActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::assignmentActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::assignmentActions')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt</em></code>.</p>
-
-
- OCL2.0
- let targetParameter : Feature = inputParameter(1) in
-targetParameter <> null and
-targetParameter.ownedFeature->notEmpty() and
-targetParameter.ownedFeature->first().
- redefines('AssignmentAction::target::startingAt')
-
-
-
-
- <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p>
-
-
- OCL2.0
- valueExpression = argument(2)
-
-
-
-
- <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p>
-
-
- OCL2.0
- targetArgument = argument(1)
-
-
-
-
- <p>A composite <code>AssignmentActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::assignments</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::assignments')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt::accessedFeature</em></code>.</p>
-
-
- OCL2.0
- let targetParameter : Feature = inputParameter(1) in
-targetParameter <> null and
-targetParameter.ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->first().
- redefines('AssigmentAction::target::startingAt::accessedFeature')
-
-
-
-
- <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine the <code>referent</code> of the <code>AssignmentActionUsage</code>.</p>
-
-
- OCL2.0
- let targetParameter : Feature = inputParameter(1) in
-targetParameter <> null and
-targetParameter.ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->notEmpty() and
-targetParameter->first().ownedFeature->first().redefines(referent)
-
-
-
-
- <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p>
-
-
- OCL2.0
- referent =
- let unownedFeatures : Sequence(Feature) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement->
- selectByKind(Feature) in
- if unownedFeatures->isEmpty() then null
- else unownedFeatures->first().oclAsType(Feature)
- endif
-
-
-
-
- <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code>.</p>
-
-
- OCL2.0
- ownedMembership->exists(
- not oclIsKindOf(OwningMembership) and
- memberElement.oclIsKindOf(Feature))
-
-
-
-
- <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p>
-
-
- OCL2.0
- referent <> null implies referent.featureTarget.mayTimeVary
-
-
-
-
-
- <p>The <code>Expression</code> whose value is an occurrence in the domain of the <code>referent</code> <code>Feature</code>, for which the value of the <code>referent</code> will be set to the result of the <code>valueExpression</code> by this <code>AssignmentActionUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result is to be assigned to the <code>referent</code> <code>Feature</code>.</p>
-
-
-
-
-
-
- <p>The <code>Feature</code> whose value is to be set.</p>
-
-
-
-
-
-
-
- <p>A <code>WhileLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that the <code>bodyAction</code> <code>ActionUsage</code> should be performed repeatedly while the result of the <code>whileArgument</code> <code>Expression</code> is true or until the result of the <code>untilArgument</code> <code>Expression</code> (if provided) is true. The <code>whileArgument</code> <code>Expression</code> is evaluated before each (possible) performance of the <code>bodyAction</code>, and the <code>untilArgument</code> <code>Expression</code> is evaluated after each performance of the <code>bodyAction</code>.</p>
-
-
-
- <p>A composite <code>WhileLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::whileLoops</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::whileLoops')
-
-
-
-
- <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its third input <code>parameter</code>, which, if it exists, must be an <code>Expression</code>.</p>
-
-
- OCL2.0
- untilArgument =
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>WhileLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::whileLoopActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::whileLoopActions')
-
-
-
-
- <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its first input <code>parameter</code>, which must be an <code>Expression</code>.</p>
-
-
- OCL2.0
- whileArgument =
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
-
- <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p>
-
-
- OCL2.0
- inputParameters()->size() >= 2
-
-
-
-
-
- <p>The <code>Expression</code> whose result, if true, determines that the <code>bodyAction</code> should continue to be performed. It is the first owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Expression</code> whose result, if false, determines that the <code>bodyAction</code> should continue to be performed. It is the (optional) third owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>.
-
-
-
-
-
-
-
-
- <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p>
-
-
-
-
-
-
-
- <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p>
-
-
-
- <p>Indicates a <em>change trigger</em>, corresponding to the <em><code>TriggerWhen</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p>
-
-
-
-
- <p>Indicates an <em>absolute time trigger</em>, corresponding to the <em><code>TriggerAt</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p>
-
-
-
-
- <p>Indicates a <em>relative time trigger</em>, corresponding to the <em><code>TriggerAfter</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the <code>Kernel Semantic Library.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>TriggerInvocationExpression</code> is an <code>InvocationExpression</code> that invokes one of the trigger <code>Functions</code> from the Kernel Semantic Library <code><em>Triggers<em></code> package, as indicated by its <code>kind</code>.</p>
-
-
-
- <p>If a <code>TriggerInvocationExpression</code> has <code>kind = after</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Quantities::ScalarQuantityValue</code></em> and a <code>feature</code> that directly or indirectly redefines <em><code>Quantities::TensorQuantityValue::mRef</code></em> and directly or indirectly specializes <em><code>ISQBase::DurationUnit</code></em>.</p>
-
-
- OCL2.0
- kind = TriggerKind::after implies
- argument->notEmpty() and
- argument->at(1).result.specializesFromLibrary('Quantities::ScalarQuantityValue') and
- let mRef : Element =
- resolveGlobal('Quantities::TensorQuantityValue::mRef').ownedMemberElement in
- argument->at(1).result.feature->
- select(ownedRedefinition.redefinedFeature->
- closure(ownedRedefinition.redefinedFeature)->
- includes(mRef))->
- exists(specializesFromLibrary('ISQBase::DurationUnit'))
-
-
-
-
- <p>If a <code>TriggerInvocationExpression</code> has <code>kind = at</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Time::TimeInstantValue</code></em>.</p>
-
-
- OCL2.0
- kind = TriggerKind::at implies
- argument->notEmpty() and
- argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue')
-
-
-
-
- <p>If a <code>TriggerInvocationExpression</code> has <code>kind = when</code>, then it must have an <code>argument</code> that is a <code>FeatureReferenceExpression</code> whose <code>referent</code> is an <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>ScalarValues::Boolean</code></em>.</p>
-
-
- OCL2.0
- kind = TriggerKind::when implies
- argument->notEmpty() and
- argument->at(1).oclIsKindOf(FeatureReferenceExpression) and
- let referent : Feature =
- argument->at(1).oclAsType(FeatureReferenceExpression).referent in
- referent.oclIsKindOf(Expression) and
- referent.oclAsType(Expression).result.specializesFromLibrary('ScalarValues::Boolean')
-
-
-
-
-
- <p>Indicates which of the <code>Functions</code> from the <code><em>Triggers</em></code> model in the Kernel Semantic Library is to be invoked by this <code>TriggerInvocationExpression</code>.</p>
-
-
-
-
- <p>Return one of the <code>Functions</code> <em><code>TriggerWhen</code></em>, <em><code>TriggerAt</code></em> or <em><code>TriggerAfter</code></em>, from the Kernel Semantic Library <em><code>Triggers</code></em> package, depending on whether the <code>kind</code> of this <code>TriggerInvocationExpression</code> is <code>when</code>, <code>at</code> or <code>after</code>, respectively.</p>
-
-
-
- OCL2.0
- resolveGlobal(
- if kind = TriggerKind::when then
- 'Triggers::TriggerWhen'
- else if kind = TriggerKind::at then
- 'Triggers::TriggerAt'
- else
- 'Triggers::TriggerAfter'
- endif endif
-).memberElement.oclAsType(Type)
-
-
-
-
-
-
-
-
- <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TerminateActionUsage</code> is an <code>ActionUsage</code> that directly or indirectly specializes the <code>ActionDefinition</code> <em><code>TerminateAction</code></em> from the Systems Model Library, which causes a given <em><code>terminatedOccurrence</code></em> to end during its performance. By default, the <code>terminatedOccurrence</code> is the featuring instance (<em><code>that</code></em>) of the performance of the <code>TerminateActionUsage</code>, generally the performance of its immediately containing <code>ActionDefinition</code> or <code>ActionUsage</code>.</p>
-
-
-
- <p>A <code>TerminateActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::terminateActions</code></em> from the Systems Modeling Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::terminateActions')
-
-
-
-
- <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p>
-
-
- OCL2.0
- terminatedOccurrenceArgument = argument(1)
-
-
-
-
- <p>A composite <code>TerminateActionUsage</code> that is a subaction must must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::terminateSubactions</code></em> from the Systems Modeling Library.</p>
-
-
- OCL2.0
- isSubactionUsage() implies
- specializesFromLibrary('Actions::Action::terminateSubactions')
-
-
-
-
-
- <p>The <code>Expression</code> that is the <code>featureValue</code> of the <em><code>terminateOccurrence</code></em> <code>parameter</code> of this <code>TerminateActionUsage</code>.
-
-
-
-
-
-
-
-
- <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The Definitions that have a certain Usage as a <code>flow</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definitions that feature a certain Usage.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p>
-
-
-
-
-
-
-
- <p>A <code>Definition</code> is a <code>Classifier</code> of <code>Usages</code>. The actual kinds of <code>Definition</code> that may appear in a model are given by the subclasses of <code>Definition</code> (possibly as extended with user-defined <em><code>SemanticMetadata</code></em>).</p>
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p>
-
-
- OCL2.0
- isVariation implies ownedFeatureMembership->isEmpty()
-
-
-
-
- <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p>
-
-
- OCL2.0
- variant = variantMembership.ownedVariantUsage
-
-
-
-
- <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p>
-
-
- OCL2.0
- variantMembership = ownedMembership->selectByKind(VariantMembership)
-
-
-
-
- <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</code>.</p>
-
-
- OCL2.0
- isVariation implies
- not ownedSpecialization.specific->exists(
- oclIsKindOf(Definition) and
- oclAsType(Definition).isVariation)
-
-
-
-
- <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- usage = feature->selectByKind(Usage)
-
-
-
-
- <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- directedUsage = directedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- ownedUsage = ownedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedAttributes</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p>
-
-
- OCL2.0
- ownedAttribute = ownedUsage->selectByKind(AttributeUsage)
-
-
-
-
- <p>The <code>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p>
-
-
- OCL2.0
- ownedReference = ownedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p>
-
-
- OCL2.0
- ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage)
-
-
-
-
- <p>The <code>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p>
-
-
- OCL2.0
- ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage)
-
-
-
-
- <p>The <code>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p>
-
-
- OCL2.0
- ownedItem = ownedUsage->selectByKind(ItemUsage)
-
-
-
-
- <p>The <code>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p>
-
-
- OCL2.0
- ownedPart = ownedUsage->selectByKind(PartUsage)
-
-
-
-
- <p>The <code>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p>
-
-
- OCL2.0
- ownedPort = ownedUsage->selectByKind(PortUsage)
-
-
-
-
- <p>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p>
-
-
- OCL2.0
- ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage)
-
-
-
-
- <p>The <code>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p>
-
-
- OCL2.0
- ownedFlow = ownedUsage->selectByKind(FlowConnectionUsage)
-
-
-
-
- <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p>
-
-
- OCL2.0
- ownedInterface = ownedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedAllocations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p>
-
-
- OCL2.0
- ownedAllocation = ownedUsage->selectByKind(AllocationUsage)
-
-
-
-
- <p>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- ownedAction = ownedUsage->selectByKind(ActionUsage)
-
-
-
-
- <p>The <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p>
-
-
- OCL2.0
- ownedState = ownedUsage->selectByKind(StateUsage)
-
-
-
-
- <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p>
-
-
- OCL2.0
- ownedTransition = ownedUsage->selectByKind(TransitionUsage)
-
-
-
-
- <p>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p>
-
-
- OCL2.0
- ownedCalculation = ownedUsage->selectByKind(CalculationUsage)
-
-
-
-
- <p>The <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p>
-
-
- OCL2.0
- ownedConstraint = ownedUsage->selectByKind(ConstraintUsage)
-
-
-
-
- <p>The <code>ownedRequirements</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p>
-
-
- OCL2.0
- ownedRequirement = ownedUsage->selectByKind(RequirementUsage)
-
-
-
-
- <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p>
-
-
- OCL2.0
- ownedConcern = ownedUsage->selectByKind(ConcernUsage)
-
-
-
-
- <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p>
-
-
- OCL2.0
- ownedCase = ownedUsage->selectByKind(CaseUsage)
-
-
-
-
- <p>The <code>ownedAnalysisCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p>
-
-
- OCL2.0
- ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage)
-
-
-
-
- <p>The <code>ownedValidationCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p>
-
-
- OCL2.0
- ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage)
-
-
-
-
- <p>The <code>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p>
-
-
- OCL2.0
- ownedUseCase = ownedUsage->selectByKind(UseCaseUsage)
-
-
-
-
- <p>The <code>ownedViews</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p>
-
-
- OCL2.0
- ownedView = ownedUsage->selectByKind(ViewUsage)
-
-
-
-
- <p>The <code>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p>
-
-
- OCL2.0
- ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage)
-
-
-
-
- <p>The <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p>
-
-
- OCL2.0
- ownedRendering = ownedUsage->selectByKind(RenderingUsage)
-
-
-
-
- <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p>
-
-
- OCL2.0
- ownedMetadata = ownedUsage->selectByKind(MetadataUsage)
-
-
-
-
- <p>If a <code>Definition</code> is a variation, then it must be abstract.</p>
-
-
- OCL2.0
- isVariation implies isAbstract
-
-
-
-
-
- <p>Whether this <code>Definition</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Definition</code> must be <code>VariantMemberships</code>.</p>
-
-
-
-
-
- <p>The <code>Usages</code> which represent the variants of this <code>Definition</code> as a variation point <code>Definition</code>, if <code>isVariation</code> = true. If <code>isVariation = false</code>, the there must be no <code>variants</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedMemberships</code> of this <code>Definition</code> that are <code>VariantMemberships</code>. If <code>isVariation</code> = true, then this must be all <code>ownedMemberships</code> of the <code>Definition</code>. If <code>isVariation</code> = false, then <code>variantMembership</code>must be empty.</p>
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>features</code> of this <code>Definition</code> (not necessarily owned).</p>
-
-
-
-
-
-
- <p>The <code>usages</code> of this <code>Definition</code> that are <code>directedFeatures</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ReferenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>AttributeUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p>
-
-
-
-
-
-
- <p>The <code>EnumerationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p>
-
-
-
-
-
-
- <p>The <code>OccurrenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ItemUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>PartUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>PortUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConnectorAsUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p>
-
-
-
-
-
-
- <p>The <code>FlowUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>InterfaceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>AllocationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
- <p>The <code>MetadataUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ItemUsages being typed by a certain Structure.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedAction</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedPort</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>Usage</code> is a usage of a <code>Definition</code>.</p>
+<p>The property <code>mayTimeVary</code> redefines the KerML property <code>Feature::isVariable</code>, making it derived. The property <code>isConstant</code> is inherited from <code>Feature</code>.</p>">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>The <code>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p>
-
-
- OCL2.0
- variant = variantMembership.ownedVariantUsage
-
-
-
-
- <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p>
-
-
- OCL2.0
- variantMembership = ownedMembership->selectByKind(VariantMembership)
-
-
-
-
- <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p>
-
-
- OCL2.0
- isVariation implies ownedFeatureMembership->isEmpty()
-
-
-
-
- <p>A <code>Usage</code> is referential if it is not composite.</p>
-
-
- OCL2.0
- isReference = not isComposite
-
-
-
-
- <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p>
-
-
- OCL2.0
- owningVariationUsage <> null implies
- specializes(owningVariationUsage)
-
-
-
-
- <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</p>
-
-
- OCL2.0
- isVariation implies
- not ownedSpecialization.specific->exists(
+<p>However, if a <code>Usage</code> has <code>isVariation = true</code>, then it represents a <em>variation point</em> <code>Usage</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Usage</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Usage</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for the variation point <code>Usage</code>.</p>">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p>
-
-
- OCL2.0
- owningVariationDefinition <> null implies
- specializes(owningVariationDefinition)
-
-
-
-
- <p>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- directedUsage = directedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- nestedAction = nestedUsage->selectByKind(ActionUsage)
-
-
-
-
- <p>The <code>ownedAllocations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p>
-
-
- OCL2.0
- nestedAllocation = nestedUsage->selectByKind(AllocationUsage)
-
-
-
-
- <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p>
-
-
- OCL2.0
- nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage)
-
-
-
-
- <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p>
-
-
- OCL2.0
- nestedAttribute = nestedUsage->selectByKind(AttributeUsage)
-
-
-
-
- <p>The <code>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p>
-
-
- OCL2.0
- nestedCalculation = nestedUsage->selectByKind(CalculationUsage)
-
-
-
-
- <p>The <code>ownedCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p>
-
-
- OCL2.0
- nestedCase = nestedUsage->selectByKind(CaseUsage)
-
-
-
-
- <p>The <code>ownedConcerns</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p>
-
-
- OCL2.0
- nestedConcern = nestedUsage->selectByKind(ConcernUsage)
-
-
-
-
- <p>The <code>ownedConnections</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p>
-
-
- OCL2.0
- nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage)
-
-
-
-
- <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p>
-
-
- OCL2.0
- nestedConstraint = nestedUsage->selectByKind(ConstraintUsage)
-
-
-
-
- <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p>
-
-
- OCL2.0
- ownedNested = nestedUsage->selectByKind(EnumerationUsage)
-
-
-
-
- <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p>
-
-
- OCL2.0
- nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage)
-
-
-
-
- <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p>
-
-
- OCL2.0
- nestedInterface = nestedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p>
-
-
- OCL2.0
- nestedItem = nestedUsage->selectByKind(ItemUsage)
-
-
-
-
- <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p>
-
-
- OCL2.0
- nestedMetadata = nestedUsage->selectByKind(MetadataUsage)
-
-
-
-
- <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p>
-
-
- OCL2.0
- nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage)
-
-
-
-
- <p>The <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p>
-
-
- OCL2.0
- nestedPart = nestedUsage->selectByKind(PartUsage)
-
-
-
-
- <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p>
-
-
- OCL2.0
- nestedPort = nestedUsage->selectByKind(PortUsage)
-
-
-
-
- <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p>
-
-
- OCL2.0
- nestedReference = nestedUsage->selectByKind(ReferenceUsage)
-
-
-
-
- <p>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p>
-
-
- OCL2.0
- nestedRendering = nestedUsage->selectByKind(RenderingUsage)
-
-
-
-
- <p>The <code>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p>
-
-
- OCL2.0
- nestedRequirement = nestedUsage->selectByKind(RequirementUsage)
-
-
-
-
- <p>The <code>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p>
-
-
- OCL2.0
- nestedState = nestedUsage->selectByKind(StateUsage)
-
-
-
-
- <p>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p>
-
-
- OCL2.0
- nestedTransition = nestedUsage->selectByKind(TransitionUsage)
-
-
-
-
- <p>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- nestedUsage = ownedFeature->selectByKind(Usage)
-
-
-
-
- <p>The <code>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p>
-
-
- OCL2.0
- nestedUseCase = nestedUsage->selectByKind(UseCaseUsage)
-
-
-
-
- <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p>
-
-
- OCL2.0
- nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage)
-
-
-
-
- <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p>
-
-
- OCL2.0
- nestedView = nestedUsage->selectByKind(ViewUsage)
-
-
-
-
- <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p>
-
-
- OCL2.0
- nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage)
-
-
-
-
- <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</code>.</p>
-
-
- OCL2.0
- usage = feature->selectByKind(Usage)
-
-
-
-
- <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p>
-
-
- OCL2.0
- direction <> null or isEnd or featuringType->isEmpty() implies
- isReference
-
-
-
-
- <p>If a <code>Usage</code> is a variation, then it must be abstract.</p>
-
-
- OCL2.0
- isVariation implies isAbstract
-
-
-
-
- <p>A <code>Usage</code> <code>mayTimeVary</code> if and only if all of the following are true</p>
-<ul>
- <li>It has an <code>owningType</code> that specializes <em><code>Occurrences::Occurrence</code></em> (from the Kernel Semantic Library).</li>
- <li>It is not a portion.</li>
- <li>It does not specialize <em><code>Links::SelfLink</code></em> or <em><code>Occurrences::HappensLink</code></em> (from the Kernel Semantic Library).</li>
- <li>If <code>isComposite = true</code>, it does not specialize <em><code>Actions::Action</code></em> (from the Systems Model Library).
-</li></ul>
-
-
- OCL2.0
- mayTimeVary =
- owningType <> null and
+ oclAsType(Usage).isVariation)" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must have the same <code>featuringTypes</code> as that <code>Usage</code>.</p>
-
-
- OCL2.0
- owningVariationUsage <> null implies
- featuringType->asSet() = owningVariationUsage.featuringType->asSet()
-
-
-
-
-
- <p>Whether this <code>Usage</code> may be time varying (that is, whether it is featured by the snapshots of its <code>owningType</code>, rather than being featured by the <code>owningType</code> itself). However, if <code>isConstant</code> is also true, then the value of the <code>Usage</code> is nevertheless constant over the entire duration of an instance of its <code>owningType</code> (that is, it has the same value on all snapshots).</p>
-
-<p>The property <code>mayTimeVary</code> redefines the KerML property <code>Feature::isVariable</code>, making it derived. The property <code>isConstant</code> is inherited from <code>Feature</code>.</p>
-
-
-
-
-
- <p>Whether this <code>Usage</code> is a referential <code>Usage</code>, that is, it has <code>isComposite = false</code>.<p>
-
-
-
-
-
- <p>The <code>Usages</code> which represent the variants of this <code>Usage</code> as a variation point <code>Usage</code>, if <code>isVariation = true</code>. If <code>isVariation = false</code>, then there must be no <code>variants</code>.</p>
-
-
-
-
-
-
- <p>The <code>ownedMemberships</code> of this <code>Usage</code> that are <code>VariantMemberships</code>. If <code>isVariation = true</code>, then this must be all <code>memberships</code> of the <code>Usage</code>. If <code>isVariation = false</code>, then <code>variantMembership</code>must be empty.</p>
-
-
-
-
-
-
- <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</p>
-
-
-
-
-
-
- <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</p>
-
-
-
-
-
-
- <p>The <code>Classifiers</code> that are the types of this <code>Usage</code>. Nominally, these are <code>Definitions</code>, but other kinds of Kernel <code>Classifiers</code> are also allowed, to permit use of <code>Classifiers</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p>
-
-
-
-
-
-
-
-
-
- <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p>
-
-
-
-
-
-
- <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowConnectionUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p>
-
-
-
-
-
-
- <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>MetadataUsages</code> that are <code>nestedUsages</code> of this of this <code>Usage</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>Usage</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Usage</code> must be <code>VariantMemberships</code>.</p>
-
-
-
-
-
- <p>If this <code>Usage</code> is a variant, then its naming <code>Feature</code> is the <code>referencedFeature</code> of its <code>ownedReferenceSubsetting</code>.</p>
-
-
-
- OCL2.0
- if not owningMembership.oclIsKindOf(VariantMembership) then
- self.oclAsType(Feature).namingFeature()
-else if ownedReferenceSubsetting = null then null
-else ownedReferenceSubsetting.referencedFeature
-endif endif
-
-
-
-
-
-
-
-
-
- <p>If <code>ownedReferenceSubsetting</code> is not null, return the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>.</p>
-
-
-
- OCL2.0
- if ownedReferenceSubsetting = null then null
-else ownedReferenceSubsetting.referencedFeature.featureTarget
-endif
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedState</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedState</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedConstraint</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedTransition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedConstraint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedTransition</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedRequirement</code> is nested.</p>
-
-
-
-
-
-
-
- <p>A <code>ReferenceUsage</code> is a <code>Usage</code> that specifies a non-compositional (<code>isComposite = false</code>) reference to something. The <code>definition</code> of a <code>ReferenceUsage</code> can be any kind of <code>Classifier</code>, with the default being the top-level <code>Classifier</code> <code><em>Base::Anything</em></code> from the Kernel Semantic Library. This allows the specification of a generic reference without distinguishing if the thing referenced is an attribute value, item, action, etc.</p>
-
-
-
- <p>A <code>ReferenceUsage</code> is always referential.</p>
-
-
- OCL2.0
- isReference
-
-
-
-
-
- <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code>
-
-
-
-
-
-
- <p>If this <code>ReferenceUsage</code> is the <em><code>payload</code></em> <code>parameter</code> of a <code>TransitionUsage</code>, then its naming <code>Feature</code> is the <code>payloadParameter</code> of the <code>triggerAction</code> of that <code>TransitionUsage</code> (if any).</p>
-
-
-
- OCL2.0
- if owningType <> null and owningType.oclIsKindOf(TransitionUsage) and
+ )" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
- <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedItem</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedInterface</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedReference</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usages that feature a certain Usage.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedPart</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usages that have a certain Usage as a <code>flow</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedInterface</code>.</p>
-
-
-
-
-
-
-
-
- <p>The variation point Definition that for which this Usage represents a variant, derived as the <code>owningVariationDefinition</code> of the <code>owningVariantMembership</code> of the Usage.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedReference</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedItem</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAction</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedPart</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedUsage</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The variation point Usage that for which this Usage represents a variant, derived as the <code>owningVariationUsage</code> of the <code>owningVariantMembership</code> of the Usage.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedAttribute</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAttribute</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usages that have a certain Classifier as a <code>definition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedConnection</code>.</p>
-
-
-
-
-
-
-
- <p>The Definition that owns this CaseUsage (if any).</p>
-
-
-
- <p>The Definition that owns the <code>ownedCase</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>VariantMembership</code> is a <code>Membership</code> between a variation point <code>Definition</code> or <code>Usage</code> and a <code>Usage</code> that represents a variant in the context of that variation. The <code>membershipOwningNamespace</code> for the <code>VariantMembership</code> must be either a Definition or a <code>Usage</code> with <code>isVariation = true</code>.</p>
-
-
-
- <p>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</code>.</p>
-
-
- OCL2.0
- membershipOwningNamespace.oclIsKindOf(Definition) and
+endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</p>
-
-
-
-
-
-
-
-
- <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedView</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedRendering</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedRendering</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns a certain <code>nestedView</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedEnumeration</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedEnumeration</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedAllocation</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedAllocation</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage that owns the <code>nestedConcern</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedConcern</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedOccurrence</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedUseCase</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedUseCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedMetadata</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedMetadata</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>PartDefinition</code> is an <code>ItemDefinition</code> of a <code>Class</code> of systems or parts of systems. Note that all parts may be considered items for certain purposes, but not all items are parts that can perform actions within a system.</p>
-
-
-
-
- </p>A <code>PartDefinition</code> must directly or indirectly specialize the base <code>PartDefinition</code> <em><code>Parts::Part</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Parts::Part')
-
-
-
-
-
-
- <p>A <code>PartUsage</code> is a usage of a <code>PartDefinition</code> to represent a system or a part of a system. At least one of the <code>itemDefinitions</code> of the <code>PartUsage</code> must be a <code>PartDefinition</code>.</p>
+" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>The <code>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p>
-
-
- OCL2.0
- itemDefinition->selectByKind(PartDefinition)
-
-
-
-
- <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p>
-
-
- OCL2.0
- partDefinition->notEmpty()
-
-
-
-
- <p>A <code>PartUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Parts::parts</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Parts::parts')
-
-
-
-
- <p>A composite <code>PartUsage</code> whose <code>owningType</code> is a <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Items::Item::subparts</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ItemDefinition) or
- owningType.oclIsKindOf(ItemUsage)) implies
- specializesFromLibrary('Items::Item::subparts')
-
-
-
-
- <p>If a <code>PartUsage</code> is owned via an <code>ActorMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::actors</em></code> (if its <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> or <code><em>Cases::Case::actors</em></code> (otherwise).</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
+<p>Normally, a <code>Definition</code> has owned Usages that model <code>features</code> of the thing being defined. A <code>Definition</code> may also have other <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Definition</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p>
+
+<p>However, if a <code>Definition</code> has <code>isVariation</code> = <code>true</code>, then it represents a <em>variation point</em> <code>Definition</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Definition</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Definition</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for an abstract <code>Usage</code> of the variation point <code>Definition</code>.</p>
+">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
+ else specializesFromLibrary('Cases::Case::actors')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p>
-
-
-
-
-
-
-
-
- <p>The PartUsages typed by a certain PartDefinition.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>InterfaceUsage</code> is a Usage of an <code>InterfaceDefinition</code> to represent an interface connecting parts of a system through specific ports.</p>
-
-
-
- <p>A binary <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::binaryInterfaces</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Interfaces::binaryInterfaces')
-
-
-
-
- <p>An <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::interfaces</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Interfaces::interfaces')
-
-
-
-
-
- <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p>
-
-
-
-
-
-
-
- <p>An <code>InterfaceDefinition</code> is a <code>ConnectionDefinition</code> all of whose ends are <code>PortUsages</code>, defining an interface between elements that interact through such ports.</p>
-
-
-
- <p>An <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::Interface</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Interfaces::Interface')
-
-
-
-
- <p>A binary <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::BinaryInterface</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Interfaces::BinaryInterface')
-
-
-
-
-
- <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>StateUsage</code> is an <code>ActionUsage</code> that is nominally the <code>Usage</code> of a <code>StateDefinition</code>. However, other kinds of kernel <code>Behaviors</code> are also allowed as <code>types</code>, to permit use of <code>Behaviors</code from the Kernel Model Libraries.</p>
-
-<p>A <code>StateUsage</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateSubactionMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateUsage</code>.</p>
-
-
-
-
- <p>The <code>doAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
- OCL2.0
- doAction =
- let doMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::do) in
- if doMemberships->isEmpty() then null
- else doMemberships->at(1)
- endif
-
-
-
-
- <p>The <code>entryAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
- OCL2.0
- entryAction =
- let entryMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::entry) in
- if entryMemberships->isEmpty() then null
- else entryMemberships->at(1)
- endif
-
-
-
-
- <p>If a <code>StateUsage</code> is parallel, then its <code>nestedActions</code> (which includes <code>nestedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p>
-
-
- OCL2.0
- isParallel implies
- nestedAction.incomingTransition->isEmpty() and
- nestedAction.outgoingTransition->isEmpty()
-
-
-
-
- <p>A <code>StateUsage</code> that is a substate usage with a non-parallel owning <code>StateDefinition</code> or <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::exclusiveStates</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubstateUsage(false) implies
- specializesFromLibrary('States::StateAction::exclusiveStates')
-
-
-
-
- <p>The <code>exitAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit
-</code>.</p>
-
-
- OCL2.0
- exitAction =
- let exitMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::exit) in
- if exitMemberships->isEmpty() then null
- else exitMemberships->at(1)
- endif
-
-
-
-
- <p>A <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::stateActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('States::stateActions')
-
-
-
-
- <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p>
-
-
- OCL2.0
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- isUnique(kind)
-
-
-
-
- <p>A <code>StateUsage</code> that is a substate usage with a owning <code>StateDefinition</code> or <code>StateUsage</code> that is parallel must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::substates</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isSubstateUsage(true) implies
- specializesFromLibrary('States::StateAction::substates')
-
-
-
-
- <p>A composite <code>StateUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>Parts::Part::ownedStates</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(PartDefinition) or
- owningType.oclIsKindOf(PartUsage)) implies
- specializesFromLibrary('Parts::Part::ownedStates')
-
-
-
-
-
- <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>StateUsage</code>. Nominally, these would be <code>StateDefinitions</code>, but kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p>
-
-
-
-
-
-
- <p>Whether the <code>nestedStates</code> of this <code>StateUsage</code> are to all be performed in parallel. If true, none of the <code>nestedActions</code> (which include <code>nestedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>nestedState</code> may be performed at a time.</p>
-
-
-
-
-
-
-
- <p>Check if this <code>StateUsage</code> is composite and has an <code>owningType</code> that is a <code>StateDefinition</code> or <code>StateUsage</code> with the given value of <code>isParallel</code>, but is <em>not</em> an <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code>. If so, then it represents a <code><em>StateAction</em></code> that is a <code><em>substate</em></code> or <code><em>exclusiveState</em></code> (for <code>isParallel = false</code>) of another <code><em>StateAction</em></code>.</p>
-
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(StateDefinition) and
- owningType.oclAsType(StateDefinition).isParallel = isParallel or
- owningType.oclIsKindOf(StateUsage) and
- owningType.oclAsType(StateUsage).isParallel = isParallel) and
-not owningFeatureMembership.oclIsKindOf(StateSubactionMembership)
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The StateDefinitions featuring a certain StateUsage.</p>
-
-
-
-
-
-
-
- <p>A <code>StateSubactionKind</code> indicates whether the <code>action</code> of a StateSubactionMembership is an entry, do or exit action.</p>
-
-
-
- <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>entryAction</code>.</p>
-
-
-
-
- <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is a <code>doAction</code>.</p>
-
-
-
-
- <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p>
-
-
-
-
-
- <p>A <code>StateSubactionMembership</code> is a <code>FeatureMembership</code> for an entry, do or exit <code>ActionUsage<code> of a <code>StateDefinition</code> or <code>StateUsage</code>.</p>
-
-
-
- <p>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(StateDefinition) or
-owningType.oclIsKindOf(StateUsage)
-
-
-
-
-
- <p>Whether this <code>StateSubactionMembership</code> is for an <code>entry<code>, <code>do</code> or <code>exit</code> <code>ActionUsage</code>.</p>
-
-
-
-
- <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>StateDefinition</code> is the <code>Definition</code> of the </code>Behavior</code> of a system or part of a system in a certain state condition.</p>
-
-<p>A <code>StateDefinition</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateBehaviorMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateDefinition</code>.</p>
-
-
-
- <p>A <code>StateDefinition</code> must directly or indirectly specialize the <code>StateDefinition</code> <em><code>States::StateAction</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('States::StateAction')
-
-
-
-
- <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p>
-
-
- OCL2.0
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- isUnique(kind)
-
-
-
-
- <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p>
-
-
- OCL2.0
- state = action->selectByKind(StateUsage)
-
-
-
-
- <p>The <code>doAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
- OCL2.0
- doAction =
- let doMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::do) in
- if doMemberships->isEmpty() then null
- else doMemberships->at(1)
- endif
-
-
-
-
- <p>The <code>entryAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
- OCL2.0
- entryAction =
- let entryMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::entry) in
- if entryMemberships->isEmpty() then null
- else entryMemberships->at(1)
- endif
-
-
-
-
- <p>If a <code>StateDefinition</code> is parallel, then its <code>ownedActions</code> (which includes its <code>ownedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p>
-
-
- OCL2.0
- isParallel implies
- ownedAction.incomingTransition->isEmpty() and
- ownedAction.outgoingTransition->isEmpty()
-
-
-
-
- <p>The <code>exitAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit
-</code>.</p>
-
-
- OCL2.0
- exitAction =
- let exitMemberships : Sequence(StateSubactionMembership) =
- ownedMembership->
- selectByKind(StateSubactionMembership)->
- select(kind = StateSubactionKind::exit) in
- if exitMemberships->isEmpty() then null
- else exitMemberships->at(1)
- endif
-
-
-
-
-
- <p>The <code>StateUsages</code>, which are <code>actions</code> in the <code>StateDefinition</code>, that specify the discrete states in the behavior defined by the <code>StateDefinition</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p>
-
-
-
-
-
-
- <p>Whether the <code>ownedStates</code> of this <code>StateDefinition</code> are to all be performed in parallel. If true, none of the <code>ownedActions</code> (which includes <code>ownedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>ownedState</code> may be performed at a time.</p>
-
-
-
-
-
-
-
-
-
- <p>The Behaviors that are the types of this StateUsage. Nominally, these would be StateDefinition, but non-StateDefinition Behaviors are also allowed, to permit use of Behaviors from the Kernel Library.</p>
-
-
-
-
-
-
-
- <p>A <code>TransitionUsage</code> is an <code>ActionUsage</code> representing a triggered transition between <code>ActionUsages</code> or <code>StateUsages</code>. When triggered by a <code>triggerAction</code>, when its <code>guardExpression</code> is true, the <code>TransitionUsage</code> asserts that its <code>source</code> is exited, then its <code>effectAction</code> (if any) is performed, and then its <code>target</code> is entered.</p>
-
-<p>A <code>TransitionUsage</code> can be related to some of its <code>ownedFeatures</code> using <code>TransitionFeatureMembership</code> <code>Relationships</code>, corresponding to the <code>triggerAction</code>, <code>guardExpression</code> and <code>effectAction</code> of the <code>TransitionUsage</code>.</p>
-
-
-
- <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is an <code>ActionDefinition</code> or <code>ActionUsage</code> and whose <code>source</code> is <em>not</em> a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisionTransitions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ActionDefinition) or
- owningType.oclIsKindOf(ActionUsage)) and
-source <> null and not source.oclIsKindOf(StateUsage) implies
- specializesFromLibrary('Actions::Action::decisionTransitions')
-
-
-
-
- <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is a <code>StateDefinition</code> or <code>StateUsage</code> and whose <code>source</code> is a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>States::StateAction::stateTransitions</code></em> from the Systems Model Library</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(StateDefinition) or
- owningType.oclIsKindOf(StateUsage)) and
-source <> null and source.oclIsKindOf(StateUsage) implies
- specializesFromLibrary('States::StateAction::stateTransitions')
-
-
-
-
-
- <p>A <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::transitionActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Actions::transitionActions')
-
-
-
-
- <p>The <code>source</code> of a <code>TransitionUsage</code> is <code>featureTarget</code> of the result of <code>sourceFeature()</code>, which must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- source =
- let sourceFeature : Feature = sourceFeature() in
- if sourceFeature = null then null
- else sourceFeature.featureTarget.oclAsType(ActionUsage)
-
-
-
-
- <p>The <code>target</code> of a <code>TransitionUsage</code> is given by the <code>featureTarget</code> of the <code>targetFeature</code> of its <code>succession</code>, which must be an <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- target =
- if succession.targetFeature->isEmpty() then null
- else
- let targetFeature : Feature =
- succession.targetFeature->first().featureTarget in
- if not targetFeature.oclIsKindOf(ActionUsage) then null
- else targetFeature.oclAsType(ActionUsage)
- endif
- endif
-
-
-
-
-
- <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p>
-
-
- OCL2.0
- triggerAction = ownedFeatureMembership->
- selectByKind(TransitionFeatureMembership)->
- select(kind = TransitionFeatureKind::trigger).transitionFeature->
- selectByKind(AcceptActionUsage)
-
-
-
-
- <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>Succession</code> with an <code>ActionUsage</code> as the <code>featureTarget</code> of its <code>targetFeature</code>.</p>
-
-
- OCL2.0
- let successions : Sequence(Successions) =
- ownedMember->selectByKind(Succession) in
-successions->notEmpty() and
-successions->at(1).targetFeature.featureTarget->
- forAll(oclIsKindOf(ActionUsage))
-
-
-
-
- <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>Expressions</code>.</p>
-
-
- OCL2.0
- guardExpression = ownedFeatureMembership->
- selectByKind(TransitionFeatureMembership)->
- select(kind = TransitionFeatureKind::trigger).transitionFeature->
- selectByKind(Expression)
-
-
-
-
- <p>The <code>triggerActions</code>, <code>guardExpressions</code>, and <code>effectActions</code> of a <code>TransitionUsage</code> must specialize, respectively, the <em><code>accepter</code></em>, <em><code>guard</code></em>, and <em><code>effect</code></em> <code>features</code> of the <code>ActionUsage</code> <em><code>Actions::TransitionActions</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and
-guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and
-effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect'))
-
-
-
-
- <p>The <code>effectActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p>
-
-
- OCL2.0
- triggerAction = ownedFeatureMembership->
- selectByKind(TransitionFeatureMembership)->
- select(kind = TransitionFeatureKind::trigger).transitionFeatures->
- selectByKind(AcceptActionUsage)
-
-
-
-
- <p>The <code>sourceFeature</code> of the <code>succession</code> of a <code>TransitionUsage</code> must be the <code>source</code> of the <code>TransitionUsage</code> (i.e., the first <code>connectorEnd</code> of the <code>succession</code> must have a <code>ReferenceSubsetting</code> <code>Relationship</code> with the <code>source</code>).</p>
-
-
- OCL2.0
- succession.sourceFeature = source
-
-
-
-
- <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>source</code> and its first input <code>parameter</code> (which redefines <code><em>Actions::TransitionAction::transitionLinkSource</em></code>).</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(source) and
- b.relatedFeatures->includes(inputParameter(1)))
-
-
-
-
- <p>If a <code>TransitionUsage</code> has a <code>triggerAction</code>, then the <em><code>payload</code></em> <code>parameter</code> of the <code>TransitionUsage</code> subsets the <code>Feature</code> chain of the <code>triggerAction</code> and its <code>payloadParameter</code>.</p>
-
-
- OCL2.0
- triggerAction->notEmpty() implies
- let payloadParameter : Feature = inputParameter(2) in
- payloadParameter <> null and
- payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter())
-
-
-
-
- <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>succession</code> and the inherited <code>Feature</code> <code><em>TransitionPerformances::TransitionPerformance::transitionLink</em></code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->exists(b |
- b.relatedFeatures->includes(succession) and
- b.relatedFeatures->includes(resolveGlobal(
- 'TransitionPerformances::TransitionPerformance::transitionLink')))
-
-
-
-
- <p>A <code>TransitionUsage</code> must have at least one owned input <code>parameter</code> and, if it has a <code>triggerAction</code>, it must have at least two.</p>
-
-
- OCL2.0
- if triggerAction->isEmpty() then
- inputParameters()->size() >= 1
-else
- inputParameters()->size() >= 2
-endif
-
-
-
-
-
- <p>The <code>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p>
-
-
- OCL2.0
- succession = ownedMember->selectByKind(Succession)->at(1)
-
-
-
-
- <p>If the <code>source</code> of a <code>TransitionUsage</code> is <em>not</em> a <code>StateUsage</code>, then the <code>TransitionUsage</code> must not have any <code>triggerActions</code>.</p>
-
-
- OCL2.0
- source <> null and not source.oclIsKindOf(StateUsage) implies
- triggerAction->isEmpty()
-
-
-
-
-
- <p>The source <code>ActionUsage</code> of this <code>TransitionUsage</code>, which becomes the <code>source</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p>
-
-
-
-
-
-
- <p>The target <code>ActionUsage</code> of this <code>TransitionUsage<code>, which is the <code>targetFeature</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>AcceptActionUsages</code> that define the triggers of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p>
-
-
-
-
-
-
- <p>The <code>Expressions</code> that define the guards of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = guard</code>, which must all be <code>Expressions</code>.</p>
-
-
-
-
-
-
- <p>The <code>ActionUsages</code> that define the effects of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p>
-
-
-
-
-
-
- <p>The <code>Succession</code> that is the <code>ownedFeature</code> of this <code>TransitionUsage</code>, which, if the <code>TransitionUsage</code> is triggered, asserts the temporal ordering of the <code>source</code> and <code>target</code>.</p>
-
-
-
-
-
-
- <p>Return the <code>payloadParameter</code> of the <code>triggerAction</code> of this <code>TransitionUsage</code>, if it has one.</p>
-
-
-
- OCL2.0
- if triggerAction->isEmpty() then null
-else triggerAction->first().payloadParameter
-endif
-
-
-
-
-
-
-
-
-
- <p>Return the <code>Feature</code> to be used as the <code>source</code> of the <code>succession</code> of this <code>TransitionUsage</code>, which is the first <code>member</code> of the <code>TransitionUsage</code> that is a <code>Feature</code>, that is owned by the <code>TransitionUsage</code> via a <code>Membership</code> that is <em>not</em> a <code>FeatureMembership</code>, and whose <code>featureTarget</code> is an <code>ActionUsage</code>.</p>
-
-
-
- OCL2.0
- let features : Sequence(Feature) = ownedMembership->
- reject(oclIsKindOf(FeatureMembership)).memberElement->
- selectByKind(Feature)->
- select(featureTarget.oclIsKindOf(ActionUsage)) in
-if features->isEmpty() then null
-else features->first()
-endif
-
-
-
-
-
-
-
-
-
-
- <p>A <code>TransitionFeatureMembership</code> is a <code>FeatureMembership</code> for a trigger, guard or effect of a <code>TransitionUsage</code>, whose <code>transitionFeature</code> is a <code>AcceptActionUsage</code>, <em><code>Boolean</code></em>-valued <code>Expression</code> or <code>ActionUsage</code>, depending on its <code>kind</code>. </p>
-
-
-
- <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>trigger</code>, then its <code>transitionFeature</code> must be a kind of <code>AcceptActionUsage</code>.</p>
-
-
- OCL2.0
- kind = TransitionFeatureKind::trigger implies
- transitionFeature.oclIsKindOf(AcceptActionUsage)
-
-
-
-
- <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(TransitionUsage)
-
-
-
-
- <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>guard</code>, then its <code>transitionFeature</code> must be a kind of <code>Expression</code> whose result is a <em><code>Boolean</code></em> value.</p>
-
-
- OCL2.0
- kind = TransitionFeatureKind::guard implies
- transitionFeature.oclIsKindOf(Expression) and
- let guard : Expression = transitionFeature.oclIsKindOf(Expression) in
- guard.result.specializesFromLibrary('ScalarValues::Boolean') and
- guard.result.multiplicity <> null and
- guard.result.multiplicity.hasBounds(1,1)
-
-
-
-
- <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>effect</code>, then its <code>transitionFeature</code> must be a kind of <code>ActionUsage</code>.</p>
-
-
- OCL2.0
- kind = TransitionFeatureKind::effect implies
- transitionFeature.oclIsKindOf(ActionUsage)
-
-
-
-
-
- <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</code>.</p>
-
-
-
-
- <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>ExhibitStateUsage</code> is a <code>StateUsage</code> that represents the exhibiting of a <code>StateUsage</code>. Unless it is the <code>StateUsage</code> itself, the <code>StateUsage</code> to be exhibited is related to the <code>ExhibitStateUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>ExhibitStateUsage</code> is also a <code>PerformActionUsage</code>, with its <code>exhibitedState</code> as the <code>performedAction</code>.</p>
-
-
-
-
- <p>If an <code>ExhibitStateUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>StateUsage</code> <code><em>Parts::Part::exhibitedStates</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(PartDefinition) or
- owningType.oclIsKindOf(PartUsage)) implies
- specializesFromLibrary('Parts::Part::exhibitedStates')
-
-
-
-
- <p>If an <code>ExhibitStateUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>StateUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(StateUsage)
-
-
-
-
-
-
- <p>The <code>StateUsage</code> to be exhibited by the <code>ExhibitStateUsage</code>. It is the <code>performedAction</code> of the <code>ExhibitStateUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>StateUsage</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>TransitionActionKind</code> indicates whether the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a trigger, guard or effect.</p>
-
-
-
- <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</code>.</p>
-
-
-
-
- <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</p>
-
-
-
-
- <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p>
-
-
-
-
-
-
- <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The Transition that owns a certain Succession.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionUsage that is guarded by a certain Expression.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateDefinitions with a certain <tt>doAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateUsages with a certain <tt>entryAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The TransitionFeatureMembership that owns a certain Step (if any).</p>
-
-
-
-
-
-
-
-
- <p>The StateUsages with a certain <tt>exitAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateUsages with a certain <tt>doAction</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstraintUsage</code> is an <code>OccurrenceUsage</code> that is also a <code>BooleanExpression</code>, and, so, is typed by a <code>Predicate</code>. Nominally, if the type is a <code>ConstraintDefinition</code>, a <code>ConstraintUsage</code> is a <code>Usage</code> of that <code>ConstraintDefinition</code>. However, other kinds of kernel <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies
- if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind =
- RequirementConstraintKind::assumption then
- specializesFromLibrary('Requirements::RequirementCheck::assumptions')
- else
- specializesFromLibrary('Requirements::RequirementCheck::constraints')
- endif
-
-
-
-
- <p>A <code>ConstraintUsage</code> must directly or indirectly specialize the base <code>ConstraintUsage</code> <em><code>Constraints::constraintChecks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Constraints::constraintChecks')
-
-
-
-
- <p>A <code>ConstraintUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>ConstraintUsage</code> <em><code>Items::Item::checkedConstraints</code></em>.</p>
-
-
- OCL2.0
- owningType <> null and
+ specializesFromLibrary('Requirements::RequirementCheck::stakeholders')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- <p>The (single) <code>Predicate</code> that is the type of this <code>ConstraintUsage</code>. Nominally, this will be a <code>ConstraintDefinition</code>, but other kinds of <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
- <p>The naming <code>Feature</code> of a <code>ConstraintUsage</code> that is owned by a <code>RequirementConstraintMembership</code> and has an <code>ownedReferenceSubsetting</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of that <code>ownedReferenceSubsetting</code>.</p>
-
-
-
- OCL2.0
- if owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) and
-ownedReferenceSubsetting <> null then
- ownedReferenceSubsetting.referencedFeature.featureTarget
-else
- self.oclAsType(OccurrenceUsage).namingFeature()
-endif
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstraintUsage</code> is not model-level evaluable.</p>
-
-
-
- OCL2.0
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ConstraintDefinition</code> is an <code>OccurrenceDefinition</code> that is also a <code>Predicate</code> that defines a constraint that may be asserted to hold on a system or part of a system.</p>
-
-
-
-
-
- <p>A <code>ConstraintDefinition</code> must directly or indirectly specialize the base <code>ConstraintDefinition</code> <em><code>Constraints::ConstraintCheck</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Constraints::ConstraintCheck')
-
-
-
-
-
-
-
-
- <p>The ConstraintUsages typed by a certain Predicate.</p>
-
-
-
-
-
-
-
-
- <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p>
-
-
-
-
-
-
-
- <p>An <code>AssertConstraintUsage</code> is a <code>ConstraintUsage</code> that is also an <code>Invariant</code> and, so, is asserted to be true (by default). Unless it is the <code>AssertConstraintUsage</code> itself, the asserted <code>ConstraintUsage</code> is related to the <code>AssertConstraintUsage</code> by a ReferenceSubsetting <code>Relationship</code>.</p>
-
-
-
- <p>If an <code>AssertConstraintUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>assertedConstraint</code> is the <code>AssertConstraintUsage</code> itself. Otherwise, the <code>assertedConstraint</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>, which must be a <code>ConstraintUsage</code>.</p>
-
-
- OCL2.0
- assertedConstraint =
- if referencedFeatureTarget() = null then self
- else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then
- referencedFeatureTarget().oclAsType(ConstraintUsage)
- else null
- endif endif
-
-
-
-
- <p>If a <code>AssertConstraintUsage</code> is negated, then it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::negatedConstraintChecks</em></code>. Otherwise, it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::assertedConstraintChecks</em></code>.</p>
-
-
- OCL2.0
- if isNegated then
- specializesFromLibrary('Constraints::negatedConstraintChecks')
-else
- specializesFromLibrary('Constraints::assertedConstraintChecks')
-endif
-
-
-
-
- <p>If an <code>AssertConstraintUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a </code>ConstraintUsage</code>.</p>
-
-
- OCL2.0
- referencedFeaureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(ConstraintUsage)
-
-
-
-
-
-
- <p>The <code>ConstraintUsage</code> to be performed by the <code>AssertConstraintUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>AssertConstraintUsage</code>, if there is one, and, otherwise, the <code>AssertConstraintUsage</code> itself.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p>
-
-
-
-
-
-
-
-
- <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p>
-
-
-
-
-
-
-
-
- <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementDefinition</code> is a <code>ConstraintDefinition</code> that defines a requirement used in the context of a specification as a constraint that a valid solution must satisfy. The specification is relative to a specified subject, possibly in collaboration with one or more external actors.</p>
-
-
-
- <p>The <code>texts</code> of a<code>RequirementDefinition</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- text = documentation.body
-
-
-
-
- <p>The <code>assumedConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p>
-
-
- OCL2.0
- assumedConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::assumption).
- ownedConstraint
-
-
-
-
- <p>The <code>requiredConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- requiredConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::requirement).
- ownedConstraint
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjects : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjects->isEmpty() then null
- else subjects->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>framedConcerns</code> of a <code>RequirementDefinition</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- framedConcern = featureMembership->
- selectByKind(FramedConcernMembership).
- ownedConcern
-
-
-
-
- <p>The <code>actorParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>The <code>stakeHolderParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
- OCL2.0
- stakeholderParameter = featureMembership->
- selectByKind(StakholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(SubjectMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>RequirementDefinition</code> must directly or indirectly specialize the base <code>RequirementDefinition</code> <code><em>Requirements::RequirementCheck</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::RequirementCheck')
-
-
-
-
-
- <p>An optional modeler-specified identifier for this <code>RequirementDefinition</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>An optional textual statement of the requirement represented by this <code>RequirementDefinition</code>, derived from the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p>
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p>
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for th requirement.</p>
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementDefinition</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p>
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementDefinition</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind</code> = <code>requirement</code>.</p>
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> framed by this <code>RequirementDefinition</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementUsages typed by a certain RequirementDefinition.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p>
-
-
-
-
-
-
-
- <p>A <code>SatisfyRequirementUsage</code> is an <code>AssertConstraintUsage</code> that asserts, by default, that a satisfied <code>RequirementUsage</code> is true for a specific <code>satisfyingFeature</code>, or, if <code>isNegated = true</code>, that the <code>RequirementUsage</code> is false. The satisfied <code>RequirementUsage</code> is related to the <code>SatisfyRequirementUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p>
-
-
-
- <p>The <code>satisfyingFeature</code> of a <code>SatisfyRequirementUsage</code> is the <code>Feature</code> to which the <code>subjectParameter</code> is bound.</p>
-
-
- OCL2.0
- satisfyingFeature =
- let bindings: BindingConnector = ownedMember->
- selectByKind(BindingConnector)->
- select(b | b.relatedElement->includes(subjectParameter)) in
- if bindings->isEmpty() or
- bindings->first().relatedElement->exits(r | r <> subjectParameter)
- then null
- else bindings->first().relatedElement->any(r | r <> subjectParameter)
- endif
-
-
-
-
- <p>A <code>SatisfyRequirementUsage</code> must have exactly one <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>subjectParameter</code> and some <code>Feature</code> other than the <code>subjectParameter</code>.</p>
-
-
- OCL2.0
- ownedMember->selectByKind(BindingConnector)->
- select(b |
- b.relatedElement->includes(subjectParameter) and
- b.relatedElement->exists(r | r <> subjectParameter))->
- size() = 1
-
-
-
-
- <p>If a <code>SatisfyRequirementUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(RequirementUsage)
-
-
-
-
- <p>If a <code>SatisfyRequirementUsage</code> is negated, then it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::notSatisfiedRequirementChecks</code></em>. Otherwise, it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::satisfiedRequirementChecks</code></em>.</p>
-
-
- OCL2.0
- if isNegated then
- specializesFromLibrary('Requirements::notSatisfiedRequirementChecks')
-else
- specializesFromLibrary('Requirements::satisfiedRequirementChecks')
-endif
-
-
-
-
-
-
- <p>The <code>RequirementUsage</code> that is satisfied by the <code>satisfyingSubject</code> of this <code>SatisfyRequirementUsage</code>. It is the <code>assertedConstraint</code> of the <code>SatisfyRequirementUsage</code> considered as an <code>AssertConstraintUsage</code>, which must be a <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>Feature</code> that represents the actual subject that is asserted to satisfy the <code>satisfiedRequirement</code>. The <code>satisfyingFeature</code> is bound to the <code>subjectParameter</code> of the <code>SatisfyRequirementUsage</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</code>.</p>
-
-
-
- <p>The <code>actorParameters</code> of a <code>RequirementUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>The <code>assumedConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p>
-
-
- OCL2.0
- assumedConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::assumption).
- ownedConstraint
-
-
-
-
- <p>The <code>framedConcerns</code> of a <code>RequirementUsage</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- framedConcern = featureMembership->
- selectByKind(FramedConcernMembership).
- ownedConcern
-
-
-
-
- <p>The <code>requiredConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- requiredConstraint = ownedFeatureMembership->
- selectByKind(RequirementConstraintMembership)->
- select(kind = RequirementConstraintKind::requirement).
- ownedConstraint
-
-
-
-
- <p>The <code>stakeHolderParameters</code> of a <code>RequirementUsage</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- stakeholderParameter = featureMembership->
- selectByKind(AStakholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjects : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjects->isEmpty() then null
- else subjects->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>texts</code> of a<code>RequirementUsage</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- text = documentation.body
-
-
-
-
- <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(SubjectMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>RequirementUsage</code> must directly or indirectly specialize the base <code>RequirementUsage</code> <em><code>Requirements::requirementChecks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::requirementChecks')
-
-
-
-
- <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or ,code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
- (owningType.oclIsKindOf(RequirementDefinition) or
- owningType.oclIsKindOf(RequirementUsage)) implies
- specializesFromLibrary('Requirements::RequirementCheck::subrequirements')
-
-
-
-
- <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>ObjectiveMembership</code> must redefine the <code>objectiveRequirement</code> of each <code>CaseDefinition</code> or <code>CaseUsage</code> that is specialized by the <code>owningType</code> of the <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- owningfeatureMembership <> null and
-owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies
- owningType.ownedSpecialization.general->forAll(gen |
- (gen.oclIsKindOf(CaseDefinition) implies
- redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and
- (gen.oclIsKindOf(CaseUsage) implies
- redefines(gen.oclAsType(CaseUsage).objectiveRequirement))
-
-
-
-
- <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementVerificationMembership</code> must directly or indirectly specialize the <code>RequirementUsage</code> <code><em>VerificationCases::VerificationCase::obj::requirementVerifications</em></code>.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies
- specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications')
-
-
-
-
-
- <p>The <code>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
- <p>An optional modeler-specified identifier for this <code>RequirementUsage</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
-
- <p>An optional textual statement of the requirement represented by this <code>RequirementUsage</code>, derived from the <code>bodies<code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementUsage</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>requirement</code>.</p>
-
-
-
-
-
-
- <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementUsage</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>assumption</code>.</p>
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</p>
-
-
-
-
-
-
- <p>The <code>ConcernUsages</code> framed by this <code>RequirementUsage</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p>
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p>
-
-
-
-
-
-
-
-
- <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementConstraintMembership</code> is a <code>FeatureMembership</code> for an assumed or required <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage<code>.</p>
-
-
-
- <p>The <code>referencedConstraint</code> of a <code>RequirementConstraintMembership</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p>
-
-
- OCL2.0
- referencedConstraint =
- let referencedFeature : Feature =
- ownedConstraint.referencedFeatureTarget() in
- if referencedFeature = null then ownedConstraint
- else if referencedFeature.oclIsKindOf(ConstraintUsage) then
- refrencedFeature.oclAsType(ConstraintUsage)
- else null
- endif endif
-
-
-
-
- <p>The <code>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementDefinition) or
-owningType.oclIsKindOf(RequirementUsage)
-
-
-
-
- <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p>
-
-
- OCL2.0
- ownedConstraint.isComposite
-
-
-
-
-
- <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</p>
-
-
-
-
- <p>The <code>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</code>.</p>
-
-
-
-
-
-
- <p> The <code>ConstraintUsage</code> that is referenced through this <code>RequirementConstraintMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementConstraintKind</code> indicates whether a <code>ConstraintUsage</code> is an assumption or a requirement in a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p>
-
-
-
- <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code> represents an assumption.</p>
-
-
-
-
- <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p>
-
-
-
-
-
-
- <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SubjectMembership</code> is a <code>ParameterMembership</code> that indicates that its <code>ownedSubjectParameter</code> is the subject of its <code>owningType</code>. The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p>
-
-
-
- <p>The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsType(RequirementDefinition) or
-owningType.oclIsType(RequiremenCaseRequirementDefinition) or
-owningType.oclIsType(CaseDefinition) or
-owningType.oclIsType(CaseUsage)
-
-
-
-
-
-
- <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p>
-
-
-
-
-
-
-
-
- <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>FramedConcernMembership</code> is a <code>RequirementConstraintMembership</code> for a framed <code>ConcernUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p>
-
-
-
- <p>A <code>FramedConcernMembership</code> must have <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- kind = RequirementConstraintKind::requirement
-
-
-
-
-
- <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p>
-
-
-
-
-
- <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p>
-
-
-
-
-
-
- <p> The <code>ConcernUsage</code> that is referenced through this <code>FramedConcernMembership</code>. It is the <code>referencedConstraint</code> of the <code>FramedConcernMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>ConcernUsage</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ConcernDefinition</code> is a <code>RequirementDefinition</code> that one or more stakeholders may be interested in having addressed. These stakeholders are identified by the <code>ownedStakeholders</code>of the <code>ConcernDefinition</code>.</p>
-
-
-
-
- <p>A <code>ConcernDefinition</code> must directly or indirectly specialize the base <code>ConcernDefinition</code> <em><code>Requirements::ConcernCheck</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::ConcernCheck')
-
-
-
-
-
-
-
- <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ConcernUsage</code> is a <code>Usage</code> of a <code>ConcernDefinition</code>.</p>
-
- The <code>ownedStakeholder</code> features of the ConcernUsage shall all subset the <em><code>ConcernCheck::concernedStakeholders</code> </em>feature. If the ConcernUsage is an <code>ownedFeature</code> of a StakeholderDefinition or StakeholderUsage, then the ConcernUsage shall have an <code>ownedStakeholder</code> feature that is bound to the <em><code>self</code></em> feature of its owner.</p>
-
-
-
-
- <p>A <code>ConcernUsage</code> must directly or indirectly specialize the base <code>ConcernUsage</code> <em><code>Requirements::concernChecks</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Requirements::concernChecks')
-
-
-
-
- <p>If a <code>ConcernUsage</code> is owned via a <code>FramedConcernMembership</code>, then it must directly or indirectly specialize the <code>ConcernUsage</code> <code><em>Requirements::RequirementCheck::concerns</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
-owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies
- specializesFromLibrary('Requirements::RequirementCheck::concerns')
-
-
-
-
-
- <p>The ConcernDefinition that is the single type of this ConcernUsage.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>StakeholderMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as a <code>stakeholderParameter</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>, which specifies a role played by an entity with concerns framed by the <code>owningType</code>.</p>
-
-
-
- <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementUsage) or
-owningType.oclIsKindOf(RequirementDefinition)
-
-
-
-
-
- <p>The <code>PartUsage</code> specifying the stakeholder.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>ActorMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as an <em>actor</em> <code>parameter</code>, which specifies a role played by an external entity in interaction with the <code>owningType</code> of the <code>ActorMembership</code>.</p>
-
-
-
- <p>The <code>owningType</code> of an <code>ActorMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementUsage) or
-owningType.oclIsKindOf(RequirementDefinition) or
-owningType.oclIsKindOf(CaseDefinition) or
-owningType.oclIsKindOf(CaseUsage)
-
-
-
-
-
-
- <p>The <code>PartUsage</code> specifying the actor.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</code>.</p>
-
-
-
- <p>A <code>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Calculations::Calculation')
-
-
-
-
- <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</p>
-
-
- OCL2.0
- calculation = action->selectByKind(CalculationUsage)
-
-
-
-
-
-
- <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p>
-
-
-
-
-
-
-
-
- <p>The CalculationUsage being typed by a certain Function.</p>
-
-
-
-
-
-
-
- <p>A <code>CalculationUsage</code> is an <code>ActionUsage</code> that is also an <code>Expression</code>, and, so, is typed by a <code>Function</code>. Nominally, if the <code>type</code> is a <code>CalculationDefinition</code>, a <code>CalculationUsage</code> is a <code>Usage</code> of that <code>CalculationDefinition</code> within a system. However, other kinds of kernel <code>Functions</code> are also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>CalculationUsage</code> must specialize directly or indirectly the <code>CalculationUsage</code> <em><code>Calculations::calculations</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Calculations::calculations')
-
-
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(CalculationDefinition) or
- owningType.oclIsKindOf(CalculationUsage)) implies
- specializesFromLibrary('Calculations::Calculation::subcalculations')
-
-
-
-
-
-
- <p>The <ode>Function</code> that is the <code>type</code> of this <code>CalculationUsage</code>. Nominally, this would be a <code>CalculationDefinition</code>, but a kernel <code>Function</code> is also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
- <p>A <code>CalculationUsage</code> is not model-level evaluable.</p>
-
-
-
- OCL2.0
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The CalculationDefinitions that feature a certain CalculationUsage.</p>
-
-
-
-
-
-
-
-
- <p>The Definition that owns the <code>ownedCalculation</code>.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedCalculation<code> is nested.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ConnectionDefinition</code> is a <code>PartDefinition</code> that is also an <code>AssociationStructure</code>. The end <code>Features</code> of a <code>ConnectionDefinition</code> must be <code>Usages</code>.</p>
-
-
-
- <p>A <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::Connection</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Connections::Connection')
-
-
-
-
- <p>A binary <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::BinaryConnection</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Connections::BinaryConnections')
-
-
-
-
- <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p>
-
-
- OCL2.0
- isSufficient
-
-
-
-
-
-
- <p>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</code>.</p>
-
-
-
-
-
-
- <p>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ConnectionUsage</code> is a <code>ConnectorAsUsage</code> that is also a <code>PartUsage</code>. Nominally, if its type is a <code>ConnectionDefinition</code>, then a <code>ConnectionUsage</code> is a Usage of that <code>ConnectionDefinition</code>, representing a connection between parts of a system. However, other kinds of kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::connections</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Connections::connections')
-
-
-
-
- <p>A binary <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::binaryConnections</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeature->size() = 2 implies
- specializesFromLibrary('Connections::binaryConnections')
-
-
-
-
-
-
- <p>The <code>AssociationStructures</code> that are the types of this <code>ConnectionUsage</code>. Nominally, these are , but other kinds of Kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries</p>
-
-
-
-
-
-
-
-
- <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p>
-
-
-
-
-
-
- <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowConnectionUsage</code>.</p>
-
-
-
-
-
-
- <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p>
-
-
-
- <p>The <code>objectiveRequirement</code> of a <code>CaseUsage</code> is the <code>RequirementUsage</code> it owns via an <case>ObjectiveMembership</code>, if any.</p>
-
-
- OCL2.0
- objectiveRequirement =
- let objectives: OrderedSet(RequirementUsage) =
- featureMembership->
- selectByKind(ObjectiveMembership).
- ownedRequirement in
- if objectives->isEmpty() then null
- else objectives->first().ownedObjectiveRequirement
- endif
-
-
-
-
- <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ObjectiveMembership)->
- size() <= 1
-
-
-
-
- <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(SubjectMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>actorParameters</code> of a <code>CaseUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjects : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjects->isEmpty() then null
- else subjects->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>CaseUsage</code> must directly or indirectly specialize the base <code>CaseUsage</code> <em><code>Cases::cases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Cases::cases')
-
-
-
-
- <p>A composite <code>CaseUsage</code> whose <code>owningType</code> is a <code>CaseDefinition</code> or <code>CaseUsage</code> must directly or indirectly specialize the <code>CaseUsage</code> <em><code>Cases::Case::subcases</code></em>.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
- (owningType.oclIsKindOf(CaseDefinition) or
- owningType.oclIsKindOf(CaseUsage)) implies
- specializesFromLibrary('Cases::Case::subcases')
-
-
-
-
-
- <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</code>.</p>
-
-
-
-
-
-
-
- <p>The CaseDefinition that is the type of this CaseUsage.</p>
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>CaseUsage</code> that represents its subject.</p>
-
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>CaseUsage</code> that represent actors involved in the case.</p>
-
-
-
-
-
-
-
-
- <p>The Usage in which the <code>nestedCase</code> is nested.</p>
-
-
-
-
-
-
-
-
- <p>The CaseUsages being typed by a certain CaseDefinition.</p>
-
-
-
-
-
-
-
- <p>A <code>CaseDefinition</code> is a <code>CalculationDefinition</code> for a process, often involving collecting evidence or data, relative to a subject, possibly involving the collaboration of one or more other actors, producing a result that meets an objective.</p>
-
-
-
- <p>The <code>objectiveRequirement</code> of a <code>CaseDefinition</code> is the <code>ownedObjectiveRequirement</code> of its <case>ObjectiveMembership</code>, if any.</p>
-
-
- OCL2.0
- objectiveRequirement =
- let objectives: OrderedSet(RequirementUsage) =
- featureMembership->
- selectByKind(ObjectiveMembership).
- ownedRequirement in
- if objectives->isEmpty() then null
- else objectives->first().ownedObjectiveRequirement
- endif
-
-
-
-
- <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ObjectiveMembership)->
- size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p>
-
-
- OCL2.0
- subjectParameter =
- let subjectMems : OrderedSet(SubjectMembership) =
- featureMembership->selectByKind(SubjectMembership) in
- if subjectMems->isEmpty() then null
- else subjectMems->first().ownedSubjectParameter
- endif
-
-
-
-
- <p>The <code>actorParameters</code> of a <code>CaseDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseDefinition</code>.</p>
-
-
- OCL2.0
- actorParameter = featureMembership->
- selectByKind(ActorMembership).
- ownedActorParameter
-
-
-
-
- <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p>
-
-
- English
- featureMembership->selectByKind(SubjectMembership)->size() <= 1
-
-
-
-
- <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p>
-
-
- OCL2.0
- input->notEmpty() and input->first() = subjectParameter
-
-
-
-
- <p>A <code>CaseDefinition</code> must directly or indirectly specialize the base <code>CaseDefinition</code> <em><code>Cases::Case></code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Cases::Case')
-
-
-
-
-
- <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>The <code>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</p>
-
-
-
-
-
-
- <p>The <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p>
-
-
-
-
-
-
-
- <p>An <code>ObjectiveMembership</code> is a <code>FeatureMembership</code> that indicates that its <code>ownedObjectiveRequirement</code> is the objective <code>RequirementUsage</code> for its <code>owningType</code>, which must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p>
-
-
-
- <p>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsType(CaseDefinition) or
-owningType.oclIsType(CaseUsage)
-
-
-
-
-
- <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p>
-
-
- OCL2.0
- ownedObjectiveRequirement.isComposite
-
-
-
-
-
- <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
- <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p>
-
-
-
-
-
-
-
- <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</p>
-
-
-
- <p>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p>
-
-
- OCL2.0
- resultExpression =
+ specializesFromLibrary('Items::Item::subparts')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>An <code>AnalysisCaseUsage</code> must directly or indirectly specialize the base <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::analysisCases</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('AnalysisCases::analysisCases')
-
-
-
-
- <p>A composite <code>AnalysisCaseUsage</code> whose <code>owningType</code> is an <code>AnalysisCaseDefinition</code> or <code>AnalysisCaseUsage</code> must specialize the <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::AnalysisCase::subAnalysisCases</code> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
+ if results->isEmpty() then null
+ else results->first().ownedResultExpression
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
-
-
- <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</code>.</p>
-
-
-
-
-
-
- <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</code>, owned via a <code>ResultExpressionMembership</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p>
-
-
-
- <p>The <code>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p>
-
-
- OCL2.0
- resultExpression =
+ specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>An <code>AnalysisCaseDefinition</code> must directly or indirectly specialize the base <code>AnalysisCaseDefinition</code> <code><em>AnalysisCases::AnalysisCase</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('AnalysisCases::AnalysisCase')
-
-
-
-
-
- <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseDefinition</code>, owned via a <code>ResultExpressionMembership</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>An <code>ItemUsage</code> is a <code>ItemUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p>
-
-
- OCL2.0
- itemDefinition = occurrenceDefinition->selectByKind(Structure)
-
-
-
-
- <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</p>
-
-
- OCL2.0
- specializesFromLibrary('Items::items')
-
-
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(ItemDefinition) or
- owningType.oclIsKindOf(ItemUsage)) implies
- specializesFromLibrary('Items::Item::subitem')
-
-
-
-
-
- <p>The Structures that are the <code>definitions</code> of this ItemUsage. Nominally, these are ItemDefinitions, but other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Library.</p>
-
-
-
-
-
-
-
- <p>An <code>ItemDefinition</code> is an <code>OccurrenceDefinition</code> of the <code>Structure</code> of things that may themselves be systems or parts of systems, but may also be things that are acted on by a system or parts of a system, but which do not necessarily perform actions themselves. This includes items that can be exchanged between parts of a system, such as water or electrical signals.</p>
-
-
-
-
- <p>An <code>ItemDefinition</code> must directly or indirectly specialize the Systems Library Model <code>ItemDefinition</code> <em><code>Items::Item</code>.</p>
-
-
- OCL2.0
- specializesFromLibrary('Items::Item')
-
-
-
-
-
-
-
-
-
- <p>A <code>ViewpointDefinition</code> is a <code>RequirementDefinition</code> that specifies one or more stakeholder concerns that are to be satisfied by creating a view of a model.</p>
-
-
-
- <p>The <code>viewpointStakeholders</code> of a <code>ViewpointDefinition</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p>
-
-
- OCL2.0
- viewpointStakeholder = framedConcern.featureMemberhsip->
- selectByKind(StakeholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::Viewpoint</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::Viewpoint')
-
-
-
-
-
- <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointDefinition</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ViewUsage</code> is a usage of a <code>ViewDefinition</code> to specify the generation of a view of the <code>members</code> of a collection of <code>exposedNamespaces</code>. The <code>ViewUsage</code> can satisfy more <code>viewpoints</code> than its definition, and it can specialize the <code>viewRendering</code> specified by its definition.<p>
-
-
-
- <p>The <code>exposedElements</code> of a <code>ViewUsage</code> are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> for which the <code>includeAsExposed</code> operation returns true.</p>
-
-
- OCL2.0
- exposedElement = ownedImport->selectByKind(Expose).
- importedMemberships(Set{}).memberElement->
- select(elm | includeAsExposed(elm))->
- asOrderedSet()
-
-
-
-
- <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>.
-
-
- OCL2.0
- satisfiedViewpoint = ownedRequirement->
- selectByKind(ViewpointUsage)->
- select(isComposite)
-
-
-
-
- <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p>
-
-
- OCL2.0
- viewCondition = ownedMembership->
- selectByKind(ElementFilterMembership).
- condition
-
-
-
-
- <p>The <code>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p>
-
-
- OCL2.0
- viewRendering =
- let renderings: OrderedSet(ViewRenderingMembership) =
- featureMembership->selectByKind(ViewRenderingMembership) in
- if renderings->isEmpty() then null
- else renderings->first().referencedRendering
- endif
-
-
-
-
- <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ViewRenderingMembership)->
- size() <= 1
-
-
-
-
- <p>A <code>ViewUsage</code> must directly or indirectly specialize the base <code>ViewUsage</code> <code><em>Views::views</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::views')
-
-
-
-
- <p>A <code>ViewUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must specialize the <code>ViewUsage</code> <code><em>Views::View::subviews</em></code> from the Systems Library Model.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(ViewDefinition) or
- owningType.oclIsKindOf(ViewUsage)) implies
- specializesFromLibrary('Views::View::subviews')
-
-
-
-
-
- <p>The <code>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>nestedRequirements</code> of this <code>ViewUsage</code> that are <code>ViewpointUsages</code> for (additional) viewpoints satisfied by the <code>ViewUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>Elements</code> that are exposed by this <code>ViewUsage</code>, which are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> that meet all the owned and inherited <code>viewConditions</code>.</p>
-
-
-
-
-
-
- <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewUsage</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewUsage</code>.<p>
-
-
-
-
-
-
- <p>The <code>Expressions</code> related to this <code>ViewUsage</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p>
-
-
-
-
-
-
- <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p>
-
-
-
- OCL2.0
- let metadataFeatures: Sequence(AnnotatingElement) =
- element.ownedAnnotation.annotatingElement->
- select(oclIsKindOf(MetadataFeature)) in
-self.membership->selectByKind(ElementFilterMembership).
- condition->forAll(cond |
- metadataFeatures->exists(elem |
- cond.checkCondition(elem)))
-
-
-
-
-
-
-
-
-
-
-
- <p>The ViewUsage that owns a certain <code>rendering</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewDefinition that owns a certain <code>rendering</code>.</p>
-
-
-
-
-
-
-
-
- p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewDefinitions that feature a certain ViewUsage.</p>
-
-
-
-
-
-
-
- <p>A <code>RenderingDefinition</code> is a <code>PartDefinition</code> that defines a specific rendering of the content of a model view (e.g., symbols, style, layout, etc.).</p>
-
-
-
- <p>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</code>.</p>
-
-
- OCL2.0
- rendering = usages->selectByKind(RenderingUsage)
-
-
-
-
- <p>A <code>RenderingDefinition</code> must directly or indirectly specialize the base <code>RenderingDefinition</code> <code><em>Views::Rendering</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::Rendering')
-
-
-
-
-
- <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</code>.</p>
+ if results->isEmpty() then null
+ else results->first().ownedResultExpression
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>The <code>viewpointStakeholders</code> of a <code>ViewpointUsage</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p>
-
-
- OCL2.0
- viewpointStakeholder = framedConcern.featureMemberhsip->
- selectByKind(StakeholderMembership).
- ownedStakeholderParameter
-
-
-
-
- <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpoints</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::viewpoints')
-
-
-
-
- <p>A composite <code>ViewpointUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must directly or indirectly specialize the <code>ViewpointUsage</code> <code><em>Views::View::viewpointSatisfactions</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
+
+">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<code>.</p>
-
-
-
-
-
-
- <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointUsage</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ViewDefinition</code> is a <code>PartDefinition</code> that specifies how a view artifact is constructed to satisfy a <code>viewpoint</code>. It specifies a <code>viewConditions</code> to define the model content to be presented and a <code>viewRendering</code> to define how the model content is presented.</p>
-
-
-
- <p>The <code>views</code> of a <code>ViewDefinition</code> are all its <code>usages</code> that are <code>ViewUsages</code>.</p>
-
-
- OCL2.0
- view = usage->selectByKind(ViewUsage)
-
-
-
-
- <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>.
-
-
- OCL2.0
- satisfiedViewpoint = ownedRequirement->
- selectByKind(ViewpointUsage)->
- select(isComposite)
-
-
-
-
- <p>The <code>viewRendering</code> of a <code>ViewDefinition</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p>
-
-
- OCL2.0
- viewRendering =
+ specializesFromLibrary('Views::View::subviews')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p>
-
-
- OCL2.0
- viewCondition = ownedMembership->
- selectByKind(ElementFilterMembership).
- condition
-
-
-
-
- <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p>
-
-
- OCL2.0
- featureMembership->
- selectByKind(ViewRenderingMembership)->
- size() <= 1
-
-
-
-
- </p>A <code>ViewDefinition</code> must directly or indirectly specialize the base <code>ViewDefinition</code> <code><em>Views::View</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::View')
-
-
-
-
-
- <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</code>.</p>
-
-
-
-
-
-
- <p>The composite <code>ownedRequirements</code> of this <code>ViewDefinition</code> that are <code>ViewpointUsages</code> for viewpoints satisfied by the <code>ViewDefinition</code>.</p>
-
-
-
-
-
-
- <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewDefinition</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewDefinition</code>.<p>
-
-
-
-
-
-
- <p>The <code>Expressions</code> related to this <code>ViewDefinition</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p>
-
-
-
-
-
-
-
- <p>An <code>Expose</code> is an <code>Import</code> of <code>Memberships</code> into a <code>ViewUsage</code> that provide the <code>Elements</code> to be included in a view. Visibility is always ignored for an <code>Expose</code> (i.e., <code>isImportAll = true</code>).</p>
-
-
-
- <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p>
-
-
- OCL2.0
- isImportAll
-
-
-
-
- <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p>
-
-
- OCL2.0
- importOwningNamespace.oclIsType(ViewUsage)
-
-
-
-
- <p>An <code>Expose</code> always has <code>protected</code> visibility.</p>
-
-
- OCL2.0
- visibility = VisibilityKind::protected
-
-
-
-
-
- <p>An <code>Expose</code> always has <code>protected</code> visibility.</p>
-
-
-
-
-
- <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p>
-
-
-
-
-
-
-
-
- <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>RenderingUsage</code> is the usage of a <code>RenderingDefinition</code> to specify the rendering of a specific model view to produce a physical view artifact.</p>
+ featureMembership->selectByKind(ViewRenderingMembership) in
+ if renderings->isEmpty() then null
+ else renderings->first().referencedRendering
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>RenderingUsage</code> must directly or indirectly specialize the base <code>RenderingUsage</code> <code><em>Views::renderings</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Views::renderings')
-
-
-
-
- <p>A <code>RenderingUsage</code> whose <code>owningType</code> is a <code>RenderingDefinition</code> or <code>RenderingUsage</code> must directly or indirectly specialize the <code>RenderingUsage</code> <code><em>Views::Rendering::subrenderings</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningType <> null and
+">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>RenderingUsage</code> whose <code>owningFeatureMembership</code> is a <code>ViewRenderingMembership</code> must redefine the <code>RenderingUsage</code> <code><em>Views::View::viewRendering</em></code>.</p>
-
-
- OCL2.0
- owningFeatureMembership <> null and
+ specializesFromLibrary('Views::Rendering::subrenderings')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
-
-
- <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>ViewRenderingMembership</code> is a <coed>FeatureMembership</code> that identifies the <code>viewRendering</code> of a <code>ViewDefinition</code> or <code>ViewUsage</code>.</p>
-
-
-
- <p>The <code>referencedRendering</code> of a <code>ViewRenderingMembership</code> is the the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be a <code>RenderingUsage</code>) of the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p>
-
-
- OCL2.0
- referencedRendering =
+ redefinesFromLibrary('Views::View::viewRendering')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(ViewDefinition) or
-owningType.oclIsKindOf(ViewUsage)
-
-
-
-
-
- <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>.
-
-
-
-
-
-
- <p> The <code>RenderingUsage</code> that is referenced through this <code>ViewRenderingMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p>
-
-
-
-
-
-
-
-
- <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>NamespaceExpose</code> is an <code>Expose</code> <code>Relationship</code> that exposes the <code>Memberships</code> of a specific <code>importedNamespace</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p>
-
-
-
-
-
-
- <p>A <code>MembershipExpose</code> is an <code>Expose</code> <code.Relationship</code> that exposes a specific <code>importedMembership</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p>
-
-
-
-
-
-
-
-
- <p>A <code>VerificationCaseDefinition</code> is a <code>CaseDefinition</code> for the purpose of verification of the subject of the case against its requirements.</p>
-
-
-
- <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p>
-
-
- OCL2.0
- verifiedRequirement =
+ endif endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>VerificationCaseDefinition</code> must directly or indirectly specialize the base <code>VerificationCaseDefinition</code> <em><code>VerificationCases::VerificationCase</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('VerificationCases::VerificationCase')
-
-
-
-
-
- <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseDefinition</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</code>.</p>
-
-
-
- <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p>
-
-
- OCL2.0
- verifiedRequirement =
+ verifiedRequirement->asOrderedSet()
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <p>A <code>VerificationCaseUsage</code> must subset, directly or indirectly, the base <code>VerificationCaseUsage</code> <code><em>VerificationCases::verificationCases</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('VerificationCases::verificationCases')
-
-
-
-
- If it is composite and owned by a <code>VerificationCaseDefinition</code> or <code>VerificationCaseUsage</code>, then it must specialize <code>VerificationCaseUsage</code> <code><em>VerificationCases::VerificationCase::subVerificationCases</code>.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
+ verifiedRequirement->asOrderedSet()
+ endif" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseUsage</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>RequirementVerificationMembership</code> is a <code>RequirementConstraintMembership </code> used in the objective of a <code>VerificationCase</code> to identify a <code>RequirementUsage</code> that is verified by the <code>VerificationCase</code>.</p>
-
-
-
- <p>A <code>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p>
-
-
- OCL2.0
- kind = RequirementConstraintKind::requirement
-
-
-
-
- <p>The <code>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p>
-
-
- OCL2.0
- owningType.oclIsKindOf(RequirementUsage) and
-owningType.owningFeatureMembership <> null and
-owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership)
-
-
-
-
-
- <p>The owned <code>RequirementUsage</code> that acts as the <code>ownedConstraint</code> for this <code>RequirementVerificationMembership</code>. This will either be the <code>verifiedRequirement</code>, or it will subset the <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
- <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p>
-
-
-
-
-
- <p> The <code>RequirementUsage</code> that is identified as being verified. It is the <code>referencedConstraint</code> of the <code>RequirementVerificationMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>RequirementUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
-
-
- <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>An <code>EnumerationDefinition</code> is an <code>AttributeDefinition</code> all of whose instances are given by an explicit list of <code>enumeratedValues</code>. This is realized by requiring that the <code>EnumerationDefinition</code> have <code>isVariation = true</code>, with the <code>enumeratedValues</code> being its <code>variants</code>.</p>
-
-
-
- <p>An <code>EnumerationDefinition</code> must be a variation.</p>
-
-
- OCL2.0
- isVariation
-
-
-
-
-
- <p><code>EnumerationUsages</code> of this <code>EnumerationDefinition</code>that have distinct, fixed values. Each <code>enumeratedValue</code> specifies one of the allowed instances of the <code>EnumerationDefinition</code>.</p>
-
-
-
-
-
-
- <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>EnumerationUsage</code> is an <code>AttributeUsage</code> whose <code>attributeDefinition</code> is an <code>EnumerationDefinition</code>.</p>
-
-
-
-
- <p>The single EnumerationDefinition that is the type of this EnumerationUsage.</p>
-
-
-
-
-
-
-
-
- <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p>
-
-
-
-
-
-
-
-
- <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AllocationDefinition</code> is a <code>ConnectionDefinition</code> that specifies that some or all of the responsibility to realize the intent of the <code>source</code> is allocated to the <code>target</code> instances. Such allocations define mappings across the various structures and hierarchies of a system model, perhaps as a precursor to more rigorous specifications and implementations. An <code>AllocationDefinition</code> can itself be refined using nested <code>allocations</code> that give a finer-grained decomposition of the containing allocation mapping.</p>
-
-
-
- <p> The <code>allocations</code> of an <code>AllocationDefinition</code> are all its <code>usages</code> that are <code>AllocationUsages</code>.</p>
-
-
- OCL2.0
- allocation = usage->selectAsKind(AllocationUsage)
-
-
-
-
- <p>An <code>AllocationDefinition</code> must directly or indirectly specialize the <code>AllocationDefinition</code> <em><code>Allocations::Allocation</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Allocations::Allocation')
-
-
-
-
-
- <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>AllocationUsage</code> is a usage of an <code>AllocationDefinition</code> asserting the allocation of the <code>source</code> feature to the <code>target</code> feature.</p>
-
-
-
- <p>An <code>AllocationUsage</code> must directly or indirectly specialize the <code>AllocationUsage</code> <em><code>Allocations::allocations</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Allocations::allocations')
-
-
-
-
-
- <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p>
-
-
-
-
-
-
-
-
- <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p>
-
-
-
-
-
-
-
- <p><code>PortionKind</code> is an enumeration of the specific kinds of <code><em>Occurrence</em></code> portions that can be represented by an <code>OccurrenceUsage</code>.</p>
-
-
-
- <p>A time slice of an <code>Occurrence</code> (a portion over time).</p>
-
-
-
-
- <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</p>
-
-
-
-
-
- <p>An <code>OccurrenceUsage</code> is a <code>Usage</code> whose <code>types</code> are all <code>Classes</code>. Nominally, if a <code>type</code> is an <code>OccurrenceDefinition</code>, an <code>OccurrenceUsage</code> is a <code>Usage</code> of that <code>OccurrenceDefinition</code> within a system. However, other types of Kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p>
-
-
-
-
- <p>The <code>individualDefinition</code> of an <code>OccurrenceUsage</code> is the <code>occurrenceDefinition</code> that is an <code>OccurrenceDefinition</code> with <code>isIndividual = true</code>, if any.</p>
-
-
- OCL2.0
- individualDefinition =
- let individualDefinitions : OrderedSet(OccurrenceDefinition) =
- occurrenceDefinition->
- selectByKind(OccurrenceDefinition)->
- select(isIndividual) in
- if individualDefinitions->isEmpty() then null
- else individualDefinitions->first() endif
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p>
-
-
- OCL2.0
- isIndividual implies individualDefinition <> null
-
-
-
-
- <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Occurrences::occurrences')
-
-
-
-
- <p>A composite <code>OccurrenceUsage</code>, whose <code>ownedType</code> is a <code>Class</code>, another <code>OccurrenceUsage</code>, or any kind of <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>.
-
-
- OCL2.0
- isComposite and
-owningType <> null and
-(owningType.oclIsKindOf(Class) or
- owningType.oclIsKindOf(OccurrenceUsage) or
- owningType.oclIsKindOf(Feature) and
- owningType.oclAsType(Feature).type->
- exists(oclIsKind(Class))) implies
- specializesFromLibrary('Occurrences::Occurrence::suboccurrences')
-
-
-
-
- <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p>
-
-
- OCL2.0
- occurrenceDefinition->
- selectByKind(OccurrenceDefinition)->
- select(isIndividual).size() <= 1
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has <code>portionKind = snapshot</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::snapshots</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- portionKind = PortionKind::snapshot implies
- specializesFromLibrary('Occurrences::Occurrence::snapshots')
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has <code>portionKind = timeslice</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::timeSlices</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- portionKind = PortionKind::timeslice implies
- specializesFromLibrary('Occurrences::Occurrence::timeSlices')
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then its <code>owningType</code> must be an <code>OccurrenceDefinition</code> or an <code>OccurrenceUsage</code>.</p>
-
-
- OCL2.0
- portionKind <> null implies
- owningType <> null and
- (owningType.oclIsKindOf(OccurrenceDefinition) or
- owningType.oclIsKindOf(OccurrenceUsage))
-
-
-
-
- <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p>
-
-
- OCL2.0
- portionKind <> null implies isPortion
-
-
-
-
-
- <p>The <code>Classes</code> that are the types of this <code>OccurrenceUsage</code>. Nominally, these are <code>OccurrenceDefinitions</code>, but other kinds of kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p>
-
-
-
-
-
-
- <p>The at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p>
-
-
-
-
-
-
- <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p>
-
-
-
-
-
-
- <p>The kind of temporal portion (time slice or snapshot) is represented by this <code>OccurrenceUsage</code>. If <code>portionKind</code> is not null, then the <code>owningType</code> of the <code>OccurrenceUsage</code> must be non-null, and the <code>OccurrenceUsage</code> represents portions of the featuring instance of the <code>owningType</code>.</p>
-
-
-
-
-
-
-
-
- <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>OccurrenceDefinition</code> is a <code>Definition</code> of a <code>Class</code> of individuals that have an independent life over time and potentially an extent over space. This includes both structural things and behaviors that act on such structures. If <code>isIndividual</code> is true, then the <code>OccurrenceDefinition</code> is constrained to have (at most) a single instance that is the entire life of a single individual.</p>
-
-
-
- <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must directly or indirectly specialize <em><code>Occurrences::Life</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isIndividual implies specializesFromLibrary('Occurrences::Life')
-
-
-
-
- <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must have a <code>multiplicity</code> that specializes <em><code>Base::zeroOrOne</code></em> from the Kernel Semantic Library.</p>
-
-
- OCL2.0
- isIndividual implies
- multiplicity <> null and
- multiplicity.specializesFromLibrary('Base::zeroOrOne')
-
-
-
-
-
-
- <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p>
-
-
-
-
-
-
-
-
- <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>EventOccurrenceUsage</code> is an <code>OccurrenceUsage</code> that represents another <code>OccurrenceUsage</code> occurring as a <code><em>suboccurrence</em></code> of the containing occurrence of the <code>EventOccurrenceUsage</code>. Unless it is the <code>EventOccurrenceUsage</code> itself, the referenced <code>OccurrenceUsage</code> is related to the <code>EventOccurrenceUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p>
-
-<p>If the <code>EventOccurrenceUsage</code> is owned by an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it also subsets the <em><code>timeEnclosedOccurrences</code></em> property of the <code>Class</code> <em><code>Occurrence</code></em> from the Kernel Semantic Library model <em><code>Occurrences</code></em>.</p>
-
-
-
- <p>If an <code>EventOccurrenceUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>eventOccurrence</code> is the <code>EventOccurrenceUsage</code> itself. Otherwise, the <code>eventOccurrence</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be an <code>OccurrenceUsage</code>).</p>
-
-
- OCL2.0
- eventOccurrence =
- if referencedFeatureTarget() = null then self
- else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then
- referencedFeatureTarget().oclAsType(OccurrenceUsage)
- else null
- endif endif
-
-
-
-
- <p>If an <code>EventOccurrenceUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>OccurrenceUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(OccurrenceUsage)
-
-
-
-
- <p>If an <code>EventOccurrenceUsage</code> has an <code>owningType</code> that is an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it must directly or indirectly specialize the <code>Feature</code> <code><em>Occurrences::Occurrence::timeEnclosedOccurrences</em></code>.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(OccurrenceDefinition) or
- owningType.oclIsKindOf(OccurrenceUsage)) implies
- specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences')
-
-
-
-
- <p>An <code>EventOccurrenceUsage</code> must be referential.</p>
-
-
- OCL2.0
- isReference
-
-
-
-
-
- <p>The <code>OccurrenceUsage</code> referenced as an event by this <code>EventOccurrenceUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>EventOccurrenceUsage</code>, if there is one, and, otherwise, the <code>EventOccurrenceUsage</code> itself.</p>
-
-
-
-
-
-
- <p>Always true for an <code>EventOccurrenceUsage</code>.</p>
-
-
-
-
-
-
-
-
-
-
- <p>The UseCaseDefinition that includes a certain <code>includedUseCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p>
-
-
-
-
-
-
-
- <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p>
-
-
-
-
- <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- owningType <> null and
-(owningType.oclIsKindOf(UseCaseDefinition) or
- owningType.oclIsKindOf(UseCaseUsage) implies
- specializesFromLibrary('UseCases::UseCase::includedUseCases')
-
-
-
-
- <p>If an <code>IncludeUseCaseUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>UseCaseUsage</code>.</p>
-
-
- OCL2.0
- referencedFeatureTarget() <> null implies
- referencedFeatureTarget().oclIsKindOf(UseCaseUsage)
-
-
-
-
-
-
- <p>The <code>UseCaseUsage</code> to be included by this <code>IncludeUseCaseUsage</code>. It is the <code>performedAction</code> of the <code>IncludeUseCaseUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>UseCaseUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p>
-
-
-
-
-
-
-
-
- <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p>
-
-
-
-
-
-
-
- <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</code>.</p>
-
-
-
- <p>The <code>includedUseCases<code> of a <code>UseCaseUsage</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseUsage<code>.</p>
-
-
- OCL2.0
- includedUseCase = ownedUseCase->
- selectByKind(IncludeUseCaseUsage).
- useCaseIncluded
-
-
-
-
- <p>A <code>UseCaseUsage</code> must directly or indirectly specializes the base <code>UseCaseUsage</code> <em><code>UseCases::useCases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('UseCases::useCases')
-
-
-
-
- <p>A composite <code>UseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::subUseCases</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- isComposite and owningType <> null and
-(owningType.oclIsKindOf(UseCaseDefinition) or
- owningType.oclIsKindOf(UseCaseUsage)) implies
- specializesFromLibrary('UseCases::UseCase::subUseCases')
-
-
-
-
-
- <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</code>.</p>
-
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseUse</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseUsage<code>.</p>
-
-
-
-
-
-
-
- <p>A <code>UseCaseDefinition</code> is a <code>CaseDefinition</code> that specifies a set of actions performed by its subject, in interaction with one or more actors external to the subject. The objective is to yield an observable result that is of value to one or more of the actors.</p>
-
-
-
-
- <p>The <code>includedUseCases<code> of a <code>UseCaseDefinition</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseDefinition<code>.</p>
-
-
- OCL2.0
- includedUseCase = ownedUseCase->
- selectByKind(IncludeUseCaseUsage).
- useCaseIncluded
-
-
-
-
- <p>A <code>UseCaseDefinition</code> must directly or indirectly specializes the base <code>UseCaseDefinition</code> <code><em>UseCases::UseCase</em></code> from the Systems Model Library.</p>
-
-
-
-
-
- OCL2.0
- specializesFromLibrary('UseCases::UseCase')
-
-
-
-
-
- <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseDefinition</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseDefinition<code>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <p>A <code>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</code>.</p>
-
-
-
- <p>A <code>MetadataDefinition</code> must directly or indirectly specialize the base <code>MetadataDefinition</code> <code><em>Metadata::MetadataItem</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metadata::MetadataItem')
-
-
-
-
-
-
-
- <p>A <code>MetadataUsage</code> is a <code>Usage</code> and a <code>MetadataFeature</code>, used to annotate other <code>Elements</code> in a system model with metadata. As a <code>MetadataFeature</code>, its type must be a <code>Metaclass</code>, which will nominally be a <code>MetadataDefinition</code>. However, any kernel <code>Metaclass</code> is also allowed, to permit use of <code>Metaclasses</code> from the Kernel Model Libraries.</p>
-
-
-
- <p>A <code>MetadataUsage</code> must directly or indirectly specialize the base <code>MetadataUsage</code> <code><em>Metadata::metadataItems</em></code> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Metadata::metadataItems')
-
-
-
-
-
-
- <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p>
-
-
-
-
-
-
-
-
-
- <p>A <code>FlowUsage</code> is an <code>ActionUsage</code> that is also a <code>ConnectorAsUsage</code> and a KerML <code>Flow</code>.</p>
-
-
-
- <p>A <code>FlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::messages</code></em> from the Systems Library model.</p>
-
-
- OCL2.0
- specializesFromLibrary('Flows::messages')
-
-
-
-
- <p>If a <code>FlowUsage</code> has <code>ownedEndFeatures</code>, it must directly or indirectly specialize the <code>FlowUsage</code> <em><code>Flows::flows</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- ownedEndFeatures->notEmpty() implies
- specializesFromLibrary('Flows::flows')
-
-
-
-
-
-
-
- <p>The <code>Interactions</code> that are the <code>types</code> of this <code>FlowUsage</code>. Nominally, these are <code>FlowDefinitions</code>, but other kinds of Kernel <code>Interactions</code> are also allowed, to permit use of Interactions from the Kernel Model Libraries.</p>
-
-
-
-
-
-
-
- <p>A <code>FlowDefinition</code> is an <code>ActionDefinition</code> that is also an <code>Interaction</code> (which is both a KerML <code>Behavior</code> and <code>Association</code>), representing flows between <code>Usages</code>.</p>
-
-
-
- <p>A <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition</code> <em><code>Flows::MessageAction</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- specializesFromLibrary('Flows::MessageAction')
-
-
-
-
- <p>A binary <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition<code> <em><code>Flows::Message</code></em> from the Systems Model Library.</p>
-
-
- OCL2.0
- flowEnd->size() = 2 implies
- specializesFromLibrary('Flows::Message')
-
-
-
-
- <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p>
-
-
- OCL2.0
- flowEnd->size() <= 2
-
-
-
-
-
-
- <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p>
-
-
-
-
-
-
-
-
- <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p>
-
-
-
-
-
-
-
- <p>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</p>
-
-
-
- <p>A <code>SuccessionFlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::successionFlows</code></em> from the Systems Library model.</p>
-
-
- OCL2.0
- specializesFromLibrary('Flows::successionFlows')
-
-
-
-
-
-
-
-
+ specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases')" language="OCL2.0" name="">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AnnotatingElementDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AnnotatingElementDeSerializer.cs
index 67998a82..0e943d89 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AnnotatingElementDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AnnotatingElementDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AssociationDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AssociationDeSerializer.cs
index 1796bf29..d91f1390 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AssociationDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/AssociationDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/DependencyDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/DependencyDeSerializer.cs
index d3ed6f76..6438a957 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/DependencyDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/DependencyDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/EnumerationDefinitionDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/EnumerationDefinitionDeSerializer.cs
index f0bc57b7..72d1a73e 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/EnumerationDefinitionDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/EnumerationDefinitionDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureDeSerializer.cs
index 728a9e05..82e40e6c 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureTypingDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureTypingDeSerializer.cs
index 497a5431..72aeb27b 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureTypingDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FeatureTypingDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FlowDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FlowDeSerializer.cs
index 08a0df40..5402cd39 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FlowDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FlowDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FramedConcernMembershipDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FramedConcernMembershipDeSerializer.cs
index 13c3b7cc..14333553 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FramedConcernMembershipDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/FramedConcernMembershipDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralIntegerDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralIntegerDeSerializer.cs
index 739e06ad..ad986a06 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralIntegerDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralIntegerDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralRationalDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralRationalDeSerializer.cs
index d8eff5ac..384941b8 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralRationalDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/LiteralRationalDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MembershipDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MembershipDeSerializer.cs
index 137edaca..741e8aa4 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MembershipDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MembershipDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MultiplicityRangeDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MultiplicityRangeDeSerializer.cs
index e8913806..f1d6a5e2 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MultiplicityRangeDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/MultiplicityRangeDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/OwningMembershipDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/OwningMembershipDeSerializer.cs
index 1a5f810a..608e6791 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/OwningMembershipDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/OwningMembershipDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/ReferenceSubsettingDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/ReferenceSubsettingDeSerializer.cs
index c70f929a..c02029ed 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/ReferenceSubsettingDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/ReferenceSubsettingDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/RequirementUsageDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/RequirementUsageDeSerializer.cs
index c0a6a250..8db6344f 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/RequirementUsageDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/RequirementUsageDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SelectExpressionDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SelectExpressionDeSerializer.cs
index 0190c692..2ea8b83d 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SelectExpressionDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SelectExpressionDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SubclassificationDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SubclassificationDeSerializer.cs
index 58d3012d..91df7425 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SubclassificationDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/SubclassificationDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/TextualRepresentationDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/TextualRepresentationDeSerializer.cs
index 73b7f5ea..67cd1faf 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/TextualRepresentationDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/TextualRepresentationDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/UsageDeSerializer.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/UsageDeSerializer.cs
index 98d8977c..a8e756ea 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/UsageDeSerializer.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDeSerializer/UsageDeSerializer.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright 2022-2025 Starion Group S.A.
+// Copyright 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/AnnotatingElement.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/AnnotatingElement.cs
index 4bbf43d3..e29049f8 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/AnnotatingElement.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/AnnotatingElement.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright (C) 2022-2025 Starion Group S.A.
+// Copyright (C) 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ namespace SysML2.NET.Core.DTO.Root.Annotations
/// Element. An AnnotatingElement is either attached to its annotatedElements by Annotation
/// Relationships, or it implicitly annotates its owningNamespace.
///
- [Class(xmiId: "_19_0_2_12e503d9_1594145576693_532940_27", isAbstract: false, isFinalSpecialization: false, isActive: false)]
+ [Class(xmiId: "Root-Annotations-AnnotatingElement", isAbstract: false, isFinalSpecialization: false, isActive: false)]
[GeneratedCode("SysML2.NET", "latest")]
public partial class AnnotatingElement : IAnnotatingElement
{
@@ -50,7 +50,7 @@ public partial class AnnotatingElement : IAnnotatingElement
///
/// Various alternative identifiers for this Element. Generally, these will be set by tools.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594312532679_496267_4310", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-aliasIds", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.AliasIds")]
public List AliasIds { get; set; } = [];
@@ -59,7 +59,7 @@ public partial class AnnotatingElement : IAnnotatingElement
/// annotatedElements of the annotations. If annotation is empty, then it is the owningNamespace of the
/// AnnotatingElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594145755058_99428_86", aggregation: AggregationKind.None, lowerValue: 1, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Annotations-AnnotatingElement-annotatedElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IAnnotatingElement.AnnotatedElement")]
public List annotatedElement { get; internal set; } = [];
@@ -67,15 +67,15 @@ public partial class AnnotatingElement : IAnnotatingElement
/// The Annotations that relate this AnnotatingElement to its annotatedElements. This includes the
/// owningAnnotatingRelationship (if any) followed by all the ownedAnnotatingRelationshps.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543094212714_953084_18407", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Root-Annotations-AnnotatingElement-annotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "IAnnotatingElement.Annotation")]
public List annotation { get; internal set; } = [];
///
/// The declared name of this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674987_737648_43307", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredName")]
public string DeclaredName { get; set; }
@@ -85,16 +85,16 @@ public partial class AnnotatingElement : IAnnotatingElement
/// it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a
/// model or relative to some other context.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594160442439_915308_4153", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredShortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredShortName")]
public string DeclaredShortName { get; set; }
///
/// The Documentation owned by this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594150061166_345630_1621", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-documentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.Documentation")]
public List documentation { get; internal set; } = [];
@@ -102,7 +102,7 @@ public partial class AnnotatingElement : IAnnotatingElement
/// The globally unique identifier for this Element. This is intended to be set by tooling, and it must
/// not change during the lifetime of the Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_844338_43305", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-elementId", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ElementId")]
public string ElementId { get; set; }
@@ -113,14 +113,14 @@ public partial class AnnotatingElement : IAnnotatingElement
/// if it is false, then ownedRelationships may not contain any implied Relationships. That is, either
/// all required implied Relationships must be included, or none of them.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070949317_79713_3658", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Element-isImpliedIncluded", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IElement.IsImpliedIncluded")]
public bool IsImpliedIncluded { get; set; }
///
/// Whether this Element is contained in the ownership tree of a library model.
///
- [Property(xmiId: "_19_0_4_12e503d9_1665443500960_5561_723", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-isLibraryElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.IsLibraryElement")]
public bool isLibraryElement { get; internal set; }
@@ -130,7 +130,7 @@ public partial class AnnotatingElement : IAnnotatingElement
/// this is overridden for certain kinds of Elements to compute a name even when the declaredName is
/// null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617485009541_709355_27528", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-name", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Name")]
public string name { get; internal set; }
@@ -138,9 +138,9 @@ public partial class AnnotatingElement : IAnnotatingElement
/// The ownedRelationships of this AnnotatingElement that are Annotations, for which this
/// AnnotatingElement is the annotatingElement.
///
- [Property(xmiId: "_19_0_4_12e503d9_1703019570915_375100_18", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094212714_953084_18407")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Root-Annotations-AnnotatingElement-ownedAnnotatingRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-AnnotatingElement-annotation")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IAnnotatingElement.OwnedAnnotatingRelationship")]
public List ownedAnnotatingRelationship { get; internal set; } = [];
@@ -148,9 +148,9 @@ public partial class AnnotatingElement : IAnnotatingElement
/// The ownedRelationships of this Element that are Annotations, for which this Element is the
/// annotatedElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594152527165_702130_2500", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094430277_599480_18543")]
+ [Property(xmiId: "Root-Elements-Element-ownedAnnotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotation-annotation")]
[Implements(implementation: "IElement.OwnedAnnotation")]
public List ownedAnnotation { get; internal set; } = [];
@@ -158,15 +158,15 @@ public partial class AnnotatingElement : IAnnotatingElement
/// The Elements owned by this Element, derived as the ownedRelatedElements of the ownedRelationships of
/// this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_112608_17278", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-ownedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.OwnedElement")]
public List ownedElement { get; internal set; } = [];
///
/// The Relationships for which this Element is the owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_217766_16748", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-ownedRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwnedRelationship")]
public List OwnedRelationship { get; set; } = [];
@@ -174,25 +174,25 @@ public partial class AnnotatingElement : IAnnotatingElement
/// The owner of this Element, derived as the owningRelatedElement of the owningRelationship of this
/// Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_744477_17277", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-owner", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Owner")]
public Guid? owner { get; internal set; }
///
/// The owningRelationship of this AnnotatingRelationship, if it is an Annotation
///
- [Property(xmiId: "_2022x_2_12e503d9_1735188506571_308678_376", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094212714_953084_18407")]
+ [Property(xmiId: "Root-Annotations-AnnotatingElement-owningAnnotatingRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-AnnotatingElement-annotation")]
[Implements(implementation: "IAnnotatingElement.OwningAnnotatingRelationship")]
public Guid? owningAnnotatingRelationship { get; internal set; }
///
/// The owningRelationship of this Element, if that Relationship is a Membership.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674972_622493_43236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674973_469277_43243")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
+ [Property(xmiId: "Root-Elements-Element-owningMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_memberElement_membership-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
[Implements(implementation: "IElement.OwningMembership")]
public Guid? owningMembership { get; internal set; }
@@ -200,16 +200,16 @@ public partial class AnnotatingElement : IAnnotatingElement
/// The Namespace that owns this Element, which is the membershipOwningNamespace of the owningMembership
/// of this Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_474739_43306", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_717955_43271")]
+ [Property(xmiId: "Root-Elements-Element-owningNamespace", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_member_namespace-namespace")]
[Implements(implementation: "IElement.OwningNamespace")]
public Guid? owningNamespace { get; internal set; }
///
/// The Relationship for which this Element is an ownedRelatedElement, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_482273_43303", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-owningRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwningRelationship")]
public Guid? OwningRelationship { get; set; }
@@ -221,7 +221,7 @@ public partial class AnnotatingElement : IAnnotatingElement
/// Namespace to this Element. If the owningNamespace has other Elements with the same name as this one,
/// then the qualifiedName is null for all such Elements other than the first.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611356604987_900871_594", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-qualifiedName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.QualifiedName")]
public string qualifiedName { get; internal set; }
@@ -231,16 +231,16 @@ public partial class AnnotatingElement : IAnnotatingElement
/// declaredShortName, but this is overridden for certain kinds of Elements to compute a shortName even
/// when the declaredName is null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1673496405504_544235_24", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-shortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ShortName")]
public string shortName { get; internal set; }
///
/// The TextualRepresentations that annotate this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594154758493_640290_3388", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-textualRepresentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.TextualRepresentation")]
public List textualRepresentation { get; internal set; } = [];
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Association.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Association.cs
index b62458f2..b04350d7 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Association.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Association.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright (C) 2022-2025 Starion Group S.A.
+// Copyright (C) 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ namespace SysML2.NET.Core.DTO.Kernel.Associations
/// (in the universe). The co-domains (types) of the associationEnd Features are the relatedTypes, as
/// co-domain and participants (linked things) of an Association identify each other.
///
- [Class(xmiId: "_18_5_3_12e503d9_1533160651716_116234_42240", isAbstract: false, isFinalSpecialization: false, isActive: false)]
+ [Class(xmiId: "Kernel-Associations-Association", isAbstract: false, isFinalSpecialization: false, isActive: false)]
[GeneratedCode("SysML2.NET", "latest")]
public partial class Association : IAssociation
{
@@ -51,7 +51,7 @@ public partial class Association : IAssociation
///
/// Various alternative identifiers for this Element. Generally, these will be set by tools.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594312532679_496267_4310", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-aliasIds", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.AliasIds")]
public List AliasIds { get; set; } = [];
@@ -60,15 +60,15 @@ public partial class Association : IAssociation
/// Association must have at least two associationEnds. When it has exactly two, the Association is
/// called a binary Association.
///
- [Property(xmiId: "_18_5_3_12e503d9_1562477648742_24204_22901", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1562476168385_824569_22106")]
+ [Property(xmiId: "Kernel-Associations-Association-associationEnd", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Core-Types-Type-endFeature")]
[Implements(implementation: "IAssociation.AssociationEnd")]
public List associationEnd { get; internal set; } = [];
///
/// The declared name of this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674987_737648_43307", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredName")]
public string DeclaredName { get; set; }
@@ -78,7 +78,7 @@ public partial class Association : IAssociation
/// it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a
/// model or relative to some other context.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594160442439_915308_4153", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredShortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredShortName")]
public string DeclaredShortName { get; set; }
@@ -91,24 +91,24 @@ public partial class Association : IAssociation
/// their children not of that sex (because the interpretations of the children Feature that identify
/// those of that sex are also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661975883472_645501_1372", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-differencingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.DifferencingType")]
public List differencingType { get; internal set; } = [];
///
/// The features of this Type that have a non-null direction.
///
- [Property(xmiId: "_19_0_4_12e503d9_1623952188842_882068_37169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-directedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.DirectedFeature")]
public List directedFeature { get; internal set; } = [];
///
/// The Documentation owned by this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594150061166_345630_1621", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-documentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.Documentation")]
public List documentation { get; internal set; } = [];
@@ -116,15 +116,15 @@ public partial class Association : IAssociation
/// The globally unique identifier for this Element. This is intended to be set by tooling, and it must
/// not change during the lifetime of the Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_844338_43305", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-elementId", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ElementId")]
public string ElementId { get; set; }
///
/// All features of this Type with isEnd = true.
///
- [Property(xmiId: "_18_5_3_12e503d9_1562476168385_824569_22106", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-endFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[RedefinedByProperty("IAssociation.AssociationEnd")]
[Implements(implementation: "IType.EndFeature")]
List Core.Types.IType.endFeature => [.. this.associationEnd];
@@ -132,8 +132,8 @@ public partial class Association : IAssociation
///
/// The ownedMemberFeatures of the featureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_326391_43166", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Core-Types-Type-feature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "IType.Feature")]
public List feature { get; internal set; } = [];
@@ -142,23 +142,23 @@ public partial class Association : IAssociation
/// those inheritedMemberships that are FeatureMemberships (but does not include any
/// importedMemberships).
///
- [Property(xmiId: "_19_0_4_12e503d9_1651076866512_962346_485", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-featureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.FeatureMembership")]
public List featureMembership { get; internal set; } = [];
///
/// The Memberships in this Namespace that result from the ownedImports of this Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_207869_43270", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Root-Namespaces-Namespace-importedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "INamespace.ImportedMembership")]
public List importedMembership { get; internal set; } = [];
///
/// All the memberFeatures of the inheritedMemberships of this Type that are FeatureMemberships.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575499020770_15576_2334", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-inheritedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.InheritedFeature")]
public List inheritedFeature { get; internal set; } = [];
@@ -166,16 +166,16 @@ public partial class Association : IAssociation
/// All Memberships inherited by this Type via Specialization or Conjugation. These are included in the
/// derived union for the memberships of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1551972927538_787976_19004", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Core-Types-Type-inheritedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "IType.InheritedMembership")]
public List inheritedMembership { get; internal set; } = [];
///
/// All features related to this Type by FeatureMemberships that have direction in or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_37384_43169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-input", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Input")]
public List input { get; internal set; } = [];
@@ -188,7 +188,7 @@ public partial class Association : IAssociation
/// of that sex (because the interpretations of the children Feature that identify those of that sex are
/// also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661973922199_584242_1045", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-intersectingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IntersectingType")]
public List intersectingType { get; internal set; } = [];
@@ -196,14 +196,14 @@ public partial class Association : IAssociation
/// Indicates whether instances of this Type must also be instances of at least one of its specialized
/// Types.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_741353_43165", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isAbstract", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsAbstract")]
public bool IsAbstract { get; set; }
///
/// Indicates whether this Type has an ownedConjugator.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575485930816_796088_1933", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-isConjugated", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IsConjugated")]
public bool isConjugated { get; internal set; }
@@ -211,7 +211,7 @@ public partial class Association : IAssociation
/// Whether this Relationship was generated by tooling to meet semantic rules, rather than being
/// directly created by a modeler.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070829631_521257_3623", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Relationship-isImplied", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IRelationship.IsImplied")]
public bool IsImplied { get; set; }
@@ -222,26 +222,26 @@ public partial class Association : IAssociation
/// if it is false, then ownedRelationships may not contain any implied Relationships. That is, either
/// all required implied Relationships must be included, or none of them.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070949317_79713_3658", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Element-isImpliedIncluded", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IElement.IsImpliedIncluded")]
public bool IsImpliedIncluded { get; set; }
///
/// Whether this Element is contained in the ownership tree of a library model.
///
- [Property(xmiId: "_19_0_4_12e503d9_1665443500960_5561_723", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-isLibraryElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.IsLibraryElement")]
public bool isLibraryElement { get; internal set; }
///
/// Whether all things that meet the classification conditions of this Type must be classified by the
- /// Type.(A Type gives conditions that must be met by whatever it classifies, but when isSufficient
- /// is false, things may meet those conditions but still not be classified by the Type. For example, a
- /// Type Car that is not sufficient could require everything it classifies to have four wheels, but not
- /// all four wheeled things would classify as cars. However, if the Type Car were sufficient, it would
- /// classify all four-wheeled things.)
+ /// Type. (A Type gives conditions that must be met by whatever it classifies, but when
+ /// isSufficient is false, things may meet those conditions but still not be classified by the Type. For
+ /// example, a Type Car that is not sufficient could require everything it classifies to have four
+ /// wheels, but not all four wheeled things would classify as cars. However, if the Type Car were
+ /// sufficient, it would classify all four-wheeled things.)
///
- [Property(xmiId: "_18_5_3_b9102da_1564072709069_937523_30797", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isSufficient", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsSufficient")]
public bool IsSufficient { get; set; }
@@ -249,7 +249,7 @@ public partial class Association : IAssociation
/// The set of all member Elements of this Namespace, which are the memberElements of all memberships of
/// the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_644335_43267", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-member", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Member")]
public List member { get; internal set; } = [];
@@ -257,7 +257,7 @@ public partial class Association : IAssociation
/// All Memberships in this Namespace, including (at least) the union of ownedMemberships and
/// importedMemberships.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674962_198288_43183", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-membership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Membership")]
public List membership { get; internal set; } = [];
@@ -266,8 +266,8 @@ public partial class Association : IAssociation
/// If there is no such ownedMember, then the cardinality of this Type is constrained by all the
/// Multiplicity constraints applicable to any direct supertypes.
///
- [Property(xmiId: "_19_0_2_12e503d9_1573095852093_324833_5396", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-multiplicity", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.Multiplicity")]
public Guid? multiplicity { get; internal set; }
@@ -277,15 +277,15 @@ public partial class Association : IAssociation
/// this is overridden for certain kinds of Elements to compute a name even when the declaredName is
/// null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617485009541_709355_27528", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-name", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Name")]
public string name { get; internal set; }
///
/// All features related to this Type by FeatureMemberships that have direction out or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_365618_43170", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-output", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Output")]
public List output { get; internal set; } = [];
@@ -293,18 +293,18 @@ public partial class Association : IAssociation
/// The ownedRelationships of this Element that are Annotations, for which this Element is the
/// annotatedElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594152527165_702130_2500", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094430277_599480_18543")]
+ [Property(xmiId: "Root-Elements-Element-ownedAnnotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotation-annotation")]
[Implements(implementation: "IElement.OwnedAnnotation")]
public List ownedAnnotation { get; internal set; } = [];
///
/// A Conjugation owned by this Type for which the Type is the originalType.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575482646809_280165_440", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1575482490144_309557_300")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedConjugator", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-A_conjugatedType_conjugator-conjugator")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedConjugator")]
public Guid? ownedConjugator { get; internal set; }
@@ -312,9 +312,9 @@ public partial class Association : IAssociation
/// The ownedRelationships of this Type that are Differencings, having this Type as their
/// typeDifferenced.
///
- [Property(xmiId: "_19_0_4_b9102da_1661871168454_98082_797", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedDifferencing", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedDifferencing")]
public List ownedDifferencing { get; internal set; } = [];
@@ -322,9 +322,9 @@ public partial class Association : IAssociation
/// The ownedRelationships of this Type that are Disjoinings, for which the Type is the typeDisjoined
/// Type.
///
- [Property(xmiId: "_19_0_4_12e503d9_1627447519613_145554_370", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_19_0_4_b9102da_1623183194914_502526_616")]
+ [Property(xmiId: "Core-Types-Type-ownedDisjoining", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_disjoiningTypeDisjoining_typeDisjoined-disjoiningTypeDisjoining")]
[Implements(implementation: "IType.OwnedDisjoining")]
public List ownedDisjoining { get; internal set; } = [];
@@ -332,24 +332,24 @@ public partial class Association : IAssociation
/// The Elements owned by this Element, derived as the ownedRelatedElements of the ownedRelationships of
/// this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_112608_17278", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-ownedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.OwnedElement")]
public List ownedElement { get; internal set; } = [];
///
/// All endFeatures of this Type that are ownedFeatures.
///
- [Property(xmiId: "_18_5_3_12e503d9_1563834516278_687758_20652", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1562476168385_824569_22106")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_226999_43167")]
+ [Property(xmiId: "Core-Types-Type-ownedEndFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-endFeature")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedFeature")]
[Implements(implementation: "IType.OwnedEndFeature")]
public List ownedEndFeature { get; internal set; } = [];
///
/// The ownedMemberFeatures of the ownedFeatureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_226999_43167", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-ownedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.OwnedFeature")]
public List ownedFeature { get; internal set; } = [];
@@ -357,9 +357,9 @@ public partial class Association : IAssociation
/// The ownedMemberships of this Type that are FeatureMemberships, for which the Type is the owningType.
/// Each such FeatureMembership identifies an ownedFeature of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_868417_43171", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_190614_43269")]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1651076866512_962346_485")]
+ [Property(xmiId: "Core-Types-Type-ownedFeatureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMembership")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-featureMembership")]
[Implements(implementation: "IType.OwnedFeatureMembership")]
public List ownedFeatureMembership { get; internal set; } = [];
@@ -367,18 +367,18 @@ public partial class Association : IAssociation
/// The ownedRelationships of this Namespace that are Imports, for which the Namespace is the
/// importOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674974_746786_43247", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedImport", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "INamespace.OwnedImport")]
public List ownedImport { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Intersectings, have the Type as their typeIntersected.
///
- [Property(xmiId: "_19_0_4_b9102da_1623242552144_910757_524", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedIntersecting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedIntersecting")]
public List ownedIntersecting { get; internal set; } = [];
@@ -386,8 +386,8 @@ public partial class Association : IAssociation
/// The owned members of this Namespace, which are the ownedMemberElements of the ownedMemberships
/// of the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_259543_43268", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMember", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "INamespace.OwnedMember")]
public List ownedMember { get; internal set; } = [];
@@ -395,26 +395,26 @@ public partial class Association : IAssociation
/// The ownedRelationships of this Namespace that are Memberships, for which the Namespace is the
/// membershipOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_190614_43269", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "INamespace.OwnedMembership")]
public List ownedMembership { get; internal set; } = [];
///
/// The relatedElements of this Relationship that are owned by the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_59873_43302", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-ownedRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwnedRelatedElement")]
public List OwnedRelatedElement { get; set; } = [];
///
/// The Relationships for which this Element is the owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_217766_16748", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-ownedRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwnedRelationship")]
public List OwnedRelationship { get; set; } = [];
@@ -422,9 +422,9 @@ public partial class Association : IAssociation
/// The ownedRelationships of this Type that are Specializations, for which the Type is the specific
/// Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_579676_43168", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674984_558067_43292")]
+ [Property(xmiId: "Core-Types-Type-ownedSpecialization", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_specific_specialization-specialization")]
[Implements(implementation: "IType.OwnedSpecialization")]
public List ownedSpecialization { get; internal set; } = [];
@@ -432,17 +432,17 @@ public partial class Association : IAssociation
/// The ownedSpecializations of this Classifier that are Subclassifications, for which this Classifier
/// is the subclassifier.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543189170643_419862_25507", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_579676_43168")]
+ [Property(xmiId: "Core-Classifiers-Classifier-ownedSubclassification", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedSpecialization")]
[Implements(implementation: "IClassifier.OwnedSubclassification")]
public List ownedSubclassification { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Unionings, having the Type as their typeUnioned.
///
- [Property(xmiId: "_19_0_4_b9102da_1661869978505_968809_460", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Core-Types-Type-ownedUnioning", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "IType.OwnedUnioning")]
public List ownedUnioning { get; internal set; } = [];
@@ -450,16 +450,16 @@ public partial class Association : IAssociation
/// The owner of this Element, derived as the owningRelatedElement of the owningRelationship of this
/// Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_744477_17277", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-owner", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Owner")]
public Guid? owner { get; internal set; }
///
/// The owningRelationship of this Element, if that Relationship is a Membership.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674972_622493_43236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674973_469277_43243")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
+ [Property(xmiId: "Root-Elements-Element-owningMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_memberElement_membership-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
[Implements(implementation: "IElement.OwningMembership")]
public Guid? owningMembership { get; internal set; }
@@ -467,24 +467,24 @@ public partial class Association : IAssociation
/// The Namespace that owns this Element, which is the membershipOwningNamespace of the owningMembership
/// of this Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_474739_43306", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_717955_43271")]
+ [Property(xmiId: "Root-Elements-Element-owningNamespace", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_member_namespace-namespace")]
[Implements(implementation: "IElement.OwningNamespace")]
public Guid? owningNamespace { get; internal set; }
///
/// The relatedElement of this Relationship that owns the Relationship, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_693018_16749", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-owningRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwningRelatedElement")]
public Guid? OwningRelatedElement { get; set; }
///
/// The Relationship for which this Element is an ownedRelatedElement, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_482273_43303", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-owningRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwningRelationship")]
public Guid? OwningRelationship { get; set; }
@@ -496,7 +496,7 @@ public partial class Association : IAssociation
/// Namespace to this Element. If the owningNamespace has other Elements with the same name as this one,
/// then the qualifiedName is null for all such Elements other than the first.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611356604987_900871_594", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-qualifiedName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.QualifiedName")]
public string qualifiedName { get; internal set; }
@@ -504,7 +504,7 @@ public partial class Association : IAssociation
/// The Elements that are related by this Relationship, derived as the union of the source and target
/// Elements of the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674961_132339_43177", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Relationship-relatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
[RedefinedByProperty("IAssociation.RelatedType")]
[Implements(implementation: "IRelationship.RelatedElement")]
List Root.Elements.IRelationship.relatedElement => [.. this.relatedType];
@@ -513,8 +513,8 @@ public partial class Association : IAssociation
/// The types of the associationEnds of the Association, which are the relatedElements of the
/// Association considered as a Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674994_4339_43349", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Kernel-Associations-Association-relatedType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IAssociation.RelatedType")]
public List relatedType { get; internal set; } = [];
@@ -524,15 +524,15 @@ public partial class Association : IAssociation
/// declaredShortName, but this is overridden for certain kinds of Elements to compute a shortName even
/// when the declaredName is null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1673496405504_544235_24", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-shortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ShortName")]
public string shortName { get; internal set; }
///
/// The relatedElements from which this Relationship is considered to be directed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674971_696758_43228", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-source", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[RedefinedByProperty("IAssociation.SourceType")]
[Implements(implementation: "IRelationship.Source")]
List Root.Elements.IRelationship.Source
@@ -544,17 +544,17 @@ List Root.Elements.IRelationship.Source
///
/// The source relatedType for this Association. It is the first relatedType of the Association.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594939013292_377668_3566", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674994_4339_43349")]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_696758_43228")]
+ [Property(xmiId: "Kernel-Associations-Association-sourceType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Kernel-Associations-Association-relatedType")]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-source")]
[Implements(implementation: "IAssociation.SourceType")]
public Guid? sourceType { get; internal set; }
///
/// The relatedElements to which this Relationship is considered to be directed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674961_138197_43179", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-target", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[RedefinedByProperty("IAssociation.TargetType")]
[Implements(implementation: "IRelationship.Target")]
List Root.Elements.IRelationship.Target
@@ -567,18 +567,18 @@ List Root.Elements.IRelationship.Target
/// The target relatedTypes for this Association. This includes all the relatedTypes other than the
/// sourceType.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594939237325_861933_3707", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674994_4339_43349")]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_138197_43179")]
+ [Property(xmiId: "Kernel-Associations-Association-targetType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Kernel-Associations-Association-relatedType")]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-target")]
[Implements(implementation: "IAssociation.TargetType")]
public List targetType { get; internal set; } = [];
///
/// The TextualRepresentations that annotate this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594154758493_640290_3388", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-textualRepresentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.TextualRepresentation")]
public List textualRepresentation { get; internal set; } = [];
@@ -589,7 +589,7 @@ List Root.Elements.IRelationship.Target
/// Similarly, a feature for people's children might be the union of features dividing them in the
/// same ways as people in general.
///
- [Property(xmiId: "_19_0_4_b9102da_1661974896766_783268_1231", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-unioningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.UnioningType")]
public List unioningType { get; internal set; } = [];
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Dependency.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Dependency.cs
index 6fc59c13..ee8942ed 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Dependency.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Dependency.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright (C) 2022-2025 Starion Group S.A.
+// Copyright (C) 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -34,10 +34,10 @@ namespace SysML2.NET.Core.DTO.Root.Dependencies
///
/// A Dependency is a Relationship that indicates that one or more client Elements require one more
/// supplier Elements for their complete specification. In general, this means that a change to one of
- /// the supplier Elements may necessitate a change to, or re-specification of, the client Elements.Note
- /// that a Dependency is entirely a model-level Relationship, without instance-level semantics.
+ /// the supplier Elements may necessitate a change to, or re-specification of, the client Elements.
+ /// Note that a Dependency is entirely a model-level Relationship, without instance-level semantics.
///
- [Class(xmiId: "_19_0_2_12e503d9_1594006219028_628649_74", isAbstract: false, isFinalSpecialization: false, isActive: false)]
+ [Class(xmiId: "Root-Dependencies-Dependency", isAbstract: false, isFinalSpecialization: false, isActive: false)]
[GeneratedCode("SysML2.NET", "latest")]
public partial class Dependency : IDependency
{
@@ -51,22 +51,22 @@ public partial class Dependency : IDependency
///
/// Various alternative identifiers for this Element. Generally, these will be set by tools.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594312532679_496267_4310", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-aliasIds", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.AliasIds")]
public List AliasIds { get; set; } = [];
///
/// The Element or Elements dependent on the supplier Elements.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594006406653_175551_182", aggregation: AggregationKind.None, lowerValue: 1, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_696758_43228")]
+ [Property(xmiId: "Root-Dependencies-Dependency-client", aggregation: AggregationKind.None, lowerValue: 1, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-source")]
[Implements(implementation: "IDependency.Client")]
public List Client { get; set; } = [];
///
/// The declared name of this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674987_737648_43307", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredName")]
public string DeclaredName { get; set; }
@@ -76,16 +76,16 @@ public partial class Dependency : IDependency
/// it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a
/// model or relative to some other context.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594160442439_915308_4153", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredShortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredShortName")]
public string DeclaredShortName { get; set; }
///
/// The Documentation owned by this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594150061166_345630_1621", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-documentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.Documentation")]
public List documentation { get; internal set; } = [];
@@ -93,7 +93,7 @@ public partial class Dependency : IDependency
/// The globally unique identifier for this Element. This is intended to be set by tooling, and it must
/// not change during the lifetime of the Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_844338_43305", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-elementId", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ElementId")]
public string ElementId { get; set; }
@@ -101,7 +101,7 @@ public partial class Dependency : IDependency
/// Whether this Relationship was generated by tooling to meet semantic rules, rather than being
/// directly created by a modeler.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070829631_521257_3623", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Relationship-isImplied", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IRelationship.IsImplied")]
public bool IsImplied { get; set; }
@@ -112,14 +112,14 @@ public partial class Dependency : IDependency
/// if it is false, then ownedRelationships may not contain any implied Relationships. That is, either
/// all required implied Relationships must be included, or none of them.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070949317_79713_3658", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Element-isImpliedIncluded", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IElement.IsImpliedIncluded")]
public bool IsImpliedIncluded { get; set; }
///
/// Whether this Element is contained in the ownership tree of a library model.
///
- [Property(xmiId: "_19_0_4_12e503d9_1665443500960_5561_723", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-isLibraryElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.IsLibraryElement")]
public bool isLibraryElement { get; internal set; }
@@ -129,7 +129,7 @@ public partial class Dependency : IDependency
/// this is overridden for certain kinds of Elements to compute a name even when the declaredName is
/// null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617485009541_709355_27528", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-name", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Name")]
public string name { get; internal set; }
@@ -137,9 +137,9 @@ public partial class Dependency : IDependency
/// The ownedRelationships of this Element that are Annotations, for which this Element is the
/// annotatedElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594152527165_702130_2500", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094430277_599480_18543")]
+ [Property(xmiId: "Root-Elements-Element-ownedAnnotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotation-annotation")]
[Implements(implementation: "IElement.OwnedAnnotation")]
public List ownedAnnotation { get; internal set; } = [];
@@ -147,23 +147,23 @@ public partial class Dependency : IDependency
/// The Elements owned by this Element, derived as the ownedRelatedElements of the ownedRelationships of
/// this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_112608_17278", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-ownedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.OwnedElement")]
public List ownedElement { get; internal set; } = [];
///
/// The relatedElements of this Relationship that are owned by the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_59873_43302", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-ownedRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwnedRelatedElement")]
public List OwnedRelatedElement { get; set; } = [];
///
/// The Relationships for which this Element is the owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_217766_16748", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-ownedRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwnedRelationship")]
public List OwnedRelationship { get; set; } = [];
@@ -171,16 +171,16 @@ public partial class Dependency : IDependency
/// The owner of this Element, derived as the owningRelatedElement of the owningRelationship of this
/// Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_744477_17277", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-owner", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Owner")]
public Guid? owner { get; internal set; }
///
/// The owningRelationship of this Element, if that Relationship is a Membership.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674972_622493_43236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674973_469277_43243")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
+ [Property(xmiId: "Root-Elements-Element-owningMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_memberElement_membership-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
[Implements(implementation: "IElement.OwningMembership")]
public Guid? owningMembership { get; internal set; }
@@ -188,24 +188,24 @@ public partial class Dependency : IDependency
/// The Namespace that owns this Element, which is the membershipOwningNamespace of the owningMembership
/// of this Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_474739_43306", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_717955_43271")]
+ [Property(xmiId: "Root-Elements-Element-owningNamespace", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_member_namespace-namespace")]
[Implements(implementation: "IElement.OwningNamespace")]
public Guid? owningNamespace { get; internal set; }
///
/// The relatedElement of this Relationship that owns the Relationship, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_693018_16749", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-owningRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwningRelatedElement")]
public Guid? OwningRelatedElement { get; set; }
///
/// The Relationship for which this Element is an ownedRelatedElement, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_482273_43303", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-owningRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwningRelationship")]
public Guid? OwningRelationship { get; set; }
@@ -217,7 +217,7 @@ public partial class Dependency : IDependency
/// Namespace to this Element. If the owningNamespace has other Elements with the same name as this one,
/// then the qualifiedName is null for all such Elements other than the first.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611356604987_900871_594", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-qualifiedName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.QualifiedName")]
public string qualifiedName { get; internal set; }
@@ -225,7 +225,7 @@ public partial class Dependency : IDependency
/// The Elements that are related by this Relationship, derived as the union of the source and target
/// Elements of the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674961_132339_43177", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Relationship-relatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
[Implements(implementation: "IRelationship.RelatedElement")]
public List relatedElement { get; internal set; } = [];
@@ -235,15 +235,15 @@ public partial class Dependency : IDependency
/// declaredShortName, but this is overridden for certain kinds of Elements to compute a shortName even
/// when the declaredName is null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1673496405504_544235_24", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-shortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ShortName")]
public string shortName { get; internal set; }
///
/// The relatedElements from which this Relationship is considered to be directed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674971_696758_43228", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-source", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[RedefinedByProperty("IDependency.Client")]
[Implements(implementation: "IRelationship.Source")]
List Root.Elements.IRelationship.Source
@@ -258,16 +258,16 @@ List Root.Elements.IRelationship.Source
///
/// The Element or Elements on which the client Elements depend in some respect.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594006525044_548771_207", aggregation: AggregationKind.None, lowerValue: 1, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_138197_43179")]
+ [Property(xmiId: "Root-Dependencies-Dependency-supplier", aggregation: AggregationKind.None, lowerValue: 1, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-target")]
[Implements(implementation: "IDependency.Supplier")]
public List Supplier { get; set; } = [];
///
/// The relatedElements to which this Relationship is considered to be directed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674961_138197_43179", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-target", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[RedefinedByProperty("IDependency.Supplier")]
[Implements(implementation: "IRelationship.Target")]
List Root.Elements.IRelationship.Target
@@ -282,9 +282,9 @@ List Root.Elements.IRelationship.Target
///
/// The TextualRepresentations that annotate this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594154758493_640290_3388", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-textualRepresentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.TextualRepresentation")]
public List textualRepresentation { get; internal set; } = [];
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/EnumerationDefinition.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/EnumerationDefinition.cs
index 9eb01776..5eb45632 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/EnumerationDefinition.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/EnumerationDefinition.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright (C) 2022-2025 Starion Group S.A.
+// Copyright (C) 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -36,7 +36,7 @@ namespace SysML2.NET.Core.DTO.Systems.Enumerations
/// list of enumeratedValues. This is realized by requiring that the EnumerationDefinition have
/// isVariation = true, with the enumeratedValues being its variants.
///
- [Class(xmiId: "_19_0_4_12e503d9_1606946467364_179493_153", isAbstract: false, isFinalSpecialization: false, isActive: false)]
+ [Class(xmiId: "Systems-Enumerations-EnumerationDefinition", isAbstract: false, isFinalSpecialization: false, isActive: false)]
[GeneratedCode("SysML2.NET", "latest")]
public partial class EnumerationDefinition : IEnumerationDefinition
{
@@ -50,14 +50,14 @@ public partial class EnumerationDefinition : IEnumerationDefinition
///
/// Various alternative identifiers for this Element. Generally, these will be set by tools.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594312532679_496267_4310", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-aliasIds", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.AliasIds")]
public List AliasIds { get; set; } = [];
///
/// The declared name of this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674987_737648_43307", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredName")]
public string DeclaredName { get; set; }
@@ -67,7 +67,7 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a
/// model or relative to some other context.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594160442439_915308_4153", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredShortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredShortName")]
public string DeclaredShortName { get; set; }
@@ -80,33 +80,33 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// their children not of that sex (because the interpretations of the children Feature that identify
/// those of that sex are also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661975883472_645501_1372", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-differencingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.DifferencingType")]
public List differencingType { get; internal set; } = [];
///
/// The features of this Type that have a non-null direction.
///
- [Property(xmiId: "_19_0_4_12e503d9_1623952188842_882068_37169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-directedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.DirectedFeature")]
public List directedFeature { get; internal set; } = [];
///
/// The usages of this Definition that are directedFeatures.
///
- [Property(xmiId: "_18_5_3_12e503d9_1565495064714_974634_26150", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565498571495_48981_27786")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-directedUsage", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-usage")]
[Implements(implementation: "IDefinition.DirectedUsage")]
public List directedUsage { get; internal set; } = [];
///
/// The Documentation owned by this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594150061166_345630_1621", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-documentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.Documentation")]
public List documentation { get; internal set; } = [];
@@ -114,15 +114,15 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// The globally unique identifier for this Element. This is intended to be set by tooling, and it must
/// not change during the lifetime of the Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_844338_43305", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-elementId", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ElementId")]
public string ElementId { get; set; }
///
/// All features of this Type with isEnd = true.
///
- [Property(xmiId: "_18_5_3_12e503d9_1562476168385_824569_22106", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-endFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.EndFeature")]
public List endFeature { get; internal set; } = [];
@@ -130,16 +130,16 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// EnumerationUsages of this EnumerationDefinitionthat have distinct, fixed values. Each
/// enumeratedValue specifies one of the allowed instances of the EnumerationDefinition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1606946634788_959145_265", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_19_0_2_12e503d9_1590979457191_746167_951")]
+ [Property(xmiId: "Systems-Enumerations-EnumerationDefinition-enumeratedValue", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-variant")]
[Implements(implementation: "IEnumerationDefinition.EnumeratedValue")]
public List enumeratedValue { get; internal set; } = [];
///
/// The ownedMemberFeatures of the featureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_326391_43166", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Core-Types-Type-feature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "IType.Feature")]
public List feature { get; internal set; } = [];
@@ -148,23 +148,23 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// those inheritedMemberships that are FeatureMemberships (but does not include any
/// importedMemberships).
///
- [Property(xmiId: "_19_0_4_12e503d9_1651076866512_962346_485", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-featureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.FeatureMembership")]
public List featureMembership { get; internal set; } = [];
///
/// The Memberships in this Namespace that result from the ownedImports of this Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_207869_43270", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Root-Namespaces-Namespace-importedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "INamespace.ImportedMembership")]
public List importedMembership { get; internal set; } = [];
///
/// All the memberFeatures of the inheritedMemberships of this Type that are FeatureMemberships.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575499020770_15576_2334", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-inheritedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.InheritedFeature")]
public List inheritedFeature { get; internal set; } = [];
@@ -172,16 +172,16 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// All Memberships inherited by this Type via Specialization or Conjugation. These are included in the
/// derived union for the memberships of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1551972927538_787976_19004", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Core-Types-Type-inheritedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "IType.InheritedMembership")]
public List inheritedMembership { get; internal set; } = [];
///
/// All features related to this Type by FeatureMemberships that have direction in or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_37384_43169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-input", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Input")]
public List input { get; internal set; } = [];
@@ -194,7 +194,7 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// of that sex (because the interpretations of the children Feature that identify those of that sex are
/// also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661973922199_584242_1045", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-intersectingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IntersectingType")]
public List intersectingType { get; internal set; } = [];
@@ -202,14 +202,14 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// Indicates whether instances of this Type must also be instances of at least one of its specialized
/// Types.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_741353_43165", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isAbstract", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsAbstract")]
public bool IsAbstract { get; set; }
///
/// Indicates whether this Type has an ownedConjugator.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575485930816_796088_1933", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-isConjugated", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IsConjugated")]
public bool isConjugated { get; internal set; }
@@ -220,26 +220,26 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// if it is false, then ownedRelationships may not contain any implied Relationships. That is, either
/// all required implied Relationships must be included, or none of them.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070949317_79713_3658", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Element-isImpliedIncluded", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IElement.IsImpliedIncluded")]
public bool IsImpliedIncluded { get; set; }
///
/// Whether this Element is contained in the ownership tree of a library model.
///
- [Property(xmiId: "_19_0_4_12e503d9_1665443500960_5561_723", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-isLibraryElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.IsLibraryElement")]
public bool isLibraryElement { get; internal set; }
///
/// Whether all things that meet the classification conditions of this Type must be classified by the
- /// Type.(A Type gives conditions that must be met by whatever it classifies, but when isSufficient
- /// is false, things may meet those conditions but still not be classified by the Type. For example, a
- /// Type Car that is not sufficient could require everything it classifies to have four wheels, but not
- /// all four wheeled things would classify as cars. However, if the Type Car were sufficient, it would
- /// classify all four-wheeled things.)
+ /// Type. (A Type gives conditions that must be met by whatever it classifies, but when
+ /// isSufficient is false, things may meet those conditions but still not be classified by the Type. For
+ /// example, a Type Car that is not sufficient could require everything it classifies to have four
+ /// wheels, but not all four wheeled things would classify as cars. However, if the Type Car were
+ /// sufficient, it would classify all four-wheeled things.)
///
- [Property(xmiId: "_18_5_3_b9102da_1564072709069_937523_30797", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isSufficient", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsSufficient")]
public bool IsSufficient { get; set; }
@@ -247,8 +247,8 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its
/// enumerationValues.
///
- [Property(xmiId: "_19_0_4_12e503d9_1606946783667_895456_287", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "true")]
- [RedefinedProperty(propertyName: "_19_0_2_12e503d9_1590978283180_265362_419")]
+ [Property(xmiId: "Systems-Enumerations-EnumerationDefinition-isVariation", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "true")]
+ [RedefinedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-isVariation")]
[Implements(implementation: "IEnumerationDefinition.IsVariation")]
public bool IsVariation { get; set; } = true;
@@ -256,7 +256,7 @@ public partial class EnumerationDefinition : IEnumerationDefinition
/// Whether this Definition is for a variation point or not. If true, then all the memberships of the
/// Definition must be VariantMemberships.
///
- [Property(xmiId: "_19_0_2_12e503d9_1590978283180_265362_419", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-isVariation", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[RedefinedByProperty("IEnumerationDefinition.IsVariation")]
[Implements(implementation: "IDefinition.IsVariation")]
bool Systems.DefinitionAndUsage.IDefinition.IsVariation
@@ -272,7 +272,7 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The set of all member Elements of this Namespace, which are the memberElements of all memberships of
/// the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_644335_43267", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-member", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Member")]
public List member { get; internal set; } = [];
@@ -280,7 +280,7 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// All Memberships in this Namespace, including (at least) the union of ownedMemberships and
/// importedMemberships.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674962_198288_43183", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-membership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Membership")]
public List membership { get; internal set; } = [];
@@ -289,8 +289,8 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// If there is no such ownedMember, then the cardinality of this Type is constrained by all the
/// Multiplicity constraints applicable to any direct supertypes.
///
- [Property(xmiId: "_19_0_2_12e503d9_1573095852093_324833_5396", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-multiplicity", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.Multiplicity")]
public Guid? multiplicity { get; internal set; }
@@ -300,39 +300,39 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// this is overridden for certain kinds of Elements to compute a name even when the declaredName is
/// null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617485009541_709355_27528", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-name", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Name")]
public string name { get; internal set; }
///
/// All features related to this Type by FeatureMemberships that have direction out or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_365618_43170", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-output", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Output")]
public List output { get; internal set; } = [];
///
/// The ActionUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591479011613_547927_1091", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1618943849505_989631_257")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedAction", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedOccurrence")]
[Implements(implementation: "IDefinition.OwnedAction")]
public List ownedAction { get; internal set; } = [];
///
/// The AllocationUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611430819239_430196_1024", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591480607506_951212_2333")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedAllocation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedConnection")]
[Implements(implementation: "IDefinition.OwnedAllocation")]
public List ownedAllocation { get; internal set; } = [];
///
/// The AnalysisCaseUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591152747086_367030_3846", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_59601fc_1590257108055_7496_483")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedAnalysisCase", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedCase")]
[Implements(implementation: "IDefinition.OwnedAnalysisCase")]
public List ownedAnalysisCase { get; internal set; } = [];
@@ -340,50 +340,50 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedRelationships of this Element that are Annotations, for which this Element is the
/// annotatedElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594152527165_702130_2500", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094430277_599480_18543")]
+ [Property(xmiId: "Root-Elements-Element-ownedAnnotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotation-annotation")]
[Implements(implementation: "IElement.OwnedAnnotation")]
public List ownedAnnotation { get; internal set; } = [];
///
/// The AttributeUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591500614097_490259_4413", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565479686637_967933_23236")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedAttribute", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedUsage")]
[Implements(implementation: "IDefinition.OwnedAttribute")]
public List ownedAttribute { get; internal set; } = [];
///
/// The CalculationUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1588215335104_898924_667", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591479011613_547927_1091")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedCalculation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedAction")]
[Implements(implementation: "IDefinition.OwnedCalculation")]
public List ownedCalculation { get; internal set; } = [];
///
/// The code>CaseUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_59601fc_1590257108055_7496_483", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1588215335104_898924_667")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedCase", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedCalculation")]
[Implements(implementation: "IDefinition.OwnedCase")]
public List ownedCase { get; internal set; } = [];
///
/// The ConcernUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617051597354_928367_1357", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1583000559760_444344_1273")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedConcern", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedRequirement")]
[Implements(implementation: "IDefinition.OwnedConcern")]
public List ownedConcern { get; internal set; } = [];
///
/// A Conjugation owned by this Type for which the Type is the originalType.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575482646809_280165_440", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1575482490144_309557_300")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedConjugator", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-A_conjugatedType_conjugator-conjugator")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedConjugator")]
public Guid? ownedConjugator { get; internal set; }
@@ -392,16 +392,16 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// BindingConnectorAsUsages, SuccessionAsUsages, and FlowUsages because these are ConnectorAsUsages
/// even though they are not ConnectionUsages.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591480607506_951212_2333", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565479686637_967933_23236")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedConnection", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedUsage")]
[Implements(implementation: "IDefinition.OwnedConnection")]
public List ownedConnection { get; internal set; } = [];
///
/// The ConstraintUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1578068081992_244000_1803", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1618943849505_989631_257")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedConstraint", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedOccurrence")]
[Implements(implementation: "IDefinition.OwnedConstraint")]
public List ownedConstraint { get; internal set; } = [];
@@ -409,9 +409,9 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedRelationships of this Type that are Differencings, having this Type as their
/// typeDifferenced.
///
- [Property(xmiId: "_19_0_4_b9102da_1661871168454_98082_797", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedDifferencing", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedDifferencing")]
public List ownedDifferencing { get; internal set; } = [];
@@ -419,9 +419,9 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedRelationships of this Type that are Disjoinings, for which the Type is the typeDisjoined
/// Type.
///
- [Property(xmiId: "_19_0_4_12e503d9_1627447519613_145554_370", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_19_0_4_b9102da_1623183194914_502526_616")]
+ [Property(xmiId: "Core-Types-Type-ownedDisjoining", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_disjoiningTypeDisjoining_typeDisjoined-disjoiningTypeDisjoining")]
[Implements(implementation: "IType.OwnedDisjoining")]
public List ownedDisjoining { get; internal set; } = [];
@@ -429,32 +429,32 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The Elements owned by this Element, derived as the ownedRelatedElements of the ownedRelationships of
/// this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_112608_17278", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-ownedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.OwnedElement")]
public List ownedElement { get; internal set; } = [];
///
/// All endFeatures of this Type that are ownedFeatures.
///
- [Property(xmiId: "_18_5_3_12e503d9_1563834516278_687758_20652", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1562476168385_824569_22106")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_226999_43167")]
+ [Property(xmiId: "Core-Types-Type-ownedEndFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-endFeature")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedFeature")]
[Implements(implementation: "IType.OwnedEndFeature")]
public List ownedEndFeature { get; internal set; } = [];
///
/// The EnumerationUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1606946600508_763872_252", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591500614097_490259_4413")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedEnumeration", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedAttribute")]
[Implements(implementation: "IDefinition.OwnedEnumeration")]
public List ownedEnumeration { get; internal set; } = [];
///
/// The ownedMemberFeatures of the ownedFeatureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_226999_43167", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-ownedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.OwnedFeature")]
public List ownedFeature { get; internal set; } = [];
@@ -462,17 +462,17 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedMemberships of this Type that are FeatureMemberships, for which the Type is the owningType.
/// Each such FeatureMembership identifies an ownedFeature of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_868417_43171", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_190614_43269")]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1651076866512_962346_485")]
+ [Property(xmiId: "Core-Types-Type-ownedFeatureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMembership")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-featureMembership")]
[Implements(implementation: "IType.OwnedFeatureMembership")]
public List ownedFeatureMembership { get; internal set; } = [];
///
/// The FlowUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1624055201422_104863_1697", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591480607506_951212_2333")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedFlow", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedConnection")]
[Implements(implementation: "IDefinition.OwnedFlow")]
public List ownedFlow { get; internal set; } = [];
@@ -480,34 +480,34 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedRelationships of this Namespace that are Imports, for which the Namespace is the
/// importOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674974_746786_43247", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedImport", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "INamespace.OwnedImport")]
public List ownedImport { get; internal set; } = [];
///
/// The InterfaceUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591498709150_220812_4128", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591480607506_951212_2333")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedInterface", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedConnection")]
[Implements(implementation: "IDefinition.OwnedInterface")]
public List ownedInterface { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Intersectings, have the Type as their typeIntersected.
///
- [Property(xmiId: "_19_0_4_b9102da_1623242552144_910757_524", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedIntersecting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedIntersecting")]
public List ownedIntersecting { get; internal set; } = [];
///
/// The ItemUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591482567975_649284_3005", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1618943849505_989631_257")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedItem", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedOccurrence")]
[Implements(implementation: "IDefinition.OwnedItem")]
public List ownedItem { get; internal set; } = [];
@@ -515,8 +515,8 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The owned members of this Namespace, which are the ownedMemberElements of the ownedMemberships
/// of the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_259543_43268", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMember", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "INamespace.OwnedMember")]
public List ownedMember { get; internal set; } = [];
@@ -524,74 +524,74 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedRelationships of this Namespace that are Memberships, for which the Namespace is the
/// membershipOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_190614_43269", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "INamespace.OwnedMembership")]
public List ownedMembership { get; internal set; } = [];
///
/// The MetadataUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1661488358064_457109_2881", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591482567975_649284_3005")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedMetadata", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedItem")]
[Implements(implementation: "IDefinition.OwnedMetadata")]
public List ownedMetadata { get; internal set; } = [];
///
/// The OccurrenceUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1618943849505_989631_257", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565479686637_967933_23236")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedOccurrence", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedUsage")]
[Implements(implementation: "IDefinition.OwnedOccurrence")]
public List ownedOccurrence { get; internal set; } = [];
///
/// The PartUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591496643392_630316_3279", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591482567975_649284_3005")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedPart", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedItem")]
[Implements(implementation: "IDefinition.OwnedPart")]
public List ownedPart { get; internal set; } = [];
///
/// The PortUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_18_5_3_12e503d9_1565494319970_455996_25799", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565479686637_967933_23236")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedPort", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedUsage")]
[Implements(implementation: "IDefinition.OwnedPort")]
public List ownedPort { get; internal set; } = [];
///
/// The ReferenceUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1591477471991_39731_908", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565479686637_967933_23236")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedReference", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedUsage")]
[Implements(implementation: "IDefinition.OwnedReference")]
public List ownedReference { get; internal set; } = [];
///
/// The Relationships for which this Element is the owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_217766_16748", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-ownedRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwnedRelationship")]
public List OwnedRelationship { get; set; } = [];
///
/// The RenderingUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1596741437225_963350_6474", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591496643392_630316_3279")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedRendering", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedPart")]
[Implements(implementation: "IDefinition.OwnedRendering")]
public List ownedRendering { get; internal set; } = [];
///
/// The RequirementUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1583000559760_444344_1273", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1578068081992_244000_1803")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedRequirement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedConstraint")]
[Implements(implementation: "IDefinition.OwnedRequirement")]
public List ownedRequirement { get; internal set; } = [];
@@ -599,17 +599,17 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedRelationships of this Type that are Specializations, for which the Type is the specific
/// Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_579676_43168", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674984_558067_43292")]
+ [Property(xmiId: "Core-Types-Type-ownedSpecialization", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_specific_specialization-specialization")]
[Implements(implementation: "IType.OwnedSpecialization")]
public List ownedSpecialization { get; internal set; } = [];
///
/// The StateUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575587977045_745776_941", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591479011613_547927_1091")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedState", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedAction")]
[Implements(implementation: "IDefinition.OwnedState")]
public List ownedState { get; internal set; } = [];
@@ -617,66 +617,66 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The ownedSpecializations of this Classifier that are Subclassifications, for which this Classifier
/// is the subclassifier.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543189170643_419862_25507", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_579676_43168")]
+ [Property(xmiId: "Core-Classifiers-Classifier-ownedSubclassification", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedSpecialization")]
[Implements(implementation: "IClassifier.OwnedSubclassification")]
public List ownedSubclassification { get; internal set; } = [];
///
/// The TransitionUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1578598061680_350995_3923", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565479686637_967933_23236")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedTransition", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedUsage")]
[Implements(implementation: "IDefinition.OwnedTransition")]
public List ownedTransition { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Unionings, having the Type as their typeUnioned.
///
- [Property(xmiId: "_19_0_4_b9102da_1661869978505_968809_460", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Core-Types-Type-ownedUnioning", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "IType.OwnedUnioning")]
public List ownedUnioning { get; internal set; } = [];
///
/// The Usages that are ownedFeatures of this Definition.
///
- [Property(xmiId: "_18_5_3_12e503d9_1565479686637_967933_23236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_226999_43167")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1565498571495_48981_27786")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedUsage", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedFeature")]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-usage")]
[Implements(implementation: "IDefinition.OwnedUsage")]
public List ownedUsage { get; internal set; } = [];
///
/// The UseCaseUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_4_12e503d9_1621461106608_978605_945", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_59601fc_1590257108055_7496_483")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedUseCase", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedCase")]
[Implements(implementation: "IDefinition.OwnedUseCase")]
public List ownedUseCase { get; internal set; } = [];
///
/// The VerificationCaseUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1596821523387_872104_10416", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_59601fc_1590257108055_7496_483")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedVerificationCase", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedCase")]
[Implements(implementation: "IDefinition.OwnedVerificationCase")]
public List ownedVerificationCase { get; internal set; } = [];
///
/// The ViewUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1596644570381_840567_784", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1591496643392_630316_3279")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedView", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedPart")]
[Implements(implementation: "IDefinition.OwnedView")]
public List ownedView { get; internal set; } = [];
///
/// The ViewpointUsages that are ownedUsages of this Definition.
///
- [Property(xmiId: "_19_0_2_12e503d9_1596649828408_673531_3683", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1583000559760_444344_1273")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-ownedViewpoint", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Systems-DefinitionAndUsage-Definition-ownedRequirement")]
[Implements(implementation: "IDefinition.OwnedViewpoint")]
public List ownedViewpoint { get; internal set; } = [];
@@ -684,16 +684,16 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The owner of this Element, derived as the owningRelatedElement of the owningRelationship of this
/// Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_744477_17277", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-owner", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Owner")]
public Guid? owner { get; internal set; }
///
/// The owningRelationship of this Element, if that Relationship is a Membership.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674972_622493_43236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674973_469277_43243")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
+ [Property(xmiId: "Root-Elements-Element-owningMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_memberElement_membership-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
[Implements(implementation: "IElement.OwningMembership")]
public Guid? owningMembership { get; internal set; }
@@ -701,16 +701,16 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The Namespace that owns this Element, which is the membershipOwningNamespace of the owningMembership
/// of this Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_474739_43306", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_717955_43271")]
+ [Property(xmiId: "Root-Elements-Element-owningNamespace", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_member_namespace-namespace")]
[Implements(implementation: "IElement.OwningNamespace")]
public Guid? owningNamespace { get; internal set; }
///
/// The Relationship for which this Element is an ownedRelatedElement, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_482273_43303", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-owningRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwningRelationship")]
public Guid? OwningRelationship { get; set; }
@@ -722,7 +722,7 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// Namespace to this Element. If the owningNamespace has other Elements with the same name as this one,
/// then the qualifiedName is null for all such Elements other than the first.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611356604987_900871_594", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-qualifiedName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.QualifiedName")]
public string qualifiedName { get; internal set; }
@@ -732,16 +732,16 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// declaredShortName, but this is overridden for certain kinds of Elements to compute a shortName even
/// when the declaredName is null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1673496405504_544235_24", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-shortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ShortName")]
public string shortName { get; internal set; }
///
/// The TextualRepresentations that annotate this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594154758493_640290_3388", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-textualRepresentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.TextualRepresentation")]
public List textualRepresentation { get; internal set; } = [];
@@ -752,15 +752,15 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// Similarly, a feature for people's children might be the union of features dividing them in the
/// same ways as people in general.
///
- [Property(xmiId: "_19_0_4_b9102da_1661974896766_783268_1231", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-unioningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.UnioningType")]
public List unioningType { get; internal set; } = [];
///
/// The Usages that are features of this Definition (not necessarily owned).
///
- [Property(xmiId: "_18_5_3_12e503d9_1565498571495_48981_27786", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-usage", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IDefinition.Usage")]
public List usage { get; internal set; } = [];
@@ -768,8 +768,8 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// The Usages which represent the variants of this Definition as a variation point Definition, if
/// isVariation = true. If isVariation = false, the there must be no variants.
///
- [Property(xmiId: "_19_0_2_12e503d9_1590979457191_746167_951", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-variant", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[RedefinedByProperty("IEnumerationDefinition.EnumeratedValue")]
[Implements(implementation: "IDefinition.Variant")]
List Systems.DefinitionAndUsage.IDefinition.variant => [.. this.enumeratedValue];
@@ -779,8 +779,8 @@ bool Systems.DefinitionAndUsage.IDefinition.IsVariation
/// this must be all ownedMemberships of the Definition. If isVariation = false, then
/// variantMembershipmust be empty.
///
- [Property(xmiId: "_19_0_2_12e503d9_1590979005861_503124_894", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_190614_43269")]
+ [Property(xmiId: "Systems-DefinitionAndUsage-Definition-variantMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMembership")]
[Implements(implementation: "IDefinition.VariantMembership")]
public List variantMembership { get; internal set; } = [];
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Feature.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Feature.cs
index 90329563..f81c89e3 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Feature.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Feature.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright (C) 2022-2025 Starion Group S.A.
+// Copyright (C) 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -36,20 +36,20 @@ namespace SysML2.NET.Core.DTO.Core.Features
/// A Feature is a Type that classifies relations between multiple things (in the universe). The domain
/// of the relation is the intersection of the featuringTypes of the Feature. (The domain of a Feature
/// with no featuringTyps is implicitly the most general Type Base::Anything from the Kernel Semantic
- /// Library.) The co-domain of the relation is the intersection of the types of the Feature.In the
+ /// Library.) The co-domain of the relation is the intersection of the types of the Feature. In the
/// simplest cases, the featuringTypes and types are Classifiers and the Feature relates two things, one
/// from the domain and one from the range. Examples include cars paired with wheels, people paired with
- /// other people, and cars paired with numbers representing the car length.Since Features are Types,
+ /// other people, and cars paired with numbers representing the car length. Since Features are Types,
/// their featuringTypes and types can be Features. In this case, the Feature effectively classifies
/// relations between relations, which can be interpreted as the sequence of things related by the
- /// domain Feature concatenated with the sequence of things related by the co-domain Feature.The values
- /// of a Feature for a given instance of its domain are all the instances of its co-domain that are
- /// related to that domain instance by the Feature. The values of a Feature with chainingFeatures are
- /// the same as values of the last Feature in the chain, which can be found by starting with values of
- /// the first Feature, then using those values as domain instances to obtain valus of the second
+ /// domain Feature concatenated with the sequence of things related by the co-domain Feature. The
+ /// values of a Feature for a given instance of its domain are all the instances of its co-domain that
+ /// are related to that domain instance by the Feature. The values of a Feature with chainingFeatures
+ /// are the same as values of the last Feature in the chain, which can be found by starting with values
+ /// of the first Feature, then using those values as domain instances to obtain valus of the second
/// Feature, and so on, to values of the last Feature.
///
- [Class(xmiId: "_18_5_3_12e503d9_1533160651684_893483_42160", isAbstract: false, isFinalSpecialization: false, isActive: false)]
+ [Class(xmiId: "Core-Features-Feature", isAbstract: false, isFinalSpecialization: false, isActive: false)]
[GeneratedCode("SysML2.NET", "latest")]
public partial class Feature : IFeature
{
@@ -63,7 +63,7 @@ public partial class Feature : IFeature
///
/// Various alternative identifiers for this Element. Generally, these will be set by tools.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594312532679_496267_4310", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-aliasIds", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.AliasIds")]
public List AliasIds { get; set; } = [];
@@ -75,7 +75,7 @@ public partial class Feature : IFeature
/// original Feature), then using each of those as domain instances to find the values of the second
/// Feature in chainingFeatures, and so on, to values of the last Feature.
///
- [Property(xmiId: "_19_0_4_b9102da_1619792219511_543311_445", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-chainingFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
[Implements(implementation: "IFeature.ChainingFeature")]
public List chainingFeature { get; internal set; } = [];
@@ -85,14 +85,14 @@ public partial class Feature : IFeature
/// the end Feature obtained when navigating from values of the other end Features of the same
/// owningType.
///
- [Property(xmiId: "_19_0_4_b9102da_1689616227528_355910_218", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-crossFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.CrossFeature")]
public Guid? crossFeature { get; internal set; }
///
/// The declared name of this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674987_737648_43307", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredName")]
public string DeclaredName { get; set; }
@@ -102,7 +102,7 @@ public partial class Feature : IFeature
/// it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a
/// model or relative to some other context.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594160442439_915308_4153", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredShortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredShortName")]
public string DeclaredShortName { get; set; }
@@ -115,15 +115,15 @@ public partial class Feature : IFeature
/// their children not of that sex (because the interpretations of the children Feature that identify
/// those of that sex are also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661975883472_645501_1372", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-differencingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.DifferencingType")]
public List differencingType { get; internal set; } = [];
///
/// The features of this Type that have a non-null direction.
///
- [Property(xmiId: "_19_0_4_12e503d9_1623952188842_882068_37169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-directedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.DirectedFeature")]
public List directedFeature { get; internal set; } = [];
@@ -131,16 +131,16 @@ public partial class Feature : IFeature
/// Indicates how values of this Feature are determined or used (as specified for the
/// FeatureDirectionKind).
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674994_447677_43347", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-direction", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.Direction")]
public FeatureDirectionKind? Direction { get; set; }
///
/// The Documentation owned by this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594150061166_345630_1621", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-documentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.Documentation")]
public List documentation { get; internal set; } = [];
@@ -148,15 +148,15 @@ public partial class Feature : IFeature
/// The globally unique identifier for this Element. This is intended to be set by tooling, and it must
/// not change during the lifetime of the Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_844338_43305", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-elementId", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ElementId")]
public string ElementId { get; set; }
///
/// All features of this Type with isEnd = true.
///
- [Property(xmiId: "_18_5_3_12e503d9_1562476168385_824569_22106", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-endFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.EndFeature")]
public List endFeature { get; internal set; } = [];
@@ -164,17 +164,17 @@ public partial class Feature : IFeature
/// The Type that is related to this Feature by an EndFeatureMembership in which the Feature is an
/// ownedMemberFeature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1563834516279_920295_20653", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1562476168386_366266_22107")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674965_592215_43200")]
+ [Property(xmiId: "Core-Features-Feature-endOwningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-A_endFeature_typeWithEndFeature-typeWithEndFeature")]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-owningType")]
[Implements(implementation: "IFeature.EndOwningType")]
public Guid? endOwningType { get; internal set; }
///
/// The ownedMemberFeatures of the featureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_326391_43166", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Core-Types-Type-feature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "IType.Feature")]
public List feature { get; internal set; } = [];
@@ -183,14 +183,14 @@ public partial class Feature : IFeature
/// those inheritedMemberships that are FeatureMemberships (but does not include any
/// importedMemberships).
///
- [Property(xmiId: "_19_0_4_12e503d9_1651076866512_962346_485", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-featureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.FeatureMembership")]
public List featureMembership { get; internal set; } = [];
///
/// The last of the chainingFeatures of this Feature, if it has any. Otherwise, this Feature itself.
///
- [Property(xmiId: "_2022x_2_12e503d9_1715790852907_110671_19", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-featureTarget", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.FeatureTarget")]
public Guid featureTarget { get; internal set; }
@@ -200,23 +200,23 @@ public partial class Feature : IFeature
/// If the Feature is chained, then the featuringTypes of the first Feature in the chain are also
/// featuringTypes of the chained Feature.
///
- [Property(xmiId: "_19_0_4_12e503d9_1603905619975_304385_743", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-featuringType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.FeaturingType")]
public List featuringType { get; internal set; } = [];
///
/// The Memberships in this Namespace that result from the ownedImports of this Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_207869_43270", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Root-Namespaces-Namespace-importedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "INamespace.ImportedMembership")]
public List importedMembership { get; internal set; } = [];
///
/// All the memberFeatures of the inheritedMemberships of this Type that are FeatureMemberships.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575499020770_15576_2334", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-inheritedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.InheritedFeature")]
public List inheritedFeature { get; internal set; } = [];
@@ -224,16 +224,16 @@ public partial class Feature : IFeature
/// All Memberships inherited by this Type via Specialization or Conjugation. These are included in the
/// derived union for the memberships of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1551972927538_787976_19004", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Core-Types-Type-inheritedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "IType.InheritedMembership")]
public List inheritedMembership { get; internal set; } = [];
///
/// All features related to this Type by FeatureMemberships that have direction in or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_37384_43169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-input", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Input")]
public List input { get; internal set; } = [];
@@ -246,7 +246,7 @@ public partial class Feature : IFeature
/// of that sex (because the interpretations of the children Feature that identify those of that sex are
/// also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661973922199_584242_1045", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-intersectingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IntersectingType")]
public List intersectingType { get; internal set; } = [];
@@ -254,7 +254,7 @@ public partial class Feature : IFeature
/// Indicates whether instances of this Type must also be instances of at least one of its specialized
/// Types.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_741353_43165", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isAbstract", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsAbstract")]
public bool IsAbstract { get; set; }
@@ -263,14 +263,14 @@ public partial class Feature : IFeature
/// cannot exist after its featuring instance no longer does and cannot be values of another composite
/// feature that is not on the same featuring instance.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_331870_43224", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isComposite", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsComposite")]
public bool IsComposite { get; set; }
///
/// Indicates whether this Type has an ownedConjugator.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575485930816_796088_1933", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-isConjugated", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IsConjugated")]
public bool isConjugated { get; internal set; }
@@ -278,14 +278,14 @@ public partial class Feature : IFeature
/// If isVariable is true, then whether the value of this Feature nevertheless does not change over all
/// snapshots of its owningType.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674993_300560_43342", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isConstant", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsConstant")]
public bool IsConstant { get; set; }
///
/// Whether the values of this Feature can always be computed from the values of other Features.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674992_500504_43341", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isDerived", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsDerived")]
public bool IsDerived { get; set; }
@@ -299,7 +299,7 @@ public partial class Feature : IFeature
/// values of that Feature reached by navigation when the values of the other n-1 end Features are held
/// fixed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1562475749426_705395_21984", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isEnd", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsEnd")]
public bool IsEnd { get; set; }
@@ -310,21 +310,21 @@ public partial class Feature : IFeature
/// if it is false, then ownedRelationships may not contain any implied Relationships. That is, either
/// all required implied Relationships must be included, or none of them.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070949317_79713_3658", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Element-isImpliedIncluded", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IElement.IsImpliedIncluded")]
public bool IsImpliedIncluded { get; set; }
///
/// Whether this Element is contained in the ownership tree of a library model.
///
- [Property(xmiId: "_19_0_4_12e503d9_1665443500960_5561_723", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-isLibraryElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.IsLibraryElement")]
public bool isLibraryElement { get; internal set; }
///
/// Whether an order exists for the values of this Feature or not.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674969_728225_43215", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isOrdered", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsOrdered")]
public bool IsOrdered { get; set; }
@@ -332,26 +332,26 @@ public partial class Feature : IFeature
/// Whether the values of this Feature are contained in the space and time of instances of the domain of
/// the Feature and represent the same thing as those instances.
///
- [Property(xmiId: "_18_5_3_b9102da_1559231981638_234817_22063", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isPortion", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsPortion")]
public bool IsPortion { get; set; }
///
/// Whether all things that meet the classification conditions of this Type must be classified by the
- /// Type.(A Type gives conditions that must be met by whatever it classifies, but when isSufficient
- /// is false, things may meet those conditions but still not be classified by the Type. For example, a
- /// Type Car that is not sufficient could require everything it classifies to have four wheels, but not
- /// all four wheeled things would classify as cars. However, if the Type Car were sufficient, it would
- /// classify all four-wheeled things.)
+ /// Type. (A Type gives conditions that must be met by whatever it classifies, but when
+ /// isSufficient is false, things may meet those conditions but still not be classified by the Type. For
+ /// example, a Type Car that is not sufficient could require everything it classifies to have four
+ /// wheels, but not all four wheeled things would classify as cars. However, if the Type Car were
+ /// sufficient, it would classify all four-wheeled things.)
///
- [Property(xmiId: "_18_5_3_b9102da_1564072709069_937523_30797", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isSufficient", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsSufficient")]
public bool IsSufficient { get; set; }
///
/// Whether or not values for this Feature must have no duplicates or not.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674968_321342_43214", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "true")]
+ [Property(xmiId: "Core-Features-Feature-isUnique", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "true")]
[Implements(implementation: "IFeature.IsUnique")]
public bool IsUnique { get; set; } = true;
@@ -359,7 +359,7 @@ public partial class Feature : IFeature
/// Whether the value of this Feature might vary over time. That is, whether the Feature may have a
/// different value for each snapshot of an owningType that is an Occurrence.
///
- [Property(xmiId: "_2022x_2_12e503d9_1725998273002_23711_212", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isVariable", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsVariable")]
public bool IsVariable { get; set; }
@@ -367,7 +367,7 @@ public partial class Feature : IFeature
/// The set of all member Elements of this Namespace, which are the memberElements of all memberships of
/// the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_644335_43267", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-member", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Member")]
public List member { get; internal set; } = [];
@@ -375,7 +375,7 @@ public partial class Feature : IFeature
/// All Memberships in this Namespace, including (at least) the union of ownedMemberships and
/// importedMemberships.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674962_198288_43183", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-membership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Membership")]
public List membership { get; internal set; } = [];
@@ -384,8 +384,8 @@ public partial class Feature : IFeature
/// If there is no such ownedMember, then the cardinality of this Type is constrained by all the
/// Multiplicity constraints applicable to any direct supertypes.
///
- [Property(xmiId: "_19_0_2_12e503d9_1573095852093_324833_5396", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-multiplicity", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.Multiplicity")]
public Guid? multiplicity { get; internal set; }
@@ -395,15 +395,15 @@ public partial class Feature : IFeature
/// this is overridden for certain kinds of Elements to compute a name even when the declaredName is
/// null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617485009541_709355_27528", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-name", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Name")]
public string name { get; internal set; }
///
/// All features related to this Type by FeatureMemberships that have direction out or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_365618_43170", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-output", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Output")]
public List output { get; internal set; } = [];
@@ -411,18 +411,18 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Element that are Annotations, for which this Element is the
/// annotatedElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594152527165_702130_2500", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094430277_599480_18543")]
+ [Property(xmiId: "Root-Elements-Element-ownedAnnotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotation-annotation")]
[Implements(implementation: "IElement.OwnedAnnotation")]
public List ownedAnnotation { get; internal set; } = [];
///
/// A Conjugation owned by this Type for which the Type is the originalType.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575482646809_280165_440", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1575482490144_309557_300")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedConjugator", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-A_conjugatedType_conjugator-conjugator")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedConjugator")]
public Guid? ownedConjugator { get; internal set; }
@@ -430,8 +430,8 @@ public partial class Feature : IFeature
/// The one ownedSubsetting of this Feature, if any, that is a CrossSubsetting}, for which the Feature
/// is the crossingFeature.
///
- [Property(xmiId: "_19_0_4_b9102da_1689616916594_145818_277", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674970_472382_43221")]
+ [Property(xmiId: "Core-Features-Feature-ownedCrossSubsetting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-ownedSubsetting")]
[Implements(implementation: "IFeature.OwnedCrossSubsetting")]
public Guid? ownedCrossSubsetting { get; internal set; }
@@ -439,9 +439,9 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Type that are Differencings, having this Type as their
/// typeDifferenced.
///
- [Property(xmiId: "_19_0_4_b9102da_1661871168454_98082_797", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedDifferencing", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedDifferencing")]
public List ownedDifferencing { get; internal set; } = [];
@@ -449,9 +449,9 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Type that are Disjoinings, for which the Type is the typeDisjoined
/// Type.
///
- [Property(xmiId: "_19_0_4_12e503d9_1627447519613_145554_370", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_19_0_4_b9102da_1623183194914_502526_616")]
+ [Property(xmiId: "Core-Types-Type-ownedDisjoining", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_disjoiningTypeDisjoining_typeDisjoined-disjoiningTypeDisjoining")]
[Implements(implementation: "IType.OwnedDisjoining")]
public List ownedDisjoining { get; internal set; } = [];
@@ -459,24 +459,24 @@ public partial class Feature : IFeature
/// The Elements owned by this Element, derived as the ownedRelatedElements of the ownedRelationships of
/// this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_112608_17278", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-ownedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.OwnedElement")]
public List ownedElement { get; internal set; } = [];
///
/// All endFeatures of this Type that are ownedFeatures.
///
- [Property(xmiId: "_18_5_3_12e503d9_1563834516278_687758_20652", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1562476168385_824569_22106")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_226999_43167")]
+ [Property(xmiId: "Core-Types-Type-ownedEndFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-endFeature")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedFeature")]
[Implements(implementation: "IType.OwnedEndFeature")]
public List ownedEndFeature { get; internal set; } = [];
///
/// The ownedMemberFeatures of the ownedFeatureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_226999_43167", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-ownedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.OwnedFeature")]
public List ownedFeature { get; internal set; } = [];
@@ -484,9 +484,9 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Feature that are FeatureChainings, for which the Feature will be the
/// featureChained.
///
- [Property(xmiId: "_19_0_4_b9102da_1622125589880_791465_72", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Core-Features-Feature-ownedFeatureChaining", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "IFeature.OwnedFeatureChaining")]
public List ownedFeatureChaining { get; internal set; } = [];
@@ -494,9 +494,9 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Feature that are FeatureInvertings and for which the Feature is the
/// featureInverted.
///
- [Property(xmiId: "_19_0_4_b9102da_1653567738671_359235_43", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_b9102da_1623178838861_768019_145")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Features-Feature-ownedFeatureInverting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-A_invertingFeatureInverting_featureInverted-invertingFeatureInverting")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IFeature.OwnedFeatureInverting")]
public List ownedFeatureInverting { get; internal set; } = [];
@@ -504,9 +504,9 @@ public partial class Feature : IFeature
/// The ownedMemberships of this Type that are FeatureMemberships, for which the Type is the owningType.
/// Each such FeatureMembership identifies an ownedFeature of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_868417_43171", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_190614_43269")]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1651076866512_962346_485")]
+ [Property(xmiId: "Core-Types-Type-ownedFeatureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMembership")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-featureMembership")]
[Implements(implementation: "IType.OwnedFeatureMembership")]
public List ownedFeatureMembership { get; internal set; } = [];
@@ -514,18 +514,18 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Namespace that are Imports, for which the Namespace is the
/// importOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674974_746786_43247", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedImport", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "INamespace.OwnedImport")]
public List ownedImport { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Intersectings, have the Type as their typeIntersected.
///
- [Property(xmiId: "_19_0_4_b9102da_1623242552144_910757_524", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedIntersecting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedIntersecting")]
public List ownedIntersecting { get; internal set; } = [];
@@ -533,8 +533,8 @@ public partial class Feature : IFeature
/// The owned members of this Namespace, which are the ownedMemberElements of the ownedMemberships
/// of the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_259543_43268", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMember", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "INamespace.OwnedMember")]
public List ownedMember { get; internal set; } = [];
@@ -542,10 +542,10 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Namespace that are Memberships, for which the Namespace is the
/// membershipOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_190614_43269", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "INamespace.OwnedMembership")]
public List ownedMembership { get; internal set; } = [];
@@ -553,8 +553,8 @@ public partial class Feature : IFeature
/// The ownedSubsettings of this Feature that are Redefinitions, for which the Feature is the
/// redefiningFeature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_161813_43220", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674970_472382_43221")]
+ [Property(xmiId: "Core-Features-Feature-ownedRedefinition", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-ownedSubsetting")]
[Implements(implementation: "IFeature.OwnedRedefinition")]
public List ownedRedefinition { get; internal set; } = [];
@@ -562,16 +562,16 @@ public partial class Feature : IFeature
/// The one ownedSubsetting of this Feature, if any, that is a ReferenceSubsetting, for which the
/// Feature is the referencingFeature.
///
- [Property(xmiId: "_19_0_4_12e503d9_1661555161564_247405_255", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674970_472382_43221")]
+ [Property(xmiId: "Core-Features-Feature-ownedReferenceSubsetting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-ownedSubsetting")]
[Implements(implementation: "IFeature.OwnedReferenceSubsetting")]
public Guid? ownedReferenceSubsetting { get; internal set; }
///
/// The Relationships for which this Element is the owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_217766_16748", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-ownedRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwnedRelationship")]
public List OwnedRelationship { get; set; } = [];
@@ -579,9 +579,9 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Type that are Specializations, for which the Type is the specific
/// Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_579676_43168", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674984_558067_43292")]
+ [Property(xmiId: "Core-Types-Type-ownedSpecialization", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_specific_specialization-specialization")]
[Implements(implementation: "IType.OwnedSpecialization")]
public List ownedSpecialization { get; internal set; } = [];
@@ -589,9 +589,9 @@ public partial class Feature : IFeature
/// The ownedSpecializations of this Feature that are Subsettings, for which the Feature is the
/// subsettingFeature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_472382_43221", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_579676_43168")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674966_718145_43205")]
+ [Property(xmiId: "Core-Features-Feature-ownedSubsetting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedSpecialization")]
+ [SubsettedProperty(propertyName: "Core-Features-A_subsettingFeature_subsetting-subsetting")]
[Implements(implementation: "IFeature.OwnedSubsetting")]
public List ownedSubsetting { get; internal set; } = [];
@@ -599,9 +599,9 @@ public partial class Feature : IFeature
/// The ownedRelationships of this Feature that are TypeFeaturings and for which the Feature is the
/// featureOfType.
///
- [Property(xmiId: "_19_0_4_12e503d9_1603905673975_310948_762", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1603904928950_196800_580")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Features-Feature-ownedTypeFeaturing", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-A_featureOfType_typeFeaturing-typeFeaturing")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IFeature.OwnedTypeFeaturing")]
public List ownedTypeFeaturing { get; internal set; } = [];
@@ -609,18 +609,18 @@ public partial class Feature : IFeature
/// The ownedSpecializations of this Feature that are FeatureTypings, for which the Feature is the
/// typedFeature.
///
- [Property(xmiId: "_19_0_2_12e503d9_1596597427751_965862_42", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_579676_43168")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543180501615_804591_21100")]
+ [Property(xmiId: "Core-Features-Feature-ownedTyping", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedSpecialization")]
+ [SubsettedProperty(propertyName: "Core-Features-A_typing_typedFeature-typing")]
[Implements(implementation: "IFeature.OwnedTyping")]
public List ownedTyping { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Unionings, having the Type as their typeUnioned.
///
- [Property(xmiId: "_19_0_4_b9102da_1661869978505_968809_460", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Core-Types-Type-ownedUnioning", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "IType.OwnedUnioning")]
public List ownedUnioning { get; internal set; } = [];
@@ -628,24 +628,24 @@ public partial class Feature : IFeature
/// The owner of this Element, derived as the owningRelatedElement of the owningRelationship of this
/// Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_744477_17277", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-owner", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Owner")]
public Guid? owner { get; internal set; }
///
/// The FeatureMembership that owns this Feature as an ownedMemberFeature, determining its owningType.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_68441_43223", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674972_622493_43236")]
+ [Property(xmiId: "Core-Features-Feature-owningFeatureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningMembership")]
[Implements(implementation: "IFeature.OwningFeatureMembership")]
public Guid? owningFeatureMembership { get; internal set; }
///
/// The owningRelationship of this Element, if that Relationship is a Membership.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674972_622493_43236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674973_469277_43243")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
+ [Property(xmiId: "Root-Elements-Element-owningMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_memberElement_membership-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
[Implements(implementation: "IElement.OwningMembership")]
public Guid? owningMembership { get; internal set; }
@@ -653,26 +653,26 @@ public partial class Feature : IFeature
/// The Namespace that owns this Element, which is the membershipOwningNamespace of the owningMembership
/// of this Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_474739_43306", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_717955_43271")]
+ [Property(xmiId: "Root-Elements-Element-owningNamespace", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_member_namespace-namespace")]
[Implements(implementation: "IElement.OwningNamespace")]
public Guid? owningNamespace { get; internal set; }
///
/// The Relationship for which this Element is an ownedRelatedElement, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_482273_43303", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-owningRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwningRelationship")]
public Guid? OwningRelationship { get; set; }
///
/// The Type that is the owningType of the owningFeatureMembership of this Feature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674965_592215_43200", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674987_297074_43308")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_474739_43306")]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1603905619975_304385_743")]
+ [Property(xmiId: "Core-Features-Feature-owningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-featuringType")]
+ [SubsettedProperty(propertyName: "Core-Types-A_typeWithFeature_feature-typeWithFeature")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningNamespace")]
[Implements(implementation: "IFeature.OwningType")]
public Guid? owningType { get; internal set; }
@@ -684,7 +684,7 @@ public partial class Feature : IFeature
/// Namespace to this Element. If the owningNamespace has other Elements with the same name as this one,
/// then the qualifiedName is null for all such Elements other than the first.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611356604987_900871_594", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-qualifiedName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.QualifiedName")]
public string qualifiedName { get; internal set; }
@@ -694,16 +694,16 @@ public partial class Feature : IFeature
/// declaredShortName, but this is overridden for certain kinds of Elements to compute a shortName even
/// when the declaredName is null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1673496405504_544235_24", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-shortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ShortName")]
public string shortName { get; internal set; }
///
/// The TextualRepresentations that annotate this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594154758493_640290_3388", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-textualRepresentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.TextualRepresentation")]
public List textualRepresentation { get; internal set; } = [];
@@ -713,7 +713,7 @@ public partial class Feature : IFeature
/// Feature is chained, then the types of the last Feature in the chain are also types of the chained
/// Feature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674969_376003_43216", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-type", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.Type")]
public List type { get; internal set; } = [];
@@ -724,7 +724,7 @@ public partial class Feature : IFeature
/// Similarly, a feature for people's children might be the union of features dividing them in the
/// same ways as people in general.
///
- [Property(xmiId: "_19_0_4_b9102da_1661974896766_783268_1231", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-unioningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.UnioningType")]
public List unioningType { get; internal set; } = [];
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/FeatureTyping.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/FeatureTyping.cs
index ffa0795f..9309cd93 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/FeatureTyping.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/FeatureTyping.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright (C) 2022-2025 Starion Group S.A.
+// Copyright (C) 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ namespace SysML2.NET.Core.DTO.Core.Features
/// In the simplest case, the type is a Classifier, whereupon the typedFeature has values that are
/// instances of the Classifier.
///
- [Class(xmiId: "_18_5_3_12e503d9_1543180339807_437641_20928", isAbstract: false, isFinalSpecialization: false, isActive: false)]
+ [Class(xmiId: "Core-Features-FeatureTyping", isAbstract: false, isFinalSpecialization: false, isActive: false)]
[GeneratedCode("SysML2.NET", "latest")]
public partial class FeatureTyping : IFeatureTyping
{
@@ -51,14 +51,14 @@ public partial class FeatureTyping : IFeatureTyping
///
/// Various alternative identifiers for this Element. Generally, these will be set by tools.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594312532679_496267_4310", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-aliasIds", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.AliasIds")]
public List AliasIds { get; set; } = [];
///
/// The declared name of this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674987_737648_43307", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredName")]
public string DeclaredName { get; set; }
@@ -68,16 +68,16 @@ public partial class FeatureTyping : IFeatureTyping
/// it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a
/// model or relative to some other context.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594160442439_915308_4153", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredShortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredShortName")]
public string DeclaredShortName { get; set; }
///
/// The Documentation owned by this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594150061166_345630_1621", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-documentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.Documentation")]
public List documentation { get; internal set; } = [];
@@ -85,15 +85,15 @@ public partial class FeatureTyping : IFeatureTyping
/// The globally unique identifier for this Element. This is intended to be set by tooling, and it must
/// not change during the lifetime of the Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_844338_43305", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-elementId", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ElementId")]
public string ElementId { get; set; }
///
/// A Type with a superset of all instances of the specific Type, which might be the same set.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674980_563969_43273", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_138197_43179")]
+ [Property(xmiId: "Core-Types-Specialization-general", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-target")]
[RedefinedByProperty("IFeatureTyping.Type")]
[Implements(implementation: "ISpecialization.General")]
Guid Core.Types.ISpecialization.General
@@ -109,7 +109,7 @@ Guid Core.Types.ISpecialization.General
/// Whether this Relationship was generated by tooling to meet semantic rules, rather than being
/// directly created by a modeler.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070829631_521257_3623", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Relationship-isImplied", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IRelationship.IsImplied")]
public bool IsImplied { get; set; }
@@ -120,14 +120,14 @@ Guid Core.Types.ISpecialization.General
/// if it is false, then ownedRelationships may not contain any implied Relationships. That is, either
/// all required implied Relationships must be included, or none of them.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070949317_79713_3658", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Element-isImpliedIncluded", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IElement.IsImpliedIncluded")]
public bool IsImpliedIncluded { get; set; }
///
/// Whether this Element is contained in the ownership tree of a library model.
///
- [Property(xmiId: "_19_0_4_12e503d9_1665443500960_5561_723", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-isLibraryElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.IsLibraryElement")]
public bool isLibraryElement { get; internal set; }
@@ -137,7 +137,7 @@ Guid Core.Types.ISpecialization.General
/// this is overridden for certain kinds of Elements to compute a name even when the declaredName is
/// null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617485009541_709355_27528", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-name", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Name")]
public string name { get; internal set; }
@@ -145,9 +145,9 @@ Guid Core.Types.ISpecialization.General
/// The ownedRelationships of this Element that are Annotations, for which this Element is the
/// annotatedElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594152527165_702130_2500", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094430277_599480_18543")]
+ [Property(xmiId: "Root-Elements-Element-ownedAnnotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotation-annotation")]
[Implements(implementation: "IElement.OwnedAnnotation")]
public List ownedAnnotation { get; internal set; } = [];
@@ -155,23 +155,23 @@ Guid Core.Types.ISpecialization.General
/// The Elements owned by this Element, derived as the ownedRelatedElements of the ownedRelationships of
/// this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_112608_17278", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-ownedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.OwnedElement")]
public List ownedElement { get; internal set; } = [];
///
/// The relatedElements of this Relationship that are owned by the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_59873_43302", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-ownedRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwnedRelatedElement")]
public List OwnedRelatedElement { get; set; } = [];
///
/// The Relationships for which this Element is the owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_217766_16748", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-ownedRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwnedRelationship")]
public List OwnedRelationship { get; set; } = [];
@@ -179,25 +179,25 @@ Guid Core.Types.ISpecialization.General
/// The owner of this Element, derived as the owningRelatedElement of the owningRelationship of this
/// Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_744477_17277", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-owner", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Owner")]
public Guid? owner { get; internal set; }
///
/// A typedFeature that is also the owningRelatedElement of this FeatureTyping.
///
- [Property(xmiId: "_19_0_2_12e503d9_1596597427753_801746_43", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543180501615_13273_21101")]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_573157_43226")]
+ [Property(xmiId: "Core-Features-FeatureTyping-owningFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-FeatureTyping-typedFeature")]
+ [RedefinedProperty(propertyName: "Core-Types-Specialization-owningType")]
[Implements(implementation: "IFeatureTyping.OwningFeature")]
public Guid? owningFeature { get; internal set; }
///
/// The owningRelationship of this Element, if that Relationship is a Membership.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674972_622493_43236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674973_469277_43243")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
+ [Property(xmiId: "Root-Elements-Element-owningMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_memberElement_membership-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
[Implements(implementation: "IElement.OwningMembership")]
public Guid? owningMembership { get; internal set; }
@@ -205,33 +205,33 @@ Guid Core.Types.ISpecialization.General
/// The Namespace that owns this Element, which is the membershipOwningNamespace of the owningMembership
/// of this Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_474739_43306", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_717955_43271")]
+ [Property(xmiId: "Root-Elements-Element-owningNamespace", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_member_namespace-namespace")]
[Implements(implementation: "IElement.OwningNamespace")]
public Guid? owningNamespace { get; internal set; }
///
/// The relatedElement of this Relationship that owns the Relationship, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_693018_16749", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-owningRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwningRelatedElement")]
public Guid? OwningRelatedElement { get; set; }
///
/// The Relationship for which this Element is an ownedRelatedElement, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_482273_43303", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-owningRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwningRelationship")]
public Guid? OwningRelationship { get; set; }
///
/// The Type that is the specific Type of this Specialization and owns it as its owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674971_573157_43226", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_693018_16749")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674982_253967_43281")]
+ [Property(xmiId: "Core-Types-Specialization-owningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-owningRelatedElement")]
+ [SubsettedProperty(propertyName: "Core-Types-Specialization-specific")]
[RedefinedByProperty("IFeatureTyping.OwningFeature")]
[Implements(implementation: "ISpecialization.OwningType")]
Guid? Core.Types.ISpecialization.owningType => this.owningFeature.HasValue ? this.owningFeature.Value : Guid.Empty;
@@ -244,7 +244,7 @@ Guid Core.Types.ISpecialization.General
/// Namespace to this Element. If the owningNamespace has other Elements with the same name as this one,
/// then the qualifiedName is null for all such Elements other than the first.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611356604987_900871_594", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-qualifiedName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.QualifiedName")]
public string qualifiedName { get; internal set; }
@@ -252,7 +252,7 @@ Guid Core.Types.ISpecialization.General
/// The Elements that are related by this Relationship, derived as the union of the source and target
/// Elements of the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674961_132339_43177", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Relationship-relatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
[Implements(implementation: "IRelationship.RelatedElement")]
public List relatedElement { get; internal set; } = [];
@@ -262,15 +262,15 @@ Guid Core.Types.ISpecialization.General
/// declaredShortName, but this is overridden for certain kinds of Elements to compute a shortName even
/// when the declaredName is null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1673496405504_544235_24", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-shortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ShortName")]
public string shortName { get; internal set; }
///
/// The relatedElements from which this Relationship is considered to be directed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674971_696758_43228", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-source", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[RedefinedByProperty("ISpecialization.Specific")]
[Implements(implementation: "IRelationship.Source")]
List Root.Elements.IRelationship.Source
@@ -289,8 +289,8 @@ List Root.Elements.IRelationship.Source
///
/// A Type with a subset of all instances of the general Type, which might be the same set.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674982_253967_43281", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_696758_43228")]
+ [Property(xmiId: "Core-Types-Specialization-specific", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-source")]
[RedefinedByProperty("IFeatureTyping.TypedFeature")]
[Implements(implementation: "ISpecialization.Specific")]
Guid Core.Types.ISpecialization.Specific
@@ -305,8 +305,8 @@ Guid Core.Types.ISpecialization.Specific
///
/// The relatedElements to which this Relationship is considered to be directed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674961_138197_43179", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-target", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[RedefinedByProperty("ISpecialization.General")]
[Implements(implementation: "IRelationship.Target")]
List Root.Elements.IRelationship.Target
@@ -325,25 +325,25 @@ List Root.Elements.IRelationship.Target
///
/// The TextualRepresentations that annotate this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594154758493_640290_3388", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-textualRepresentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.TextualRepresentation")]
public List textualRepresentation { get; internal set; } = [];
///
/// The Type that is being applied by this FeatureTyping.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543180520185_480887_21131", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_563969_43273")]
+ [Property(xmiId: "Core-Features-FeatureTyping-type", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Core-Types-Specialization-general")]
[Implements(implementation: "IFeatureTyping.Type")]
public Guid Type { get; set; }
///
/// The Feature that has a type determined by this FeatureTyping.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543180501615_13273_21101", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674982_253967_43281")]
+ [Property(xmiId: "Core-Features-FeatureTyping-typedFeature", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Core-Types-Specialization-specific")]
[Implements(implementation: "IFeatureTyping.TypedFeature")]
public Guid TypedFeature { get; set; }
diff --git a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Flow.cs b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Flow.cs
index d45b44be..99f0b65c 100644
--- a/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Flow.cs
+++ b/SysML2.NET.CodeGenerator.Tests/Expected/UML/Core/AutoGenDto/Flow.cs
@@ -1,7 +1,7 @@
// -------------------------------------------------------------------------------------------------
//
//
-// Copyright (C) 2022-2025 Starion Group S.A.
+// Copyright (C) 2022-2026 Starion Group S.A.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ namespace SysML2.NET.Core.DTO.Kernel.Interactions
/// An Flow is a Step that represents the transfer of values from one Feature to another. Flows can take
/// non-zero time to complete.
///
- [Class(xmiId: "_18_5_3_b9102da_1536869417406_861526_17744", isAbstract: false, isFinalSpecialization: false, isActive: false)]
+ [Class(xmiId: "Kernel-Interactions-Flow", isAbstract: false, isFinalSpecialization: false, isActive: false)]
[GeneratedCode("SysML2.NET", "latest")]
public partial class Flow : IFlow
{
@@ -51,15 +51,15 @@ public partial class Flow : IFlow
///
/// Various alternative identifiers for this Element. Generally, these will be set by tools.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594312532679_496267_4310", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-aliasIds", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.AliasIds")]
public List AliasIds { get; set; } = [];
///
/// The Associations that type the Connector.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674983_471497_43284", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674969_376003_43216")]
+ [Property(xmiId: "Kernel-Connectors-Connector-association", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Core-Features-Feature-type")]
[RedefinedByProperty("IFlow.Interaction")]
[Implements(implementation: "IConnector.Association")]
List Kernel.Connectors.IConnector.association => [.. this.interaction];
@@ -67,8 +67,8 @@ public partial class Flow : IFlow
///
/// The Behaviors that type this Step.
///
- [Property(xmiId: "_18_5_3_b9102da_1536346315176_954314_17388", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674969_376003_43216")]
+ [Property(xmiId: "Kernel-Behaviors-Step-behavior", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-type")]
[RedefinedByProperty("IFlow.Interaction")]
[Implements(implementation: "IStep.Behavior")]
List Kernel.Behaviors.IStep.behavior => [.. this.interaction];
@@ -81,7 +81,7 @@ public partial class Flow : IFlow
/// original Feature), then using each of those as domain instances to find the values of the second
/// Feature in chainingFeatures, and so on, to values of the last Feature.
///
- [Property(xmiId: "_19_0_4_b9102da_1619792219511_543311_445", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-chainingFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
[Implements(implementation: "IFeature.ChainingFeature")]
public List chainingFeature { get; internal set; } = [];
@@ -90,8 +90,8 @@ public partial class Flow : IFlow
/// The connectorEnds determine via ReferenceSubsetting Relationships which Features are related by the
/// Connector.
///
- [Property(xmiId: "_18_5_3_12e503d9_1556735067666_827798_21922", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1562476168385_824569_22106")]
+ [Property(xmiId: "Kernel-Connectors-Connector-connectorEnd", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Core-Types-Type-endFeature")]
[Implements(implementation: "IConnector.ConnectorEnd")]
public List connectorEnd { get; internal set; } = [];
@@ -101,14 +101,14 @@ public partial class Flow : IFlow
/// the end Feature obtained when navigating from values of the other end Features of the same
/// owningType.
///
- [Property(xmiId: "_19_0_4_b9102da_1689616227528_355910_218", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-crossFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.CrossFeature")]
public Guid? crossFeature { get; internal set; }
///
/// The declared name of this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674987_737648_43307", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredName")]
public string DeclaredName { get; set; }
@@ -118,7 +118,7 @@ public partial class Flow : IFlow
/// it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a
/// model or relative to some other context.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594160442439_915308_4153", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-declaredShortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.DeclaredShortName")]
public string DeclaredShortName { get; set; }
@@ -127,7 +127,7 @@ public partial class Flow : IFlow
/// that, if it exists and was the featuringType of this Connector, the Connector would satisfy the
/// checkConnectorTypeFeaturing constraint.
///
- [Property(xmiId: "_2022x_2_12e503d9_1737751598145_444042_71", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Kernel-Connectors-Connector-defaultFeaturingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IConnector.DefaultFeaturingType")]
public Guid? defaultFeaturingType { get; internal set; }
@@ -140,15 +140,15 @@ public partial class Flow : IFlow
/// their children not of that sex (because the interpretations of the children Feature that identify
/// those of that sex are also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661975883472_645501_1372", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-differencingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.DifferencingType")]
public List differencingType { get; internal set; } = [];
///
/// The features of this Type that have a non-null direction.
///
- [Property(xmiId: "_19_0_4_12e503d9_1623952188842_882068_37169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-directedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[RedefinedByProperty("IStep.Parameter")]
[Implements(implementation: "IType.DirectedFeature")]
List Core.Types.IType.directedFeature => [.. this.parameter];
@@ -157,16 +157,16 @@ public partial class Flow : IFlow
/// Indicates how values of this Feature are determined or used (as specified for the
/// FeatureDirectionKind).
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674994_447677_43347", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-direction", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.Direction")]
public FeatureDirectionKind? Direction { get; set; }
///
/// The Documentation owned by this Element.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594150061166_345630_1621", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1594145755059_76214_87")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092869879_112608_17278")]
+ [Property(xmiId: "Root-Elements-Element-documentation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotatingElement-annotatingElement")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedElement")]
[Implements(implementation: "IElement.Documentation")]
public List documentation { get; internal set; } = [];
@@ -174,15 +174,15 @@ public partial class Flow : IFlow
/// The globally unique identifier for this Element. This is intended to be set by tooling, and it must
/// not change during the lifetime of the Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_844338_43305", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-elementId", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ElementId")]
public string ElementId { get; set; }
///
/// All features of this Type with isEnd = true.
///
- [Property(xmiId: "_18_5_3_12e503d9_1562476168385_824569_22106", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-endFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[RedefinedByProperty("IConnector.ConnectorEnd")]
[Implements(implementation: "IType.EndFeature")]
List Core.Types.IType.endFeature => [.. this.connectorEnd];
@@ -191,17 +191,17 @@ public partial class Flow : IFlow
/// The Type that is related to this Feature by an EndFeatureMembership in which the Feature is an
/// ownedMemberFeature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1563834516279_920295_20653", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1562476168386_366266_22107")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674965_592215_43200")]
+ [Property(xmiId: "Core-Features-Feature-endOwningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-A_endFeature_typeWithEndFeature-typeWithEndFeature")]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-owningType")]
[Implements(implementation: "IFeature.EndOwningType")]
public Guid? endOwningType { get; internal set; }
///
/// The ownedMemberFeatures of the featureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_326391_43166", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Core-Types-Type-feature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "IType.Feature")]
public List feature { get; internal set; } = [];
@@ -210,14 +210,14 @@ public partial class Flow : IFlow
/// those inheritedMemberships that are FeatureMemberships (but does not include any
/// importedMemberships).
///
- [Property(xmiId: "_19_0_4_12e503d9_1651076866512_962346_485", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-featureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.FeatureMembership")]
public List featureMembership { get; internal set; } = [];
///
/// The last of the chainingFeatures of this Feature, if it has any. Otherwise, this Feature itself.
///
- [Property(xmiId: "_2022x_2_12e503d9_1715790852907_110671_19", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-featureTarget", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.FeatureTarget")]
public Guid featureTarget { get; internal set; }
@@ -227,31 +227,31 @@ public partial class Flow : IFlow
/// If the Feature is chained, then the featuringTypes of the first Feature in the chain are also
/// featuringTypes of the chained Feature.
///
- [Property(xmiId: "_19_0_4_12e503d9_1603905619975_304385_743", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Features-Feature-featuringType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IFeature.FeaturingType")]
public List featuringType { get; internal set; } = [];
///
/// The connectorEnds of this Flow that are FlowEnds.
///
- [Property(xmiId: "_18_5_3_12e503d9_1563219311176_506548_20966", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 2, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1556735067666_827798_21922")]
+ [Property(xmiId: "Kernel-Interactions-Flow-flowEnd", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 2, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Kernel-Connectors-Connector-connectorEnd")]
[Implements(implementation: "IFlow.FlowEnd")]
public List flowEnd { get; internal set; } = [];
///
/// The Memberships in this Namespace that result from the ownedImports of this Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_207869_43270", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Root-Namespaces-Namespace-importedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "INamespace.ImportedMembership")]
public List importedMembership { get; internal set; } = [];
///
/// All the memberFeatures of the inheritedMemberships of this Type that are FeatureMemberships.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575499020770_15576_2334", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_326391_43166")]
+ [Property(xmiId: "Core-Types-Type-inheritedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-feature")]
[Implements(implementation: "IType.InheritedFeature")]
public List inheritedFeature { get; internal set; } = [];
@@ -259,16 +259,16 @@ public partial class Flow : IFlow
/// All Memberships inherited by this Type via Specialization or Conjugation. These are included in the
/// derived union for the memberships of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1551972927538_787976_19004", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
+ [Property(xmiId: "Core-Types-Type-inheritedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
[Implements(implementation: "IType.InheritedMembership")]
public List inheritedMembership { get; internal set; } = [];
///
/// All features related to this Type by FeatureMemberships that have direction in or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_37384_43169", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-input", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Input")]
public List input { get; internal set; } = [];
@@ -276,9 +276,9 @@ public partial class Flow : IFlow
/// The Interactions that type this Flow. Interactions are both Associations and Behaviors, which can
/// type Connectors and Steps, respectively.
///
- [Property(xmiId: "_19_0_4_12e503d9_1661900477937_518125_727", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674983_471497_43284")]
- [RedefinedProperty(propertyName: "_18_5_3_b9102da_1536346315176_954314_17388")]
+ [Property(xmiId: "Kernel-Interactions-Flow-interaction", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Kernel-Connectors-Connector-association")]
+ [RedefinedProperty(propertyName: "Kernel-Behaviors-Step-behavior")]
[Implements(implementation: "IFlow.Interaction")]
public List interaction { get; internal set; } = [];
@@ -291,7 +291,7 @@ public partial class Flow : IFlow
/// of that sex (because the interpretations of the children Feature that identify those of that sex are
/// also interpretations of the Classifier for that sex).
///
- [Property(xmiId: "_19_0_4_b9102da_1661973922199_584242_1045", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-intersectingType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IntersectingType")]
public List intersectingType { get; internal set; } = [];
@@ -299,7 +299,7 @@ public partial class Flow : IFlow
/// Indicates whether instances of this Type must also be instances of at least one of its specialized
/// Types.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_741353_43165", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isAbstract", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsAbstract")]
public bool IsAbstract { get; set; }
@@ -308,14 +308,14 @@ public partial class Flow : IFlow
/// cannot exist after its featuring instance no longer does and cannot be values of another composite
/// feature that is not on the same featuring instance.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_331870_43224", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isComposite", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsComposite")]
public bool IsComposite { get; set; }
///
/// Indicates whether this Type has an ownedConjugator.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575485930816_796088_1933", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Core-Types-Type-isConjugated", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IType.IsConjugated")]
public bool isConjugated { get; internal set; }
@@ -323,14 +323,14 @@ public partial class Flow : IFlow
/// If isVariable is true, then whether the value of this Feature nevertheless does not change over all
/// snapshots of its owningType.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674993_300560_43342", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isConstant", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsConstant")]
public bool IsConstant { get; set; }
///
/// Whether the values of this Feature can always be computed from the values of other Features.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674992_500504_43341", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isDerived", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsDerived")]
public bool IsDerived { get; set; }
@@ -344,7 +344,7 @@ public partial class Flow : IFlow
/// values of that Feature reached by navigation when the values of the other n-1 end Features are held
/// fixed.
///
- [Property(xmiId: "_18_5_3_12e503d9_1562475749426_705395_21984", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isEnd", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsEnd")]
public bool IsEnd { get; set; }
@@ -352,7 +352,7 @@ public partial class Flow : IFlow
/// Whether this Relationship was generated by tooling to meet semantic rules, rather than being
/// directly created by a modeler.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070829631_521257_3623", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Relationship-isImplied", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IRelationship.IsImplied")]
public bool IsImplied { get; set; }
@@ -363,21 +363,21 @@ public partial class Flow : IFlow
/// if it is false, then ownedRelationships may not contain any implied Relationships. That is, either
/// all required implied Relationships must be included, or none of them.
///
- [Property(xmiId: "_19_0_4_12e503d9_1662070949317_79713_3658", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Root-Elements-Element-isImpliedIncluded", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IElement.IsImpliedIncluded")]
public bool IsImpliedIncluded { get; set; }
///
/// Whether this Element is contained in the ownership tree of a library model.
///
- [Property(xmiId: "_19_0_4_12e503d9_1665443500960_5561_723", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-isLibraryElement", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.IsLibraryElement")]
public bool isLibraryElement { get; internal set; }
///
/// Whether an order exists for the values of this Feature or not.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674969_728225_43215", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isOrdered", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsOrdered")]
public bool IsOrdered { get; set; }
@@ -385,26 +385,26 @@ public partial class Flow : IFlow
/// Whether the values of this Feature are contained in the space and time of instances of the domain of
/// the Feature and represent the same thing as those instances.
///
- [Property(xmiId: "_18_5_3_b9102da_1559231981638_234817_22063", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isPortion", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsPortion")]
public bool IsPortion { get; set; }
///
/// Whether all things that meet the classification conditions of this Type must be classified by the
- /// Type.(A Type gives conditions that must be met by whatever it classifies, but when isSufficient
- /// is false, things may meet those conditions but still not be classified by the Type. For example, a
- /// Type Car that is not sufficient could require everything it classifies to have four wheels, but not
- /// all four wheeled things would classify as cars. However, if the Type Car were sufficient, it would
- /// classify all four-wheeled things.)
+ /// Type. (A Type gives conditions that must be met by whatever it classifies, but when
+ /// isSufficient is false, things may meet those conditions but still not be classified by the Type. For
+ /// example, a Type Car that is not sufficient could require everything it classifies to have four
+ /// wheels, but not all four wheeled things would classify as cars. However, if the Type Car were
+ /// sufficient, it would classify all four-wheeled things.)
///
- [Property(xmiId: "_18_5_3_b9102da_1564072709069_937523_30797", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Types-Type-isSufficient", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IType.IsSufficient")]
public bool IsSufficient { get; set; }
///
/// Whether or not values for this Feature must have no duplicates or not.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674968_321342_43214", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "true")]
+ [Property(xmiId: "Core-Features-Feature-isUnique", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "true")]
[Implements(implementation: "IFeature.IsUnique")]
public bool IsUnique { get; set; } = true;
@@ -412,7 +412,7 @@ public partial class Flow : IFlow
/// Whether the value of this Feature might vary over time. That is, whether the Feature may have a
/// different value for each snapshot of an owningType that is an Occurrence.
///
- [Property(xmiId: "_2022x_2_12e503d9_1725998273002_23711_212", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
+ [Property(xmiId: "Core-Features-Feature-isVariable", aggregation: AggregationKind.None, lowerValue: 1, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: "false")]
[Implements(implementation: "IFeature.IsVariable")]
public bool IsVariable { get; set; }
@@ -420,7 +420,7 @@ public partial class Flow : IFlow
/// The set of all member Elements of this Namespace, which are the memberElements of all memberships of
/// the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_644335_43267", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-member", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Member")]
public List member { get; internal set; } = [];
@@ -428,7 +428,7 @@ public partial class Flow : IFlow
/// All Memberships in this Namespace, including (at least) the union of ownedMemberships and
/// importedMemberships.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674962_198288_43183", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Namespaces-Namespace-membership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: true, isUnique: true, defaultValue: null)]
[Implements(implementation: "INamespace.Membership")]
public List membership { get; internal set; } = [];
@@ -437,8 +437,8 @@ public partial class Flow : IFlow
/// If there is no such ownedMember, then the cardinality of this Type is constrained by all the
/// Multiplicity constraints applicable to any direct supertypes.
///
- [Property(xmiId: "_19_0_2_12e503d9_1573095852093_324833_5396", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-multiplicity", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.Multiplicity")]
public Guid? multiplicity { get; internal set; }
@@ -448,15 +448,15 @@ public partial class Flow : IFlow
/// this is overridden for certain kinds of Elements to compute a name even when the declaredName is
/// null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1617485009541_709355_27528", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-name", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Name")]
public string name { get; internal set; }
///
/// All features related to this Type by FeatureMemberships that have direction out or inout.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_365618_43170", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Core-Types-Type-output", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IType.Output")]
public List output { get; internal set; } = [];
@@ -464,18 +464,18 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Element that are Annotations, for which this Element is the
/// annotatedElement.
///
- [Property(xmiId: "_19_0_2_12e503d9_1594152527165_702130_2500", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543094430277_599480_18543")]
+ [Property(xmiId: "Root-Elements-Element-ownedAnnotation", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Annotations-A_annotatedElement_annotation-annotation")]
[Implements(implementation: "IElement.OwnedAnnotation")]
public List ownedAnnotation { get; internal set; } = [];
///
/// A Conjugation owned by this Type for which the Type is the originalType.
///
- [Property(xmiId: "_19_0_2_12e503d9_1575482646809_280165_440", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_2_12e503d9_1575482490144_309557_300")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedConjugator", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-A_conjugatedType_conjugator-conjugator")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedConjugator")]
public Guid? ownedConjugator { get; internal set; }
@@ -483,8 +483,8 @@ public partial class Flow : IFlow
/// The one ownedSubsetting of this Feature, if any, that is a CrossSubsetting}, for which the Feature
/// is the crossingFeature.
///
- [Property(xmiId: "_19_0_4_b9102da_1689616916594_145818_277", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674970_472382_43221")]
+ [Property(xmiId: "Core-Features-Feature-ownedCrossSubsetting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-ownedSubsetting")]
[Implements(implementation: "IFeature.OwnedCrossSubsetting")]
public Guid? ownedCrossSubsetting { get; internal set; }
@@ -492,9 +492,9 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Type that are Differencings, having this Type as their
/// typeDifferenced.
///
- [Property(xmiId: "_19_0_4_b9102da_1661871168454_98082_797", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedDifferencing", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedDifferencing")]
public List ownedDifferencing { get; internal set; } = [];
@@ -502,9 +502,9 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Type that are Disjoinings, for which the Type is the typeDisjoined
/// Type.
///
- [Property(xmiId: "_19_0_4_12e503d9_1627447519613_145554_370", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_19_0_4_b9102da_1623183194914_502526_616")]
+ [Property(xmiId: "Core-Types-Type-ownedDisjoining", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_disjoiningTypeDisjoining_typeDisjoined-disjoiningTypeDisjoining")]
[Implements(implementation: "IType.OwnedDisjoining")]
public List ownedDisjoining { get; internal set; } = [];
@@ -512,24 +512,24 @@ public partial class Flow : IFlow
/// The Elements owned by this Element, derived as the ownedRelatedElements of the ownedRelationships of
/// this Element.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_112608_17278", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-ownedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.OwnedElement")]
public List ownedElement { get; internal set; } = [];
///
/// All endFeatures of this Type that are ownedFeatures.
///
- [Property(xmiId: "_18_5_3_12e503d9_1563834516278_687758_20652", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1562476168385_824569_22106")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_226999_43167")]
+ [Property(xmiId: "Core-Types-Type-ownedEndFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-endFeature")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedFeature")]
[Implements(implementation: "IType.OwnedEndFeature")]
public List ownedEndFeature { get; internal set; } = [];
///
/// The ownedMemberFeatures of the ownedFeatureMemberships of this Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_226999_43167", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_259543_43268")]
+ [Property(xmiId: "Core-Types-Type-ownedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMember")]
[Implements(implementation: "IType.OwnedFeature")]
public List ownedFeature { get; internal set; } = [];
@@ -537,9 +537,9 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Feature that are FeatureChainings, for which the Feature will be the
/// featureChained.
///
- [Property(xmiId: "_19_0_4_b9102da_1622125589880_791465_72", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Core-Features-Feature-ownedFeatureChaining", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "IFeature.OwnedFeatureChaining")]
public List ownedFeatureChaining { get; internal set; } = [];
@@ -547,9 +547,9 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Feature that are FeatureInvertings and for which the Feature is the
/// featureInverted.
///
- [Property(xmiId: "_19_0_4_b9102da_1653567738671_359235_43", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_b9102da_1623178838861_768019_145")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Features-Feature-ownedFeatureInverting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-A_invertingFeatureInverting_featureInverted-invertingFeatureInverting")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IFeature.OwnedFeatureInverting")]
public List ownedFeatureInverting { get; internal set; } = [];
@@ -557,9 +557,9 @@ public partial class Flow : IFlow
/// The ownedMemberships of this Type that are FeatureMemberships, for which the Type is the owningType.
/// Each such FeatureMembership identifies an ownedFeature of the Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674960_868417_43171", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_190614_43269")]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1651076866512_962346_485")]
+ [Property(xmiId: "Core-Types-Type-ownedFeatureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-ownedMembership")]
+ [SubsettedProperty(propertyName: "Core-Types-Type-featureMembership")]
[Implements(implementation: "IType.OwnedFeatureMembership")]
public List ownedFeatureMembership { get; internal set; } = [];
@@ -567,18 +567,18 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Namespace that are Imports, for which the Namespace is the
/// importOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674974_746786_43247", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedImport", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "INamespace.OwnedImport")]
public List ownedImport { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Intersectings, have the Type as their typeIntersected.
///
- [Property(xmiId: "_19_0_4_b9102da_1623242552144_910757_524", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Types-Type-ownedIntersecting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IType.OwnedIntersecting")]
public List ownedIntersecting { get; internal set; } = [];
@@ -586,8 +586,8 @@ public partial class Flow : IFlow
/// The owned members of this Namespace, which are the ownedMemberElements of the ownedMemberships
/// of the Namespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_259543_43268", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674979_644335_43267")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMember", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-member")]
[Implements(implementation: "INamespace.OwnedMember")]
public List ownedMember { get; internal set; } = [];
@@ -595,10 +595,10 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Namespace that are Memberships, for which the Namespace is the
/// membershipOwningNamespace.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674979_190614_43269", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674962_198288_43183")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Root-Namespaces-Namespace-ownedMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-Namespace-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "INamespace.OwnedMembership")]
public List ownedMembership { get; internal set; } = [];
@@ -606,8 +606,8 @@ public partial class Flow : IFlow
/// The ownedSubsettings of this Feature that are Redefinitions, for which the Feature is the
/// redefiningFeature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_161813_43220", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674970_472382_43221")]
+ [Property(xmiId: "Core-Features-Feature-ownedRedefinition", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-ownedSubsetting")]
[Implements(implementation: "IFeature.OwnedRedefinition")]
public List ownedRedefinition { get; internal set; } = [];
@@ -615,24 +615,24 @@ public partial class Flow : IFlow
/// The one ownedSubsetting of this Feature, if any, that is a ReferenceSubsetting, for which the
/// Feature is the referencingFeature.
///
- [Property(xmiId: "_19_0_4_12e503d9_1661555161564_247405_255", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674970_472382_43221")]
+ [Property(xmiId: "Core-Features-Feature-ownedReferenceSubsetting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-ownedSubsetting")]
[Implements(implementation: "IFeature.OwnedReferenceSubsetting")]
public Guid? ownedReferenceSubsetting { get; internal set; }
///
/// The relatedElements of this Relationship that are owned by the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_59873_43302", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-ownedRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwnedRelatedElement")]
public List OwnedRelatedElement { get; set; } = [];
///
/// The Relationships for which this Element is the owningRelatedElement.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_217766_16748", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-ownedRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwnedRelationship")]
public List OwnedRelationship { get; set; } = [];
@@ -640,9 +640,9 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Type that are Specializations, for which the Type is the specific
/// Type.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674959_579676_43168", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674984_558067_43292")]
+ [Property(xmiId: "Core-Types-Type-ownedSpecialization", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Core-Types-A_specific_specialization-specialization")]
[Implements(implementation: "IType.OwnedSpecialization")]
public List ownedSpecialization { get; internal set; } = [];
@@ -650,9 +650,9 @@ public partial class Flow : IFlow
/// The ownedSpecializations of this Feature that are Subsettings, for which the Feature is the
/// subsettingFeature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_472382_43221", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_579676_43168")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674966_718145_43205")]
+ [Property(xmiId: "Core-Features-Feature-ownedSubsetting", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedSpecialization")]
+ [SubsettedProperty(propertyName: "Core-Features-A_subsettingFeature_subsetting-subsetting")]
[Implements(implementation: "IFeature.OwnedSubsetting")]
public List ownedSubsetting { get; internal set; } = [];
@@ -660,9 +660,9 @@ public partial class Flow : IFlow
/// The ownedRelationships of this Feature that are TypeFeaturings and for which the Feature is the
/// featureOfType.
///
- [Property(xmiId: "_19_0_4_12e503d9_1603905673975_310948_762", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1603904928950_196800_580")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
+ [Property(xmiId: "Core-Features-Feature-ownedTypeFeaturing", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-A_featureOfType_typeFeaturing-typeFeaturing")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
[Implements(implementation: "IFeature.OwnedTypeFeaturing")]
public List ownedTypeFeaturing { get; internal set; } = [];
@@ -670,18 +670,18 @@ public partial class Flow : IFlow
/// The ownedSpecializations of this Feature that are FeatureTypings, for which the Feature is the
/// typedFeature.
///
- [Property(xmiId: "_19_0_2_12e503d9_1596597427751_965862_42", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_579676_43168")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543180501615_804591_21100")]
+ [Property(xmiId: "Core-Features-Feature-ownedTyping", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedSpecialization")]
+ [SubsettedProperty(propertyName: "Core-Features-A_typing_typedFeature-typing")]
[Implements(implementation: "IFeature.OwnedTyping")]
public List ownedTyping { get; internal set; } = [];
///
/// The ownedRelationships of this Type that are Unionings, having the Type as their typeUnioned.
///
- [Property(xmiId: "_19_0_4_b9102da_1661869978505_968809_460", aggregation: AggregationKind.Composite, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1543092026091_217766_16748")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674971_80547_43227")]
+ [Property(xmiId: "Core-Types-Type-ownedUnioning", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-ownedRelationship")]
+ [SubsettedProperty(propertyName: "Root-Elements-A_source_sourceRelationship-sourceRelationship")]
[Implements(implementation: "IType.OwnedUnioning")]
public List ownedUnioning { get; internal set; } = [];
@@ -689,24 +689,24 @@ public partial class Flow : IFlow
/// The owner of this Element, derived as the owningRelatedElement of the owningRelationship of this
/// Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092869879_744477_17277", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-owner", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.Owner")]
public Guid? owner { get; internal set; }
///
/// The FeatureMembership that owns this Feature as an ownedMemberFeature, determining its owningType.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674970_68441_43223", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674972_622493_43236")]
+ [Property(xmiId: "Core-Features-Feature-owningFeatureMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningMembership")]
[Implements(implementation: "IFeature.OwningFeatureMembership")]
public Guid? owningFeatureMembership { get; internal set; }
///
/// The owningRelationship of this Element, if that Relationship is a Membership.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674972_622493_43236", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674973_469277_43243")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_482273_43303")]
+ [Property(xmiId: "Root-Elements-Element-owningMembership", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_memberElement_membership-membership")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningRelationship")]
[Implements(implementation: "IElement.OwningMembership")]
public Guid? owningMembership { get; internal set; }
@@ -714,34 +714,34 @@ public partial class Flow : IFlow
/// The Namespace that owns this Element, which is the membershipOwningNamespace of the owningMembership
/// of this Element, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_474739_43306", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674980_717955_43271")]
+ [Property(xmiId: "Root-Elements-Element-owningNamespace", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Namespaces-A_member_namespace-namespace")]
[Implements(implementation: "IElement.OwningNamespace")]
public Guid? owningNamespace { get; internal set; }
///
/// The relatedElement of this Relationship that owns the Relationship, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1543092026091_693018_16749", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Root-Elements-Relationship-owningRelatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IRelationship.OwningRelatedElement")]
public Guid? OwningRelatedElement { get; set; }
///
/// The Relationship for which this Element is an ownedRelatedElement, if any.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674986_482273_43303", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_585972_43176")]
+ [Property(xmiId: "Root-Elements-Element-owningRelationship", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: false, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Root-Elements-A_relatedElement_relationship-relationship")]
[Implements(implementation: "IElement.OwningRelationship")]
public Guid? OwningRelationship { get; set; }
///
/// The Type that is the owningType of the owningFeatureMembership of this Feature.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674965_592215_43200", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674987_297074_43308")]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674986_474739_43306")]
- [SubsettedProperty(propertyName: "_19_0_4_12e503d9_1603905619975_304385_743")]
+ [Property(xmiId: "Core-Features-Feature-owningType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Features-Feature-featuringType")]
+ [SubsettedProperty(propertyName: "Core-Types-A_typeWithFeature_feature-typeWithFeature")]
+ [SubsettedProperty(propertyName: "Root-Elements-Element-owningNamespace")]
[Implements(implementation: "IFeature.OwningType")]
public Guid? owningType { get; internal set; }
@@ -749,23 +749,23 @@ public partial class Flow : IFlow
/// The parameters of this Step, which are defined as its directedFeatures, whose values are passed into
/// and/or out of a performance of the Step.
///
- [Property(xmiId: "_19_0_2_12e503d9_1595189174990_213826_657", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [RedefinedProperty(propertyName: "_19_0_4_12e503d9_1623952188842_882068_37169")]
+ [Property(xmiId: "Kernel-Behaviors-Step-parameter", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Core-Types-Type-directedFeature")]
[Implements(implementation: "IStep.Parameter")]
public List parameter { get; internal set; } = [];
///
/// The ownedFeature of the Flow that is a PayloadFeature (if any).
///
- [Property(xmiId: "_18_5_3_12e503d9_1563219424870_347345_21142", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
- [SubsettedProperty(propertyName: "_18_5_3_12e503d9_1533160674959_226999_43167")]
+ [Property(xmiId: "Kernel-Interactions-Flow-payloadFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [SubsettedProperty(propertyName: "Core-Types-Type-ownedFeature")]
[Implements(implementation: "IFlow.PayloadFeature")]
public Guid? payloadFeature { get; internal set; }
///
/// The type of values transferred, which is the type of the payloadFeature of the Flow.
///
- [Property(xmiId: "_18_5_3_b9102da_1536870569046_1672_18020", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [Property(xmiId: "Kernel-Interactions-Flow-payloadType", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
[Implements(implementation: "IFlow.PayloadType")]
public List payloadType { get; internal set; } = [];
@@ -777,7 +777,7 @@ public partial class Flow : IFlow
/// Namespace to this Element. If the owningNamespace has other Elements with the same name as this one,
/// then the qualifiedName is null for all such Elements other than the first.
///
- [Property(xmiId: "_19_0_4_12e503d9_1611356604987_900871_594", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-qualifiedName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.QualifiedName")]
public string qualifiedName { get; internal set; }
@@ -785,7 +785,7 @@ public partial class Flow : IFlow
/// The Elements that are related by this Relationship, derived as the union of the source and target
/// Elements of the Relationship.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674961_132339_43177", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Relationship-relatedElement", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
[RedefinedByProperty("IConnector.RelatedFeature")]
[Implements(implementation: "IRelationship.RelatedElement")]
List Root.Elements.IRelationship.relatedElement => [.. this.relatedFeature];
@@ -794,8 +794,8 @@ public partial class Flow : IFlow
/// The Features that are related by this Connector considered as a Relationship and that restrict the
/// links it identifies, given by the referenced Features of the connectorEnds of the Connector.
///
- [Property(xmiId: "_18_5_3_12e503d9_1533160674968_916334_43210", aggregation: AggregationKind.None, lowerValue: 0, upperValue: int.MaxValue, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
- [RedefinedProperty(propertyName: "_18_5_3_12e503d9_1533160674961_132339_43177")]
+ [Property(xmiId: "Kernel-Connectors-Connector-relatedFeature", aggregation: AggregationKind.None, lowerValue: 0, upperValue: -1, isOrdered: true, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: false, defaultValue: null)]
+ [RedefinedProperty(propertyName: "Root-Elements-Relationship-relatedElement")]
[Implements(implementation: "IConnector.RelatedFeature")]
public List relatedFeature { get; internal set; } = [];
@@ -805,15 +805,15 @@ public partial class Flow : IFlow
/// declaredShortName, but this is overridden for certain kinds of Elements to compute a shortName even
/// when the declaredName is null.
///
- [Property(xmiId: "_19_0_4_12e503d9_1673496405504_544235_24", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
+ [Property(xmiId: "Root-Elements-Element-shortName", aggregation: AggregationKind.None, lowerValue: 0, upperValue: 1, isOrdered: false, isReadOnly: false, isDerived: true, isDerivedUnion: false, isUnique: true, defaultValue: null)]
[Implements(implementation: "IElement.ShortName")]
public string shortName { get; internal set; }
///