Subject: Registration of media type application/wsdl+xml
From: Hugo Haas <[email-masked]>
To: [email-masked]
Cc: [email-masked], [email-masked]
Date: Wed, 17 Aug 2005 12:47:42 +0200
List-Id: <ietf-xml-mime.imc.org>

Following the procedure outlined in How to Register an Internet Media
Type for a W3C Specification[1], I would like to request comments
about the definition of the application/wsdl+xml media type.

This new media type is defined in Web Services Description Language
(WSDL) Version 2.0 Part 1: Core Language, W3C Working Draft 3 August
2005, which is a Last Call Working Draft[2], for which comments are
invited until 19 September 2005 to the [email-masked]
mailing list (Reply-To set appropriately).

The Web Services Description Language Version 2.0 (WSDL 2.0) is an XML
language for describing Web services.

Note that a previous Last Call Working Draft was published on 3 August
2005, for which feedback on the registration of application/wsdl+xml
was requested on 4 October 2004[3] and the comment received[4] has
been addressed in this new version.

The definition of the media type can be found in appendix A. The
application/wsdl+xml Media Type[5] of Web Services Description
Language (WSDL) Version 2.0 Part 1: Core Language.

A text copy of the section follows:

  A. The application/wsdl+xml Media Type

  This appendix defines the "application/wsdl+xml" media type which can
  be used to describe WSDL 2.0 documents serialized as XML.

  A.1 Registration

  MIME media type name:

      application

  MIME subtype name:

      wsdl+xml

  Required parameters:

      none

  Optional parameters:

      charset

	  This parameter has identical semantics to the charset
	  parameter of the "application/xml" media type as specified in
	  [RFC 3023].

  Encoding considerations:

      Identical to those of "application/xml" as described in [RFC 3023
      ], section 3.2, as applied to the WSDL document Infoset.

  Security considerations:

      See section A.3 Security considerations.

  Interoperability considerations:

      There are no known interoperability issues.

  Published specifications:

      This document and [WSDL 2.0 Adjuncts].

  Applications which use this media type:

      No known applications currently use this media type.

  Additional information:

      File extension:

	  wsdl

      Fragment identifiers:

	  Either a syntax identical to that of "application/xml" as
	  described in [RFC 3023], section 5 or the syntax defined in
	  A.2 Fragment Identifiers.

      Base URI:

	  As specified in [RFC 3023], section 6.

      Macintosh File Type code:

	  WSDL

  Person and email address to contact for further information:

      World Wide Web Consortium <[email-masked]>

  Intended usage:

      COMMON

  Author/Change controller:

      The WSDL 2.0 specification set is a work product of the World
      Wide Web Consortium's Web Service Description Working Group. The
      W3C has change control over these specifications.

  A.2 Fragment Identifiers

  This section defines a fragment identifier syntax for identifying
  components of a WSDL 2.0 document. This fragment identifier syntax is
  compliant with the [XPointer Framework].

  A WSDL 2.0 fragment identifier consists of zero or more xmlns pointer
  parts followed by a pointer part as defined below. The pointer parts
  have a scheme name that corresponds to one of the standard WSDL 2.0
  component types, and scheme data that is a path composed of names
  that identify the components. The scheme names all begin with the
  prefix "wsdl." to avoid name conflicts with other schemes. The names
  in the path are of type either QName, NCName, IRI, URI, or Pointer
  Part depending on the context.

  For QNames, any prefix MUST be defined by a preceding xmlns pointer
  part. If a QName does not have a prefix then its namespace name is
  the target namespace of the WSDL 2.0 document.

  The fragment identifier is typically constructed from the {name}
  property of the component and the {name} properties of its ancestors
  as a path according to Table A-1. The first column of this table
  gives the name of the WSDL 2.0 component. Columns labeled 1 through 4
  specify the identifiers that uniquely identify the component within
  its context. Identifiers are typically formed from the {name}
  property, although in several cases references to other components
  are used. These identifiers are then used to construct the pointer
  part in the last column.

	       Table A-1. Rules for determining pointer parts for WSDL 2.0 components
  ┌───────────┬─────────┬─────────────────────────┬───────┬───────┬──────────────────────────────┐
  │ Component │    1    │            2            │   3   │   4   │         Pointer Part         │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Description│n/a      │n/a                      │n/a    │n/a    │wsdl.description()            │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Element    │element  │n/a                      │n/a    │n/a    │wsdl.elementDeclaration(      │
  │Declaration│QName    │                         │       │       │element)                      │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Element    │element  │system URI               │n/a    │n/a    │wsdl.elementDeclaration(      │
  │Declaration│QName    │                         │       │       │element,system)               │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Type       │type     │n/a                      │n/a    │n/a    │wsdl.typeDefinition(type)     │
  │Definition │QName    │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Type       │type     │system URI               │n/a    │n/a    │wsdl.typeDefinition(type,     │
  │Definition │QName    │                         │       │       │system)                       │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Interface  │interface│n/a                      │n/a    │n/a    │wsdl.interface(interface)     │
  │           │NCName   │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Interface  │interface│fault NCName             │n/a    │n/a    │wsdl.interfaceFault(interface/│
  │Fault      │NCName   │                         │       │       │fault)                        │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Interface  │interface│operation NCName         │n/a    │n/a    │wsdl.interfaceOperation(      │
  │Operation  │NCName   │                         │       │       │interface/operation)          │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Interface  │interface│                         │message│       │wsdl.interfaceMessageReference│
  │Message    │NCName   │operation NCName         │NCName │n/a    │(interface/operation/message) │
  │Reference  │         │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Interface  │interface│                         │message│fault  │wsdl.interfaceFaultReference( │
  │Fault      │NCName   │operation NCName         │NCName │QName  │interface/operation/message/  │
  │Reference  │         │                         │       │       │fault)                        │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Binding    │binding  │n/a                      │n/a    │n/a    │wsdl.binding(binding)         │
  │           │NCName   │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Binding    │binding  │fault QName              │n/a    │n/a    │wsdl.bindingFault(binding/    │
  │Fault      │NCName   │                         │       │       │fault)                        │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Binding    │binding  │operation QName          │n/a    │n/a    │wsdl.bindingOperation(binding/│
  │Operation  │NCName   │                         │       │       │operation)                    │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Binding    │binding  │                         │message│       │wsdl.bindingMessageReference( │
  │Message    │NCName   │operation QName          │NCName │n/a    │binding/operation/message)    │
  │Reference  │         │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Binding    │binding  │                         │fault  │message│wsdl.bindingFaultReference(   │
  │Fault      │NCName   │operation QName          │QName  │NCName │binding/operation/fault/      │
  │Reference  │         │                         │       │       │message)                      │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Service    │service  │n/a                      │n/a    │n/a    │wsdl.service(service)         │
  │           │NCName   │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Endpoint   │service  │endpoint NCName          │n/a    │n/a    │wsdl.endpoint(service/endpoint│
  │           │NCName   │                         │       │       │)                             │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │           │parent   │                         │       │       │                              │
  │Feature    │Pointer  │feature IRI              │n/a    │n/a    │wsdl.feature(parent/feature)  │
  │           │Part     │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │           │parent   │                         │       │       │                              │
  │Property   │Pointer  │property IRI             │n/a    │n/a    │wsdl.property(parent/property)│
  │           │Part     │                         │       │       │                              │
  ├───────────┼─────────┼─────────────────────────┼───────┼───────┼──────────────────────────────┤
  │Extensions │namespace│identifier               │n/a    │n/a    │wsdl.extension(namespace,     │
  │           │URI      │extension-specific-syntax│       │       │identifier)                   │
  └───────────┴─────────┴─────────────────────────┴───────┴───────┴──────────────────────────────┘

  Note that the above rules are defined in terms of component
  properties rather than the XML Infoset representation of the
  component model. The following sections specify in detail how the
  pointer parts are constructed from the component model.

  A.2.1 The Description Component

  wsdl.description()

  A.2.2 The Element Declaration Component

  wsdl.elementDeclaration(element)

  wsdl.elementDeclaration(element,system)

   1. element is the {name} property of the Element Declaration
      component.

   2. system is the absolute URI of the extension type system used for
      the Element Declaration component. This parameter is absent if
      XML Schema is the type system.

  A.2.3 The Type Definition Component

  wsdl.typeDefinition(type)

  wsdl.typeDefinition(type,system)

   1. type is the {name} property of the Type Definition component.

   2. system is the absolute URI of the extension type system used for
      the Type Definition component. This parameter is absent if XML
      Schema is the type system.

  A.2.4 The Interface Component

  wsdl.interface(interface)

   1. interface is the local name of the {name} property of the
      Interface component.

  A.2.5 The Interface Fault Component

  wsdl.interfaceFault(interface/fault)

   1. interface is the local name of the {name} property of the parent
      Interface component.

   2. fault is the local name of the {name} property of the Interface
      Fault component.

  A.2.6 The Interface Operation Component

  wsdl.interfaceOperation(interface/operation)

   1. interface is the local name of the {name} property of the parent
      Interface component.

   2. operation is the local name of the {name} property of the
      Interface Operation component.

  A.2.7 The Interface Message Reference Component

  wsdl.interfaceMessageReference(interface/operation/message)

   1. interface is the local name of the {name} property of the
      grandparent Interface component.

   2. operation is the local name of the {name} property of the parent
      Interface Operation component.

   3. message is the {message label} property of the Interface Message
      Reference component.

  A.2.8 The Interface Fault Reference Component

  wsdl.interfaceFaultReference(interface/operation/message/fault)

   1. interface is the local name of the {name} property of the
      grandparent Interface component.

   2. operation is the local name of the {name} property of the parent
      Interface Operation component.

   3. message is the {message label} property of the Interface Fault
      Reference component.

   4. fault is the {name} property of the Interface Fault component
      referred to by the {interface fault} property of the Interface
      Fault Reference component.

  A.2.9 The Binding Component

  wsdl.binding(binding)

   1. binding is the local name of the {name} property of the Binding
      component.

  A.2.10 The Binding Fault Component

  wsdl.bindingFault(binding/fault)

   1. binding is the local name of the {name} property of the parent
      Binding component.

   2. fault is the {name} property of the Interface Fault component
      referred to by the {interface fault} property of the Binding
      Fault component.

  A.2.11 The Binding Operation Component

  wsdl.bindingOperation(binding/operation)

   1. binding is the local name of the {name} property of the parent
      Binding component.

   2. operation is the {name} property of the Interface Operation
      component referred to by the {interface operation} property of
      the Binding Operation component.

  A.2.12 The Binding Message Reference Component

  wsdl.bindingMessageReference(binding/operation/message)

   1. binding is the local name of the {name} property of the
      grandparent Binding component.

   2. operation is the {name} property of the Interface Operation
      component referred to by the {interface operation} property of
      the parent Binding Operation component.

   3. message is the {message label} property of the Interface Message
      Reference component referred to by the {interface message
      reference} property of the Binding Message Reference component.

  A.2.13 The Binding Fault Reference Component

  wsdl.bindingFaultReference(binding/operation/fault/message)

   1. binding is the local name of the {name} property of the
      grandparent Binding component.

   2. operation is the {name} property of the Interface Operation
      component referred to by the {interface operation} property of
      the parent Binding Operation component.

   3. fault is the {name} property of the Interface Fault component
      referred to by the {interface fault} property of the Interface
      Fault Reference component referred to by the {interface fault
      reference} property of the Binding Fault Reference component.

   4. message is the {message label} property of the Interface Fault
      Reference component referred to by the {interface fault reference
      } property of the Binding Fault Reference component.

  A.2.14 The Service Component

  wsdl.service(service)

   1. service is the local name of the {name} property of the Service
      component.

  A.2.15 The Endpoint Component

  wsdl.endpoint(service/endpoint)

   1. service is the local name of the {name} property of the parent
      Service component.

   2. endpoint is the {name} property of the Endpoint component.

  A.2.16 The Feature Component

  wsdl.feature(parent/feature)

   1. parent is the pointer part of the parent component.

   2. feature is the {ref} property of the Feature component.

  A.2.17 The Property Component

  wsdl.property(parent/property)

   1. parent is the pointer part of the parent component.

   2. property is the {ref} property of the Property component.

  A.2.18 Extension Components

  WSDL 2.0 is extensible and it is possible for an extension to define
  new components types. The XPointer Framework scheme for extension
  components is:

  wsdl.extension(namespace, identifier)

   1. namespace is the namespace URI that identifies the extension,
      e.g. for the WSDL 2.0 SOAP 1.2 Binding the namespace is http://
      www.w3.org/2005/08/wsdl/soap.

   2. identifier is defined by the extension using a syntax specific to
      the extension. The owner of the extension must define any
      components contributed by the extension and a syntax for
      identifying them.

  A.3 Security considerations

  This media type uses the "+xml" convention, it shares the same
  security considerations as described in [RFC 3023], section 10.

Regards,

Hugo

  1. http://www.w3.org/2002/06/registering-mediatype#Planned
  2. http://www.w3.org/2004/02/Process-20040205/tr.html#last-call
  3. http://eikenes.alvestrand.no/pipermail/ietf-types/2004-October/000438.html
  4. http://www.alvestrand.no/pipermail/ietf-types/2005-February/000595.html
  5. http://www.w3.org/TR/2005/WD-wsdl20-20050803/#ietf-draft
-- 
Hugo Haas - W3C
mailto:[email-masked] - http://www.w3.org/People/Hugo/