Dear KP,
From my point of view the SysML 1.6 spec is correct, though the wording they chose might be a bit too convoluted sometimes.
This is how I read and undestand the parts you quote.
Let's go with the 1st one:
/tracedTo : NamedElement [0..*]
Derived from all elements that are the client of a «trace» relationship for which this requirement is a supplier.
Here we have a trace relationship (
kind of a dependency really) that involves a requirement (
this requirement) which is a
supplier of trace relationships (arrowhead end of the trace relationship in its graphical representation), meaning that there are other requirements whose definition depend on
this requirement. Those dependant requirements are the clients, which occupy the "from" end of those trace relationships, that is why the relationships are "derived from" them. Hence, all those clients are "traced to" this supplier.
Now the 2nd one:
getTracedTo () : NamedElement [0..*]
bodyCondition:
Trace.allInstances()->select(base_Abstraction.client=self).base_Abstraction.supplier
OK, here it becomes a bit trickier, because honestly, from the name of the method "getTracedTo" you could really understand it in either of the following ways:
- get elements that trace to the one given as input (clients for a given supplier)
- get elements traced to by the one given as input (suppliers for a given client)
If it was up to me, the natural definition for this method would be the 1st one but, if you go to its "body", it is clearly the 2nd one:
- Trace.allInstances() --- "from all trace relationships..."
- ->select(base_Abstraction.client=self) --- "...get those that have as client this requirement (self)..."
- .base_Abstraction.supplier --- "...and for those, get their supplier."
Furthermore, this definition keeps consistency with the
getTracedFrom method described with more detail in the spec and quoted previously by me in a comment in this thread. Here you have it again:
getTracedFrom (in ref : NamedElement) : AbstractRequirement [0..*]
The query getTracedFrom() gives all the requirements that are clients ("from" end of the concrete syntax) of a
«Trace» relationship whose supplier is the element in parameter. This is a static query.
bodyCondition:
AbstractRequirement.allInstances()->select(tracedTo->includes(ref))
Wrapping up, I believe the definition of the trace relationship in the SysML spec is consistent but, as I said, probably put in a too convoluted way.
I hope this helps.
Best Regards,
i.