W3C home > Mailing lists > Public > www-ws-desc@w3.org > May 2002

Extensibility proposal

From: Roberto Chinnici <roberto.chinnici@sun.com>
Date: Tue, 07 May 2002 09:56:53 -0700
Message-ID: <3CD80755.6B01F228@sun.com>
To: www-ws-desc@w3.org
Here's my proposal for extensibility in WSDL.next.

Right now, I won't touch the subject of open attributes, since I feel that if we
can agree on element extensibility everything else will fall in place (ever the optimist!)

1. Allow extension elements on every WSDL element, e.g. by adding
      <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
   to every complex type in the WSDL schema.

   Any element matching the rule above is an Extension. An Extension is
   considered to be an "Extension to" the element containing it (so we can speak
   of an Extension to a Binding, etc.), or even a "XYZ Extension" (as in
   "a Binding Extension").

2. Add to every WSDL element a wsdl:annotation child element thus defined:
    <xsd:element name="annotation">
      <xsd:complexType>
        <xsd:complexContent>
            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
              <xsd:any namespace="##other" processContents="lax"/>
            </xsd:sequence>
        </xsd:complexContent>
      </xsd:complexType>
    </xsd:element>

   Any element that appears as a child of a wsdl:annotation element
   is an Annotation. Notice that Annotations are *not* Extensions.

3. Remove the wsdl:required attribute.

4. Modify the wsdl grammar (section 2.1 of the spec) to add Language
   Extension Declarations immediately inside a wsdl:definition element:

    <wsdl:definitions name="nmtoken"? targetNamespace="uri"?>

        <wsdl:extension namespace="uri" location="uri"?/>*

        <wsdl:import namespace="uri" location="uri"/>*

        <!-- rest of the wsdl grammar follows -->

    The "set of language extension namespace names" is formed by collecting
    the values of all the "namespace" attributes of the "wsdl:extension"
    elements.

    The "location" attribute of the wsdl:extension element is for
    reference purposes only.

    [Language Extension Declarations are at the beginning of the document
     so that by the time a processor sees any non-trivial wsdl content,
     it's aware of all the processing rules.]

5. Define the following terms:

    An Extension whose element has a namespace name which is a member
    of the set of extension namespace names is called a Language Extension.

    Certain wsdl elements can declare to have architected extension points
    (e.g. wsdl:binding). An Extension of one of these elements and which is
    not a Language Extension is called an Architected Extension.

6. Mandate the following processing model:

    a) Annotations

        A processor MUST ignore any Annotations that it does not recognize.

        A processor that recognizes an Annotation MAY use the information
        contained therein during processing. The presence of an Annotation
        must not modify in any way the processing rules prescribed by this
        specification and followed by the processor.

    b) Language Extensions

        A processor that encounters a Language Extension Declaration and
        does not recognize its namespace MUST stop processing the wsdl
        document at once.

        A processor that recognizes a Language Extension Declaration MUST
        obey its rules for the entire duration of its processing of the wsdl
        document in which it appears. Such rules are allowed to override other
        wsdl processing rules defined by this specification.

        It is recommended that the effect of these rules be as localized as possible;
        in particular, their effect SHOULD be local to the elements that contain
        Language Extensions belonging to that particular vocabulary.

        Language Extensions that define new globally named constructs (e.g. the
        way wsdl portType, message, binding and service do) SHOULD appear as
        children of the wsdl:definitions element; moreover, they SHOULD define
        their own symbol space and they SHOULD follow the QName resolution rules
        that this specification defines.

        [Hopefully, this will make it easier to use two extensions at the same time,
        although in general all bets are off.]

    c) Architected Extensions

        A processor that encounters an Architected Extension that it does not
        recognize MUST flag the element that directly contains it as "not understood".

        [Note: we should define what the implications of not understanding
         an element are. Intuitively, if a processor does not recognize an
         Architected Extension of, say, a binding, it does not fully understand
         the binding itself, so it cannot make any practical use of it. This is
         not reason enough, though, to reject the whole document.]

    d) Other Extensions

        A processor that encounters an Extension element which is neither
        a Language Extension nor an Architected Extension MUST stop processing
        the wsdl document at once; such a wsdl document is deemed invalid.

        [Of course, this rule can be overridden by a Language Extension !]

Comments?

Roberto

--
Roberto Chinnici
Java and XML Software
Sun Microsystems, Inc.
Received on Tuesday, 7 May 2002 12:57:08 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:58:20 GMT