- From: Jonathan Marsh <jmarsh@microsoft.com>
- Date: Fri, 20 May 2005 20:44:16 -0700
- To: "Arthur Ryman" <ryman@ca.ibm.com>
- Cc: <public-ws-desc-comments@w3.org>
Thank you for your comment - we tracked this as a Last Call comment LC105 [1]. The Working Group accepted only part of your proposal: adding the constraint that top-level components must be unique, and adding a parent property to nested components. If we don't hear otherwise within two weeks, we will assume this satisfies your concern. [1] http://www.w3.org/2002/ws/desc/4/lc-issues/issues.html#LC105 > -----Original Message----- > From: www-ws-desc-request@w3.org [mailto:www-ws-desc-request@w3.org] > On Behalf Of Arthur Ryman > Sent: Thursday, January 27, 2005 3:13 AM > To: www-ws-desc@w3.org > Subject: Proposal for Simplifications to the Component Model > > As I mentioned in an earlier note [1], I've hit problems trying to > formally specify some aspects of the component model. These are > related to the interactions between interface inheritance, component > equivalence, and extension elements. I'd like to propose some > simplifications here so I can move forward. > > 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: > > interface A extends B, C; > interface B extends D; > interface C extends D; > > The problem occurs because now it looks like interface A contains > two, potentially conflicting, copies of the operations in D. We > resolved this by saying that if the copy of D acquired via B is > equivalent to the copy of D acquired via C, then all is well. > Otherwise there is an error. The two copies will be equivalent if > they come from the same document, which is the normal case. However, > we can't simply compare the URIs used to import or include D because > it is possible to have two different URIs resolve to the same > document. We therefore need to compare the contents of the documents. > > The definition of component equivalence is recursive and can be > computed bottom-up, i.e. two components are equivalent if all their > properties are equivalent. Their properities could be either values > or component references. If component references, then apply this > definition recursively until you hit just values. > > This would be fine if all component properties could be computed > bottom-up. But there are some properties that are computed top-down, > e.g. in-scope Property and Features, or inherited Operation or Fault > components. Also, some Extension component properties might be like > this. So the definition is a little circular and hard to specify simply. > > I'd like to propose a simplification. We should eliminate the > concept of component equivalence and use infoset equivalence > instead. In a sense, the infoset is really where this concept > belongs since it arises from considering how we combine documents. > The component model has no concept of document. It is built up from > the infosets of documents. > > 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. > > Furthermore, I suggest we apply this notion only to the top level > elements: interface, binding, and service, since they are the > components that are likely to appear more than once either via > import or include or by cut and paste. > > 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. > > Similarly, the following is also illegal: > > interface A { operation X}; > interface B { operation X}; > interface C extends A, B; > > A and B may contain operations of the same name, but an error occurs > when C extends both of them, even if X is defined identically in > both. Designers must factor common operations into a base interface, e.g. > > interface D {operation X}; > interface A {...}; > interface B {...}; > interface C extends A, B; > > The same considerations apply to Fault components. > > An additional motivation for this rule is that now all components > have unique URI's. Everyone component is defined in a unique parent > component and we can assign it a URI by building up a path composed > of the names of its ancestors. In contrast, if we allowed accidental > equivalence, then in the first example, we only have one operation > component X, but is has 2 parents (A and B) and therefore 2 URIs : > nsuri#wsdl.operation(A/X) and nsuri#wsdl.operation(B/X). And we > would really have to compute its derived properties to determine equivalence. > > 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. > > The motivation for this is that extensions in the root element are > scoped to the document, but there is no way to capture this scope > within the component model. The only property pushed down from the > document to the top level elements is the targetnamespace attribute > which becomes the namespace name of the QNames of interface, > binding, and service. > > Allowing root level extensions complicates the definition of infoset > equivalence of the top level elements since the semantics of the > extensions might alter the meanings of the top level element, i.e. > attach some inherited properties to them. > > The consequence is that if an extension is intended to have document > wide scope, then it must be explicitly copied into all the top level > elements. However, I am not aware of any such extensions in use today. > > One other pleasant consequence of this rule is that we can have a > deterministic schema that enforces the order of the top level elements, > i.e.: > > description = > (import | include) * > types ? > (interface | binding | service) * > > This avoids the need to introduce additional elements to enforce > order as I proposed in [2]. > > [1] http://lists.w3.org/Archives/Public/public-ws-desc- > comments/2005Jan/0007.html > [2] http://lists.w3.org/Archives/Public/public-ws-desc- > comments/2005Jan/0006.html > > Arthur Ryman, > Rational Desktop Tools Development > > phone: +1-905-413-3077, TL 969-3077 > assistant: +1-905-413-2411, TL 969-2411 > fax: +1-905-413-4920, TL 969-4920 > mobile: +1-416-939-5063, text: 4169395063@fido.ca > intranet: http://labweb.torolab.ibm.com/DRY6/
Received on Saturday, 21 May 2005 04:22:04 UTC