From 3f67917976a4963c231e4802073c4a82ccfb9505 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 00:36:28 +0000 Subject: [PATCH 01/16] fix(export): own a declaration head's relationships in the order the notation spells them ownedRelationship is ordered (KerML 8.3.2.1.2) and the notation adds an element's owned relationships as it parses each clause (KerML 8.2.1, SysML 8.2), so a usage's typing, specializations and multiplicity are owned in the order written, ahead of its FeatureValue and its body members; the writer seated the materialized relationships last. The reader spells a head back in that order. Co-Authored-By: jason.han --- internal/translate/export/rdf_expr.go | 2 +- internal/translate/export/rdf_in.go | 156 +++++++++++++++++++-- internal/translate/export/rdf_normative.go | 148 ++++++++++++++++--- internal/translate/export/rdf_out.go | 65 +++++++-- internal/translate/rdf/term.go | 26 ++++ tests/export/anonymous_keywords_test.go | 2 +- tests/export/export_test.go | 2 +- tests/export/flow_payload_test.go | 4 +- tests/export/graph_only_notation_test.go | 6 +- tests/export/result_expression_test.go | 2 +- 10 files changed, 363 insertions(+), 50 deletions(-) diff --git a/internal/translate/export/rdf_expr.go b/internal/translate/export/rdf_expr.go index e28f8524c3..999e44ecbb 100644 --- a/internal/translate/export/rdf_expr.go +++ b/internal/translate/export/rdf_expr.go @@ -495,7 +495,7 @@ func (e *encoder) bodyParameter(subject, base rdf.Term, owner string, index int, e.name(node, param.Name) e.flags(node, []boolProperty{{"isReference", param.IsReference}}) if param.Type != nil { - e.graph.Add(node, e.sysml(relationshipProperty[ast.RelTyping]), e.reference(param.Type)) + e.headRelationship(node, ast.RelTyping, e.reference(param.Type), param.Type) } e.relationships(node, owner, param.Relationships) e.bodyMembership(subject, node, mFeatureMembership) diff --git a/internal/translate/export/rdf_in.go b/internal/translate/export/rdf_in.go index 82b4de66a0..596a7aaca1 100644 --- a/internal/translate/export/rdf_in.go +++ b/internal/translate/export/rdf_in.go @@ -2615,7 +2615,17 @@ func (d *decoder) usageHead(el *element, kind ast.UsageKind) (string, error) { } typedPart := "" namedMult := false + placed, leads := d.multiplicityPlacement(el) switch { + case leads && len(identWords) > 0 && multPart != "": + identWords[len(identWords)-1] += multPart + namedMult, multPart = true, "" + case leads && referenced && multPart != "": + words[len(words)-1] += multPart + multPart = "" + case placed: + // The owned relationships place the multiplicity among the clauses. + typedPart, multPart = multPart, "" case len(typed) > 0: typedPart, multPart = multPart, "" case len(identWords) > 0 && multPart != "": @@ -4071,37 +4081,157 @@ func (d *decoder) visibility(el *element) string { } // relationshipWords renders the typing and specialization clauses of a -// declaration head, in the order the grammar expects. multPart, when given, is -// the multiplicity part the typing clause carries. +// declaration head in the order the head was spelled, which the relationship +// elements el owns state in ownedRelationship order, and in relationshipOrder +// for clauses no owned relationship places. multPart, when given, is the +// multiplicity part, written where the multiplicity's membership stands among +// those relationships, else with the typing clause. func (d *decoder) relationshipWords(el *element, multPart string, skip ...ast.RelationshipKind) ([]string, error) { - var words []string + targets := map[ast.RelationshipKind][]string{} for _, kind := range relationshipOrder { if slices.Contains(skip, kind) { continue } - targets, err := d.referenceList(el, rdf.SysML+relationshipProperty[kind]) + names, err := d.referenceList(el, rdf.SysML+relationshipProperty[kind]) if err != nil { return nil, err } - if len(targets) == 0 { - continue - } // Conjugation qualifies the type a feature is typed by, not the feature // itself: the notation is `port p : ~P` (SysML v2 ConjugatedPortTyping). if kind == ast.RelTyping && d.boolOf(el, rdf.OpenSysML+xConjugatedTyping) { - for i, target := range targets { - targets[i] = "~" + target + for i, name := range names { + names[i] = "~" + name + } + } + targets[kind] = names + } + spelled := d.spelledHead(el) + placed := slices.ContainsFunc(spelled, func(c headClause) bool { return c.multiplicity }) + written := map[headClause]bool{} + var words []string + clause := func(kind ast.RelationshipKind, names []string) { + text := strings.Join(names, ", ") + if kind == ast.RelTyping && !placed { + text += multPart + } + words = append(words, relationshipSyntax[kind], text) + } + for i := 0; i < len(spelled); i++ { + c := spelled[i] + if c.multiplicity { + if multPart == "" { + continue + } + if len(words) == 0 { + words = append(words, strings.TrimSpace(multPart)) + } else { + words[len(words)-1] += multPart } + continue } - clause := strings.Join(targets, ", ") - if kind == ast.RelTyping { - clause += multPart + if c.index >= len(targets[c.kind]) { + continue + } + // Consecutive clauses of one kind are one list (`:> a, b`). + var names []string + for ; i < len(spelled) && spelled[i].kind == c.kind && !spelled[i].multiplicity; i++ { + if spelled[i].index < len(targets[c.kind]) { + names = append(names, targets[c.kind][spelled[i].index]) + written[spelled[i]] = true + } + } + i-- + clause(c.kind, names) + } + for _, kind := range relationshipOrder { + var names []string + for index, name := range targets[kind] { + if !written[headClause{kind: kind, index: index}] { + names = append(names, name) + } + } + if len(names) > 0 { + clause(kind, names) } - words = append(words, relationshipSyntax[kind], clause) } return words, nil } +// multiplicityPlacement reports whether el's owned relationships place its +// multiplicity among the head's clauses, for relationshipWords to write there, +// and whether it leads them (`p[*] ordered : Fuel`), where it follows the name. +func (d *decoder) multiplicityPlacement(el *element) (placed, leads bool) { + spelled := d.spelledHead(el) + placed = slices.ContainsFunc(spelled, func(c headClause) bool { return c.multiplicity }) + return placed, placed && spelled[0].multiplicity +} + +// headClause is one clause of a declaration head as the graph places it: the +// kind and position of a collapsed property's target, or the multiplicity. +type headClause struct { + kind ast.RelationshipKind + index int + multiplicity bool +} + +// headClauseKinds are the collapsed properties a materialized relationship +// element may state, by the element's metaclass; a Subsetting is a feature's +// `subsets` or its `specializes`, a ReferenceSubsetting a `references` or an +// end form's `subsets`, which the target tells apart. +var headClauseKinds = map[string][]ast.RelationshipKind{ + mFeatureTyping: {ast.RelTyping}, + mConjugatedPortTyping: {ast.RelTyping}, + mSubclassification: {ast.RelSpecializes}, + mSpecialization: {ast.RelSpecializes}, + mSubsetting: {ast.RelSubsets, ast.RelSpecializes}, + mRedefinition: {ast.RelRedefines}, + mReferenceSubsetting: {ast.RelReferences, ast.RelSubsets}, +} + +// spelledHead reads the order el's head was spelled from what el owns in +// ownedRelationship order: each relationship element as the clause of the +// collapsed property whose target it relates, and the multiplicity range's +// membership as the multiplicity. A graph stating the collapsed properties +// alone yields none. +func (d *decoder) spelledHead(el *element) []headClause { + subject := rdf.IRI(el.iri) + objects := map[ast.RelationshipKind][]rdf.Term{} + for _, kind := range relationshipOrder { + objects[kind] = d.graph.Objects(subject, rdf.SysML+relationshipProperty[kind]) + } + taken := map[headClause]bool{} + var clauses []headClause + for _, owned := range d.graph.Objects(subject, rdf.SysML+pOwnedRelationship) { + metaclass := d.metaclass(owned) + if metaclass == mOwningMembership { + if member, ok := d.graph.Object(owned, rdf.SysML+pMemberElement); ok && d.metaclass(member) == mMultiplicityRange { + clauses = append(clauses, headClause{multiplicity: true}) + } + continue + } + target, ok := d.graph.Object(owned, rdf.SysML+pTarget) + if metaclass == mConjugatedPortTyping { + target, ok = d.graph.Object(owned, rdf.SysML+pPortDefinition) + } + if !ok { + continue + } + for _, kind := range headClauseKinds[metaclass] { + index := slices.IndexFunc(objects[kind], func(object rdf.Term) bool { + return object == target && !taken[headClause{kind: kind, index: slices.Index(objects[kind], object)}] + }) + if index < 0 { + continue + } + clause := headClause{kind: kind, index: index} + taken[clause] = true + clauses = append(clauses, clause) + break + } + } + return clauses +} + func (d *decoder) multiplicityText(el *element) string { lower, hasLower := d.stringOf(el, rdf.SysML+pLowerBound) upper, hasUpper := d.stringOf(el, rdf.SysML+pUpperBound) diff --git a/internal/translate/export/rdf_normative.go b/internal/translate/export/rdf_normative.go index 3c5cbb7861..e8d2b2fafd 100644 --- a/internal/translate/export/rdf_normative.go +++ b/internal/translate/export/rdf_normative.go @@ -9,7 +9,9 @@ package export // choosing between them. import ( + "cmp" "fmt" + "slices" "strings" "github.com/Open-MBEE/OpenSysML/internal/semantic/identity" @@ -111,30 +113,139 @@ type normativeRelationship struct { ownedProps []string } +// declarationHead records one declaration head as the notation spelled it: +// its clauses with their source offsets, and how many owned relationships the +// element stated ahead of the head (its prefix metadata). The relationship +// elements the head's clauses materialize are owned in that order, ahead of +// the FeatureValue and the body, as ownedRelationship is ordered (KerML +// 8.3.2.1.2) and the notation adds an owned relationship as it parses each +// clause (KerML 8.2.1, SysML 8.2: `ownedRelationship += …`). +type declarationHead struct { + anchor int + items []headItem +} + +// headItem is one head clause: a specialization clause by its kind and the +// object of its collapsed property, or the multiplicity by its OwningMembership. +type headItem struct { + kind ast.RelationshipKind + element rdf.Term + offset int + multiplicity bool +} + +// materializedKinds are the collapsed head properties materializeRelationships +// emits relationship elements for, in the order a head no notation spelled +// states them. +var materializedKinds = []ast.RelationshipKind{ + ast.RelTyping, ast.RelSpecializes, ast.RelSubsets, ast.RelRedefines, ast.RelReferences, +} + // materializeRelationships emits one relationship element per target of each -// collapsed head property subject states, in the property's stated order. +// collapsed head property subject states, in the order the notation spelled +// the clauses, and seats them with the multiplicity's membership where the +// head stands in ownedRelationship. func (e *encoder) materializeRelationships(subject rdf.Term) { // A membership is no feature: its collapsed head properties stay collapsed, // as an expression node's do. if ontology.IsAncestorOrSelf(e.metaclassOf(subject), "Membership") { return } - for _, kind := range []ast.RelationshipKind{ - ast.RelTyping, ast.RelSpecializes, ast.RelSubsets, ast.RelRedefines, ast.RelReferences, - } { - targets := e.graph.Objects(subject, rdf.SysML+relationshipProperty[kind]) - for i, target := range targets { - spec, ok := e.relationshipSpec(subject, kind, len(targets), i) - if !ok { + type pending struct { + kind ast.RelationshipKind + target rdf.Term + count int + index int + } + var targets []pending + position := map[headItem]int{} + for _, kind := range materializedKinds { + objects := e.graph.Objects(subject, rdf.SysML+relationshipProperty[kind]) + for i, target := range objects { + position[headItem{kind: kind, element: target}] = len(targets) + targets = append(targets, pending{kind, target, len(objects), i}) + } + } + emitted := make([]bool, len(targets)) + var block []rdf.Term + emit := func(at int) { + if emitted[at] { + return + } + emitted[at] = true + p := targets[at] + spec, ok := e.relationshipSpec(subject, p.kind, p.count, p.index) + if !ok { + return + } + if p.kind == ast.RelTyping && e.graph.BoolValue(subject, rdf.OpenSysML+xConjugatedTyping) { + block = append(block, e.emitConjugatedPortTyping(subject, p.target, spec)) + return + } + block = append(block, e.emitRelationship(subject, p.target, spec)) + } + head := e.heads[subject] + if head != nil { + for _, item := range head.spelled() { + if item.multiplicity { + block = append(block, item.element) continue } - if kind == ast.RelTyping && e.graph.BoolValue(subject, rdf.OpenSysML+xConjugatedTyping) { - e.emitConjugatedPortTyping(subject, target, spec) - continue + if at, ok := position[headItem{kind: item.kind, element: item.element}]; ok { + emit(at) } - e.emitRelationship(subject, target, spec) } } + for at := range targets { + emit(at) + } + if head != nil { + e.seatHead(subject, head.anchor, block) + } +} + +// spelled is the head's clauses in the order the notation spelled them; a +// clause nothing spelled follows them in the order it was stated. +func (h *declarationHead) spelled() []headItem { + items := slices.Clone(h.items) + slices.SortStableFunc(items, func(a, b headItem) int { + switch { + case a.offset < 0 || b.offset < 0: + return cmp.Compare(b.offset, a.offset) + default: + return cmp.Compare(a.offset, b.offset) + } + }) + return items +} + +// seatHead restates subject's ownedRelationship with the head's block of +// elements at anchor: what was owned ahead of the head stays ahead, and the +// FeatureValue, the body and whatever else follows keeps its order after it. +func (e *encoder) seatHead(subject rdf.Term, anchor int, block []rdf.Term) { + objects := e.graph.Objects(subject, rdf.SysML+pOwnedRelationship) + if anchor > len(objects) { + anchor = len(objects) + } + seated := make(map[rdf.Term]bool, len(block)) + for _, element := range block { + seated[element] = true + } + order := make([]rdf.Term, 0, len(objects)) + order = append(order, objects[:anchor]...) + for _, element := range block { + if slices.Contains(objects, element) { + order = append(order, element) + } + } + for _, element := range objects[anchor:] { + if !seated[element] { + order = append(order, element) + } + } + if !slices.Equal(order, objects) { + e.graph.ReorderObjects(subject, rdf.SysML+pOwnedRelationship, order) + } } // relationshipSpec picks the materialization of one collapsed property on @@ -215,23 +326,24 @@ func (e *encoder) referenceSubsettingSpec(count, i int) normativeRelationship { // emitConjugatedPortTyping materializes `: ~P` as a ConjugatedPortTyping whose // type is P's ConjugatedPortDefinition and whose portDefinition is P itself // (SysML v2 1.0 § 8.3.12 Ports); an external P is named `~P` by the literal. -func (e *encoder) emitConjugatedPortTyping(subject, target rdf.Term, spec normativeRelationship) { +func (e *encoder) emitConjugatedPortTyping(subject, target rdf.Term, spec normativeRelationship) rdf.Term { spec.metaclass = mConjugatedPortTyping spec.targetEnds = append([]string{pConjugatedPortDefinition}, spec.targetEnds...) conjugated := rdf.String("~" + target.Value) if target.IsIRI() { conjugated = e.ids.minted(rdf.RelationshipIRI(target, "_conjugated"), target, "_conjugated") } - e.emitRelationship(subject, conjugated, spec) - relation := e.ids.minted(rdf.RelationshipIRI(subject, spec.suffix), subject, spec.suffix) + relation := e.emitRelationship(subject, conjugated, spec) e.graph.Add(relation, e.sysml(pPortDefinition), target) + return relation } // emitRelationship mints the relationship element between subject and target // and wires its ends, its identity and its owner's owned-* properties. -func (e *encoder) emitRelationship(subject, target rdf.Term, spec normativeRelationship) { - e.emitRelationshipAt(subject, target, spec, - e.ids.minted(rdf.RelationshipIRI(subject, spec.suffix), subject, spec.suffix)) +func (e *encoder) emitRelationship(subject, target rdf.Term, spec normativeRelationship) rdf.Term { + relation := e.ids.minted(rdf.RelationshipIRI(subject, spec.suffix), subject, spec.suffix) + e.emitRelationshipAt(subject, target, spec, relation) + return relation } // emitRelationshipAt is emitRelationship with the relationship element's IRI diff --git a/internal/translate/export/rdf_out.go b/internal/translate/export/rdf_out.go index 98cd52d256..c6522b0c0f 100644 --- a/internal/translate/export/rdf_out.go +++ b/internal/translate/export/rdf_out.go @@ -587,6 +587,7 @@ func newEncoderOver(file *source.SourceFile, root *ast.RootNamespace, form IDFor subjects: map[string]string{}, regions: map[rdf.Term]region{}, verifiedReferences: map[rdf.Term]bool{}, + heads: map[rdf.Term]*declarationHead{}, bodies: map[rdf.Term]region{}, offsets: map[string]int{}, } @@ -675,6 +676,9 @@ type encoder struct { // OwnedReferenceSubsetting of RequirementVerificationUsage, as against a // declaration (`verify requirement :> r;`), whose `:>` is a Subsetting. verifiedReferences map[rdf.Term]bool + // heads records each declaration head's clauses in the order the notation + // spelled them, for the order its relationship elements are owned in. + heads map[rdf.Term]*declarationHead // membershipImports are the membership imports, whose imported membership // is written once every membership is minted. membershipImports []membershipImport @@ -1661,11 +1665,11 @@ func (e *encoder) encodeMember(h memberHead, owner string) error { return err } if implicitTarget.Value != "" { - e.graph.Add(subject, e.sysml(relationshipProperty[ast.RelRedefines]), implicitTarget) + e.headRelationship(subject, ast.RelRedefines, implicitTarget, nil) e.graph.Add(subject, e.sysx(xImplicitRedefinition), rdf.Bool(true)) } if variantTarget.Value != "" { - e.graph.Add(subject, e.sysml(relationshipProperty[ast.RelReferences]), variantTarget) + e.headRelationship(subject, ast.RelReferences, variantTarget, nil) } if err := e.featureValue(subject, within, n.Value, n.ValueIsDefault, n.ValueIsInitial); err != nil { return err @@ -1905,12 +1909,12 @@ func (e *encoder) encodeMember(h memberHead, owner string) error { head(rdf.SysMLTerm(mReferenceUsage)) e.ident(subject, n.Ident) e.graph.Add(subject, e.sysml(pDirection), rdf.String("in")) - if n.TypeRef != nil { - e.graph.Add(subject, e.sysml(relationshipProperty[ast.RelTyping]), e.reference(n.TypeRef)) - } if err := e.prefixes(subject, fqn, n.Prefixes, n.Body); err != nil { return err } + if n.TypeRef != nil { + e.headRelationship(subject, ast.RelTyping, e.reference(n.TypeRef), n.TypeRef) + } e.relationships(subject, owner, n.Relationships) if err := e.multiplicity(subject, within, n.Multiplicity); err != nil { return err @@ -2938,11 +2942,12 @@ func withoutComments(text string) string { } // relationships writes a head's clauses in relationshipOrder, not the order the -// notation spelled them in, so the Turtle is the same for every spelling. +// notation spelled them in, so the collapsed Turtle is the same for every +// spelling; the order spelled is kept for the relationship elements +// materializeRelationships emits, as ownedRelationship is ordered. func (e *encoder) relationships(subject rdf.Term, owner string, rels []*ast.Relationship) { chains := chainTargets(rels) for _, kind := range relationshipOrder { - property := relationshipProperty[kind] for _, rel := range rels { if rel == nil || rel.Target == nil || rel.Kind != kind { continue @@ -2950,16 +2955,54 @@ func (e *encoder) relationships(subject rdf.Term, owner string, rels []*ast.Rela // A name is a reference; a feature chain is the chain Feature the // materialized relationship owns, other expressions written text. if k, chained := chains[rel]; chained { - e.graph.Add(subject, e.sysml(property), e.headChain(subject, rel.Target, k)) + e.headRelationship(subject, kind, e.headChain(subject, rel.Target, k), rel) continue } if name, ok := rel.Target.(*ast.QualifiedName); ok { - e.graph.Add(subject, e.sysml(property), e.reference(name)) + e.headRelationship(subject, kind, e.reference(name), rel) continue } - e.graph.Add(subject, e.sysml(property), rdf.TypedLiteral(e.text(rel.Target), rdf.OpenSysML+dtExpression)) + e.headRelationship(subject, kind, rdf.TypedLiteral(e.text(rel.Target), rdf.OpenSysML+dtExpression), rel) + } + } +} + +// headRelationship states one clause of subject's declaration head as the +// collapsed property of its kind and records where the notation spelled it; +// a clause no notation spelled (an implicit redefinition) passes a nil node. +func (e *encoder) headRelationship(subject rdf.Term, kind ast.RelationshipKind, object rdf.Term, clause ast.Node) { + e.graph.Add(subject, e.sysml(relationshipProperty[kind]), object) + e.headOf(subject).items = append(e.headOf(subject).items, headItem{kind: kind, element: object, offset: clauseOffset(clause)}) +} + +// headOf is the record of subject's declaration head, opened where its +// ownedRelationship stands when the head's first clause is stated: what is +// owned ahead of that (prefix metadata) stays ahead of the head. +func (e *encoder) headOf(subject rdf.Term) *declarationHead { + head := e.heads[subject] + if head == nil { + head = &declarationHead{anchor: len(e.graph.Objects(subject, rdf.SysML+pOwnedRelationship))} + e.heads[subject] = head + } + return head +} + +// clauseOffset is where the notation spelled a head clause, read from the +// clause's span or, for a relationship parsed without one, its target's; -1 +// for a clause nothing spelled. +func clauseOffset(clause ast.Node) int { + if clause == nil { + return -1 + } + if span := clause.Span(); span.Len > 0 { + return span.Offset + } + if rel, ok := clause.(*ast.Relationship); ok && rel.Target != nil { + if span := rel.Target.Span(); span.Len > 0 { + return span.Offset } } + return -1 } // chainTargets indexes the qualified-name relationship targets written as a @@ -3044,6 +3087,8 @@ func (e *encoder) multiplicity(subject rdf.Term, owner string, mult *ast.Multipl e.graph.Add(rangeNode, e.sysml(pElementID), rdf.String(rdf.LocalName(rangeNode.Value))) e.graph.Add(subject, e.sysml(pMultiplicity), rangeNode) e.emitMembershipCore(membership, rangeNode, subject, mOwningMembership, true) + head := e.headOf(subject) + head.items = append(head.items, headItem{element: membership, offset: clauseOffset(mult), multiplicity: true}) e.graph.Add(subject, e.sysml(pOwnedRelationship), membership) e.graph.Add(subject, e.sysml(pOwnedMembership), membership) return e.multiplicityBounds(subject, rangeNode, owner, mult) diff --git a/internal/translate/rdf/term.go b/internal/translate/rdf/term.go index e86df92773..714b54829d 100644 --- a/internal/translate/rdf/term.go +++ b/internal/translate/rdf/term.go @@ -465,6 +465,32 @@ func (g *Graph) RewriteTriples(rewrite func(*Triple) bool) { g.subjectsReady = true } +// ReorderObjects restates the objects of (subject, predicate) in the order +// given, each triple keeping its place in the graph; objects must be a +// permutation of Objects(subject, predicate), and any other list leaves the +// graph as it was. +func (g *Graph) ReorderObjects(subject Term, predicate string, objects []Term) { + si := g.subjects()[subject] + if si == nil || len(si.objects[predicate]) != len(objects) { + return + } + found := si.objects[predicate] + current := make(map[Term]int, len(found)) + for _, index := range found { + current[g.triples[index].Object]++ + } + for _, object := range objects { + if current[object] == 0 { + return + } + current[object]-- + } + g.settled = false + for i, index := range found { + g.triples[index].Object = objects[i] + } +} + // Len returns the number of triples. func (g *Graph) Len() int { return len(g.triples) } diff --git a/tests/export/anonymous_keywords_test.go b/tests/export/anonymous_keywords_test.go index deb7a32e71..ad899a61c9 100644 --- a/tests/export/anonymous_keywords_test.go +++ b/tests/export/anonymous_keywords_test.go @@ -94,7 +94,7 @@ func TestAnonymousKeywordsComeBackFromTheTypedFactsAlone(t *testing.T) { want: []string{"event occurrence", "event occurrence ack;", "event occurrence : Exchange;"}, }, { fixture: "anonymous_portions.sysml", - want: []string{"snapshot occurrence redefines start {", "timeslice occurrence redefines portionOfLife {", "snapshot occurrence subsets fuel redefines done {"}, + want: []string{"snapshot occurrence redefines start {", "timeslice occurrence redefines portionOfLife {", "snapshot occurrence redefines done subsets fuel {"}, }, { fixture: "anonymous_assertions.sysml", want: []string{"assert constraint references massConstraint {", "assert not constraint references massConstraint;", "assert constraint {"}, diff --git a/tests/export/export_test.go b/tests/export/export_test.go index 052a783560..7c24ffa3b8 100644 --- a/tests/export/export_test.go +++ b/tests/export/export_test.go @@ -3877,7 +3877,7 @@ func TestLinkedReferencesCarryTheRoundTripWithoutSourceText(t *testing.T) { "ref spare references spare;", "attribute s = w.size;", "part redefines G2::x;", - "part : Inner::Wheel redefines w;", + "part redefines w : Inner::Wheel;", "transition idle then Done::done;", "part unresolved : Elsewhere::Missing;", "public import Meta::*[@Safety];", diff --git a/tests/export/flow_payload_test.go b/tests/export/flow_payload_test.go index 68ee171ac2..0a84b7bbca 100644 --- a/tests/export/flow_payload_test.go +++ b/tests/export/flow_payload_test.go @@ -341,7 +341,7 @@ func TestPayloadIdentityAndMembership(t *testing.T) { // The multiplicity part of a declared payload may come before its typing, its // `ordered` included: `of p[*] ordered : Fuel` declares p, as `of p : Fuel[*] -// ordered` does, and comes back in that second spelling. +// ordered` does, and comes back in the spelling it was written in. func TestPayloadMultiplicityPartBeforeTheTyping(t *testing.T) { const model = `package Q { item def Fuel; @@ -358,7 +358,7 @@ func TestPayloadMultiplicityPartBeforeTheTyping(t *testing.T) { if !strings.Contains(string(turtle), "elmt:Q__Ctx___402__p\n a sysml:PayloadFeature ;") { t.Errorf("p is not declared as the payload:\n%s", turtle) } - if !strings.Contains(string(back), "flow of p : Fuel[*] ordered from x.i to y.j;") { + if !strings.Contains(string(back), "flow of p[*] ordered : Fuel from x.i to y.j;") { t.Errorf("the payload did not come back declared:\n%s", back) } } diff --git a/tests/export/graph_only_notation_test.go b/tests/export/graph_only_notation_test.go index 081c2c6dd6..2793dc6517 100644 --- a/tests/export/graph_only_notation_test.go +++ b/tests/export/graph_only_notation_test.go @@ -268,8 +268,8 @@ func TestExpressionBodiesAndChainsFromTheGraphAlone(t *testing.T) { "notEmpty(xs) implies sub.xs->size() > 0 xor false") } -// A usage redefining a namesake keeps that target through the graph alone even -// though the writer puts `redefines causes` after `subsets participant`. +// A usage redefining a namesake keeps that target through the graph alone, in +// the order the head spelled `redefines causes` and `subsets participant`. func TestSelfNamedRedefinitionTargetSurvivesTheGraphAlone(t *testing.T) { src := `package P { abstract occurrence causes[*]; @@ -282,7 +282,7 @@ func TestSelfNamedRedefinitionTargetSurvivesTheGraphAlone(t *testing.T) { } ` back := notationFromTheGraphAlone(t, "p.sysml", src) - wantFragments(t, back, "occurrence causes[1..*] subsets participant redefines causes;") + wantFragments(t, back, "occurrence causes[1..*] redefines causes subsets participant;") } // An unnamed usage takes its name from the first feature it redefines, so a diff --git a/tests/export/result_expression_test.go b/tests/export/result_expression_test.go index 4d9b3e2dd2..343efde95b 100644 --- a/tests/export/result_expression_test.go +++ b/tests/export/result_expression_test.go @@ -1040,7 +1040,7 @@ func TestExpressionBodyParameterIsDeclaredOutsideTheBody(t *testing.T) { "expr:Params__one_pvalue_pa0_pin0\n a sysml:ReferenceUsage ;", "sysml:declaredName \"Gauge\" ;\n sysml:type elmt:Params__Gauge ;\n sysml:owner expr:Params__one_pvalue_pa0_pbody ;", "expr:Params__two_pvalue_pa0_pin0\n a sysml:ReferenceUsage ;", - "sysml:declaredName \"limit\" ;\n sysml:type elmt:Params__Gauge ;\n sysml:owner expr:Params__two_pvalue_pa0_pbody ;\n sysml:owningRelationship expr:Params__two_pvalue_pa0_pin0_om ;\n sysml:owningMembership expr:Params__two_pvalue_pa0_pin0_om ;\n sysml:multiplicity expr:Params__two_pvalue_pa0_pin0_pmultiplicity ;\n sysml:ownedRelationship expr:Params__two_pvalue_pa0_pin0_pmultiplicity_om, expr:Params__two_pvalue_pa0_pin0_ft0 ;\n sysml:ownedMembership expr:Params__two_pvalue_pa0_pin0_pmultiplicity_om ;\n sysml:lowerBound expr:Params__two_pvalue_pa0_pin0_plowerBound ;\n sysml:upperBound expr:Params__two_pvalue_pa0_pin0_pupperBound ;\n sysml:value expr:Params__two_pvalue_pa0_pin0_pvalue ;\n sysml:ownedTyping expr:Params__two_pvalue_pa0_pin0_ft0 ;", + "sysml:declaredName \"limit\" ;\n sysml:type elmt:Params__Gauge ;\n sysml:owner expr:Params__two_pvalue_pa0_pbody ;\n sysml:owningRelationship expr:Params__two_pvalue_pa0_pin0_om ;\n sysml:owningMembership expr:Params__two_pvalue_pa0_pin0_om ;\n sysml:multiplicity expr:Params__two_pvalue_pa0_pin0_pmultiplicity ;\n sysml:ownedRelationship expr:Params__two_pvalue_pa0_pin0_ft0, expr:Params__two_pvalue_pa0_pin0_pmultiplicity_om ;\n sysml:ownedMembership expr:Params__two_pvalue_pa0_pin0_pmultiplicity_om ;\n sysml:lowerBound expr:Params__two_pvalue_pa0_pin0_plowerBound ;\n sysml:upperBound expr:Params__two_pvalue_pa0_pin0_pupperBound ;\n sysml:value expr:Params__two_pvalue_pa0_pin0_pvalue ;\n sysml:ownedTyping expr:Params__two_pvalue_pa0_pin0_ft0 ;", "expr:Params__two_pvalue_pa0_pin0_ft0\n a sysml:FeatureTyping ;\n sysml:elementId \"Params__two_pvalue_pa0_pin0_ft0\" ;\n sysml:typedFeature expr:Params__two_pvalue_pa0_pin0 ;", "expr:Params__two_pvalue_pa0_pin0_pupperBound\n a sysml:FeatureReferenceExpression ;\n sysx:sourceText \"upper\" ;\n sysml:elementId \"Params__two_pvalue_pa0_pin0_pupperBound\" ;\n sysml:isComposite \"false\"^^xsd:boolean ;\n sysml:referent elmt:Params__upper ;", "expr:Params__two_pvalue_pa0_pin0_pvalue\n a sysml:FeatureReferenceExpression ;\n sysx:sourceText \"limit\" ;\n sysml:elementId \"Params__two_pvalue_pa0_pin0_pvalue\" ;\n sysml:isComposite \"false\"^^xsd:boolean ;\n sysml:referent elmt:Params__limit ;", From d5cd27e0c74c4e74f849adf2115b01469b76acee Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 00:44:31 +0000 Subject: [PATCH 02/16] fix(export): spell a head back in the order its owned relationships state, and pin the order in goldens The reader writes a declaration head's clauses in the order the graph owns their relationship elements, the multiplicity part where its membership stands, so a round trip keeps the spelling; a graph stating the collapsed properties alone keeps the fixed clause order. Goldens re-recorded for the owned-relationship order, with a fixture for each head form; rdf.Graph.ReorderObjects permutes a property's objects in place. Co-Authored-By: jason.han --- ...ion-head-owned-relationship-order.fixed.md | 1 + internal/translate/export/end_forms.go | 5 + internal/translate/export/rdf_in.go | 41 +- internal/translate/rdf/graph_fastpath_test.go | 30 + .../convert/anonymous_assertions.golden.ttl | 12 +- .../convert/anonymous_features.golden.ttl | 12 +- .../anonymous_portions.canonical.golden.sysml | 2 +- .../convert/anonymous_portions.golden.ttl | 66 +- .../export/testdata/convert/bounds.golden.ttl | 16 +- .../convert/composite_multiplicity.golden.ttl | 16 +- .../convert/constraints.golden.ttl.sha256 | 2 +- ...laration_head_order.canonical.golden.sysml | 22 + .../declaration_head_order.golden.sysml | 22 + .../convert/declaration_head_order.golden.ttl | 1190 +++++++++++++++++ .../convert/declaration_head_order.sysml | 22 + .../convert/docs_before_members.golden.ttl | 4 +- .../end_binding_bodies.golden.ttl.sha256 | 2 +- .../convert/end_prefix_metadata.golden.ttl | 12 +- .../convert/feature_chains.golden.ttl | 4 +- .../feature_chains_repeated.golden.ttl | 4 +- .../convert/feature_prefixes.golden.ttl | 16 +- ...imported_references.canonical.golden.sysml | 2 +- .../convert/imported_references.golden.ttl | 52 +- .../convert/individual_definitions.golden.ttl | 4 +- .../irregular_layout.golden.ttl.sha256 | 2 +- .../convert/kind_keyword_synonyms.golden.ttl | 40 +- .../convert/metadata_bodies.golden.ttl | 48 +- .../convert/metadata_prefixes.golden.ttl | 6 +- .../export/testdata/convert/parts.golden.ttl | 4 +- .../payload_declaration_bodies.golden.ttl | 4 +- .../convert/qualified_usages.golden.ttl | 100 +- .../ref_subsets.canonical.golden.sysml | 2 +- .../testdata/convert/relations.golden.ttl | 8 +- ...onship_clause_order.canonical.golden.sysml | 4 +- .../relationship_clause_order.golden.ttl | 84 +- .../result_expressions.golden.ttl.sha256 | 2 +- ...shadowed_references.canonical.golden.sysml | 2 +- .../convert/shadowed_references.golden.ttl | 66 +- .../convert/shadowing_body.golden.ttl | 4 +- .../convert/shadowing_parameters.golden.ttl | 4 +- .../export/testdata/convert/values.golden.ttl | 12 +- .../convert/view_rendering.golden.ttl | 4 +- .../convert/views_flows_parameters.golden.ttl | 12 +- 43 files changed, 1637 insertions(+), 330 deletions(-) create mode 100644 changes/unreleased/declaration-head-owned-relationship-order.fixed.md create mode 100644 tests/export/testdata/convert/declaration_head_order.canonical.golden.sysml create mode 100644 tests/export/testdata/convert/declaration_head_order.golden.sysml create mode 100644 tests/export/testdata/convert/declaration_head_order.golden.ttl create mode 100644 tests/export/testdata/convert/declaration_head_order.sysml diff --git a/changes/unreleased/declaration-head-owned-relationship-order.fixed.md b/changes/unreleased/declaration-head-owned-relationship-order.fixed.md new file mode 100644 index 0000000000..2fa389429f --- /dev/null +++ b/changes/unreleased/declaration-head-owned-relationship-order.fixed.md @@ -0,0 +1 @@ +- The RDF and API JSON writers own a declaration head's relationships in the order the notation spells them: a usage's typings, specializations and multiplicity come first in `ownedRelationship` as written (`:>> x : T = v` owns its Redefinition, then its FeatureTyping, then its FeatureValue), ahead of the value and the body members, and a definition's Subclassification ahead of its members; `ownedSpecialization` and the other owned-relationship lists follow the same order. `Element::ownedRelationship` is ordered (KerML 8.3.2.1.2) and the textual notation adds each owned relationship as it parses the clause (KerML 8.2.1, SysML 8.2). The reader spells a head back in the order the graph owns its relationships, the multiplicity part included, instead of a fixed clause order. diff --git a/internal/translate/export/end_forms.go b/internal/translate/export/end_forms.go index e34a7ed262..54cfc00149 100644 --- a/internal/translate/export/end_forms.go +++ b/internal/translate/export/end_forms.go @@ -458,6 +458,11 @@ func (d *decoder) payloadText(el *element) (string, error) { } } mult += flags + if _, leads := d.multiplicityPlacement(payload); leads { + // `of p[*] ordered : Fuel`: the multiplicity part was written ahead of the typing. + words[len(words)-1] += mult + mult = "" + } relationships, err := d.relationshipWords(payload, mult) if err != nil { return "", err diff --git a/internal/translate/export/rdf_in.go b/internal/translate/export/rdf_in.go index 596a7aaca1..6b624138ee 100644 --- a/internal/translate/export/rdf_in.go +++ b/internal/translate/export/rdf_in.go @@ -4188,6 +4188,19 @@ var headClauseKinds = map[string][]ast.RelationshipKind{ mReferenceSubsetting: {ast.RelReferences, ast.RelSubsets}, } +// headClauseTargets are the properties that state a relationship element's +// target, by its metaclass, the specific end first: a graph that states no +// derived `target` or `general` still names the end its own way. +var headClauseTargets = map[string][]string{ + mFeatureTyping: {"type", pGeneral, pTarget}, + mConjugatedPortTyping: {pPortDefinition}, + mSubclassification: {"superclassifier", pGeneral, pTarget}, + mSpecialization: {pGeneral, pTarget}, + mSubsetting: {pSubsettedFeature, pGeneral, pTarget}, + mRedefinition: {"redefinedFeature", pSubsettedFeature, pGeneral, pTarget}, + mReferenceSubsetting: {pReferencedFeature, pSubsettedFeature, pGeneral, pTarget}, +} + // spelledHead reads the order el's head was spelled from what el owns in // ownedRelationship order: each relationship element as the clause of the // collapsed property whose target it relates, and the multiplicity range's @@ -4209,24 +4222,26 @@ func (d *decoder) spelledHead(el *element) []headClause { } continue } - target, ok := d.graph.Object(owned, rdf.SysML+pTarget) - if metaclass == mConjugatedPortTyping { - target, ok = d.graph.Object(owned, rdf.SysML+pPortDefinition) + var target rdf.Term + for _, property := range headClauseTargets[metaclass] { + if end, ok := d.graph.Object(owned, rdf.SysML+property); ok { + target = end + break + } } - if !ok { + if target.Value == "" { continue } + kinds: for _, kind := range headClauseKinds[metaclass] { - index := slices.IndexFunc(objects[kind], func(object rdf.Term) bool { - return object == target && !taken[headClause{kind: kind, index: slices.Index(objects[kind], object)}] - }) - if index < 0 { - continue + for index, object := range objects[kind] { + clause := headClause{kind: kind, index: index} + if object == target && !taken[clause] { + taken[clause] = true + clauses = append(clauses, clause) + break kinds + } } - clause := headClause{kind: kind, index: index} - taken[clause] = true - clauses = append(clauses, clause) - break } } return clauses diff --git a/internal/translate/rdf/graph_fastpath_test.go b/internal/translate/rdf/graph_fastpath_test.go index 500a3a2afc..a9423734d3 100644 --- a/internal/translate/rdf/graph_fastpath_test.go +++ b/internal/translate/rdf/graph_fastpath_test.go @@ -229,3 +229,33 @@ func TestReconcileRewritesOnlyWhatIsOutOfOrder(t *testing.T) { t.Errorf("reconciling changed its input") } } + +// ReorderObjects restates a property's objects in the order given, each +// triple keeping its place, and leaves the graph as it was for any list that +// is not a permutation of them. +func TestReorderObjectsPermutesInPlace(t *testing.T) { + p := IRI(Element + "P") + owned := SysMLTerm("ownedRelationship") + a, b, c := IRI(Element+"P_a"), IRI(Element+"P_b"), IRI(Element+"P_c") + g := NewGraph() + g.Add(p, owned, a) + g.Add(p, SysMLTerm("declaredName"), String("P")) + g.Add(p, owned, b) + g.Add(p, owned, c) + g.ReorderObjects(p, SysML+"ownedRelationship", []Term{c, a, b}) + if got := g.Objects(p, SysML+"ownedRelationship"); !slices.Equal(got, []Term{c, a, b}) { + t.Fatalf("Objects after ReorderObjects = %v", got) + } + if got := g.Triples()[1].Object; got != String("P") { + t.Errorf("the other triple moved: %v", got) + } + if !g.Has(Triple{Subject: p, Predicate: owned, Object: a}) || g.Len() != 4 { + t.Errorf("the graph lost or gained a triple: %d", g.Len()) + } + for _, bad := range [][]Term{{a, b}, {a, b, b}, {a, b, IRI(Element + "P_d")}} { + g.ReorderObjects(p, SysML+"ownedRelationship", bad) + if got := g.Objects(p, SysML+"ownedRelationship"); !slices.Equal(got, []Term{c, a, b}) { + t.Errorf("ReorderObjects(%v) changed the graph: %v", bad, got) + } + } +} diff --git a/tests/export/testdata/convert/anonymous_assertions.golden.ttl b/tests/export/testdata/convert/anonymous_assertions.golden.ttl index 73c2e7e490..e4fb3d8d70 100644 --- a/tests/export/testdata/convert/anonymous_assertions.golden.ttl +++ b/tests/export/testdata/convert/anonymous_assertions.golden.ttl @@ -393,7 +393,7 @@ elmt:AnonymousAssertions__massConstraint sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousAssertions__massConstraint__total, elmt:AnonymousAssertions__massConstraint__limit, elmt:AnonymousAssertions__massConstraint___402 ; sysml:ownedMembership elmt:AnonymousAssertions__massConstraint__total_om, elmt:AnonymousAssertions__massConstraint__limit_om, elmt:AnonymousAssertions__massConstraint___402_om ; - sysml:ownedRelationship elmt:AnonymousAssertions__massConstraint__total_om, elmt:AnonymousAssertions__massConstraint__limit_om, elmt:AnonymousAssertions__massConstraint___402_om, elmt:AnonymousAssertions__massConstraint_ft0 ; + sysml:ownedRelationship elmt:AnonymousAssertions__massConstraint_ft0, elmt:AnonymousAssertions__massConstraint__total_om, elmt:AnonymousAssertions__massConstraint__limit_om, elmt:AnonymousAssertions__massConstraint___402_om ; sysml:ownedFeature elmt:AnonymousAssertions__massConstraint__total, elmt:AnonymousAssertions__massConstraint__limit, elmt:AnonymousAssertions__massConstraint___402 ; sysml:ownedFeatureMembership elmt:AnonymousAssertions__massConstraint__total_om, elmt:AnonymousAssertions__massConstraint__limit_om, elmt:AnonymousAssertions__massConstraint___402_om ; sysml:ownedTyping elmt:AnonymousAssertions__massConstraint_ft0 ; @@ -402,7 +402,7 @@ elmt:AnonymousAssertions__massConstraint sysx:sourceTail "\t}\n" ; json:ownedMember "[{\"@id\":\"AnonymousAssertions__massConstraint__total\"},{\"@id\":\"AnonymousAssertions__massConstraint__limit\"},{\"@id\":\"AnonymousAssertions__massConstraint___402\"}]" ; json:ownedMembership "[{\"@id\":\"AnonymousAssertions__massConstraint__total_om\"},{\"@id\":\"AnonymousAssertions__massConstraint__limit_om\"},{\"@id\":\"AnonymousAssertions__massConstraint___402_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"AnonymousAssertions__massConstraint__total_om\"},{\"@id\":\"AnonymousAssertions__massConstraint__limit_om\"},{\"@id\":\"AnonymousAssertions__massConstraint___402_om\"},{\"@id\":\"AnonymousAssertions__massConstraint_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"AnonymousAssertions__massConstraint_ft0\"},{\"@id\":\"AnonymousAssertions__massConstraint__total_om\"},{\"@id\":\"AnonymousAssertions__massConstraint__limit_om\"},{\"@id\":\"AnonymousAssertions__massConstraint___402_om\"}]" ; json:ownedFeature "[{\"@id\":\"AnonymousAssertions__massConstraint__total\"},{\"@id\":\"AnonymousAssertions__massConstraint__limit\"},{\"@id\":\"AnonymousAssertions__massConstraint___402\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"AnonymousAssertions__massConstraint__total_om\"},{\"@id\":\"AnonymousAssertions__massConstraint__limit_om\"},{\"@id\":\"AnonymousAssertions__massConstraint___402_om\"}]" . @@ -823,7 +823,7 @@ elmt:AnonymousAssertions__Vehicle___402 sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousAssertions__Vehicle___402__total, elmt:AnonymousAssertions__Vehicle___402__limit ; sysml:ownedMembership elmt:AnonymousAssertions__Vehicle___402__total_om, elmt:AnonymousAssertions__Vehicle___402__limit_om ; - sysml:ownedRelationship elmt:AnonymousAssertions__Vehicle___402__total_om, elmt:AnonymousAssertions__Vehicle___402__limit_om, elmt:AnonymousAssertions__Vehicle___402_rs ; + sysml:ownedRelationship elmt:AnonymousAssertions__Vehicle___402_rs, elmt:AnonymousAssertions__Vehicle___402__total_om, elmt:AnonymousAssertions__Vehicle___402__limit_om ; sysml:ownedFeature elmt:AnonymousAssertions__Vehicle___402__total, elmt:AnonymousAssertions__Vehicle___402__limit ; sysml:ownedFeatureMembership elmt:AnonymousAssertions__Vehicle___402__total_om, elmt:AnonymousAssertions__Vehicle___402__limit_om ; sysml:ownedReferenceSubsetting elmt:AnonymousAssertions__Vehicle___402_rs ; @@ -833,7 +833,7 @@ elmt:AnonymousAssertions__Vehicle___402 sysx:sourceTail "\t\t}\n" ; json:ownedMember "[{\"@id\":\"AnonymousAssertions__Vehicle___402__total\"},{\"@id\":\"AnonymousAssertions__Vehicle___402__limit\"}]" ; json:ownedMembership "[{\"@id\":\"AnonymousAssertions__Vehicle___402__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle___402__limit_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"AnonymousAssertions__Vehicle___402__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle___402__limit_om\"},{\"@id\":\"AnonymousAssertions__Vehicle___402_rs\"}]" ; + json:ownedRelationship "[{\"@id\":\"AnonymousAssertions__Vehicle___402_rs\"},{\"@id\":\"AnonymousAssertions__Vehicle___402__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle___402__limit_om\"}]" ; json:ownedFeature "[{\"@id\":\"AnonymousAssertions__Vehicle___402__total\"},{\"@id\":\"AnonymousAssertions__Vehicle___402__limit\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"AnonymousAssertions__Vehicle___402__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle___402__limit_om\"}]" . @@ -1286,7 +1286,7 @@ elmt:AnonymousAssertions__Vehicle__tooHeavy sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousAssertions__Vehicle__tooHeavy__total, elmt:AnonymousAssertions__Vehicle__tooHeavy__limit ; sysml:ownedMembership elmt:AnonymousAssertions__Vehicle__tooHeavy__total_om, elmt:AnonymousAssertions__Vehicle__tooHeavy__limit_om ; - sysml:ownedRelationship elmt:AnonymousAssertions__Vehicle__tooHeavy__total_om, elmt:AnonymousAssertions__Vehicle__tooHeavy__limit_om, elmt:AnonymousAssertions__Vehicle__tooHeavy_ft0 ; + sysml:ownedRelationship elmt:AnonymousAssertions__Vehicle__tooHeavy_ft0, elmt:AnonymousAssertions__Vehicle__tooHeavy__total_om, elmt:AnonymousAssertions__Vehicle__tooHeavy__limit_om ; sysml:ownedFeature elmt:AnonymousAssertions__Vehicle__tooHeavy__total, elmt:AnonymousAssertions__Vehicle__tooHeavy__limit ; sysml:ownedFeatureMembership elmt:AnonymousAssertions__Vehicle__tooHeavy__total_om, elmt:AnonymousAssertions__Vehicle__tooHeavy__limit_om ; sysml:ownedTyping elmt:AnonymousAssertions__Vehicle__tooHeavy_ft0 ; @@ -1295,7 +1295,7 @@ elmt:AnonymousAssertions__Vehicle__tooHeavy sysx:sourceTail "\t\t}\n" ; json:ownedMember "[{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__total\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__limit\"}]" ; json:ownedMembership "[{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__limit_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__limit_om\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy_ft0\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__limit_om\"}]" ; json:ownedFeature "[{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__total\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__limit\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__total_om\"},{\"@id\":\"AnonymousAssertions__Vehicle__tooHeavy__limit_om\"}]" . diff --git a/tests/export/testdata/convert/anonymous_features.golden.ttl b/tests/export/testdata/convert/anonymous_features.golden.ttl index 1799464dfb..03f1ba7628 100644 --- a/tests/export/testdata/convert/anonymous_features.golden.ttl +++ b/tests/export/testdata/convert/anonymous_features.golden.ttl @@ -210,7 +210,7 @@ elmt:AnonymousFeatures__v sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousFeatures__v__m, elmt:AnonymousFeatures__v__accessedFeature, elmt:AnonymousFeatures__v__engine, elmt:AnonymousFeatures__v___403 ; sysml:ownedMembership elmt:AnonymousFeatures__v__m_om, elmt:AnonymousFeatures__v__accessedFeature_om, elmt:AnonymousFeatures__v__engine_om, elmt:AnonymousFeatures__v___403_om ; - sysml:ownedRelationship elmt:AnonymousFeatures__v__m_om, elmt:AnonymousFeatures__v__accessedFeature_om, elmt:AnonymousFeatures__v__engine_om, elmt:AnonymousFeatures__v___403_om, elmt:AnonymousFeatures__v_ft0 ; + sysml:ownedRelationship elmt:AnonymousFeatures__v_ft0, elmt:AnonymousFeatures__v__m_om, elmt:AnonymousFeatures__v__accessedFeature_om, elmt:AnonymousFeatures__v__engine_om, elmt:AnonymousFeatures__v___403_om ; sysml:ownedFeature elmt:AnonymousFeatures__v__m, elmt:AnonymousFeatures__v__accessedFeature, elmt:AnonymousFeatures__v__engine, elmt:AnonymousFeatures__v___403 ; sysml:ownedFeatureMembership elmt:AnonymousFeatures__v__m_om, elmt:AnonymousFeatures__v__accessedFeature_om, elmt:AnonymousFeatures__v__engine_om, elmt:AnonymousFeatures__v___403_om ; sysml:ownedTyping elmt:AnonymousFeatures__v_ft0 ; @@ -219,7 +219,7 @@ elmt:AnonymousFeatures__v sysx:sourceTail "\t}\n" ; json:ownedMember "[{\"@id\":\"AnonymousFeatures__v__m\"},{\"@id\":\"AnonymousFeatures__v__accessedFeature\"},{\"@id\":\"AnonymousFeatures__v__engine\"},{\"@id\":\"AnonymousFeatures__v___403\"}]" ; json:ownedMembership "[{\"@id\":\"AnonymousFeatures__v__m_om\"},{\"@id\":\"AnonymousFeatures__v__accessedFeature_om\"},{\"@id\":\"AnonymousFeatures__v__engine_om\"},{\"@id\":\"AnonymousFeatures__v___403_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"AnonymousFeatures__v__m_om\"},{\"@id\":\"AnonymousFeatures__v__accessedFeature_om\"},{\"@id\":\"AnonymousFeatures__v__engine_om\"},{\"@id\":\"AnonymousFeatures__v___403_om\"},{\"@id\":\"AnonymousFeatures__v_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"AnonymousFeatures__v_ft0\"},{\"@id\":\"AnonymousFeatures__v__m_om\"},{\"@id\":\"AnonymousFeatures__v__accessedFeature_om\"},{\"@id\":\"AnonymousFeatures__v__engine_om\"},{\"@id\":\"AnonymousFeatures__v___403_om\"}]" ; json:ownedFeature "[{\"@id\":\"AnonymousFeatures__v__m\"},{\"@id\":\"AnonymousFeatures__v__accessedFeature\"},{\"@id\":\"AnonymousFeatures__v__engine\"},{\"@id\":\"AnonymousFeatures__v___403\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"AnonymousFeatures__v__m_om\"},{\"@id\":\"AnonymousFeatures__v__accessedFeature_om\"},{\"@id\":\"AnonymousFeatures__v__engine_om\"},{\"@id\":\"AnonymousFeatures__v___403_om\"}]" . @@ -253,7 +253,7 @@ elmt:AnonymousFeatures__v__m sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousFeatures__v__m__g ; sysml:ownedMembership elmt:AnonymousFeatures__v__m__g_om ; - sysml:ownedRelationship elmt:AnonymousFeatures__v__m__g_om, elmt:AnonymousFeatures__v__m_rd0 ; + sysml:ownedRelationship elmt:AnonymousFeatures__v__m_rd0, elmt:AnonymousFeatures__v__m__g_om ; sysml:ownedFeature elmt:AnonymousFeatures__v__m__g ; sysml:ownedFeatureMembership elmt:AnonymousFeatures__v__m__g_om ; sysml:ownedRedefinition elmt:AnonymousFeatures__v__m_rd0 ; @@ -261,7 +261,7 @@ elmt:AnonymousFeatures__v__m sysml:ownedSpecialization elmt:AnonymousFeatures__v__m_rd0 ; sysx:sourceText "\t\tfeature redefines m {\n" ; sysx:sourceTail "\t\t}\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousFeatures__v__m__g_om\"},{\"@id\":\"AnonymousFeatures__v__m_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousFeatures__v__m_rd0\"},{\"@id\":\"AnonymousFeatures__v__m__g_om\"}]" . elmt:AnonymousFeatures__v__m_om a sysml:FeatureMembership ; @@ -360,14 +360,14 @@ elmt:AnonymousFeatures__v__engine sysx:isKindImplicit "true"^^xsd:boolean ; sysml:redefines elmt:AnonymousFeatures__Part__engine ; sysml:value expr:AnonymousFeatures__v__engine_pvalue ; - sysml:ownedRelationship expr:AnonymousFeatures__v__engine_pvalue_om, elmt:AnonymousFeatures__v__engine_rd0 ; + sysml:ownedRelationship elmt:AnonymousFeatures__v__engine_rd0, expr:AnonymousFeatures__v__engine_pvalue_om ; sysml:ownedMembership expr:AnonymousFeatures__v__engine_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:AnonymousFeatures__v__engine_rd0 ; sysml:ownedSubsetting elmt:AnonymousFeatures__v__engine_rd0 ; sysml:ownedSpecialization elmt:AnonymousFeatures__v__engine_rd0 ; sysx:sourceText "\t\tcomposite :>> engine = e;\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousFeatures__v__engine_pvalue_om\"},{\"@id\":\"AnonymousFeatures__v__engine_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousFeatures__v__engine_rd0\"},{\"@id\":\"AnonymousFeatures__v__engine_pvalue_om\"}]" . elmt:AnonymousFeatures__v__engine_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/anonymous_portions.canonical.golden.sysml b/tests/export/testdata/convert/anonymous_portions.canonical.golden.sysml index 22fb88f38b..bfd3cc52fd 100644 --- a/tests/export/testdata/convert/anonymous_portions.canonical.golden.sysml +++ b/tests/export/testdata/convert/anonymous_portions.canonical.golden.sysml @@ -11,7 +11,7 @@ package AnonymousPortions { timeslice redefines portionOfLife { attribute redefines fuel = 50; } - snapshot subsets fuel redefines done { + snapshot redefines done subsets fuel { attribute redefines fuel = 0; } snapshot; diff --git a/tests/export/testdata/convert/anonymous_portions.golden.ttl b/tests/export/testdata/convert/anonymous_portions.golden.ttl index 9d3ca1f1d4..8be98ddcc1 100644 --- a/tests/export/testdata/convert/anonymous_portions.golden.ttl +++ b/tests/export/testdata/convert/anonymous_portions.golden.ttl @@ -171,14 +171,14 @@ elmt:AnonymousPortions__car sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousPortions__car__start, elmt:AnonymousPortions__car__portionOfLife, elmt:AnonymousPortions__car__done, elmt:AnonymousPortions__car___403, elmt:AnonymousPortions__car___404 ; sysml:ownedMembership elmt:AnonymousPortions__car__start_om, elmt:AnonymousPortions__car__portionOfLife_om, elmt:AnonymousPortions__car__done_om, elmt:AnonymousPortions__car___403_om, elmt:AnonymousPortions__car___404_om ; - sysml:ownedRelationship elmt:AnonymousPortions__car__start_om, elmt:AnonymousPortions__car__portionOfLife_om, elmt:AnonymousPortions__car__done_om, elmt:AnonymousPortions__car___403_om, elmt:AnonymousPortions__car___404_om, elmt:AnonymousPortions__car_ft0 ; + sysml:ownedRelationship elmt:AnonymousPortions__car_ft0, elmt:AnonymousPortions__car__start_om, elmt:AnonymousPortions__car__portionOfLife_om, elmt:AnonymousPortions__car__done_om, elmt:AnonymousPortions__car___403_om, elmt:AnonymousPortions__car___404_om ; sysml:ownedTyping elmt:AnonymousPortions__car_ft0 ; sysml:ownedSpecialization elmt:AnonymousPortions__car_ft0 ; sysx:sourceText "\tindividual car : Car {\n" ; sysx:sourceTail "\t}\n" ; json:ownedMember "[{\"@id\":\"AnonymousPortions__car__start\"},{\"@id\":\"AnonymousPortions__car__portionOfLife\"},{\"@id\":\"AnonymousPortions__car__done\"},{\"@id\":\"AnonymousPortions__car___403\"},{\"@id\":\"AnonymousPortions__car___404\"}]" ; json:ownedMembership "[{\"@id\":\"AnonymousPortions__car__start_om\"},{\"@id\":\"AnonymousPortions__car__portionOfLife_om\"},{\"@id\":\"AnonymousPortions__car__done_om\"},{\"@id\":\"AnonymousPortions__car___403_om\"},{\"@id\":\"AnonymousPortions__car___404_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__start_om\"},{\"@id\":\"AnonymousPortions__car__portionOfLife_om\"},{\"@id\":\"AnonymousPortions__car__done_om\"},{\"@id\":\"AnonymousPortions__car___403_om\"},{\"@id\":\"AnonymousPortions__car___404_om\"},{\"@id\":\"AnonymousPortions__car_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car_ft0\"},{\"@id\":\"AnonymousPortions__car__start_om\"},{\"@id\":\"AnonymousPortions__car__portionOfLife_om\"},{\"@id\":\"AnonymousPortions__car__done_om\"},{\"@id\":\"AnonymousPortions__car___403_om\"},{\"@id\":\"AnonymousPortions__car___404_om\"}]" . elmt:AnonymousPortions__car_om a sysml:OwningMembership ; @@ -212,7 +212,7 @@ elmt:AnonymousPortions__car__start sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousPortions__car__start__fuel ; sysml:ownedMembership elmt:AnonymousPortions__car__start__fuel_om ; - sysml:ownedRelationship elmt:AnonymousPortions__car__start__fuel_om, elmt:AnonymousPortions__car__start_rd0 ; + sysml:ownedRelationship elmt:AnonymousPortions__car__start_rd0, elmt:AnonymousPortions__car__start__fuel_om ; sysml:ownedFeature elmt:AnonymousPortions__car__start__fuel ; sysml:ownedFeatureMembership elmt:AnonymousPortions__car__start__fuel_om ; sysml:ownedRedefinition elmt:AnonymousPortions__car__start_rd0 ; @@ -220,7 +220,7 @@ elmt:AnonymousPortions__car__start sysml:ownedSpecialization elmt:AnonymousPortions__car__start_rd0 ; sysx:sourceText "\t\tsnapshot :>> start {\n" ; sysx:sourceTail "\t\t}\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__start__fuel_om\"},{\"@id\":\"AnonymousPortions__car__start_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__start_rd0\"},{\"@id\":\"AnonymousPortions__car__start__fuel_om\"}]" . elmt:AnonymousPortions__car__start_om a sysml:OwningMembership ; @@ -249,14 +249,14 @@ elmt:AnonymousPortions__car__start__fuel sysml:isComposite "false"^^xsd:boolean ; sysml:redefines elmt:AnonymousPortions__Vehicle__fuel ; sysml:value expr:AnonymousPortions__car__start__fuel_pvalue ; - sysml:ownedRelationship expr:AnonymousPortions__car__start__fuel_pvalue_om, elmt:AnonymousPortions__car__start__fuel_rd0 ; + sysml:ownedRelationship elmt:AnonymousPortions__car__start__fuel_rd0, expr:AnonymousPortions__car__start__fuel_pvalue_om ; sysml:ownedMembership expr:AnonymousPortions__car__start__fuel_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:AnonymousPortions__car__start__fuel_rd0 ; sysml:ownedSubsetting elmt:AnonymousPortions__car__start__fuel_rd0 ; sysml:ownedSpecialization elmt:AnonymousPortions__car__start__fuel_rd0 ; sysx:sourceText "\t\t\tattribute :>> fuel = 100;\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__start__fuel_pvalue_om\"},{\"@id\":\"AnonymousPortions__car__start__fuel_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__start__fuel_rd0\"},{\"@id\":\"AnonymousPortions__car__start__fuel_pvalue_om\"}]" . elmt:AnonymousPortions__car__start__fuel_om a sysml:FeatureMembership ; @@ -314,7 +314,7 @@ elmt:AnonymousPortions__car__portionOfLife sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousPortions__car__portionOfLife__fuel ; sysml:ownedMembership elmt:AnonymousPortions__car__portionOfLife__fuel_om ; - sysml:ownedRelationship elmt:AnonymousPortions__car__portionOfLife__fuel_om, elmt:AnonymousPortions__car__portionOfLife_rd0 ; + sysml:ownedRelationship elmt:AnonymousPortions__car__portionOfLife_rd0, elmt:AnonymousPortions__car__portionOfLife__fuel_om ; sysml:ownedFeature elmt:AnonymousPortions__car__portionOfLife__fuel ; sysml:ownedFeatureMembership elmt:AnonymousPortions__car__portionOfLife__fuel_om ; sysml:ownedRedefinition elmt:AnonymousPortions__car__portionOfLife_rd0 ; @@ -322,7 +322,7 @@ elmt:AnonymousPortions__car__portionOfLife sysml:ownedSpecialization elmt:AnonymousPortions__car__portionOfLife_rd0 ; sysx:sourceText "\t\ttimeslice :>> portionOfLife {\n" ; sysx:sourceTail "\t\t}\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__portionOfLife__fuel_om\"},{\"@id\":\"AnonymousPortions__car__portionOfLife_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__portionOfLife_rd0\"},{\"@id\":\"AnonymousPortions__car__portionOfLife__fuel_om\"}]" . elmt:AnonymousPortions__car__portionOfLife_om a sysml:OwningMembership ; @@ -351,14 +351,14 @@ elmt:AnonymousPortions__car__portionOfLife__fuel sysml:isComposite "false"^^xsd:boolean ; sysml:redefines elmt:AnonymousPortions__Vehicle__fuel ; sysml:value expr:AnonymousPortions__car__portionOfLife__fuel_pvalue ; - sysml:ownedRelationship expr:AnonymousPortions__car__portionOfLife__fuel_pvalue_om, elmt:AnonymousPortions__car__portionOfLife__fuel_rd0 ; + sysml:ownedRelationship elmt:AnonymousPortions__car__portionOfLife__fuel_rd0, expr:AnonymousPortions__car__portionOfLife__fuel_pvalue_om ; sysml:ownedMembership expr:AnonymousPortions__car__portionOfLife__fuel_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:AnonymousPortions__car__portionOfLife__fuel_rd0 ; sysml:ownedSubsetting elmt:AnonymousPortions__car__portionOfLife__fuel_rd0 ; sysml:ownedSpecialization elmt:AnonymousPortions__car__portionOfLife__fuel_rd0 ; sysx:sourceText "\t\t\tattribute :>> fuel = 50;\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__portionOfLife__fuel_pvalue_om\"},{\"@id\":\"AnonymousPortions__car__portionOfLife__fuel_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__portionOfLife__fuel_rd0\"},{\"@id\":\"AnonymousPortions__car__portionOfLife__fuel_pvalue_om\"}]" . elmt:AnonymousPortions__car__portionOfLife__fuel_om a sysml:FeatureMembership ; @@ -417,17 +417,17 @@ elmt:AnonymousPortions__car__done sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:AnonymousPortions__car__done__fuel ; sysml:ownedMembership elmt:AnonymousPortions__car__done__fuel_om ; - sysml:ownedRelationship elmt:AnonymousPortions__car__done__fuel_om, elmt:AnonymousPortions__car__done_ss0, elmt:AnonymousPortions__car__done_rd0 ; + sysml:ownedRelationship elmt:AnonymousPortions__car__done_rd0, elmt:AnonymousPortions__car__done_ss0, elmt:AnonymousPortions__car__done__fuel_om ; sysml:ownedFeature elmt:AnonymousPortions__car__done__fuel ; sysml:ownedFeatureMembership elmt:AnonymousPortions__car__done__fuel_om ; - sysml:ownedSubsetting elmt:AnonymousPortions__car__done_ss0, elmt:AnonymousPortions__car__done_rd0 ; - sysml:ownedSpecialization elmt:AnonymousPortions__car__done_ss0, elmt:AnonymousPortions__car__done_rd0 ; sysml:ownedRedefinition elmt:AnonymousPortions__car__done_rd0 ; + sysml:ownedSubsetting elmt:AnonymousPortions__car__done_rd0, elmt:AnonymousPortions__car__done_ss0 ; + sysml:ownedSpecialization elmt:AnonymousPortions__car__done_rd0, elmt:AnonymousPortions__car__done_ss0 ; sysx:sourceText "\t\tsnapshot :>> done :> fuel {\n" ; sysx:sourceTail "\t\t}\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__done__fuel_om\"},{\"@id\":\"AnonymousPortions__car__done_ss0\"},{\"@id\":\"AnonymousPortions__car__done_rd0\"}]" ; - json:ownedSubsetting "[{\"@id\":\"AnonymousPortions__car__done_ss0\"},{\"@id\":\"AnonymousPortions__car__done_rd0\"}]" ; - json:ownedSpecialization "[{\"@id\":\"AnonymousPortions__car__done_ss0\"},{\"@id\":\"AnonymousPortions__car__done_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__done_rd0\"},{\"@id\":\"AnonymousPortions__car__done_ss0\"},{\"@id\":\"AnonymousPortions__car__done__fuel_om\"}]" ; + json:ownedSubsetting "[{\"@id\":\"AnonymousPortions__car__done_rd0\"},{\"@id\":\"AnonymousPortions__car__done_ss0\"}]" ; + json:ownedSpecialization "[{\"@id\":\"AnonymousPortions__car__done_rd0\"},{\"@id\":\"AnonymousPortions__car__done_ss0\"}]" . elmt:AnonymousPortions__car__done_om a sysml:OwningMembership ; @@ -456,14 +456,14 @@ elmt:AnonymousPortions__car__done__fuel sysml:isComposite "false"^^xsd:boolean ; sysml:redefines elmt:AnonymousPortions__Vehicle__fuel ; sysml:value expr:AnonymousPortions__car__done__fuel_pvalue ; - sysml:ownedRelationship expr:AnonymousPortions__car__done__fuel_pvalue_om, elmt:AnonymousPortions__car__done__fuel_rd0 ; + sysml:ownedRelationship elmt:AnonymousPortions__car__done__fuel_rd0, expr:AnonymousPortions__car__done__fuel_pvalue_om ; sysml:ownedMembership expr:AnonymousPortions__car__done__fuel_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:AnonymousPortions__car__done__fuel_rd0 ; sysml:ownedSubsetting elmt:AnonymousPortions__car__done__fuel_rd0 ; sysml:ownedSpecialization elmt:AnonymousPortions__car__done__fuel_rd0 ; sysx:sourceText "\t\t\tattribute :>> fuel = 0;\n" ; - json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__done__fuel_pvalue_om\"},{\"@id\":\"AnonymousPortions__car__done__fuel_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"AnonymousPortions__car__done__fuel_rd0\"},{\"@id\":\"AnonymousPortions__car__done__fuel_pvalue_om\"}]" . elmt:AnonymousPortions__car__done__fuel_om a sysml:FeatureMembership ; @@ -674,21 +674,6 @@ elmt:AnonymousPortions__car__portionOfLife__fuel_rd0 sysml:relatedElement elmt:AnonymousPortions__car__portionOfLife__fuel, elmt:AnonymousPortions__Vehicle__fuel ; json:relatedElement "[{\"@id\":\"AnonymousPortions__car__portionOfLife__fuel\"},{\"@id\":\"AnonymousPortions__Vehicle__fuel\"}]" . -elmt:AnonymousPortions__car__done_ss0 - a sysml:Subsetting ; - sysml:elementId "AnonymousPortions__car__done_ss0" ; - sysml:subsettingFeature elmt:AnonymousPortions__car__done ; - sysml:owningFeature elmt:AnonymousPortions__car__done ; - sysml:specific elmt:AnonymousPortions__car__done ; - sysml:source elmt:AnonymousPortions__car__done ; - sysml:owningRelatedElement elmt:AnonymousPortions__car__done ; - sysml:subsettedFeature elmt:AnonymousPortions__Vehicle__fuel ; - sysml:general elmt:AnonymousPortions__Vehicle__fuel ; - sysml:target elmt:AnonymousPortions__Vehicle__fuel ; - sysml:owner elmt:AnonymousPortions__car__done ; - sysml:relatedElement elmt:AnonymousPortions__car__done, elmt:AnonymousPortions__Vehicle__fuel ; - json:relatedElement "[{\"@id\":\"AnonymousPortions__car__done\"},{\"@id\":\"AnonymousPortions__Vehicle__fuel\"}]" . - elmt:AnonymousPortions__car__done_rd0 a sysml:Redefinition ; sysml:elementId "AnonymousPortions__car__done_rd0" ; @@ -706,6 +691,21 @@ elmt:AnonymousPortions__car__done_rd0 sysml:relatedElement elmt:AnonymousPortions__car__done, elmt:dd677401-a352-5fe3-846a-dad08d3eab06 ; json:relatedElement "[{\"@id\":\"AnonymousPortions__car__done\"},{\"@id\":\"dd677401-a352-5fe3-846a-dad08d3eab06\"}]" . +elmt:AnonymousPortions__car__done_ss0 + a sysml:Subsetting ; + sysml:elementId "AnonymousPortions__car__done_ss0" ; + sysml:subsettingFeature elmt:AnonymousPortions__car__done ; + sysml:owningFeature elmt:AnonymousPortions__car__done ; + sysml:specific elmt:AnonymousPortions__car__done ; + sysml:source elmt:AnonymousPortions__car__done ; + sysml:owningRelatedElement elmt:AnonymousPortions__car__done ; + sysml:subsettedFeature elmt:AnonymousPortions__Vehicle__fuel ; + sysml:general elmt:AnonymousPortions__Vehicle__fuel ; + sysml:target elmt:AnonymousPortions__Vehicle__fuel ; + sysml:owner elmt:AnonymousPortions__car__done ; + sysml:relatedElement elmt:AnonymousPortions__car__done, elmt:AnonymousPortions__Vehicle__fuel ; + json:relatedElement "[{\"@id\":\"AnonymousPortions__car__done\"},{\"@id\":\"AnonymousPortions__Vehicle__fuel\"}]" . + elmt:AnonymousPortions__car__done__fuel_rd0 a sysml:Redefinition ; sysml:elementId "AnonymousPortions__car__done__fuel_rd0" ; diff --git a/tests/export/testdata/convert/bounds.golden.ttl b/tests/export/testdata/convert/bounds.golden.ttl index e025648f7d..bb4905f4b6 100644 --- a/tests/export/testdata/convert/bounds.golden.ttl +++ b/tests/export/testdata/convert/bounds.golden.ttl @@ -109,14 +109,14 @@ elmt:Bounds__Fleet__exact sysml:declaredName "exact" ; sysml:type elmt:Bounds__Vehicle ; sysml:multiplicity expr:Bounds__Fleet__exact_pmultiplicity ; - sysml:ownedRelationship expr:Bounds__Fleet__exact_pmultiplicity_om, elmt:Bounds__Fleet__exact_ft0 ; + sysml:ownedRelationship elmt:Bounds__Fleet__exact_ft0, expr:Bounds__Fleet__exact_pmultiplicity_om ; sysml:ownedMembership expr:Bounds__Fleet__exact_pmultiplicity_om ; sysml:upperBound expr:Bounds__Fleet__exact_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Bounds__Fleet__exact_ft0 ; sysml:ownedSpecialization elmt:Bounds__Fleet__exact_ft0 ; sysx:sourceText " part exact : Vehicle[3];\n" ; - json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__exact_pmultiplicity_om\"},{\"@id\":\"Bounds__Fleet__exact_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__exact_ft0\"},{\"@id\":\"Bounds__Fleet__exact_pmultiplicity_om\"}]" . elmt:Bounds__Fleet__exact_om a sysml:FeatureMembership ; @@ -188,7 +188,7 @@ elmt:Bounds__Fleet__range sysml:declaredName "range" ; sysml:type elmt:Bounds__Vehicle ; sysml:multiplicity expr:Bounds__Fleet__range_pmultiplicity ; - sysml:ownedRelationship expr:Bounds__Fleet__range_pmultiplicity_om, elmt:Bounds__Fleet__range_ft0 ; + sysml:ownedRelationship elmt:Bounds__Fleet__range_ft0, expr:Bounds__Fleet__range_pmultiplicity_om ; sysml:ownedMembership expr:Bounds__Fleet__range_pmultiplicity_om ; sysml:lowerBound expr:Bounds__Fleet__range_plowerBound ; sysml:upperBound expr:Bounds__Fleet__range_pupperBound ; @@ -196,7 +196,7 @@ elmt:Bounds__Fleet__range sysml:ownedTyping elmt:Bounds__Fleet__range_ft0 ; sysml:ownedSpecialization elmt:Bounds__Fleet__range_ft0 ; sysx:sourceText " part range : Vehicle[1..4];\n" ; - json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__range_pmultiplicity_om\"},{\"@id\":\"Bounds__Fleet__range_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__range_ft0\"},{\"@id\":\"Bounds__Fleet__range_pmultiplicity_om\"}]" . elmt:Bounds__Fleet__range_om a sysml:FeatureMembership ; @@ -291,7 +291,7 @@ elmt:Bounds__Fleet__many sysml:declaredName "many" ; sysml:type elmt:Bounds__Vehicle ; sysml:multiplicity expr:Bounds__Fleet__many_pmultiplicity ; - sysml:ownedRelationship expr:Bounds__Fleet__many_pmultiplicity_om, elmt:Bounds__Fleet__many_ft0 ; + sysml:ownedRelationship elmt:Bounds__Fleet__many_ft0, expr:Bounds__Fleet__many_pmultiplicity_om ; sysml:ownedMembership expr:Bounds__Fleet__many_pmultiplicity_om ; sysml:lowerBound expr:Bounds__Fleet__many_plowerBound ; sysml:upperBound expr:Bounds__Fleet__many_pupperBound ; @@ -299,7 +299,7 @@ elmt:Bounds__Fleet__many sysml:ownedTyping elmt:Bounds__Fleet__many_ft0 ; sysml:ownedSpecialization elmt:Bounds__Fleet__many_ft0 ; sysx:sourceText " part many : Vehicle[0..*];\n" ; - json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__many_pmultiplicity_om\"},{\"@id\":\"Bounds__Fleet__many_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__many_ft0\"},{\"@id\":\"Bounds__Fleet__many_pmultiplicity_om\"}]" . elmt:Bounds__Fleet__many_om a sysml:FeatureMembership ; @@ -395,14 +395,14 @@ elmt:Bounds__Fleet__loose sysml:isUnique "false"^^xsd:boolean ; sysml:type elmt:Bounds__Vehicle ; sysml:multiplicity expr:Bounds__Fleet__loose_pmultiplicity ; - sysml:ownedRelationship expr:Bounds__Fleet__loose_pmultiplicity_om, elmt:Bounds__Fleet__loose_ft0 ; + sysml:ownedRelationship elmt:Bounds__Fleet__loose_ft0, expr:Bounds__Fleet__loose_pmultiplicity_om ; sysml:ownedMembership expr:Bounds__Fleet__loose_pmultiplicity_om ; sysml:upperBound expr:Bounds__Fleet__loose_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Bounds__Fleet__loose_ft0 ; sysml:ownedSpecialization elmt:Bounds__Fleet__loose_ft0 ; sysx:sourceText " part loose : Vehicle[*] ordered nonunique;\n" ; - json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__loose_pmultiplicity_om\"},{\"@id\":\"Bounds__Fleet__loose_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Bounds__Fleet__loose_ft0\"},{\"@id\":\"Bounds__Fleet__loose_pmultiplicity_om\"}]" . elmt:Bounds__Fleet__loose_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/composite_multiplicity.golden.ttl b/tests/export/testdata/convert/composite_multiplicity.golden.ttl index fdaf1e5f30..8f4eb472da 100644 --- a/tests/export/testdata/convert/composite_multiplicity.golden.ttl +++ b/tests/export/testdata/convert/composite_multiplicity.golden.ttl @@ -132,7 +132,7 @@ elmt:CompositeMultiplicity__Vehicle__w sysx:declaredKeyword "feature" ; sysml:type elmt:CompositeMultiplicity__Wheel ; sysml:multiplicity expr:CompositeMultiplicity__Vehicle__w_pmultiplicity ; - sysml:ownedRelationship expr:CompositeMultiplicity__Vehicle__w_pmultiplicity_om, elmt:CompositeMultiplicity__Vehicle__w__lugbolt_om, elmt:CompositeMultiplicity__Vehicle__w_ft0 ; + sysml:ownedRelationship elmt:CompositeMultiplicity__Vehicle__w_ft0, expr:CompositeMultiplicity__Vehicle__w_pmultiplicity_om, elmt:CompositeMultiplicity__Vehicle__w__lugbolt_om ; sysml:ownedMembership expr:CompositeMultiplicity__Vehicle__w_pmultiplicity_om, elmt:CompositeMultiplicity__Vehicle__w__lugbolt_om ; sysml:upperBound expr:CompositeMultiplicity__Vehicle__w_pupperBound ; sysx:hasBody "true"^^xsd:boolean ; @@ -143,7 +143,7 @@ elmt:CompositeMultiplicity__Vehicle__w sysml:ownedSpecialization elmt:CompositeMultiplicity__Vehicle__w_ft0 ; sysx:sourceText " composite feature w : Wheel[4] {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Vehicle__w_pmultiplicity_om\"},{\"@id\":\"CompositeMultiplicity__Vehicle__w__lugbolt_om\"},{\"@id\":\"CompositeMultiplicity__Vehicle__w_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Vehicle__w_ft0\"},{\"@id\":\"CompositeMultiplicity__Vehicle__w_pmultiplicity_om\"},{\"@id\":\"CompositeMultiplicity__Vehicle__w__lugbolt_om\"}]" ; json:ownedMembership "[{\"@id\":\"CompositeMultiplicity__Vehicle__w_pmultiplicity_om\"},{\"@id\":\"CompositeMultiplicity__Vehicle__w__lugbolt_om\"}]" . elmt:CompositeMultiplicity__Vehicle__w_om @@ -217,7 +217,7 @@ elmt:CompositeMultiplicity__Vehicle__w__lugbolt sysx:isKindImplicit "true"^^xsd:boolean ; sysml:type elmt:CompositeMultiplicity__Lugbolt ; sysml:multiplicity expr:CompositeMultiplicity__Vehicle__w__lugbolt_pmultiplicity ; - sysml:ownedRelationship expr:CompositeMultiplicity__Vehicle__w__lugbolt_pmultiplicity_om, elmt:CompositeMultiplicity__Vehicle__w__lugbolt_ft0 ; + sysml:ownedRelationship elmt:CompositeMultiplicity__Vehicle__w__lugbolt_ft0, expr:CompositeMultiplicity__Vehicle__w__lugbolt_pmultiplicity_om ; sysml:ownedMembership expr:CompositeMultiplicity__Vehicle__w__lugbolt_pmultiplicity_om ; sysml:lowerBound expr:CompositeMultiplicity__Vehicle__w__lugbolt_plowerBound ; sysml:upperBound expr:CompositeMultiplicity__Vehicle__w__lugbolt_pupperBound ; @@ -225,7 +225,7 @@ elmt:CompositeMultiplicity__Vehicle__w__lugbolt sysml:ownedTyping elmt:CompositeMultiplicity__Vehicle__w__lugbolt_ft0 ; sysml:ownedSpecialization elmt:CompositeMultiplicity__Vehicle__w__lugbolt_ft0 ; sysx:sourceText " composite lugbolt : Lugbolt[4..6];\n" ; - json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Vehicle__w__lugbolt_pmultiplicity_om\"},{\"@id\":\"CompositeMultiplicity__Vehicle__w__lugbolt_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Vehicle__w__lugbolt_ft0\"},{\"@id\":\"CompositeMultiplicity__Vehicle__w__lugbolt_pmultiplicity_om\"}]" . elmt:CompositeMultiplicity__Vehicle__w__lugbolt_om a sysml:FeatureMembership ; @@ -321,7 +321,7 @@ elmt:CompositeMultiplicity__Car sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:CompositeMultiplicity__Car__frontWheel, elmt:CompositeMultiplicity__Car__rearWheel ; sysml:ownedMembership elmt:CompositeMultiplicity__Car__frontWheel_om, elmt:CompositeMultiplicity__Car__rearWheel_om ; - sysml:ownedRelationship elmt:CompositeMultiplicity__Car__frontWheel_om, elmt:CompositeMultiplicity__Car__rearWheel_om, elmt:CompositeMultiplicity__Car_sp0 ; + sysml:ownedRelationship elmt:CompositeMultiplicity__Car_sp0, elmt:CompositeMultiplicity__Car__frontWheel_om, elmt:CompositeMultiplicity__Car__rearWheel_om ; sysml:ownedFeature elmt:CompositeMultiplicity__Car__frontWheel, elmt:CompositeMultiplicity__Car__rearWheel ; sysml:ownedFeatureMembership elmt:CompositeMultiplicity__Car__frontWheel_om, elmt:CompositeMultiplicity__Car__rearWheel_om ; sysml:ownedSpecialization elmt:CompositeMultiplicity__Car_sp0 ; @@ -329,7 +329,7 @@ elmt:CompositeMultiplicity__Car sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel\"},{\"@id\":\"CompositeMultiplicity__Car__rearWheel\"}]" ; json:ownedMembership "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel_om\"},{\"@id\":\"CompositeMultiplicity__Car__rearWheel_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel_om\"},{\"@id\":\"CompositeMultiplicity__Car__rearWheel_om\"},{\"@id\":\"CompositeMultiplicity__Car_sp0\"}]" ; + json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Car_sp0\"},{\"@id\":\"CompositeMultiplicity__Car__frontWheel_om\"},{\"@id\":\"CompositeMultiplicity__Car__rearWheel_om\"}]" ; json:ownedFeature "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel\"},{\"@id\":\"CompositeMultiplicity__Car__rearWheel\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel_om\"},{\"@id\":\"CompositeMultiplicity__Car__rearWheel_om\"}]" . @@ -361,7 +361,7 @@ elmt:CompositeMultiplicity__Car__frontWheel sysx:isKindImplicit "true"^^xsd:boolean ; sysml:redefines elmt:CompositeMultiplicity__Vehicle__w ; sysml:multiplicity expr:CompositeMultiplicity__Car__frontWheel_pmultiplicity ; - sysml:ownedRelationship expr:CompositeMultiplicity__Car__frontWheel_pmultiplicity_om, elmt:CompositeMultiplicity__Car__frontWheel__lugbolt_om, elmt:CompositeMultiplicity__Car__frontWheel_rd0 ; + sysml:ownedRelationship expr:CompositeMultiplicity__Car__frontWheel_pmultiplicity_om, elmt:CompositeMultiplicity__Car__frontWheel_rd0, elmt:CompositeMultiplicity__Car__frontWheel__lugbolt_om ; sysml:ownedMembership expr:CompositeMultiplicity__Car__frontWheel_pmultiplicity_om, elmt:CompositeMultiplicity__Car__frontWheel__lugbolt_om ; sysml:upperBound expr:CompositeMultiplicity__Car__frontWheel_pupperBound ; sysx:hasBody "true"^^xsd:boolean ; @@ -373,7 +373,7 @@ elmt:CompositeMultiplicity__Car__frontWheel sysml:ownedSpecialization elmt:CompositeMultiplicity__Car__frontWheel_rd0 ; sysx:sourceText " composite frontWheel[2] redefines w {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel_pmultiplicity_om\"},{\"@id\":\"CompositeMultiplicity__Car__frontWheel__lugbolt_om\"},{\"@id\":\"CompositeMultiplicity__Car__frontWheel_rd0\"}]" ; + json:ownedRelationship "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel_pmultiplicity_om\"},{\"@id\":\"CompositeMultiplicity__Car__frontWheel_rd0\"},{\"@id\":\"CompositeMultiplicity__Car__frontWheel__lugbolt_om\"}]" ; json:ownedMembership "[{\"@id\":\"CompositeMultiplicity__Car__frontWheel_pmultiplicity_om\"},{\"@id\":\"CompositeMultiplicity__Car__frontWheel__lugbolt_om\"}]" . elmt:CompositeMultiplicity__Car__frontWheel_om diff --git a/tests/export/testdata/convert/constraints.golden.ttl.sha256 b/tests/export/testdata/convert/constraints.golden.ttl.sha256 index 6830045d02..4067629c47 100644 --- a/tests/export/testdata/convert/constraints.golden.ttl.sha256 +++ b/tests/export/testdata/convert/constraints.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 6fcce601ab1e0e43f13af9f014b26c9ece3e96d909967f724bf1fefe5533e42b bytes 249424 lines 3872 +sha256 1ec4177fb6f9fba7e1387dd48ec0c19c39896d50ab6dbd9a242e069d2f8686ec bytes 249424 lines 3872 @prefix elmt: . @prefix expr: . @prefix json: . diff --git a/tests/export/testdata/convert/declaration_head_order.canonical.golden.sysml b/tests/export/testdata/convert/declaration_head_order.canonical.golden.sysml new file mode 100644 index 0000000000..525ba72ffd --- /dev/null +++ b/tests/export/testdata/convert/declaration_head_order.canonical.golden.sysml @@ -0,0 +1,22 @@ +package HeadOrder { + private import ScalarValues::*; + metadata def Tag; + attribute def Mass; + part def Base { + attribute m : Mass; + attribute n : Real; + attribute p : Real; + } + part def Derived specializes Base { + attribute redefines m = 1; + attribute redefines n : Real = 2; + attribute q : Real subsets p; + attribute r : Real = 3; + attribute redefines p default = 4; + attribute s : Real[2] subsets p; + attribute t subsets p[1..3] : Real; + #Tag attribute u : Real[1] = 5 { + doc /* a body member after the head */ + } + } +} diff --git a/tests/export/testdata/convert/declaration_head_order.golden.sysml b/tests/export/testdata/convert/declaration_head_order.golden.sysml new file mode 100644 index 0000000000..2edc63be1e --- /dev/null +++ b/tests/export/testdata/convert/declaration_head_order.golden.sysml @@ -0,0 +1,22 @@ +package HeadOrder { + private import ScalarValues::*; + metadata def Tag; + attribute def Mass; + part def Base { + attribute m : Mass; + attribute n : Real; + attribute p : Real; + } + part def Derived :> Base { + attribute redefines m = 1; + attribute :>> n : Real = 2; + attribute q : Real subsets p; + attribute r : Real = 3; + attribute :>> p default = 4; + attribute s : Real [2] :> p; + attribute t :> p [1..3] : Real; + #Tag attribute u : Real [1] = 5 { + doc /* a body member after the head */ + } + } +} diff --git a/tests/export/testdata/convert/declaration_head_order.golden.ttl b/tests/export/testdata/convert/declaration_head_order.golden.ttl new file mode 100644 index 0000000000..44186ffc1c --- /dev/null +++ b/tests/export/testdata/convert/declaration_head_order.golden.ttl @@ -0,0 +1,1190 @@ +@prefix elmt: . +@prefix expr: . +@prefix json: . +@prefix rdf: . +@prefix sysml: . +@prefix sysx: . +@prefix xsd: . + +elmt:HeadOrder + a sysml:Package ; + sysml:qualifiedName "HeadOrder" ; + sysx:sourceLine "1"^^xsd:integer ; + sysx:sourceColumn "1"^^xsd:integer ; + sysx:sourceEndLine "22"^^xsd:integer ; + sysx:sourceEndColumn "2"^^xsd:integer ; + sysml:elementId "HeadOrder" ; + sysx:memberIndex "0"^^xsd:integer ; + sysx:sourceLanguage "sysml" ; + sysml:declaredName "HeadOrder" ; + sysx:hasBody "true"^^xsd:boolean ; + sysml:ownedRelationship elmt:HeadOrder___400, elmt:HeadOrder__Tag_om, elmt:HeadOrder__Mass_om, elmt:HeadOrder__Base_om, elmt:HeadOrder__Derived_om ; + sysml:ownedImport elmt:HeadOrder___400 ; + sysml:ownedMember elmt:HeadOrder__Tag, elmt:HeadOrder__Mass, elmt:HeadOrder__Base, elmt:HeadOrder__Derived ; + sysml:ownedMembership elmt:HeadOrder__Tag_om, elmt:HeadOrder__Mass_om, elmt:HeadOrder__Base_om, elmt:HeadOrder__Derived_om ; + sysx:sourceText "package HeadOrder {\n" ; + sysx:sourceTail "}\n" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder___400\"},{\"@id\":\"HeadOrder__Tag_om\"},{\"@id\":\"HeadOrder__Mass_om\"},{\"@id\":\"HeadOrder__Base_om\"},{\"@id\":\"HeadOrder__Derived_om\"}]" ; + json:ownedMember "[{\"@id\":\"HeadOrder__Tag\"},{\"@id\":\"HeadOrder__Mass\"},{\"@id\":\"HeadOrder__Base\"},{\"@id\":\"HeadOrder__Derived\"}]" ; + json:ownedMembership "[{\"@id\":\"HeadOrder__Tag_om\"},{\"@id\":\"HeadOrder__Mass_om\"},{\"@id\":\"HeadOrder__Base_om\"},{\"@id\":\"HeadOrder__Derived_om\"}]" . + +elmt:HeadOrder___400 + a sysml:NamespaceImport ; + sysml:qualifiedName "HeadOrder::@0" ; + sysx:sourceLine "2"^^xsd:integer ; + sysx:sourceColumn "5"^^xsd:integer ; + sysx:sourceEndLine "2"^^xsd:integer ; + sysx:sourceEndColumn "36"^^xsd:integer ; + sysml:elementId "HeadOrder___400" ; + sysx:memberIndex "0"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder ; + sysml:owner elmt:HeadOrder ; + sysml:owningRelatedElement elmt:HeadOrder ; + sysml:importOwningNamespace elmt:HeadOrder ; + sysml:visibility "private" ; + sysml:importedNamespace ; + sysx:hasBody "false"^^xsd:boolean ; + sysx:sourceText " private import ScalarValues::*;\n" . + +elmt:HeadOrder__Tag + a sysml:MetadataDefinition ; + sysml:qualifiedName "HeadOrder::Tag" ; + sysx:sourceLine "3"^^xsd:integer ; + sysx:sourceColumn "5"^^xsd:integer ; + sysx:sourceEndLine "3"^^xsd:integer ; + sysx:sourceEndColumn "22"^^xsd:integer ; + sysml:elementId "HeadOrder__Tag" ; + sysx:memberIndex "1"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder ; + sysml:owner elmt:HeadOrder ; + sysml:owningRelationship elmt:HeadOrder__Tag_om ; + sysml:owningMembership elmt:HeadOrder__Tag_om ; + sysml:declaredName "Tag" ; + sysx:hasBody "false"^^xsd:boolean ; + sysx:sourceText " metadata def Tag;\n" . + +elmt:HeadOrder__Tag_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Tag_om" ; + sysml:owner elmt:HeadOrder ; + sysml:memberElement elmt:HeadOrder__Tag ; + sysml:ownedMemberElement elmt:HeadOrder__Tag ; + sysml:ownedRelatedElement elmt:HeadOrder__Tag ; + sysml:owningRelatedElement elmt:HeadOrder ; + sysml:membershipOwningNamespace elmt:HeadOrder . + +elmt:HeadOrder__Mass + a sysml:AttributeDefinition ; + sysml:qualifiedName "HeadOrder::Mass" ; + sysx:sourceLine "4"^^xsd:integer ; + sysx:sourceColumn "5"^^xsd:integer ; + sysx:sourceEndLine "4"^^xsd:integer ; + sysx:sourceEndColumn "24"^^xsd:integer ; + sysml:elementId "HeadOrder__Mass" ; + sysx:memberIndex "2"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder ; + sysml:owner elmt:HeadOrder ; + sysml:owningRelationship elmt:HeadOrder__Mass_om ; + sysml:owningMembership elmt:HeadOrder__Mass_om ; + sysml:declaredName "Mass" ; + sysx:hasBody "false"^^xsd:boolean ; + sysx:sourceText " attribute def Mass;\n" . + +elmt:HeadOrder__Mass_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Mass_om" ; + sysml:owner elmt:HeadOrder ; + sysml:memberElement elmt:HeadOrder__Mass ; + sysml:ownedMemberElement elmt:HeadOrder__Mass ; + sysml:ownedRelatedElement elmt:HeadOrder__Mass ; + sysml:owningRelatedElement elmt:HeadOrder ; + sysml:membershipOwningNamespace elmt:HeadOrder . + +elmt:HeadOrder__Base + a sysml:PartDefinition ; + sysml:qualifiedName "HeadOrder::Base" ; + sysx:sourceLine "5"^^xsd:integer ; + sysx:sourceColumn "5"^^xsd:integer ; + sysx:sourceEndLine "9"^^xsd:integer ; + sysx:sourceEndColumn "6"^^xsd:integer ; + sysml:elementId "HeadOrder__Base" ; + sysx:memberIndex "3"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder ; + sysml:owner elmt:HeadOrder ; + sysml:owningRelationship elmt:HeadOrder__Base_om ; + sysml:owningMembership elmt:HeadOrder__Base_om ; + sysml:declaredName "Base" ; + sysx:hasBody "true"^^xsd:boolean ; + sysml:ownedMember elmt:HeadOrder__Base__m, elmt:HeadOrder__Base__n, elmt:HeadOrder__Base__p ; + sysml:ownedMembership elmt:HeadOrder__Base__m_om, elmt:HeadOrder__Base__n_om, elmt:HeadOrder__Base__p_om ; + sysml:ownedRelationship elmt:HeadOrder__Base__m_om, elmt:HeadOrder__Base__n_om, elmt:HeadOrder__Base__p_om ; + sysml:ownedFeature elmt:HeadOrder__Base__m, elmt:HeadOrder__Base__n, elmt:HeadOrder__Base__p ; + sysml:ownedFeatureMembership elmt:HeadOrder__Base__m_om, elmt:HeadOrder__Base__n_om, elmt:HeadOrder__Base__p_om ; + sysx:sourceText " part def Base {\n" ; + sysx:sourceTail " }\n" ; + json:ownedMember "[{\"@id\":\"HeadOrder__Base__m\"},{\"@id\":\"HeadOrder__Base__n\"},{\"@id\":\"HeadOrder__Base__p\"}]" ; + json:ownedMembership "[{\"@id\":\"HeadOrder__Base__m_om\"},{\"@id\":\"HeadOrder__Base__n_om\"},{\"@id\":\"HeadOrder__Base__p_om\"}]" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Base__m_om\"},{\"@id\":\"HeadOrder__Base__n_om\"},{\"@id\":\"HeadOrder__Base__p_om\"}]" ; + json:ownedFeature "[{\"@id\":\"HeadOrder__Base__m\"},{\"@id\":\"HeadOrder__Base__n\"},{\"@id\":\"HeadOrder__Base__p\"}]" ; + json:ownedFeatureMembership "[{\"@id\":\"HeadOrder__Base__m_om\"},{\"@id\":\"HeadOrder__Base__n_om\"},{\"@id\":\"HeadOrder__Base__p_om\"}]" . + +elmt:HeadOrder__Base_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Base_om" ; + sysml:owner elmt:HeadOrder ; + sysml:memberElement elmt:HeadOrder__Base ; + sysml:ownedMemberElement elmt:HeadOrder__Base ; + sysml:ownedRelatedElement elmt:HeadOrder__Base ; + sysml:owningRelatedElement elmt:HeadOrder ; + sysml:membershipOwningNamespace elmt:HeadOrder . + +elmt:HeadOrder__Base__m + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Base::m" ; + sysx:sourceLine "6"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "6"^^xsd:integer ; + sysx:sourceEndColumn "28"^^xsd:integer ; + sysml:elementId "HeadOrder__Base__m" ; + sysx:memberIndex "0"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Base ; + sysml:owner elmt:HeadOrder__Base ; + sysml:owningRelationship elmt:HeadOrder__Base__m_om ; + sysml:owningMembership elmt:HeadOrder__Base__m_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "m" ; + sysml:type elmt:HeadOrder__Mass ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Base__m_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Base__m_ft0 ; + sysml:ownedRelationship elmt:HeadOrder__Base__m_ft0 ; + sysx:sourceText " attribute m : Mass;\n" . + +elmt:HeadOrder__Base__m_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Base__m_om" ; + sysml:owner elmt:HeadOrder__Base ; + sysml:memberElement elmt:HeadOrder__Base__m ; + sysml:ownedMemberElement elmt:HeadOrder__Base__m ; + sysml:ownedRelatedElement elmt:HeadOrder__Base__m ; + sysml:owningRelatedElement elmt:HeadOrder__Base ; + sysml:membershipOwningNamespace elmt:HeadOrder__Base ; + sysml:ownedMemberFeature elmt:HeadOrder__Base__m ; + sysml:owningType elmt:HeadOrder__Base . + +elmt:HeadOrder__Base__n + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Base::n" ; + sysx:sourceLine "7"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "7"^^xsd:integer ; + sysx:sourceEndColumn "28"^^xsd:integer ; + sysml:elementId "HeadOrder__Base__n" ; + sysx:memberIndex "1"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Base ; + sysml:owner elmt:HeadOrder__Base ; + sysml:owningRelationship elmt:HeadOrder__Base__n_om ; + sysml:owningMembership elmt:HeadOrder__Base__n_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "n" ; + sysml:type ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Base__n_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Base__n_ft0 ; + sysml:ownedRelationship elmt:HeadOrder__Base__n_ft0 ; + sysx:sourceText " attribute n : Real;\n" . + +elmt:HeadOrder__Base__n_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Base__n_om" ; + sysml:owner elmt:HeadOrder__Base ; + sysml:memberElement elmt:HeadOrder__Base__n ; + sysml:ownedMemberElement elmt:HeadOrder__Base__n ; + sysml:ownedRelatedElement elmt:HeadOrder__Base__n ; + sysml:owningRelatedElement elmt:HeadOrder__Base ; + sysml:membershipOwningNamespace elmt:HeadOrder__Base ; + sysml:ownedMemberFeature elmt:HeadOrder__Base__n ; + sysml:owningType elmt:HeadOrder__Base . + +elmt:HeadOrder__Base__p + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Base::p" ; + sysx:sourceLine "8"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "8"^^xsd:integer ; + sysx:sourceEndColumn "28"^^xsd:integer ; + sysml:elementId "HeadOrder__Base__p" ; + sysx:memberIndex "2"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Base ; + sysml:owner elmt:HeadOrder__Base ; + sysml:owningRelationship elmt:HeadOrder__Base__p_om ; + sysml:owningMembership elmt:HeadOrder__Base__p_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "p" ; + sysml:type ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Base__p_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Base__p_ft0 ; + sysml:ownedRelationship elmt:HeadOrder__Base__p_ft0 ; + sysx:sourceText " attribute p : Real;\n" . + +elmt:HeadOrder__Base__p_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Base__p_om" ; + sysml:owner elmt:HeadOrder__Base ; + sysml:memberElement elmt:HeadOrder__Base__p ; + sysml:ownedMemberElement elmt:HeadOrder__Base__p ; + sysml:ownedRelatedElement elmt:HeadOrder__Base__p ; + sysml:owningRelatedElement elmt:HeadOrder__Base ; + sysml:membershipOwningNamespace elmt:HeadOrder__Base ; + sysml:ownedMemberFeature elmt:HeadOrder__Base__p ; + sysml:owningType elmt:HeadOrder__Base . + +elmt:HeadOrder__Derived + a sysml:PartDefinition ; + sysml:qualifiedName "HeadOrder::Derived" ; + sysx:sourceLine "10"^^xsd:integer ; + sysx:sourceColumn "5"^^xsd:integer ; + sysx:sourceEndLine "21"^^xsd:integer ; + sysx:sourceEndColumn "6"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived" ; + sysx:memberIndex "4"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder ; + sysml:owner elmt:HeadOrder ; + sysml:owningRelationship elmt:HeadOrder__Derived_om ; + sysml:owningMembership elmt:HeadOrder__Derived_om ; + sysml:declaredName "Derived" ; + sysml:specializes elmt:HeadOrder__Base ; + sysx:hasBody "true"^^xsd:boolean ; + sysml:ownedMember elmt:HeadOrder__Derived__m, elmt:HeadOrder__Derived__n, elmt:HeadOrder__Derived__q, elmt:HeadOrder__Derived__r, elmt:HeadOrder__Derived__p, elmt:HeadOrder__Derived__s, elmt:HeadOrder__Derived__t, elmt:HeadOrder__Derived__u ; + sysml:ownedMembership elmt:HeadOrder__Derived__m_om, elmt:HeadOrder__Derived__n_om, elmt:HeadOrder__Derived__q_om, elmt:HeadOrder__Derived__r_om, elmt:HeadOrder__Derived__p_om, elmt:HeadOrder__Derived__s_om, elmt:HeadOrder__Derived__t_om, elmt:HeadOrder__Derived__u_om ; + sysml:ownedRelationship elmt:HeadOrder__Derived_sc0, elmt:HeadOrder__Derived__m_om, elmt:HeadOrder__Derived__n_om, elmt:HeadOrder__Derived__q_om, elmt:HeadOrder__Derived__r_om, elmt:HeadOrder__Derived__p_om, elmt:HeadOrder__Derived__s_om, elmt:HeadOrder__Derived__t_om, elmt:HeadOrder__Derived__u_om ; + sysml:ownedFeature elmt:HeadOrder__Derived__m, elmt:HeadOrder__Derived__n, elmt:HeadOrder__Derived__q, elmt:HeadOrder__Derived__r, elmt:HeadOrder__Derived__p, elmt:HeadOrder__Derived__s, elmt:HeadOrder__Derived__t, elmt:HeadOrder__Derived__u ; + sysml:ownedFeatureMembership elmt:HeadOrder__Derived__m_om, elmt:HeadOrder__Derived__n_om, elmt:HeadOrder__Derived__q_om, elmt:HeadOrder__Derived__r_om, elmt:HeadOrder__Derived__p_om, elmt:HeadOrder__Derived__s_om, elmt:HeadOrder__Derived__t_om, elmt:HeadOrder__Derived__u_om ; + sysml:ownedSubclassification elmt:HeadOrder__Derived_sc0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived_sc0 ; + sysx:sourceText " part def Derived :> Base {\n" ; + sysx:sourceTail " }\n" ; + json:ownedMember "[{\"@id\":\"HeadOrder__Derived__m\"},{\"@id\":\"HeadOrder__Derived__n\"},{\"@id\":\"HeadOrder__Derived__q\"},{\"@id\":\"HeadOrder__Derived__r\"},{\"@id\":\"HeadOrder__Derived__p\"},{\"@id\":\"HeadOrder__Derived__s\"},{\"@id\":\"HeadOrder__Derived__t\"},{\"@id\":\"HeadOrder__Derived__u\"}]" ; + json:ownedMembership "[{\"@id\":\"HeadOrder__Derived__m_om\"},{\"@id\":\"HeadOrder__Derived__n_om\"},{\"@id\":\"HeadOrder__Derived__q_om\"},{\"@id\":\"HeadOrder__Derived__r_om\"},{\"@id\":\"HeadOrder__Derived__p_om\"},{\"@id\":\"HeadOrder__Derived__s_om\"},{\"@id\":\"HeadOrder__Derived__t_om\"},{\"@id\":\"HeadOrder__Derived__u_om\"}]" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived_sc0\"},{\"@id\":\"HeadOrder__Derived__m_om\"},{\"@id\":\"HeadOrder__Derived__n_om\"},{\"@id\":\"HeadOrder__Derived__q_om\"},{\"@id\":\"HeadOrder__Derived__r_om\"},{\"@id\":\"HeadOrder__Derived__p_om\"},{\"@id\":\"HeadOrder__Derived__s_om\"},{\"@id\":\"HeadOrder__Derived__t_om\"},{\"@id\":\"HeadOrder__Derived__u_om\"}]" ; + json:ownedFeature "[{\"@id\":\"HeadOrder__Derived__m\"},{\"@id\":\"HeadOrder__Derived__n\"},{\"@id\":\"HeadOrder__Derived__q\"},{\"@id\":\"HeadOrder__Derived__r\"},{\"@id\":\"HeadOrder__Derived__p\"},{\"@id\":\"HeadOrder__Derived__s\"},{\"@id\":\"HeadOrder__Derived__t\"},{\"@id\":\"HeadOrder__Derived__u\"}]" ; + json:ownedFeatureMembership "[{\"@id\":\"HeadOrder__Derived__m_om\"},{\"@id\":\"HeadOrder__Derived__n_om\"},{\"@id\":\"HeadOrder__Derived__q_om\"},{\"@id\":\"HeadOrder__Derived__r_om\"},{\"@id\":\"HeadOrder__Derived__p_om\"},{\"@id\":\"HeadOrder__Derived__s_om\"},{\"@id\":\"HeadOrder__Derived__t_om\"},{\"@id\":\"HeadOrder__Derived__u_om\"}]" . + +elmt:HeadOrder__Derived_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived_om" ; + sysml:owner elmt:HeadOrder ; + sysml:memberElement elmt:HeadOrder__Derived ; + sysml:ownedMemberElement elmt:HeadOrder__Derived ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived ; + sysml:owningRelatedElement elmt:HeadOrder ; + sysml:membershipOwningNamespace elmt:HeadOrder . + +elmt:HeadOrder__Derived__m + a sysml:AttributeUsage ; + sysml:name "m" ; + sysml:qualifiedName "HeadOrder::Derived::m" ; + sysx:sourceLine "11"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "11"^^xsd:integer ; + sysx:sourceEndColumn "35"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__m" ; + sysx:memberIndex "0"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__m_om ; + sysml:owningMembership elmt:HeadOrder__Derived__m_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:redefines elmt:HeadOrder__Base__m ; + sysml:value expr:HeadOrder__Derived__m_pvalue ; + sysml:ownedRelationship elmt:HeadOrder__Derived__m_rd0, expr:HeadOrder__Derived__m_pvalue_om ; + sysml:ownedMembership expr:HeadOrder__Derived__m_pvalue_om ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedRedefinition elmt:HeadOrder__Derived__m_rd0 ; + sysml:ownedSubsetting elmt:HeadOrder__Derived__m_rd0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__m_rd0 ; + sysx:sourceText " attribute redefines m = 1;\n" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__m_rd0\"},{\"@id\":\"HeadOrder__Derived__m_pvalue_om\"}]" . + +elmt:HeadOrder__Derived__m_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__m_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__m ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__m ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__m ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__m ; + sysml:owningType elmt:HeadOrder__Derived . + +expr:HeadOrder__Derived__m_pvalue + a sysml:LiteralInteger ; + sysx:sourceText "1" ; + sysml:elementId "HeadOrder__Derived__m_pvalue" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "1"^^xsd:integer ; + sysml:owner elmt:HeadOrder__Derived__m ; + sysml:owningRelationship expr:HeadOrder__Derived__m_pvalue_om ; + sysml:owningMembership expr:HeadOrder__Derived__m_pvalue_om . + +expr:HeadOrder__Derived__m_pvalue_om + a sysml:FeatureValue ; + sysml:elementId "HeadOrder__Derived__m_pvalue_om" ; + sysml:owner elmt:HeadOrder__Derived__m ; + sysml:memberElement expr:HeadOrder__Derived__m_pvalue ; + sysml:ownedMemberElement expr:HeadOrder__Derived__m_pvalue ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__m_pvalue ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__m ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__m ; + sysml:featureWithValue elmt:HeadOrder__Derived__m ; + sysml:value expr:HeadOrder__Derived__m_pvalue . + +elmt:HeadOrder__Derived__n + a sysml:AttributeUsage ; + sysml:name "n" ; + sysml:qualifiedName "HeadOrder::Derived::n" ; + sysx:sourceLine "12"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "12"^^xsd:integer ; + sysx:sourceEndColumn "36"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__n" ; + sysx:memberIndex "1"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__n_om ; + sysml:owningMembership elmt:HeadOrder__Derived__n_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:type ; + sysml:redefines elmt:HeadOrder__Base__n ; + sysml:value expr:HeadOrder__Derived__n_pvalue ; + sysml:ownedRelationship elmt:HeadOrder__Derived__n_rd0, elmt:HeadOrder__Derived__n_ft0, expr:HeadOrder__Derived__n_pvalue_om ; + sysml:ownedMembership expr:HeadOrder__Derived__n_pvalue_om ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedRedefinition elmt:HeadOrder__Derived__n_rd0 ; + sysml:ownedSubsetting elmt:HeadOrder__Derived__n_rd0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__n_rd0, elmt:HeadOrder__Derived__n_ft0 ; + sysml:ownedTyping elmt:HeadOrder__Derived__n_ft0 ; + sysx:sourceText " attribute :>> n : Real = 2;\n" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__n_rd0\"},{\"@id\":\"HeadOrder__Derived__n_ft0\"},{\"@id\":\"HeadOrder__Derived__n_pvalue_om\"}]" ; + json:ownedSpecialization "[{\"@id\":\"HeadOrder__Derived__n_rd0\"},{\"@id\":\"HeadOrder__Derived__n_ft0\"}]" . + +elmt:HeadOrder__Derived__n_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__n_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__n ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__n ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__n ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__n ; + sysml:owningType elmt:HeadOrder__Derived . + +expr:HeadOrder__Derived__n_pvalue + a sysml:LiteralInteger ; + sysx:sourceText "2" ; + sysml:elementId "HeadOrder__Derived__n_pvalue" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "2"^^xsd:integer ; + sysml:owner elmt:HeadOrder__Derived__n ; + sysml:owningRelationship expr:HeadOrder__Derived__n_pvalue_om ; + sysml:owningMembership expr:HeadOrder__Derived__n_pvalue_om . + +expr:HeadOrder__Derived__n_pvalue_om + a sysml:FeatureValue ; + sysml:elementId "HeadOrder__Derived__n_pvalue_om" ; + sysml:owner elmt:HeadOrder__Derived__n ; + sysml:memberElement expr:HeadOrder__Derived__n_pvalue ; + sysml:ownedMemberElement expr:HeadOrder__Derived__n_pvalue ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__n_pvalue ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__n ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__n ; + sysml:featureWithValue elmt:HeadOrder__Derived__n ; + sysml:value expr:HeadOrder__Derived__n_pvalue . + +elmt:HeadOrder__Derived__q + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Derived::q" ; + sysx:sourceLine "13"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "13"^^xsd:integer ; + sysx:sourceEndColumn "38"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__q" ; + sysx:memberIndex "2"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__q_om ; + sysml:owningMembership elmt:HeadOrder__Derived__q_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "q" ; + sysml:type ; + sysml:subsets elmt:HeadOrder__Derived__p ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Derived__q_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__q_ft0, elmt:HeadOrder__Derived__q_ss0 ; + sysml:ownedRelationship elmt:HeadOrder__Derived__q_ft0, elmt:HeadOrder__Derived__q_ss0 ; + sysml:ownedSubsetting elmt:HeadOrder__Derived__q_ss0 ; + sysx:sourceText " attribute q : Real subsets p;\n" ; + json:ownedSpecialization "[{\"@id\":\"HeadOrder__Derived__q_ft0\"},{\"@id\":\"HeadOrder__Derived__q_ss0\"}]" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__q_ft0\"},{\"@id\":\"HeadOrder__Derived__q_ss0\"}]" . + +elmt:HeadOrder__Derived__q_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__q_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__q ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__q ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__q ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__q ; + sysml:owningType elmt:HeadOrder__Derived . + +elmt:HeadOrder__Derived__r + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Derived::r" ; + sysx:sourceLine "14"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "14"^^xsd:integer ; + sysx:sourceEndColumn "32"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__r" ; + sysx:memberIndex "3"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__r_om ; + sysml:owningMembership elmt:HeadOrder__Derived__r_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "r" ; + sysml:type ; + sysml:value expr:HeadOrder__Derived__r_pvalue ; + sysml:ownedRelationship elmt:HeadOrder__Derived__r_ft0, expr:HeadOrder__Derived__r_pvalue_om ; + sysml:ownedMembership expr:HeadOrder__Derived__r_pvalue_om ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Derived__r_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__r_ft0 ; + sysx:sourceText " attribute r : Real = 3;\n" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__r_ft0\"},{\"@id\":\"HeadOrder__Derived__r_pvalue_om\"}]" . + +elmt:HeadOrder__Derived__r_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__r_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__r ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__r ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__r ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__r ; + sysml:owningType elmt:HeadOrder__Derived . + +expr:HeadOrder__Derived__r_pvalue + a sysml:LiteralInteger ; + sysx:sourceText "3" ; + sysml:elementId "HeadOrder__Derived__r_pvalue" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "3"^^xsd:integer ; + sysml:owner elmt:HeadOrder__Derived__r ; + sysml:owningRelationship expr:HeadOrder__Derived__r_pvalue_om ; + sysml:owningMembership expr:HeadOrder__Derived__r_pvalue_om . + +expr:HeadOrder__Derived__r_pvalue_om + a sysml:FeatureValue ; + sysml:elementId "HeadOrder__Derived__r_pvalue_om" ; + sysml:owner elmt:HeadOrder__Derived__r ; + sysml:memberElement expr:HeadOrder__Derived__r_pvalue ; + sysml:ownedMemberElement expr:HeadOrder__Derived__r_pvalue ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__r_pvalue ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__r ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__r ; + sysml:featureWithValue elmt:HeadOrder__Derived__r ; + sysml:value expr:HeadOrder__Derived__r_pvalue . + +elmt:HeadOrder__Derived__p + a sysml:AttributeUsage ; + sysml:name "p" ; + sysml:qualifiedName "HeadOrder::Derived::p" ; + sysx:sourceLine "15"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "15"^^xsd:integer ; + sysx:sourceEndColumn "37"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__p" ; + sysx:memberIndex "4"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__p_om ; + sysml:owningMembership elmt:HeadOrder__Derived__p_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:redefines elmt:HeadOrder__Base__p ; + sysml:isDefault "true"^^xsd:boolean ; + sysml:value expr:HeadOrder__Derived__p_pvalue ; + sysml:ownedRelationship elmt:HeadOrder__Derived__p_rd0, expr:HeadOrder__Derived__p_pvalue_om ; + sysml:ownedMembership expr:HeadOrder__Derived__p_pvalue_om ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedRedefinition elmt:HeadOrder__Derived__p_rd0 ; + sysml:ownedSubsetting elmt:HeadOrder__Derived__p_rd0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__p_rd0 ; + sysx:sourceText " attribute :>> p default = 4;\n" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__p_rd0\"},{\"@id\":\"HeadOrder__Derived__p_pvalue_om\"}]" . + +elmt:HeadOrder__Derived__p_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__p_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__p ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__p ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__p ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__p ; + sysml:owningType elmt:HeadOrder__Derived . + +expr:HeadOrder__Derived__p_pvalue + a sysml:LiteralInteger ; + sysx:sourceText "4" ; + sysml:elementId "HeadOrder__Derived__p_pvalue" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "4"^^xsd:integer ; + sysml:owner elmt:HeadOrder__Derived__p ; + sysml:owningRelationship expr:HeadOrder__Derived__p_pvalue_om ; + sysml:owningMembership expr:HeadOrder__Derived__p_pvalue_om . + +expr:HeadOrder__Derived__p_pvalue_om + a sysml:FeatureValue ; + sysml:elementId "HeadOrder__Derived__p_pvalue_om" ; + sysml:owner elmt:HeadOrder__Derived__p ; + sysml:memberElement expr:HeadOrder__Derived__p_pvalue ; + sysml:ownedMemberElement expr:HeadOrder__Derived__p_pvalue ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__p_pvalue ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__p ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__p ; + sysml:featureWithValue elmt:HeadOrder__Derived__p ; + sysml:value expr:HeadOrder__Derived__p_pvalue ; + sysml:isDefault "true"^^xsd:boolean . + +elmt:HeadOrder__Derived__s + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Derived::s" ; + sysx:sourceLine "16"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "16"^^xsd:integer ; + sysx:sourceEndColumn "37"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__s" ; + sysx:memberIndex "5"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__s_om ; + sysml:owningMembership elmt:HeadOrder__Derived__s_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "s" ; + sysml:type ; + sysml:subsets elmt:HeadOrder__Derived__p ; + sysml:multiplicity expr:HeadOrder__Derived__s_pmultiplicity ; + sysml:ownedRelationship elmt:HeadOrder__Derived__s_ft0, expr:HeadOrder__Derived__s_pmultiplicity_om, elmt:HeadOrder__Derived__s_ss0 ; + sysml:ownedMembership expr:HeadOrder__Derived__s_pmultiplicity_om ; + sysml:upperBound expr:HeadOrder__Derived__s_pupperBound ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Derived__s_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__s_ft0, elmt:HeadOrder__Derived__s_ss0 ; + sysml:ownedSubsetting elmt:HeadOrder__Derived__s_ss0 ; + sysx:sourceText " attribute s : Real [2] :> p;\n" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__s_ft0\"},{\"@id\":\"HeadOrder__Derived__s_pmultiplicity_om\"},{\"@id\":\"HeadOrder__Derived__s_ss0\"}]" ; + json:ownedSpecialization "[{\"@id\":\"HeadOrder__Derived__s_ft0\"},{\"@id\":\"HeadOrder__Derived__s_ss0\"}]" . + +elmt:HeadOrder__Derived__s_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__s_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__s ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__s ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__s ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__s ; + sysml:owningType elmt:HeadOrder__Derived . + +expr:HeadOrder__Derived__s_pmultiplicity + a sysml:MultiplicityRange ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:elementId "HeadOrder__Derived__s_pmultiplicity" ; + sysml:owner elmt:HeadOrder__Derived__s ; + sysml:owningRelationship expr:HeadOrder__Derived__s_pmultiplicity_om ; + sysml:owningMembership expr:HeadOrder__Derived__s_pmultiplicity_om ; + sysml:upperBound expr:HeadOrder__Derived__s_pupperBound ; + sysml:ownedRelationship expr:HeadOrder__Derived__s_pupperBound_om ; + sysml:ownedMembership expr:HeadOrder__Derived__s_pupperBound_om . + +expr:HeadOrder__Derived__s_pmultiplicity_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__s_pmultiplicity_om" ; + sysml:owner elmt:HeadOrder__Derived__s ; + sysml:memberElement expr:HeadOrder__Derived__s_pmultiplicity ; + sysml:ownedMemberElement expr:HeadOrder__Derived__s_pmultiplicity ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__s_pmultiplicity ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__s ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__s . + +expr:HeadOrder__Derived__s_pupperBound + a sysml:LiteralInteger ; + sysx:sourceText "2" ; + sysml:elementId "HeadOrder__Derived__s_pupperBound" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "2"^^xsd:integer ; + sysml:owner expr:HeadOrder__Derived__s_pmultiplicity ; + sysml:owningRelationship expr:HeadOrder__Derived__s_pupperBound_om ; + sysml:owningMembership expr:HeadOrder__Derived__s_pupperBound_om . + +expr:HeadOrder__Derived__s_pupperBound_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__s_pupperBound_om" ; + sysml:owner expr:HeadOrder__Derived__s_pmultiplicity ; + sysml:memberElement expr:HeadOrder__Derived__s_pupperBound ; + sysml:ownedMemberElement expr:HeadOrder__Derived__s_pupperBound ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__s_pupperBound ; + sysml:owningRelatedElement expr:HeadOrder__Derived__s_pmultiplicity ; + sysml:membershipOwningNamespace expr:HeadOrder__Derived__s_pmultiplicity . + +elmt:HeadOrder__Derived__t + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Derived::t" ; + sysx:sourceLine "17"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "17"^^xsd:integer ; + sysx:sourceEndColumn "40"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__t" ; + sysx:memberIndex "6"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__t_om ; + sysml:owningMembership elmt:HeadOrder__Derived__t_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "t" ; + sysml:type ; + sysml:subsets elmt:HeadOrder__Derived__p ; + sysml:multiplicity expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:ownedRelationship elmt:HeadOrder__Derived__t_ss0, expr:HeadOrder__Derived__t_pmultiplicity_om, elmt:HeadOrder__Derived__t_ft0 ; + sysml:ownedMembership expr:HeadOrder__Derived__t_pmultiplicity_om ; + sysml:lowerBound expr:HeadOrder__Derived__t_plowerBound ; + sysml:upperBound expr:HeadOrder__Derived__t_pupperBound ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedSubsetting elmt:HeadOrder__Derived__t_ss0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__t_ss0, elmt:HeadOrder__Derived__t_ft0 ; + sysml:ownedTyping elmt:HeadOrder__Derived__t_ft0 ; + sysx:sourceText " attribute t :> p [1..3] : Real;\n" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__t_ss0\"},{\"@id\":\"HeadOrder__Derived__t_pmultiplicity_om\"},{\"@id\":\"HeadOrder__Derived__t_ft0\"}]" ; + json:ownedSpecialization "[{\"@id\":\"HeadOrder__Derived__t_ss0\"},{\"@id\":\"HeadOrder__Derived__t_ft0\"}]" . + +elmt:HeadOrder__Derived__t_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__t_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__t ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__t ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__t ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__t ; + sysml:owningType elmt:HeadOrder__Derived . + +expr:HeadOrder__Derived__t_pmultiplicity + a sysml:MultiplicityRange ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:elementId "HeadOrder__Derived__t_pmultiplicity" ; + sysml:owner elmt:HeadOrder__Derived__t ; + sysml:owningRelationship expr:HeadOrder__Derived__t_pmultiplicity_om ; + sysml:owningMembership expr:HeadOrder__Derived__t_pmultiplicity_om ; + sysml:lowerBound expr:HeadOrder__Derived__t_plowerBound ; + sysml:ownedRelationship expr:HeadOrder__Derived__t_plowerBound_om, expr:HeadOrder__Derived__t_pupperBound_om ; + sysml:ownedMembership expr:HeadOrder__Derived__t_plowerBound_om, expr:HeadOrder__Derived__t_pupperBound_om ; + sysml:upperBound expr:HeadOrder__Derived__t_pupperBound ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__t_plowerBound_om\"},{\"@id\":\"HeadOrder__Derived__t_pupperBound_om\"}]" ; + json:ownedMembership "[{\"@id\":\"HeadOrder__Derived__t_plowerBound_om\"},{\"@id\":\"HeadOrder__Derived__t_pupperBound_om\"}]" . + +expr:HeadOrder__Derived__t_pmultiplicity_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__t_pmultiplicity_om" ; + sysml:owner elmt:HeadOrder__Derived__t ; + sysml:memberElement expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:ownedMemberElement expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__t ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__t . + +expr:HeadOrder__Derived__t_plowerBound + a sysml:LiteralInteger ; + sysx:sourceText "1" ; + sysml:elementId "HeadOrder__Derived__t_plowerBound" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "1"^^xsd:integer ; + sysml:owner expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:owningRelationship expr:HeadOrder__Derived__t_plowerBound_om ; + sysml:owningMembership expr:HeadOrder__Derived__t_plowerBound_om . + +expr:HeadOrder__Derived__t_plowerBound_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__t_plowerBound_om" ; + sysml:owner expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:memberElement expr:HeadOrder__Derived__t_plowerBound ; + sysml:ownedMemberElement expr:HeadOrder__Derived__t_plowerBound ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__t_plowerBound ; + sysml:owningRelatedElement expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:membershipOwningNamespace expr:HeadOrder__Derived__t_pmultiplicity . + +expr:HeadOrder__Derived__t_pupperBound + a sysml:LiteralInteger ; + sysx:sourceText "3" ; + sysml:elementId "HeadOrder__Derived__t_pupperBound" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "3"^^xsd:integer ; + sysml:owner expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:owningRelationship expr:HeadOrder__Derived__t_pupperBound_om ; + sysml:owningMembership expr:HeadOrder__Derived__t_pupperBound_om . + +expr:HeadOrder__Derived__t_pupperBound_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__t_pupperBound_om" ; + sysml:owner expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:memberElement expr:HeadOrder__Derived__t_pupperBound ; + sysml:ownedMemberElement expr:HeadOrder__Derived__t_pupperBound ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__t_pupperBound ; + sysml:owningRelatedElement expr:HeadOrder__Derived__t_pmultiplicity ; + sysml:membershipOwningNamespace expr:HeadOrder__Derived__t_pmultiplicity . + +elmt:HeadOrder__Derived__u + a sysml:AttributeUsage ; + sysml:qualifiedName "HeadOrder::Derived::u" ; + sysx:sourceLine "18"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "20"^^xsd:integer ; + sysx:sourceEndColumn "10"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__u" ; + sysx:memberIndex "7"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:owningRelationship elmt:HeadOrder__Derived__u_om ; + sysml:owningMembership elmt:HeadOrder__Derived__u_om ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:declaredName "u" ; + sysml:ownedMember elmt:HeadOrder__Derived__u___401, elmt:HeadOrder__Derived__u___400 ; + sysml:ownedMembership elmt:HeadOrder__Derived__u___401_om, expr:HeadOrder__Derived__u_pmultiplicity_om, expr:HeadOrder__Derived__u_pvalue_om, elmt:HeadOrder__Derived__u___400_om ; + sysml:ownedRelationship elmt:HeadOrder__Derived__u___401_om, elmt:HeadOrder__Derived__u_ft0, expr:HeadOrder__Derived__u_pmultiplicity_om, expr:HeadOrder__Derived__u_pvalue_om, elmt:HeadOrder__Derived__u___400_om ; + sysml:type ; + sysml:multiplicity expr:HeadOrder__Derived__u_pmultiplicity ; + sysml:upperBound expr:HeadOrder__Derived__u_pupperBound ; + sysml:value expr:HeadOrder__Derived__u_pvalue ; + sysx:hasBody "true"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Derived__u_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__u_ft0 ; + sysx:sourceText " #Tag attribute u : Real [1] = 5 {\n" ; + sysx:sourceTail " }\n" ; + json:ownedMember "[{\"@id\":\"HeadOrder__Derived__u___401\"},{\"@id\":\"HeadOrder__Derived__u___400\"}]" ; + json:ownedMembership "[{\"@id\":\"HeadOrder__Derived__u___401_om\"},{\"@id\":\"HeadOrder__Derived__u_pmultiplicity_om\"},{\"@id\":\"HeadOrder__Derived__u_pvalue_om\"},{\"@id\":\"HeadOrder__Derived__u___400_om\"}]" ; + json:ownedRelationship "[{\"@id\":\"HeadOrder__Derived__u___401_om\"},{\"@id\":\"HeadOrder__Derived__u_ft0\"},{\"@id\":\"HeadOrder__Derived__u_pmultiplicity_om\"},{\"@id\":\"HeadOrder__Derived__u_pvalue_om\"},{\"@id\":\"HeadOrder__Derived__u___400_om\"}]" . + +elmt:HeadOrder__Derived__u_om + a sysml:FeatureMembership ; + sysml:elementId "HeadOrder__Derived__u_om" ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:memberElement elmt:HeadOrder__Derived__u ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__u ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__u ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived ; + sysml:ownedMemberFeature elmt:HeadOrder__Derived__u ; + sysml:owningType elmt:HeadOrder__Derived . + +elmt:HeadOrder__Derived__u___401 + a sysml:MetadataUsage ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:qualifiedName "HeadOrder::Derived::u::@1" ; + sysx:sourceLine "18"^^xsd:integer ; + sysx:sourceColumn "9"^^xsd:integer ; + sysx:sourceEndLine "18"^^xsd:integer ; + sysx:sourceEndColumn "13"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__u___401" ; + sysx:memberIndex "1"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived__u ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:owningRelationship elmt:HeadOrder__Derived__u___401_om ; + sysml:owningMembership elmt:HeadOrder__Derived__u___401_om ; + sysx:declaredKeyword "#" ; + sysml:type elmt:HeadOrder__Tag ; + sysx:hasBody "false"^^xsd:boolean ; + sysml:ownedTyping elmt:HeadOrder__Derived__u___401_ft0 ; + sysml:ownedSpecialization elmt:HeadOrder__Derived__u___401_ft0 ; + sysml:ownedRelationship elmt:HeadOrder__Derived__u___401_ft0 . + +elmt:HeadOrder__Derived__u___401_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__u___401_om" ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:memberElement elmt:HeadOrder__Derived__u___401 ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__u___401 ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__u___401 ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__u ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__u . + +expr:HeadOrder__Derived__u_pmultiplicity + a sysml:MultiplicityRange ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:elementId "HeadOrder__Derived__u_pmultiplicity" ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:owningRelationship expr:HeadOrder__Derived__u_pmultiplicity_om ; + sysml:owningMembership expr:HeadOrder__Derived__u_pmultiplicity_om ; + sysml:upperBound expr:HeadOrder__Derived__u_pupperBound ; + sysml:ownedRelationship expr:HeadOrder__Derived__u_pupperBound_om ; + sysml:ownedMembership expr:HeadOrder__Derived__u_pupperBound_om . + +expr:HeadOrder__Derived__u_pmultiplicity_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__u_pmultiplicity_om" ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:memberElement expr:HeadOrder__Derived__u_pmultiplicity ; + sysml:ownedMemberElement expr:HeadOrder__Derived__u_pmultiplicity ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__u_pmultiplicity ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__u ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__u . + +expr:HeadOrder__Derived__u_pupperBound + a sysml:LiteralInteger ; + sysx:sourceText "1" ; + sysml:elementId "HeadOrder__Derived__u_pupperBound" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "1"^^xsd:integer ; + sysml:owner expr:HeadOrder__Derived__u_pmultiplicity ; + sysml:owningRelationship expr:HeadOrder__Derived__u_pupperBound_om ; + sysml:owningMembership expr:HeadOrder__Derived__u_pupperBound_om . + +expr:HeadOrder__Derived__u_pupperBound_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__u_pupperBound_om" ; + sysml:owner expr:HeadOrder__Derived__u_pmultiplicity ; + sysml:memberElement expr:HeadOrder__Derived__u_pupperBound ; + sysml:ownedMemberElement expr:HeadOrder__Derived__u_pupperBound ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__u_pupperBound ; + sysml:owningRelatedElement expr:HeadOrder__Derived__u_pmultiplicity ; + sysml:membershipOwningNamespace expr:HeadOrder__Derived__u_pmultiplicity . + +expr:HeadOrder__Derived__u_pvalue + a sysml:LiteralInteger ; + sysx:sourceText "5" ; + sysml:elementId "HeadOrder__Derived__u_pvalue" ; + sysml:isComposite "false"^^xsd:boolean ; + sysml:value "5"^^xsd:integer ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:owningRelationship expr:HeadOrder__Derived__u_pvalue_om ; + sysml:owningMembership expr:HeadOrder__Derived__u_pvalue_om . + +expr:HeadOrder__Derived__u_pvalue_om + a sysml:FeatureValue ; + sysml:elementId "HeadOrder__Derived__u_pvalue_om" ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:memberElement expr:HeadOrder__Derived__u_pvalue ; + sysml:ownedMemberElement expr:HeadOrder__Derived__u_pvalue ; + sysml:ownedRelatedElement expr:HeadOrder__Derived__u_pvalue ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__u ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__u ; + sysml:featureWithValue elmt:HeadOrder__Derived__u ; + sysml:value expr:HeadOrder__Derived__u_pvalue . + +elmt:HeadOrder__Derived__u___400 + a sysml:Documentation ; + sysml:qualifiedName "HeadOrder::Derived::u::@0" ; + sysx:sourceLine "19"^^xsd:integer ; + sysx:sourceColumn "13"^^xsd:integer ; + sysx:sourceEndLine "19"^^xsd:integer ; + sysx:sourceEndColumn "51"^^xsd:integer ; + sysml:elementId "HeadOrder__Derived__u___400" ; + sysx:memberIndex "0"^^xsd:integer ; + sysml:owningNamespace elmt:HeadOrder__Derived__u ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:owningRelationship elmt:HeadOrder__Derived__u___400_om ; + sysml:owningMembership elmt:HeadOrder__Derived__u___400_om ; + sysml:body "a body member after the head " ; + sysx:sourceText " doc /* a body member after the head */\n" . + +elmt:HeadOrder__Derived__u___400_om + a sysml:OwningMembership ; + sysml:elementId "HeadOrder__Derived__u___400_om" ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:memberElement elmt:HeadOrder__Derived__u___400 ; + sysml:ownedMemberElement elmt:HeadOrder__Derived__u___400 ; + sysml:ownedRelatedElement elmt:HeadOrder__Derived__u___400 ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__u ; + sysml:membershipOwningNamespace elmt:HeadOrder__Derived__u . + +elmt:HeadOrder__Base__m_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Base__m_ft0" ; + sysml:typedFeature elmt:HeadOrder__Base__m ; + sysml:owningFeature elmt:HeadOrder__Base__m ; + sysml:specific elmt:HeadOrder__Base__m ; + sysml:source elmt:HeadOrder__Base__m ; + sysml:owningRelatedElement elmt:HeadOrder__Base__m ; + sysml:type elmt:HeadOrder__Mass ; + sysml:general elmt:HeadOrder__Mass ; + sysml:target elmt:HeadOrder__Mass ; + sysml:owner elmt:HeadOrder__Base__m ; + sysml:relatedElement elmt:HeadOrder__Base__m, elmt:HeadOrder__Mass ; + json:relatedElement "[{\"@id\":\"HeadOrder__Base__m\"},{\"@id\":\"HeadOrder__Mass\"}]" . + +elmt:HeadOrder__Base__n_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Base__n_ft0" ; + sysml:typedFeature elmt:HeadOrder__Base__n ; + sysml:owningFeature elmt:HeadOrder__Base__n ; + sysml:specific elmt:HeadOrder__Base__n ; + sysml:source elmt:HeadOrder__Base__n ; + sysml:owningRelatedElement elmt:HeadOrder__Base__n ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Base__n ; + sysml:relatedElement elmt:HeadOrder__Base__n, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Base__n\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Base__p_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Base__p_ft0" ; + sysml:typedFeature elmt:HeadOrder__Base__p ; + sysml:owningFeature elmt:HeadOrder__Base__p ; + sysml:specific elmt:HeadOrder__Base__p ; + sysml:source elmt:HeadOrder__Base__p ; + sysml:owningRelatedElement elmt:HeadOrder__Base__p ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Base__p ; + sysml:relatedElement elmt:HeadOrder__Base__p, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Base__p\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Derived_sc0 + a sysml:Subclassification ; + sysml:elementId "HeadOrder__Derived_sc0" ; + sysml:subclassifier elmt:HeadOrder__Derived ; + sysml:owningClassifier elmt:HeadOrder__Derived ; + sysml:specific elmt:HeadOrder__Derived ; + sysml:source elmt:HeadOrder__Derived ; + sysml:owningRelatedElement elmt:HeadOrder__Derived ; + sysml:superclassifier elmt:HeadOrder__Base ; + sysml:general elmt:HeadOrder__Base ; + sysml:target elmt:HeadOrder__Base ; + sysml:owner elmt:HeadOrder__Derived ; + sysml:relatedElement elmt:HeadOrder__Derived, elmt:HeadOrder__Base ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived\"},{\"@id\":\"HeadOrder__Base\"}]" . + +elmt:HeadOrder__Derived__m_rd0 + a sysml:Redefinition ; + sysml:elementId "HeadOrder__Derived__m_rd0" ; + sysml:redefiningFeature elmt:HeadOrder__Derived__m ; + sysml:subsettingFeature elmt:HeadOrder__Derived__m ; + sysml:owningFeature elmt:HeadOrder__Derived__m ; + sysml:specific elmt:HeadOrder__Derived__m ; + sysml:source elmt:HeadOrder__Derived__m ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__m ; + sysml:redefinedFeature elmt:HeadOrder__Base__m ; + sysml:subsettedFeature elmt:HeadOrder__Base__m ; + sysml:general elmt:HeadOrder__Base__m ; + sysml:target elmt:HeadOrder__Base__m ; + sysml:owner elmt:HeadOrder__Derived__m ; + sysml:relatedElement elmt:HeadOrder__Derived__m, elmt:HeadOrder__Base__m ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__m\"},{\"@id\":\"HeadOrder__Base__m\"}]" . + +elmt:HeadOrder__Derived__n_rd0 + a sysml:Redefinition ; + sysml:elementId "HeadOrder__Derived__n_rd0" ; + sysml:redefiningFeature elmt:HeadOrder__Derived__n ; + sysml:subsettingFeature elmt:HeadOrder__Derived__n ; + sysml:owningFeature elmt:HeadOrder__Derived__n ; + sysml:specific elmt:HeadOrder__Derived__n ; + sysml:source elmt:HeadOrder__Derived__n ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__n ; + sysml:redefinedFeature elmt:HeadOrder__Base__n ; + sysml:subsettedFeature elmt:HeadOrder__Base__n ; + sysml:general elmt:HeadOrder__Base__n ; + sysml:target elmt:HeadOrder__Base__n ; + sysml:owner elmt:HeadOrder__Derived__n ; + sysml:relatedElement elmt:HeadOrder__Derived__n, elmt:HeadOrder__Base__n ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__n\"},{\"@id\":\"HeadOrder__Base__n\"}]" . + +elmt:HeadOrder__Derived__n_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Derived__n_ft0" ; + sysml:typedFeature elmt:HeadOrder__Derived__n ; + sysml:owningFeature elmt:HeadOrder__Derived__n ; + sysml:specific elmt:HeadOrder__Derived__n ; + sysml:source elmt:HeadOrder__Derived__n ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__n ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Derived__n ; + sysml:relatedElement elmt:HeadOrder__Derived__n, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__n\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Derived__q_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Derived__q_ft0" ; + sysml:typedFeature elmt:HeadOrder__Derived__q ; + sysml:owningFeature elmt:HeadOrder__Derived__q ; + sysml:specific elmt:HeadOrder__Derived__q ; + sysml:source elmt:HeadOrder__Derived__q ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__q ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Derived__q ; + sysml:relatedElement elmt:HeadOrder__Derived__q, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__q\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Derived__q_ss0 + a sysml:Subsetting ; + sysml:elementId "HeadOrder__Derived__q_ss0" ; + sysml:subsettingFeature elmt:HeadOrder__Derived__q ; + sysml:owningFeature elmt:HeadOrder__Derived__q ; + sysml:specific elmt:HeadOrder__Derived__q ; + sysml:source elmt:HeadOrder__Derived__q ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__q ; + sysml:subsettedFeature elmt:HeadOrder__Derived__p ; + sysml:general elmt:HeadOrder__Derived__p ; + sysml:target elmt:HeadOrder__Derived__p ; + sysml:owner elmt:HeadOrder__Derived__q ; + sysml:relatedElement elmt:HeadOrder__Derived__q, elmt:HeadOrder__Derived__p ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__q\"},{\"@id\":\"HeadOrder__Derived__p\"}]" . + +elmt:HeadOrder__Derived__r_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Derived__r_ft0" ; + sysml:typedFeature elmt:HeadOrder__Derived__r ; + sysml:owningFeature elmt:HeadOrder__Derived__r ; + sysml:specific elmt:HeadOrder__Derived__r ; + sysml:source elmt:HeadOrder__Derived__r ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__r ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Derived__r ; + sysml:relatedElement elmt:HeadOrder__Derived__r, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__r\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Derived__p_rd0 + a sysml:Redefinition ; + sysml:elementId "HeadOrder__Derived__p_rd0" ; + sysml:redefiningFeature elmt:HeadOrder__Derived__p ; + sysml:subsettingFeature elmt:HeadOrder__Derived__p ; + sysml:owningFeature elmt:HeadOrder__Derived__p ; + sysml:specific elmt:HeadOrder__Derived__p ; + sysml:source elmt:HeadOrder__Derived__p ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__p ; + sysml:redefinedFeature elmt:HeadOrder__Base__p ; + sysml:subsettedFeature elmt:HeadOrder__Base__p ; + sysml:general elmt:HeadOrder__Base__p ; + sysml:target elmt:HeadOrder__Base__p ; + sysml:owner elmt:HeadOrder__Derived__p ; + sysml:relatedElement elmt:HeadOrder__Derived__p, elmt:HeadOrder__Base__p ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__p\"},{\"@id\":\"HeadOrder__Base__p\"}]" . + +elmt:HeadOrder__Derived__s_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Derived__s_ft0" ; + sysml:typedFeature elmt:HeadOrder__Derived__s ; + sysml:owningFeature elmt:HeadOrder__Derived__s ; + sysml:specific elmt:HeadOrder__Derived__s ; + sysml:source elmt:HeadOrder__Derived__s ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__s ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Derived__s ; + sysml:relatedElement elmt:HeadOrder__Derived__s, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__s\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Derived__s_ss0 + a sysml:Subsetting ; + sysml:elementId "HeadOrder__Derived__s_ss0" ; + sysml:subsettingFeature elmt:HeadOrder__Derived__s ; + sysml:owningFeature elmt:HeadOrder__Derived__s ; + sysml:specific elmt:HeadOrder__Derived__s ; + sysml:source elmt:HeadOrder__Derived__s ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__s ; + sysml:subsettedFeature elmt:HeadOrder__Derived__p ; + sysml:general elmt:HeadOrder__Derived__p ; + sysml:target elmt:HeadOrder__Derived__p ; + sysml:owner elmt:HeadOrder__Derived__s ; + sysml:relatedElement elmt:HeadOrder__Derived__s, elmt:HeadOrder__Derived__p ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__s\"},{\"@id\":\"HeadOrder__Derived__p\"}]" . + +elmt:HeadOrder__Derived__t_ss0 + a sysml:Subsetting ; + sysml:elementId "HeadOrder__Derived__t_ss0" ; + sysml:subsettingFeature elmt:HeadOrder__Derived__t ; + sysml:owningFeature elmt:HeadOrder__Derived__t ; + sysml:specific elmt:HeadOrder__Derived__t ; + sysml:source elmt:HeadOrder__Derived__t ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__t ; + sysml:subsettedFeature elmt:HeadOrder__Derived__p ; + sysml:general elmt:HeadOrder__Derived__p ; + sysml:target elmt:HeadOrder__Derived__p ; + sysml:owner elmt:HeadOrder__Derived__t ; + sysml:relatedElement elmt:HeadOrder__Derived__t, elmt:HeadOrder__Derived__p ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__t\"},{\"@id\":\"HeadOrder__Derived__p\"}]" . + +elmt:HeadOrder__Derived__t_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Derived__t_ft0" ; + sysml:typedFeature elmt:HeadOrder__Derived__t ; + sysml:owningFeature elmt:HeadOrder__Derived__t ; + sysml:specific elmt:HeadOrder__Derived__t ; + sysml:source elmt:HeadOrder__Derived__t ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__t ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Derived__t ; + sysml:relatedElement elmt:HeadOrder__Derived__t, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__t\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Derived__u_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Derived__u_ft0" ; + sysml:typedFeature elmt:HeadOrder__Derived__u ; + sysml:owningFeature elmt:HeadOrder__Derived__u ; + sysml:specific elmt:HeadOrder__Derived__u ; + sysml:source elmt:HeadOrder__Derived__u ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__u ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:HeadOrder__Derived__u ; + sysml:relatedElement elmt:HeadOrder__Derived__u, ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__u\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + +elmt:HeadOrder__Derived__u___401_ft0 + a sysml:FeatureTyping ; + sysml:elementId "HeadOrder__Derived__u___401_ft0" ; + sysml:typedFeature elmt:HeadOrder__Derived__u___401 ; + sysml:owningFeature elmt:HeadOrder__Derived__u___401 ; + sysml:specific elmt:HeadOrder__Derived__u___401 ; + sysml:source elmt:HeadOrder__Derived__u___401 ; + sysml:owningRelatedElement elmt:HeadOrder__Derived__u___401 ; + sysml:type elmt:HeadOrder__Tag ; + sysml:general elmt:HeadOrder__Tag ; + sysml:target elmt:HeadOrder__Tag ; + sysml:owner elmt:HeadOrder__Derived__u___401 ; + sysml:relatedElement elmt:HeadOrder__Derived__u___401, elmt:HeadOrder__Tag ; + json:relatedElement "[{\"@id\":\"HeadOrder__Derived__u___401\"},{\"@id\":\"HeadOrder__Tag\"}]" . + + + a sysml:DataType ; + sysml:elementId "14c0aa22-5489-59b5-b438-ded26e83ba31" ; + sysml:qualifiedName "ScalarValues::Real" ; + sysml:declaredName "Real" ; + sysml:isLibraryElement "true"^^xsd:boolean . + + + a sysml:LibraryPackage ; + sysml:elementId "40bb440c-5036-58e1-8675-5afccb8b8f1d" ; + sysml:qualifiedName "ScalarValues" ; + sysml:declaredName "ScalarValues" ; + sysml:isLibraryElement "true"^^xsd:boolean . diff --git a/tests/export/testdata/convert/declaration_head_order.sysml b/tests/export/testdata/convert/declaration_head_order.sysml new file mode 100644 index 0000000000..2edc63be1e --- /dev/null +++ b/tests/export/testdata/convert/declaration_head_order.sysml @@ -0,0 +1,22 @@ +package HeadOrder { + private import ScalarValues::*; + metadata def Tag; + attribute def Mass; + part def Base { + attribute m : Mass; + attribute n : Real; + attribute p : Real; + } + part def Derived :> Base { + attribute redefines m = 1; + attribute :>> n : Real = 2; + attribute q : Real subsets p; + attribute r : Real = 3; + attribute :>> p default = 4; + attribute s : Real [2] :> p; + attribute t :> p [1..3] : Real; + #Tag attribute u : Real [1] = 5 { + doc /* a body member after the head */ + } + } +} diff --git a/tests/export/testdata/convert/docs_before_members.golden.ttl b/tests/export/testdata/convert/docs_before_members.golden.ttl index ade5a22077..f8a7aeac41 100644 --- a/tests/export/testdata/convert/docs_before_members.golden.ttl +++ b/tests/export/testdata/convert/docs_before_members.golden.ttl @@ -331,7 +331,7 @@ elmt:Documented__wheel sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Documented__wheel___400, elmt:Documented__wheel__serial ; sysml:ownedMembership elmt:Documented__wheel___400_om, elmt:Documented__wheel__serial_om ; - sysml:ownedRelationship elmt:Documented__wheel___400_om, elmt:Documented__wheel__serial_om, elmt:Documented__wheel_ft0 ; + sysml:ownedRelationship elmt:Documented__wheel_ft0, elmt:Documented__wheel___400_om, elmt:Documented__wheel__serial_om ; sysml:ownedFeature elmt:Documented__wheel__serial ; sysml:ownedFeatureMembership elmt:Documented__wheel__serial_om ; sysml:ownedTyping elmt:Documented__wheel_ft0 ; @@ -340,7 +340,7 @@ elmt:Documented__wheel sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"Documented__wheel___400\"},{\"@id\":\"Documented__wheel__serial\"}]" ; json:ownedMembership "[{\"@id\":\"Documented__wheel___400_om\"},{\"@id\":\"Documented__wheel__serial_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"Documented__wheel___400_om\"},{\"@id\":\"Documented__wheel__serial_om\"},{\"@id\":\"Documented__wheel_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Documented__wheel_ft0\"},{\"@id\":\"Documented__wheel___400_om\"},{\"@id\":\"Documented__wheel__serial_om\"}]" . elmt:Documented__wheel_om a sysml:OwningMembership ; diff --git a/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 b/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 index 732a300c78..c946a87ea4 100644 --- a/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 +++ b/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 72b3a3dd4b619c92bbfc1d87d781223c1904f1a62a3467f937bcf935c5990bc6 bytes 271980 lines 5004 +sha256 7a8c580ac082b793bd36ab69873d7c91eb69ef1bfe3c754c44bb3ea565e467e7 bytes 271980 lines 5004 @prefix elmt: . @prefix expr: . @prefix json: . diff --git a/tests/export/testdata/convert/end_prefix_metadata.golden.ttl b/tests/export/testdata/convert/end_prefix_metadata.golden.ttl index 8b008b41a4..a32faa2a28 100644 --- a/tests/export/testdata/convert/end_prefix_metadata.golden.ttl +++ b/tests/export/testdata/convert/end_prefix_metadata.golden.ttl @@ -435,12 +435,12 @@ elmt:EndPrefixMetadata__Derivation__cause sysml:type elmt:EndPrefixMetadata__Req1 ; sysml:ownedMember elmt:EndPrefixMetadata__Derivation__cause___400 ; sysml:ownedMembership elmt:EndPrefixMetadata__Derivation__cause___400_om ; - sysml:ownedRelationship elmt:EndPrefixMetadata__Derivation__cause___400_om, elmt:EndPrefixMetadata__Derivation__cause_ft0 ; + sysml:ownedRelationship elmt:EndPrefixMetadata__Derivation__cause_ft0, elmt:EndPrefixMetadata__Derivation__cause___400_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:EndPrefixMetadata__Derivation__cause_ft0 ; sysml:ownedSpecialization elmt:EndPrefixMetadata__Derivation__cause_ft0 ; sysx:sourceText " end [*] ref cause : Req1;\n" ; - json:ownedRelationship "[{\"@id\":\"EndPrefixMetadata__Derivation__cause___400_om\"},{\"@id\":\"EndPrefixMetadata__Derivation__cause_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"EndPrefixMetadata__Derivation__cause_ft0\"},{\"@id\":\"EndPrefixMetadata__Derivation__cause___400_om\"}]" . elmt:EndPrefixMetadata__Derivation__cause_om a sysml:FeatureMembership ; @@ -542,14 +542,14 @@ elmt:EndPrefixMetadata__Derivation__effect sysml:isEnd "true"^^xsd:boolean ; sysml:type elmt:EndPrefixMetadata__Req1_5f1 ; sysml:multiplicity expr:EndPrefixMetadata__Derivation__effect_pmultiplicity ; - sysml:ownedRelationship expr:EndPrefixMetadata__Derivation__effect_pmultiplicity_om, elmt:EndPrefixMetadata__Derivation__effect_ft0 ; + sysml:ownedRelationship elmt:EndPrefixMetadata__Derivation__effect_ft0, expr:EndPrefixMetadata__Derivation__effect_pmultiplicity_om ; sysml:ownedMembership expr:EndPrefixMetadata__Derivation__effect_pmultiplicity_om ; sysml:upperBound expr:EndPrefixMetadata__Derivation__effect_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:EndPrefixMetadata__Derivation__effect_ft0 ; sysml:ownedSpecialization elmt:EndPrefixMetadata__Derivation__effect_ft0 ; sysx:sourceText " end ref attribute effect : Req1_1[*];\n" ; - json:ownedRelationship "[{\"@id\":\"EndPrefixMetadata__Derivation__effect_pmultiplicity_om\"},{\"@id\":\"EndPrefixMetadata__Derivation__effect_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"EndPrefixMetadata__Derivation__effect_ft0\"},{\"@id\":\"EndPrefixMetadata__Derivation__effect_pmultiplicity_om\"}]" . elmt:EndPrefixMetadata__Derivation__effect_om a sysml:FeatureMembership ; @@ -726,7 +726,7 @@ elmt:EndPrefixMetadata__context___402 sysml:isComposite "true"^^xsd:boolean ; sysml:ownedMember elmt:EndPrefixMetadata__context___402___402, elmt:EndPrefixMetadata__context___402__r1, elmt:EndPrefixMetadata__context___402__r1_5f1 ; sysml:ownedMembership elmt:EndPrefixMetadata__context___402___402_om, elmt:EndPrefixMetadata__context___402__r1_om, elmt:EndPrefixMetadata__context___402__r1_5f1_om ; - sysml:ownedRelationship elmt:EndPrefixMetadata__context___402___402_om, elmt:EndPrefixMetadata__context___402__r1_om, elmt:EndPrefixMetadata__context___402__r1_5f1_om, elmt:EndPrefixMetadata__context___402_ft0 ; + sysml:ownedRelationship elmt:EndPrefixMetadata__context___402___402_om, elmt:EndPrefixMetadata__context___402_ft0, elmt:EndPrefixMetadata__context___402__r1_om, elmt:EndPrefixMetadata__context___402__r1_5f1_om ; sysml:type elmt:EndPrefixMetadata__Derivation ; sysx:hasBody "true"^^xsd:boolean ; sysml:ownedFeature elmt:EndPrefixMetadata__context___402__r1, elmt:EndPrefixMetadata__context___402__r1_5f1 ; @@ -737,7 +737,7 @@ elmt:EndPrefixMetadata__context___402 sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"EndPrefixMetadata__context___402___402\"},{\"@id\":\"EndPrefixMetadata__context___402__r1\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_5f1\"}]" ; json:ownedMembership "[{\"@id\":\"EndPrefixMetadata__context___402___402_om\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_om\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_5f1_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"EndPrefixMetadata__context___402___402_om\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_om\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_5f1_om\"},{\"@id\":\"EndPrefixMetadata__context___402_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"EndPrefixMetadata__context___402___402_om\"},{\"@id\":\"EndPrefixMetadata__context___402_ft0\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_om\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_5f1_om\"}]" ; json:ownedFeature "[{\"@id\":\"EndPrefixMetadata__context___402__r1\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_5f1\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"EndPrefixMetadata__context___402__r1_om\"},{\"@id\":\"EndPrefixMetadata__context___402__r1_5f1_om\"}]" . diff --git a/tests/export/testdata/convert/feature_chains.golden.ttl b/tests/export/testdata/convert/feature_chains.golden.ttl index 659880e75c..98e16487cb 100644 --- a/tests/export/testdata/convert/feature_chains.golden.ttl +++ b/tests/export/testdata/convert/feature_chains.golden.ttl @@ -675,7 +675,7 @@ elmt:Chains__ctx__ic sysml:declaredName "ic" ; sysml:type elmt:Chains__II ; sysml:connectorEnd expr:Chains__ctx__ic_pend0, expr:Chains__ctx__ic_pend1 ; - sysml:ownedRelationship expr:Chains__ctx__ic_pend0_om, expr:Chains__ctx__ic_pend1_om, elmt:Chains__ctx__ic_ft0 ; + sysml:ownedRelationship elmt:Chains__ctx__ic_ft0, expr:Chains__ctx__ic_pend0_om, expr:Chains__ctx__ic_pend1_om ; sysml:ownedMembership expr:Chains__ctx__ic_pend0_om, expr:Chains__ctx__ic_pend1_om ; sysml:ownedMember expr:Chains__ctx__ic_pend0, expr:Chains__ctx__ic_pend1 ; sysml:ownedFeatureMembership expr:Chains__ctx__ic_pend0_om, expr:Chains__ctx__ic_pend1_om ; @@ -688,7 +688,7 @@ elmt:Chains__ctx__ic sysml:ownedSpecialization elmt:Chains__ctx__ic_ft0 ; sysx:sourceText " interface ic : II connect launchVehicle.instrumentUnit.pip to supplier.pip;\n" ; json:connectorEnd "[{\"@id\":\"Chains__ctx__ic_pend0\"},{\"@id\":\"Chains__ctx__ic_pend1\"}]" ; - json:ownedRelationship "[{\"@id\":\"Chains__ctx__ic_pend0_om\"},{\"@id\":\"Chains__ctx__ic_pend1_om\"},{\"@id\":\"Chains__ctx__ic_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Chains__ctx__ic_ft0\"},{\"@id\":\"Chains__ctx__ic_pend0_om\"},{\"@id\":\"Chains__ctx__ic_pend1_om\"}]" ; json:ownedMembership "[{\"@id\":\"Chains__ctx__ic_pend0_om\"},{\"@id\":\"Chains__ctx__ic_pend1_om\"}]" ; json:ownedMember "[{\"@id\":\"Chains__ctx__ic_pend0\"},{\"@id\":\"Chains__ctx__ic_pend1\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"Chains__ctx__ic_pend0_om\"},{\"@id\":\"Chains__ctx__ic_pend1_om\"}]" ; diff --git a/tests/export/testdata/convert/feature_chains_repeated.golden.ttl b/tests/export/testdata/convert/feature_chains_repeated.golden.ttl index 5cd70b637e..8b4bddba83 100644 --- a/tests/export/testdata/convert/feature_chains_repeated.golden.ttl +++ b/tests/export/testdata/convert/feature_chains_repeated.golden.ttl @@ -212,14 +212,14 @@ elmt:P__h sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:P__h__r ; sysml:ownedMembership elmt:P__h__r_om ; - sysml:ownedRelationship elmt:P__h__r_om, elmt:P__h_ft0 ; + sysml:ownedRelationship elmt:P__h_ft0, elmt:P__h__r_om ; sysml:ownedFeature elmt:P__h__r ; sysml:ownedFeatureMembership elmt:P__h__r_om ; sysml:ownedTyping elmt:P__h_ft0 ; sysml:ownedSpecialization elmt:P__h_ft0 ; sysx:sourceText " part h : H {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"P__h__r_om\"},{\"@id\":\"P__h_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"P__h_ft0\"},{\"@id\":\"P__h__r_om\"}]" . elmt:P__h_om a sysml:OwningMembership ; diff --git a/tests/export/testdata/convert/feature_prefixes.golden.ttl b/tests/export/testdata/convert/feature_prefixes.golden.ttl index ce78be2cc2..edaff58158 100644 --- a/tests/export/testdata/convert/feature_prefixes.golden.ttl +++ b/tests/export/testdata/convert/feature_prefixes.golden.ttl @@ -259,7 +259,7 @@ elmt:FeaturePrefixes__B__slices sysml:type elmt:FeaturePrefixes__A ; sysml:subsets elmt:FeaturePrefixes__B__p ; sysml:multiplicity expr:FeaturePrefixes__B__slices_pmultiplicity ; - sysml:ownedRelationship expr:FeaturePrefixes__B__slices_pmultiplicity_om, elmt:FeaturePrefixes__B__slices_ft0, elmt:FeaturePrefixes__B__slices_ss0 ; + sysml:ownedRelationship elmt:FeaturePrefixes__B__slices_ft0, expr:FeaturePrefixes__B__slices_pmultiplicity_om, elmt:FeaturePrefixes__B__slices_ss0 ; sysml:ownedMembership expr:FeaturePrefixes__B__slices_pmultiplicity_om ; sysml:lowerBound expr:FeaturePrefixes__B__slices_plowerBound ; sysml:upperBound expr:FeaturePrefixes__B__slices_pupperBound ; @@ -268,7 +268,7 @@ elmt:FeaturePrefixes__B__slices sysml:ownedSpecialization elmt:FeaturePrefixes__B__slices_ft0, elmt:FeaturePrefixes__B__slices_ss0 ; sysml:ownedSubsetting elmt:FeaturePrefixes__B__slices_ss0 ; sysx:sourceText " portion feature all slices : A[1..*] subsets p;\n" ; - json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__B__slices_pmultiplicity_om\"},{\"@id\":\"FeaturePrefixes__B__slices_ft0\"},{\"@id\":\"FeaturePrefixes__B__slices_ss0\"}]" ; + json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__B__slices_ft0\"},{\"@id\":\"FeaturePrefixes__B__slices_pmultiplicity_om\"},{\"@id\":\"FeaturePrefixes__B__slices_ss0\"}]" ; json:ownedSpecialization "[{\"@id\":\"FeaturePrefixes__B__slices_ft0\"},{\"@id\":\"FeaturePrefixes__B__slices_ss0\"}]" . elmt:FeaturePrefixes__B__slices_om @@ -364,7 +364,7 @@ elmt:FeaturePrefixes__C sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:FeaturePrefixes__C__p, elmt:FeaturePrefixes__C__pv, elmt:FeaturePrefixes__C__dk ; sysml:ownedMembership elmt:FeaturePrefixes__C__p_om, elmt:FeaturePrefixes__C__pv_om, elmt:FeaturePrefixes__C__dk_om ; - sysml:ownedRelationship elmt:FeaturePrefixes__C__p_om, elmt:FeaturePrefixes__C__pv_om, elmt:FeaturePrefixes__C__dk_om, elmt:FeaturePrefixes__C_sp0 ; + sysml:ownedRelationship elmt:FeaturePrefixes__C_sp0, elmt:FeaturePrefixes__C__p_om, elmt:FeaturePrefixes__C__pv_om, elmt:FeaturePrefixes__C__dk_om ; sysml:ownedFeature elmt:FeaturePrefixes__C__p, elmt:FeaturePrefixes__C__pv, elmt:FeaturePrefixes__C__dk ; sysml:ownedFeatureMembership elmt:FeaturePrefixes__C__p_om, elmt:FeaturePrefixes__C__pv_om, elmt:FeaturePrefixes__C__dk_om ; sysml:ownedSpecialization elmt:FeaturePrefixes__C_sp0 ; @@ -372,7 +372,7 @@ elmt:FeaturePrefixes__C sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"FeaturePrefixes__C__p\"},{\"@id\":\"FeaturePrefixes__C__pv\"},{\"@id\":\"FeaturePrefixes__C__dk\"}]" ; json:ownedMembership "[{\"@id\":\"FeaturePrefixes__C__p_om\"},{\"@id\":\"FeaturePrefixes__C__pv_om\"},{\"@id\":\"FeaturePrefixes__C__dk_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__C__p_om\"},{\"@id\":\"FeaturePrefixes__C__pv_om\"},{\"@id\":\"FeaturePrefixes__C__dk_om\"},{\"@id\":\"FeaturePrefixes__C_sp0\"}]" ; + json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__C_sp0\"},{\"@id\":\"FeaturePrefixes__C__p_om\"},{\"@id\":\"FeaturePrefixes__C__pv_om\"},{\"@id\":\"FeaturePrefixes__C__dk_om\"}]" ; json:ownedFeature "[{\"@id\":\"FeaturePrefixes__C__p\"},{\"@id\":\"FeaturePrefixes__C__pv\"},{\"@id\":\"FeaturePrefixes__C__dk\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"FeaturePrefixes__C__p_om\"},{\"@id\":\"FeaturePrefixes__C__pv_om\"},{\"@id\":\"FeaturePrefixes__C__dk_om\"}]" . @@ -405,7 +405,7 @@ elmt:FeaturePrefixes__C__p sysml:isPortion "true"^^xsd:boolean ; sysml:redefines elmt:FeaturePrefixes__B__p ; sysml:multiplicity expr:FeaturePrefixes__C__p_pmultiplicity ; - sysml:ownedRelationship expr:FeaturePrefixes__C__p_pmultiplicity_om, elmt:FeaturePrefixes__C__p_rd0 ; + sysml:ownedRelationship elmt:FeaturePrefixes__C__p_rd0, expr:FeaturePrefixes__C__p_pmultiplicity_om ; sysml:ownedMembership expr:FeaturePrefixes__C__p_pmultiplicity_om ; sysml:upperBound expr:FeaturePrefixes__C__p_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; @@ -413,7 +413,7 @@ elmt:FeaturePrefixes__C__p sysml:ownedSubsetting elmt:FeaturePrefixes__C__p_rd0 ; sysml:ownedSpecialization elmt:FeaturePrefixes__C__p_rd0 ; sysx:sourceText " portion feature redefines p [1];\n" ; - json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__C__p_pmultiplicity_om\"},{\"@id\":\"FeaturePrefixes__C__p_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__C__p_rd0\"},{\"@id\":\"FeaturePrefixes__C__p_pmultiplicity_om\"}]" . elmt:FeaturePrefixes__C__p_om a sysml:FeatureMembership ; @@ -487,14 +487,14 @@ elmt:FeaturePrefixes__C__pv sysml:isPortion "true"^^xsd:boolean ; sysml:redefines elmt:FeaturePrefixes__B__pv ; sysml:value expr:FeaturePrefixes__C__pv_pvalue ; - sysml:ownedRelationship expr:FeaturePrefixes__C__pv_pvalue_om, elmt:FeaturePrefixes__C__pv_rd0 ; + sysml:ownedRelationship elmt:FeaturePrefixes__C__pv_rd0, expr:FeaturePrefixes__C__pv_pvalue_om ; sysml:ownedMembership expr:FeaturePrefixes__C__pv_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:FeaturePrefixes__C__pv_rd0 ; sysml:ownedSubsetting elmt:FeaturePrefixes__C__pv_rd0 ; sysml:ownedSpecialization elmt:FeaturePrefixes__C__pv_rd0 ; sysx:sourceText " portion redefines pv = p;\n" ; - json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__C__pv_pvalue_om\"},{\"@id\":\"FeaturePrefixes__C__pv_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"FeaturePrefixes__C__pv_rd0\"},{\"@id\":\"FeaturePrefixes__C__pv_pvalue_om\"}]" . elmt:FeaturePrefixes__C__pv_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/imported_references.canonical.golden.sysml b/tests/export/testdata/convert/imported_references.canonical.golden.sysml index c39c30b2e6..4d40af8318 100644 --- a/tests/export/testdata/convert/imported_references.canonical.golden.sysml +++ b/tests/export/testdata/convert/imported_references.canonical.golden.sysml @@ -27,7 +27,7 @@ package R90 { part unresolved : Elsewhere::Missing; } part def B specializes A { - part : Inner::Wheel redefines w; + part redefines w : Inner::Wheel; } part def G1 { part x; diff --git a/tests/export/testdata/convert/imported_references.golden.ttl b/tests/export/testdata/convert/imported_references.golden.ttl index cb1b821e70..fd0e552f32 100644 --- a/tests/export/testdata/convert/imported_references.golden.ttl +++ b/tests/export/testdata/convert/imported_references.golden.ttl @@ -464,13 +464,13 @@ elmt:R90__A__t sysml:declaredName "t" ; sysml:type elmt:OtherPkg__Tempo ; sysml:value expr:R90__A__t_pvalue ; - sysml:ownedRelationship expr:R90__A__t_pvalue_om, elmt:R90__A__t_ft0 ; + sysml:ownedRelationship elmt:R90__A__t_ft0, expr:R90__A__t_pvalue_om ; sysml:ownedMembership expr:R90__A__t_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:R90__A__t_ft0 ; sysml:ownedSpecialization elmt:R90__A__t_ft0 ; sysx:sourceText " attribute t : Tempo = Tempo::operative;\n" ; - json:ownedRelationship "[{\"@id\":\"R90__A__t_pvalue_om\"},{\"@id\":\"R90__A__t_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"R90__A__t_ft0\"},{\"@id\":\"R90__A__t_pvalue_om\"}]" . elmt:R90__A__t_om a sysml:FeatureMembership ; @@ -921,14 +921,14 @@ elmt:R90__B sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:R90__B__w ; sysml:ownedMembership elmt:R90__B__w_om ; - sysml:ownedRelationship elmt:R90__B__w_om, elmt:R90__B_sc0 ; + sysml:ownedRelationship elmt:R90__B_sc0, elmt:R90__B__w_om ; sysml:ownedFeature elmt:R90__B__w ; sysml:ownedFeatureMembership elmt:R90__B__w_om ; sysml:ownedSubclassification elmt:R90__B_sc0 ; sysml:ownedSpecialization elmt:R90__B_sc0 ; sysx:sourceText " part def B :> A {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"R90__B__w_om\"},{\"@id\":\"R90__B_sc0\"}]" . + json:ownedRelationship "[{\"@id\":\"R90__B_sc0\"},{\"@id\":\"R90__B__w_om\"}]" . elmt:R90__B_om a sysml:OwningMembership ; @@ -958,14 +958,14 @@ elmt:R90__B__w sysml:type elmt:OtherPkg__Inner__Wheel ; sysml:redefines elmt:R90__A__w ; sysx:hasBody "false"^^xsd:boolean ; - sysml:ownedTyping elmt:R90__B__w_ft0 ; - sysml:ownedSpecialization elmt:R90__B__w_ft0, elmt:R90__B__w_rd0 ; - sysml:ownedRelationship elmt:R90__B__w_ft0, elmt:R90__B__w_rd0 ; sysml:ownedRedefinition elmt:R90__B__w_rd0 ; sysml:ownedSubsetting elmt:R90__B__w_rd0 ; + sysml:ownedSpecialization elmt:R90__B__w_rd0, elmt:R90__B__w_ft0 ; + sysml:ownedRelationship elmt:R90__B__w_rd0, elmt:R90__B__w_ft0 ; + sysml:ownedTyping elmt:R90__B__w_ft0 ; sysx:sourceText " part :>> w : Inner::Wheel;\n" ; - json:ownedSpecialization "[{\"@id\":\"R90__B__w_ft0\"},{\"@id\":\"R90__B__w_rd0\"}]" ; - json:ownedRelationship "[{\"@id\":\"R90__B__w_ft0\"},{\"@id\":\"R90__B__w_rd0\"}]" . + json:ownedSpecialization "[{\"@id\":\"R90__B__w_rd0\"},{\"@id\":\"R90__B__w_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"R90__B__w_rd0\"},{\"@id\":\"R90__B__w_ft0\"}]" . elmt:R90__B__w_om a sysml:FeatureMembership ; @@ -1123,7 +1123,7 @@ elmt:R90__H sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:R90__H__x ; sysml:ownedMembership elmt:R90__H__x_om ; - sysml:ownedRelationship elmt:R90__H__x_om, elmt:R90__H_sc0, elmt:R90__H_sc1 ; + sysml:ownedRelationship elmt:R90__H_sc0, elmt:R90__H_sc1, elmt:R90__H__x_om ; sysml:ownedFeature elmt:R90__H__x ; sysml:ownedFeatureMembership elmt:R90__H__x_om ; sysml:ownedSubclassification elmt:R90__H_sc0, elmt:R90__H_sc1 ; @@ -1131,7 +1131,7 @@ elmt:R90__H sysx:sourceText " part def H :> G1, G2 {\n" ; sysx:sourceTail " }\n" ; json:specializes "[{\"@id\":\"R90__G1\"},{\"@id\":\"R90__G2\"}]" ; - json:ownedRelationship "[{\"@id\":\"R90__H__x_om\"},{\"@id\":\"R90__H_sc0\"},{\"@id\":\"R90__H_sc1\"}]" ; + json:ownedRelationship "[{\"@id\":\"R90__H_sc0\"},{\"@id\":\"R90__H_sc1\"},{\"@id\":\"R90__H__x_om\"}]" ; json:ownedSubclassification "[{\"@id\":\"R90__H_sc0\"},{\"@id\":\"R90__H_sc1\"}]" ; json:ownedSpecialization "[{\"@id\":\"R90__H_sc0\"},{\"@id\":\"R90__H_sc1\"}]" . @@ -2159,21 +2159,6 @@ elmt:R90__B_sc0 sysml:relatedElement elmt:R90__B, elmt:R90__A ; json:relatedElement "[{\"@id\":\"R90__B\"},{\"@id\":\"R90__A\"}]" . -elmt:R90__B__w_ft0 - a sysml:FeatureTyping ; - sysml:elementId "R90__B__w_ft0" ; - sysml:typedFeature elmt:R90__B__w ; - sysml:owningFeature elmt:R90__B__w ; - sysml:specific elmt:R90__B__w ; - sysml:source elmt:R90__B__w ; - sysml:owningRelatedElement elmt:R90__B__w ; - sysml:type elmt:OtherPkg__Inner__Wheel ; - sysml:general elmt:OtherPkg__Inner__Wheel ; - sysml:target elmt:OtherPkg__Inner__Wheel ; - sysml:owner elmt:R90__B__w ; - sysml:relatedElement elmt:R90__B__w, elmt:OtherPkg__Inner__Wheel ; - json:relatedElement "[{\"@id\":\"R90__B__w\"},{\"@id\":\"OtherPkg__Inner__Wheel\"}]" . - elmt:R90__B__w_rd0 a sysml:Redefinition ; sysml:elementId "R90__B__w_rd0" ; @@ -2191,6 +2176,21 @@ elmt:R90__B__w_rd0 sysml:relatedElement elmt:R90__B__w, elmt:R90__A__w ; json:relatedElement "[{\"@id\":\"R90__B__w\"},{\"@id\":\"R90__A__w\"}]" . +elmt:R90__B__w_ft0 + a sysml:FeatureTyping ; + sysml:elementId "R90__B__w_ft0" ; + sysml:typedFeature elmt:R90__B__w ; + sysml:owningFeature elmt:R90__B__w ; + sysml:specific elmt:R90__B__w ; + sysml:source elmt:R90__B__w ; + sysml:owningRelatedElement elmt:R90__B__w ; + sysml:type elmt:OtherPkg__Inner__Wheel ; + sysml:general elmt:OtherPkg__Inner__Wheel ; + sysml:target elmt:OtherPkg__Inner__Wheel ; + sysml:owner elmt:R90__B__w ; + sysml:relatedElement elmt:R90__B__w, elmt:OtherPkg__Inner__Wheel ; + json:relatedElement "[{\"@id\":\"R90__B__w\"},{\"@id\":\"OtherPkg__Inner__Wheel\"}]" . + elmt:R90__H_sc0 a sysml:Subclassification ; sysml:elementId "R90__H_sc0" ; diff --git a/tests/export/testdata/convert/individual_definitions.golden.ttl b/tests/export/testdata/convert/individual_definitions.golden.ttl index d8f70d3d4a..43d1e58711 100644 --- a/tests/export/testdata/convert/individual_definitions.golden.ttl +++ b/tests/export/testdata/convert/individual_definitions.golden.ttl @@ -312,14 +312,14 @@ elmt:IndividualDefinitions__Mission__crew sysml:declaredName "crew" ; sysml:type elmt:IndividualDefinitions__Astronaut ; sysml:multiplicity expr:IndividualDefinitions__Mission__crew_pmultiplicity ; - sysml:ownedRelationship expr:IndividualDefinitions__Mission__crew_pmultiplicity_om, elmt:IndividualDefinitions__Mission__crew_ft0 ; + sysml:ownedRelationship elmt:IndividualDefinitions__Mission__crew_ft0, expr:IndividualDefinitions__Mission__crew_pmultiplicity_om ; sysml:ownedMembership expr:IndividualDefinitions__Mission__crew_pmultiplicity_om ; sysml:upperBound expr:IndividualDefinitions__Mission__crew_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:IndividualDefinitions__Mission__crew_ft0 ; sysml:ownedSpecialization elmt:IndividualDefinitions__Mission__crew_ft0 ; sysx:sourceText "\t\tpart crew : Astronaut[*];\n" ; - json:ownedRelationship "[{\"@id\":\"IndividualDefinitions__Mission__crew_pmultiplicity_om\"},{\"@id\":\"IndividualDefinitions__Mission__crew_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"IndividualDefinitions__Mission__crew_ft0\"},{\"@id\":\"IndividualDefinitions__Mission__crew_pmultiplicity_om\"}]" . elmt:IndividualDefinitions__Mission__crew_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 b/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 index 80f3664897..bba205722c 100644 --- a/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 +++ b/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 0540d288fcc87e21ef4c722bad37f0021b56f49c5004b010da832f82f711e788 bytes 239559 lines 3670 +sha256 dde46987b17482237e2db53d8800ac3272dbdf7f0f53583e069e7e12086e0fc3 bytes 239559 lines 3670 @prefix elmt: . @prefix expr: . @prefix json: . diff --git a/tests/export/testdata/convert/kind_keyword_synonyms.golden.ttl b/tests/export/testdata/convert/kind_keyword_synonyms.golden.ttl index 558d50938b..c1b44a5fd7 100644 --- a/tests/export/testdata/convert/kind_keyword_synonyms.golden.ttl +++ b/tests/export/testdata/convert/kind_keyword_synonyms.golden.ttl @@ -503,14 +503,14 @@ elmt:Synonyms__Vehicle__idling sysml:type elmt:Synonyms__Idle ; sysml:references "idling" ; sysx:hasBody "false"^^xsd:boolean ; - sysml:ownedTyping elmt:Synonyms__Vehicle__idling_ft0 ; - sysml:ownedSpecialization elmt:Synonyms__Vehicle__idling_ft0, elmt:Synonyms__Vehicle__idling_rs ; - sysml:ownedRelationship elmt:Synonyms__Vehicle__idling_ft0, elmt:Synonyms__Vehicle__idling_rs ; sysml:ownedReferenceSubsetting elmt:Synonyms__Vehicle__idling_rs ; sysml:ownedSubsetting elmt:Synonyms__Vehicle__idling_rs ; + sysml:ownedSpecialization elmt:Synonyms__Vehicle__idling_rs, elmt:Synonyms__Vehicle__idling_ft0 ; + sysml:ownedRelationship elmt:Synonyms__Vehicle__idling_rs, elmt:Synonyms__Vehicle__idling_ft0 ; + sysml:ownedTyping elmt:Synonyms__Vehicle__idling_ft0 ; sysx:sourceText " exhibit idling : Idle;\n" ; - json:ownedSpecialization "[{\"@id\":\"Synonyms__Vehicle__idling_ft0\"},{\"@id\":\"Synonyms__Vehicle__idling_rs\"}]" ; - json:ownedRelationship "[{\"@id\":\"Synonyms__Vehicle__idling_ft0\"},{\"@id\":\"Synonyms__Vehicle__idling_rs\"}]" . + json:ownedSpecialization "[{\"@id\":\"Synonyms__Vehicle__idling_rs\"},{\"@id\":\"Synonyms__Vehicle__idling_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Synonyms__Vehicle__idling_rs\"},{\"@id\":\"Synonyms__Vehicle__idling_ft0\"}]" . elmt:Synonyms__Vehicle__idling_om a sysml:FeatureMembership ; @@ -744,21 +744,6 @@ elmt:Synonyms__reading_ft0 sysml:relatedElement elmt:Synonyms__reading, elmt:Synonyms__Temperature ; json:relatedElement "[{\"@id\":\"Synonyms__reading\"},{\"@id\":\"Synonyms__Temperature\"}]" . -elmt:Synonyms__Vehicle__idling_ft0 - a sysml:FeatureTyping ; - sysml:elementId "Synonyms__Vehicle__idling_ft0" ; - sysml:typedFeature elmt:Synonyms__Vehicle__idling ; - sysml:owningFeature elmt:Synonyms__Vehicle__idling ; - sysml:specific elmt:Synonyms__Vehicle__idling ; - sysml:source elmt:Synonyms__Vehicle__idling ; - sysml:owningRelatedElement elmt:Synonyms__Vehicle__idling ; - sysml:type elmt:Synonyms__Idle ; - sysml:general elmt:Synonyms__Idle ; - sysml:target elmt:Synonyms__Idle ; - sysml:owner elmt:Synonyms__Vehicle__idling ; - sysml:relatedElement elmt:Synonyms__Vehicle__idling, elmt:Synonyms__Idle ; - json:relatedElement "[{\"@id\":\"Synonyms__Vehicle__idling\"},{\"@id\":\"Synonyms__Idle\"}]" . - elmt:Synonyms__Vehicle__idling_rs a sysml:ReferenceSubsetting ; sysml:elementId "Synonyms__Vehicle__idling_rs" ; @@ -776,6 +761,21 @@ elmt:Synonyms__Vehicle__idling_rs sysml:relatedElement elmt:Synonyms__Vehicle__idling, "idling" ; json:relatedElement "[{\"@id\":\"Synonyms__Vehicle__idling\"},\"idling\"]" . +elmt:Synonyms__Vehicle__idling_ft0 + a sysml:FeatureTyping ; + sysml:elementId "Synonyms__Vehicle__idling_ft0" ; + sysml:typedFeature elmt:Synonyms__Vehicle__idling ; + sysml:owningFeature elmt:Synonyms__Vehicle__idling ; + sysml:specific elmt:Synonyms__Vehicle__idling ; + sysml:source elmt:Synonyms__Vehicle__idling ; + sysml:owningRelatedElement elmt:Synonyms__Vehicle__idling ; + sysml:type elmt:Synonyms__Idle ; + sysml:general elmt:Synonyms__Idle ; + sysml:target elmt:Synonyms__Idle ; + sysml:owner elmt:Synonyms__Vehicle__idling ; + sysml:relatedElement elmt:Synonyms__Vehicle__idling, elmt:Synonyms__Idle ; + json:relatedElement "[{\"@id\":\"Synonyms__Vehicle__idling\"},{\"@id\":\"Synonyms__Idle\"}]" . + elmt:Synonyms__Vehicle__safe_ft0 a sysml:FeatureTyping ; sysml:elementId "Synonyms__Vehicle__safe_ft0" ; diff --git a/tests/export/testdata/convert/metadata_bodies.golden.ttl b/tests/export/testdata/convert/metadata_bodies.golden.ttl index d044cddfa9..1827900dba 100644 --- a/tests/export/testdata/convert/metadata_bodies.golden.ttl +++ b/tests/export/testdata/convert/metadata_bodies.golden.ttl @@ -323,7 +323,7 @@ elmt:Annotated__car sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Annotated__car__range, elmt:Annotated__car___401, elmt:Annotated__car___402, elmt:Annotated__car__checked, elmt:Annotated__car___404 ; sysml:ownedMembership elmt:Annotated__car__range_om, elmt:Annotated__car___401_om, elmt:Annotated__car___402_om, elmt:Annotated__car__checked_om, elmt:Annotated__car___404_om ; - sysml:ownedRelationship elmt:Annotated__car__range_om, elmt:Annotated__car___401_om, elmt:Annotated__car___402_om, elmt:Annotated__car__checked_om, elmt:Annotated__car___404_om, elmt:Annotated__car_ft0 ; + sysml:ownedRelationship elmt:Annotated__car_ft0, elmt:Annotated__car__range_om, elmt:Annotated__car___401_om, elmt:Annotated__car___402_om, elmt:Annotated__car__checked_om, elmt:Annotated__car___404_om ; sysml:ownedFeature elmt:Annotated__car__range ; sysml:ownedFeatureMembership elmt:Annotated__car__range_om ; sysml:ownedTyping elmt:Annotated__car_ft0 ; @@ -332,7 +332,7 @@ elmt:Annotated__car sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"Annotated__car__range\"},{\"@id\":\"Annotated__car___401\"},{\"@id\":\"Annotated__car___402\"},{\"@id\":\"Annotated__car__checked\"},{\"@id\":\"Annotated__car___404\"}]" ; json:ownedMembership "[{\"@id\":\"Annotated__car__range_om\"},{\"@id\":\"Annotated__car___401_om\"},{\"@id\":\"Annotated__car___402_om\"},{\"@id\":\"Annotated__car__checked_om\"},{\"@id\":\"Annotated__car___404_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"Annotated__car__range_om\"},{\"@id\":\"Annotated__car___401_om\"},{\"@id\":\"Annotated__car___402_om\"},{\"@id\":\"Annotated__car__checked_om\"},{\"@id\":\"Annotated__car___404_om\"},{\"@id\":\"Annotated__car_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car_ft0\"},{\"@id\":\"Annotated__car__range_om\"},{\"@id\":\"Annotated__car___401_om\"},{\"@id\":\"Annotated__car___402_om\"},{\"@id\":\"Annotated__car__checked_om\"},{\"@id\":\"Annotated__car___404_om\"}]" . elmt:Annotated__car_om a sysml:OwningMembership ; @@ -361,13 +361,13 @@ elmt:Annotated__car__range sysml:declaredName "range" ; sysml:type "Real" ; sysml:value expr:Annotated__car__range_pvalue ; - sysml:ownedRelationship expr:Annotated__car__range_pvalue_om, elmt:Annotated__car__range_ft0 ; + sysml:ownedRelationship elmt:Annotated__car__range_ft0, expr:Annotated__car__range_pvalue_om ; sysml:ownedMembership expr:Annotated__car__range_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Annotated__car__range_ft0 ; sysml:ownedSpecialization elmt:Annotated__car__range_ft0 ; sysx:sourceText " attribute range : Real = 500.0;\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated__car__range_pvalue_om\"},{\"@id\":\"Annotated__car__range_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car__range_ft0\"},{\"@id\":\"Annotated__car__range_pvalue_om\"}]" . elmt:Annotated__car__range_om a sysml:FeatureMembership ; @@ -458,13 +458,13 @@ elmt:Annotated__car___401__level sysml:redefines elmt:Annotated__Safety__level ; sysx:isRedefinitionImplicit "true"^^xsd:boolean ; sysml:value expr:Annotated__car___401__level_pvalue ; - sysml:ownedRelationship expr:Annotated__car___401__level_pvalue_om, elmt:Annotated__car___401__level_rd0 ; + sysml:ownedRelationship elmt:Annotated__car___401__level_rd0, expr:Annotated__car___401__level_pvalue_om ; sysml:ownedMembership expr:Annotated__car___401__level_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated__car___401__level_rd0 ; sysml:ownedSubsetting elmt:Annotated__car___401__level_rd0 ; sysml:ownedSpecialization elmt:Annotated__car___401__level_rd0 ; - json:ownedRelationship "[{\"@id\":\"Annotated__car___401__level_pvalue_om\"},{\"@id\":\"Annotated__car___401__level_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car___401__level_rd0\"},{\"@id\":\"Annotated__car___401__level_pvalue_om\"}]" . elmt:Annotated__car___401__level_om a sysml:FeatureMembership ; @@ -560,14 +560,14 @@ elmt:Annotated__car___402__level sysx:isKindImplicit "true"^^xsd:boolean ; sysml:redefines elmt:Annotated__Safety__level ; sysml:value expr:Annotated__car___402__level_pvalue ; - sysml:ownedRelationship expr:Annotated__car___402__level_pvalue_om, elmt:Annotated__car___402__level_rd0 ; + sysml:ownedRelationship elmt:Annotated__car___402__level_rd0, expr:Annotated__car___402__level_pvalue_om ; sysml:ownedMembership expr:Annotated__car___402__level_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated__car___402__level_rd0 ; sysml:ownedSubsetting elmt:Annotated__car___402__level_rd0 ; sysml:ownedSpecialization elmt:Annotated__car___402__level_rd0 ; sysx:sourceText " :>> level = 3;\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated__car___402__level_pvalue_om\"},{\"@id\":\"Annotated__car___402__level_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car___402__level_rd0\"},{\"@id\":\"Annotated__car___402__level_pvalue_om\"}]" . elmt:Annotated__car___402__level_om a sysml:FeatureMembership ; @@ -621,14 +621,14 @@ elmt:Annotated__car___402__reviewer sysml:redefines elmt:Annotated__Safety__reviewer ; sysx:isRedefinitionImplicit "true"^^xsd:boolean ; sysml:value expr:Annotated__car___402__reviewer_pvalue ; - sysml:ownedRelationship expr:Annotated__car___402__reviewer_pvalue_om, elmt:Annotated__car___402__reviewer_rd0 ; + sysml:ownedRelationship elmt:Annotated__car___402__reviewer_rd0, expr:Annotated__car___402__reviewer_pvalue_om ; sysml:ownedMembership expr:Annotated__car___402__reviewer_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated__car___402__reviewer_rd0 ; sysml:ownedSubsetting elmt:Annotated__car___402__reviewer_rd0 ; sysml:ownedSpecialization elmt:Annotated__car___402__reviewer_rd0 ; sysx:sourceText " reviewer = \"ops\";\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated__car___402__reviewer_pvalue_om\"},{\"@id\":\"Annotated__car___402__reviewer_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car___402__reviewer_rd0\"},{\"@id\":\"Annotated__car___402__reviewer_pvalue_om\"}]" . elmt:Annotated__car___402__reviewer_om a sysml:FeatureMembership ; @@ -682,14 +682,14 @@ elmt:Annotated__car___402__isSet sysml:redefines elmt:Annotated__Safety__isSet ; sysx:isRedefinitionImplicit "true"^^xsd:boolean ; sysml:value expr:Annotated__car___402__isSet_pvalue ; - sysml:ownedRelationship expr:Annotated__car___402__isSet_pvalue_om, elmt:Annotated__car___402__isSet_rd0 ; + sysml:ownedRelationship elmt:Annotated__car___402__isSet_rd0, expr:Annotated__car___402__isSet_pvalue_om ; sysml:ownedMembership expr:Annotated__car___402__isSet_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated__car___402__isSet_rd0 ; sysml:ownedSubsetting elmt:Annotated__car___402__isSet_rd0 ; sysml:ownedSpecialization elmt:Annotated__car___402__isSet_rd0 ; sysx:sourceText " isSet = true;\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated__car___402__isSet_pvalue_om\"},{\"@id\":\"Annotated__car___402__isSet_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car___402__isSet_rd0\"},{\"@id\":\"Annotated__car___402__isSet_pvalue_om\"}]" . elmt:Annotated__car___402__isSet_om a sysml:FeatureMembership ; @@ -745,14 +745,14 @@ elmt:Annotated__car___402__audit sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Annotated__car___402__audit__year ; sysml:ownedMembership elmt:Annotated__car___402__audit__year_om ; - sysml:ownedRelationship elmt:Annotated__car___402__audit__year_om, elmt:Annotated__car___402__audit_rd0 ; + sysml:ownedRelationship elmt:Annotated__car___402__audit_rd0, elmt:Annotated__car___402__audit__year_om ; sysml:ownedFeature elmt:Annotated__car___402__audit__year ; sysml:ownedFeatureMembership elmt:Annotated__car___402__audit__year_om ; sysml:ownedRedefinition elmt:Annotated__car___402__audit_rd0 ; sysml:ownedSubsetting elmt:Annotated__car___402__audit_rd0 ; sysml:ownedSpecialization elmt:Annotated__car___402__audit_rd0 ; sysx:sourceText " audit { year = 2026; }\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated__car___402__audit__year_om\"},{\"@id\":\"Annotated__car___402__audit_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car___402__audit_rd0\"},{\"@id\":\"Annotated__car___402__audit__year_om\"}]" . elmt:Annotated__car___402__audit_om a sysml:FeatureMembership ; @@ -784,13 +784,13 @@ elmt:Annotated__car___402__audit__year sysml:redefines elmt:Annotated__Safety__audit__year ; sysx:isRedefinitionImplicit "true"^^xsd:boolean ; sysml:value expr:Annotated__car___402__audit__year_pvalue ; - sysml:ownedRelationship expr:Annotated__car___402__audit__year_pvalue_om, elmt:Annotated__car___402__audit__year_rd0 ; + sysml:ownedRelationship elmt:Annotated__car___402__audit__year_rd0, expr:Annotated__car___402__audit__year_pvalue_om ; sysml:ownedMembership expr:Annotated__car___402__audit__year_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated__car___402__audit__year_rd0 ; sysml:ownedSubsetting elmt:Annotated__car___402__audit__year_rd0 ; sysml:ownedSpecialization elmt:Annotated__car___402__audit__year_rd0 ; - json:ownedRelationship "[{\"@id\":\"Annotated__car___402__audit__year_pvalue_om\"},{\"@id\":\"Annotated__car___402__audit__year_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated__car___402__audit__year_rd0\"},{\"@id\":\"Annotated__car___402__audit__year_pvalue_om\"}]" . elmt:Annotated__car___402__audit__year_om a sysml:FeatureMembership ; @@ -953,14 +953,14 @@ elmt:Annotated___403__level sysml:redefines elmt:Annotated__Safety__level ; sysx:isRedefinitionImplicit "true"^^xsd:boolean ; sysml:value expr:Annotated___403__level_pvalue ; - sysml:ownedRelationship expr:Annotated___403__level_pvalue_om, elmt:Annotated___403__level_rd0 ; + sysml:ownedRelationship elmt:Annotated___403__level_rd0, expr:Annotated___403__level_pvalue_om ; sysml:ownedMembership expr:Annotated___403__level_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated___403__level_rd0 ; sysml:ownedSubsetting elmt:Annotated___403__level_rd0 ; sysml:ownedSpecialization elmt:Annotated___403__level_rd0 ; sysx:sourceText " level = car.range;\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated___403__level_pvalue_om\"},{\"@id\":\"Annotated___403__level_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated___403__level_rd0\"},{\"@id\":\"Annotated___403__level_pvalue_om\"}]" . elmt:Annotated___403__level_om a sysml:FeatureMembership ; @@ -1121,14 +1121,14 @@ elmt:Annotated___403__reviewer sysml:redefines elmt:Annotated__Safety__reviewer ; sysx:isRedefinitionImplicit "true"^^xsd:boolean ; sysml:value expr:Annotated___403__reviewer_pvalue ; - sysml:ownedRelationship expr:Annotated___403__reviewer_pvalue_om, elmt:Annotated___403__reviewer_rd0 ; + sysml:ownedRelationship elmt:Annotated___403__reviewer_rd0, expr:Annotated___403__reviewer_pvalue_om ; sysml:ownedMembership expr:Annotated___403__reviewer_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated___403__reviewer_rd0 ; sysml:ownedSubsetting elmt:Annotated___403__reviewer_rd0 ; sysml:ownedSpecialization elmt:Annotated___403__reviewer_rd0 ; sysx:sourceText " reviewer = Car::mass;\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated___403__reviewer_pvalue_om\"},{\"@id\":\"Annotated___403__reviewer_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated___403__reviewer_rd0\"},{\"@id\":\"Annotated___403__reviewer_pvalue_om\"}]" . elmt:Annotated___403__reviewer_om a sysml:FeatureMembership ; @@ -1276,14 +1276,14 @@ elmt:Annotated___406 sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Annotated___406__level ; sysml:ownedMembership elmt:Annotated___406__level_om ; - sysml:ownedRelationship elmt:Annotated___406__level_om, elmt:Annotated___406_ft0 ; + sysml:ownedRelationship elmt:Annotated___406_ft0, elmt:Annotated___406__level_om ; sysml:ownedFeature elmt:Annotated___406__level ; sysml:ownedFeatureMembership elmt:Annotated___406__level_om ; sysml:ownedTyping elmt:Annotated___406_ft0 ; sysml:ownedSpecialization elmt:Annotated___406_ft0 ; sysx:sourceText " metadata $::Annotated::Safety about Car {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated___406__level_om\"},{\"@id\":\"Annotated___406_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated___406_ft0\"},{\"@id\":\"Annotated___406__level_om\"}]" . elmt:Annotated___406_om a sysml:OwningMembership ; @@ -1313,14 +1313,14 @@ elmt:Annotated___406__level sysml:redefines elmt:Annotated__Safety__level ; sysx:isRedefinitionImplicit "true"^^xsd:boolean ; sysml:value expr:Annotated___406__level_pvalue ; - sysml:ownedRelationship expr:Annotated___406__level_pvalue_om, elmt:Annotated___406__level_rd0 ; + sysml:ownedRelationship elmt:Annotated___406__level_rd0, expr:Annotated___406__level_pvalue_om ; sysml:ownedMembership expr:Annotated___406__level_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedRedefinition elmt:Annotated___406__level_rd0 ; sysml:ownedSubsetting elmt:Annotated___406__level_rd0 ; sysml:ownedSpecialization elmt:Annotated___406__level_rd0 ; sysx:sourceText " level = 4;\n" ; - json:ownedRelationship "[{\"@id\":\"Annotated___406__level_pvalue_om\"},{\"@id\":\"Annotated___406__level_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Annotated___406__level_rd0\"},{\"@id\":\"Annotated___406__level_pvalue_om\"}]" . elmt:Annotated___406__level_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/metadata_prefixes.golden.ttl b/tests/export/testdata/convert/metadata_prefixes.golden.ttl index c66d23dec6..89c9b432ff 100644 --- a/tests/export/testdata/convert/metadata_prefixes.golden.ttl +++ b/tests/export/testdata/convert/metadata_prefixes.golden.ttl @@ -700,7 +700,7 @@ elmt:Prefixed__context sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Prefixed__context__stopped, elmt:Prefixed__context__moving, elmt:Prefixed__context__go ; sysml:ownedMembership elmt:Prefixed__context__stopped_om, elmt:Prefixed__context__moving_om, elmt:Prefixed__context__go_om ; - sysml:ownedRelationship elmt:Prefixed__context__stopped_om, elmt:Prefixed__context__moving_om, elmt:Prefixed__context__go_om, elmt:Prefixed__context_ft0 ; + sysml:ownedRelationship elmt:Prefixed__context_ft0, elmt:Prefixed__context__stopped_om, elmt:Prefixed__context__moving_om, elmt:Prefixed__context__go_om ; sysml:ownedFeature elmt:Prefixed__context__stopped, elmt:Prefixed__context__moving, elmt:Prefixed__context__go ; sysml:ownedFeatureMembership elmt:Prefixed__context__stopped_om, elmt:Prefixed__context__moving_om, elmt:Prefixed__context__go_om ; sysml:ownedTyping elmt:Prefixed__context_ft0 ; @@ -709,7 +709,7 @@ elmt:Prefixed__context sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"Prefixed__context__stopped\"},{\"@id\":\"Prefixed__context__moving\"},{\"@id\":\"Prefixed__context__go\"}]" ; json:ownedMembership "[{\"@id\":\"Prefixed__context__stopped_om\"},{\"@id\":\"Prefixed__context__moving_om\"},{\"@id\":\"Prefixed__context__go_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"Prefixed__context__stopped_om\"},{\"@id\":\"Prefixed__context__moving_om\"},{\"@id\":\"Prefixed__context__go_om\"},{\"@id\":\"Prefixed__context_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Prefixed__context_ft0\"},{\"@id\":\"Prefixed__context__stopped_om\"},{\"@id\":\"Prefixed__context__moving_om\"},{\"@id\":\"Prefixed__context__go_om\"}]" ; json:ownedFeature "[{\"@id\":\"Prefixed__context__stopped\"},{\"@id\":\"Prefixed__context__moving\"},{\"@id\":\"Prefixed__context__go\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"Prefixed__context__stopped_om\"},{\"@id\":\"Prefixed__context__moving_om\"},{\"@id\":\"Prefixed__context__go_om\"}]" . @@ -983,10 +983,10 @@ elmt:Prefixed__Braking__brakes sysml:owningMembership elmt:Prefixed__Braking__brakes_om ; sysml:declaredName "brakes" ; sysml:direction "in" ; - sysml:type elmt:Prefixed__Car ; sysml:ownedMember elmt:Prefixed__Braking__brakes___400 ; sysml:ownedMembership elmt:Prefixed__Braking__brakes___400_om ; sysml:ownedRelationship elmt:Prefixed__Braking__brakes___400_om, elmt:Prefixed__Braking__brakes_ft0 ; + sysml:type elmt:Prefixed__Car ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Prefixed__Braking__brakes_ft0 ; sysml:ownedSpecialization elmt:Prefixed__Braking__brakes_ft0 ; diff --git a/tests/export/testdata/convert/parts.golden.ttl b/tests/export/testdata/convert/parts.golden.ttl index f5c9b230b7..a525a3ad8a 100644 --- a/tests/export/testdata/convert/parts.golden.ttl +++ b/tests/export/testdata/convert/parts.golden.ttl @@ -116,14 +116,14 @@ elmt:Vehicles__Vehicle__engine sysml:declaredName "engine" ; sysml:type elmt:Vehicles__Engine ; sysml:multiplicity expr:Vehicles__Vehicle__engine_pmultiplicity ; - sysml:ownedRelationship expr:Vehicles__Vehicle__engine_pmultiplicity_om, elmt:Vehicles__Vehicle__engine_ft0 ; + sysml:ownedRelationship elmt:Vehicles__Vehicle__engine_ft0, expr:Vehicles__Vehicle__engine_pmultiplicity_om ; sysml:ownedMembership expr:Vehicles__Vehicle__engine_pmultiplicity_om ; sysml:upperBound expr:Vehicles__Vehicle__engine_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Vehicles__Vehicle__engine_ft0 ; sysml:ownedSpecialization elmt:Vehicles__Vehicle__engine_ft0 ; sysx:sourceText " part engine : Engine[1];\n" ; - json:ownedRelationship "[{\"@id\":\"Vehicles__Vehicle__engine_pmultiplicity_om\"},{\"@id\":\"Vehicles__Vehicle__engine_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Vehicles__Vehicle__engine_ft0\"},{\"@id\":\"Vehicles__Vehicle__engine_pmultiplicity_om\"}]" . elmt:Vehicles__Vehicle__engine_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/payload_declaration_bodies.golden.ttl b/tests/export/testdata/convert/payload_declaration_bodies.golden.ttl index bc72d224df..c9afc9431b 100644 --- a/tests/export/testdata/convert/payload_declaration_bodies.golden.ttl +++ b/tests/export/testdata/convert/payload_declaration_bodies.golden.ttl @@ -1016,12 +1016,12 @@ elmt:Payloads__Ctx___404__cmd sysml:declaredName "cmd" ; sysml:type elmt:Payloads__Prio ; sysml:value expr:Payloads__Ctx___404__cmd_pvalue ; - sysml:ownedRelationship expr:Payloads__Ctx___404__cmd_pvalue_om, elmt:Payloads__Ctx___404__cmd_ft0 ; + sysml:ownedRelationship elmt:Payloads__Ctx___404__cmd_ft0, expr:Payloads__Ctx___404__cmd_pvalue_om ; sysml:ownedMembership expr:Payloads__Ctx___404__cmd_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Payloads__Ctx___404__cmd_ft0 ; sysml:ownedSpecialization elmt:Payloads__Ctx___404__cmd_ft0 ; - json:ownedRelationship "[{\"@id\":\"Payloads__Ctx___404__cmd_pvalue_om\"},{\"@id\":\"Payloads__Ctx___404__cmd_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Payloads__Ctx___404__cmd_ft0\"},{\"@id\":\"Payloads__Ctx___404__cmd_pvalue_om\"}]" . elmt:Payloads__Ctx___404__cmd_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/qualified_usages.golden.ttl b/tests/export/testdata/convert/qualified_usages.golden.ttl index cda9aa172b..0ab9b02be7 100644 --- a/tests/export/testdata/convert/qualified_usages.golden.ttl +++ b/tests/export/testdata/convert/qualified_usages.golden.ttl @@ -562,7 +562,7 @@ elmt:Q__ctx sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Q__ctx__sub, elmt:Q__ctx__pa, elmt:Q__ctx__a1, elmt:Q__ctx__sa, elmt:Q__ctx__es, elmt:Q__ctx__s1, elmt:Q__ctx__ss, elmt:Q__ctx__iu, elmt:Q__ctx__u1, elmt:Q__ctx__sr, elmt:Q__ctx___4010, elmt:Q__ctx__ac, elmt:Q__ctx___4012 ; sysml:ownedMembership elmt:Q__ctx__sub_om, elmt:Q__ctx__pa_om, elmt:Q__ctx__a1_om, elmt:Q__ctx__sa_om, elmt:Q__ctx__es_om, elmt:Q__ctx__s1_om, elmt:Q__ctx__ss_om, elmt:Q__ctx__iu_om, elmt:Q__ctx__u1_om, elmt:Q__ctx__sr_om, elmt:Q__ctx___4010_om, elmt:Q__ctx__ac_om, elmt:Q__ctx___4012_om ; - sysml:ownedRelationship elmt:Q__ctx__sub_om, elmt:Q__ctx__pa_om, elmt:Q__ctx__a1_om, elmt:Q__ctx__sa_om, elmt:Q__ctx__es_om, elmt:Q__ctx__s1_om, elmt:Q__ctx__ss_om, elmt:Q__ctx__iu_om, elmt:Q__ctx__u1_om, elmt:Q__ctx__sr_om, elmt:Q__ctx___4010_om, elmt:Q__ctx__ac_om, elmt:Q__ctx___4012_om, elmt:Q__ctx_ft0 ; + sysml:ownedRelationship elmt:Q__ctx_ft0, elmt:Q__ctx__sub_om, elmt:Q__ctx__pa_om, elmt:Q__ctx__a1_om, elmt:Q__ctx__sa_om, elmt:Q__ctx__es_om, elmt:Q__ctx__s1_om, elmt:Q__ctx__ss_om, elmt:Q__ctx__iu_om, elmt:Q__ctx__u1_om, elmt:Q__ctx__sr_om, elmt:Q__ctx___4010_om, elmt:Q__ctx__ac_om, elmt:Q__ctx___4012_om ; sysml:ownedFeature elmt:Q__ctx__sub, elmt:Q__ctx__pa, elmt:Q__ctx__a1, elmt:Q__ctx__sa, elmt:Q__ctx__es, elmt:Q__ctx__s1, elmt:Q__ctx__ss, elmt:Q__ctx__iu, elmt:Q__ctx__u1, elmt:Q__ctx__sr, elmt:Q__ctx___4010, elmt:Q__ctx__ac, elmt:Q__ctx___4012 ; sysml:ownedFeatureMembership elmt:Q__ctx__sub_om, elmt:Q__ctx__pa_om, elmt:Q__ctx__a1_om, elmt:Q__ctx__sa_om, elmt:Q__ctx__es_om, elmt:Q__ctx__s1_om, elmt:Q__ctx__ss_om, elmt:Q__ctx__iu_om, elmt:Q__ctx__u1_om, elmt:Q__ctx__sr_om, elmt:Q__ctx___4010_om, elmt:Q__ctx__ac_om, elmt:Q__ctx___4012_om ; sysml:ownedTyping elmt:Q__ctx_ft0 ; @@ -571,7 +571,7 @@ elmt:Q__ctx sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"Q__ctx__sub\"},{\"@id\":\"Q__ctx__pa\"},{\"@id\":\"Q__ctx__a1\"},{\"@id\":\"Q__ctx__sa\"},{\"@id\":\"Q__ctx__es\"},{\"@id\":\"Q__ctx__s1\"},{\"@id\":\"Q__ctx__ss\"},{\"@id\":\"Q__ctx__iu\"},{\"@id\":\"Q__ctx__u1\"},{\"@id\":\"Q__ctx__sr\"},{\"@id\":\"Q__ctx___4010\"},{\"@id\":\"Q__ctx__ac\"},{\"@id\":\"Q__ctx___4012\"}]" ; json:ownedMembership "[{\"@id\":\"Q__ctx__sub_om\"},{\"@id\":\"Q__ctx__pa_om\"},{\"@id\":\"Q__ctx__a1_om\"},{\"@id\":\"Q__ctx__sa_om\"},{\"@id\":\"Q__ctx__es_om\"},{\"@id\":\"Q__ctx__s1_om\"},{\"@id\":\"Q__ctx__ss_om\"},{\"@id\":\"Q__ctx__iu_om\"},{\"@id\":\"Q__ctx__u1_om\"},{\"@id\":\"Q__ctx__sr_om\"},{\"@id\":\"Q__ctx___4010_om\"},{\"@id\":\"Q__ctx__ac_om\"},{\"@id\":\"Q__ctx___4012_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"Q__ctx__sub_om\"},{\"@id\":\"Q__ctx__pa_om\"},{\"@id\":\"Q__ctx__a1_om\"},{\"@id\":\"Q__ctx__sa_om\"},{\"@id\":\"Q__ctx__es_om\"},{\"@id\":\"Q__ctx__s1_om\"},{\"@id\":\"Q__ctx__ss_om\"},{\"@id\":\"Q__ctx__iu_om\"},{\"@id\":\"Q__ctx__u1_om\"},{\"@id\":\"Q__ctx__sr_om\"},{\"@id\":\"Q__ctx___4010_om\"},{\"@id\":\"Q__ctx__ac_om\"},{\"@id\":\"Q__ctx___4012_om\"},{\"@id\":\"Q__ctx_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Q__ctx_ft0\"},{\"@id\":\"Q__ctx__sub_om\"},{\"@id\":\"Q__ctx__pa_om\"},{\"@id\":\"Q__ctx__a1_om\"},{\"@id\":\"Q__ctx__sa_om\"},{\"@id\":\"Q__ctx__es_om\"},{\"@id\":\"Q__ctx__s1_om\"},{\"@id\":\"Q__ctx__ss_om\"},{\"@id\":\"Q__ctx__iu_om\"},{\"@id\":\"Q__ctx__u1_om\"},{\"@id\":\"Q__ctx__sr_om\"},{\"@id\":\"Q__ctx___4010_om\"},{\"@id\":\"Q__ctx__ac_om\"},{\"@id\":\"Q__ctx___4012_om\"}]" ; json:ownedFeature "[{\"@id\":\"Q__ctx__sub\"},{\"@id\":\"Q__ctx__pa\"},{\"@id\":\"Q__ctx__a1\"},{\"@id\":\"Q__ctx__sa\"},{\"@id\":\"Q__ctx__es\"},{\"@id\":\"Q__ctx__s1\"},{\"@id\":\"Q__ctx__ss\"},{\"@id\":\"Q__ctx__iu\"},{\"@id\":\"Q__ctx__u1\"},{\"@id\":\"Q__ctx__sr\"},{\"@id\":\"Q__ctx___4010\"},{\"@id\":\"Q__ctx__ac\"},{\"@id\":\"Q__ctx___4012\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"Q__ctx__sub_om\"},{\"@id\":\"Q__ctx__pa_om\"},{\"@id\":\"Q__ctx__a1_om\"},{\"@id\":\"Q__ctx__sa_om\"},{\"@id\":\"Q__ctx__es_om\"},{\"@id\":\"Q__ctx__s1_om\"},{\"@id\":\"Q__ctx__ss_om\"},{\"@id\":\"Q__ctx__iu_om\"},{\"@id\":\"Q__ctx__u1_om\"},{\"@id\":\"Q__ctx__sr_om\"},{\"@id\":\"Q__ctx___4010_om\"},{\"@id\":\"Q__ctx__ac_om\"},{\"@id\":\"Q__ctx___4012_om\"}]" . @@ -709,15 +709,15 @@ elmt:Q__ctx__sa sysml:redefines elmt:Q__Ctx__a2 ; sysml:references ; sysx:hasBody "false"^^xsd:boolean ; - sysml:ownedRedefinition elmt:Q__ctx__sa_rd0 ; - sysml:ownedSubsetting elmt:Q__ctx__sa_rd0, elmt:Q__ctx__sa_rs ; - sysml:ownedSpecialization elmt:Q__ctx__sa_rd0, elmt:Q__ctx__sa_rs ; - sysml:ownedRelationship elmt:Q__ctx__sa_rd0, elmt:Q__ctx__sa_rs ; sysml:ownedReferenceSubsetting elmt:Q__ctx__sa_rs ; + sysml:ownedSubsetting elmt:Q__ctx__sa_rs, elmt:Q__ctx__sa_rd0 ; + sysml:ownedSpecialization elmt:Q__ctx__sa_rs, elmt:Q__ctx__sa_rd0 ; + sysml:ownedRelationship elmt:Q__ctx__sa_rs, elmt:Q__ctx__sa_rd0 ; + sysml:ownedRedefinition elmt:Q__ctx__sa_rd0 ; sysx:sourceText " perform sub.sa :>> a2;\n" ; - json:ownedSubsetting "[{\"@id\":\"Q__ctx__sa_rd0\"},{\"@id\":\"Q__ctx__sa_rs\"}]" ; - json:ownedSpecialization "[{\"@id\":\"Q__ctx__sa_rd0\"},{\"@id\":\"Q__ctx__sa_rs\"}]" ; - json:ownedRelationship "[{\"@id\":\"Q__ctx__sa_rd0\"},{\"@id\":\"Q__ctx__sa_rs\"}]" . + json:ownedSubsetting "[{\"@id\":\"Q__ctx__sa_rs\"},{\"@id\":\"Q__ctx__sa_rd0\"}]" ; + json:ownedSpecialization "[{\"@id\":\"Q__ctx__sa_rs\"},{\"@id\":\"Q__ctx__sa_rd0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Q__ctx__sa_rs\"},{\"@id\":\"Q__ctx__sa_rd0\"}]" . elmt:Q__ctx__sa_om a sysml:FeatureMembership ; @@ -858,15 +858,15 @@ elmt:Q__ctx__ss sysml:redefines elmt:Q__Ctx__s2 ; sysml:references ; sysx:hasBody "false"^^xsd:boolean ; - sysml:ownedRedefinition elmt:Q__ctx__ss_rd0 ; - sysml:ownedSubsetting elmt:Q__ctx__ss_rd0, elmt:Q__ctx__ss_rs ; - sysml:ownedSpecialization elmt:Q__ctx__ss_rd0, elmt:Q__ctx__ss_rs ; - sysml:ownedRelationship elmt:Q__ctx__ss_rd0, elmt:Q__ctx__ss_rs ; sysml:ownedReferenceSubsetting elmt:Q__ctx__ss_rs ; + sysml:ownedSubsetting elmt:Q__ctx__ss_rs, elmt:Q__ctx__ss_rd0 ; + sysml:ownedSpecialization elmt:Q__ctx__ss_rs, elmt:Q__ctx__ss_rd0 ; + sysml:ownedRelationship elmt:Q__ctx__ss_rs, elmt:Q__ctx__ss_rd0 ; + sysml:ownedRedefinition elmt:Q__ctx__ss_rd0 ; sysx:sourceText " exhibit sub.ss :>> s2;\n" ; - json:ownedSubsetting "[{\"@id\":\"Q__ctx__ss_rd0\"},{\"@id\":\"Q__ctx__ss_rs\"}]" ; - json:ownedSpecialization "[{\"@id\":\"Q__ctx__ss_rd0\"},{\"@id\":\"Q__ctx__ss_rs\"}]" ; - json:ownedRelationship "[{\"@id\":\"Q__ctx__ss_rd0\"},{\"@id\":\"Q__ctx__ss_rs\"}]" . + json:ownedSubsetting "[{\"@id\":\"Q__ctx__ss_rs\"},{\"@id\":\"Q__ctx__ss_rd0\"}]" ; + json:ownedSpecialization "[{\"@id\":\"Q__ctx__ss_rs\"},{\"@id\":\"Q__ctx__ss_rd0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Q__ctx__ss_rs\"},{\"@id\":\"Q__ctx__ss_rd0\"}]" . elmt:Q__ctx__ss_om a sysml:FeatureMembership ; @@ -1322,23 +1322,6 @@ elmt:Q__ctx__a1_rs sysml:relatedElement elmt:Q__ctx__a1, elmt:Q__Ctx__a1 ; json:relatedElement "[{\"@id\":\"Q__ctx__a1\"},{\"@id\":\"Q__Ctx__a1\"}]" . -elmt:Q__ctx__sa_rd0 - a sysml:Redefinition ; - sysml:elementId "Q__ctx__sa_rd0" ; - sysml:redefiningFeature elmt:Q__ctx__sa ; - sysml:subsettingFeature elmt:Q__ctx__sa ; - sysml:owningFeature elmt:Q__ctx__sa ; - sysml:specific elmt:Q__ctx__sa ; - sysml:source elmt:Q__ctx__sa ; - sysml:owningRelatedElement elmt:Q__ctx__sa ; - sysml:redefinedFeature elmt:Q__Ctx__a2 ; - sysml:subsettedFeature elmt:Q__Ctx__a2 ; - sysml:general elmt:Q__Ctx__a2 ; - sysml:target elmt:Q__Ctx__a2 ; - sysml:owner elmt:Q__ctx__sa ; - sysml:relatedElement elmt:Q__ctx__sa, elmt:Q__Ctx__a2 ; - json:relatedElement "[{\"@id\":\"Q__ctx__sa\"},{\"@id\":\"Q__Ctx__a2\"}]" . - elmt:Q__ctx__sa_rs a sysml:ReferenceSubsetting ; sysml:elementId "Q__ctx__sa_rs" ; @@ -1357,6 +1340,23 @@ elmt:Q__ctx__sa_rs sysml:ownedRelatedElement ; json:relatedElement "[{\"@id\":\"Q__ctx__sa\"},{\"@id\":\"Q__ctx__sa_pchain0\"}]" . +elmt:Q__ctx__sa_rd0 + a sysml:Redefinition ; + sysml:elementId "Q__ctx__sa_rd0" ; + sysml:redefiningFeature elmt:Q__ctx__sa ; + sysml:subsettingFeature elmt:Q__ctx__sa ; + sysml:owningFeature elmt:Q__ctx__sa ; + sysml:specific elmt:Q__ctx__sa ; + sysml:source elmt:Q__ctx__sa ; + sysml:owningRelatedElement elmt:Q__ctx__sa ; + sysml:redefinedFeature elmt:Q__Ctx__a2 ; + sysml:subsettedFeature elmt:Q__Ctx__a2 ; + sysml:general elmt:Q__Ctx__a2 ; + sysml:target elmt:Q__Ctx__a2 ; + sysml:owner elmt:Q__ctx__sa ; + sysml:relatedElement elmt:Q__ctx__sa, elmt:Q__Ctx__a2 ; + json:relatedElement "[{\"@id\":\"Q__ctx__sa\"},{\"@id\":\"Q__Ctx__a2\"}]" . + elmt:Q__ctx__es_ft0 a sysml:FeatureTyping ; sysml:elementId "Q__ctx__es_ft0" ; @@ -1389,23 +1389,6 @@ elmt:Q__ctx__s1_rs sysml:relatedElement elmt:Q__ctx__s1, elmt:Q__Ctx__s1 ; json:relatedElement "[{\"@id\":\"Q__ctx__s1\"},{\"@id\":\"Q__Ctx__s1\"}]" . -elmt:Q__ctx__ss_rd0 - a sysml:Redefinition ; - sysml:elementId "Q__ctx__ss_rd0" ; - sysml:redefiningFeature elmt:Q__ctx__ss ; - sysml:subsettingFeature elmt:Q__ctx__ss ; - sysml:owningFeature elmt:Q__ctx__ss ; - sysml:specific elmt:Q__ctx__ss ; - sysml:source elmt:Q__ctx__ss ; - sysml:owningRelatedElement elmt:Q__ctx__ss ; - sysml:redefinedFeature elmt:Q__Ctx__s2 ; - sysml:subsettedFeature elmt:Q__Ctx__s2 ; - sysml:general elmt:Q__Ctx__s2 ; - sysml:target elmt:Q__Ctx__s2 ; - sysml:owner elmt:Q__ctx__ss ; - sysml:relatedElement elmt:Q__ctx__ss, elmt:Q__Ctx__s2 ; - json:relatedElement "[{\"@id\":\"Q__ctx__ss\"},{\"@id\":\"Q__Ctx__s2\"}]" . - elmt:Q__ctx__ss_rs a sysml:ReferenceSubsetting ; sysml:elementId "Q__ctx__ss_rs" ; @@ -1424,6 +1407,23 @@ elmt:Q__ctx__ss_rs sysml:ownedRelatedElement ; json:relatedElement "[{\"@id\":\"Q__ctx__ss\"},{\"@id\":\"Q__ctx__ss_pchain0\"}]" . +elmt:Q__ctx__ss_rd0 + a sysml:Redefinition ; + sysml:elementId "Q__ctx__ss_rd0" ; + sysml:redefiningFeature elmt:Q__ctx__ss ; + sysml:subsettingFeature elmt:Q__ctx__ss ; + sysml:owningFeature elmt:Q__ctx__ss ; + sysml:specific elmt:Q__ctx__ss ; + sysml:source elmt:Q__ctx__ss ; + sysml:owningRelatedElement elmt:Q__ctx__ss ; + sysml:redefinedFeature elmt:Q__Ctx__s2 ; + sysml:subsettedFeature elmt:Q__Ctx__s2 ; + sysml:general elmt:Q__Ctx__s2 ; + sysml:target elmt:Q__Ctx__s2 ; + sysml:owner elmt:Q__ctx__ss ; + sysml:relatedElement elmt:Q__ctx__ss, elmt:Q__Ctx__s2 ; + json:relatedElement "[{\"@id\":\"Q__ctx__ss\"},{\"@id\":\"Q__Ctx__s2\"}]" . + elmt:Q__ctx__iu_ft0 a sysml:FeatureTyping ; sysml:elementId "Q__ctx__iu_ft0" ; diff --git a/tests/export/testdata/convert/ref_subsets.canonical.golden.sysml b/tests/export/testdata/convert/ref_subsets.canonical.golden.sysml index c76cd36840..78eb1ae4a2 100644 --- a/tests/export/testdata/convert/ref_subsets.canonical.golden.sysml +++ b/tests/export/testdata/convert/ref_subsets.canonical.golden.sysml @@ -7,6 +7,6 @@ package ReferenceSubsets { ref spare subsets vehicle_c1; ref 'spare wheel' subsets vehicle_c1; ref fleet[0..*] subsets vehicle_c1; - ref presidentOfCountry : Person[0..1] subsets vehicle_c1; + ref presidentOfCountry[0..1] : Person subsets vehicle_c1; } } diff --git a/tests/export/testdata/convert/relations.golden.ttl b/tests/export/testdata/convert/relations.golden.ttl index 4f8fbc927b..060f0b5c38 100644 --- a/tests/export/testdata/convert/relations.golden.ttl +++ b/tests/export/testdata/convert/relations.golden.ttl @@ -71,14 +71,14 @@ elmt:Relations__Sub sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Relations__Sub__b ; sysml:ownedMembership elmt:Relations__Sub__b_om ; - sysml:ownedRelationship elmt:Relations__Sub__b_om, elmt:Relations__Sub_sc0 ; + sysml:ownedRelationship elmt:Relations__Sub_sc0, elmt:Relations__Sub__b_om ; sysml:ownedFeature elmt:Relations__Sub__b ; sysml:ownedFeatureMembership elmt:Relations__Sub__b_om ; sysml:ownedSubclassification elmt:Relations__Sub_sc0 ; sysml:ownedSpecialization elmt:Relations__Sub_sc0 ; sysx:sourceText " part def Sub specializes Base {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"Relations__Sub__b_om\"},{\"@id\":\"Relations__Sub_sc0\"}]" . + json:ownedRelationship "[{\"@id\":\"Relations__Sub_sc0\"},{\"@id\":\"Relations__Sub__b_om\"}]" . elmt:Relations__Sub_om a sysml:OwningMembership ; @@ -142,7 +142,7 @@ elmt:Relations__Other sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Relations__Other__r, elmt:Relations__Other__s ; sysml:ownedMembership elmt:Relations__Other__r_om, elmt:Relations__Other__s_om ; - sysml:ownedRelationship elmt:Relations__Other__r_om, elmt:Relations__Other__s_om, elmt:Relations__Other_sc0 ; + sysml:ownedRelationship elmt:Relations__Other_sc0, elmt:Relations__Other__r_om, elmt:Relations__Other__s_om ; sysml:ownedFeature elmt:Relations__Other__r, elmt:Relations__Other__s ; sysml:ownedFeatureMembership elmt:Relations__Other__r_om, elmt:Relations__Other__s_om ; sysml:ownedSubclassification elmt:Relations__Other_sc0 ; @@ -151,7 +151,7 @@ elmt:Relations__Other sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"Relations__Other__r\"},{\"@id\":\"Relations__Other__s\"}]" ; json:ownedMembership "[{\"@id\":\"Relations__Other__r_om\"},{\"@id\":\"Relations__Other__s_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"Relations__Other__r_om\"},{\"@id\":\"Relations__Other__s_om\"},{\"@id\":\"Relations__Other_sc0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Relations__Other_sc0\"},{\"@id\":\"Relations__Other__r_om\"},{\"@id\":\"Relations__Other__s_om\"}]" ; json:ownedFeature "[{\"@id\":\"Relations__Other__r\"},{\"@id\":\"Relations__Other__s\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"Relations__Other__r_om\"},{\"@id\":\"Relations__Other__s_om\"}]" . diff --git a/tests/export/testdata/convert/relationship_clause_order.canonical.golden.sysml b/tests/export/testdata/convert/relationship_clause_order.canonical.golden.sysml index 92d3ba5d4c..e9bea364ff 100644 --- a/tests/export/testdata/convert/relationship_clause_order.canonical.golden.sysml +++ b/tests/export/testdata/convert/relationship_clause_order.canonical.golden.sysml @@ -4,12 +4,12 @@ package ClauseOrder { attribute num : Real; } part def Ratio specializes Quantity { - attribute : Real redefines num; + attribute redefines num : Real; } part def Ctx; part def Mission { part context : Ctx; - snapshot groundSystemAtIngress : Ctx subsets context { + snapshot groundSystemAtIngress subsets context : Ctx { } } } diff --git a/tests/export/testdata/convert/relationship_clause_order.golden.ttl b/tests/export/testdata/convert/relationship_clause_order.golden.ttl index a0b40c23f6..0d930daac2 100644 --- a/tests/export/testdata/convert/relationship_clause_order.golden.ttl +++ b/tests/export/testdata/convert/relationship_clause_order.golden.ttl @@ -128,13 +128,13 @@ elmt:ClauseOrder__Ratio sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:ClauseOrder__Ratio__num ; sysml:ownedMembership elmt:ClauseOrder__Ratio__num_om ; - sysml:ownedRelationship elmt:ClauseOrder__Ratio__num_om, elmt:ClauseOrder__Ratio_sc0 ; + sysml:ownedRelationship elmt:ClauseOrder__Ratio_sc0, elmt:ClauseOrder__Ratio__num_om ; sysml:ownedFeature elmt:ClauseOrder__Ratio__num ; sysml:ownedFeatureMembership elmt:ClauseOrder__Ratio__num_om ; sysml:ownedSubclassification elmt:ClauseOrder__Ratio_sc0 ; sysml:ownedSpecialization elmt:ClauseOrder__Ratio_sc0 ; sysx:sourceText " part def Ratio :> Quantity { attribute :>> num : ScalarValues::Real; }\n" ; - json:ownedRelationship "[{\"@id\":\"ClauseOrder__Ratio__num_om\"},{\"@id\":\"ClauseOrder__Ratio_sc0\"}]" . + json:ownedRelationship "[{\"@id\":\"ClauseOrder__Ratio_sc0\"},{\"@id\":\"ClauseOrder__Ratio__num_om\"}]" . elmt:ClauseOrder__Ratio_om a sysml:OwningMembership ; @@ -164,13 +164,13 @@ elmt:ClauseOrder__Ratio__num sysml:type ; sysml:redefines elmt:ClauseOrder__Quantity__num ; sysx:hasBody "false"^^xsd:boolean ; - sysml:ownedTyping elmt:ClauseOrder__Ratio__num_ft0 ; - sysml:ownedSpecialization elmt:ClauseOrder__Ratio__num_ft0, elmt:ClauseOrder__Ratio__num_rd0 ; - sysml:ownedRelationship elmt:ClauseOrder__Ratio__num_ft0, elmt:ClauseOrder__Ratio__num_rd0 ; sysml:ownedRedefinition elmt:ClauseOrder__Ratio__num_rd0 ; sysml:ownedSubsetting elmt:ClauseOrder__Ratio__num_rd0 ; - json:ownedSpecialization "[{\"@id\":\"ClauseOrder__Ratio__num_ft0\"},{\"@id\":\"ClauseOrder__Ratio__num_rd0\"}]" ; - json:ownedRelationship "[{\"@id\":\"ClauseOrder__Ratio__num_ft0\"},{\"@id\":\"ClauseOrder__Ratio__num_rd0\"}]" . + sysml:ownedSpecialization elmt:ClauseOrder__Ratio__num_rd0, elmt:ClauseOrder__Ratio__num_ft0 ; + sysml:ownedRelationship elmt:ClauseOrder__Ratio__num_rd0, elmt:ClauseOrder__Ratio__num_ft0 ; + sysml:ownedTyping elmt:ClauseOrder__Ratio__num_ft0 ; + json:ownedSpecialization "[{\"@id\":\"ClauseOrder__Ratio__num_rd0\"},{\"@id\":\"ClauseOrder__Ratio__num_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"ClauseOrder__Ratio__num_rd0\"},{\"@id\":\"ClauseOrder__Ratio__num_ft0\"}]" . elmt:ClauseOrder__Ratio__num_om a sysml:FeatureMembership ; @@ -304,13 +304,13 @@ elmt:ClauseOrder__Mission__groundSystemAtIngress sysml:type elmt:ClauseOrder__Ctx ; sysml:subsets elmt:ClauseOrder__Mission__context ; sysx:hasBody "true"^^xsd:boolean ; - sysml:ownedTyping elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0 ; - sysml:ownedSpecialization elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0, elmt:ClauseOrder__Mission__groundSystemAtIngress_ss0 ; - sysml:ownedRelationship elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0, elmt:ClauseOrder__Mission__groundSystemAtIngress_ss0 ; sysml:ownedSubsetting elmt:ClauseOrder__Mission__groundSystemAtIngress_ss0 ; + sysml:ownedSpecialization elmt:ClauseOrder__Mission__groundSystemAtIngress_ss0, elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0 ; + sysml:ownedRelationship elmt:ClauseOrder__Mission__groundSystemAtIngress_ss0, elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0 ; + sysml:ownedTyping elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0 ; sysx:sourceText " snapshot groundSystemAtIngress :> context : Ctx { }\n" ; - json:ownedSpecialization "[{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ft0\"},{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ss0\"}]" ; - json:ownedRelationship "[{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ft0\"},{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ss0\"}]" . + json:ownedSpecialization "[{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ss0\"},{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ft0\"}]" ; + json:ownedRelationship "[{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ss0\"},{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress_ft0\"}]" . elmt:ClauseOrder__Mission__groundSystemAtIngress_om a sysml:FeatureMembership ; @@ -354,21 +354,6 @@ elmt:ClauseOrder__Ratio_sc0 sysml:relatedElement elmt:ClauseOrder__Ratio, elmt:ClauseOrder__Quantity ; json:relatedElement "[{\"@id\":\"ClauseOrder__Ratio\"},{\"@id\":\"ClauseOrder__Quantity\"}]" . -elmt:ClauseOrder__Ratio__num_ft0 - a sysml:FeatureTyping ; - sysml:elementId "ClauseOrder__Ratio__num_ft0" ; - sysml:typedFeature elmt:ClauseOrder__Ratio__num ; - sysml:owningFeature elmt:ClauseOrder__Ratio__num ; - sysml:specific elmt:ClauseOrder__Ratio__num ; - sysml:source elmt:ClauseOrder__Ratio__num ; - sysml:owningRelatedElement elmt:ClauseOrder__Ratio__num ; - sysml:type ; - sysml:general ; - sysml:target ; - sysml:owner elmt:ClauseOrder__Ratio__num ; - sysml:relatedElement elmt:ClauseOrder__Ratio__num, ; - json:relatedElement "[{\"@id\":\"ClauseOrder__Ratio__num\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . - elmt:ClauseOrder__Ratio__num_rd0 a sysml:Redefinition ; sysml:elementId "ClauseOrder__Ratio__num_rd0" ; @@ -386,6 +371,21 @@ elmt:ClauseOrder__Ratio__num_rd0 sysml:relatedElement elmt:ClauseOrder__Ratio__num, elmt:ClauseOrder__Quantity__num ; json:relatedElement "[{\"@id\":\"ClauseOrder__Ratio__num\"},{\"@id\":\"ClauseOrder__Quantity__num\"}]" . +elmt:ClauseOrder__Ratio__num_ft0 + a sysml:FeatureTyping ; + sysml:elementId "ClauseOrder__Ratio__num_ft0" ; + sysml:typedFeature elmt:ClauseOrder__Ratio__num ; + sysml:owningFeature elmt:ClauseOrder__Ratio__num ; + sysml:specific elmt:ClauseOrder__Ratio__num ; + sysml:source elmt:ClauseOrder__Ratio__num ; + sysml:owningRelatedElement elmt:ClauseOrder__Ratio__num ; + sysml:type ; + sysml:general ; + sysml:target ; + sysml:owner elmt:ClauseOrder__Ratio__num ; + sysml:relatedElement elmt:ClauseOrder__Ratio__num, ; + json:relatedElement "[{\"@id\":\"ClauseOrder__Ratio__num\"},{\"@id\":\"14c0aa22-5489-59b5-b438-ded26e83ba31\"}]" . + elmt:ClauseOrder__Mission__context_ft0 a sysml:FeatureTyping ; sysml:elementId "ClauseOrder__Mission__context_ft0" ; @@ -401,21 +401,6 @@ elmt:ClauseOrder__Mission__context_ft0 sysml:relatedElement elmt:ClauseOrder__Mission__context, elmt:ClauseOrder__Ctx ; json:relatedElement "[{\"@id\":\"ClauseOrder__Mission__context\"},{\"@id\":\"ClauseOrder__Ctx\"}]" . -elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0 - a sysml:FeatureTyping ; - sysml:elementId "ClauseOrder__Mission__groundSystemAtIngress_ft0" ; - sysml:typedFeature elmt:ClauseOrder__Mission__groundSystemAtIngress ; - sysml:owningFeature elmt:ClauseOrder__Mission__groundSystemAtIngress ; - sysml:specific elmt:ClauseOrder__Mission__groundSystemAtIngress ; - sysml:source elmt:ClauseOrder__Mission__groundSystemAtIngress ; - sysml:owningRelatedElement elmt:ClauseOrder__Mission__groundSystemAtIngress ; - sysml:type elmt:ClauseOrder__Ctx ; - sysml:general elmt:ClauseOrder__Ctx ; - sysml:target elmt:ClauseOrder__Ctx ; - sysml:owner elmt:ClauseOrder__Mission__groundSystemAtIngress ; - sysml:relatedElement elmt:ClauseOrder__Mission__groundSystemAtIngress, elmt:ClauseOrder__Ctx ; - json:relatedElement "[{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress\"},{\"@id\":\"ClauseOrder__Ctx\"}]" . - elmt:ClauseOrder__Mission__groundSystemAtIngress_ss0 a sysml:Subsetting ; sysml:elementId "ClauseOrder__Mission__groundSystemAtIngress_ss0" ; @@ -431,6 +416,21 @@ elmt:ClauseOrder__Mission__groundSystemAtIngress_ss0 sysml:relatedElement elmt:ClauseOrder__Mission__groundSystemAtIngress, elmt:ClauseOrder__Mission__context ; json:relatedElement "[{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress\"},{\"@id\":\"ClauseOrder__Mission__context\"}]" . +elmt:ClauseOrder__Mission__groundSystemAtIngress_ft0 + a sysml:FeatureTyping ; + sysml:elementId "ClauseOrder__Mission__groundSystemAtIngress_ft0" ; + sysml:typedFeature elmt:ClauseOrder__Mission__groundSystemAtIngress ; + sysml:owningFeature elmt:ClauseOrder__Mission__groundSystemAtIngress ; + sysml:specific elmt:ClauseOrder__Mission__groundSystemAtIngress ; + sysml:source elmt:ClauseOrder__Mission__groundSystemAtIngress ; + sysml:owningRelatedElement elmt:ClauseOrder__Mission__groundSystemAtIngress ; + sysml:type elmt:ClauseOrder__Ctx ; + sysml:general elmt:ClauseOrder__Ctx ; + sysml:target elmt:ClauseOrder__Ctx ; + sysml:owner elmt:ClauseOrder__Mission__groundSystemAtIngress ; + sysml:relatedElement elmt:ClauseOrder__Mission__groundSystemAtIngress, elmt:ClauseOrder__Ctx ; + json:relatedElement "[{\"@id\":\"ClauseOrder__Mission__groundSystemAtIngress\"},{\"@id\":\"ClauseOrder__Ctx\"}]" . + a sysml:DataType ; sysml:elementId "14c0aa22-5489-59b5-b438-ded26e83ba31" ; diff --git a/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 b/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 index 291baf154b..fae7aa5167 100644 --- a/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 +++ b/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 e8449182ae0a348bfb5cce258f4f255e2e2a47f29593caac0291343014e6fc7c bytes 411200 lines 7420 +sha256 e4053a63caa5378da7ec7504e737f7e1427725f023763d96b8ff14dccbef6592 bytes 411200 lines 7420 @prefix elmt: . @prefix expr: . @prefix json: . diff --git a/tests/export/testdata/convert/shadowed_references.canonical.golden.sysml b/tests/export/testdata/convert/shadowed_references.canonical.golden.sysml index 4a2089c5c2..6486aee5d0 100644 --- a/tests/export/testdata/convert/shadowed_references.canonical.golden.sysml +++ b/tests/export/testdata/convert/shadowed_references.canonical.golden.sysml @@ -31,7 +31,7 @@ package Shadowing { subject vehicle : Bus; } analysis study : Study { - subject subsets bus redefines vehicle; + subject redefines vehicle subsets bus; } analysis deeper subsets study { attribute load = vehicle.cargo; diff --git a/tests/export/testdata/convert/shadowed_references.golden.ttl b/tests/export/testdata/convert/shadowed_references.golden.ttl index 0a7ebeda25..83a46ec87d 100644 --- a/tests/export/testdata/convert/shadowed_references.golden.ttl +++ b/tests/export/testdata/convert/shadowed_references.golden.ttl @@ -206,7 +206,7 @@ elmt:Shadowing__Thermal_20Packet sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Shadowing__Thermal_20Packet__packet_20data_20field, elmt:Shadowing__Thermal_20Packet__data_20field ; sysml:ownedMembership elmt:Shadowing__Thermal_20Packet__packet_20data_20field_om, elmt:Shadowing__Thermal_20Packet__data_20field_om ; - sysml:ownedRelationship elmt:Shadowing__Thermal_20Packet__packet_20data_20field_om, elmt:Shadowing__Thermal_20Packet__data_20field_om, elmt:Shadowing__Thermal_20Packet_sc0 ; + sysml:ownedRelationship elmt:Shadowing__Thermal_20Packet_sc0, elmt:Shadowing__Thermal_20Packet__packet_20data_20field_om, elmt:Shadowing__Thermal_20Packet__data_20field_om ; sysml:ownedFeature elmt:Shadowing__Thermal_20Packet__packet_20data_20field, elmt:Shadowing__Thermal_20Packet__data_20field ; sysml:ownedFeatureMembership elmt:Shadowing__Thermal_20Packet__packet_20data_20field_om, elmt:Shadowing__Thermal_20Packet__data_20field_om ; sysml:ownedSubclassification elmt:Shadowing__Thermal_20Packet_sc0 ; @@ -215,7 +215,7 @@ elmt:Shadowing__Thermal_20Packet sysx:sourceTail " }\n" ; json:ownedMember "[{\"@id\":\"Shadowing__Thermal_20Packet__packet_20data_20field\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field\"}]" ; json:ownedMembership "[{\"@id\":\"Shadowing__Thermal_20Packet__packet_20data_20field_om\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field_om\"}]" ; - json:ownedRelationship "[{\"@id\":\"Shadowing__Thermal_20Packet__packet_20data_20field_om\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field_om\"},{\"@id\":\"Shadowing__Thermal_20Packet_sc0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Shadowing__Thermal_20Packet_sc0\"},{\"@id\":\"Shadowing__Thermal_20Packet__packet_20data_20field_om\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field_om\"}]" ; json:ownedFeature "[{\"@id\":\"Shadowing__Thermal_20Packet__packet_20data_20field\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field\"}]" ; json:ownedFeatureMembership "[{\"@id\":\"Shadowing__Thermal_20Packet__packet_20data_20field_om\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field_om\"}]" . @@ -283,7 +283,7 @@ elmt:Shadowing__Thermal_20Packet__data_20field sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Shadowing__Thermal_20Packet__data_20field__data_20field ; sysml:ownedMembership elmt:Shadowing__Thermal_20Packet__data_20field__data_20field_om ; - sysml:ownedRelationship elmt:Shadowing__Thermal_20Packet__data_20field__data_20field_om, elmt:Shadowing__Thermal_20Packet__data_20field_rd0 ; + sysml:ownedRelationship elmt:Shadowing__Thermal_20Packet__data_20field_rd0, elmt:Shadowing__Thermal_20Packet__data_20field__data_20field_om ; sysml:ownedFeature elmt:Shadowing__Thermal_20Packet__data_20field__data_20field ; sysml:ownedFeatureMembership elmt:Shadowing__Thermal_20Packet__data_20field__data_20field_om ; sysml:ownedRedefinition elmt:Shadowing__Thermal_20Packet__data_20field_rd0 ; @@ -291,7 +291,7 @@ elmt:Shadowing__Thermal_20Packet__data_20field sysml:ownedSpecialization elmt:Shadowing__Thermal_20Packet__data_20field_rd0 ; sysx:sourceText " attribute 'data field' :>> Packet::'data field' {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"Shadowing__Thermal_20Packet__data_20field__data_20field_om\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field_rd0\"}]" . + json:ownedRelationship "[{\"@id\":\"Shadowing__Thermal_20Packet__data_20field_rd0\"},{\"@id\":\"Shadowing__Thermal_20Packet__data_20field__data_20field_om\"}]" . elmt:Shadowing__Thermal_20Packet__data_20field_om a sysml:FeatureMembership ; @@ -819,14 +819,14 @@ elmt:Shadowing__Bus__budgeted sysx:declaredPrefix "assert" ; sysml:type elmt:Shadowing__Budget ; sysml:subject elmt:Shadowing__Bus__payload ; - sysml:ownedRelationship elmt:Shadowing__Bus__budgeted_subject_om, elmt:Shadowing__Bus__budgeted_ft0 ; + sysml:ownedRelationship elmt:Shadowing__Bus__budgeted_ft0, elmt:Shadowing__Bus__budgeted_subject_om ; sysml:ownedMember elmt:Shadowing__Bus__budgeted_subject ; sysml:ownedMembership elmt:Shadowing__Bus__budgeted_subject_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Shadowing__Bus__budgeted_ft0 ; sysml:ownedSpecialization elmt:Shadowing__Bus__budgeted_ft0 ; sysx:sourceText " assert satisfy requirement budgeted : Shadowing::Budget by payload;\n" ; - json:ownedRelationship "[{\"@id\":\"Shadowing__Bus__budgeted_subject_om\"},{\"@id\":\"Shadowing__Bus__budgeted_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Shadowing__Bus__budgeted_ft0\"},{\"@id\":\"Shadowing__Bus__budgeted_subject_om\"}]" . elmt:Shadowing__Bus__budgeted_om a sysml:FeatureMembership ; @@ -991,7 +991,7 @@ elmt:Shadowing___408 sysml:isComposite "false"^^xsd:boolean ; sysml:subsets elmt:Shadowing__budget ; sysml:subject elmt:Shadowing__payload ; - sysml:ownedRelationship elmt:Shadowing___408_subject_om, elmt:Shadowing___408_rs ; + sysml:ownedRelationship elmt:Shadowing___408_rs, elmt:Shadowing___408_subject_om ; sysml:ownedMember elmt:Shadowing___408_subject ; sysml:ownedMembership elmt:Shadowing___408_subject_om ; sysx:endForm "satisfy" ; @@ -1000,7 +1000,7 @@ elmt:Shadowing___408 sysml:ownedSubsetting elmt:Shadowing___408_rs ; sysml:ownedSpecialization elmt:Shadowing___408_rs ; sysx:sourceText " satisfy budget by payload;\n" ; - json:ownedRelationship "[{\"@id\":\"Shadowing___408_subject_om\"},{\"@id\":\"Shadowing___408_rs\"}]" . + json:ownedRelationship "[{\"@id\":\"Shadowing___408_rs\"},{\"@id\":\"Shadowing___408_subject_om\"}]" . elmt:Shadowing___408_om a sysml:OwningMembership ; @@ -1207,14 +1207,14 @@ elmt:Shadowing__study sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Shadowing__study__vehicle ; sysml:ownedMembership elmt:Shadowing__study__vehicle_om ; - sysml:ownedRelationship elmt:Shadowing__study__vehicle_om, elmt:Shadowing__study_ft0 ; + sysml:ownedRelationship elmt:Shadowing__study_ft0, elmt:Shadowing__study__vehicle_om ; sysml:ownedFeature elmt:Shadowing__study__vehicle ; sysml:ownedFeatureMembership elmt:Shadowing__study__vehicle_om ; sysml:ownedTyping elmt:Shadowing__study_ft0 ; sysml:ownedSpecialization elmt:Shadowing__study_ft0 ; sysx:sourceText " analysis study : Study {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"Shadowing__study__vehicle_om\"},{\"@id\":\"Shadowing__study_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Shadowing__study_ft0\"},{\"@id\":\"Shadowing__study__vehicle_om\"}]" . elmt:Shadowing__study_om a sysml:OwningMembership ; @@ -1245,14 +1245,14 @@ elmt:Shadowing__study__vehicle sysml:subsets elmt:Shadowing__bus ; sysml:redefines elmt:Shadowing__Study__vehicle ; sysx:hasBody "false"^^xsd:boolean ; - sysml:ownedSubsetting elmt:Shadowing__study__vehicle_ss0, elmt:Shadowing__study__vehicle_rd0 ; - sysml:ownedSpecialization elmt:Shadowing__study__vehicle_ss0, elmt:Shadowing__study__vehicle_rd0 ; - sysml:ownedRelationship elmt:Shadowing__study__vehicle_ss0, elmt:Shadowing__study__vehicle_rd0 ; sysml:ownedRedefinition elmt:Shadowing__study__vehicle_rd0 ; + sysml:ownedSubsetting elmt:Shadowing__study__vehicle_rd0, elmt:Shadowing__study__vehicle_ss0 ; + sysml:ownedSpecialization elmt:Shadowing__study__vehicle_rd0, elmt:Shadowing__study__vehicle_ss0 ; + sysml:ownedRelationship elmt:Shadowing__study__vehicle_rd0, elmt:Shadowing__study__vehicle_ss0 ; sysx:sourceText " subject :>> vehicle :> bus;\n" ; - json:ownedSubsetting "[{\"@id\":\"Shadowing__study__vehicle_ss0\"},{\"@id\":\"Shadowing__study__vehicle_rd0\"}]" ; - json:ownedSpecialization "[{\"@id\":\"Shadowing__study__vehicle_ss0\"},{\"@id\":\"Shadowing__study__vehicle_rd0\"}]" ; - json:ownedRelationship "[{\"@id\":\"Shadowing__study__vehicle_ss0\"},{\"@id\":\"Shadowing__study__vehicle_rd0\"}]" . + json:ownedSubsetting "[{\"@id\":\"Shadowing__study__vehicle_rd0\"},{\"@id\":\"Shadowing__study__vehicle_ss0\"}]" ; + json:ownedSpecialization "[{\"@id\":\"Shadowing__study__vehicle_rd0\"},{\"@id\":\"Shadowing__study__vehicle_ss0\"}]" ; + json:ownedRelationship "[{\"@id\":\"Shadowing__study__vehicle_rd0\"},{\"@id\":\"Shadowing__study__vehicle_ss0\"}]" . elmt:Shadowing__study__vehicle_om a sysml:SubjectMembership ; @@ -1287,14 +1287,14 @@ elmt:Shadowing__deeper sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Shadowing__deeper__load ; sysml:ownedMembership elmt:Shadowing__deeper__load_om ; - sysml:ownedRelationship elmt:Shadowing__deeper__load_om, elmt:Shadowing__deeper_ss0 ; + sysml:ownedRelationship elmt:Shadowing__deeper_ss0, elmt:Shadowing__deeper__load_om ; sysml:ownedFeature elmt:Shadowing__deeper__load ; sysml:ownedFeatureMembership elmt:Shadowing__deeper__load_om ; sysml:ownedSubsetting elmt:Shadowing__deeper_ss0 ; sysml:ownedSpecialization elmt:Shadowing__deeper_ss0 ; sysx:sourceText " analysis deeper :> study {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"Shadowing__deeper__load_om\"},{\"@id\":\"Shadowing__deeper_ss0\"}]" . + json:ownedRelationship "[{\"@id\":\"Shadowing__deeper_ss0\"},{\"@id\":\"Shadowing__deeper__load_om\"}]" . elmt:Shadowing__deeper_om a sysml:OwningMembership ; @@ -2252,21 +2252,6 @@ elmt:Shadowing__study_ft0 sysml:relatedElement elmt:Shadowing__study, elmt:Shadowing__Study ; json:relatedElement "[{\"@id\":\"Shadowing__study\"},{\"@id\":\"Shadowing__Study\"}]" . -elmt:Shadowing__study__vehicle_ss0 - a sysml:Subsetting ; - sysml:elementId "Shadowing__study__vehicle_ss0" ; - sysml:subsettingFeature elmt:Shadowing__study__vehicle ; - sysml:owningFeature elmt:Shadowing__study__vehicle ; - sysml:specific elmt:Shadowing__study__vehicle ; - sysml:source elmt:Shadowing__study__vehicle ; - sysml:owningRelatedElement elmt:Shadowing__study__vehicle ; - sysml:subsettedFeature elmt:Shadowing__bus ; - sysml:general elmt:Shadowing__bus ; - sysml:target elmt:Shadowing__bus ; - sysml:owner elmt:Shadowing__study__vehicle ; - sysml:relatedElement elmt:Shadowing__study__vehicle, elmt:Shadowing__bus ; - json:relatedElement "[{\"@id\":\"Shadowing__study__vehicle\"},{\"@id\":\"Shadowing__bus\"}]" . - elmt:Shadowing__study__vehicle_rd0 a sysml:Redefinition ; sysml:elementId "Shadowing__study__vehicle_rd0" ; @@ -2284,6 +2269,21 @@ elmt:Shadowing__study__vehicle_rd0 sysml:relatedElement elmt:Shadowing__study__vehicle, elmt:Shadowing__Study__vehicle ; json:relatedElement "[{\"@id\":\"Shadowing__study__vehicle\"},{\"@id\":\"Shadowing__Study__vehicle\"}]" . +elmt:Shadowing__study__vehicle_ss0 + a sysml:Subsetting ; + sysml:elementId "Shadowing__study__vehicle_ss0" ; + sysml:subsettingFeature elmt:Shadowing__study__vehicle ; + sysml:owningFeature elmt:Shadowing__study__vehicle ; + sysml:specific elmt:Shadowing__study__vehicle ; + sysml:source elmt:Shadowing__study__vehicle ; + sysml:owningRelatedElement elmt:Shadowing__study__vehicle ; + sysml:subsettedFeature elmt:Shadowing__bus ; + sysml:general elmt:Shadowing__bus ; + sysml:target elmt:Shadowing__bus ; + sysml:owner elmt:Shadowing__study__vehicle ; + sysml:relatedElement elmt:Shadowing__study__vehicle, elmt:Shadowing__bus ; + json:relatedElement "[{\"@id\":\"Shadowing__study__vehicle\"},{\"@id\":\"Shadowing__bus\"}]" . + elmt:Shadowing__deeper_ss0 a sysml:Subsetting ; sysml:elementId "Shadowing__deeper_ss0" ; diff --git a/tests/export/testdata/convert/shadowing_body.golden.ttl b/tests/export/testdata/convert/shadowing_body.golden.ttl index 8232abfc29..a9198a0a49 100644 --- a/tests/export/testdata/convert/shadowing_body.golden.ttl +++ b/tests/export/testdata/convert/shadowing_body.golden.ttl @@ -162,14 +162,14 @@ elmt:ShadowBody__Sensor__readings sysml:declaredName "readings" ; sysml:type elmt:ShadowBody__Speed ; sysml:multiplicity expr:ShadowBody__Sensor__readings_pmultiplicity ; - sysml:ownedRelationship expr:ShadowBody__Sensor__readings_pmultiplicity_om, elmt:ShadowBody__Sensor__readings_ft0 ; + sysml:ownedRelationship elmt:ShadowBody__Sensor__readings_ft0, expr:ShadowBody__Sensor__readings_pmultiplicity_om ; sysml:ownedMembership expr:ShadowBody__Sensor__readings_pmultiplicity_om ; sysml:upperBound expr:ShadowBody__Sensor__readings_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:ShadowBody__Sensor__readings_ft0 ; sysml:ownedSpecialization elmt:ShadowBody__Sensor__readings_ft0 ; sysx:sourceText " attribute readings : Speed[*];\n" ; - json:ownedRelationship "[{\"@id\":\"ShadowBody__Sensor__readings_pmultiplicity_om\"},{\"@id\":\"ShadowBody__Sensor__readings_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"ShadowBody__Sensor__readings_ft0\"},{\"@id\":\"ShadowBody__Sensor__readings_pmultiplicity_om\"}]" . elmt:ShadowBody__Sensor__readings_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/shadowing_parameters.golden.ttl b/tests/export/testdata/convert/shadowing_parameters.golden.ttl index 944e4d1692..e7eaae610e 100644 --- a/tests/export/testdata/convert/shadowing_parameters.golden.ttl +++ b/tests/export/testdata/convert/shadowing_parameters.golden.ttl @@ -111,14 +111,14 @@ elmt:Shadows__Sweep__items sysml:direction "in" ; sysml:type elmt:Shadows__Speed ; sysml:multiplicity expr:Shadows__Sweep__items_pmultiplicity ; - sysml:ownedRelationship expr:Shadows__Sweep__items_pmultiplicity_om, elmt:Shadows__Sweep__items_ft0 ; + sysml:ownedRelationship elmt:Shadows__Sweep__items_ft0, expr:Shadows__Sweep__items_pmultiplicity_om ; sysml:ownedMembership expr:Shadows__Sweep__items_pmultiplicity_om ; sysml:upperBound expr:Shadows__Sweep__items_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Shadows__Sweep__items_ft0 ; sysml:ownedSpecialization elmt:Shadows__Sweep__items_ft0 ; sysx:sourceText " in items : Speed[*];\n" ; - json:ownedRelationship "[{\"@id\":\"Shadows__Sweep__items_pmultiplicity_om\"},{\"@id\":\"Shadows__Sweep__items_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Shadows__Sweep__items_ft0\"},{\"@id\":\"Shadows__Sweep__items_pmultiplicity_om\"}]" . elmt:Shadows__Sweep__items_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/values.golden.ttl b/tests/export/testdata/convert/values.golden.ttl index 82491ab9b2..a67f7c988a 100644 --- a/tests/export/testdata/convert/values.golden.ttl +++ b/tests/export/testdata/convert/values.golden.ttl @@ -230,13 +230,13 @@ elmt:Values__Sized__size sysml:declaredName "size" ; sysml:type "Real" ; sysml:value expr:Values__Sized__size_pvalue ; - sysml:ownedRelationship expr:Values__Sized__size_pvalue_om, elmt:Values__Sized__size_ft0 ; + sysml:ownedRelationship elmt:Values__Sized__size_ft0, expr:Values__Sized__size_pvalue_om ; sysml:ownedMembership expr:Values__Sized__size_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Values__Sized__size_ft0 ; sysml:ownedSpecialization elmt:Values__Sized__size_ft0 ; sysx:sourceText " attribute size : Real = 4.5;\n" ; - json:ownedRelationship "[{\"@id\":\"Values__Sized__size_pvalue_om\"},{\"@id\":\"Values__Sized__size_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Values__Sized__size_ft0\"},{\"@id\":\"Values__Sized__size_pvalue_om\"}]" . elmt:Values__Sized__size_om a sysml:FeatureMembership ; @@ -289,13 +289,13 @@ elmt:Values__Sized__label sysml:declaredName "label" ; sysml:type "String" ; sysml:value expr:Values__Sized__label_pvalue ; - sysml:ownedRelationship expr:Values__Sized__label_pvalue_om, elmt:Values__Sized__label_ft0 ; + sysml:ownedRelationship elmt:Values__Sized__label_ft0, expr:Values__Sized__label_pvalue_om ; sysml:ownedMembership expr:Values__Sized__label_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Values__Sized__label_ft0 ; sysml:ownedSpecialization elmt:Values__Sized__label_ft0 ; sysx:sourceText " attribute label : String = \"front\";\n" ; - json:ownedRelationship "[{\"@id\":\"Values__Sized__label_pvalue_om\"},{\"@id\":\"Values__Sized__label_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Values__Sized__label_ft0\"},{\"@id\":\"Values__Sized__label_pvalue_om\"}]" . elmt:Values__Sized__label_om a sysml:FeatureMembership ; @@ -348,13 +348,13 @@ elmt:Values__Sized__total sysml:declaredName "total" ; sysml:type "Real" ; sysml:value expr:Values__Sized__total_pvalue ; - sysml:ownedRelationship expr:Values__Sized__total_pvalue_om, elmt:Values__Sized__total_ft0 ; + sysml:ownedRelationship elmt:Values__Sized__total_ft0, expr:Values__Sized__total_pvalue_om ; sysml:ownedMembership expr:Values__Sized__total_pvalue_om ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:Values__Sized__total_ft0 ; sysml:ownedSpecialization elmt:Values__Sized__total_ft0 ; sysx:sourceText " attribute total : Real = 1.0 + 2.0;\n" ; - json:ownedRelationship "[{\"@id\":\"Values__Sized__total_pvalue_om\"},{\"@id\":\"Values__Sized__total_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"Values__Sized__total_ft0\"},{\"@id\":\"Values__Sized__total_pvalue_om\"}]" . elmt:Values__Sized__total_om a sysml:FeatureMembership ; diff --git a/tests/export/testdata/convert/view_rendering.golden.ttl b/tests/export/testdata/convert/view_rendering.golden.ttl index a71a9bbb40..54db5cbb24 100644 --- a/tests/export/testdata/convert/view_rendering.golden.ttl +++ b/tests/export/testdata/convert/view_rendering.golden.ttl @@ -274,13 +274,13 @@ elmt:Views__WithBody__tree sysx:hasBody "true"^^xsd:boolean ; sysml:ownedMember elmt:Views__WithBody__tree___400 ; sysml:ownedMembership elmt:Views__WithBody__tree___400_om ; - sysml:ownedRelationship elmt:Views__WithBody__tree___400_om, elmt:Views__WithBody__tree_rs ; + sysml:ownedRelationship elmt:Views__WithBody__tree_rs, elmt:Views__WithBody__tree___400_om ; sysml:ownedReferenceSubsetting elmt:Views__WithBody__tree_rs ; sysml:ownedSubsetting elmt:Views__WithBody__tree_rs ; sysml:ownedSpecialization elmt:Views__WithBody__tree_rs ; sysx:sourceText " render tree {\n" ; sysx:sourceTail " }\n" ; - json:ownedRelationship "[{\"@id\":\"Views__WithBody__tree___400_om\"},{\"@id\":\"Views__WithBody__tree_rs\"}]" . + json:ownedRelationship "[{\"@id\":\"Views__WithBody__tree_rs\"},{\"@id\":\"Views__WithBody__tree___400_om\"}]" . elmt:Views__WithBody__tree_om a sysml:ViewRenderingMembership ; diff --git a/tests/export/testdata/convert/views_flows_parameters.golden.ttl b/tests/export/testdata/convert/views_flows_parameters.golden.ttl index 396e46ee3c..215ca86b8b 100644 --- a/tests/export/testdata/convert/views_flows_parameters.golden.ttl +++ b/tests/export/testdata/convert/views_flows_parameters.golden.ttl @@ -491,14 +491,14 @@ elmt:FlowsAndViews__tanks sysml:isUnique "false"^^xsd:boolean ; sysml:type elmt:FlowsAndViews__Tank ; sysml:multiplicity expr:FlowsAndViews__tanks_pmultiplicity ; - sysml:ownedRelationship expr:FlowsAndViews__tanks_pmultiplicity_om, elmt:FlowsAndViews__tanks_ft0 ; + sysml:ownedRelationship elmt:FlowsAndViews__tanks_ft0, expr:FlowsAndViews__tanks_pmultiplicity_om ; sysml:ownedMembership expr:FlowsAndViews__tanks_pmultiplicity_om ; sysml:upperBound expr:FlowsAndViews__tanks_pupperBound ; sysx:hasBody "false"^^xsd:boolean ; sysml:ownedTyping elmt:FlowsAndViews__tanks_ft0 ; sysml:ownedSpecialization elmt:FlowsAndViews__tanks_ft0 ; sysx:sourceText " part tanks : Tank[*] nonunique;\n" ; - json:ownedRelationship "[{\"@id\":\"FlowsAndViews__tanks_pmultiplicity_om\"},{\"@id\":\"FlowsAndViews__tanks_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"FlowsAndViews__tanks_ft0\"},{\"@id\":\"FlowsAndViews__tanks_pmultiplicity_om\"}]" . elmt:FlowsAndViews__tanks_om a sysml:OwningMembership ; @@ -642,7 +642,7 @@ elmt:FlowsAndViews__vehicle__spares sysml:type elmt:FlowsAndViews__Tank ; sysml:subsets elmt:FlowsAndViews__tanks ; sysml:multiplicity expr:FlowsAndViews__vehicle__spares_pmultiplicity ; - sysml:ownedRelationship expr:FlowsAndViews__vehicle__spares_pmultiplicity_om, elmt:FlowsAndViews__vehicle__spares_ft0, elmt:FlowsAndViews__vehicle__spares_ss0 ; + sysml:ownedRelationship elmt:FlowsAndViews__vehicle__spares_ft0, expr:FlowsAndViews__vehicle__spares_pmultiplicity_om, elmt:FlowsAndViews__vehicle__spares_ss0 ; sysml:ownedMembership expr:FlowsAndViews__vehicle__spares_pmultiplicity_om ; sysml:lowerBound expr:FlowsAndViews__vehicle__spares_plowerBound ; sysml:upperBound expr:FlowsAndViews__vehicle__spares_pupperBound ; @@ -651,7 +651,7 @@ elmt:FlowsAndViews__vehicle__spares sysml:ownedSpecialization elmt:FlowsAndViews__vehicle__spares_ft0, elmt:FlowsAndViews__vehicle__spares_ss0 ; sysml:ownedSubsetting elmt:FlowsAndViews__vehicle__spares_ss0 ; sysx:sourceText " part spares : Tank[0..2] nonunique :> tanks;\n" ; - json:ownedRelationship "[{\"@id\":\"FlowsAndViews__vehicle__spares_pmultiplicity_om\"},{\"@id\":\"FlowsAndViews__vehicle__spares_ft0\"},{\"@id\":\"FlowsAndViews__vehicle__spares_ss0\"}]" ; + json:ownedRelationship "[{\"@id\":\"FlowsAndViews__vehicle__spares_ft0\"},{\"@id\":\"FlowsAndViews__vehicle__spares_pmultiplicity_om\"},{\"@id\":\"FlowsAndViews__vehicle__spares_ss0\"}]" ; json:ownedSpecialization "[{\"@id\":\"FlowsAndViews__vehicle__spares_ft0\"},{\"@id\":\"FlowsAndViews__vehicle__spares_ss0\"}]" . elmt:FlowsAndViews__vehicle__spares_om @@ -1189,12 +1189,12 @@ elmt:FlowsAndViews__vehicleView sysml:declaredName "vehicleView" ; sysml:type elmt:FlowsAndViews__StructureView ; sysx:hasBody "true"^^xsd:boolean ; - sysml:ownedRelationship elmt:FlowsAndViews__vehicleView___400, elmt:FlowsAndViews__vehicleView_ft0 ; + sysml:ownedRelationship elmt:FlowsAndViews__vehicleView_ft0, elmt:FlowsAndViews__vehicleView___400 ; sysml:ownedImport elmt:FlowsAndViews__vehicleView___400 ; sysml:ownedTyping elmt:FlowsAndViews__vehicleView_ft0 ; sysml:ownedSpecialization elmt:FlowsAndViews__vehicleView_ft0 ; sysx:sourceText " view vehicleView : StructureView {\n expose vehicle::**;\n }\n" ; - json:ownedRelationship "[{\"@id\":\"FlowsAndViews__vehicleView___400\"},{\"@id\":\"FlowsAndViews__vehicleView_ft0\"}]" . + json:ownedRelationship "[{\"@id\":\"FlowsAndViews__vehicleView_ft0\"},{\"@id\":\"FlowsAndViews__vehicleView___400\"}]" . elmt:FlowsAndViews__vehicleView_om a sysml:OwningMembership ; From fd7a7df938bb70e60df87b9c37ccb7e4c33bc591 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 00:45:15 +0000 Subject: [PATCH 03/16] test(export): record the default flag's collapse onto the usage in the ontology gate Co-Authored-By: jason.han --- tests/export/testdata/ontology-known-violations.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/export/testdata/ontology-known-violations.txt b/tests/export/testdata/ontology-known-violations.txt index 33b1444bb8..97476a36e6 100644 --- a/tests/export/testdata/ontology-known-violations.txt +++ b/tests/export/testdata/ontology-known-violations.txt @@ -14,6 +14,7 @@ # longer collapse (D3.3 materializes the membership); the rest still do. The # property name is right; the subject should have been the intervening element. domain-mismatch AttributeUsage value # FeatureValue_value: the feature value is written on the usage instead of a FeatureValue membership +domain-mismatch AttributeUsage isDefault # FeatureValue_isDefault: the `default` of a feature value is written on the usage beside the value, the same collapse domain-mismatch ReferenceUsage value # FeatureValue_value: same collapse on a kindless usage's value domain-mismatch AssignmentActionUsage value # FeatureValue_value: same collapse on an assignment's target value domain-mismatch PayloadFeature value # FeatureValue_value: same collapse on a flow payload's value (`message of cmd : P = m.cmd`) From 0e794050d4a1bd876bc2e719b8116c5fe320bec2 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 01:08:30 +0000 Subject: [PATCH 04/16] docs(referee): re-record the api-json differential with a head's owned relationships in notation order Co-Authored-By: jason.han --- .../api-json-differential-baseline.json | 436 +++++++++--------- docs/project/api-json-differential.md | 24 +- 2 files changed, 231 insertions(+), 229 deletions(-) diff --git a/docs/project/api-json-differential-baseline.json b/docs/project/api-json-differential-baseline.json index 4cd4d7221a..807ede4683 100644 --- a/docs/project/api-json-differential-baseline.json +++ b/docs/project/api-json-differential-baseline.json @@ -84,7 +84,7 @@ "digest": "sha256:c399daea865e29d2c056db2746eb3aad94ab26e591cf7669ffcb060583dfee0b" } ], - "recorded": "2026-10-20" + "recorded": "2026-10-21" }, "exporter": "org.omg.sysml.util.traversal.facade.impl.JsonElementProcessingFacade with setIsIncludeDerived(true), each input resource's root elements visited through org.omg.sysml.util.traversal.Traversal, toJsonTree(true) (the path of SysMLInteractive.export, the %export magic), via scripts/pilot-json-exporter/ExportJSON.java", "normalizations": [ @@ -115,8 +115,8 @@ "typeMismatch": 1742 }, "properties": { - "presentEqual": 618674, - "presentDifferent": 50027, + "presentEqual": 623436, + "presentDifferent": 45265, "oursMissing": 1058325, "pilotMissing": 68494, "absentBoth": 2102500, @@ -155,8 +155,8 @@ "typeMismatch": 12 }, "properties": { - "presentEqual": 50135, - "presentDifferent": 4171, + "presentEqual": 50458, + "presentDifferent": 3848, "oursMissing": 86942, "pilotMissing": 5306, "absentBoth": 176892, @@ -190,8 +190,8 @@ "typeMismatch": 61 }, "properties": { - "presentEqual": 180567, - "presentDifferent": 11831, + "presentEqual": 182086, + "presentDifferent": 10312, "oursMissing": 308696, "pilotMissing": 19510, "absentBoth": 615071, @@ -225,8 +225,8 @@ "typeMismatch": 17 }, "properties": { - "presentEqual": 63000, - "presentDifferent": 6100, + "presentEqual": 63503, + "presentDifferent": 5597, "oursMissing": 108814, "pilotMissing": 7092, "absentBoth": 221634, @@ -261,8 +261,8 @@ "typeMismatch": 1032 }, "properties": { - "presentEqual": 43671, - "presentDifferent": 3292, + "presentEqual": 44200, + "presentDifferent": 2763, "oursMissing": 63793, "pilotMissing": 5268, "absentBoth": 117922, @@ -296,8 +296,8 @@ "typeMismatch": 390 }, "properties": { - "presentEqual": 44282, - "presentDifferent": 6034, + "presentEqual": 44526, + "presentDifferent": 5790, "oursMissing": 71586, "pilotMissing": 5182, "absentBoth": 142032, @@ -332,8 +332,8 @@ "typeMismatch": 30 }, "properties": { - "presentEqual": 7820, - "presentDifferent": 393, + "presentEqual": 7878, + "presentDifferent": 335, "oursMissing": 13187, "pilotMissing": 877, "absentBoth": 28133, @@ -368,8 +368,8 @@ "typeMismatch": 200 }, "properties": { - "presentEqual": 181279, - "presentDifferent": 13823, + "presentEqual": 182540, + "presentDifferent": 12562, "oursMissing": 316392, "pilotMissing": 20267, "absentBoth": 636241, @@ -403,8 +403,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 346, - "presentDifferent": 17, + "presentEqual": 348, + "presentDifferent": 15, "oursMissing": 462, "pilotMissing": 43, "absentBoth": 1043, @@ -438,8 +438,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 47574, - "presentDifferent": 4366, + "presentEqual": 47897, + "presentDifferent": 4043, "oursMissing": 88453, "pilotMissing": 4949, "absentBoth": 163532, @@ -1773,8 +1773,8 @@ 0 ], "ActionDefinition.ownedRelationship": [ - 136, - 15, + 147, + 4, 0, 0, 26, @@ -2693,24 +2693,24 @@ 0 ], "ActionUsage.ownedRelationship": [ - 232, - 110, + 330, + 12, 3, 3, 157, 0 ], "ActionUsage.ownedSpecialization": [ - 166, - 3, + 169, + 0, 0, 1, 335, 0 ], "ActionUsage.ownedSubsetting": [ - 40, - 1, + 41, + 0, 0, 0, 464, @@ -3597,8 +3597,8 @@ 0 ], "AllocationDefinition.ownedRelationship": [ - 5, - 2, + 7, + 0, 0, 0, 1, @@ -4541,8 +4541,8 @@ 0 ], "AllocationUsage.ownedRelationship": [ - 3, - 7, + 10, + 0, 0, 0, 0, @@ -5229,8 +5229,8 @@ 0 ], "AnalysisCaseDefinition.ownedRelationship": [ - 20, - 7, + 26, + 1, 0, 0, 3, @@ -6189,16 +6189,16 @@ 0 ], "AnalysisCaseUsage.ownedRelationship": [ - 3, 37, + 3, 0, 0, 1, 0 ], "AnalysisCaseUsage.ownedSpecialization": [ - 25, - 12, + 37, + 0, 0, 0, 4, @@ -7253,24 +7253,24 @@ 0 ], "AssertConstraintUsage.ownedRelationship": [ - 61, - 18, + 79, + 0, 0, 0, 0, 0 ], "AssertConstraintUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 60, 0 ], "AssertConstraintUsage.ownedSubsetting": [ - 8, - 1, + 9, + 0, 0, 0, 70, @@ -9661,8 +9661,8 @@ 0 ], "AttributeDefinition.ownedRelationship": [ - 48, - 61, + 109, + 0, 0, 0, 99, @@ -10573,16 +10573,16 @@ 0 ], "AttributeUsage.ownedRelationship": [ - 113, - 2323, + 1242, + 1194, 36, 0, 19, 0 ], "AttributeUsage.ownedSpecialization": [ - 2298, - 30, + 2328, + 0, 0, 0, 163, @@ -11605,8 +11605,8 @@ 0 ], "BindingConnector.ownedRelationship": [ - 7, - 1, + 8, + 0, 0, 0, 0, @@ -12461,8 +12461,8 @@ 0 ], "BindingConnectorAsUsage.ownedRelationship": [ - 2, - 1, + 3, + 0, 0, 0, 0, @@ -13077,8 +13077,8 @@ 0 ], "BooleanExpression.ownedRelationship": [ - 1, - 3, + 2, + 2, 0, 0, 0, @@ -13709,8 +13709,8 @@ 0 ], "CalculationDefinition.ownedRelationship": [ - 70, - 103, + 172, + 1, 0, 0, 0, @@ -14621,8 +14621,8 @@ 0 ], "CalculationUsage.ownedRelationship": [ - 40, - 74, + 113, + 1, 0, 0, 0, @@ -15309,8 +15309,8 @@ 0 ], "CaseDefinition.ownedRelationship": [ - 1, - 2, + 3, + 0, 0, 0, 0, @@ -16245,9 +16245,9 @@ 0 ], "CaseUsage.ownedRelationship": [ - 0, 2, 0, + 0, 3, 0, 0 @@ -17149,8 +17149,8 @@ 0 ], "Classifier.ownedRelationship": [ - 47, - 18, + 59, + 6, 10, 0, 29, @@ -19413,8 +19413,8 @@ 0 ], "ConcernUsage.ownedRelationship": [ - 15, - 3, + 18, + 0, 0, 0, 3, @@ -21133,8 +21133,8 @@ 0 ], "ConnectionDefinition.ownedRelationship": [ - 36, - 7, + 43, + 0, 0, 0, 0, @@ -22093,8 +22093,8 @@ 0 ], "ConnectionUsage.ownedRelationship": [ - 18, - 61, + 79, + 0, 0, 0, 0, @@ -22757,16 +22757,16 @@ 0 ], "Connector.ownedRelationship": [ - 6, - 30, + 35, + 1, 0, 0, 0, 0 ], "Connector.ownedSpecialization": [ - 25, - 4, + 29, + 0, 0, 0, 7, @@ -23405,8 +23405,8 @@ 0 ], "ConstraintDefinition.ownedRelationship": [ - 24, - 1, + 25, + 0, 0, 0, 1, @@ -24301,8 +24301,8 @@ 0 ], "ConstraintUsage.ownedRelationship": [ - 153, - 17, + 165, + 5, 10, 0, 2, @@ -28221,8 +28221,8 @@ 0 ], "EnumerationDefinition.ownedRelationship": [ - 16, - 8, + 24, + 0, 0, 0, 1, @@ -29069,8 +29069,8 @@ 0 ], "EnumerationUsage.ownedRelationship": [ - 25, - 2, + 27, + 0, 0, 0, 40, @@ -29901,24 +29901,24 @@ 0 ], "EventOccurrenceUsage.ownedRelationship": [ - 40, - 54, + 94, + 0, 0, 0, 85, 0 ], "EventOccurrenceUsage.ownedSpecialization": [ - 49, - 28, + 77, + 0, 0, 0, 102, 0 ], "EventOccurrenceUsage.ownedSubsetting": [ - 53, - 24, + 77, + 0, 0, 0, 102, @@ -30805,24 +30805,24 @@ 0 ], "ExhibitStateUsage.ownedRelationship": [ - 35, - 9, + 41, + 3, 0, 0, 5, 0 ], "ExhibitStateUsage.ownedSpecialization": [ - 19, - 7, + 26, + 0, 0, 0, 23, 0 ], "ExhibitStateUsage.ownedSubsetting": [ - 10, - 7, + 17, + 0, 0, 0, 32, @@ -31429,8 +31429,8 @@ 0 ], "Expression.ownedRelationship": [ - 33, - 6, + 39, + 0, 0, 0, 0, @@ -32093,24 +32093,24 @@ 0 ], "Feature.ownedRelationship": [ - 3670, - 1781, + 4070, + 1381, 124, 88, 4347, 0 ], "Feature.ownedSpecialization": [ - 756, - 130, + 866, + 20, 657, 29, 8438, 0 ], "Feature.ownedSubsetting": [ - 354, - 17, + 363, + 8, 645, 6, 8988, @@ -35477,8 +35477,8 @@ 0 ], "FlowDefinition.ownedRelationship": [ - 3, - 3, + 6, + 0, 0, 0, 1, @@ -36469,16 +36469,16 @@ 0 ], "FlowUsage.ownedRelationship": [ - 37, - 69, + 59, + 47, 0, 0, 0, 0 ], "FlowUsage.ownedSpecialization": [ - 19, - 6, + 25, + 0, 0, 0, 81, @@ -38965,8 +38965,8 @@ 0 ], "Function.ownedRelationship": [ - 10, - 1, + 11, + 0, 0, 0, 0, @@ -40677,24 +40677,24 @@ 0 ], "IncludeUseCaseUsage.ownedRelationship": [ - 7, - 12, + 19, + 0, 0, 0, 0, 0 ], "IncludeUseCaseUsage.ownedSpecialization": [ - 17, - 1, + 18, + 0, 0, 0, 1, 0 ], "IncludeUseCaseUsage.ownedSubsetting": [ - 11, - 1, + 12, + 0, 0, 0, 7, @@ -42365,8 +42365,8 @@ 0 ], "InterfaceDefinition.ownedRelationship": [ - 28, - 3, + 30, + 1, 0, 0, 0, @@ -43333,8 +43333,8 @@ 0 ], "InterfaceUsage.ownedRelationship": [ - 4, 39, + 4, 0, 0, 0, @@ -45133,8 +45133,8 @@ 0 ], "ItemDefinition.ownedRelationship": [ - 55, - 11, + 60, + 6, 0, 0, 101, @@ -46045,16 +46045,16 @@ 0 ], "ItemUsage.ownedRelationship": [ - 36, - 287, + 89, + 234, 33, 0, 10, 0 ], "ItemUsage.ownedSpecialization": [ - 291, - 18, + 307, + 2, 0, 0, 57, @@ -51309,8 +51309,8 @@ 0 ], "Metaclass.ownedRelationship": [ - 4, - 4, + 8, + 0, 0, 0, 2, @@ -52365,8 +52365,8 @@ 0 ], "MetadataDefinition.ownedRelationship": [ - 12, - 6, + 18, + 0, 0, 0, 18, @@ -53781,8 +53781,8 @@ 0 ], "MetadataUsage.ownedRelationship": [ - 262, - 117, + 269, + 110, 0, 0, 0, @@ -56653,8 +56653,8 @@ 0 ], "OccurrenceDefinition.ownedRelationship": [ - 15, - 37, + 17, + 35, 2, 0, 1, @@ -57533,24 +57533,24 @@ 0 ], "OccurrenceUsage.ownedRelationship": [ - 69, - 62, + 114, + 17, 0, 0, 13, 0 ], "OccurrenceUsage.ownedSpecialization": [ - 74, - 12, + 80, + 6, 0, 0, 58, 0 ], "OccurrenceUsage.ownedSubsetting": [ - 17, - 10, + 21, + 6, 0, 0, 117, @@ -59373,8 +59373,8 @@ 0 ], "PartDefinition.ownedRelationship": [ - 423, - 216, + 618, + 21, 1, 0, 279, @@ -60341,24 +60341,24 @@ 0 ], "PartUsage.ownedRelationship": [ - 309, - 1551, + 858, + 1002, 52, 0, 40, 0 ], "PartUsage.ownedSpecialization": [ - 1514, - 37, + 1549, + 2, 0, 0, 401, 0 ], "PartUsage.ownedSubsetting": [ - 359, - 12, + 371, + 0, 2, 0, 1579, @@ -60941,8 +60941,8 @@ 0 ], "PayloadFeature.ownedRelationship": [ - 4, - 1, + 5, + 0, 0, 0, 0, @@ -61773,24 +61773,24 @@ 0 ], "PerformActionUsage.ownedRelationship": [ - 96, - 35, + 129, + 2, 2, 0, 24, 0 ], "PerformActionUsage.ownedSpecialization": [ - 97, - 17, + 114, + 0, 2, 0, 41, 0 ], "PerformActionUsage.ownedSubsetting": [ - 88, - 17, + 105, + 0, 2, 0, 50, @@ -62597,8 +62597,8 @@ 0 ], "PortDefinition.ownedRelationship": [ - 74, - 51, + 77, + 48, 0, 0, 0, @@ -63485,16 +63485,16 @@ 0 ], "PortUsage.ownedRelationship": [ - 20, - 415, + 99, + 336, 30, 1, 2, 0 ], "PortUsage.ownedSpecialization": [ - 412, - 10, + 418, + 4, 0, 1, 45, @@ -65245,24 +65245,24 @@ 0 ], "ReferenceUsage.ownedRelationship": [ - 1255, - 838, + 1939, + 154, 3, 0, 98, 0 ], "ReferenceUsage.ownedSpecialization": [ - 1584, - 75, + 1641, + 18, 70, 0, 465, 0 ], "ReferenceUsage.ownedSubsetting": [ - 742, - 22, + 748, + 16, 72, 0, 1358, @@ -65893,10 +65893,10 @@ 0 ], "RenderingDefinition.ownedRelationship": [ - 0, 1, 0, 0, + 0, 1, 0 ], @@ -66773,8 +66773,8 @@ 0 ], "RenderingUsage.ownedRelationship": [ - 1, - 33, + 4, + 30, 1, 0, 0, @@ -67701,8 +67701,8 @@ 0 ], "RequirementDefinition.ownedRelationship": [ - 84, - 16, + 98, + 2, 0, 0, 9, @@ -68709,16 +68709,16 @@ 0 ], "RequirementUsage.ownedRelationship": [ - 113, - 139, + 243, + 9, 0, 0, 19, 0 ], "RequirementUsage.ownedSpecialization": [ - 161, - 18, + 179, + 0, 0, 0, 92, @@ -70381,16 +70381,16 @@ 0 ], "SatisfyRequirementUsage.ownedRelationship": [ - 11, - 69, + 77, + 3, 0, 0, 0, 0 ], "SatisfyRequirementUsage.ownedSpecialization": [ - 77, - 3, + 78, + 2, 0, 0, 0, @@ -72917,8 +72917,8 @@ 0 ], "StateDefinition.ownedRelationship": [ - 31, - 4, + 35, + 0, 0, 0, 11, @@ -74077,24 +74077,24 @@ 0 ], "StateUsage.ownedRelationship": [ - 80, - 17, + 89, + 8, 1, 0, 208, 0 ], "StateUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 287, 0 ], "StateUsage.ownedSubsetting": [ - 9, - 1, + 10, + 0, 0, 0, 296, @@ -74693,16 +74693,16 @@ 0 ], "Step.ownedRelationship": [ - 25, - 51, + 69, + 7, 0, 0, 2, 0 ], "Step.ownedSpecialization": [ - 49, - 15, + 64, + 0, 0, 0, 14, @@ -76301,16 +76301,16 @@ 0 ], "Succession.ownedRelationship": [ - 15, - 11, + 25, + 1, 0, 0, 0, 0 ], "Succession.ownedSpecialization": [ - 1, 10, + 1, 0, 0, 15, @@ -77181,8 +77181,8 @@ 0 ], "SuccessionAsUsage.ownedRelationship": [ - 10, - 2, + 11, + 1, 0, 0, 0, @@ -82013,8 +82013,8 @@ 0 ], "Type.ownedRelationship": [ - 4, - 37, + 11, + 30, 0, 0, 0, @@ -82949,8 +82949,8 @@ 0 ], "Usage.ownedRelationship": [ - 20, - 10, + 21, + 9, 0, 0, 0, @@ -83621,8 +83621,8 @@ 0 ], "UseCaseDefinition.ownedRelationship": [ - 16, - 2, + 18, + 0, 0, 0, 1, @@ -84581,24 +84581,24 @@ 0 ], "UseCaseUsage.ownedRelationship": [ - 15, - 8, + 23, + 0, 0, 1, 3, 0 ], "UseCaseUsage.ownedSpecialization": [ - 10, - 1, + 11, + 0, 0, 1, 15, 0 ], "UseCaseUsage.ownedSubsetting": [ - 2, - 1, + 3, + 0, 0, 1, 23, @@ -86405,8 +86405,8 @@ 0 ], "VerificationCaseUsage.ownedRelationship": [ - 1, - 41, + 42, + 0, 0, 1, 1, @@ -87053,8 +87053,8 @@ 0 ], "ViewDefinition.ownedRelationship": [ - 6, - 6, + 10, + 2, 0, 1, 3, @@ -88173,8 +88173,8 @@ 0 ], "ViewUsage.ownedRelationship": [ - 33, - 65, + 90, + 8, 0, 0, 0, @@ -89837,8 +89837,8 @@ 0 ], "ViewpointUsage.ownedRelationship": [ - 7, - 2, + 9, + 0, 0, 0, 0, diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index 22914e883f..cd45185693 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -174,7 +174,7 @@ The pinned pilot's verdict on the probe (`validate-sysml-batch`): clean. ## Results (pilot `2026-08`, 920 files) -**Scorecard:** 920 files; 89957 elements matched (28511 ours-only, 38863 pilot-only, 0 of them implied); properties: 618674 present-equal, 50027 present-different, 1058325 ours-missing, 68494 pilot-missing, 2102500 absent-both, 21034 indeterminate. +**Scorecard:** 920 files; 89957 elements matched (28511 ours-only, 38863 pilot-only, 0 of them implied); properties: 623436 present-equal, 45265 present-different, 1058325 ours-missing, 68494 pilot-missing, 2102500 absent-both, 21034 indeterminate. The pilot's export failed on 56 files (`pilotFailed`: its own export throws on an element without a resource, 52 of them specification examples and 4 test fixtures; the files are named in the run's text report), ours refused 36 (all of them specification examples the parser could not read whole), left the pilot's 56 failed files out and converted 24 documents alone for declaring an element another document of their root declares (`oursColliding`); no root fell back to per-document conversion. 11311 (metaclass, property) rows carry a comparison; 103180 references compared through the unkeyed sentinel, 146792 of our `sysx:` annotations were left out, and 289/345 elements (ours/pilot) were dropped for ambiguous keys, 8198/31310 for having none. @@ -198,11 +198,11 @@ The largest **present-different** rows, with the reading the examples support: | metaclass | property | present-equal | present-different | |---|---|---:|---:| -| `AttributeUsage` | `ownedRelationship` | 113 | 2323 | | `FeatureReferenceExpression` | `ownedMembership` | 38 | 2110 | | `FeatureReferenceExpression` | `ownedRelationship` | 38 | 2110 | -| `Feature` | `ownedRelationship` | 3670 | 1781 | -| `PartUsage` | `ownedRelationship` | 309 | 1551 | +| `Feature` | `ownedRelationship` | 4070 | 1381 | +| `AttributeUsage` | `ownedRelationship` | 1242 | 1194 | +| `PartUsage` | `ownedRelationship` | 858 | 1002 | | `FeatureMembership` | `memberElement` | 9181 | 592 | | `FeatureMembership` | `ownedMemberElement` | 9181 | 592 | | `FeatureMembership` | `ownedMemberFeature` | 9181 | 592 | @@ -265,12 +265,14 @@ members too: of their elements falls back to the name as written, and the library element itself is not stated. Every `Element` has an `elementId` (KerML 8.3.2.1.2) and the API's JSON refers to an element by it, so the pilot's reading is the metamodel's; -- the order of `ownedRelationship` on a usage that both redefines and has a value: the pilot lists - the `Redefinition` before the `FeatureValue`, in the order the notation declares them; ours lists - the value first (275 `AttributeUsage`, 97 `ReferenceUsage`, 2 `RenderingUsage`). `ownedRelationship` - is ordered (KerML 8.3.2.1.2 Element, `ownedRelationship : Relationship [0..*] {ordered}`), and the - textual notation adds an element's owned relationships as it parses them, so the pilot's order is - the notation's, a shape the `AttributeUsage` `ownedRelationship` row already carried; +- the order of `ownedRelationship` on a usage that both redefines and has a value: the pilot listed + the `Redefinition` before the `FeatureValue`, in the order the notation declares them, where ours + listed the value first (275 `AttributeUsage`, 97 `ReferenceUsage`, 2 `RenderingUsage`). + `ownedRelationship` is ordered (KerML 8.3.2.1.2 Element, `ownedRelationship : Relationship [0..*] + {ordered}`), and the textual notation adds an element's owned relationships as it parses each + clause (KerML 8.2.1 Table 3, `ownedRelationship += …`), so the pilot's order is the notation's. The + writer now owns a head's relationships in that order (the row below records the re-measurement), + and these sites agree; - a `FeatureReferenceExpression` owns, on the pilot's side, a `Membership` of its referent that ours does not write (74 expressions): `referent` is derived as the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, @@ -333,7 +335,7 @@ The (metaclass, property) rows ranked by the corpus elements on which the pilot | 39 | `FeatureTyping` | `isLibraryElement` | 5912 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | | 40 | `FeatureTyping` | `owningType` | 5908 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | | 41 | `Redefinition` | `redefinedFeature` | 0 | 388 | none found | `Redefinition::redefinedFeature : Feature` (KerML 8.3.3.3.8) is an element reference, and every `Element` carries an `elementId` (KerML 8.3.2.1.2) the API's JSON refers to it by; where the redefined feature is an element of this repository's libraries ours spells the name as written, `{"@ref": "caption"}`, because the writer fixes an id only for elements the pilot's standard-library XMI identifies — the same spelling as `FeatureTyping::type`, `MetadataUsage::type`, `FeatureReferenceExpression::referent` and `ReferenceSubsetting::referencedFeature` into those libraries | -| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 2323 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2) in the order the notation declares them: a usage's `Redefinition` (`redefines x`) before its `FeatureValue` (`= …`); ours lists the value first | +| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1194 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4762 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal (this row 2323 → 1194, `ReferenceUsage` 838 → 154, `PartDefinition` 216 → 21, `PartUsage` 1551 → 1002, `Feature` 1781 → 1381). What remains is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | | 43 | `FeatureReferenceExpression` | `ownedMembership` | 0 | 2110 | none found | `FeatureReferenceExpression::referent` is the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent); the pilot owns that `Membership`, ours writes the `referent` without it | Rows an evaluator rule in PR #1232 (`internal/semantic/metamodel/rules.go`) already names are marked; that PR adds a lazy metamodel evaluator and layers its derived values into the API-JSON writer, so its merge is expected to move those rows from ours-missing to present-equal or present-different, and this referee is how that movement is measured. From 021d1d646c305cbe417713014c71b15f63b1fb96 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 03:05:24 +0000 Subject: [PATCH 05/16] docs(referee): re-record the api-json baseline's writer provenance on the merged tree Co-Authored-By: jason.han --- docs/project/api-json-differential-baseline.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/project/api-json-differential-baseline.json b/docs/project/api-json-differential-baseline.json index e799132820..eccf16ea92 100644 --- a/docs/project/api-json-differential-baseline.json +++ b/docs/project/api-json-differential-baseline.json @@ -14,7 +14,7 @@ { "name": "api-json-writer", "source": "internal/translate/export", - "sourceDigest": "sha256:0f409cf056b724f12c7a19ba55649418cf10a845df23fbea4e3183eb0f604b3a" + "sourceDigest": "sha256:5dedb6579aa8df8486b14026e4b6a978ef69853bad2b7d8f29e3e665d202f981" } ], "inputs": [ From 3ba42fb1bd66fa844d0f5e2b880cf408352508c4 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 04:55:57 +0000 Subject: [PATCH 06/16] fix(export): read a same-target specializes and subsets apart, and place an unplaced multiplicity once Co-Authored-By: jason.han --- internal/translate/export/rdf_in.go | 59 ++++++++++++++++++++++-- tests/export/graph_only_notation_test.go | 39 ++++++++++++++++ 2 files changed, 94 insertions(+), 4 deletions(-) diff --git a/internal/translate/export/rdf_in.go b/internal/translate/export/rdf_in.go index 6b624138ee..9e7ced629f 100644 --- a/internal/translate/export/rdf_in.go +++ b/internal/translate/export/rdf_in.go @@ -4111,8 +4111,10 @@ func (d *decoder) relationshipWords(el *element, multPart string, skip ...ast.Re var words []string clause := func(kind ast.RelationshipKind, names []string) { text := strings.Join(names, ", ") + // A multiplicity no membership places follows the first typing clause. if kind == ast.RelTyping && !placed { text += multPart + placed = true } words = append(words, relationshipSyntax[kind], text) } @@ -4232,21 +4234,70 @@ func (d *decoder) spelledHead(el *element) []headClause { if target.Value == "" { continue } - kinds: + var candidates []headClause for _, kind := range headClauseKinds[metaclass] { for index, object := range objects[kind] { clause := headClause{kind: kind, index: index} if object == target && !taken[clause] { - taken[clause] = true - clauses = append(clauses, clause) - break kinds + candidates = append(candidates, clause) + break } } } + if clause, ok := d.headClauseOf(owned, candidates); ok { + taken[clause] = true + clauses = append(clauses, clause) + } } return clauses } +// headClauseOf picks the clause a relationship element states among the +// candidates its metaclass admits: one candidate is it; between several (a +// feature that both specializes and subsets x owns two Subsettings of x) the +// suffix this writer mints decides, else the kinds' fixed order, which invents +// no order a graph of another writer does not state. +func (d *decoder) headClauseOf(owned rdf.Term, candidates []headClause) (headClause, bool) { + switch len(candidates) { + case 0: + return headClause{}, false + case 1: + return candidates[0], true + } + if kind, ok := mintedRelationshipKind(rdf.LocalName(owned.Value)); ok { + for _, clause := range candidates { + if clause.kind == kind { + return clause, true + } + } + } + for _, kind := range relationshipOrder { + for _, clause := range candidates { + if clause.kind == kind { + return clause, true + } + } + } + return candidates[0], true +} + +// mintedRelationshipSuffixes are the suffixes relationshipSpec mints a +// relationship element's IRI with, by the clause kind they materialize. +var mintedRelationshipSuffixes = map[string]ast.RelationshipKind{ + "_sp": ast.RelSpecializes, "_ss": ast.RelSubsets, "_rs": ast.RelReferences, +} + +// mintedRelationshipKind reads the clause kind off a local name this writer +// minted (`P__f_sp0`), if it carries one of the suffixes. +func mintedRelationshipKind(local string) (ast.RelationshipKind, bool) { + trimmed := strings.TrimRight(local, "0123456789") + if i := strings.LastIndex(trimmed, "_"); i >= 0 { + kind, ok := mintedRelationshipSuffixes[trimmed[i:]] + return kind, ok + } + return 0, false +} + func (d *decoder) multiplicityText(el *element) string { lower, hasLower := d.stringOf(el, rdf.SysML+pLowerBound) upper, hasUpper := d.stringOf(el, rdf.SysML+pUpperBound) diff --git a/tests/export/graph_only_notation_test.go b/tests/export/graph_only_notation_test.go index 2793dc6517..4c040a89a0 100644 --- a/tests/export/graph_only_notation_test.go +++ b/tests/export/graph_only_notation_test.go @@ -1,6 +1,7 @@ package export_test import ( + "bytes" "strings" "testing" @@ -311,3 +312,41 @@ func TestNameFromTheFirstOfSeveralRedefinitionsFromTheGraphAlone(t *testing.T) { "attribute redefines innerSpaceDimension, faces::innerSpaceDimension;", "attribute dim = base.innerSpaceDimension;") } + +// A feature that both specializes and subsets one target owns two Subsettings +// of it; the graph-only hop keeps the order they were spelled in either way +// round, rather than the fixed kind order. +func TestSameTargetSpecializesAndSubsetsKeepTheirSpelledOrder(t *testing.T) { + for _, head := range []string{"specializes x subsets x", "subsets x specializes x"} { + src := "package P {\n\tfeature x;\n\tfeature f " + head + ";\n}\n" + _, back := graphOnlyRoundTrip(t, "m.kerml", []byte(src)) + if want := "feature f " + head + ";"; !strings.Contains(string(back), want) { + t.Errorf("want %q in the notation from the graph alone:\n%s", want, back) + } + } +} + +// A graph that states a head's typings as relationship elements but owns no +// membership for its multiplicity (an older writer's) gets the multiplicity +// written once, with the first typing clause, however the other clauses split +// the typings. +func TestUnplacedMultiplicityIsWrittenOnceAcrossSplitTypings(t *testing.T) { + src := "package P {\n\tpart def A;\n\tpart def B;\n\tpart x;\n\tpart p : A :> x : B [2];\n}\n" + turtle, err := convert.Convert("m.sysml", []byte(src), convert.FormatSysML, convert.FormatTurtle) + if err != nil { + t.Fatalf("to turtle: %v", err) + } + stripped := withoutLayout(t, turtle) + legacy := bytes.ReplaceAll(stripped, []byte("elmt:P__p_ft1, expr:P__p_pmultiplicity_om ;"), []byte("elmt:P__p_ft1 ;")) + legacy = bytes.ReplaceAll(legacy, []byte(`{\"@id\":\"P__p_ft1\"},{\"@id\":\"P__p_pmultiplicity_om\"}]`), []byte(`{\"@id\":\"P__p_ft1\"}]`)) + if bytes.Equal(legacy, stripped) { + t.Fatalf("the multiplicity's membership was not where expected in\n%s", stripped) + } + back, err := convert.Convert("m.ttl", legacy, convert.FormatTurtle, convert.FormatSysML) + if err != nil { + t.Fatalf("back to notation from the graph alone: %v", err) + } + if want := "part p : A[2] subsets x : B;"; !strings.Contains(string(back), want) { + t.Errorf("want %q in the notation from the graph alone:\n%s", want, back) + } +} From 58f12ac914f461727477297338ecd9af13d9630c Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 05:05:17 +0000 Subject: [PATCH 07/16] fix(export): state the keyword of a same-target head clause as a fact the reader keeps under any id form Co-Authored-By: jason.han --- ...ion-head-owned-relationship-order.fixed.md | 2 +- docs/reference/rdf-mapping.md | 1 + internal/translate/export/rdf_in.go | 28 +++-------------- internal/translate/export/rdf_normative.go | 26 +++++++++++++++- internal/translate/export/rdf_out.go | 1 + tests/export/graph_only_notation_test.go | 31 ++++++++++++------- 6 files changed, 51 insertions(+), 38 deletions(-) diff --git a/changes/unreleased/declaration-head-owned-relationship-order.fixed.md b/changes/unreleased/declaration-head-owned-relationship-order.fixed.md index 2fa389429f..7f21035bfe 100644 --- a/changes/unreleased/declaration-head-owned-relationship-order.fixed.md +++ b/changes/unreleased/declaration-head-owned-relationship-order.fixed.md @@ -1 +1 @@ -- The RDF and API JSON writers own a declaration head's relationships in the order the notation spells them: a usage's typings, specializations and multiplicity come first in `ownedRelationship` as written (`:>> x : T = v` owns its Redefinition, then its FeatureTyping, then its FeatureValue), ahead of the value and the body members, and a definition's Subclassification ahead of its members; `ownedSpecialization` and the other owned-relationship lists follow the same order. `Element::ownedRelationship` is ordered (KerML 8.3.2.1.2) and the textual notation adds each owned relationship as it parses the clause (KerML 8.2.1, SysML 8.2). The reader spells a head back in the order the graph owns its relationships, the multiplicity part included, instead of a fixed clause order. +- The RDF and API JSON writers own a declaration head's relationships in the order the notation spells them: a usage's typings, specializations and multiplicity come first in `ownedRelationship` as written (`:>> x : T = v` owns its Redefinition, then its FeatureTyping, then its FeatureValue), ahead of the value and the body members, and a definition's Subclassification ahead of its members; `ownedSpecialization` and the other owned-relationship lists follow the same order. `Element::ownedRelationship` is ordered (KerML 8.3.2.1.2) and the textual notation adds each owned relationship as it parses the clause (KerML 8.2.1, SysML 8.2). The reader spells a head back in the order the graph owns its relationships, the multiplicity part included, instead of a fixed clause order. Where a head relates one target under two clauses that materialize as the same class (`subsets x specializes x`), the writer states each element's keyword as `sysx:headClause`, so the two come back apart and in order under either id form; a multiplicity no membership places is written once, with the first typing clause. diff --git a/docs/reference/rdf-mapping.md b/docs/reference/rdf-mapping.md index d22cfc19c2..89d48a8b1b 100644 --- a/docs/reference/rdf-mapping.md +++ b/docs/reference/rdf-mapping.md @@ -598,6 +598,7 @@ The `sysx:` properties: | `sysx:projectId`, `sysx:branch`, `sysx:org` | The `@IdentityMetadata::ProjectRef` provenance of a scope root, see [Element identity](#element-identity). | | `sysx:isRedefinitionImplicit` | A metadata body's bare `name = …` owns a Redefinition of the metadata definition's feature of that name (SysML.xtext `MetadataBodyUsage`): the name is no declared name but the redefinition's target, flagged implicit so the graph writes the bare form back rather than `:>> name` or a declared name. A body name resolving to no feature of the metadata type keeps its `sysml:declaredName` and owns none. | | `sysx:isKindImplicit` | The declaration wrote no kind keyword (`in x : Real;`), which takes its kind from its owner. Without it the canonical keyword would come back written out, declaring what the author did not. A kind named in a comment in the head (`in /* attribute */ x : Real;`) is trivia, not a keyword the declaration wrote. | +| `sysx:headClause` | On a Subsetting or ReferenceSubsetting of a target the head also relates under the other clause kind that materializes as the same class (`feature f subsets x specializes x;` owns two Subsettings of `x`): the keyword this element stands for, `specializes`, `subsets` or `references`, so the reader keeps the clauses apart — and in their written order — where the collapsed properties alone cannot tell them apart. Absent elsewhere. | | the behavioral properties | `sysx:guard`, `sysx:expression`, `sysx:payload`, … — the parts of a behavioral node the vocabulary has no predicate for, listed under [Behavior](#behavior). | A `return` parameter written without a kind keyword is a `ReferenceUsage` diff --git a/internal/translate/export/rdf_in.go b/internal/translate/export/rdf_in.go index 9e7ced629f..461fcaf440 100644 --- a/internal/translate/export/rdf_in.go +++ b/internal/translate/export/rdf_in.go @@ -4252,11 +4252,8 @@ func (d *decoder) spelledHead(el *element) []headClause { return clauses } -// headClauseOf picks the clause a relationship element states among the -// candidates its metaclass admits: one candidate is it; between several (a -// feature that both specializes and subsets x owns two Subsettings of x) the -// suffix this writer mints decides, else the kinds' fixed order, which invents -// no order a graph of another writer does not state. +// headClauseOf picks the clause a relationship element states among the candidates its +// metaclass admits: the keyword it carries decides between several, else the kinds' fixed order. func (d *decoder) headClauseOf(owned rdf.Term, candidates []headClause) (headClause, bool) { switch len(candidates) { case 0: @@ -4264,9 +4261,9 @@ func (d *decoder) headClauseOf(owned rdf.Term, candidates []headClause) (headCla case 1: return candidates[0], true } - if kind, ok := mintedRelationshipKind(rdf.LocalName(owned.Value)); ok { + if keyword, ok := d.graph.Object(owned, rdf.OpenSysML+xHeadClause); ok { for _, clause := range candidates { - if clause.kind == kind { + if relationshipSyntax[clause.kind] == keyword.Value { return clause, true } } @@ -4281,23 +4278,6 @@ func (d *decoder) headClauseOf(owned rdf.Term, candidates []headClause) (headCla return candidates[0], true } -// mintedRelationshipSuffixes are the suffixes relationshipSpec mints a -// relationship element's IRI with, by the clause kind they materialize. -var mintedRelationshipSuffixes = map[string]ast.RelationshipKind{ - "_sp": ast.RelSpecializes, "_ss": ast.RelSubsets, "_rs": ast.RelReferences, -} - -// mintedRelationshipKind reads the clause kind off a local name this writer -// minted (`P__f_sp0`), if it carries one of the suffixes. -func mintedRelationshipKind(local string) (ast.RelationshipKind, bool) { - trimmed := strings.TrimRight(local, "0123456789") - if i := strings.LastIndex(trimmed, "_"); i >= 0 { - kind, ok := mintedRelationshipSuffixes[trimmed[i:]] - return kind, ok - } - return 0, false -} - func (d *decoder) multiplicityText(el *element) string { lower, hasLower := d.stringOf(el, rdf.SysML+pLowerBound) upper, hasUpper := d.stringOf(el, rdf.SysML+pUpperBound) diff --git a/internal/translate/export/rdf_normative.go b/internal/translate/export/rdf_normative.go index e8d2b2fafd..1ff1831a76 100644 --- a/internal/translate/export/rdf_normative.go +++ b/internal/translate/export/rdf_normative.go @@ -182,7 +182,11 @@ func (e *encoder) materializeRelationships(subject rdf.Term) { block = append(block, e.emitConjugatedPortTyping(subject, p.target, spec)) return } - block = append(block, e.emitRelationship(subject, p.target, spec)) + relation := e.emitRelationship(subject, p.target, spec) + if e.headClauseAmbiguous(subject, p.kind, p.target) { + e.graph.Add(relation, e.sysx(xHeadClause), rdf.String(relationshipSyntax[p.kind])) + } + block = append(block, relation) } head := e.heads[subject] if head != nil { @@ -204,6 +208,26 @@ func (e *encoder) materializeRelationships(subject rdf.Term) { } } +// headClauseAmbiguous reports whether subject states target under another +// clause kind that materializes as the same relationship class as kind. +func (e *encoder) headClauseAmbiguous(subject rdf.Term, kind ast.RelationshipKind, target rdf.Term) bool { + for _, other := range headClauseSiblings[kind] { + if slices.Contains(e.graph.Objects(subject, rdf.SysML+relationshipProperty[other]), target) { + return true + } + } + return false +} + +// headClauseSiblings are the clause kinds a feature materializes as one +// relationship class: specializes and subsets as Subsetting, references and an +// end form's subsets as ReferenceSubsetting. +var headClauseSiblings = map[ast.RelationshipKind][]ast.RelationshipKind{ + ast.RelSpecializes: {ast.RelSubsets}, + ast.RelSubsets: {ast.RelSpecializes, ast.RelReferences}, + ast.RelReferences: {ast.RelSubsets}, +} + // spelled is the head's clauses in the order the notation spelled them; a // clause nothing spelled follows them in the order it was stated. func (h *declarationHead) spelled() []headItem { diff --git a/internal/translate/export/rdf_out.go b/internal/translate/export/rdf_out.go index c6522b0c0f..9126f9662a 100644 --- a/internal/translate/export/rdf_out.go +++ b/internal/translate/export/rdf_out.go @@ -142,6 +142,7 @@ const ( xEndElement = "endElement" xSourceMultiplicityBeforeThen = "sourceMultiplicityBeforeThen" xConjugatedTyping = "conjugatedTyping" + xHeadClause = "headClause" xEndVerb = "endVerb" xSourceMember = "sourceMember" xTargetMember = "targetMember" diff --git a/tests/export/graph_only_notation_test.go b/tests/export/graph_only_notation_test.go index 4c040a89a0..a54bd894b5 100644 --- a/tests/export/graph_only_notation_test.go +++ b/tests/export/graph_only_notation_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/Open-MBEE/OpenSysML/internal/translate/convert" + "github.com/Open-MBEE/OpenSysML/internal/translate/export" ) // notationFromTheGraphAlone converts src to Turtle, strips the source text and @@ -313,23 +314,29 @@ func TestNameFromTheFirstOfSeveralRedefinitionsFromTheGraphAlone(t *testing.T) { "attribute dim = base.innerSpaceDimension;") } -// A feature that both specializes and subsets one target owns two Subsettings -// of it; the graph-only hop keeps the order they were spelled in either way -// round, rather than the fixed kind order. +// Two Subsettings of one target (`specializes x subsets x`) keep the order they were +// spelled in from the graph alone, under either id form, rather than the fixed kind order. func TestSameTargetSpecializesAndSubsetsKeepTheirSpelledOrder(t *testing.T) { - for _, head := range []string{"specializes x subsets x", "subsets x specializes x"} { - src := "package P {\n\tfeature x;\n\tfeature f " + head + ";\n}\n" - _, back := graphOnlyRoundTrip(t, "m.kerml", []byte(src)) - if want := "feature f " + head + ";"; !strings.Contains(string(back), want) { - t.Errorf("want %q in the notation from the graph alone:\n%s", want, back) + for _, id := range []export.IDForm{export.IDQualifiedName, export.IDUUID} { + for _, head := range []string{"specializes x subsets x", "subsets x specializes x"} { + src := []byte("package P {\n\tfeature x;\n\tfeature f " + head + ";\n}\n") + turtle, err := convert.ConvertWith("m.kerml", src, convert.FormatSysML, convert.FormatTurtle, convert.Options{ID: id}) + if err != nil { + t.Fatalf("to turtle: %v", err) + } + back, err := convert.Convert("m.ttl", withoutLayout(t, turtle), convert.FormatTurtle, convert.FormatSysML) + if err != nil { + t.Fatalf("back to notation from the graph alone: %v", err) + } + if want := "feature f " + head + ";"; !strings.Contains(string(back), want) { + t.Errorf("id form %v: want %q in the notation from the graph alone:\n%s", id, want, back) + } } } } -// A graph that states a head's typings as relationship elements but owns no -// membership for its multiplicity (an older writer's) gets the multiplicity -// written once, with the first typing clause, however the other clauses split -// the typings. +// A graph that owns no membership for a head's multiplicity (an older writer's) gets +// it written once, with the first typing clause, however other clauses split the typings. func TestUnplacedMultiplicityIsWrittenOnceAcrossSplitTypings(t *testing.T) { src := "package P {\n\tpart def A;\n\tpart def B;\n\tpart x;\n\tpart p : A :> x : B [2];\n}\n" turtle, err := convert.Convert("m.sysml", []byte(src), convert.FormatSysML, convert.FormatTurtle) From 0cc2a9aadf5128dbea5b2e9aa7c0777b5d169c26 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 05:55:49 +0000 Subject: [PATCH 08/16] test(export): re-record the golden digests on the merged tree Co-Authored-By: jason.han --- tests/export/testdata/convert/constraints.golden.ttl.sha256 | 2 +- .../testdata/convert/end_binding_bodies.golden.ttl.sha256 | 2 +- .../export/testdata/convert/irregular_layout.golden.ttl.sha256 | 2 +- .../testdata/convert/result_expressions.golden.ttl.sha256 | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/export/testdata/convert/constraints.golden.ttl.sha256 b/tests/export/testdata/convert/constraints.golden.ttl.sha256 index 2ffe202c9a..d6bdc634cf 100644 --- a/tests/export/testdata/convert/constraints.golden.ttl.sha256 +++ b/tests/export/testdata/convert/constraints.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 8da750e1a4dfab7fa08b41bd4ffb54438b5a91130e1f2856d56fb5bf45f5f308 bytes 252840 lines 3885 +sha256 7987c6a34f7762196bfb4220a852d113cb94163c369194e8bedb0d000b459162 bytes 252840 lines 3885 @prefix elmt: . @prefix expr: . @prefix json: . diff --git a/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 b/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 index 51c3cc3c5f..725dbe8901 100644 --- a/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 +++ b/tests/export/testdata/convert/end_binding_bodies.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 a2f96edfd15cb0d406ea15897d0d2731f6a4404c36f6b4af90054924391a30f3 bytes 272919 lines 5007 +sha256 01eb69c71c1772738667651b1891ad94c605bcaf9a58c540e90d1eb6a11d9175 bytes 272919 lines 5007 @prefix elmt: . @prefix expr: . @prefix json: . diff --git a/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 b/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 index 4cc398fcad..e15e4805e2 100644 --- a/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 +++ b/tests/export/testdata/convert/irregular_layout.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 1556130ae246f8cd1a37eadbd075f0040664143bd190ffde0226a8ab2bb37741 bytes 241404 lines 3678 +sha256 f051b3133b23fca3581cdedde6875d10ce0e4f123051217418affdf699086681 bytes 241404 lines 3678 @prefix elmt: . @prefix expr: . @prefix json: . diff --git a/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 b/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 index a495e46fe0..faaa47d9e0 100644 --- a/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 +++ b/tests/export/testdata/convert/result_expressions.golden.ttl.sha256 @@ -1,4 +1,4 @@ -sha256 ceb9535ccd24eb6df32e7da7f996eee26a955848b07a79eb3341b5091d9051fc bytes 417354 lines 7447 +sha256 eb4560391dbb51f9c4e25422045f0abd164be4094d10bc57173429e22febb599 bytes 417354 lines 7447 @prefix elmt: . @prefix expr: . @prefix json: . From 2cf9af453997f41886d9e7d5c3252ab1212e2657 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 06:40:43 +0000 Subject: [PATCH 09/16] docs(referee): re-record the api-json differential on the tree merged with develop and the bridge follow-ups Co-Authored-By: jason.han --- .../api-json-differential-baseline.json | 442 +++++++++--------- docs/project/api-json-differential.md | 4 +- 2 files changed, 223 insertions(+), 223 deletions(-) diff --git a/docs/project/api-json-differential-baseline.json b/docs/project/api-json-differential-baseline.json index 8f613c8f8c..b1e4cb52fb 100644 --- a/docs/project/api-json-differential-baseline.json +++ b/docs/project/api-json-differential-baseline.json @@ -14,7 +14,7 @@ { "name": "api-json-writer", "source": "internal/translate/export", - "sourceDigest": "sha256:19853eda4e9bece0cc34269f22d5db9e892777b5a562b98315a3ec09d9ed8188" + "sourceDigest": "sha256:3da6f74dfa4d02b5e97cb64949031e8cf84518ee86a7551c2424bc1e9322f6cd" } ], "inputs": [ @@ -117,11 +117,11 @@ "oursOnly": 28511, "pilotOnly": 38797, "pilotOnlyImplied": 0, - "typeMismatch": 1742 + "typeMismatch": 1743 }, "properties": { - "presentEqual": 624752, - "presentDifferent": 40210, + "presentEqual": 629580, + "presentDifferent": 35382, "oursMissing": 1058253, "pilotMissing": 68560, "absentBoth": 2103094, @@ -129,7 +129,7 @@ }, "rows": 11311, "unkeyedReferences": 108366, - "extensionProperties": 146858, + "extensionProperties": 146861, "duplicateElements": { "ours": 560, "pilot": 78022 @@ -160,8 +160,8 @@ "typeMismatch": 12 }, "properties": { - "presentEqual": 50698, - "presentDifferent": 3608, + "presentEqual": 51021, + "presentDifferent": 3285, "oursMissing": 86942, "pilotMissing": 5306, "absentBoth": 176892, @@ -195,8 +195,8 @@ "typeMismatch": 61 }, "properties": { - "presentEqual": 182464, - "presentDifferent": 9934, + "presentEqual": 183983, + "presentDifferent": 8415, "oursMissing": 308696, "pilotMissing": 19510, "absentBoth": 615071, @@ -230,8 +230,8 @@ "typeMismatch": 17 }, "properties": { - "presentEqual": 63665, - "presentDifferent": 5435, + "presentEqual": 64168, + "presentDifferent": 4932, "oursMissing": 108814, "pilotMissing": 7092, "absentBoth": 221634, @@ -266,8 +266,8 @@ "typeMismatch": 1032 }, "properties": { - "presentEqual": 43853, - "presentDifferent": 3110, + "presentEqual": 44382, + "presentDifferent": 2581, "oursMissing": 63793, "pilotMissing": 5268, "absentBoth": 117922, @@ -298,11 +298,11 @@ "oursOnly": 1966, "pilotOnly": 2728, "pilotOnlyImplied": 0, - "typeMismatch": 390 + "typeMismatch": 391 }, "properties": { - "presentEqual": 44427, - "presentDifferent": 5885, + "presentEqual": 44671, + "presentDifferent": 5641, "oursMissing": 71585, "pilotMissing": 5182, "absentBoth": 142032, @@ -337,8 +337,8 @@ "typeMismatch": 30 }, "properties": { - "presentEqual": 7837, - "presentDifferent": 366, + "presentEqual": 7895, + "presentDifferent": 308, "oursMissing": 13187, "pilotMissing": 877, "absentBoth": 28133, @@ -373,8 +373,8 @@ "typeMismatch": 200 }, "properties": { - "presentEqual": 183276, - "presentDifferent": 9550, + "presentEqual": 184603, + "presentDifferent": 8223, "oursMissing": 316321, "pilotMissing": 20333, "absentBoth": 636835, @@ -408,8 +408,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 348, - "presentDifferent": 15, + "presentEqual": 350, + "presentDifferent": 13, "oursMissing": 462, "pilotMissing": 43, "absentBoth": 1043, @@ -443,8 +443,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 48184, - "presentDifferent": 2307, + "presentEqual": 48507, + "presentDifferent": 1984, "oursMissing": 88453, "pilotMissing": 4949, "absentBoth": 163532, @@ -1778,8 +1778,8 @@ 0 ], "ActionDefinition.ownedRelationship": [ - 136, - 15, + 147, + 4, 0, 0, 26, @@ -2698,24 +2698,24 @@ 0 ], "ActionUsage.ownedRelationship": [ - 232, - 110, + 330, + 12, 3, 3, 157, 0 ], "ActionUsage.ownedSpecialization": [ - 166, - 3, + 169, + 0, 0, 1, 335, 0 ], "ActionUsage.ownedSubsetting": [ - 40, - 1, + 41, + 0, 0, 0, 464, @@ -3602,8 +3602,8 @@ 0 ], "AllocationDefinition.ownedRelationship": [ - 5, - 2, + 7, + 0, 0, 0, 1, @@ -4546,8 +4546,8 @@ 0 ], "AllocationUsage.ownedRelationship": [ - 3, - 7, + 10, + 0, 0, 0, 0, @@ -5234,8 +5234,8 @@ 0 ], "AnalysisCaseDefinition.ownedRelationship": [ - 20, - 7, + 26, + 1, 0, 0, 3, @@ -6194,16 +6194,16 @@ 0 ], "AnalysisCaseUsage.ownedRelationship": [ - 3, 37, + 3, 0, 0, 1, 0 ], "AnalysisCaseUsage.ownedSpecialization": [ - 25, - 12, + 37, + 0, 0, 0, 4, @@ -7258,24 +7258,24 @@ 0 ], "AssertConstraintUsage.ownedRelationship": [ - 61, - 18, + 79, + 0, 0, 0, 0, 0 ], "AssertConstraintUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 60, 0 ], "AssertConstraintUsage.ownedSubsetting": [ - 8, - 1, + 9, + 0, 0, 0, 70, @@ -9666,8 +9666,8 @@ 0 ], "AttributeDefinition.ownedRelationship": [ - 48, - 61, + 109, + 0, 0, 0, 99, @@ -10578,16 +10578,16 @@ 0 ], "AttributeUsage.ownedRelationship": [ - 113, - 2323, + 1242, + 1194, 36, 0, 19, 0 ], "AttributeUsage.ownedSpecialization": [ - 2298, - 30, + 2328, + 0, 0, 0, 163, @@ -11610,8 +11610,8 @@ 0 ], "BindingConnector.ownedRelationship": [ - 7, - 1, + 8, + 0, 0, 0, 0, @@ -12466,8 +12466,8 @@ 0 ], "BindingConnectorAsUsage.ownedRelationship": [ - 2, - 1, + 3, + 0, 0, 0, 0, @@ -13082,8 +13082,8 @@ 0 ], "BooleanExpression.ownedRelationship": [ - 1, - 3, + 2, + 2, 0, 0, 0, @@ -13714,8 +13714,8 @@ 0 ], "CalculationDefinition.ownedRelationship": [ - 70, - 103, + 172, + 1, 0, 0, 0, @@ -14626,8 +14626,8 @@ 0 ], "CalculationUsage.ownedRelationship": [ - 40, - 74, + 113, + 1, 0, 0, 0, @@ -15314,8 +15314,8 @@ 0 ], "CaseDefinition.ownedRelationship": [ - 1, - 2, + 3, + 0, 0, 0, 0, @@ -16250,9 +16250,9 @@ 0 ], "CaseUsage.ownedRelationship": [ - 0, 2, 0, + 0, 3, 0, 0 @@ -17154,8 +17154,8 @@ 0 ], "Classifier.ownedRelationship": [ - 47, - 18, + 59, + 6, 10, 0, 29, @@ -19418,8 +19418,8 @@ 0 ], "ConcernUsage.ownedRelationship": [ - 15, - 3, + 18, + 0, 0, 0, 3, @@ -21138,8 +21138,8 @@ 0 ], "ConnectionDefinition.ownedRelationship": [ - 36, - 7, + 43, + 0, 0, 0, 0, @@ -22098,8 +22098,8 @@ 0 ], "ConnectionUsage.ownedRelationship": [ - 18, - 61, + 79, + 0, 0, 0, 0, @@ -22762,16 +22762,16 @@ 0 ], "Connector.ownedRelationship": [ - 6, - 30, + 35, + 1, 0, 0, 0, 0 ], "Connector.ownedSpecialization": [ - 25, - 4, + 29, + 0, 0, 0, 7, @@ -23410,8 +23410,8 @@ 0 ], "ConstraintDefinition.ownedRelationship": [ - 24, - 1, + 25, + 0, 0, 0, 1, @@ -24306,8 +24306,8 @@ 0 ], "ConstraintUsage.ownedRelationship": [ - 153, - 17, + 165, + 5, 10, 0, 2, @@ -28226,8 +28226,8 @@ 0 ], "EnumerationDefinition.ownedRelationship": [ - 16, - 8, + 24, + 0, 0, 0, 1, @@ -29074,8 +29074,8 @@ 0 ], "EnumerationUsage.ownedRelationship": [ - 25, - 2, + 27, + 0, 0, 0, 40, @@ -29906,24 +29906,24 @@ 0 ], "EventOccurrenceUsage.ownedRelationship": [ - 40, - 54, + 94, + 0, 0, 0, 85, 0 ], "EventOccurrenceUsage.ownedSpecialization": [ - 49, - 28, + 77, + 0, 0, 0, 102, 0 ], "EventOccurrenceUsage.ownedSubsetting": [ - 53, - 24, + 77, + 0, 0, 0, 102, @@ -30810,24 +30810,24 @@ 0 ], "ExhibitStateUsage.ownedRelationship": [ - 35, - 9, + 41, + 3, 0, 0, 5, 0 ], "ExhibitStateUsage.ownedSpecialization": [ - 19, - 7, + 26, + 0, 0, 0, 23, 0 ], "ExhibitStateUsage.ownedSubsetting": [ - 10, - 7, + 17, + 0, 0, 0, 32, @@ -31434,8 +31434,8 @@ 0 ], "Expression.ownedRelationship": [ - 33, - 6, + 39, + 0, 0, 0, 0, @@ -32098,24 +32098,24 @@ 0 ], "Feature.ownedRelationship": [ - 3670, - 1781, + 4070, + 1381, 124, 88, 4347, 0 ], "Feature.ownedSpecialization": [ - 756, - 130, + 866, + 20, 657, 29, 8438, 0 ], "Feature.ownedSubsetting": [ - 354, - 17, + 363, + 8, 645, 6, 8988, @@ -35482,8 +35482,8 @@ 0 ], "FlowDefinition.ownedRelationship": [ - 3, - 3, + 6, + 0, 0, 0, 1, @@ -36474,16 +36474,16 @@ 0 ], "FlowUsage.ownedRelationship": [ - 37, - 69, + 59, + 47, 0, 0, 0, 0 ], "FlowUsage.ownedSpecialization": [ - 19, - 6, + 25, + 0, 0, 0, 81, @@ -38970,8 +38970,8 @@ 0 ], "Function.ownedRelationship": [ - 10, - 1, + 11, + 0, 0, 0, 0, @@ -40682,24 +40682,24 @@ 0 ], "IncludeUseCaseUsage.ownedRelationship": [ - 7, - 12, + 19, + 0, 0, 0, 0, 0 ], "IncludeUseCaseUsage.ownedSpecialization": [ - 17, - 1, + 18, + 0, 0, 0, 1, 0 ], "IncludeUseCaseUsage.ownedSubsetting": [ - 11, - 1, + 12, + 0, 0, 0, 7, @@ -42370,8 +42370,8 @@ 0 ], "InterfaceDefinition.ownedRelationship": [ - 28, - 3, + 30, + 1, 0, 0, 0, @@ -43338,8 +43338,8 @@ 0 ], "InterfaceUsage.ownedRelationship": [ - 4, 39, + 4, 0, 0, 0, @@ -45138,8 +45138,8 @@ 0 ], "ItemDefinition.ownedRelationship": [ - 55, - 11, + 60, + 6, 0, 0, 101, @@ -46050,16 +46050,16 @@ 0 ], "ItemUsage.ownedRelationship": [ - 36, - 287, + 89, + 234, 33, 0, 10, 0 ], "ItemUsage.ownedSpecialization": [ - 291, - 18, + 307, + 2, 0, 0, 57, @@ -51314,8 +51314,8 @@ 0 ], "Metaclass.ownedRelationship": [ - 4, - 4, + 8, + 0, 0, 0, 2, @@ -52370,8 +52370,8 @@ 0 ], "MetadataDefinition.ownedRelationship": [ - 12, - 6, + 18, + 0, 0, 0, 18, @@ -53786,8 +53786,8 @@ 0 ], "MetadataUsage.ownedRelationship": [ - 262, - 117, + 269, + 110, 0, 0, 0, @@ -56658,8 +56658,8 @@ 0 ], "OccurrenceDefinition.ownedRelationship": [ - 15, - 37, + 17, + 35, 2, 0, 1, @@ -57538,24 +57538,24 @@ 0 ], "OccurrenceUsage.ownedRelationship": [ - 69, - 62, + 114, + 17, 0, 0, 13, 0 ], "OccurrenceUsage.ownedSpecialization": [ - 74, - 12, + 80, + 6, 0, 0, 58, 0 ], "OccurrenceUsage.ownedSubsetting": [ - 17, - 10, + 21, + 6, 0, 0, 117, @@ -59378,8 +59378,8 @@ 0 ], "PartDefinition.ownedRelationship": [ - 423, - 216, + 618, + 21, 1, 0, 279, @@ -60346,24 +60346,24 @@ 0 ], "PartUsage.ownedRelationship": [ - 309, - 1551, + 858, + 1002, 52, 0, 40, 0 ], "PartUsage.ownedSpecialization": [ - 1514, - 37, + 1549, + 2, 0, 0, 401, 0 ], "PartUsage.ownedSubsetting": [ - 359, - 12, + 371, + 0, 2, 0, 1579, @@ -60946,8 +60946,8 @@ 0 ], "PayloadFeature.ownedRelationship": [ - 4, - 1, + 5, + 0, 0, 0, 0, @@ -61778,24 +61778,24 @@ 0 ], "PerformActionUsage.ownedRelationship": [ - 96, - 35, + 129, + 2, 2, 0, 24, 0 ], "PerformActionUsage.ownedSpecialization": [ - 97, - 17, + 114, + 0, 2, 0, 41, 0 ], "PerformActionUsage.ownedSubsetting": [ - 88, - 17, + 105, + 0, 2, 0, 50, @@ -62602,8 +62602,8 @@ 0 ], "PortDefinition.ownedRelationship": [ - 74, - 51, + 77, + 48, 0, 0, 0, @@ -63490,16 +63490,16 @@ 0 ], "PortUsage.ownedRelationship": [ - 20, - 415, + 99, + 336, 30, 1, 2, 0 ], "PortUsage.ownedSpecialization": [ - 412, - 10, + 418, + 4, 0, 1, 45, @@ -65250,24 +65250,24 @@ 0 ], "ReferenceUsage.ownedRelationship": [ - 1255, - 838, + 2005, + 88, 3, 0, 98, 0 ], "ReferenceUsage.ownedSpecialization": [ - 1650, - 75, + 1707, + 18, 4, 0, 465, 0 ], "ReferenceUsage.ownedSubsetting": [ - 808, - 22, + 814, + 16, 6, 0, 1358, @@ -65898,10 +65898,10 @@ 0 ], "RenderingDefinition.ownedRelationship": [ - 0, 1, 0, 0, + 0, 1, 0 ], @@ -66778,8 +66778,8 @@ 0 ], "RenderingUsage.ownedRelationship": [ - 1, - 33, + 4, + 30, 1, 0, 0, @@ -67706,8 +67706,8 @@ 0 ], "RequirementDefinition.ownedRelationship": [ - 84, - 16, + 98, + 2, 0, 0, 9, @@ -68714,16 +68714,16 @@ 0 ], "RequirementUsage.ownedRelationship": [ - 113, - 139, + 243, + 9, 0, 0, 19, 0 ], "RequirementUsage.ownedSpecialization": [ - 161, - 18, + 179, + 0, 0, 0, 92, @@ -70386,16 +70386,16 @@ 0 ], "SatisfyRequirementUsage.ownedRelationship": [ - 11, - 69, + 77, + 3, 0, 0, 0, 0 ], "SatisfyRequirementUsage.ownedSpecialization": [ - 77, - 3, + 78, + 2, 0, 0, 0, @@ -72922,8 +72922,8 @@ 0 ], "StateDefinition.ownedRelationship": [ - 31, - 4, + 35, + 0, 0, 0, 11, @@ -74082,24 +74082,24 @@ 0 ], "StateUsage.ownedRelationship": [ - 80, - 17, + 89, + 8, 1, 0, 208, 0 ], "StateUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 287, 0 ], "StateUsage.ownedSubsetting": [ - 9, - 1, + 10, + 0, 0, 0, 296, @@ -74698,16 +74698,16 @@ 0 ], "Step.ownedRelationship": [ - 25, - 51, + 69, + 7, 0, 0, 2, 0 ], "Step.ownedSpecialization": [ - 49, - 15, + 64, + 0, 0, 0, 14, @@ -76306,16 +76306,16 @@ 0 ], "Succession.ownedRelationship": [ - 15, - 11, + 25, + 1, 0, 0, 0, 0 ], "Succession.ownedSpecialization": [ - 1, 10, + 1, 0, 0, 15, @@ -77186,8 +77186,8 @@ 0 ], "SuccessionAsUsage.ownedRelationship": [ - 10, - 2, + 11, + 1, 0, 0, 0, @@ -82018,8 +82018,8 @@ 0 ], "Type.ownedRelationship": [ - 4, - 37, + 11, + 30, 0, 0, 0, @@ -82954,8 +82954,8 @@ 0 ], "Usage.ownedRelationship": [ - 20, - 10, + 21, + 9, 0, 0, 0, @@ -83626,8 +83626,8 @@ 0 ], "UseCaseDefinition.ownedRelationship": [ - 16, - 2, + 18, + 0, 0, 0, 1, @@ -84586,24 +84586,24 @@ 0 ], "UseCaseUsage.ownedRelationship": [ - 15, - 8, + 23, + 0, 0, 1, 3, 0 ], "UseCaseUsage.ownedSpecialization": [ - 10, - 1, + 11, + 0, 0, 1, 15, 0 ], "UseCaseUsage.ownedSubsetting": [ - 2, - 1, + 3, + 0, 0, 1, 23, @@ -86410,8 +86410,8 @@ 0 ], "VerificationCaseUsage.ownedRelationship": [ - 1, - 41, + 42, + 0, 0, 1, 1, @@ -87058,8 +87058,8 @@ 0 ], "ViewDefinition.ownedRelationship": [ - 6, - 6, + 10, + 2, 0, 1, 3, @@ -88178,8 +88178,8 @@ 0 ], "ViewUsage.ownedRelationship": [ - 33, - 65, + 90, + 8, 0, 0, 0, @@ -89842,8 +89842,8 @@ 0 ], "ViewpointUsage.ownedRelationship": [ - 7, - 2, + 9, + 0, 0, 0, 0, diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index faf3c0e3e9..b112cf8ac3 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -190,7 +190,7 @@ The pinned pilot's verdict on the probe (`validate-sysml-batch`): clean. ## Results (pilot `2026-08`, 920 files) -**Scorecard:** 920 files; 90023 elements matched (28511 ours-only, 38797 pilot-only, 0 of them implied); properties: 624752 present-equal, 40210 present-different, 1058253 ours-missing, 68560 pilot-missing, 2103094 absent-both, 25703 indeterminate. +**Scorecard:** 920 files; 90023 elements matched (28511 ours-only, 38797 pilot-only, 0 of them implied); properties: 629580 present-equal, 35382 present-different, 1058253 ours-missing, 68560 pilot-missing, 2103094 absent-both, 25703 indeterminate. The pilot's export failed on 56 files (`pilotFailed`: its own export throws on an element without a resource, 52 of them specification examples and 4 test fixtures; the files are named in the run's text report), ours refused 36 (all of them specification examples the parser could not read whole), left the pilot's 56 failed files out and converted 24 documents alone for declaring an element another document of their root declares (`oursColliding`); no root fell back to per-document conversion. 11311 (metaclass, property) rows carry a comparison; 108366 references compared through the unkeyed sentinel, 146858 of our `sysx:` annotations were left out, and 289/345 elements (ours/pilot) were dropped for ambiguous keys, 8198/31310 for having none. @@ -412,7 +412,7 @@ The (metaclass, property) rows ranked by the corpus elements on which the pilot | 39 | `FeatureTyping` | `isLibraryElement` | 5912 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | | 40 | `FeatureTyping` | `owningType` | 5908 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | | 41 | `Redefinition` | `redefinedFeature` | 0 | 58 | closed for this repository's libraries (above) | `Redefinition::redefinedFeature : Feature` (KerML 8.3.3.3.8) is an element reference, and every `Element` carries an `elementId` (KerML 8.3.2.1.2) the API's JSON refers to it by; the 330 redefinitions of a feature of this repository's libraries once spelled as a name, `{"@ref": "caption"}`, now link by the element's fixed id — the same movement for `FeatureTyping::type`, `MetadataUsage::type`, `FeatureReferenceExpression::referent` and `ReferenceSubsetting::referencedFeature` into those libraries — and the 58 left are redefinitions of a feature inherited within the model itself that the writer spells as a name (`vehicle_b_1::providePower`) | -| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1194 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4762 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal (this row 2323 → 1194, `ReferenceUsage` 838 → 154, `PartDefinition` 216 → 21, `PartUsage` 1551 → 1002, `Feature` 1781 → 1381). What remains is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | +| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1194 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4828 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal, no other bucket touched (this row 2323 → 1194, `PartDefinition` 216 → 21, `PartUsage` 1551 → 1002, `Feature` 1781 → 1381). What remains is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | | 43 | `FeatureReferenceExpression` | `ownedMembership` | 0 | 7 | the writer owns the `Membership` (`export/rdf_expr.go` `featureReferent`); the 7 left are the `FunctionReferenceMember` shape, a `FeatureMembership` owning an `Expression` typed by the named function (KerML 8.2.5.8.3), which ours writes as a `Membership` of the function | `FeatureReferenceExpression::referent` is the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent); the notation maps a feature reference to that owned `Membership` (8.2.5.8.3, `FeatureReferenceMember`) | Rows an evaluator rule in PR #1232 (`internal/semantic/metamodel/rules.go`) already names are marked; that PR adds a lazy metamodel evaluator and layers its derived values into the API-JSON writer, so its merge is expected to move those rows from ours-missing to present-equal or present-different, and this referee is how that movement is measured. From dec11ed7465d476f9765c1102eb8f16dc6ff471d Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 00:50:16 +0000 Subject: [PATCH 10/16] docs(referee): re-record the api-json differential on the tree merged with the bridge's develop merge Co-Authored-By: jason.han --- .../api-json-differential-baseline.json | 1360 ++++++++--------- docs/project/api-json-differential.md | 56 +- 2 files changed, 708 insertions(+), 708 deletions(-) diff --git a/docs/project/api-json-differential-baseline.json b/docs/project/api-json-differential-baseline.json index 3aeb0cb856..36105e89da 100644 --- a/docs/project/api-json-differential-baseline.json +++ b/docs/project/api-json-differential-baseline.json @@ -14,7 +14,7 @@ { "name": "api-json-writer", "source": "internal/translate/export", - "sourceDigest": "sha256:8f01ecc0327cffe3eae4ad97190321692950de4214683621832336658de5a5a3" + "sourceDigest": "sha256:ccda274c66d802f61aa95f27b4f98b4e30581216773e5ad5a86734cf0462f1c4" } ], "inputs": [ @@ -89,7 +89,7 @@ "digest": "sha256:c399daea865e29d2c056db2746eb3aad94ab26e591cf7669ffcb060583dfee0b" } ], - "recorded": "2026-10-21" + "recorded": "2026-10-22" }, "exporter": "org.omg.sysml.util.traversal.facade.impl.JsonElementProcessingFacade with setIsIncludeDerived(true), each input resource's root elements visited through org.omg.sysml.util.traversal.Traversal, toJsonTree(true) (the path of SysMLInteractive.export, the %export magic), via scripts/pilot-json-exporter/ExportJSON.java", "normalizations": [ @@ -113,23 +113,23 @@ "pilotFailed": 56, "pilotLibraryElements": 30926, "elements": { - "matched": 90023, - "oursOnly": 28511, - "pilotOnly": 38797, + "matched": 90109, + "oursOnly": 28425, + "pilotOnly": 38711, "pilotOnlyImplied": 0, - "typeMismatch": 1743 + "typeMismatch": 1723 }, "properties": { - "presentEqual": 624752, - "presentDifferent": 40210, - "oursMissing": 1058253, - "pilotMissing": 68560, - "absentBoth": 2103094, - "indeterminate": 25703 + "presentEqual": 630058, + "presentDifferent": 35532, + "oursMissing": 1059345, + "pilotMissing": 68622, + "absentBoth": 2104980, + "indeterminate": 25713 }, "rows": 11311, - "unkeyedReferences": 108366, - "extensionProperties": 146861, + "unkeyedReferences": 108416, + "extensionProperties": 146885, "duplicateElements": { "ours": 560, "pilot": 78022 @@ -157,11 +157,11 @@ "oursOnly": 2131, "pilotOnly": 2873, "pilotOnlyImplied": 0, - "typeMismatch": 12 + "typeMismatch": 10 }, "properties": { - "presentEqual": 50698, - "presentDifferent": 3608, + "presentEqual": 51021, + "presentDifferent": 3285, "oursMissing": 86942, "pilotMissing": 5306, "absentBoth": 176892, @@ -188,19 +188,19 @@ "pilotFailed": 0, "pilotLibraryElements": 2458, "elements": { - "matched": 25778, - "oursOnly": 10038, - "pilotOnly": 10488, + "matched": 25864, + "oursOnly": 9952, + "pilotOnly": 10402, "pilotOnlyImplied": 0, - "typeMismatch": 61 + "typeMismatch": 59 }, "properties": { - "presentEqual": 182464, - "presentDifferent": 9934, - "oursMissing": 308696, - "pilotMissing": 19510, - "absentBoth": 615071, - "indeterminate": 6788 + "presentEqual": 184461, + "presentDifferent": 8565, + "oursMissing": 309788, + "pilotMissing": 19572, + "absentBoth": 616957, + "indeterminate": 6798 }, "duplicateElements": { "ours": 0, @@ -227,11 +227,11 @@ "oursOnly": 2967, "pilotOnly": 3341, "pilotOnlyImplied": 0, - "typeMismatch": 17 + "typeMismatch": 15 }, "properties": { - "presentEqual": 63665, - "presentDifferent": 5435, + "presentEqual": 64168, + "presentDifferent": 4932, "oursMissing": 108814, "pilotMissing": 7092, "absentBoth": 221634, @@ -266,8 +266,8 @@ "typeMismatch": 1032 }, "properties": { - "presentEqual": 43853, - "presentDifferent": 3110, + "presentEqual": 44382, + "presentDifferent": 2581, "oursMissing": 63793, "pilotMissing": 5268, "absentBoth": 117922, @@ -301,8 +301,8 @@ "typeMismatch": 391 }, "properties": { - "presentEqual": 44427, - "presentDifferent": 5885, + "presentEqual": 44671, + "presentDifferent": 5641, "oursMissing": 71585, "pilotMissing": 5182, "absentBoth": 142032, @@ -337,8 +337,8 @@ "typeMismatch": 30 }, "properties": { - "presentEqual": 7837, - "presentDifferent": 366, + "presentEqual": 7895, + "presentDifferent": 308, "oursMissing": 13187, "pilotMissing": 877, "absentBoth": 28133, @@ -370,11 +370,11 @@ "oursOnly": 8734, "pilotOnly": 14944, "pilotOnlyImplied": 0, - "typeMismatch": 200 + "typeMismatch": 186 }, "properties": { - "presentEqual": 183276, - "presentDifferent": 9550, + "presentEqual": 184603, + "presentDifferent": 8223, "oursMissing": 316321, "pilotMissing": 20333, "absentBoth": 636835, @@ -408,8 +408,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 348, - "presentDifferent": 15, + "presentEqual": 350, + "presentDifferent": 13, "oursMissing": 462, "pilotMissing": 43, "absentBoth": 1043, @@ -443,8 +443,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 48184, - "presentDifferent": 2307, + "presentEqual": 48507, + "presentDifferent": 1984, "oursMissing": 88453, "pilotMissing": 4949, "absentBoth": 163532, @@ -1778,8 +1778,8 @@ 0 ], "ActionDefinition.ownedRelationship": [ - 136, - 15, + 147, + 4, 0, 0, 26, @@ -2698,24 +2698,24 @@ 0 ], "ActionUsage.ownedRelationship": [ - 232, - 110, + 330, + 12, 3, 3, 157, 0 ], "ActionUsage.ownedSpecialization": [ - 166, - 3, + 169, + 0, 0, 1, 335, 0 ], "ActionUsage.ownedSubsetting": [ - 40, - 1, + 41, + 0, 0, 0, 464, @@ -3602,8 +3602,8 @@ 0 ], "AllocationDefinition.ownedRelationship": [ - 5, - 2, + 7, + 0, 0, 0, 1, @@ -4546,8 +4546,8 @@ 0 ], "AllocationUsage.ownedRelationship": [ - 3, - 7, + 10, + 0, 0, 0, 0, @@ -5234,8 +5234,8 @@ 0 ], "AnalysisCaseDefinition.ownedRelationship": [ - 20, - 7, + 26, + 1, 0, 0, 3, @@ -6194,16 +6194,16 @@ 0 ], "AnalysisCaseUsage.ownedRelationship": [ - 3, 37, + 3, 0, 0, 1, 0 ], "AnalysisCaseUsage.ownedSpecialization": [ - 25, - 12, + 37, + 0, 0, 0, 4, @@ -7258,24 +7258,24 @@ 0 ], "AssertConstraintUsage.ownedRelationship": [ - 61, - 18, + 79, + 0, 0, 0, 0, 0 ], "AssertConstraintUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 60, 0 ], "AssertConstraintUsage.ownedSubsetting": [ - 8, - 1, + 9, + 0, 0, 0, 70, @@ -9666,8 +9666,8 @@ 0 ], "AttributeDefinition.ownedRelationship": [ - 48, - 61, + 109, + 0, 0, 0, 99, @@ -9870,13 +9870,13 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.attributeDefinition": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -9886,11 +9886,11 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.declaredName": [ - 1515, + 1517, 0, 0, 0, @@ -9908,7 +9908,7 @@ "AttributeUsage.definition": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -9918,7 +9918,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.directedFeature": [ @@ -9926,7 +9926,7 @@ 0, 2, 0, - 2489, + 2491, 0 ], "AttributeUsage.directedUsage": [ @@ -9934,11 +9934,11 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.direction": [ - 77, + 79, 0, 0, 0, @@ -9950,7 +9950,7 @@ 0, 8, 0, - 2483, + 2485, 0 ], "AttributeUsage.endFeature": [ @@ -9958,13 +9958,13 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.feature": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -9972,7 +9972,7 @@ "AttributeUsage.featureMembership": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -9980,7 +9980,7 @@ "AttributeUsage.featureTarget": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -9988,7 +9988,7 @@ "AttributeUsage.featuringType": [ 0, 0, - 2337, + 2339, 0, 154, 0 @@ -9998,13 +9998,13 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.inheritedFeature": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -10012,7 +10012,7 @@ "AttributeUsage.inheritedMembership": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -10022,7 +10022,7 @@ 0, 2, 0, - 2489, + 2491, 0 ], "AttributeUsage.intersectingType": [ @@ -10030,7 +10030,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.isAbstract": [ @@ -10038,11 +10038,11 @@ 0, 7, 0, - 2483, + 2485, 0 ], "AttributeUsage.isComposite": [ - 2491, + 2493, 0, 0, 0, @@ -10052,7 +10052,7 @@ "AttributeUsage.isConjugated": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -10062,7 +10062,7 @@ 0, 0, 0, - 2489, + 2491, 0 ], "AttributeUsage.isDefault": [ @@ -10078,7 +10078,7 @@ 0, 0, 0, - 2489, + 2491, 0 ], "AttributeUsage.isEnd": [ @@ -10086,7 +10086,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.isImpliedIncluded": [ @@ -10094,7 +10094,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.isInitial": [ @@ -10108,7 +10108,7 @@ "AttributeUsage.isLibraryElement": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -10118,7 +10118,7 @@ 0, 0, 0, - 2481, + 2483, 0 ], "AttributeUsage.isPortion": [ @@ -10126,13 +10126,13 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.isReference": [ 4, 0, - 2487, + 2489, 0, 0, 0 @@ -10141,7 +10141,7 @@ 0, 0, 0, - 17, + 19, 0, 0 ], @@ -10150,7 +10150,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.isUnique": [ @@ -10158,13 +10158,13 @@ 0, 0, 0, - 2487, + 2489, 0 ], "AttributeUsage.isVariable": [ 0, 0, - 2150, + 2152, 0, 341, 0 @@ -10180,7 +10180,7 @@ "AttributeUsage.isVariation": [ 7, 0, - 2484, + 2486, 0, 0, 0 @@ -10196,7 +10196,7 @@ "AttributeUsage.mayTimeVary": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -10204,7 +10204,7 @@ "AttributeUsage.member": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -10212,7 +10212,7 @@ "AttributeUsage.membership": [ 0, 0, - 2491, + 2493, 0, 0, 0 @@ -10220,7 +10220,7 @@ "AttributeUsage.multiplicity": [ 91, 0, - 1224, + 1226, 0, 0, 0 @@ -10228,7 +10228,7 @@ "AttributeUsage.name": [ 969, 0, - 1515, + 1517, 0, 0, 0 @@ -10238,7 +10238,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedAllocation": [ @@ -10246,7 +10246,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedAnalysisCase": [ @@ -10254,7 +10254,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedAttribute": [ @@ -10262,7 +10262,7 @@ 0, 32, 0, - 2459, + 2461, 0 ], "AttributeUsage.nestedCalculation": [ @@ -10270,7 +10270,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedCase": [ @@ -10278,7 +10278,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedConcern": [ @@ -10286,7 +10286,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedConnection": [ @@ -10294,7 +10294,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedConstraint": [ @@ -10302,7 +10302,7 @@ 0, 2, 0, - 2489, + 2491, 0 ], "AttributeUsage.nestedEnumeration": [ @@ -10310,7 +10310,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedFlow": [ @@ -10318,7 +10318,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedInterface": [ @@ -10326,7 +10326,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedItem": [ @@ -10334,7 +10334,7 @@ 0, 4, 0, - 2487, + 2489, 0 ], "AttributeUsage.nestedMetadata": [ @@ -10342,7 +10342,7 @@ 0, 9, 0, - 2482, + 2484, 0 ], "AttributeUsage.nestedOccurrence": [ @@ -10350,7 +10350,7 @@ 0, 6, 0, - 2485, + 2487, 0 ], "AttributeUsage.nestedPart": [ @@ -10358,7 +10358,7 @@ 0, 1, 0, - 2490, + 2492, 0 ], "AttributeUsage.nestedPort": [ @@ -10366,7 +10366,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedReference": [ @@ -10374,7 +10374,7 @@ 0, 65, 0, - 2426, + 2428, 0 ], "AttributeUsage.nestedRendering": [ @@ -10382,7 +10382,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedRequirement": [ @@ -10390,7 +10390,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedState": [ @@ -10398,7 +10398,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedTransition": [ @@ -10406,7 +10406,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedUsage": [ @@ -10414,7 +10414,7 @@ 0, 97, 0, - 2394, + 2396, 0 ], "AttributeUsage.nestedUseCase": [ @@ -10422,7 +10422,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedVerificationCase": [ @@ -10430,7 +10430,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedView": [ @@ -10438,7 +10438,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.nestedViewpoint": [ @@ -10446,7 +10446,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.output": [ @@ -10454,7 +10454,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedAnnotation": [ @@ -10462,7 +10462,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedDifferencing": [ @@ -10470,7 +10470,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedDisjoining": [ @@ -10478,13 +10478,13 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedElement": [ 0, 0, - 2408, + 2410, 0, 83, 0 @@ -10494,7 +10494,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedFeature": [ @@ -10502,7 +10502,7 @@ 0, 0, 0, - 2394, + 2396, 0 ], "AttributeUsage.ownedFeatureChaining": [ @@ -10510,7 +10510,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedFeatureInverting": [ @@ -10518,7 +10518,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedFeatureMembership": [ @@ -10526,7 +10526,7 @@ 0, 0, 0, - 2394, + 2396, 0 ], "AttributeUsage.ownedImport": [ @@ -10534,7 +10534,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedIntersecting": [ @@ -10542,20 +10542,20 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedMember": [ 62, 54, - 2292, + 2294, 0, 83, 0 ], "AttributeUsage.ownedMembership": [ 1178, - 622, + 624, 608, 0, 83, @@ -10566,7 +10566,7 @@ 0, 0, 0, - 1471, + 1473, 0 ], "AttributeUsage.ownedReferenceSubsetting": [ @@ -10578,16 +10578,16 @@ 0 ], "AttributeUsage.ownedRelationship": [ - 113, - 2323, + 1242, + 1196, 36, 0, 19, 0 ], "AttributeUsage.ownedSpecialization": [ - 2298, - 30, + 2330, + 0, 0, 0, 163, @@ -10598,7 +10598,7 @@ 0, 0, 0, - 1259, + 1261, 0 ], "AttributeUsage.ownedTypeFeaturing": [ @@ -10606,11 +10606,11 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.ownedTyping": [ - 1133, + 1135, 0, 0, 0, @@ -10622,11 +10622,11 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.owner": [ - 2491, + 2493, 0, 0, 0, @@ -10644,13 +10644,13 @@ "AttributeUsage.owningFeatureMembership": [ 0, 0, - 2323, + 2325, 0, 0, 0 ], "AttributeUsage.owningMembership": [ - 2475, + 2477, 16, 0, 0, @@ -10658,7 +10658,7 @@ 0 ], "AttributeUsage.owningNamespace": [ - 2489, + 2491, 0, 2, 0, @@ -10666,7 +10666,7 @@ 0 ], "AttributeUsage.owningRelationship": [ - 2475, + 2477, 16, 0, 0, @@ -10676,7 +10676,7 @@ "AttributeUsage.owningType": [ 0, 0, - 2323, + 2325, 0, 0, 0 @@ -10684,7 +10684,7 @@ "AttributeUsage.owningUsage": [ 0, 0, - 927, + 929, 0, 0, 0 @@ -10693,7 +10693,7 @@ 2048, 429, 0, - 12, + 14, 0, 0 ], @@ -10734,7 +10734,7 @@ 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.type": [ @@ -10743,14 +10743,14 @@ 1358, 0, 0, - 1011 + 1013 ], "AttributeUsage.unioningType": [ 0, 0, 0, 0, - 2491, + 2493, 0 ], "AttributeUsage.upperBound": [ @@ -10766,14 +10766,14 @@ 0, 708, 0, - 1783, + 1785, 0 ], "AttributeUsage.value": [ 0, 0, 0, - 1650, + 1652, 0, 0 ], @@ -10782,7 +10782,7 @@ 0, 0, 0, - 2484, + 2486, 0 ], "AttributeUsage.variantMembership": [ @@ -10790,7 +10790,7 @@ 0, 0, 0, - 2484, + 2486, 0 ], "AttributeUsage.visibility": [ @@ -11610,8 +11610,8 @@ 0 ], "BindingConnector.ownedRelationship": [ - 7, - 1, + 8, + 0, 0, 0, 0, @@ -12466,8 +12466,8 @@ 0 ], "BindingConnectorAsUsage.ownedRelationship": [ - 2, - 1, + 3, + 0, 0, 0, 0, @@ -13082,8 +13082,8 @@ 0 ], "BooleanExpression.ownedRelationship": [ - 1, - 3, + 2, + 2, 0, 0, 0, @@ -13714,8 +13714,8 @@ 0 ], "CalculationDefinition.ownedRelationship": [ - 70, - 103, + 172, + 1, 0, 0, 0, @@ -14554,8 +14554,8 @@ 0 ], "CalculationUsage.ownedFeature": [ - 84, - 6, + 86, + 4, 0, 1, 23, @@ -14602,8 +14602,8 @@ 0 ], "CalculationUsage.ownedMember": [ - 84, - 6, + 86, + 4, 2, 1, 21, @@ -14626,8 +14626,8 @@ 0 ], "CalculationUsage.ownedRelationship": [ - 40, - 74, + 113, + 1, 0, 0, 0, @@ -15314,8 +15314,8 @@ 0 ], "CaseDefinition.ownedRelationship": [ - 1, - 2, + 3, + 0, 0, 0, 0, @@ -16250,9 +16250,9 @@ 0 ], "CaseUsage.ownedRelationship": [ - 0, 2, 0, + 0, 3, 0, 0 @@ -17154,8 +17154,8 @@ 0 ], "Classifier.ownedRelationship": [ - 47, - 18, + 59, + 6, 10, 0, 29, @@ -19418,8 +19418,8 @@ 0 ], "ConcernUsage.ownedRelationship": [ - 15, - 3, + 18, + 0, 0, 0, 3, @@ -21138,8 +21138,8 @@ 0 ], "ConnectionDefinition.ownedRelationship": [ - 36, - 7, + 43, + 0, 0, 0, 0, @@ -22098,8 +22098,8 @@ 0 ], "ConnectionUsage.ownedRelationship": [ - 18, - 61, + 79, + 0, 0, 0, 0, @@ -22762,16 +22762,16 @@ 0 ], "Connector.ownedRelationship": [ - 6, - 30, + 35, + 1, 0, 0, 0, 0 ], "Connector.ownedSpecialization": [ - 25, - 4, + 29, + 0, 0, 0, 7, @@ -23410,8 +23410,8 @@ 0 ], "ConstraintDefinition.ownedRelationship": [ - 24, - 1, + 25, + 0, 0, 0, 1, @@ -24306,8 +24306,8 @@ 0 ], "ConstraintUsage.ownedRelationship": [ - 153, - 17, + 165, + 5, 10, 0, 2, @@ -28226,8 +28226,8 @@ 0 ], "EnumerationDefinition.ownedRelationship": [ - 16, - 8, + 24, + 0, 0, 0, 1, @@ -29074,8 +29074,8 @@ 0 ], "EnumerationUsage.ownedRelationship": [ - 25, - 2, + 27, + 0, 0, 0, 40, @@ -29906,24 +29906,24 @@ 0 ], "EventOccurrenceUsage.ownedRelationship": [ - 40, - 54, + 94, + 0, 0, 0, 85, 0 ], "EventOccurrenceUsage.ownedSpecialization": [ - 49, - 28, + 77, + 0, 0, 0, 102, 0 ], "EventOccurrenceUsage.ownedSubsetting": [ - 53, - 24, + 77, + 0, 0, 0, 102, @@ -30810,24 +30810,24 @@ 0 ], "ExhibitStateUsage.ownedRelationship": [ - 35, - 9, + 41, + 3, 0, 0, 5, 0 ], "ExhibitStateUsage.ownedSpecialization": [ - 19, - 7, + 26, + 0, 0, 0, 23, 0 ], "ExhibitStateUsage.ownedSubsetting": [ - 10, - 7, + 17, + 0, 0, 0, 32, @@ -31434,8 +31434,8 @@ 0 ], "Expression.ownedRelationship": [ - 33, - 6, + 39, + 0, 0, 0, 0, @@ -31590,15 +31590,15 @@ 0, 0, 0, - 10010, + 10036, 0 ], "Feature.chainingFeature": [ 135, 40, - 113, + 121, 0, - 9698, + 9716, 24 ], "Feature.chains": [ @@ -31646,7 +31646,7 @@ 0, 4, 0, - 10006, + 10032, 0 ], "Feature.directedFeature": [ @@ -31654,14 +31654,14 @@ 0, 572, 0, - 9438, + 9464, 0 ], "Feature.direction": [ - 8532, + 8550, 186, 0, - 93, + 101, 0, 0 ], @@ -31678,7 +31678,7 @@ 0, 21, 0, - 9989, + 10015, 0 ], "Feature.endFeature": [ @@ -31686,7 +31686,7 @@ 0, 55, 0, - 9955, + 9981, 0 ], "Feature.endOwningType": [ @@ -31700,7 +31700,7 @@ "Feature.feature": [ 0, 0, - 10004, + 10030, 0, 6, 0 @@ -31708,7 +31708,7 @@ "Feature.featureMembership": [ 0, 0, - 10004, + 10030, 0, 6, 0 @@ -31716,7 +31716,7 @@ "Feature.featureTarget": [ 0, 0, - 10010, + 10036, 0, 0, 0 @@ -31724,7 +31724,7 @@ "Feature.featuringType": [ 67, 2, - 9726, + 9752, 0, 214, 1 @@ -31734,13 +31734,13 @@ 0, 15, 0, - 9995, + 10021, 0 ], "Feature.inheritedFeature": [ 0, 0, - 10010, + 10036, 0, 0, 0 @@ -31748,7 +31748,7 @@ "Feature.inheritedMembership": [ 0, 0, - 10010, + 10036, 0, 0, 0 @@ -31758,7 +31758,7 @@ 0, 400, 0, - 9610, + 9636, 0 ], "Feature.intersectingType": [ @@ -31766,7 +31766,7 @@ 0, 3, 0, - 10007, + 10033, 0 ], "Feature.intersects": [ @@ -31790,11 +31790,11 @@ 0, 0, 0, - 10002, + 10028, 0 ], "Feature.isComposite": [ - 9976, + 10002, 34, 0, 0, @@ -31804,7 +31804,7 @@ "Feature.isConjugated": [ 0, 0, - 10010, + 10036, 0, 0, 0 @@ -31814,7 +31814,7 @@ 0, 0, 0, - 10000, + 10026, 0 ], "Feature.isDefault": [ @@ -31830,7 +31830,7 @@ 0, 0, 0, - 10008, + 10034, 0 ], "Feature.isEnd": [ @@ -31838,7 +31838,7 @@ 0, 0, 0, - 9868, + 9894, 0 ], "Feature.isImpliedIncluded": [ @@ -31846,7 +31846,7 @@ 0, 0, 0, - 10010, + 10036, 0 ], "Feature.isInitial": [ @@ -31860,7 +31860,7 @@ "Feature.isLibraryElement": [ 0, 0, - 10010, + 10036, 0, 0, 0 @@ -31870,7 +31870,7 @@ 0, 0, 0, - 9997, + 10023, 0 ], "Feature.isPortion": [ @@ -31878,7 +31878,7 @@ 0, 0, 0, - 9976, + 10002, 0 ], "Feature.isResult": [ @@ -31894,7 +31894,7 @@ 0, 0, 0, - 10010, + 10036, 0 ], "Feature.isUnique": [ @@ -31902,7 +31902,7 @@ 0, 0, 0, - 10004, + 10030, 0 ], "Feature.isVariable": [ @@ -31910,7 +31910,7 @@ 0, 75, 0, - 9935, + 9961, 0 ], "Feature.lowerBound": [ @@ -31924,7 +31924,7 @@ "Feature.member": [ 0, 0, - 10010, + 10036, 0, 0, 0 @@ -31932,7 +31932,7 @@ "Feature.membership": [ 0, 0, - 10010, + 10036, 0, 0, 0 @@ -31948,7 +31948,7 @@ "Feature.name": [ 186, 0, - 9490, + 9508, 0, 0, 0 @@ -31958,7 +31958,7 @@ 0, 412, 0, - 9598, + 9624, 0 ], "Feature.ownedAnnotation": [ @@ -31966,7 +31966,7 @@ 0, 0, 0, - 10010, + 10036, 0 ], "Feature.ownedConjugator": [ @@ -31990,7 +31990,7 @@ 0, 4, 0, - 10006, + 10032, 0 ], "Feature.ownedDisjoining": [ @@ -31998,15 +31998,15 @@ 0, 3, 0, - 10007, + 10033, 0 ], "Feature.ownedElement": [ 0, 0, - 4863, + 4879, 0, - 5147, + 5157, 0 ], "Feature.ownedEndFeature": [ @@ -32014,23 +32014,23 @@ 0, 1, 0, - 10009, + 10035, 0 ], "Feature.ownedFeature": [ 121, 4, - 558, + 566, 0, - 9321, + 9339, 6 ], "Feature.ownedFeatureChaining": [ 199, 0, - 113, + 121, 0, - 9698, + 9716, 0 ], "Feature.ownedFeatureInverting": [ @@ -32038,15 +32038,15 @@ 0, 7, 0, - 10003, + 10029, 0 ], "Feature.ownedFeatureMembership": [ 130, 1, - 558, + 566, 0, - 9321, + 9339, 0 ], "Feature.ownedImport": [ @@ -32054,7 +32054,7 @@ 0, 0, 0, - 9995, + 10021, 0 ], "Feature.ownedIntersecting": [ @@ -32062,23 +32062,23 @@ 0, 3, 0, - 10007, + 10033, 0 ], "Feature.ownedMember": [ 119, 104, - 4617, + 4633, 0, - 5162, + 5172, 8 ], "Feature.ownedMembership": [ - 4262, - 560, + 4270, + 568, 26, 92, - 5070, + 5080, 0 ], "Feature.ownedRedefinition": [ @@ -32086,7 +32086,7 @@ 0, 633, 0, - 9101, + 9127, 0 ], "Feature.ownedReferenceSubsetting": [ @@ -32098,27 +32098,27 @@ 0 ], "Feature.ownedRelationship": [ - 3670, - 1781, - 124, + 4078, + 1389, + 132, 88, - 4347, + 4349, 0 ], "Feature.ownedSpecialization": [ - 756, - 130, + 866, + 20, 657, 29, - 8438, + 8464, 0 ], "Feature.ownedSubsetting": [ - 354, - 17, + 363, + 8, 645, 6, - 8988, + 9014, 0 ], "Feature.ownedTypeFeaturing": [ @@ -32126,7 +32126,7 @@ 0, 70, 0, - 9940, + 9966, 0 ], "Feature.ownedTyping": [ @@ -32134,7 +32134,7 @@ 0, 24, 23, - 9302, + 9328, 0 ], "Feature.ownedUnioning": [ @@ -32142,11 +32142,11 @@ 0, 7, 0, - 10003, + 10029, 0 ], "Feature.owner": [ - 10010, + 10036, 0, 0, 0, @@ -32156,14 +32156,14 @@ "Feature.owningFeatureMembership": [ 0, 0, - 9445, + 9463, 0, 0, 0 ], "Feature.owningMembership": [ - 9482, - 342, + 9500, + 350, 0, 0, 0, @@ -32172,14 +32172,14 @@ "Feature.owningNamespace": [ 1133, 0, - 8691, + 8717, 0, 0, 0 ], "Feature.owningRelationship": [ - 9667, - 343, + 9685, + 351, 0, 0, 0, @@ -32188,7 +32188,7 @@ "Feature.owningType": [ 0, 0, - 9445, + 9463, 0, 0, 0 @@ -32238,13 +32238,13 @@ 0, 0, 0, - 10010, + 10036, 0 ], "Feature.type": [ 346, 120, - 9371, + 9397, 0, 0, 173 @@ -32254,7 +32254,7 @@ 0, 7, 0, - 10003, + 10029, 0 ], "Feature.unions": [ @@ -32286,12 +32286,12 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.argument": [ 415, - 89, + 97, 0, 0, 0, @@ -32300,7 +32300,7 @@ "FeatureChainExpression.behavior": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32310,7 +32310,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.differencingType": [ @@ -32318,13 +32318,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.directedFeature": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32334,7 +32334,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.endFeature": [ @@ -32342,13 +32342,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.feature": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32356,7 +32356,7 @@ "FeatureChainExpression.featureMembership": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32364,7 +32364,7 @@ "FeatureChainExpression.featureTarget": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32372,7 +32372,7 @@ "FeatureChainExpression.featuringType": [ 0, 0, - 276, + 284, 0, 228, 0 @@ -32380,7 +32380,7 @@ "FeatureChainExpression.function": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32390,13 +32390,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.inheritedFeature": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32404,13 +32404,13 @@ "FeatureChainExpression.inheritedMembership": [ 0, 0, - 504, + 512, 0, 0, 0 ], "FeatureChainExpression.input": [ - 504, + 512, 0, 0, 0, @@ -32420,7 +32420,7 @@ "FeatureChainExpression.instantiatedType": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32430,7 +32430,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isAbstract": [ @@ -32438,11 +32438,11 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isComposite": [ - 504, + 512, 0, 0, 0, @@ -32452,7 +32452,7 @@ "FeatureChainExpression.isConjugated": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32462,7 +32462,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isDerived": [ @@ -32470,7 +32470,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isEnd": [ @@ -32478,7 +32478,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isImpliedIncluded": [ @@ -32486,13 +32486,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isLibraryElement": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32500,7 +32500,7 @@ "FeatureChainExpression.isModelLevelEvaluable": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32510,7 +32510,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isPortion": [ @@ -32518,7 +32518,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isSufficient": [ @@ -32526,7 +32526,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isUnique": [ @@ -32534,7 +32534,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.isVariable": [ @@ -32542,13 +32542,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.member": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32556,7 +32556,7 @@ "FeatureChainExpression.membership": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32566,13 +32566,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.operator": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32580,7 +32580,7 @@ "FeatureChainExpression.output": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32590,7 +32590,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedDifferencing": [ @@ -32598,7 +32598,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedDisjoining": [ @@ -32606,13 +32606,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedElement": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32622,12 +32622,12 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedFeature": [ 415, - 89, + 97, 0, 0, 0, @@ -32638,7 +32638,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedFeatureInverting": [ @@ -32646,11 +32646,11 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedFeatureMembership": [ - 504, + 512, 0, 0, 0, @@ -32662,7 +32662,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedIntersecting": [ @@ -32670,20 +32670,20 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedMember": [ 0, 0, - 504, + 512, 0, 0, 0 ], "FeatureChainExpression.ownedMembership": [ 415, - 89, + 97, 0, 0, 0, @@ -32694,12 +32694,12 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedRelationship": [ 415, - 89, + 97, 0, 0, 0, @@ -32710,7 +32710,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedSubsetting": [ @@ -32718,7 +32718,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedTypeFeaturing": [ @@ -32726,7 +32726,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedTyping": [ @@ -32734,7 +32734,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.ownedUnioning": [ @@ -32742,11 +32742,11 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.owner": [ - 504, + 512, 0, 0, 0, @@ -32762,7 +32762,7 @@ 0 ], "FeatureChainExpression.owningMembership": [ - 504, + 512, 0, 0, 0, @@ -32772,13 +32772,13 @@ "FeatureChainExpression.owningNamespace": [ 11, 0, - 493, + 501, 0, 0, 0 ], "FeatureChainExpression.owningRelationship": [ - 504, + 512, 0, 0, 0, @@ -32795,7 +32795,7 @@ ], "FeatureChainExpression.parameter": [ 415, - 89, + 97, 0, 0, 0, @@ -32811,7 +32811,7 @@ ], "FeatureChainExpression.result": [ 415, - 89, + 97, 0, 0, 0, @@ -32819,7 +32819,7 @@ ], "FeatureChainExpression.targetFeature": [ 368, - 103, + 111, 0, 0, 0, @@ -32830,13 +32830,13 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChainExpression.type": [ 0, 0, - 504, + 512, 0, 0, 0 @@ -32846,7 +32846,7 @@ 0, 0, 0, - 504, + 512, 0 ], "FeatureChaining.aliasIds": [ @@ -33934,7 +33934,7 @@ 0, 0, 0, - 5912, + 5914, 0 ], "FeatureTyping.declaredName": [ @@ -33950,7 +33950,7 @@ 0, 1, 0, - 5911, + 5913, 0 ], "FeatureTyping.general": [ @@ -33959,14 +33959,14 @@ 4, 0, 0, - 2236 + 2238 ], "FeatureTyping.isImplied": [ 0, 0, 0, 0, - 5912, + 5914, 0 ], "FeatureTyping.isImpliedIncluded": [ @@ -33974,13 +33974,13 @@ 0, 0, 0, - 5912, + 5914, 0 ], "FeatureTyping.isLibraryElement": [ 0, 0, - 5912, + 5914, 0, 0, 0 @@ -33998,7 +33998,7 @@ 0, 1, 0, - 5911, + 5913, 0 ], "FeatureTyping.ownedElement": [ @@ -34006,7 +34006,7 @@ 0, 1, 0, - 5911, + 5913, 0 ], "FeatureTyping.ownedRelatedElement": [ @@ -34014,7 +34014,7 @@ 0, 0, 1, - 5911, + 5913, 0 ], "FeatureTyping.ownedRelationship": [ @@ -34022,7 +34022,7 @@ 1, 0, 3, - 5908, + 5910, 0 ], "FeatureTyping.ownedSpecialization": [ @@ -34045,12 +34045,12 @@ 4, 0, 0, - 5908, + 5910, 0, 0 ], "FeatureTyping.owningFeature": [ - 5908, + 5910, 0, 0, 0, @@ -34074,7 +34074,7 @@ 0 ], "FeatureTyping.owningRelatedElement": [ - 5908, + 5910, 0, 0, 0, @@ -34092,7 +34092,7 @@ "FeatureTyping.owningType": [ 0, 0, - 5908, + 5910, 0, 0, 0 @@ -34111,10 +34111,10 @@ 4, 0, 0, - 2236 + 2238 ], "FeatureTyping.source": [ - 5908, + 5910, 0, 4, 0, @@ -34122,7 +34122,7 @@ 0 ], "FeatureTyping.specific": [ - 5908, + 5910, 0, 4, 0, @@ -34135,14 +34135,14 @@ 4, 0, 0, - 2236 + 2238 ], "FeatureTyping.textualRepresentation": [ 0, 0, 0, 0, - 5912, + 5914, 0 ], "FeatureTyping.type": [ @@ -34151,10 +34151,10 @@ 0, 0, 0, - 2236 + 2238 ], "FeatureTyping.typedFeature": [ - 5910, + 5912, 2, 0, 0, @@ -34166,7 +34166,7 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.documentation": [ @@ -34174,11 +34174,11 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.featureWithValue": [ - 7048, + 7066, 0, 0, 0, @@ -34190,7 +34190,7 @@ 0, 0, 0, - 6981, + 6999, 0 ], "FeatureValue.isImplied": [ @@ -34198,7 +34198,7 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.isImpliedIncluded": [ @@ -34206,7 +34206,7 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.isInitial": [ @@ -34214,20 +34214,20 @@ 0, 0, 0, - 7033, + 7051, 0 ], "FeatureValue.isLibraryElement": [ 0, 0, - 7048, + 7066, 0, 0, 0 ], "FeatureValue.memberElement": [ - 6750, - 298, + 6760, + 306, 0, 0, 0, @@ -34236,13 +34236,13 @@ "FeatureValue.memberElementId": [ 0, 0, - 7048, + 7066, 0, 0, 0 ], "FeatureValue.membershipOwningNamespace": [ - 7048, + 7066, 0, 0, 0, @@ -34254,7 +34254,7 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.ownedElement": [ @@ -34262,12 +34262,12 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.ownedMemberElement": [ - 6750, - 298, + 6760, + 306, 0, 0, 0, @@ -34276,14 +34276,14 @@ "FeatureValue.ownedMemberElementId": [ 0, 0, - 7048, + 7066, 0, 0, 0 ], "FeatureValue.ownedRelatedElement": [ - 6750, - 298, + 6760, + 306, 0, 0, 0, @@ -34294,19 +34294,19 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.owner": [ 0, 0, 0, - 7048, + 7066, 0, 0 ], "FeatureValue.owningRelatedElement": [ - 7048, + 7066, 0, 0, 0, @@ -34316,7 +34316,7 @@ "FeatureValue.relatedElement": [ 0, 0, - 7048, + 7066, 0, 0, 0 @@ -34324,7 +34324,7 @@ "FeatureValue.source": [ 0, 0, - 7048, + 7066, 0, 0, 0 @@ -34332,7 +34332,7 @@ "FeatureValue.target": [ 0, 0, - 7048, + 7066, 0, 0, 0 @@ -34342,12 +34342,12 @@ 0, 0, 0, - 7048, + 7066, 0 ], "FeatureValue.value": [ - 6750, - 298, + 6760, + 306, 0, 0, 0, @@ -34356,7 +34356,7 @@ "FeatureValue.visibility": [ 0, 0, - 7048, + 7066, 0, 0, 0 @@ -35482,8 +35482,8 @@ 0 ], "FlowDefinition.ownedRelationship": [ - 3, - 3, + 6, + 0, 0, 0, 1, @@ -36474,16 +36474,16 @@ 0 ], "FlowUsage.ownedRelationship": [ - 37, - 69, + 59, + 47, 0, 0, 0, 0 ], "FlowUsage.ownedSpecialization": [ - 19, - 6, + 25, + 0, 0, 0, 81, @@ -38970,8 +38970,8 @@ 0 ], "Function.ownedRelationship": [ - 10, - 1, + 11, + 0, 0, 0, 0, @@ -40682,24 +40682,24 @@ 0 ], "IncludeUseCaseUsage.ownedRelationship": [ - 7, - 12, + 19, + 0, 0, 0, 0, 0 ], "IncludeUseCaseUsage.ownedSpecialization": [ - 17, - 1, + 18, + 0, 0, 0, 1, 0 ], "IncludeUseCaseUsage.ownedSubsetting": [ - 11, - 1, + 12, + 0, 0, 0, 7, @@ -42370,8 +42370,8 @@ 0 ], "InterfaceDefinition.ownedRelationship": [ - 28, - 3, + 30, + 1, 0, 0, 0, @@ -43338,8 +43338,8 @@ 0 ], "InterfaceUsage.ownedRelationship": [ - 4, 39, + 4, 0, 0, 0, @@ -44150,11 +44150,11 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.argument": [ - 434, + 436, 4, 0, 14, @@ -44164,7 +44164,7 @@ "InvocationExpression.behavior": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44174,7 +44174,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.differencingType": [ @@ -44182,13 +44182,13 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.directedFeature": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44198,7 +44198,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.endFeature": [ @@ -44206,13 +44206,13 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.feature": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44220,7 +44220,7 @@ "InvocationExpression.featureMembership": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44228,7 +44228,7 @@ "InvocationExpression.featureTarget": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44238,11 +44238,11 @@ 0, 398, 0, - 70, + 72, 0 ], "InvocationExpression.function": [ - 112, + 114, 19, 4, 0, @@ -44254,13 +44254,13 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.inheritedFeature": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44268,13 +44268,13 @@ "InvocationExpression.inheritedMembership": [ 0, 0, - 468, + 470, 0, 0, 0 ], "InvocationExpression.input": [ - 375, + 377, 77, 1, 0, @@ -44284,7 +44284,7 @@ "InvocationExpression.instantiatedType": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44294,7 +44294,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isAbstract": [ @@ -44302,11 +44302,11 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isComposite": [ - 468, + 470, 0, 0, 0, @@ -44316,7 +44316,7 @@ "InvocationExpression.isConjugated": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44326,7 +44326,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isDerived": [ @@ -44334,7 +44334,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isEnd": [ @@ -44342,7 +44342,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isImpliedIncluded": [ @@ -44350,13 +44350,13 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isLibraryElement": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44364,7 +44364,7 @@ "InvocationExpression.isModelLevelEvaluable": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44374,7 +44374,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isPortion": [ @@ -44382,7 +44382,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isSufficient": [ @@ -44390,7 +44390,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isUnique": [ @@ -44398,7 +44398,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.isVariable": [ @@ -44406,13 +44406,13 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.member": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44420,7 +44420,7 @@ "InvocationExpression.membership": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44430,13 +44430,13 @@ 0, 0, 29, - 439, + 441, 0 ], "InvocationExpression.output": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44446,7 +44446,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedDifferencing": [ @@ -44454,7 +44454,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedDisjoining": [ @@ -44462,13 +44462,13 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedElement": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44478,11 +44478,11 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedFeature": [ - 464, + 466, 4, 0, 0, @@ -44494,7 +44494,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedFeatureInverting": [ @@ -44502,11 +44502,11 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedFeatureMembership": [ - 468, + 470, 0, 0, 0, @@ -44518,7 +44518,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedIntersecting": [ @@ -44526,19 +44526,19 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedMember": [ 0, 0, - 468, + 470, 0, 0, 0 ], "InvocationExpression.ownedMembership": [ - 439, + 441, 29, 0, 0, @@ -44550,11 +44550,11 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedRelationship": [ - 439, + 441, 29, 0, 0, @@ -44566,7 +44566,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedSubsetting": [ @@ -44574,7 +44574,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedTypeFeaturing": [ @@ -44582,7 +44582,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedTyping": [ @@ -44590,7 +44590,7 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.ownedUnioning": [ @@ -44598,11 +44598,11 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.owner": [ - 468, + 470, 0, 0, 0, @@ -44618,7 +44618,7 @@ 0 ], "InvocationExpression.owningMembership": [ - 468, + 470, 0, 0, 0, @@ -44628,13 +44628,13 @@ "InvocationExpression.owningNamespace": [ 127, 0, - 341, + 343, 0, 0, 0 ], "InvocationExpression.owningRelationship": [ - 468, + 470, 0, 0, 0, @@ -44650,7 +44650,7 @@ 0 ], "InvocationExpression.parameter": [ - 389, + 391, 79, 0, 0, @@ -44666,7 +44666,7 @@ 0 ], "InvocationExpression.result": [ - 464, + 466, 4, 0, 0, @@ -44678,13 +44678,13 @@ 0, 0, 0, - 468, + 470, 0 ], "InvocationExpression.type": [ 0, 0, - 468, + 470, 0, 0, 0 @@ -44694,7 +44694,7 @@ 0, 0, 0, - 468, + 470, 0 ], "ItemDefinition.aliasIds": [ @@ -45138,8 +45138,8 @@ 0 ], "ItemDefinition.ownedRelationship": [ - 55, - 11, + 60, + 6, 0, 0, 101, @@ -46050,16 +46050,16 @@ 0 ], "ItemUsage.ownedRelationship": [ - 36, - 287, + 89, + 234, 33, 0, 10, 0 ], "ItemUsage.ownedSpecialization": [ - 291, - 18, + 307, + 2, 0, 0, 57, @@ -49654,7 +49654,7 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.documentation": [ @@ -49662,7 +49662,7 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.isImplied": [ @@ -49670,7 +49670,7 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.isImpliedIncluded": [ @@ -49678,19 +49678,19 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.isLibraryElement": [ 0, 0, - 3144, + 3146, 0, 0, 0 ], "Membership.memberElement": [ - 2145, + 2147, 99, 0, 0, @@ -49700,7 +49700,7 @@ "Membership.memberElementId": [ 0, 0, - 3144, + 3146, 0, 0, 0 @@ -49708,7 +49708,7 @@ "Membership.membershipOwningNamespace": [ 99, 0, - 3045, + 3047, 0, 0, 0 @@ -49718,7 +49718,7 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.ownedElement": [ @@ -49726,7 +49726,7 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.ownedRelatedElement": [ @@ -49734,7 +49734,7 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.ownedRelationship": [ @@ -49742,14 +49742,14 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.owner": [ 0, 0, 0, - 3144, + 3146, 0, 0 ], @@ -49762,7 +49762,7 @@ 0 ], "Membership.owningRelatedElement": [ - 3144, + 3146, 0, 0, 0, @@ -49780,7 +49780,7 @@ "Membership.relatedElement": [ 0, 0, - 3144, + 3146, 0, 0, 0 @@ -49788,7 +49788,7 @@ "Membership.source": [ 0, 0, - 3144, + 3146, 0, 0, 0 @@ -49796,7 +49796,7 @@ "Membership.target": [ 0, 0, - 3144, + 3146, 0, 0, 0 @@ -49806,13 +49806,13 @@ 0, 0, 0, - 3144, + 3146, 0 ], "Membership.visibility": [ 0, 0, - 3144, + 3146, 0, 0, 0 @@ -51314,8 +51314,8 @@ 0 ], "Metaclass.ownedRelationship": [ - 4, - 4, + 8, + 0, 0, 0, 2, @@ -52370,8 +52370,8 @@ 0 ], "MetadataDefinition.ownedRelationship": [ - 12, - 6, + 18, + 0, 0, 0, 18, @@ -53786,8 +53786,8 @@ 0 ], "MetadataUsage.ownedRelationship": [ - 262, - 117, + 269, + 110, 0, 0, 0, @@ -56658,8 +56658,8 @@ 0 ], "OccurrenceDefinition.ownedRelationship": [ - 15, - 37, + 17, + 35, 2, 0, 1, @@ -57538,24 +57538,24 @@ 0 ], "OccurrenceUsage.ownedRelationship": [ - 69, - 62, + 114, + 17, 0, 0, 13, 0 ], "OccurrenceUsage.ownedSpecialization": [ - 74, - 12, + 80, + 6, 0, 0, 58, 0 ], "OccurrenceUsage.ownedSubsetting": [ - 17, - 10, + 21, + 6, 0, 0, 117, @@ -58702,7 +58702,7 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.documentation": [ @@ -58710,7 +58710,7 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.isImplied": [ @@ -58718,7 +58718,7 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.isImpliedIncluded": [ @@ -58726,19 +58726,19 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.isLibraryElement": [ 0, 0, - 4376, + 4392, 0, 0, 0 ], "ParameterMembership.memberElement": [ - 4167, + 4183, 209, 0, 0, @@ -58748,7 +58748,7 @@ "ParameterMembership.memberElementId": [ 0, 0, - 4376, + 4392, 0, 0, 0 @@ -58756,13 +58756,13 @@ "ParameterMembership.memberName": [ 0, 0, - 4360, + 4376, 0, 0, 0 ], "ParameterMembership.membershipOwningNamespace": [ - 4376, + 4392, 0, 0, 0, @@ -58774,7 +58774,7 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.ownedElement": [ @@ -58782,11 +58782,11 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.ownedMemberElement": [ - 4167, + 4183, 209, 0, 0, @@ -58796,13 +58796,13 @@ "ParameterMembership.ownedMemberElementId": [ 0, 0, - 4376, + 4392, 0, 0, 0 ], "ParameterMembership.ownedMemberFeature": [ - 4163, + 4179, 209, 4, 0, @@ -58812,13 +58812,13 @@ "ParameterMembership.ownedMemberName": [ 0, 0, - 4360, + 4376, 0, 0, 0 ], "ParameterMembership.ownedMemberParameter": [ - 4167, + 4183, 209, 0, 0, @@ -58826,7 +58826,7 @@ 0 ], "ParameterMembership.ownedRelatedElement": [ - 4167, + 4183, 209, 0, 0, @@ -58838,19 +58838,19 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.owner": [ 0, 0, 0, - 4376, + 4392, 0, 0 ], "ParameterMembership.owningRelatedElement": [ - 4376, + 4392, 0, 0, 0, @@ -58860,7 +58860,7 @@ "ParameterMembership.owningType": [ 61, 0, - 4315, + 4331, 0, 0, 0 @@ -58868,7 +58868,7 @@ "ParameterMembership.relatedElement": [ 0, 0, - 4376, + 4392, 0, 0, 0 @@ -58876,7 +58876,7 @@ "ParameterMembership.source": [ 0, 0, - 4376, + 4392, 0, 0, 0 @@ -58884,7 +58884,7 @@ "ParameterMembership.target": [ 0, 0, - 4376, + 4392, 0, 0, 0 @@ -58894,13 +58894,13 @@ 0, 0, 0, - 4376, + 4392, 0 ], "ParameterMembership.visibility": [ 0, 0, - 4376, + 4392, 0, 0, 0 @@ -59378,8 +59378,8 @@ 0 ], "PartDefinition.ownedRelationship": [ - 423, - 216, + 618, + 21, 1, 0, 279, @@ -60346,24 +60346,24 @@ 0 ], "PartUsage.ownedRelationship": [ - 309, - 1551, + 858, + 1002, 52, 0, 40, 0 ], "PartUsage.ownedSpecialization": [ - 1514, - 37, + 1549, + 2, 0, 0, 401, 0 ], "PartUsage.ownedSubsetting": [ - 359, - 12, + 371, + 0, 2, 0, 1579, @@ -60946,8 +60946,8 @@ 0 ], "PayloadFeature.ownedRelationship": [ - 4, - 1, + 5, + 0, 0, 0, 0, @@ -61778,24 +61778,24 @@ 0 ], "PerformActionUsage.ownedRelationship": [ - 96, - 35, + 129, + 2, 2, 0, 24, 0 ], "PerformActionUsage.ownedSpecialization": [ - 97, - 17, + 114, + 0, 2, 0, 41, 0 ], "PerformActionUsage.ownedSubsetting": [ - 88, - 17, + 105, + 0, 2, 0, 50, @@ -62602,8 +62602,8 @@ 0 ], "PortDefinition.ownedRelationship": [ - 74, - 51, + 77, + 48, 0, 0, 0, @@ -63490,16 +63490,16 @@ 0 ], "PortUsage.ownedRelationship": [ - 20, - 415, + 99, + 336, 30, 1, 2, 0 ], "PortUsage.ownedSpecialization": [ - 412, - 10, + 418, + 4, 0, 1, 45, @@ -65250,24 +65250,24 @@ 0 ], "ReferenceUsage.ownedRelationship": [ - 1255, - 838, + 2005, + 88, 3, 0, 98, 0 ], "ReferenceUsage.ownedSpecialization": [ - 1650, - 75, + 1707, + 18, 4, 0, 465, 0 ], "ReferenceUsage.ownedSubsetting": [ - 808, - 22, + 814, + 16, 6, 0, 1358, @@ -65898,10 +65898,10 @@ 0 ], "RenderingDefinition.ownedRelationship": [ - 0, 1, 0, 0, + 0, 1, 0 ], @@ -66778,8 +66778,8 @@ 0 ], "RenderingUsage.ownedRelationship": [ - 1, - 33, + 4, + 30, 1, 0, 0, @@ -67706,8 +67706,8 @@ 0 ], "RequirementDefinition.ownedRelationship": [ - 84, - 16, + 98, + 2, 0, 0, 9, @@ -68714,16 +68714,16 @@ 0 ], "RequirementUsage.ownedRelationship": [ - 113, - 139, + 243, + 9, 0, 0, 19, 0 ], "RequirementUsage.ownedSpecialization": [ - 161, - 18, + 179, + 0, 0, 0, 92, @@ -69454,7 +69454,7 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.documentation": [ @@ -69462,7 +69462,7 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.isImplied": [ @@ -69470,7 +69470,7 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.isImpliedIncluded": [ @@ -69478,20 +69478,20 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.isLibraryElement": [ 0, 0, - 4735, + 4745, 0, 0, 0 ], "ReturnParameterMembership.memberElement": [ - 4401, - 334, + 4405, + 340, 0, 0, 0, @@ -69500,7 +69500,7 @@ "ReturnParameterMembership.memberElementId": [ 0, 0, - 4735, + 4745, 0, 0, 0 @@ -69508,13 +69508,13 @@ "ReturnParameterMembership.memberName": [ 0, 0, - 4735, + 4745, 0, 0, 0 ], "ReturnParameterMembership.membershipOwningNamespace": [ - 4735, + 4745, 0, 0, 0, @@ -69526,7 +69526,7 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.ownedElement": [ @@ -69534,12 +69534,12 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.ownedMemberElement": [ - 4401, - 334, + 4405, + 340, 0, 0, 0, @@ -69548,14 +69548,14 @@ "ReturnParameterMembership.ownedMemberElementId": [ 0, 0, - 4735, + 4745, 0, 0, 0 ], "ReturnParameterMembership.ownedMemberFeature": [ - 4400, - 334, + 4404, + 340, 1, 0, 0, @@ -69564,22 +69564,22 @@ "ReturnParameterMembership.ownedMemberName": [ 0, 0, - 4735, + 4745, 0, 0, 0 ], "ReturnParameterMembership.ownedMemberParameter": [ - 4401, - 334, + 4405, + 340, 0, 0, 0, 0 ], "ReturnParameterMembership.ownedRelatedElement": [ - 4401, - 334, + 4405, + 340, 0, 0, 0, @@ -69590,19 +69590,19 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.owner": [ 0, 0, 0, - 4735, + 4745, 0, 0 ], "ReturnParameterMembership.owningRelatedElement": [ - 4735, + 4745, 0, 0, 0, @@ -69612,7 +69612,7 @@ "ReturnParameterMembership.owningType": [ 171, 0, - 4564, + 4574, 0, 0, 0 @@ -69620,7 +69620,7 @@ "ReturnParameterMembership.relatedElement": [ 0, 0, - 4735, + 4745, 0, 0, 0 @@ -69628,7 +69628,7 @@ "ReturnParameterMembership.source": [ 0, 0, - 4735, + 4745, 0, 0, 0 @@ -69636,7 +69636,7 @@ "ReturnParameterMembership.target": [ 0, 0, - 4735, + 4745, 0, 0, 0 @@ -69646,13 +69646,13 @@ 0, 0, 0, - 4735, + 4745, 0 ], "ReturnParameterMembership.visibility": [ 0, 0, - 4735, + 4745, 0, 0, 0 @@ -70386,16 +70386,16 @@ 0 ], "SatisfyRequirementUsage.ownedRelationship": [ - 11, - 69, + 77, + 3, 0, 0, 0, 0 ], "SatisfyRequirementUsage.ownedSpecialization": [ - 77, - 3, + 78, + 2, 0, 0, 0, @@ -72922,8 +72922,8 @@ 0 ], "StateDefinition.ownedRelationship": [ - 31, - 4, + 35, + 0, 0, 0, 11, @@ -74082,24 +74082,24 @@ 0 ], "StateUsage.ownedRelationship": [ - 80, - 17, + 89, + 8, 1, 0, 208, 0 ], "StateUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 287, 0 ], "StateUsage.ownedSubsetting": [ - 9, - 1, + 10, + 0, 0, 0, 296, @@ -74698,16 +74698,16 @@ 0 ], "Step.ownedRelationship": [ - 25, - 51, + 69, + 7, 0, 0, 2, 0 ], "Step.ownedSpecialization": [ - 49, - 15, + 64, + 0, 0, 0, 14, @@ -76306,16 +76306,16 @@ 0 ], "Succession.ownedRelationship": [ - 15, - 11, + 25, + 1, 0, 0, 0, 0 ], "Succession.ownedSpecialization": [ - 1, 10, + 1, 0, 0, 15, @@ -77186,8 +77186,8 @@ 0 ], "SuccessionAsUsage.ownedRelationship": [ - 10, - 2, + 11, + 1, 0, 0, 0, @@ -82018,8 +82018,8 @@ 0 ], "Type.ownedRelationship": [ - 4, - 37, + 11, + 30, 0, 0, 0, @@ -82954,8 +82954,8 @@ 0 ], "Usage.ownedRelationship": [ - 20, - 10, + 21, + 9, 0, 0, 0, @@ -83626,8 +83626,8 @@ 0 ], "UseCaseDefinition.ownedRelationship": [ - 16, - 2, + 18, + 0, 0, 0, 1, @@ -84586,24 +84586,24 @@ 0 ], "UseCaseUsage.ownedRelationship": [ - 15, - 8, + 23, + 0, 0, 1, 3, 0 ], "UseCaseUsage.ownedSpecialization": [ - 10, - 1, + 11, + 0, 0, 1, 15, 0 ], "UseCaseUsage.ownedSubsetting": [ - 2, - 1, + 3, + 0, 0, 1, 23, @@ -86410,8 +86410,8 @@ 0 ], "VerificationCaseUsage.ownedRelationship": [ - 1, - 41, + 42, + 0, 0, 1, 1, @@ -87058,8 +87058,8 @@ 0 ], "ViewDefinition.ownedRelationship": [ - 6, - 6, + 10, + 2, 0, 1, 3, @@ -88178,8 +88178,8 @@ 0 ], "ViewUsage.ownedRelationship": [ - 33, - 65, + 90, + 8, 0, 0, 0, @@ -89842,8 +89842,8 @@ 0 ], "ViewpointUsage.ownedRelationship": [ - 7, - 2, + 9, + 0, 0, 0, 0, diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index 1ba88c484d..cbb84d815a 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -190,7 +190,7 @@ The pinned pilot's verdict on the probe (`validate-sysml-batch`): clean. ## Results (pilot `2026-08`, 920 files) -**Scorecard:** 920 files; 90023 elements matched (28511 ours-only, 38797 pilot-only, 0 of them implied); properties: 629580 present-equal, 35382 present-different, 1058253 ours-missing, 68560 pilot-missing, 2103094 absent-both, 25703 indeterminate. +**Scorecard:** 920 files; 90109 elements matched (28425 ours-only, 38711 pilot-only, 0 of them implied); properties: 630058 present-equal, 35532 present-different, 1059345 ours-missing, 68622 pilot-missing, 2104980 absent-both, 25713 indeterminate. The pilot's export failed on 56 files (`pilotFailed`: its own export throws on an element without a resource, 52 of them specification examples and 4 test fixtures; the files are named in the run's text report), ours refused 36 (all of them specification examples the parser could not read whole), left the pilot's 56 failed files out and converted 24 documents alone for declaring an element another document of their root declares (`oursColliding`); no root fell back to per-document conversion. 11311 (metaclass, property) rows carry a comparison; 108366 references compared through the unkeyed sentinel, 146861 of our `sysx:` annotations were left out, and 289/345 elements (ours/pilot) were dropped for ambiguous keys, 8198/31310 for having none. @@ -214,8 +214,8 @@ The largest **present-different** rows, with the reading the examples support: | metaclass | property | present-equal | present-different | |---|---|---:|---:| -| `Feature` | `ownedRelationship` | 4070 | 1381 | -| `AttributeUsage` | `ownedRelationship` | 1242 | 1194 | +| `Feature` | `ownedRelationship` | 4078 | 1389 | +| `AttributeUsage` | `ownedRelationship` | 1242 | 1196 | | `PartUsage` | `ownedRelationship` | 858 | 1002 | | `ReferenceUsage` | `qualifiedName` | 983 | 882 | | `ReferenceUsage` | `ownedRelationship` | 1255 | 838 | @@ -378,19 +378,19 @@ The (metaclass, property) rows ranked by the corpus elements on which the pilot | 5 | `FeatureMembership` | `source` | 10630 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::source`, which Membership redefines as `[membershipOwningNamespace]` (KerML 8.3.2.3.5) | | 6 | `FeatureMembership` | `target` | 10630 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::target`, which Membership redefines as `[memberElement]` (KerML 8.3.2.3.5) | | 7 | `FeatureMembership` | `visibility` | 10566 | 1 | PR #1232 (`feature/api-json-derived-properties-layered`) | owned attribute `Membership::visibility : VisibilityKind`, default `public` (KerML 8.3.2.3.5); not derived | -| 8 | `Feature` | `featureTarget` | 10010 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::featureTarget`: the last `chainingFeature`, else the feature itself (KerML 8.3.3.3, deriveFeatureFeatureTarget; KERML11-1 crossFeature) | -| 9 | `Feature` | `inheritedFeature` | 10010 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::inheritedFeature = inheritedMembership.memberElement->selectByKind(Feature)` (KerML 8.3.3.1, deriveTypeInheritedFeature) | -| 10 | `Feature` | `inheritedMembership` | 10010 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::inheritedMembership = inheritedMemberships(excluded)` over the supertypes (KerML 8.3.3.1, deriveTypeInheritedMembership) | -| 11 | `Feature` | `isConjugated` | 10010 | 0 | none found | `Type::isConjugated = ownedConjugator <> null` (KerML 8.3.3.1 Type; a derived attribute without a named derive constraint); the pilot writes `false` on every type | -| 12 | `Feature` | `isLibraryElement` | 10010 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | -| 13 | `Feature` | `member` | 10010 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Namespace::member = membership.memberElement` (KerML 8.3.2.4, deriveNamespaceMember) | -| 14 | `Feature` | `membership` | 10010 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Namespace::membership = ownedMembership->union(importedMembership)`, and for a Type also `inheritedMembership` (KerML 8.3.2.4, 8.3.3.1) | -| 15 | `Feature` | `feature` | 10004 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::feature = featureMembership.ownedMemberFeature` (KerML 8.3.3.1, deriveTypeFeature) | -| 16 | `Feature` | `featureMembership` | 10004 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::featureMembership = ownedFeatureMembership->union(inheritedMembership->selectByKind(FeatureMembership))` (KerML 8.3.3.1; KERML11-191 restricts the inherited part to the supertypes) | -| 17 | `Feature` | `featuringType` | 9726 | 2 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::featuringType = typeFeaturing.featuringType`, plus the owning type of an owned feature (KerML 8.3.3.3, deriveFeatureFeaturingType; KERML11-3/4 multiplicity featuring) | -| 18 | `Feature` | `owningFeatureMembership` | 9445 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningFeatureMembership = owningMembership->selectByKind(FeatureMembership)` (KerML 8.3.3.3) | -| 19 | `Feature` | `owningType` | 9445 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | -| 20 | `Feature` | `type` | 9371 | 120 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::type = typing.type` with the types inherited through chaining and redefinition (KerML 8.3.3.3, deriveFeatureType) | +| 8 | `Feature` | `featureTarget` | 10036 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::featureTarget`: the last `chainingFeature`, else the feature itself (KerML 8.3.3.3, deriveFeatureFeatureTarget; KERML11-1 crossFeature) | +| 9 | `Feature` | `inheritedFeature` | 10036 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::inheritedFeature = inheritedMembership.memberElement->selectByKind(Feature)` (KerML 8.3.3.1, deriveTypeInheritedFeature) | +| 10 | `Feature` | `inheritedMembership` | 10036 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::inheritedMembership = inheritedMemberships(excluded)` over the supertypes (KerML 8.3.3.1, deriveTypeInheritedMembership) | +| 11 | `Feature` | `isConjugated` | 10036 | 0 | none found | `Type::isConjugated = ownedConjugator <> null` (KerML 8.3.3.1 Type; a derived attribute without a named derive constraint); the pilot writes `false` on every type | +| 12 | `Feature` | `isLibraryElement` | 10036 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | +| 13 | `Feature` | `member` | 10036 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Namespace::member = membership.memberElement` (KerML 8.3.2.4, deriveNamespaceMember) | +| 14 | `Feature` | `membership` | 10036 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Namespace::membership = ownedMembership->union(importedMembership)`, and for a Type also `inheritedMembership` (KerML 8.3.2.4, 8.3.3.1) | +| 15 | `Feature` | `feature` | 10030 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::feature = featureMembership.ownedMemberFeature` (KerML 8.3.3.1, deriveTypeFeature) | +| 16 | `Feature` | `featureMembership` | 10030 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Type::featureMembership = ownedFeatureMembership->union(inheritedMembership->selectByKind(FeatureMembership))` (KerML 8.3.3.1; KERML11-191 restricts the inherited part to the supertypes) | +| 17 | `Feature` | `featuringType` | 9752 | 2 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::featuringType = typeFeaturing.featuringType`, plus the owning type of an owned feature (KerML 8.3.3.3, deriveFeatureFeaturingType; KERML11-3/4 multiplicity featuring) | +| 18 | `Feature` | `owningFeatureMembership` | 9463 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningFeatureMembership = owningMembership->selectByKind(FeatureMembership)` (KerML 8.3.3.3) | +| 19 | `Feature` | `owningType` | 9463 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | +| 20 | `Feature` | `type` | 9397 | 120 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::type = typing.type` with the types inherited through chaining and redefinition (KerML 8.3.3.3, deriveFeatureType) | | 21 | `OwningMembership` | `isLibraryElement` | 9518 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | | 22 | `OwningMembership` | `relatedElement` | 9518 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::relatedElement = source->union(target)`, ordered (KerML 8.3.2.5.2, deriveRelationshipRelatedElement) | | 23 | `OwningMembership` | `source` | 9518 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::source`, which Membership redefines as `[membershipOwningNamespace]` (KerML 8.3.2.3.5) | @@ -398,21 +398,21 @@ The (metaclass, property) rows ranked by the corpus elements on which the pilot | 25 | `OwningMembership` | `ownedMemberElementId` | 9515 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `OwningMembership::ownedMemberElementId = ownedMemberElement.elementId` (KerML 8.3.2.3.6) | | 26 | `OwningMembership` | `target` | 9515 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::target`, which Membership redefines as `[memberElement]` (KerML 8.3.2.3.5) | | 27 | `OwningMembership` | `visibility` | 9493 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | owned attribute `Membership::visibility : VisibilityKind`, default `public` (KerML 8.3.2.3.5); not derived | -| 28 | `Feature` | `name` | 9490 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Element::name = effectiveName()`: the declared name, or for a feature the name of the feature it redefines (KerML 8.3.2.1, deriveElementName) | +| 28 | `Feature` | `name` | 9508 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Element::name = effectiveName()`: the declared name, or for a feature the name of the feature it redefines (KerML 8.3.2.1, deriveElementName) | | 29 | `FeatureMembership` | `memberName` | 9148 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Membership::memberName = memberElement.name` (KerML 8.3.2.3.5, deriveMembershipMemberName) | | 30 | `FeatureMembership` | `ownedMemberName` | 9148 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `OwningMembership::ownedMemberName = ownedMemberElement.name` (KerML 8.3.2.3.6) | -| 31 | `Feature` | `owningNamespace` | 8691 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Element::owningNamespace = owningMembership.membershipOwningNamespace` (KerML 8.3.2.1, deriveElementOwningNamespace) | -| 32 | `FeatureValue` | `isLibraryElement` | 7048 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | -| 33 | `FeatureValue` | `memberElementId` | 7048 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Membership::memberElementId = memberElement.elementId` (KerML 8.3.2.3.5, deriveMembershipMemberElementId) | -| 34 | `FeatureValue` | `ownedMemberElementId` | 7048 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `OwningMembership::ownedMemberElementId = ownedMemberElement.elementId` (KerML 8.3.2.3.6) | -| 35 | `FeatureValue` | `relatedElement` | 7048 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::relatedElement = source->union(target)`, ordered (KerML 8.3.2.5.2, deriveRelationshipRelatedElement) | -| 36 | `FeatureValue` | `source` | 7048 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::source`, which Membership redefines as `[membershipOwningNamespace]` (KerML 8.3.2.3.5) | -| 37 | `FeatureValue` | `target` | 7048 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::target`, which Membership redefines as `[memberElement]` (KerML 8.3.2.3.5) | -| 38 | `FeatureValue` | `visibility` | 7048 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | owned attribute `Membership::visibility : VisibilityKind`, default `public` (KerML 8.3.2.3.5); not derived | -| 39 | `FeatureTyping` | `isLibraryElement` | 5912 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | -| 40 | `FeatureTyping` | `owningType` | 5908 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | +| 31 | `Feature` | `owningNamespace` | 8717 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Element::owningNamespace = owningMembership.membershipOwningNamespace` (KerML 8.3.2.1, deriveElementOwningNamespace) | +| 32 | `FeatureValue` | `isLibraryElement` | 7066 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | +| 33 | `FeatureValue` | `memberElementId` | 7066 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Membership::memberElementId = memberElement.elementId` (KerML 8.3.2.3.5, deriveMembershipMemberElementId) | +| 34 | `FeatureValue` | `ownedMemberElementId` | 7066 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `OwningMembership::ownedMemberElementId = ownedMemberElement.elementId` (KerML 8.3.2.3.6) | +| 35 | `FeatureValue` | `relatedElement` | 7066 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::relatedElement = source->union(target)`, ordered (KerML 8.3.2.5.2, deriveRelationshipRelatedElement) | +| 36 | `FeatureValue` | `source` | 7066 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::source`, which Membership redefines as `[membershipOwningNamespace]` (KerML 8.3.2.3.5) | +| 37 | `FeatureValue` | `target` | 7066 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Relationship::target`, which Membership redefines as `[memberElement]` (KerML 8.3.2.3.5) | +| 38 | `FeatureValue` | `visibility` | 7066 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | owned attribute `Membership::visibility : VisibilityKind`, default `public` (KerML 8.3.2.3.5); not derived | +| 39 | `FeatureTyping` | `isLibraryElement` | 5914 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | +| 40 | `FeatureTyping` | `owningType` | 5910 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | | 41 | `Redefinition` | `redefinedFeature` | 0 | 58 | closed for this repository's libraries (above) | `Redefinition::redefinedFeature : Feature` (KerML 8.3.3.3.8) is an element reference, and every `Element` carries an `elementId` (KerML 8.3.2.1.2) the API's JSON refers to it by; the 330 redefinitions of a feature of this repository's libraries once spelled as a name, `{"@ref": "caption"}`, now link by the element's fixed id — the same movement for `FeatureTyping::type`, `MetadataUsage::type`, `FeatureReferenceExpression::referent` and `ReferenceSubsetting::referencedFeature` into those libraries — and the 58 left are redefinitions of a feature inherited within the model itself that the writer spells as a name (`vehicle_b_1::providePower`) | -| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1194 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4828 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal, no other bucket touched (this row 2323 → 1194, `PartDefinition` 216 → 21, `PartUsage` 1551 → 1002, `Feature` 1781 → 1381). What remains is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | +| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1196 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4828 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal, no other bucket touched (this row 2323 → 1196, `PartDefinition` 216 → 21, `PartUsage` 1551 → 1002, `Feature` 1781 → 1381). What remains (1196) is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | | 43 | `FeatureReferenceExpression` | `ownedMembership` | 0 | 7 | the writer owns the `Membership` (`export/rdf_expr.go` `featureReferent`); the 7 left are the `FunctionReferenceMember` shape, a `FeatureMembership` owning an `Expression` typed by the named function (KerML 8.2.5.8.3), which ours writes as a `Membership` of the function | `FeatureReferenceExpression::referent` is the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent); the notation maps a feature reference to that owned `Membership` (8.2.5.8.3, `FeatureReferenceMember`) | Rows an evaluator rule in PR #1232 (`internal/semantic/metamodel/rules.go`) already names are marked; that PR adds a lazy metamodel evaluator and layers its derived values into the API-JSON writer, so its merge is expected to move those rows from ours-missing to present-equal or present-different, and this referee is how that movement is measured. From 70df9bca9ec5742dee0a8d2401548e90b8080dfb Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 04:18:45 +0000 Subject: [PATCH 11/16] docs(api-json): re-record the differential baseline on develop Co-Authored-By: jason.han --- .../api-json-differential-baseline.json | 436 +++++++++--------- docs/project/api-json-differential.md | 2 +- 2 files changed, 219 insertions(+), 219 deletions(-) diff --git a/docs/project/api-json-differential-baseline.json b/docs/project/api-json-differential-baseline.json index d86b4e7979..a6b4b23d1f 100644 --- a/docs/project/api-json-differential-baseline.json +++ b/docs/project/api-json-differential-baseline.json @@ -14,7 +14,7 @@ { "name": "api-json-writer", "source": "internal/translate/export", - "sourceDigest": "sha256:8f01ecc0327cffe3eae4ad97190321692950de4214683621832336658de5a5a3" + "sourceDigest": "sha256:ccda274c66d802f61aa95f27b4f98b4e30581216773e5ad5a86734cf0462f1c4" } ], "inputs": [ @@ -120,8 +120,8 @@ "typeMismatch": 1723 }, "properties": { - "presentEqual": 626193, - "presentDifferent": 40479, + "presentEqual": 631021, + "presentDifferent": 35651, "oursMissing": 1060910, "pilotMissing": 68760, "absentBoth": 2108306, @@ -160,8 +160,8 @@ "typeMismatch": 10 }, "properties": { - "presentEqual": 50698, - "presentDifferent": 3608, + "presentEqual": 51021, + "presentDifferent": 3285, "oursMissing": 86942, "pilotMissing": 5306, "absentBoth": 176892, @@ -195,8 +195,8 @@ "typeMismatch": 59 }, "properties": { - "presentEqual": 182942, - "presentDifferent": 10084, + "presentEqual": 184461, + "presentDifferent": 8565, "oursMissing": 309788, "pilotMissing": 19572, "absentBoth": 616957, @@ -230,8 +230,8 @@ "typeMismatch": 15 }, "properties": { - "presentEqual": 63665, - "presentDifferent": 5435, + "presentEqual": 64168, + "presentDifferent": 4932, "oursMissing": 108814, "pilotMissing": 7092, "absentBoth": 221634, @@ -266,8 +266,8 @@ "typeMismatch": 1032 }, "properties": { - "presentEqual": 43853, - "presentDifferent": 3110, + "presentEqual": 44382, + "presentDifferent": 2581, "oursMissing": 63793, "pilotMissing": 5268, "absentBoth": 117922, @@ -301,8 +301,8 @@ "typeMismatch": 391 }, "properties": { - "presentEqual": 44427, - "presentDifferent": 5885, + "presentEqual": 44671, + "presentDifferent": 5641, "oursMissing": 71585, "pilotMissing": 5182, "absentBoth": 142032, @@ -337,8 +337,8 @@ "typeMismatch": 30 }, "properties": { - "presentEqual": 8800, - "presentDifferent": 485, + "presentEqual": 8858, + "presentDifferent": 427, "oursMissing": 14752, "pilotMissing": 1015, "absentBoth": 31459, @@ -373,8 +373,8 @@ "typeMismatch": 186 }, "properties": { - "presentEqual": 183276, - "presentDifferent": 9550, + "presentEqual": 184603, + "presentDifferent": 8223, "oursMissing": 316321, "pilotMissing": 20333, "absentBoth": 636835, @@ -408,8 +408,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 348, - "presentDifferent": 15, + "presentEqual": 350, + "presentDifferent": 13, "oursMissing": 462, "pilotMissing": 43, "absentBoth": 1043, @@ -443,8 +443,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 48184, - "presentDifferent": 2307, + "presentEqual": 48507, + "presentDifferent": 1984, "oursMissing": 88453, "pilotMissing": 4949, "absentBoth": 163532, @@ -1778,8 +1778,8 @@ 0 ], "ActionDefinition.ownedRelationship": [ - 136, - 15, + 147, + 4, 0, 0, 26, @@ -2698,24 +2698,24 @@ 0 ], "ActionUsage.ownedRelationship": [ - 232, - 110, + 330, + 12, 3, 3, 157, 0 ], "ActionUsage.ownedSpecialization": [ - 166, - 3, + 169, + 0, 0, 1, 335, 0 ], "ActionUsage.ownedSubsetting": [ - 40, - 1, + 41, + 0, 0, 0, 464, @@ -3602,8 +3602,8 @@ 0 ], "AllocationDefinition.ownedRelationship": [ - 5, - 2, + 7, + 0, 0, 0, 1, @@ -4546,8 +4546,8 @@ 0 ], "AllocationUsage.ownedRelationship": [ - 3, - 7, + 10, + 0, 0, 0, 0, @@ -5234,8 +5234,8 @@ 0 ], "AnalysisCaseDefinition.ownedRelationship": [ - 20, - 7, + 26, + 1, 0, 0, 3, @@ -6194,16 +6194,16 @@ 0 ], "AnalysisCaseUsage.ownedRelationship": [ - 3, 37, + 3, 0, 0, 1, 0 ], "AnalysisCaseUsage.ownedSpecialization": [ - 25, - 12, + 37, + 0, 0, 0, 4, @@ -7258,24 +7258,24 @@ 0 ], "AssertConstraintUsage.ownedRelationship": [ - 61, - 18, + 79, + 0, 0, 0, 0, 0 ], "AssertConstraintUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 60, 0 ], "AssertConstraintUsage.ownedSubsetting": [ - 8, - 1, + 9, + 0, 0, 0, 70, @@ -9666,8 +9666,8 @@ 0 ], "AttributeDefinition.ownedRelationship": [ - 48, - 61, + 109, + 0, 0, 0, 99, @@ -10578,16 +10578,16 @@ 0 ], "AttributeUsage.ownedRelationship": [ - 113, - 2325, + 1242, + 1196, 36, 0, 19, 0 ], "AttributeUsage.ownedSpecialization": [ - 2300, - 30, + 2330, + 0, 0, 0, 163, @@ -11610,8 +11610,8 @@ 0 ], "BindingConnector.ownedRelationship": [ - 7, - 1, + 8, + 0, 0, 0, 0, @@ -12466,8 +12466,8 @@ 0 ], "BindingConnectorAsUsage.ownedRelationship": [ - 2, - 1, + 3, + 0, 0, 0, 0, @@ -13082,8 +13082,8 @@ 0 ], "BooleanExpression.ownedRelationship": [ - 1, - 3, + 2, + 2, 0, 0, 0, @@ -13714,8 +13714,8 @@ 0 ], "CalculationDefinition.ownedRelationship": [ - 70, - 103, + 172, + 1, 0, 0, 0, @@ -14626,8 +14626,8 @@ 0 ], "CalculationUsage.ownedRelationship": [ - 40, - 74, + 113, + 1, 0, 0, 0, @@ -15314,8 +15314,8 @@ 0 ], "CaseDefinition.ownedRelationship": [ - 1, - 2, + 3, + 0, 0, 0, 0, @@ -16250,9 +16250,9 @@ 0 ], "CaseUsage.ownedRelationship": [ - 0, 2, 0, + 0, 3, 0, 0 @@ -17154,8 +17154,8 @@ 0 ], "Classifier.ownedRelationship": [ - 47, - 18, + 59, + 6, 10, 0, 29, @@ -19418,8 +19418,8 @@ 0 ], "ConcernUsage.ownedRelationship": [ - 15, - 3, + 18, + 0, 0, 0, 3, @@ -21138,8 +21138,8 @@ 0 ], "ConnectionDefinition.ownedRelationship": [ - 36, - 7, + 43, + 0, 0, 0, 0, @@ -22098,8 +22098,8 @@ 0 ], "ConnectionUsage.ownedRelationship": [ - 18, - 61, + 79, + 0, 0, 0, 0, @@ -22762,16 +22762,16 @@ 0 ], "Connector.ownedRelationship": [ - 6, - 30, + 35, + 1, 0, 0, 0, 0 ], "Connector.ownedSpecialization": [ - 25, - 4, + 29, + 0, 0, 0, 7, @@ -23410,8 +23410,8 @@ 0 ], "ConstraintDefinition.ownedRelationship": [ - 24, - 1, + 25, + 0, 0, 0, 1, @@ -24306,8 +24306,8 @@ 0 ], "ConstraintUsage.ownedRelationship": [ - 153, - 17, + 165, + 5, 10, 0, 2, @@ -28226,8 +28226,8 @@ 0 ], "EnumerationDefinition.ownedRelationship": [ - 16, - 8, + 24, + 0, 0, 0, 1, @@ -29074,8 +29074,8 @@ 0 ], "EnumerationUsage.ownedRelationship": [ - 25, - 2, + 27, + 0, 0, 0, 40, @@ -29906,24 +29906,24 @@ 0 ], "EventOccurrenceUsage.ownedRelationship": [ - 40, - 54, + 94, + 0, 0, 0, 85, 0 ], "EventOccurrenceUsage.ownedSpecialization": [ - 49, - 28, + 77, + 0, 0, 0, 102, 0 ], "EventOccurrenceUsage.ownedSubsetting": [ - 53, - 24, + 77, + 0, 0, 0, 102, @@ -30810,24 +30810,24 @@ 0 ], "ExhibitStateUsage.ownedRelationship": [ - 35, - 9, + 41, + 3, 0, 0, 5, 0 ], "ExhibitStateUsage.ownedSpecialization": [ - 19, - 7, + 26, + 0, 0, 0, 23, 0 ], "ExhibitStateUsage.ownedSubsetting": [ - 10, - 7, + 17, + 0, 0, 0, 32, @@ -31434,8 +31434,8 @@ 0 ], "Expression.ownedRelationship": [ - 33, - 6, + 39, + 0, 0, 0, 0, @@ -32098,24 +32098,24 @@ 0 ], "Feature.ownedRelationship": [ - 3678, - 1794, + 4078, + 1394, 137, 88, 4349, 0 ], "Feature.ownedSpecialization": [ - 756, - 130, + 866, + 20, 662, 34, 8464, 0 ], "Feature.ownedSubsetting": [ - 354, - 17, + 363, + 8, 645, 6, 9024, @@ -35482,8 +35482,8 @@ 0 ], "FlowDefinition.ownedRelationship": [ - 3, - 3, + 6, + 0, 0, 0, 1, @@ -36474,16 +36474,16 @@ 0 ], "FlowUsage.ownedRelationship": [ - 37, - 69, + 59, + 47, 0, 0, 0, 0 ], "FlowUsage.ownedSpecialization": [ - 19, - 6, + 25, + 0, 0, 0, 81, @@ -38970,8 +38970,8 @@ 0 ], "Function.ownedRelationship": [ - 10, - 1, + 11, + 0, 0, 0, 0, @@ -40682,24 +40682,24 @@ 0 ], "IncludeUseCaseUsage.ownedRelationship": [ - 7, - 12, + 19, + 0, 0, 0, 0, 0 ], "IncludeUseCaseUsage.ownedSpecialization": [ - 17, - 1, + 18, + 0, 0, 0, 1, 0 ], "IncludeUseCaseUsage.ownedSubsetting": [ - 11, - 1, + 12, + 0, 0, 0, 7, @@ -42370,8 +42370,8 @@ 0 ], "InterfaceDefinition.ownedRelationship": [ - 28, - 3, + 30, + 1, 0, 0, 0, @@ -43338,8 +43338,8 @@ 0 ], "InterfaceUsage.ownedRelationship": [ - 4, 39, + 4, 0, 0, 0, @@ -45138,8 +45138,8 @@ 0 ], "ItemDefinition.ownedRelationship": [ - 55, - 11, + 60, + 6, 0, 0, 101, @@ -46050,16 +46050,16 @@ 0 ], "ItemUsage.ownedRelationship": [ - 36, - 287, + 89, + 234, 33, 0, 10, 0 ], "ItemUsage.ownedSpecialization": [ - 291, - 18, + 307, + 2, 0, 0, 57, @@ -51314,8 +51314,8 @@ 0 ], "Metaclass.ownedRelationship": [ - 4, - 4, + 8, + 0, 0, 0, 2, @@ -52370,8 +52370,8 @@ 0 ], "MetadataDefinition.ownedRelationship": [ - 12, - 6, + 18, + 0, 0, 0, 22, @@ -53786,8 +53786,8 @@ 0 ], "MetadataUsage.ownedRelationship": [ - 267, - 117, + 274, + 110, 0, 0, 0, @@ -56658,8 +56658,8 @@ 0 ], "OccurrenceDefinition.ownedRelationship": [ - 15, - 37, + 17, + 35, 2, 0, 1, @@ -57538,24 +57538,24 @@ 0 ], "OccurrenceUsage.ownedRelationship": [ - 69, - 62, + 114, + 17, 0, 0, 13, 0 ], "OccurrenceUsage.ownedSpecialization": [ - 74, - 12, + 80, + 6, 0, 0, 58, 0 ], "OccurrenceUsage.ownedSubsetting": [ - 17, - 10, + 21, + 6, 0, 0, 117, @@ -59378,8 +59378,8 @@ 0 ], "PartDefinition.ownedRelationship": [ - 423, - 216, + 618, + 21, 1, 0, 279, @@ -60346,24 +60346,24 @@ 0 ], "PartUsage.ownedRelationship": [ - 324, - 1553, + 873, + 1004, 52, 0, 40, 0 ], "PartUsage.ownedSpecialization": [ - 1526, - 37, + 1561, + 2, 0, 0, 406, 0 ], "PartUsage.ownedSubsetting": [ - 371, - 12, + 383, + 0, 2, 0, 1584, @@ -60946,8 +60946,8 @@ 0 ], "PayloadFeature.ownedRelationship": [ - 4, - 1, + 5, + 0, 0, 0, 0, @@ -61778,24 +61778,24 @@ 0 ], "PerformActionUsage.ownedRelationship": [ - 96, - 35, + 129, + 2, 2, 0, 24, 0 ], "PerformActionUsage.ownedSpecialization": [ - 97, - 17, + 114, + 0, 2, 0, 41, 0 ], "PerformActionUsage.ownedSubsetting": [ - 88, - 17, + 105, + 0, 2, 0, 50, @@ -62602,8 +62602,8 @@ 0 ], "PortDefinition.ownedRelationship": [ - 74, - 51, + 77, + 48, 0, 0, 0, @@ -63490,16 +63490,16 @@ 0 ], "PortUsage.ownedRelationship": [ - 20, - 415, + 99, + 336, 30, 1, 2, 0 ], "PortUsage.ownedSpecialization": [ - 412, - 10, + 418, + 4, 0, 1, 45, @@ -65250,24 +65250,24 @@ 0 ], "ReferenceUsage.ownedRelationship": [ - 1255, - 838, + 2005, + 88, 3, 0, 98, 0 ], "ReferenceUsage.ownedSpecialization": [ - 1650, - 75, + 1707, + 18, 4, 0, 465, 0 ], "ReferenceUsage.ownedSubsetting": [ - 808, - 22, + 814, + 16, 6, 0, 1358, @@ -65898,10 +65898,10 @@ 0 ], "RenderingDefinition.ownedRelationship": [ - 0, 1, 0, 0, + 0, 1, 0 ], @@ -66778,8 +66778,8 @@ 0 ], "RenderingUsage.ownedRelationship": [ - 1, - 33, + 4, + 30, 1, 0, 0, @@ -67706,8 +67706,8 @@ 0 ], "RequirementDefinition.ownedRelationship": [ - 84, - 16, + 98, + 2, 0, 0, 9, @@ -68714,16 +68714,16 @@ 0 ], "RequirementUsage.ownedRelationship": [ - 113, - 139, + 243, + 9, 0, 0, 19, 0 ], "RequirementUsage.ownedSpecialization": [ - 161, - 18, + 179, + 0, 0, 0, 92, @@ -70386,16 +70386,16 @@ 0 ], "SatisfyRequirementUsage.ownedRelationship": [ - 11, - 69, + 77, + 3, 0, 0, 0, 0 ], "SatisfyRequirementUsage.ownedSpecialization": [ - 77, - 3, + 78, + 2, 0, 0, 0, @@ -72922,8 +72922,8 @@ 0 ], "StateDefinition.ownedRelationship": [ - 31, - 4, + 35, + 0, 0, 0, 11, @@ -74082,24 +74082,24 @@ 0 ], "StateUsage.ownedRelationship": [ - 80, - 17, + 89, + 8, 1, 0, 208, 0 ], "StateUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 287, 0 ], "StateUsage.ownedSubsetting": [ - 9, - 1, + 10, + 0, 0, 0, 296, @@ -74698,16 +74698,16 @@ 0 ], "Step.ownedRelationship": [ - 25, - 51, + 69, + 7, 0, 0, 2, 0 ], "Step.ownedSpecialization": [ - 49, - 15, + 64, + 0, 0, 0, 14, @@ -76306,16 +76306,16 @@ 0 ], "Succession.ownedRelationship": [ - 15, - 11, + 25, + 1, 0, 0, 0, 0 ], "Succession.ownedSpecialization": [ - 1, 10, + 1, 0, 0, 15, @@ -77186,8 +77186,8 @@ 0 ], "SuccessionAsUsage.ownedRelationship": [ - 10, - 2, + 11, + 1, 0, 0, 0, @@ -82018,8 +82018,8 @@ 0 ], "Type.ownedRelationship": [ - 4, - 37, + 11, + 30, 0, 0, 0, @@ -82954,8 +82954,8 @@ 0 ], "Usage.ownedRelationship": [ - 20, - 10, + 21, + 9, 0, 0, 0, @@ -83626,8 +83626,8 @@ 0 ], "UseCaseDefinition.ownedRelationship": [ - 16, - 2, + 18, + 0, 0, 0, 1, @@ -84586,24 +84586,24 @@ 0 ], "UseCaseUsage.ownedRelationship": [ - 15, - 8, + 23, + 0, 0, 1, 3, 0 ], "UseCaseUsage.ownedSpecialization": [ - 10, - 1, + 11, + 0, 0, 1, 15, 0 ], "UseCaseUsage.ownedSubsetting": [ - 2, - 1, + 3, + 0, 0, 1, 23, @@ -86410,8 +86410,8 @@ 0 ], "VerificationCaseUsage.ownedRelationship": [ - 1, - 41, + 42, + 0, 0, 1, 1, @@ -87058,8 +87058,8 @@ 0 ], "ViewDefinition.ownedRelationship": [ - 6, - 6, + 10, + 2, 0, 1, 3, @@ -88178,8 +88178,8 @@ 0 ], "ViewUsage.ownedRelationship": [ - 34, - 65, + 91, + 8, 0, 0, 0, @@ -89842,8 +89842,8 @@ 0 ], "ViewpointUsage.ownedRelationship": [ - 7, - 2, + 9, + 0, 0, 0, 0, diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index 46113ad99a..23dce5482c 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -190,7 +190,7 @@ The pinned pilot's verdict on the probe (`validate-sysml-batch`): clean. ## Results (pilot `2026-08`, 924 files) -**Scorecard:** 924 files; 90265 elements matched (28431 ours-only, 38776 pilot-only, 0 of them implied); properties: 626193 present-equal, 40479 present-different, 1060910 ours-missing, 68760 pilot-missing, 2108306 absent-both, 25713 indeterminate. +**Scorecard:** 924 files; 90265 elements matched (28431 ours-only, 38776 pilot-only, 0 of them implied); properties: 631021 present-equal, 35651 present-different, 1060910 ours-missing, 68760 pilot-missing, 2108306 absent-both, 25713 indeterminate. The pilot's export failed on 56 files (`pilotFailed`: its own export throws on an element without a resource, 52 of them specification examples and 4 test fixtures; the files are named in the run's text report), ours refused 36 (all of them specification examples the parser could not read whole), left the pilot's 56 failed files out and converted 26 documents alone for declaring an element another document of their root declares (`oursColliding`); no root fell back to per-document conversion. 11311 (metaclass, property) rows carry a comparison; 108553 references compared through the unkeyed sentinel, 147292 of our `sysx:` annotations were left out, and 293/347 elements (ours/pilot) were dropped for ambiguous keys, 8210/31316 for having none. From bf7055b2dfe21fb400f3247b8848517a56b9ff58 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 04:43:13 +0000 Subject: [PATCH 12/16] docs(api-json): refresh the report's root and scorecard tables from the re-recorded baseline Co-Authored-By: jason.han --- docs/project/api-json-differential.md | 50 +++++++++++++-------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index 23dce5482c..92193cc5e8 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -196,15 +196,15 @@ The pilot's export failed on 56 files (`pilotFailed`: its own export throws on a | root | files | matched | ours-only | pilot-only | present-equal | present-different | ours-missing | pilot-missing | |---|---:|---:|---:|---:|---:|---:|---:|---:| -| `examples/sysml-v2-training` | 100 | 7287 | 2131 | 2873 | 50698 | 3608 | 86942 | 5306 | -| `examples/pilot-corpora/sysml-examples` | 99 | 25864 | 9952 | 10402 | 182942 | 10084 | 309788 | 19572 | -| `examples/pilot-corpora/sysml-validation` | 56 | 9246 | 2967 | 3341 | 63665 | 5435 | 108814 | 7092 | -| `examples/pilot-corpora/kerml-examples` | 58 | 6387 | 1637 | 1854 | 43853 | 3110 | 63793 | 5268 | -| `examples/spec-examples` | 511 | 6980 | 1966 | 2728 | 44427 | 5885 | 71585 | 5182 | -| `tests/testdata` | 36 | 1357 | 97 | 552 | 8800 | 485 | 14752 | 1015 | -| `examples` | 52 | 26071 | 8734 | 14944 | 183276 | 9550 | 316321 | 20333 | -| `tools/referee/diff/testdata` | 4 | 53 | 0 | 0 | 348 | 15 | 462 | 43 | -| `docs/manual/examples` | 8 | 7020 | 947 | 2082 | 48184 | 2307 | 88453 | 4949 | +| `examples/sysml-v2-training` | 100 | 7287 | 2131 | 2873 | 51021 | 3285 | 86942 | 5306 | +| `examples/pilot-corpora/sysml-examples` | 99 | 25864 | 9952 | 10402 | 184461 | 8565 | 309788 | 19572 | +| `examples/pilot-corpora/sysml-validation` | 56 | 9246 | 2967 | 3341 | 64168 | 4932 | 108814 | 7092 | +| `examples/pilot-corpora/kerml-examples` | 58 | 6387 | 1637 | 1854 | 44382 | 2581 | 63793 | 5268 | +| `examples/spec-examples` | 511 | 6980 | 1966 | 2728 | 44671 | 5641 | 71585 | 5182 | +| `tests/testdata` | 36 | 1357 | 97 | 552 | 8858 | 427 | 14752 | 1015 | +| `examples` | 52 | 26071 | 8734 | 14944 | 184603 | 8223 | 316321 | 20333 | +| `tools/referee/diff/testdata` | 4 | 53 | 0 | 0 | 350 | 13 | 462 | 43 | +| `docs/manual/examples` | 8 | 7020 | 947 | 2082 | 48507 | 1984 | 88453 | 4949 | The scorecard is mostly **ours-missing**: this repository's writer emits a subset of the metamodel's properties, and the referee now measures which, per metaclass. The full ranked scorecard with one concrete example per differing row is `build/pilot-apijson-diff/pilot-apijson-diff.txt` after a run; the baseline keeps every row's five counts. @@ -214,29 +214,29 @@ The largest **present-different** rows, with the reading the examples support: | metaclass | property | present-equal | present-different | |---|---|---:|---:| -| `Feature` | `ownedRelationship` | 4078 | 1389 | +| `Feature` | `ownedRelationship` | 4078 | 1394 | | `AttributeUsage` | `ownedRelationship` | 1242 | 1196 | -| `PartUsage` | `ownedRelationship` | 858 | 1002 | +| `PartUsage` | `ownedRelationship` | 873 | 1004 | | `ReferenceUsage` | `qualifiedName` | 983 | 882 | -| `ReferenceUsage` | `ownedRelationship` | 1255 | 838 | -| `PartUsage` | `qualifiedName` | 1119 | 830 | -| `Package` | `qualifiedName` | 460 | 723 | -| `PartUsage` | `ownedMember` | 362 | 702 | -| `PartUsage` | `ownedMembership` | 716 | 634 | -| `AttributeUsage` | `ownedMembership` | 1178 | 622 | +| `PartUsage` | `qualifiedName` | 1136 | 830 | +| `Package` | `qualifiedName` | 474 | 723 | +| `PartUsage` | `ownedMember` | 367 | 702 | +| `PartUsage` | `ownedMembership` | 721 | 634 | +| `AttributeUsage` | `ownedMembership` | 1178 | 624 | +| `FeatureMembership` | `memberElement` | 9183 | 592 | ### Where the pilot states nothing and we do | metaclass | property | pilot-missing | clause | |---|---|---:|---| -| `FeatureMembership` | `owner` | 10630 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `OwningMembership` | `owner` | 9518 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `FeatureValue` | `owner` | 7048 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `FeatureTyping` | `owner` | 5908 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `ReturnParameterMembership` | `owner` | 4735 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `ParameterMembership` | `owner` | 4376 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `Membership` | `owner` | 3144 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `AttributeUsage` | `value` | 1650 | see the `derive*` row for this property in `docs/project/constraint-manifest.json` | +| `FeatureMembership` | `owner` | 10632 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `OwningMembership` | `owner` | 9560 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `FeatureValue` | `owner` | 7066 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `FeatureTyping` | `owner` | 5915 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `ReturnParameterMembership` | `owner` | 4750 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `ParameterMembership` | `owner` | 4397 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `Membership` | `owner` | 3146 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `AttributeUsage` | `value` | 1652 | see the `derive*` row for this property in `docs/project/constraint-manifest.json` | `owner` on every relationship is the pilot leaving `Relationship::owner` null where the metamodel derives `owningRelatedElement`; ours states it. The remaining pilot-missing rows are properties this repository writes outside the metamodel's spelling (`value` on usages) or states for unnamed elements the metamodel leaves null (`qualifiedName`). From 27560c299a9e3ccae68b5f9d5a426c0d12209814 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 05:39:16 +0000 Subject: [PATCH 13/16] docs(api-json): quote the gap row's example movements from the re-recorded baseline Co-Authored-By: jason.han --- docs/project/api-json-differential.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index 92193cc5e8..909579e801 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -412,7 +412,7 @@ The (metaclass, property) rows ranked by the corpus elements on which the pilot | 39 | `FeatureTyping` | `isLibraryElement` | 5919 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | | 40 | `FeatureTyping` | `owningType` | 5915 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | | 41 | `Redefinition` | `redefinedFeature` | 0 | 58 | closed for this repository's libraries (above) | `Redefinition::redefinedFeature : Feature` (KerML 8.3.3.3.8) is an element reference, and every `Element` carries an `elementId` (KerML 8.3.2.1.2) the API's JSON refers to it by; the 330 redefinitions of a feature of this repository's libraries once spelled as a name, `{"@ref": "caption"}`, now link by the element's fixed id — the same movement for `FeatureTyping::type`, `MetadataUsage::type`, `FeatureReferenceExpression::referent` and `ReferenceSubsetting::referencedFeature` into those libraries — and the 58 left are redefinitions of a feature inherited within the model itself that the writer spells as a name (`vehicle_b_1::providePower`) | -| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1196 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4828 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal, no other bucket touched (this row 2323 → 1196, `PartDefinition` 216 → 21, `PartUsage` 1551 → 1002, `Feature` 1781 → 1381). What remains (1196) is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | +| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1196 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4828 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal, no other bucket touched (this row 2325 → 1196, `PartDefinition` 216 → 21, `PartUsage` 1553 → 1004, `Feature` 1794 → 1394). What remains (1196) is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | | 43 | `FeatureReferenceExpression` | `ownedMembership` | 0 | 7 | the writer owns the `Membership` (`export/rdf_expr.go` `featureReferent`); the 7 left are the `FunctionReferenceMember` shape, a `FeatureMembership` owning an `Expression` typed by the named function (KerML 8.2.5.8.3), which ours writes as a `Membership` of the function | `FeatureReferenceExpression::referent` is the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent); the notation maps a feature reference to that owned `Membership` (8.2.5.8.3, `FeatureReferenceMember`) | Rows an evaluator rule in PR #1232 (`internal/semantic/metamodel/rules.go`) already names are marked; that PR adds a lazy metamodel evaluator and layers its derived values into the API-JSON writer, so its merge is expected to move those rows from ours-missing to present-equal or present-different, and this referee is how that movement is measured. From 2b206e038ce0b5dede9d428168822133fe579733 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 14:01:44 +0000 Subject: [PATCH 14/16] docs(api-json): re-record the differential baseline and report on develop Co-Authored-By: jason.han --- .../api-json-differential-baseline.json | 436 +++++++++--------- docs/project/api-json-differential.md | 68 +-- 2 files changed, 253 insertions(+), 251 deletions(-) diff --git a/docs/project/api-json-differential-baseline.json b/docs/project/api-json-differential-baseline.json index d743337677..8fef3bbeda 100644 --- a/docs/project/api-json-differential-baseline.json +++ b/docs/project/api-json-differential-baseline.json @@ -14,7 +14,7 @@ { "name": "api-json-writer", "source": "internal/translate/export", - "sourceDigest": "sha256:1bd473a5637bb448817b697e5d4f30b29d41456672cf3f150e43ad966c2236df" + "sourceDigest": "sha256:d4243983afc4dd29c31fbb1f4bced92a53c9492ceafbfadaec98e42d61f28ff4" } ], "inputs": [ @@ -120,8 +120,8 @@ "typeMismatch": 1723 }, "properties": { - "presentEqual": 626369, - "presentDifferent": 40484, + "presentEqual": 631199, + "presentDifferent": 35654, "oursMissing": 1061001, "pilotMissing": 68772, "absentBoth": 2108648, @@ -160,8 +160,8 @@ "typeMismatch": 10 }, "properties": { - "presentEqual": 50704, - "presentDifferent": 3608, + "presentEqual": 51027, + "presentDifferent": 3285, "oursMissing": 86936, "pilotMissing": 5306, "absentBoth": 176892, @@ -195,8 +195,8 @@ "typeMismatch": 59 }, "properties": { - "presentEqual": 182973, - "presentDifferent": 10084, + "presentEqual": 184492, + "presentDifferent": 8565, "oursMissing": 309757, "pilotMissing": 19572, "absentBoth": 616957, @@ -230,8 +230,8 @@ "typeMismatch": 15 }, "properties": { - "presentEqual": 63680, - "presentDifferent": 5435, + "presentEqual": 64183, + "presentDifferent": 4932, "oursMissing": 108799, "pilotMissing": 7092, "absentBoth": 221634, @@ -266,8 +266,8 @@ "typeMismatch": 1032 }, "properties": { - "presentEqual": 43853, - "presentDifferent": 3110, + "presentEqual": 44382, + "presentDifferent": 2581, "oursMissing": 63793, "pilotMissing": 5268, "absentBoth": 117922, @@ -301,8 +301,8 @@ "typeMismatch": 391 }, "properties": { - "presentEqual": 44431, - "presentDifferent": 5885, + "presentEqual": 44675, + "presentDifferent": 5641, "oursMissing": 71581, "pilotMissing": 5182, "absentBoth": 142032, @@ -337,8 +337,8 @@ "typeMismatch": 30 }, "properties": { - "presentEqual": 8801, - "presentDifferent": 485, + "presentEqual": 8859, + "presentDifferent": 427, "oursMissing": 14751, "pilotMissing": 1015, "absentBoth": 31459, @@ -373,8 +373,8 @@ "typeMismatch": 186 }, "properties": { - "presentEqual": 183395, - "presentDifferent": 9555, + "presentEqual": 184724, + "presentDifferent": 8226, "oursMissing": 316469, "pilotMissing": 20345, "absentBoth": 637177, @@ -408,8 +408,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 348, - "presentDifferent": 15, + "presentEqual": 350, + "presentDifferent": 13, "oursMissing": 462, "pilotMissing": 43, "absentBoth": 1043, @@ -443,8 +443,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 48184, - "presentDifferent": 2307, + "presentEqual": 48507, + "presentDifferent": 1984, "oursMissing": 88453, "pilotMissing": 4949, "absentBoth": 163532, @@ -1778,8 +1778,8 @@ 0 ], "ActionDefinition.ownedRelationship": [ - 136, - 15, + 147, + 4, 0, 0, 26, @@ -2698,24 +2698,24 @@ 0 ], "ActionUsage.ownedRelationship": [ - 232, - 110, + 330, + 12, 3, 3, 157, 0 ], "ActionUsage.ownedSpecialization": [ - 166, - 3, + 169, + 0, 0, 1, 335, 0 ], "ActionUsage.ownedSubsetting": [ - 40, - 1, + 41, + 0, 0, 0, 464, @@ -3602,8 +3602,8 @@ 0 ], "AllocationDefinition.ownedRelationship": [ - 5, - 2, + 7, + 0, 0, 0, 1, @@ -4546,8 +4546,8 @@ 0 ], "AllocationUsage.ownedRelationship": [ - 3, - 7, + 10, + 0, 0, 0, 0, @@ -5234,8 +5234,8 @@ 0 ], "AnalysisCaseDefinition.ownedRelationship": [ - 20, - 7, + 26, + 1, 0, 0, 3, @@ -6194,16 +6194,16 @@ 0 ], "AnalysisCaseUsage.ownedRelationship": [ - 3, 37, + 3, 0, 0, 1, 0 ], "AnalysisCaseUsage.ownedSpecialization": [ - 25, - 12, + 37, + 0, 0, 0, 4, @@ -7258,24 +7258,24 @@ 0 ], "AssertConstraintUsage.ownedRelationship": [ - 61, - 18, + 79, + 0, 0, 0, 0, 0 ], "AssertConstraintUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 60, 0 ], "AssertConstraintUsage.ownedSubsetting": [ - 8, - 1, + 9, + 0, 0, 0, 70, @@ -9666,8 +9666,8 @@ 0 ], "AttributeDefinition.ownedRelationship": [ - 48, - 61, + 109, + 0, 0, 0, 99, @@ -10578,16 +10578,16 @@ 0 ], "AttributeUsage.ownedRelationship": [ - 113, - 2327, + 1244, + 1196, 36, 0, 19, 0 ], "AttributeUsage.ownedSpecialization": [ - 2302, - 30, + 2332, + 0, 0, 0, 163, @@ -11610,8 +11610,8 @@ 0 ], "BindingConnector.ownedRelationship": [ - 7, - 1, + 8, + 0, 0, 0, 0, @@ -12466,8 +12466,8 @@ 0 ], "BindingConnectorAsUsage.ownedRelationship": [ - 2, - 1, + 3, + 0, 0, 0, 0, @@ -13082,8 +13082,8 @@ 0 ], "BooleanExpression.ownedRelationship": [ - 1, - 3, + 2, + 2, 0, 0, 0, @@ -13714,8 +13714,8 @@ 0 ], "CalculationDefinition.ownedRelationship": [ - 70, - 103, + 172, + 1, 0, 0, 0, @@ -14626,8 +14626,8 @@ 0 ], "CalculationUsage.ownedRelationship": [ - 40, - 74, + 113, + 1, 0, 0, 0, @@ -15314,8 +15314,8 @@ 0 ], "CaseDefinition.ownedRelationship": [ - 1, - 2, + 3, + 0, 0, 0, 0, @@ -16250,9 +16250,9 @@ 0 ], "CaseUsage.ownedRelationship": [ - 0, 2, 0, + 0, 3, 0, 0 @@ -17154,8 +17154,8 @@ 0 ], "Classifier.ownedRelationship": [ - 47, - 18, + 59, + 6, 10, 0, 29, @@ -19418,8 +19418,8 @@ 0 ], "ConcernUsage.ownedRelationship": [ - 15, - 3, + 18, + 0, 0, 0, 3, @@ -21138,8 +21138,8 @@ 0 ], "ConnectionDefinition.ownedRelationship": [ - 36, - 7, + 43, + 0, 0, 0, 0, @@ -22098,8 +22098,8 @@ 0 ], "ConnectionUsage.ownedRelationship": [ - 18, - 61, + 79, + 0, 0, 0, 0, @@ -22762,16 +22762,16 @@ 0 ], "Connector.ownedRelationship": [ - 6, - 30, + 35, + 1, 0, 0, 0, 0 ], "Connector.ownedSpecialization": [ - 25, - 4, + 29, + 0, 0, 0, 7, @@ -23410,8 +23410,8 @@ 0 ], "ConstraintDefinition.ownedRelationship": [ - 24, - 1, + 25, + 0, 0, 0, 1, @@ -24306,8 +24306,8 @@ 0 ], "ConstraintUsage.ownedRelationship": [ - 153, - 17, + 165, + 5, 10, 0, 2, @@ -28226,8 +28226,8 @@ 0 ], "EnumerationDefinition.ownedRelationship": [ - 16, - 8, + 24, + 0, 0, 0, 1, @@ -29074,8 +29074,8 @@ 0 ], "EnumerationUsage.ownedRelationship": [ - 25, - 2, + 27, + 0, 0, 0, 40, @@ -29906,24 +29906,24 @@ 0 ], "EventOccurrenceUsage.ownedRelationship": [ - 40, - 54, + 94, + 0, 0, 0, 85, 0 ], "EventOccurrenceUsage.ownedSpecialization": [ - 49, - 28, + 77, + 0, 0, 0, 102, 0 ], "EventOccurrenceUsage.ownedSubsetting": [ - 53, - 24, + 77, + 0, 0, 0, 102, @@ -30810,24 +30810,24 @@ 0 ], "ExhibitStateUsage.ownedRelationship": [ - 35, - 9, + 41, + 3, 0, 0, 5, 0 ], "ExhibitStateUsage.ownedSpecialization": [ - 19, - 7, + 26, + 0, 0, 0, 23, 0 ], "ExhibitStateUsage.ownedSubsetting": [ - 10, - 7, + 17, + 0, 0, 0, 32, @@ -31434,8 +31434,8 @@ 0 ], "Expression.ownedRelationship": [ - 33, - 6, + 39, + 0, 0, 0, 0, @@ -32098,24 +32098,24 @@ 0 ], "Feature.ownedRelationship": [ - 3678, - 1794, + 4078, + 1394, 137, 88, 4349, 0 ], "Feature.ownedSpecialization": [ - 756, - 130, + 866, + 20, 662, 34, 8464, 0 ], "Feature.ownedSubsetting": [ - 354, - 17, + 363, + 8, 645, 6, 9024, @@ -35482,8 +35482,8 @@ 0 ], "FlowDefinition.ownedRelationship": [ - 3, - 3, + 6, + 0, 0, 0, 1, @@ -36474,16 +36474,16 @@ 0 ], "FlowUsage.ownedRelationship": [ - 37, - 69, + 59, + 47, 0, 0, 0, 0 ], "FlowUsage.ownedSpecialization": [ - 19, - 6, + 25, + 0, 0, 0, 81, @@ -38970,8 +38970,8 @@ 0 ], "Function.ownedRelationship": [ - 10, - 1, + 11, + 0, 0, 0, 0, @@ -40682,24 +40682,24 @@ 0 ], "IncludeUseCaseUsage.ownedRelationship": [ - 7, - 12, + 19, + 0, 0, 0, 0, 0 ], "IncludeUseCaseUsage.ownedSpecialization": [ - 17, - 1, + 18, + 0, 0, 0, 1, 0 ], "IncludeUseCaseUsage.ownedSubsetting": [ - 11, - 1, + 12, + 0, 0, 0, 7, @@ -42370,8 +42370,8 @@ 0 ], "InterfaceDefinition.ownedRelationship": [ - 28, - 3, + 30, + 1, 0, 0, 0, @@ -43338,8 +43338,8 @@ 0 ], "InterfaceUsage.ownedRelationship": [ - 4, 39, + 4, 0, 0, 0, @@ -45138,8 +45138,8 @@ 0 ], "ItemDefinition.ownedRelationship": [ - 55, - 11, + 60, + 6, 0, 0, 101, @@ -46050,16 +46050,16 @@ 0 ], "ItemUsage.ownedRelationship": [ - 36, - 287, + 89, + 234, 33, 0, 10, 0 ], "ItemUsage.ownedSpecialization": [ - 291, - 18, + 307, + 2, 0, 0, 57, @@ -51314,8 +51314,8 @@ 0 ], "Metaclass.ownedRelationship": [ - 4, - 4, + 8, + 0, 0, 0, 2, @@ -52370,8 +52370,8 @@ 0 ], "MetadataDefinition.ownedRelationship": [ - 12, - 6, + 18, + 0, 0, 0, 22, @@ -53786,8 +53786,8 @@ 0 ], "MetadataUsage.ownedRelationship": [ - 267, - 117, + 274, + 110, 0, 0, 0, @@ -56658,8 +56658,8 @@ 0 ], "OccurrenceDefinition.ownedRelationship": [ - 15, - 37, + 17, + 35, 2, 0, 1, @@ -57538,24 +57538,24 @@ 0 ], "OccurrenceUsage.ownedRelationship": [ - 69, - 62, + 114, + 17, 0, 0, 13, 0 ], "OccurrenceUsage.ownedSpecialization": [ - 74, - 12, + 80, + 6, 0, 0, 58, 0 ], "OccurrenceUsage.ownedSubsetting": [ - 17, - 10, + 21, + 6, 0, 0, 117, @@ -59378,8 +59378,8 @@ 0 ], "PartDefinition.ownedRelationship": [ - 423, - 216, + 618, + 21, 1, 0, 279, @@ -60346,24 +60346,24 @@ 0 ], "PartUsage.ownedRelationship": [ - 324, - 1554, + 873, + 1005, 52, 0, 40, 0 ], "PartUsage.ownedSpecialization": [ - 1527, - 37, + 1562, + 2, 0, 0, 406, 0 ], "PartUsage.ownedSubsetting": [ - 371, - 12, + 383, + 0, 2, 0, 1585, @@ -60946,8 +60946,8 @@ 0 ], "PayloadFeature.ownedRelationship": [ - 4, - 1, + 5, + 0, 0, 0, 0, @@ -61778,24 +61778,24 @@ 0 ], "PerformActionUsage.ownedRelationship": [ - 96, - 35, + 129, + 2, 2, 0, 24, 0 ], "PerformActionUsage.ownedSpecialization": [ - 97, - 17, + 114, + 0, 2, 0, 41, 0 ], "PerformActionUsage.ownedSubsetting": [ - 88, - 17, + 105, + 0, 2, 0, 50, @@ -62602,8 +62602,8 @@ 0 ], "PortDefinition.ownedRelationship": [ - 74, - 51, + 77, + 48, 0, 0, 0, @@ -63490,16 +63490,16 @@ 0 ], "PortUsage.ownedRelationship": [ - 20, - 415, + 99, + 336, 30, 1, 2, 0 ], "PortUsage.ownedSpecialization": [ - 412, - 10, + 418, + 4, 0, 1, 45, @@ -65250,24 +65250,24 @@ 0 ], "ReferenceUsage.ownedRelationship": [ - 1255, - 838, + 2005, + 88, 3, 0, 98, 0 ], "ReferenceUsage.ownedSpecialization": [ - 1650, - 75, + 1707, + 18, 4, 0, 465, 0 ], "ReferenceUsage.ownedSubsetting": [ - 808, - 22, + 814, + 16, 6, 0, 1358, @@ -65898,10 +65898,10 @@ 0 ], "RenderingDefinition.ownedRelationship": [ - 0, 1, 0, 0, + 0, 1, 0 ], @@ -66778,8 +66778,8 @@ 0 ], "RenderingUsage.ownedRelationship": [ - 1, - 33, + 4, + 30, 1, 0, 0, @@ -67706,8 +67706,8 @@ 0 ], "RequirementDefinition.ownedRelationship": [ - 84, - 16, + 98, + 2, 0, 0, 9, @@ -68714,16 +68714,16 @@ 0 ], "RequirementUsage.ownedRelationship": [ - 113, - 139, + 243, + 9, 0, 0, 19, 0 ], "RequirementUsage.ownedSpecialization": [ - 161, - 18, + 179, + 0, 0, 0, 92, @@ -70386,16 +70386,16 @@ 0 ], "SatisfyRequirementUsage.ownedRelationship": [ - 11, - 69, + 77, + 3, 0, 0, 0, 0 ], "SatisfyRequirementUsage.ownedSpecialization": [ - 77, - 3, + 78, + 2, 0, 0, 0, @@ -72922,8 +72922,8 @@ 0 ], "StateDefinition.ownedRelationship": [ - 31, - 4, + 35, + 0, 0, 0, 11, @@ -74082,24 +74082,24 @@ 0 ], "StateUsage.ownedRelationship": [ - 80, - 17, + 89, + 8, 1, 0, 208, 0 ], "StateUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 287, 0 ], "StateUsage.ownedSubsetting": [ - 9, - 1, + 10, + 0, 0, 0, 296, @@ -74698,16 +74698,16 @@ 0 ], "Step.ownedRelationship": [ - 25, - 51, + 69, + 7, 0, 0, 2, 0 ], "Step.ownedSpecialization": [ - 49, - 15, + 64, + 0, 0, 0, 14, @@ -76306,16 +76306,16 @@ 0 ], "Succession.ownedRelationship": [ - 15, - 11, + 25, + 1, 0, 0, 0, 0 ], "Succession.ownedSpecialization": [ - 1, 10, + 1, 0, 0, 15, @@ -77186,8 +77186,8 @@ 0 ], "SuccessionAsUsage.ownedRelationship": [ - 10, - 2, + 11, + 1, 0, 0, 0, @@ -82018,8 +82018,8 @@ 0 ], "Type.ownedRelationship": [ - 4, - 37, + 11, + 30, 0, 0, 0, @@ -82954,8 +82954,8 @@ 0 ], "Usage.ownedRelationship": [ - 20, - 10, + 21, + 9, 0, 0, 0, @@ -83626,8 +83626,8 @@ 0 ], "UseCaseDefinition.ownedRelationship": [ - 16, - 2, + 18, + 0, 0, 0, 1, @@ -84586,24 +84586,24 @@ 0 ], "UseCaseUsage.ownedRelationship": [ - 15, - 8, + 23, + 0, 0, 1, 3, 0 ], "UseCaseUsage.ownedSpecialization": [ - 10, - 1, + 11, + 0, 0, 1, 15, 0 ], "UseCaseUsage.ownedSubsetting": [ - 2, - 1, + 3, + 0, 0, 1, 23, @@ -86410,8 +86410,8 @@ 0 ], "VerificationCaseUsage.ownedRelationship": [ - 1, - 41, + 42, + 0, 0, 1, 1, @@ -87058,8 +87058,8 @@ 0 ], "ViewDefinition.ownedRelationship": [ - 6, - 6, + 10, + 2, 0, 1, 3, @@ -88178,8 +88178,8 @@ 0 ], "ViewUsage.ownedRelationship": [ - 34, - 65, + 91, + 8, 0, 0, 0, @@ -89842,8 +89842,8 @@ 0 ], "ViewpointUsage.ownedRelationship": [ - 7, - 2, + 9, + 0, 0, 0, 0, diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index 185f16d5ea..44c9f46493 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -190,21 +190,21 @@ The pinned pilot's verdict on the probe (`validate-sysml-batch`): clean. ## Results (pilot `2026-08`, 924 files) -**Scorecard:** 924 files; 90278 elements matched (28431 ours-only, 38778 pilot-only, 0 of them implied); properties: 626369 present-equal, 40484 present-different, 1061001 ours-missing, 68772 pilot-missing, 2108648 absent-both, 25713 indeterminate. +**Scorecard:** 924 files; 90278 elements matched (28431 ours-only, 38778 pilot-only, 0 of them implied); properties: 631199 present-equal, 35654 present-different, 1061001 ours-missing, 68772 pilot-missing, 2108648 absent-both, 25713 indeterminate. The pilot's export failed on 56 files (`pilotFailed`: its own export throws on an element without a resource, 52 of them specification examples and 4 test fixtures; the files are named in the run's text report), ours refused 36 (all of them specification examples the parser could not read whole), left the pilot's 56 failed files out and converted 26 documents alone for declaring an element another document of their root declares (`oursColliding`); no root fell back to per-document conversion. 11311 (metaclass, property) rows carry a comparison; 108553 references compared through the unkeyed sentinel, 147292 of our `sysx:` annotations were left out, and 293/347 elements (ours/pilot) were dropped for ambiguous keys, 8210/31316 for having none. | root | files | matched | ours-only | pilot-only | present-equal | present-different | ours-missing | pilot-missing | |---|---:|---:|---:|---:|---:|---:|---:|---:| -| `examples/sysml-v2-training` | 100 | 7287 | 2131 | 2873 | 50704 | 3608 | 86936 | 5306 | -| `examples/pilot-corpora/sysml-examples` | 99 | 25864 | 9952 | 10402 | 182973 | 10084 | 309757 | 19572 | -| `examples/pilot-corpora/sysml-validation` | 56 | 9246 | 2967 | 3341 | 63680 | 5435 | 108799 | 7092 | -| `examples/pilot-corpora/kerml-examples` | 58 | 6387 | 1637 | 1854 | 43853 | 3110 | 63793 | 5268 | -| `examples/spec-examples` | 511 | 6980 | 1966 | 2728 | 44431 | 5885 | 71581 | 5182 | -| `tests/testdata` | 36 | 1357 | 97 | 552 | 8801 | 485 | 14751 | 1015 | -| `examples` | 52 | 26084 | 8734 | 14946 | 183395 | 9555 | 316469 | 20345 | -| `tools/referee/diff/testdata` | 4 | 53 | 0 | 0 | 348 | 15 | 462 | 43 | -| `docs/manual/examples` | 8 | 7020 | 947 | 2082 | 48184 | 2307 | 88453 | 4949 | +| `examples/sysml-v2-training` | 100 | 7287 | 2131 | 2873 | 51027 | 3285 | 86936 | 5306 | +| `examples/pilot-corpora/sysml-examples` | 99 | 25864 | 9952 | 10402 | 184492 | 8565 | 309757 | 19572 | +| `examples/pilot-corpora/sysml-validation` | 56 | 9246 | 2967 | 3341 | 64183 | 4932 | 108799 | 7092 | +| `examples/pilot-corpora/kerml-examples` | 58 | 6387 | 1637 | 1854 | 44382 | 2581 | 63793 | 5268 | +| `examples/spec-examples` | 511 | 6980 | 1966 | 2728 | 44675 | 5641 | 71581 | 5182 | +| `tests/testdata` | 36 | 1357 | 97 | 552 | 8859 | 427 | 14751 | 1015 | +| `examples` | 52 | 26084 | 8734 | 14946 | 184724 | 8226 | 316469 | 20345 | +| `tools/referee/diff/testdata` | 4 | 53 | 0 | 0 | 350 | 13 | 462 | 43 | +| `docs/manual/examples` | 8 | 7020 | 947 | 2082 | 48507 | 1984 | 88453 | 4949 | The scorecard is mostly **ours-missing**: this repository's writer emits a subset of the metamodel's properties, and the referee now measures which, per metaclass. The full ranked scorecard with one concrete example per differing row is `build/pilot-apijson-diff/pilot-apijson-diff.txt` after a run; the baseline keeps every row's five counts. @@ -214,29 +214,29 @@ The largest **present-different** rows, with the reading the examples support: | metaclass | property | present-equal | present-different | |---|---|---:|---:| -| `AttributeUsage` | `ownedRelationship` | 113 | 2323 | -| `Feature` | `ownedRelationship` | 3670 | 1781 | -| `PartUsage` | `ownedRelationship` | 309 | 1551 | +| `Feature` | `ownedRelationship` | 4078 | 1394 | +| `AttributeUsage` | `ownedRelationship` | 1244 | 1196 | +| `PartUsage` | `ownedRelationship` | 873 | 1005 | | `ReferenceUsage` | `qualifiedName` | 983 | 882 | -| `ReferenceUsage` | `ownedRelationship` | 1255 | 838 | -| `PartUsage` | `qualifiedName` | 1119 | 830 | -| `Package` | `qualifiedName` | 460 | 723 | -| `PartUsage` | `ownedMember` | 362 | 702 | -| `PartUsage` | `ownedMembership` | 716 | 634 | -| `AttributeUsage` | `ownedMembership` | 1178 | 622 | +| `PartUsage` | `qualifiedName` | 1137 | 830 | +| `Package` | `qualifiedName` | 474 | 723 | +| `PartUsage` | `ownedMember` | 367 | 703 | +| `PartUsage` | `ownedMembership` | 721 | 635 | +| `AttributeUsage` | `ownedMembership` | 1180 | 624 | +| `FeatureMembership` | `memberElement` | 9186 | 592 | ### Where the pilot states nothing and we do | metaclass | property | pilot-missing | clause | |---|---|---:|---| -| `FeatureMembership` | `owner` | 10630 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `OwningMembership` | `owner` | 9518 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `FeatureValue` | `owner` | 7048 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `FeatureTyping` | `owner` | 5908 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `ReturnParameterMembership` | `owner` | 4735 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `ParameterMembership` | `owner` | 4376 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `Membership` | `owner` | 3144 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | -| `AttributeUsage` | `value` | 1650 | see the `derive*` row for this property in `docs/project/constraint-manifest.json` | +| `FeatureMembership` | `owner` | 10635 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `OwningMembership` | `owner` | 9560 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `FeatureValue` | `owner` | 7068 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `FeatureTyping` | `owner` | 5916 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `ReturnParameterMembership` | `owner` | 4750 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `ParameterMembership` | `owner` | 4397 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `Membership` | `owner` | 3146 | `Element::owner = owningRelationship.owningRelatedElement`, and `Relationship::owner = owningRelatedElement` (KerML 8.3.2.1, 8.3.2.5.2) | +| `AttributeUsage` | `value` | 1654 | see the `derive*` row for this property in `docs/project/constraint-manifest.json` | `owner` on every relationship is the pilot leaving `Relationship::owner` null where the metamodel derives `owningRelatedElement`; ours states it. The remaining pilot-missing rows are properties this repository writes outside the metamodel's spelling (`value` on usages) or states for unnamed elements the metamodel leaves null (`qualifiedName`). @@ -283,11 +283,13 @@ measured on library-backed members too. The first and the third are closed (the element by it, so the pilot's reading is the metamodel's — the writer now fixes an id for these elements too; - the order of `ownedRelationship` on a usage that both redefines and has a value: the pilot lists - the `Redefinition` before the `FeatureValue`, in the order the notation declares them; ours lists - the value first (275 `AttributeUsage`, 97 `ReferenceUsage`, 2 `RenderingUsage`). `ownedRelationship` - is ordered (KerML 8.3.2.1.2 Element, `ownedRelationship : Relationship [0..*] {ordered}`), and the - textual notation adds an element's owned relationships as it parses them, so the pilot's order is - the notation's, a shape the `AttributeUsage` `ownedRelationship` row already carried; + the `Redefinition` before the `FeatureValue`, in the order the notation declares them, where ours + listed the value first (275 `AttributeUsage`, 97 `ReferenceUsage`, 2 `RenderingUsage`). + `ownedRelationship` is ordered (KerML 8.3.2.1.2 Element, `ownedRelationship : Relationship [0..*] + {ordered}`), and the textual notation adds an element's owned relationships as it parses each + clause (KerML 8.2.1 Table 3, `ownedRelationship += …`), so the pilot's order is the notation's. The + writer now owns a head's relationships in that order (the row below records the re-measurement), + and these sites agree; - a `FeatureReferenceExpression` owns a `Membership` of its referent, which both sides now write: `referent` is derived as the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent), and the @@ -410,7 +412,7 @@ The (metaclass, property) rows ranked by the corpus elements on which the pilot | 39 | `FeatureTyping` | `isLibraryElement` | 5920 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | | 40 | `FeatureTyping` | `owningType` | 5916 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | | 41 | `Redefinition` | `redefinedFeature` | 0 | 58 | closed for this repository's libraries (above) | `Redefinition::redefinedFeature : Feature` (KerML 8.3.3.3.8) is an element reference, and every `Element` carries an `elementId` (KerML 8.3.2.1.2) the API's JSON refers to it by; the 330 redefinitions of a feature of this repository's libraries once spelled as a name, `{"@ref": "caption"}`, now link by the element's fixed id — the same movement for `FeatureTyping::type`, `MetadataUsage::type`, `FeatureReferenceExpression::referent` and `ReferenceSubsetting::referencedFeature` into those libraries — and the 58 left are redefinitions of a feature inherited within the model itself that the writer spells as a name (`vehicle_b_1::providePower`) | -| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 2327 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2) in the order the notation declares them: a usage's `Redefinition` (`redefines x`) before its `FeatureValue` (`= …`); ours lists the value first | +| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1196 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4830 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal, no other bucket touched (this row 2327 → 1196, `PartDefinition` 216 → 21, `PartUsage` 1554 → 1005, `Feature` 1794 → 1394). What remains (1196) is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | | 43 | `FeatureReferenceExpression` | `ownedMembership` | 0 | 7 | the writer owns the `Membership` (`export/rdf_expr.go` `featureReferent`); the 7 left are the `FunctionReferenceMember` shape, a `FeatureMembership` owning an `Expression` typed by the named function (KerML 8.2.5.8.3), which ours writes as a `Membership` of the function | `FeatureReferenceExpression::referent` is the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent); the notation maps a feature reference to that owned `Membership` (8.2.5.8.3, `FeatureReferenceMember`) | Rows an evaluator rule in PR #1232 (`internal/semantic/metamodel/rules.go`) already names are marked; that PR adds a lazy metamodel evaluator and layers its derived values into the API-JSON writer, so its merge is expected to move those rows from ours-missing to present-equal or present-different, and this referee is how that movement is measured. From 522d799e60db1b7f6b7d6c693b79771dc58537de Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:03:24 +0000 Subject: [PATCH 15/16] docs(api-json): re-record the differential baseline and report on develop with the derived properties Co-Authored-By: jason.han --- .../api-json-differential-baseline.json | 436 +++++++++--------- docs/project/api-json-differential.md | 42 +- 2 files changed, 240 insertions(+), 238 deletions(-) diff --git a/docs/project/api-json-differential-baseline.json b/docs/project/api-json-differential-baseline.json index 6423b6c826..6557121308 100644 --- a/docs/project/api-json-differential-baseline.json +++ b/docs/project/api-json-differential-baseline.json @@ -14,7 +14,7 @@ { "name": "api-json-writer", "source": "internal/translate/export", - "sourceDigest": "sha256:b715d8db18f35cfd8ec15482fd3e45d533ef3d08fc1a3a6ca1d955b17c405406" + "sourceDigest": "sha256:abd846fc58b3a5a725933274a2bbe324f5577150d30886e796a6440b155f392c" } ], "inputs": [ @@ -120,8 +120,8 @@ "typeMismatch": 1729 }, "properties": { - "presentEqual": 644960, - "presentDifferent": 31668, + "presentEqual": 649821, + "presentDifferent": 26807, "oursMissing": 1079787, "pilotMissing": 66545, "absentBoth": 2406377, @@ -160,8 +160,8 @@ "typeMismatch": 10 }, "properties": { - "presentEqual": 53056, - "presentDifferent": 2136, + "presentEqual": 53381, + "presentDifferent": 1811, "oursMissing": 88043, "pilotMissing": 5126, "absentBoth": 200267, @@ -195,8 +195,8 @@ "typeMismatch": 59 }, "properties": { - "presentEqual": 191619, - "presentDifferent": 9050, + "presentEqual": 193152, + "presentDifferent": 7517, "oursMissing": 318686, "pilotMissing": 19458, "absentBoth": 714824, @@ -230,8 +230,8 @@ "typeMismatch": 15 }, "properties": { - "presentEqual": 66569, - "presentDifferent": 3631, + "presentEqual": 67082, + "presentDifferent": 3118, "oursMissing": 110547, "pilotMissing": 6811, "absentBoth": 251999, @@ -266,8 +266,8 @@ "typeMismatch": 1034 }, "properties": { - "presentEqual": 44047, - "presentDifferent": 3034, + "presentEqual": 44577, + "presentDifferent": 2504, "oursMissing": 63934, "pilotMissing": 5065, "absentBoth": 135877, @@ -301,8 +301,8 @@ "typeMismatch": 397 }, "properties": { - "presentEqual": 47050, - "presentDifferent": 1732, + "presentEqual": 47298, + "presentDifferent": 1484, "oursMissing": 75012, "pilotMissing": 5041, "absentBoth": 163772, @@ -337,8 +337,8 @@ "typeMismatch": 28 }, "properties": { - "presentEqual": 9219, - "presentDifferent": 459, + "presentEqual": 9277, + "presentDifferent": 401, "oursMissing": 15672, "pilotMissing": 997, "absentBoth": 36926, @@ -373,8 +373,8 @@ "typeMismatch": 186 }, "properties": { - "presentEqual": 184854, - "presentDifferent": 9318, + "presentEqual": 186183, + "presentDifferent": 7989, "oursMissing": 318978, "pilotMissing": 19327, "absentBoth": 717805, @@ -408,8 +408,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 360, - "presentDifferent": 3, + "presentEqual": 362, + "presentDifferent": 1, "oursMissing": 462, "pilotMissing": 41, "absentBoth": 1178, @@ -443,8 +443,8 @@ "typeMismatch": 0 }, "properties": { - "presentEqual": 48186, - "presentDifferent": 2305, + "presentEqual": 48509, + "presentDifferent": 1982, "oursMissing": 88453, "pilotMissing": 4679, "absentBoth": 183729, @@ -1810,8 +1810,8 @@ 0 ], "ActionDefinition.ownedRelationship": [ - 136, - 15, + 147, + 4, 0, 0, 26, @@ -2738,24 +2738,24 @@ 0 ], "ActionUsage.ownedRelationship": [ - 240, - 110, + 338, + 12, 3, 3, 161, 0 ], "ActionUsage.ownedSpecialization": [ - 166, - 3, + 169, + 0, 0, 1, 347, 0 ], "ActionUsage.ownedSubsetting": [ - 40, - 1, + 41, + 0, 0, 0, 476, @@ -3682,8 +3682,8 @@ 0 ], "AllocationDefinition.ownedRelationship": [ - 5, - 2, + 7, + 0, 0, 0, 1, @@ -4650,8 +4650,8 @@ 0 ], "AllocationUsage.ownedRelationship": [ - 3, - 7, + 10, + 0, 0, 0, 0, @@ -5362,8 +5362,8 @@ 0 ], "AnalysisCaseDefinition.ownedRelationship": [ - 20, - 7, + 26, + 1, 0, 0, 3, @@ -6338,16 +6338,16 @@ 0 ], "AnalysisCaseUsage.ownedRelationship": [ - 3, 37, + 3, 0, 0, 1, 0 ], "AnalysisCaseUsage.ownedSpecialization": [ - 25, - 12, + 37, + 0, 0, 0, 4, @@ -7450,24 +7450,24 @@ 0 ], "AssertConstraintUsage.ownedRelationship": [ - 61, - 18, + 79, + 0, 0, 0, 0, 0 ], "AssertConstraintUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 60, 0 ], "AssertConstraintUsage.ownedSubsetting": [ - 8, - 1, + 9, + 0, 0, 0, 70, @@ -9906,8 +9906,8 @@ 0 ], "AttributeDefinition.ownedRelationship": [ - 48, - 61, + 109, + 0, 0, 0, 99, @@ -10810,16 +10810,16 @@ 0 ], "AttributeUsage.ownedRelationship": [ - 113, - 2332, + 1248, + 1197, 36, 0, 19, 0 ], "AttributeUsage.ownedSpecialization": [ - 2307, - 30, + 2337, + 0, 0, 0, 163, @@ -11866,8 +11866,8 @@ 0 ], "BindingConnector.ownedRelationship": [ - 7, - 1, + 8, + 0, 0, 0, 0, @@ -12746,8 +12746,8 @@ 0 ], "BindingConnectorAsUsage.ownedRelationship": [ - 2, - 1, + 3, + 0, 0, 0, 0, @@ -13386,8 +13386,8 @@ 0 ], "BooleanExpression.ownedRelationship": [ - 1, - 3, + 2, + 2, 0, 0, 0, @@ -14026,8 +14026,8 @@ 0 ], "CalculationDefinition.ownedRelationship": [ - 70, - 103, + 172, + 1, 0, 0, 0, @@ -14946,8 +14946,8 @@ 0 ], "CalculationUsage.ownedRelationship": [ - 40, - 74, + 113, + 1, 0, 0, 0, @@ -15650,8 +15650,8 @@ 0 ], "CaseDefinition.ownedRelationship": [ - 1, - 2, + 3, + 0, 0, 0, 0, @@ -16602,9 +16602,9 @@ 0 ], "CaseUsage.ownedRelationship": [ - 0, 2, 0, + 0, 3, 0, 0 @@ -17514,8 +17514,8 @@ 0 ], "Classifier.ownedRelationship": [ - 48, - 17, + 60, + 5, 10, 0, 29, @@ -19842,8 +19842,8 @@ 0 ], "ConcernUsage.ownedRelationship": [ - 15, - 3, + 18, + 0, 0, 0, 3, @@ -21634,8 +21634,8 @@ 0 ], "ConnectionDefinition.ownedRelationship": [ - 36, - 7, + 43, + 0, 0, 0, 0, @@ -22618,8 +22618,8 @@ 0 ], "ConnectionUsage.ownedRelationship": [ - 18, - 61, + 79, + 0, 0, 0, 0, @@ -23314,16 +23314,16 @@ 0 ], "Connector.ownedRelationship": [ - 6, - 30, + 35, + 1, 0, 0, 0, 0 ], "Connector.ownedSpecialization": [ - 25, - 4, + 29, + 0, 0, 0, 7, @@ -23978,8 +23978,8 @@ 0 ], "ConstraintDefinition.ownedRelationship": [ - 24, - 1, + 25, + 0, 0, 0, 1, @@ -24914,8 +24914,8 @@ 0 ], "ConstraintUsage.ownedRelationship": [ - 163, - 29, + 175, + 17, 10, 0, 2, @@ -28994,8 +28994,8 @@ 0 ], "EnumerationDefinition.ownedRelationship": [ - 16, - 8, + 24, + 0, 0, 0, 1, @@ -29858,8 +29858,8 @@ 0 ], "EnumerationUsage.ownedRelationship": [ - 25, - 2, + 27, + 0, 0, 0, 40, @@ -30698,24 +30698,24 @@ 0 ], "EventOccurrenceUsage.ownedRelationship": [ - 40, - 54, + 94, + 0, 0, 0, 85, 0 ], "EventOccurrenceUsage.ownedSpecialization": [ - 49, - 28, + 77, + 0, 0, 0, 102, 0 ], "EventOccurrenceUsage.ownedSubsetting": [ - 53, - 24, + 77, + 0, 0, 0, 102, @@ -31626,24 +31626,24 @@ 0 ], "ExhibitStateUsage.ownedRelationship": [ - 35, - 10, + 42, + 3, 0, 0, 5, 0 ], "ExhibitStateUsage.ownedSpecialization": [ - 19, - 8, + 27, + 0, 0, 0, 23, 0 ], "ExhibitStateUsage.ownedSubsetting": [ - 10, - 8, + 18, + 0, 0, 0, 32, @@ -32266,8 +32266,8 @@ 0 ], "Expression.ownedRelationship": [ - 33, - 6, + 39, + 0, 0, 0, 0, @@ -32938,24 +32938,24 @@ 0 ], "Feature.ownedRelationship": [ - 3758, - 1802, + 4159, + 1401, 137, 88, 4363, 0 ], "Feature.ownedSpecialization": [ - 764, - 130, + 874, + 20, 662, 34, 8558, 0 ], "Feature.ownedSubsetting": [ - 362, - 17, + 371, + 8, 645, 6, 9118, @@ -36482,8 +36482,8 @@ 0 ], "FlowDefinition.ownedRelationship": [ - 3, - 3, + 6, + 0, 0, 0, 1, @@ -38034,16 +38034,16 @@ 0 ], "FlowUsage.ownedRelationship": [ - 37, - 69, + 59, + 47, 0, 0, 0, 0 ], "FlowUsage.ownedSpecialization": [ - 19, - 6, + 25, + 0, 0, 0, 81, @@ -40626,8 +40626,8 @@ 0 ], "Function.ownedRelationship": [ - 10, - 1, + 11, + 0, 0, 0, 0, @@ -42378,24 +42378,24 @@ 0 ], "IncludeUseCaseUsage.ownedRelationship": [ - 7, - 12, + 19, + 0, 0, 0, 0, 0 ], "IncludeUseCaseUsage.ownedSpecialization": [ - 17, - 1, + 18, + 0, 0, 0, 1, 0 ], "IncludeUseCaseUsage.ownedSubsetting": [ - 11, - 1, + 12, + 0, 0, 0, 7, @@ -44122,8 +44122,8 @@ 0 ], "InterfaceDefinition.ownedRelationship": [ - 28, - 3, + 30, + 1, 0, 0, 0, @@ -45114,8 +45114,8 @@ 0 ], "InterfaceUsage.ownedRelationship": [ - 4, 39, + 4, 0, 0, 0, @@ -46978,8 +46978,8 @@ 0 ], "ItemDefinition.ownedRelationship": [ - 55, - 11, + 60, + 6, 0, 0, 101, @@ -47898,16 +47898,16 @@ 0 ], "ItemUsage.ownedRelationship": [ - 36, - 287, + 89, + 234, 33, 0, 10, 0 ], "ItemUsage.ownedSpecialization": [ - 291, - 18, + 307, + 2, 0, 0, 57, @@ -53378,8 +53378,8 @@ 0 ], "Metaclass.ownedRelationship": [ - 4, - 4, + 8, + 0, 0, 0, 2, @@ -54458,8 +54458,8 @@ 0 ], "MetadataDefinition.ownedRelationship": [ - 12, - 6, + 18, + 0, 0, 0, 22, @@ -55914,8 +55914,8 @@ 0 ], "MetadataUsage.ownedRelationship": [ - 268, - 117, + 275, + 110, 0, 0, 0, @@ -58898,8 +58898,8 @@ 0 ], "OccurrenceDefinition.ownedRelationship": [ - 15, - 37, + 17, + 35, 2, 0, 1, @@ -59786,24 +59786,24 @@ 0 ], "OccurrenceUsage.ownedRelationship": [ - 69, - 62, + 114, + 17, 0, 0, 13, 0 ], "OccurrenceUsage.ownedSpecialization": [ - 74, - 12, + 80, + 6, 0, 0, 58, 0 ], "OccurrenceUsage.ownedSubsetting": [ - 17, - 10, + 21, + 6, 0, 0, 117, @@ -61666,8 +61666,8 @@ 0 ], "PartDefinition.ownedRelationship": [ - 424, - 215, + 619, + 20, 1, 0, 279, @@ -62626,24 +62626,24 @@ 0 ], "PartUsage.ownedRelationship": [ - 324, - 1554, + 874, + 1004, 52, 0, 40, 0 ], "PartUsage.ownedSpecialization": [ - 1527, - 37, + 1562, + 2, 0, 0, 406, 0 ], "PartUsage.ownedSubsetting": [ - 371, - 12, + 383, + 0, 2, 0, 1585, @@ -63250,8 +63250,8 @@ 0 ], "PayloadFeature.ownedRelationship": [ - 47, - 10, + 57, + 0, 0, 0, 0, @@ -64106,24 +64106,24 @@ 0 ], "PerformActionUsage.ownedRelationship": [ - 143, - 43, + 182, + 4, 6, 0, 44, 0 ], "PerformActionUsage.ownedSpecialization": [ - 133, - 17, + 150, + 0, 2, 0, 84, 0 ], "PerformActionUsage.ownedSubsetting": [ - 121, - 17, + 138, + 0, 2, 0, 96, @@ -64970,8 +64970,8 @@ 0 ], "PortDefinition.ownedRelationship": [ - 74, - 51, + 77, + 48, 0, 0, 0, @@ -65866,16 +65866,16 @@ 0 ], "PortUsage.ownedRelationship": [ - 20, - 435, + 99, + 356, 30, 1, 2, 0 ], "PortUsage.ownedSpecialization": [ - 432, - 10, + 438, + 4, 0, 1, 45, @@ -67674,24 +67674,24 @@ 0 ], "ReferenceUsage.ownedRelationship": [ - 1354, - 852, + 2110, + 96, 3, 0, 105, 0 ], "ReferenceUsage.ownedSpecialization": [ - 1761, - 75, + 1818, + 18, 4, 0, 474, 0 ], "ReferenceUsage.ownedSubsetting": [ - 914, - 22, + 920, + 16, 6, 0, 1372, @@ -68330,10 +68330,10 @@ 0 ], "RenderingDefinition.ownedRelationship": [ - 0, 1, 0, 0, + 0, 1, 0 ], @@ -69226,8 +69226,8 @@ 0 ], "RenderingUsage.ownedRelationship": [ - 1, - 33, + 4, + 30, 1, 0, 0, @@ -70186,8 +70186,8 @@ 0 ], "RequirementDefinition.ownedRelationship": [ - 84, - 16, + 98, + 2, 0, 0, 9, @@ -71194,16 +71194,16 @@ 0 ], "RequirementUsage.ownedRelationship": [ - 113, - 139, + 243, + 9, 0, 0, 19, 0 ], "RequirementUsage.ownedSpecialization": [ - 161, - 18, + 179, + 0, 0, 0, 92, @@ -72962,16 +72962,16 @@ 0 ], "SatisfyRequirementUsage.ownedRelationship": [ - 11, - 69, + 77, + 3, 0, 0, 0, 0 ], "SatisfyRequirementUsage.ownedSpecialization": [ - 77, - 3, + 78, + 2, 0, 0, 0, @@ -75602,8 +75602,8 @@ 0 ], "StateDefinition.ownedRelationship": [ - 31, - 4, + 35, + 0, 0, 0, 11, @@ -76794,24 +76794,24 @@ 0 ], "StateUsage.ownedRelationship": [ - 80, - 17, + 89, + 8, 1, 0, 208, 0 ], "StateUsage.ownedSpecialization": [ - 18, - 1, + 19, + 0, 0, 0, 287, 0 ], "StateUsage.ownedSubsetting": [ - 9, - 1, + 10, + 0, 0, 0, 296, @@ -77426,16 +77426,16 @@ 0 ], "Step.ownedRelationship": [ - 25, - 51, + 69, + 7, 0, 0, 2, 0 ], "Step.ownedSpecialization": [ - 49, - 15, + 64, + 0, 0, 0, 14, @@ -79098,16 +79098,16 @@ 0 ], "Succession.ownedRelationship": [ - 15, - 11, + 25, + 1, 0, 0, 0, 0 ], "Succession.ownedSpecialization": [ - 1, 10, + 1, 0, 0, 15, @@ -80002,8 +80002,8 @@ 0 ], "SuccessionAsUsage.ownedRelationship": [ - 10, - 2, + 11, + 1, 0, 0, 0, @@ -85026,8 +85026,8 @@ 0 ], "Type.ownedRelationship": [ - 4, - 37, + 11, + 30, 0, 0, 0, @@ -85994,8 +85994,8 @@ 0 ], "Usage.ownedRelationship": [ - 20, - 10, + 21, + 9, 0, 0, 0, @@ -86674,8 +86674,8 @@ 0 ], "UseCaseDefinition.ownedRelationship": [ - 16, - 2, + 18, + 0, 0, 0, 1, @@ -87650,24 +87650,24 @@ 0 ], "UseCaseUsage.ownedRelationship": [ - 15, - 8, + 23, + 0, 0, 1, 3, 0 ], "UseCaseUsage.ownedSpecialization": [ - 10, - 1, + 11, + 0, 0, 1, 15, 0 ], "UseCaseUsage.ownedSubsetting": [ - 2, - 1, + 3, + 0, 0, 1, 23, @@ -89530,8 +89530,8 @@ 0 ], "VerificationCaseUsage.ownedRelationship": [ - 1, - 41, + 42, + 0, 0, 1, 1, @@ -90194,8 +90194,8 @@ 0 ], "ViewDefinition.ownedRelationship": [ - 6, - 6, + 10, + 2, 0, 1, 3, @@ -91354,8 +91354,8 @@ 0 ], "ViewUsage.ownedRelationship": [ - 34, - 65, + 92, + 7, 0, 0, 0, @@ -93058,8 +93058,8 @@ 0 ], "ViewpointUsage.ownedRelationship": [ - 7, - 2, + 9, + 0, 0, 0, 0, diff --git a/docs/project/api-json-differential.md b/docs/project/api-json-differential.md index 0c4bb997e3..144b4d2c68 100644 --- a/docs/project/api-json-differential.md +++ b/docs/project/api-json-differential.md @@ -190,21 +190,21 @@ The pinned pilot's verdict on the probe (`validate-sysml-batch`): clean. ## Results (pilot `2026-08`, 924 files) -**Scorecard:** 924 files; 91721 elements matched (18392 ours-only, 37335 pilot-only, 0 of them implied); properties: 644960 present-equal, 31668 present-different, 1079787 ours-missing, 66545 pilot-missing, 2406377 absent-both, 26031 indeterminate. +**Scorecard:** 924 files; 91721 elements matched (18392 ours-only, 37335 pilot-only, 0 of them implied); properties: 649821 present-equal, 26807 present-different, 1079787 ours-missing, 66545 pilot-missing, 2406377 absent-both, 26031 indeterminate. The pilot's export failed on 56 files (`pilotFailed`: its own export throws on an element without a resource, 52 of them specification examples and 4 test fixtures; the files are named in the run's text report), ours refused 36 (all of them specification examples the parser could not read whole), left the pilot's 56 failed files out and converted 26 documents alone for declaring an element another document of their root declares (`oursColliding`); no root fell back to per-document conversion. 11718 (metaclass, property) rows carry a comparison; 110971 references compared through the unkeyed sentinel, 157882 of our `sysx:` annotations were left out, and 285/347 elements (ours/pilot) were dropped for ambiguous keys, 16850/31316 for having none. | root | files | matched | ours-only | pilot-only | present-equal | present-different | ours-missing | pilot-missing | |---|---:|---:|---:|---:|---:|---:|---:|---:| -| `examples/sysml-v2-training` | 100 | 7391 | 1150 | 2769 | 53056 | 2136 | 88043 | 5126 | -| `examples/pilot-corpora/sysml-examples` | 99 | 26739 | 6157 | 9527 | 191619 | 9050 | 318686 | 19458 | -| `examples/pilot-corpora/sysml-validation` | 56 | 9377 | 1882 | 3210 | 66569 | 3631 | 110547 | 6811 | -| `examples/pilot-corpora/kerml-examples` | 58 | 6399 | 1166 | 1842 | 44047 | 3034 | 63934 | 5065 | -| `examples/spec-examples` | 511 | 7074 | 990 | 2634 | 47050 | 1732 | 75012 | 5041 | -| `tests/testdata` | 36 | 1414 | 171 | 495 | 9219 | 459 | 15672 | 997 | -| `examples` | 52 | 26254 | 5956 | 14776 | 184854 | 9318 | 318978 | 19327 | -| `tools/referee/diff/testdata` | 4 | 53 | 0 | 0 | 360 | 3 | 462 | 41 | -| `docs/manual/examples` | 8 | 7020 | 920 | 2082 | 48186 | 2305 | 88453 | 4679 | +| `examples/sysml-v2-training` | 100 | 7391 | 1150 | 2769 | 53381 | 1811 | 88043 | 5126 | +| `examples/pilot-corpora/sysml-examples` | 99 | 26739 | 6157 | 9527 | 193152 | 7517 | 318686 | 19458 | +| `examples/pilot-corpora/sysml-validation` | 56 | 9377 | 1882 | 3210 | 67082 | 3118 | 110547 | 6811 | +| `examples/pilot-corpora/kerml-examples` | 58 | 6399 | 1166 | 1842 | 44577 | 2504 | 63934 | 5065 | +| `examples/spec-examples` | 511 | 7074 | 990 | 2634 | 47298 | 1484 | 75012 | 5041 | +| `tests/testdata` | 36 | 1414 | 171 | 495 | 9277 | 401 | 15672 | 997 | +| `examples` | 52 | 26254 | 5956 | 14776 | 186183 | 7989 | 318978 | 19327 | +| `tools/referee/diff/testdata` | 4 | 53 | 0 | 0 | 362 | 1 | 462 | 41 | +| `docs/manual/examples` | 8 | 7020 | 920 | 2082 | 48509 | 1982 | 88453 | 4679 | The scorecard is mostly **ours-missing**: this repository's writer emits a subset of the metamodel's properties, and the referee now measures which, per metaclass. The full ranked scorecard with one concrete example per differing row is `build/pilot-apijson-diff/pilot-apijson-diff.txt` after a run; the baseline keeps every row's five counts. @@ -214,16 +214,16 @@ The largest **present-different** rows, with the reading the examples support: | metaclass | property | present-equal | present-different | |---|---|---:|---:| -| `AttributeUsage` | `ownedRelationship` | 113 | 2332 | -| `Feature` | `ownedRelationship` | 3758 | 1802 | -| `PartUsage` | `ownedRelationship` | 324 | 1554 | -| `ReferenceUsage` | `ownedRelationship` | 1354 | 852 | +| `Feature` | `ownedRelationship` | 4159 | 1401 | +| `AttributeUsage` | `ownedRelationship` | 1248 | 1197 | +| `PartUsage` | `ownedRelationship` | 874 | 1004 | | `PartUsage` | `ownedMember` | 368 | 702 | | `PartUsage` | `ownedMembership` | 722 | 634 | | `AttributeUsage` | `ownedMembership` | 1184 | 624 | | `FeatureMembership` | `memberElement` | 9381 | 570 | | `FeatureMembership` | `ownedMemberElement` | 9381 | 570 | | `FeatureMembership` | `ownedRelatedElement` | 9381 | 570 | +| `Feature` | `ownedMembership` | 4271 | 569 | ### Where the pilot states nothing and we do @@ -283,11 +283,13 @@ measured on library-backed members too. The first and the third are closed (the element by it, so the pilot's reading is the metamodel's — the writer now fixes an id for these elements too; - the order of `ownedRelationship` on a usage that both redefines and has a value: the pilot lists - the `Redefinition` before the `FeatureValue`, in the order the notation declares them; ours lists - the value first (275 `AttributeUsage`, 97 `ReferenceUsage`, 2 `RenderingUsage`). `ownedRelationship` - is ordered (KerML 8.3.2.1.2 Element, `ownedRelationship : Relationship [0..*] {ordered}`), and the - textual notation adds an element's owned relationships as it parses them, so the pilot's order is - the notation's, a shape the `AttributeUsage` `ownedRelationship` row already carried; + the `Redefinition` before the `FeatureValue`, in the order the notation declares them, where ours + listed the value first (275 `AttributeUsage`, 97 `ReferenceUsage`, 2 `RenderingUsage`). + `ownedRelationship` is ordered (KerML 8.3.2.1.2 Element, `ownedRelationship : Relationship [0..*] + {ordered}`), and the textual notation adds an element's owned relationships as it parses each + clause (KerML 8.2.1 Table 3, `ownedRelationship += …`), so the pilot's order is the notation's. The + writer now owns a head's relationships in that order (the row below records the re-measurement), + and these sites agree; - a `FeatureReferenceExpression` owns a `Membership` of its referent, which both sides now write: `referent` is derived as the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent), and the @@ -410,7 +412,7 @@ The (metaclass, property) rows ranked by the corpus elements on which the pilot | 39 | `FeatureTyping` | `isLibraryElement` | 5982 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`; writes `true` on library elements only, never `false`) | `Element::isLibraryElement = libraryNamespace() <> null` (KerML 8.3.2.1, deriveElementIsLibraryElement); the pilot writes `false` on every user element | | 40 | `FeatureTyping` | `owningType` | 5978 | 0 | PR #1232 (`feature/api-json-derived-properties-layered`) | `Feature::owningType = owningFeatureMembership.owningType` (KerML 8.3.3.3, deriveFeatureOwningType) | | 41 | `Redefinition` | `redefinedFeature` | 52 | 20 | closed for this repository's libraries (above) | `Redefinition::redefinedFeature : Feature` (KerML 8.3.3.3.8) is an element reference, and every `Element` carries an `elementId` (KerML 8.3.2.1.2) the API's JSON refers to it by; the 330 redefinitions of a feature of this repository's libraries once spelled as a name, `{"@ref": "caption"}`, now link by the element's fixed id — the same movement for `FeatureTyping::type`, `MetadataUsage::type`, `FeatureReferenceExpression::referent` and `ReferenceSubsetting::referencedFeature` into those libraries — and the 58 left are redefinitions of a feature inherited within the model itself that the writer spells as a name (`vehicle_b_1::providePower`) | -| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 2332 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2) in the order the notation declares them: a usage's `Redefinition` (`redefines x`) before its `FeatureValue` (`= …`); ours lists the value first | +| 42 | `AttributeUsage` | `ownedRelationship` | 36 | 1197 | none found | `Element::ownedRelationship : Relationship [0..*] {ordered}` (KerML 8.3.2.1.2), in the order the notation adds them (KerML 8.2.1 Table 3; `FeatureSpecializationPart`, then `ValuePart`, then the body): a head's typings, specializations and multiplicity as spelled, then its `FeatureValue`, then its members. The writer seated the materialized relationships last, in a fixed kind order; it now owns them as spelled, which moved 4861 properties over 101 rows (67 `ownedRelationship`, 22 `ownedSpecialization`, 12 `ownedSubsetting`) from present-different to present-equal, no other bucket touched (this row 2332 → 1197, `PartDefinition` 215 → 20, `PartUsage` 1554 → 1004, `Feature` 1802 → 1401). What remains (1197) is a different shape: on a usage that writes no multiplicity part (`attribute cargoMass : MassValue;`) the pilot owns an `OwningMembership` of a `Multiplicity`, not implied, after the `FeatureTyping`; ours states none | | 43 | `FeatureReferenceExpression` | `ownedMembership` | 0 | 7 | the writer owns the `Membership` (`export/rdf_expr.go` `featureReferent`); the 7 left are the `FunctionReferenceMember` shape, a `FeatureMembership` owning an `Expression` typed by the named function (KerML 8.2.5.8.3), which ours writes as a `Membership` of the function | `FeatureReferenceExpression::referent` is the `memberElement` of the first `ownedMembership` that is not a `ParameterMembership` (KerML 8.3.4.8.5, deriveFeatureReferenceExpressionReferent); the notation maps a feature reference to that owned `Membership` (8.2.5.8.3, `FeatureReferenceMember`) | Rows an evaluator rule in PR #1232 (`internal/semantic/metamodel/rules.go`) already names are marked; that PR adds a lazy metamodel evaluator and layers its derived values into the API-JSON writer, so its merge is expected to move those rows from ours-missing to present-equal or present-different, and this referee is how that movement is measured. From 86df21edc1c46f0e71516ce4beb351b121592033 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 19:22:04 +0000 Subject: [PATCH 16/16] docs(rdf): keep the ReorderObjects comments to two lines Co-Authored-By: jason.han --- internal/translate/rdf/term.go | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/internal/translate/rdf/term.go b/internal/translate/rdf/term.go index 19918b82c3..268ca468bb 100644 --- a/internal/translate/rdf/term.go +++ b/internal/translate/rdf/term.go @@ -536,10 +536,8 @@ func (g *Graph) detachSharedIndexes() { g.sharedIndex = nil } -// ReorderObjects restates the objects of (subject, predicate) in the order -// given, each triple keeping its place in the graph; objects must be a -// permutation of Objects(subject, predicate), and any other list leaves the -// graph as it was. +// ReorderObjects restates (subject, predicate)'s objects in the order given, each +// triple keeping its place; anything but a permutation leaves the graph as it was. func (g *Graph) ReorderObjects(subject Term, predicate string, objects []Term) { si := g.subjects()[subject] if si == nil || len(si.objects[predicate]) != len(objects) { @@ -572,9 +570,8 @@ func (g *Graph) ReorderObjects(subject Term, predicate string, objects []Term) { copy(si.objects[predicate], objects) } -// statementPositions returns, per subject, where the graph's statements of -// predicate sit in triples, in order; built on first use for that predicate -// and kept current as triples are added (see AddTriple, RewriteTriples). +// statementPositions locates predicate's statements in triples, per subject, in +// order; built on first use, appended to by AddTriple, reset by RewriteTriples. func (g *Graph) statementPositions(predicate string) map[Term][]int { if g.positions == nil { g.positions = make(map[string]map[Term][]int)