- From: Arthur Ryman <ryman@ca.ibm.com>
- Date: Fri, 28 Jan 2005 17:14:42 -0500
- To: Amelia A Lewis <alewis@tibco.com>
- Cc: www-ws-desc@w3.org, www-ws-desc-request@w3.org
- Message-ID: <OFC82A6EB6.7791A6BC-ON85256F97.00772E76-85256F97.007A311F@ca.ibm.com>
Amy, Thx for the review. > > Okay, some additional comments, now that I've had time to look through > this. > > I think, on the whole, that we may simply be in trouble attempting to > formalize after the fact, rather than a) building a spec from a formal > definition in the first place (years too late, I'm afraid) or b) > admitting that parts of the specification cannot be formally described. Programming languages are formal so, at implementation time, people are going to formalize the spec. Formal specification is not the end goal. It's like a early attempt at implementation. If we can't express the semantics of the spec formally, that's a red flag to me. It tells me that when people try to implement the spec, they will run into problems and the consequence will be poor interoperability and yet another WS-I profile. > > On Thu, 27 Jan 2005 03:11:56 -0500 > Arthur Ryman <ryman@ca.ibm.com> wrote: > > 1. The spec has the notion of component equivalence. This concept was > > introduced as a consequence of interface inheritance. The problem was > > that we wanted to allow diamond inheritance, eg: > > [snip] > > > I'd like to propose a simplification. We should eliminate the concept > > of component equivalence and use infoset equivalence instead. In a > > sense, the > > > The impact of this change is that as we are building up the component > > model, we check to see that duplicate definitions of components have > > equivalent infosets. If the infosets differ then we have an error and > > we can't create the component model. The infoset definition is > > strictly bottom-up and can be computed without reference to derived > > component model properties. > > I wonder if this can work. Using infoset, wouldn't two interfaces that > extend interface "D" have to refer to the same document, where D is > defined? No, they could be in different documents. However, all the attributes and children of the two <interface> elements would have to be the same (possibly in a different order). You could copy and paste an <interface> into another document and it would be equivalent to the original. What I am proposing is that equivalence be defined in terms of the infosets of the elements, not in terms of the component models. It is simple to define Infoset equivalence. It is trickier (and somewhat circular) to define Component equivalence. > > If operations and faults are scoped, it isn't too difficult to imagine a > situation in which two equivalent definitions (by the component > equivalence method) of D, located in different documents, become two > separate interfaces, by infoset-equivalence testing. > > This breaks interface inheritance, I suspect. Suppose organization X > publishes interface D, and organization Y publishes the same thing, > slightly refactored but intended to have the same semantics but be > easier to understand, and extends it with C. Organization Z now > publishes an extension of interface D that references the original > document. Organization H (for "Houston, we have a problem") can't, I > think, publish a unifying interface, A, that extends B and C, under the > infoset equivalence model, but can with a component equivalence model. > Organization Y has no right to tamper with the definitions created by organization X, but if they do, they must preserve the Infosets. > Does this simplification also straiten/make stricter the rules? Can we > do so, at this stage? Yes, the simplification is more restrictive, but I don't think it has any practical impact. It just means that you NOT should use the same operation name in two interfaces if you expect someone to extend both of them. If you expect the interfaces to be extended, then you should move the common operations into a common base interface. Why duplicate the definition of the operations? > > I don't want to underestimate the importance of a formal description, or > the difficulty of defining such a thing when recursion more or less runs > in both directions at once, but ... can we really remove this level of > descriptive capability? Yes, we can remove this capability now. No one is using it yet. The use cases we know about, e.g. from Grid, can be handled. > > > 2. An implication of the above proposal is that we would disallow > > "accidental" duplication of operations or faults. For example, the > > following situation is disallowed: > > > > interface A { operation X }; > > interface B extends A { operation X}; > > > > The above is disallowed since operation X is defined in two different > > interfaces. This is disallowed even if the contents of operation (A/X) > > is identical to operation (B/X). The appearance of X in B is > > considered to be an accident and an error. > > Ah. Then I believe my interpretation of infoset equivalence above is > also correct. And we've significantly limited the expressivity of the > inheritance mechanism. Yes, this limits expressivity, but I don't think in a significant way. You just have to put common operations in a single interface and inherit from that. No automatic merging is allowed. > > > An additional motivation for this rule is that now all components have > > > > unique URI's. Everyone component is defined in a unique parent > > component > > Not that persuasive a motivation, from where I sit. I think this is neater. Components have a simple tree containment hierarchy instead of a graph structure. > > > nsuri#wsdl.operation(B/X). And we would really have to compute its > > derived properties to determine equivalence. > > The status quo, no? > > > 3. Finally, for this to work, we should only permit extension elements > > and attributes in the top level elements: interface, binding, and > > service. This means they are disallowed as children of the root > > description element. > > I mentioned reservations with respect to this earlier. I think the > {in-scope extensions} suggestion is perfectly reasonable, but if others > have comments on that, it would be nice to hear them. In view of your use cases for WS-Choreography, etc. I withdraw suggestion #3 and replace it with the addition of an {in-scope extensions} property to express the inherited extensions defined at the root level. > > It seems that another possible solution might be to adjust the meaning > of the definitions component, no? If that component could contain other > definitions, rather than containing the contents of those definitions, > would this not address some of the problems with scoped elements of any > sort? Yes, we should allow the <description> component to contain extension components. > > Amy! > -- > Amelia A. Lewis > Senior Architect > TIBCO/Extensibility, Inc. > alewis@tibco.com >
Received on Friday, 28 January 2005 22:15:15 UTC