CellML.org - Meeting Minutes 18 September 2000
October 2000 31 October 2000 24 October 2000 08 October 2000 06 October 2000 05 October 2000 04 October 2000 02 October 2000 01 October 2000 September 2000 28 September 2000 22 September 2000 19 September 2000 18 September 2000 13 September 2000 12 September 2000 11 September 2000 05 September 2000 |
Author: 1 SummaryThis document is divided into two parts. The first part is in fact a summary prepared specifically for the September 18 meeting. The second part describes the actual decisions made during the meeting. 2 Encapsulation Problems
During the September 18 meeting some very basic problems with the CellML data model must be urgently resolved. At the very minimum, this involves finding a solution to the encapsulation/variable-role problem. We thought we'd sorted out encapsulation in the meeting of 13 September where the variable role of Unfortunately, we weren't anywhere close to finished with encapsulation. As Melanie pointed out, the whole point of encapsulation is to hide the network that makes up the complex layer from the simple layer. Ideally, the variables that the current component exposes to the simple layer may be a subset of the variables it exposes to the complex layer. This is a fairly obvious requirement, and one that had been forgotten in the excitement of laying down rules for encapsulation over the last few meetings.
There are a number of possible solutions to this. The simplest is to allow mapping to variables with role
A more attractive solution is to have three new roles:
Perhaps a better solution is to effectively split the role attribute into input- and output-specific properties. A variable is either defined locally, in which case it may be modified in the current component, or it is an input from another component, in which case it may not be modified. Thus a variable has either an
The last solution comes from Physiome and is based on the currently implemented method in ISC. Currently a component would contain a list of all variables available in the current component, a list of all of the variables that are inputs to the current component, and a list of all components that are outputs. It would be a simple enough matter to split up the list of outputs into a list of From the implementation angle it is interesting to note that an internal Java class (probably the nearest thing in Java to an encapsulated component) can actually reference private variables in its parent class. It is subclasses (i.e., extensions to a Java class) that can only reference protected but not private variables. Maybe we need to check if there is a case for having private variables in an encapsulator that aren't available to the complex layer. It is tempting to define encapsulated components inside the encapsulator. A possible problem with this is deciding where to define the connections between the encapsulator and the components in the complex layer — this has already been a problem when trying to express subspace hierarchies in CellML '99. 3 Grouping Problems
OK. So we've biffed variable inheritance in favour of The meeting of September 14 (unfortunately, not properly documented) highlighted some of the problems with grouping for the purposes of geometry. The issues are:
In the following sections, some possible solutions and their problems are considered. 3.1 Grouping By Connection"Grouping By Connection" refers to original idea from the earlier versions of the CellML 2000 data model. Geometry and encapsulation information is stored as a property of a directed connection — connections to the same "parent" component imply a grouping of the "child" components. This scheme is very simple, and removes the need to identify groups at all. Unfortunately any serialization of this scheme involves the separation of the grouping in an arbitrary manner, making the grouping non-obvious without a complete scan of the connections in the model. Because all connections and components are serialized in parallel, all components in the model must have a unique name. 3.2 Grouping With Root Components
Grouping by connection links a child component to a parent component. An alternative formulation would be to introduce a new object It is possible that requiring root components isn't so evil after all. In the September 13 minutes we cited AnatML as having no use for the root components used for grouping. In fact this is not the case — components are necessary at each stage in the geometric hierarchy to store coordinate system transformations. 3.3 Unique EverythingOK - the meeting's over, and I've got something else to write about. For the record, in this scheme, groups must be uniquely named, do not need a root component, and may include other groups as children. You start running into problems however when you actually want to add encapsulation or geometric relationship information to this scheme. Essentially we would need some kind of connection that runs between a component and a group and says "the contents of this group are encapsulated/physically inside this component." Kinda' back to stage one. 4 The Actual Meeting MinutesThe meeting of September 18 was somewhat unusual in that we actually made some progress. Although we didn't solve any of the grouping problems discussed in the previous section, we did reach some kind of agreement finally on the variable role problem that has been bothering us for a while now.
Instead of trying to mix all of the role ideas into one attribute, or splitting the role attribute into input and output sub-sections, why not separate the role into its private and public interfaces? The public interface of a variable is the interface that is exposed to the simple layer. The private interface of a variable is the interface that is exposed to the complex layer, and to any encapsulated children of the components in the complex layer. Each interface can have values of
With one exception the two interfaces are completely independent. For instance a variable with an public interface of
| ||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||