Doubly revised extensibility proposal

Here's the latest version of the extensibility proposal.

I extended it (excuse the pun) with attribute extensions, since we've been discussing
them on the mailing list. Also, I got rid of the "recommendations" section (since it
doesn't seem to belong with the rest) and moved some paragraphs around.

One small change that might go unnoticed is that the default value for the
"required" attribute of a wsdl:extension element is now "true".

Regards,
Roberto

--
Roberto Chinnici
Java and XML Software
Sun Microsystems, Inc.

========

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.

  Similarly, allow extension attributes on every WSDL element, e.g. by adding
      <xsd:anyAttribute namespace="##other" processContents="lax"/>.

   Any element or attribute matching the rules above is an Extension. For clarity,
   in what follows we'll sometime use the terms Element Extension (resp. Attribute
   Extension) to indicate an Extension which is an element (resp. an attribute).

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

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

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

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

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

    The default value for the "required" attribute of the "wsdl:extension"
    element is "true".

    [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.]

    [Later on, we'll want to add all built-in extensions to the set of required
     extension namespace names, so that they don't get declared in each
     wsdl document.]

3. Keep the wsdl:required attribute (of type xsd:boolean) from WSDL 1.1. This
    attribute is meaningful only when applied to Element Extensions.

4. Define the following terms:

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

    The "set of required extension namespace names" is formed by
    collecting the values of all the "namespace" attributes of the "wsdl:extension"
    elements whose "required" attribute has a value of "true".

    An Attribute Extension is Required if its namespace name is a member of the set
    of required extension namespace names.

    An Element Extension is Required if: (a) its namespace name is a member of
    the set of required extension namespace names AND the Extension does not
    have a wsdl:required attribute whose value is "false", or (b) the Extension
    has a wsdl:required attribute whose value is "true".

5. Mandate the following processing model:

    a) Extension Declarations

        A processor that encounters an Extension Declaration whose "required"
        attribute has the value of "true" and that does not recognize its namespace
        MUST stop processing the wsdl document at once.

        A processor that recognizes an Extension Declaration whose "required"
        attribute has the value of "true" 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 elements that contain
        Extensions belonging to that particular vocabulary.

    b) Required Extensions

        A processor that encounters a Required Extension and that either doesn't
        recognize its vocabulary or fails to process it successfully MUST stop
        processing the wsdl document.

    c) Other Extensions

        A processor that encounters an Extension which is not Required and whose
        vocabulary it does not recognize MUST ignore it.

        A processor that encounters an Extension which is not Required and whose
        vocabulary it understands MUST attempt to process it following the rules
        for that vocabulary. In case of failure, the processor MUST continue
        processing the document as if the Extension had not been present (thus
        having the same effect as if the Extension's vocabulary had not been
        recognized by the processor).

Received on Tuesday, 28 May 2002 14:57:06 UTC