<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.2+WSDL//EN" "xmlspec.dtd">
<!--
/*
 * Copyright © 2007 World Wide Web Consortium,
 *
 * (Massachusetts Institute of Technology, European Research Consortium for
 * Informatics and Mathematics, Keio University). All Rights Reserved. This
 * work is distributed under the W3C® Document License [1] in the hope that
 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * [1] http://www.w3.org/Consortium/Legal/2002/copyright-documents-20021231
 */
    -->
<!-- $Id: wsdl20.xml,v 1.3 2007/06/20 13:19:01 plehegar Exp $ -->
<?xml-stylesheet type='text/xsl' href='xmlspec-wsdl.xsl' ?><spec xmlns:z="http://www.w3.org/2004/zml" xmlns:xlink="http://www.w3.org/1999/xlink" shortname="wsdl20" w3c-doctype="rec" role="public" xml:space="default">

<header xml:space="default">
  <title xml:space="default">Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language</title>
  <w3c-designation xml:space="default">http://www.w3.org/TR/2007/REC-wsdl20-20070626</w3c-designation>
  <w3c-doctype xml:space="default">W3C Recommendation</w3c-doctype>
  <pubdate xml:space="default">
    <day xml:space="default">26</day>
    <month xml:space="default">June</month>
    <year xml:space="default">2007</year>
  </pubdate>
  <publoc xml:space="default">
    <loc href="http://www.w3.org/TR/2007/REC-wsdl20-20070626" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2007/REC-wsdl20-20070626</loc>
  </publoc>
  <altlocs xml:space="default">
	<loc role="html" href="wsdl20-z.html" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XHTML with Z Notation</loc>
	<loc role="pdf" href="wsdl20.pdf" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">PDF</loc>
	<loc role="postscript" href="wsdl20.ps" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">PostScript</loc>
	<loc role="xml" href="wsdl20.xml" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">XML</loc>
	<loc role="plain" href="wsdl20.txt" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">plain text</loc>
    </altlocs>
  <prevlocs xml:space="default">
    <loc href="http://www.w3.org/TR/2007/PR-wsdl20-20070523" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/2007/PR-wsdl20-20070523</loc>
  </prevlocs>
  <latestloc xml:space="default">
    <loc href="http://www.w3.org/TR/wsdl20" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/TR/wsdl20</loc>
  </latestloc>
  
  <authlist xml:space="default">
    <author xml:space="default">
      <name xml:space="default">Roberto Chinnici</name>
      <affiliation xml:space="default">Sun Microsystems</affiliation>
    </author>
    <author xml:space="default">
      <name xml:space="default">Jean-Jacques Moreau</name>
      <affiliation xml:space="default">Canon</affiliation>
    </author>
    <author xml:space="default">
      <name xml:space="default">Arthur Ryman</name>
      <affiliation xml:space="default">IBM</affiliation>
    </author>
    <author xml:space="default">
      <name xml:space="default">Sanjiva Weerawarana</name>
      <affiliation xml:space="default">WSO2</affiliation>
    </author>
  </authlist>

    <errataloc href="http://www.w3.org/2007/06/wsdl20-errata.html" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest"/>
    <abstract id="Abstract" xml:space="default">
      <p xml:space="default">
	This document describes the Web Services Description Language
	Version 2.0 (WSDL 2.0), an XML language for describing Web
	services. This specification defines the core language which can
	be used to describe Web services based on an abstract model of
	what the service offers.
	It also defines the conformance criteria for documents in this language.
      </p>
    </abstract>    
    
<status id="Status" xml:space="default">

  <p xml:space="default">
    <emph xml:space="default">This section describes the status of this document at the time
    of its publication. Other documents may supersede this document. A
    list of current W3C publications and the latest revision of this
    technical report can be found in the <loc href="http://www.w3.org/TR/" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C technical reports index</loc> at
    http://www.w3.org/TR/.</emph>
  </p>

   <p xml:space="default">This is the <loc href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsW3C" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C
    Recommendation</loc> of Web Services Description Language (WSDL) Version 2.0 Part 1: Core Language for review by W3C Members and
   other interested parties. It has been produced by the <loc href="http://www.w3.org/2002/ws/desc/" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Web Services Description
   Working Group</loc>, which is part of the <loc href="http://www.w3.org/2002/ws/Activity" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C Web Services
   Activity</loc>.</p>

  <p xml:space="default">Please send comments about this document to the public <loc href="mailto:public-ws-desc-comments@w3.org" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">public-ws-desc-comments@w3.org</loc>
    mailing list (<loc href="http://lists.w3.org/Archives/Public/public-ws-desc-comments/" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">public
    archive</loc>).
  </p>

   <p xml:space="default">
     The Working Group released a test suite along with an <loc href="http://www.w3.org/2002/ws/desc/5/impl-report/" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">implementation
     report</loc>. A <loc href="wsdl20-diff.html" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">diff-marked
     version against the previous version of this document</loc> is
     available.
    </p>


    <!-- Boilerplate -->

    <p xml:space="default">
      This document has been reviewed by W3C Members, by software
      developers, and by other W3C groups and interested parties, and
      is endorsed by the Director as a W3C Recommendation. It is a
      stable document and may be used as reference material or cited
      from another document. W3C's role in making the Recommendation
      is to draw attention to the specification and to promote its
      widespread deployment. This enhances the functionality and
      interoperability of the Web.
    </p>

    <p xml:space="default">
      This document is governed by the <loc href="http://www.w3.org/TR/2002/NOTE-patent-practice-20020124" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">24
      January 2002 CPP</loc> as amended by the <loc href="http://www.w3.org/2004/02/05-pp-transition" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">W3C Patent
      Policy Transition Procedure</loc>. W3C maintains a <loc href="http://www.w3.org/2002/ws/desc/2/04/24-IPR-statements.html" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">public
      list of any patent disclosures</loc> made in connection with the
      deliverables of the group; that page also includes instructions
      for disclosing a patent. An individual who has actual knowledge
      of a patent which the individual believes contains <loc href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Essential
      Claim(s)</loc> must disclose the information in accordance with
      <loc href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">section
      6 of the W3C Patent Policy</loc>.
    </p>

</status>


  <langusage xml:space="default">
    <language id="en" xml:space="default">English</language>
  </langusage>
  <revisiondesc xml:space="default">
    <p xml:space="default">Last Modified: $Date: 2007/06/20 13:19:01 $</p>
  </revisiondesc>
</header>

<!-- ******************************************************************* -->

<body xml:space="preserve">

<div1 id="intro" xml:space="default">
<head xml:space="default">Introduction</head>

<p xml:space="default">Web Services Description Language Version 2.0 (WSDL 2.0) provides a model and an
XML format for describing Web services. WSDL 2.0 enables one to separate
the description of the abstract functionality offered by a service
from concrete details of a service description such as “how” and
“where” that functionality is offered.</p>

<p xml:space="default">This specification defines a language for describing the abstract
functionality of a service as well as a framework for describing the
concrete details of a service description. 
It also defines the conformance criteria for documents in this language.</p>

<p xml:space="default">The companion specification, <emph xml:space="default">Web Services Description Language (WSDL) Version 2.0 Part 2: Adjuncts</emph> <bibref ref="WSDL-PART2" xml:space="default"/>
describes 
extensions for message exchange patterns, operation safety,
operation styles and binding extensions (for SOAP <bibref ref="SOAP12-PART1" xml:space="default"/> and HTTP <bibref ref="RFC2616" xml:space="default"/>). </p>

<div2 id="intro_ws" xml:space="default">
  <head xml:space="default">Service Description</head>

<p xml:space="default">
WSDL 2.0 describes a Web service in two fundamental stages: one abstract
and one concrete. Within each stage, the description uses a number of
constructs to promote reusability of the description and to separate
independent design concerns.
</p>

<p xml:space="default">
At an abstract level, WSDL 2.0 describes a Web service in terms of the
messages it sends and receives; messages are described independent of
a specific wire format using a type system, typically XML Schema.
</p>

<p xml:space="default">
An <emph xml:space="default">operation</emph> associates a message exchange pattern with one or
more messages. A <emph xml:space="default">message exchange pattern</emph> identifies the sequence and
cardinality of messages sent and/or received as well as who they are
logically sent to and/or received from. An <emph xml:space="default">interface</emph>
groups together operations without any commitment to transport or wire
format.
</p>

<p xml:space="default">
At a concrete level, a <emph xml:space="default">binding</emph> specifies transport and
wire format details for one or more interfaces. An
<emph xml:space="default">endpoint</emph> associates a network address with a binding. And
finally, a <emph xml:space="default">service</emph> groups together endpoints that
implement a common interface.
</p>

</div2>

<!-- +++++++++ -->

<div2 id="meaning" xml:space="default">
<head xml:space="default">The Meaning of a Service Description</head>

<p xml:space="default">A WSDL 2.0 service description indicates how potential clients are
intended to interact with the described service. It represents an
assertion that the described service fully implements and conforms to
what the WSDL 2.0 document describes. For example, as further
explained in section <specref ref="mandatoryext" xml:space="default"/>,
if the WSDL 2.0 document specifies a particular
optional extension, the functionality implied by that extension is only
optional to the client. It must be supported by the Web service.</p>

<p xml:space="default">A WSDL 2.0 interface describes potential interactions with a Web service, not
required interactions. The declaration of an operation in a WSDL 2.0
interface is not an assertion that the interaction described by the
operation must occur. Rather it is an assertion that if such an
interaction is (somehow) initiated, then the declared operation
describes how that interaction is intended to occur.</p>

</div2>

<!-- +++++++++ -->

<div2 id="markup" xml:space="default">
<head xml:space="default">Document Conformance</head>

  <p xml:space="default">An <emph xml:space="default">element information item</emph> (as defined in <bibref ref="XMLInfoSet" xml:space="default"/>)
  whose namespace name is <attval xml:space="default">http://www.w3.org/ns/wsdl</attval> and
  whose local part is <el xml:space="default">description</el> conforms to this
  specification if it is valid according to the XML Schema for that
  element as defined by this specification (<loc href="http://www.w3.org/2007/06/wsdl/wsdl20.xsd" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">http://www.w3.org/2007/06/wsdl/wsdl20.xsd</loc>) and
  additionally adheres to all the constraints contained in this
  specification and conforms to the specifications of any
  extensions contained in it. Such a conformant <emph xml:space="default">element information item</emph> constitutes
  a <emph xml:space="default">WSDL 2.0 document</emph>.</p>

  <p xml:space="default">The definition of the WSDL 2.0 language is based on the XML Information
  Set <bibref ref="XMLInfoSet" xml:space="default"/> but also imposes many semantic constraints
  over and above structural conformance to this XML Infoset. In order to precisely
  describe these  constraints, and as an aid in precisely defining the meaning
  of each WSDL 2.0 document, the WSDL 2.0 specification defines a component
  model <specref ref="component_model" xml:space="default"/> as an additional layer of abstraction
  above the XML Infoset.
  Constraints and  meaning are defined in terms of this component model,
  and the definition of each component includes a mapping that specifies
  how values in the  component model are derived from corresponding items
  in the XML Infoset.</p>

   <p xml:space="default">
  	An XML 1.0 document that is valid with respect to the WSDL 2.0 XML
  	Schema and that maps to a valid WSDL 2.0 Component Model is
  	conformant to the WSDL 2.0 specification.
  </p>

</div2>

<!-- +++++++++ -->

<div2 id="notation" xml:space="default">
<head xml:space="default">Notational Conventions</head>

<p xml:space="default">All parts of this specification are normative, with the EXCEPTION
of notes, pseudo-schemas, examples, and sections explicitly marked as
“Non-Normative”.</p>

<div3 id="rfc2119keywords" xml:space="default">
<head xml:space="default">RFC 2119 Keywords</head>

<p xml:space="default">The keywords “MUST”, “MUST NOT”,  “REQUIRED”, “SHALL”, “SHALL NOT”,
   “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in
   this document are to be interpreted as described in RFC 2119
   <bibref ref="RFC2119" xml:space="default"/>.</p>

</div3>

<div3 id="rfc3986namespaces" xml:space="default">
<head xml:space="default">RFC 3986 Namespaces</head>

<p xml:space="default">Namespace names of the general form:</p>
<ulist xml:space="default">
   <item xml:space="default"><p xml:space="default"><attval xml:space="default">http://example.org/...</attval> and</p></item>
   <item xml:space="default"><p xml:space="default"><attval xml:space="default">http://example.com/...</attval></p></item>
</ulist>
<p xml:space="default">represent application or
   context-dependent URIs <bibref ref="RFC3986" xml:space="default"/>.</p>
   
</div3>

<div3 id="xmlSchemaAnyURI" xml:space="default">
<head xml:space="default">XML Schema anyURI</head>

<p xml:space="default">This specification uses the XML Schema type <att xml:space="default">xs:anyURI</att>
(see <bibref ref="XMLSchemaP2" xml:space="default"/>). It is defined so that <att xml:space="default">xs:anyURI</att> values
are essentially IRIs (see <bibref ref="RFC3987" xml:space="default"/>). The conversion from
<att xml:space="default">xs:anyURI</att> values to an actual URI is via an escaping procedure defined by
(see <bibref ref="XLink" xml:space="default"/>), which is identical in most respects to IRI Section 3.1
(see <bibref ref="RFC3987" xml:space="default"/>).</p>

<p xml:space="default">For interoperability, WSDL authors are advised to avoid the US-ASCII characters: "&lt;", "&gt;", '"', space,
"{", "}", "|", "\", "^", and "`", which are allowed by the <att xml:space="default">xs:anyURI</att> type,
but disallowed in IRIs.</p>

</div3>

<div3 id="nsprefixes" xml:space="default">
<head xml:space="default">Prefixes and Namespaces Used in This Specification</head>
        
<p xml:space="default">This specification uses predefined namespace prefixes throughout;
they are given in the following list. Note that the choice of any
namespace prefix is arbitrary and not semantically significant (see
<bibref ref="XMLNS" xml:space="default"/>).</p>
   
        <table border="1" summary="Mapping of prefixes used in this document to their&#13;&#10;  associated namespace name" id="tabprefns" xml:space="default">
          <caption xml:space="default">Prefixes and Namespaces used in this specification</caption>
          <tbody xml:space="default">
            <tr xml:space="default">
              <th rowspan="1" colspan="1" xml:space="default">Prefix</th>
              <th rowspan="1" colspan="1" xml:space="default">Namespace</th>
              <th rowspan="1" colspan="1" xml:space="default">Notes</th>
            </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">wsdl</td>
              <td rowspan="1" colspan="1" xml:space="default">
                <attval xml:space="default">http://www.w3.org/ns/wsdl</attval>
              </td>
              <td rowspan="1" colspan="1" xml:space="default">
		Defined by this specification.
	      </td>
	    </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">wsdli</td>
              <td rowspan="1" colspan="1" xml:space="default">
		<attval xml:space="default">http://www.w3.org/ns/wsdl-instance</attval>
	      </td>
              <td rowspan="1" colspan="1" xml:space="default">
		Defined by this specification <specref ref="wsdlLocation-aii" xml:space="default"/>.
	      </td>
	    </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">wsdlx</td>
              <td rowspan="1" colspan="1" xml:space="default">
		<attval xml:space="default">http://www.w3.org/ns/wsdl-extensions</attval>
	      </td>
              <td rowspan="1" colspan="1" xml:space="default">
		Defined by this specification <specref ref="wsdlx-references" xml:space="default"/>.
	      </td>
	    </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">wrpc</td>
              <td rowspan="1" colspan="1" xml:space="default">
		<attval xml:space="default">http://www.w3.org/ns/wsdl/rpc</attval>
	      </td>
              <td rowspan="1" colspan="1" xml:space="default">
		Defined by WSDL 2.0: Adjuncts <bibref ref="WSDL-PART2" xml:space="default"/>.
	      </td>
	    </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">wsoap</td>
              <td rowspan="1" colspan="1" xml:space="default">
		<attval xml:space="default">http://www.w3.org/ns/wsdl/soap</attval>
	      </td>
              <td rowspan="1" colspan="1" xml:space="default">
		Defined by WSDL 2.0: Adjuncts <bibref ref="WSDL-PART2" xml:space="default"/>.
	      </td>
	    </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">whttp</td>
              <td rowspan="1" colspan="1" xml:space="default">
		<attval xml:space="default">http://www.w3.org/ns/wsdl/http</attval>
	      </td>
              <td rowspan="1" colspan="1" xml:space="default">
		Defined by WSDL 2.0: Adjuncts <bibref ref="WSDL-PART2" xml:space="default"/>.
	      </td>
	    </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">xs</td>
              <td rowspan="1" colspan="1" xml:space="default">
		<attval xml:space="default">http://www.w3.org/2001/XMLSchema</attval>
	      </td>
              <td rowspan="1" colspan="1" xml:space="default">
		Defined in the W3C XML Schema
          specification <bibref ref="XMLSchemaP1" xml:space="default"/>, <bibref ref="XMLSchemaP2" xml:space="default"/>.
	      </td>
	    </tr>
            <tr xml:space="default">
              <td rowspan="1" colspan="1" xml:space="default">xsi</td>
              <td rowspan="1" colspan="1" xml:space="default">
		<attval xml:space="default">http://www.w3.org/2001/XMLSchema-instance</attval>
	      </td>
	      <td xml:space="default" rowspan="1" colspan="1">
		Defined in the W3C XML Schema specification <bibref ref="XMLSchemaP1" xml:space="default"/>, <bibref ref="XMLSchemaP2" xml:space="default"/>.
	      </td>
	    </tr>
	  </tbody>
	</table>

</div3>

<div3 id="terminology" xml:space="default">
  <head xml:space="default">Terms Used in This Specification</head>
  
  <p xml:space="default">This section describes the terms and concepts introduced
  in Part 1 of the WSDL Version 2.0 specification (this document).</p>

  <glist xml:space="default">
    <gitem xml:space="default">
      <label xml:space="default">Actual Value</label> <def xml:space="default"><p xml:space="default">As in <bibref ref="XMLSchemaP1" xml:space="default"/>,
  the expression "actual value" is used to refer to the member of
  the value space of the simple type definition associated
  with an attribute information item which corresponds to
  its normalized value. This will often be a string, but may also be
  an integer, a boolean, an IRI-reference, etc.</p></def>
    </gitem>
    
    <gitem xml:space="default">
    	<label xml:space="default">Inlined Schema</label>
    	<def xml:space="default">
    		<p xml:space="default">
    			An XML schema that is defined in the
    			<el xml:space="default">wsdl:types</el>
    			<emph xml:space="default">element information item</emph>
    			of a WSDL 2.0 description. For example, an XML
    			Schema defined in an
    			<el xml:space="default">xs:schema</el>
    			<emph xml:space="default">element information item</emph>
    			<specref ref="inlining-xsd" xml:space="default"/>.
    		</p>
    	</def>
    </gitem>
  </glist>
  
</div3>

<div3 id="xmlinfosetproperties" xml:space="default">
<head xml:space="default">XML Information Set Properties</head>

<p xml:space="default">
This specification refers to properties in the XML Information Set <bibref ref="XMLInfoSet" xml:space="default"/>. 
Such properties are denoted by square brackets, e.g. [children], [attributes].
</p>

</div3>

<div3 id="wsdlcomponentmodelproperties" xml:space="default">
<head xml:space="default">WSDL 2.0 Component Model Properties</head>

<p xml:space="default">This specification defines and refers to properties in the WSDL 2.0 Component Model <specref ref="component_model" xml:space="default"/>.
Such properties are denoted by curly brackets, e.g. <prop comp="Interface">name</prop>, <prop comp="Description">interfaces</prop>.
</p>

<p xml:space="default">This specification uses a consistent naming convention for component model properties that refer to components. 
If a property refers to a required or optional component, then the property name is the same as the component name.
If a property refers to a set of components, then the property name is the pluralized form of the component name.
</p>

</div3>

<div3 id="znotation" xml:space="default">
<head xml:space="default">Z Notation</head>

<p xml:space="default">
Z Notation <bibref ref="ZNotationReferenceManual" xml:space="default"/> was used in the development of this specification.
Z Notation is a formal specification language that is based on standard mathematical notation. 
The Z Notation for this specification has been verified using the
Fuzz 2000 type-checker <bibref ref="Fuzz2000" xml:space="default"/>.
</p>

<p xml:space="default">
Since Z Notation is not widely known, it is not included the normative
version of this specification.  However, it is included in a <loc href="wsdl20-z.html" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">non-normative version</loc> which allows to
dynamically hide and show the Z Notation.  Browsers correctly display
the mathematical Unicode characters, provided that the required fonts
are installed.  Mathematical fonts for Mozilla Firefox can be
downloaded from the <loc href="http://www.mozilla.org/projects/mathml/fonts/" xml:space="default" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">Mozilla Web
site</loc>.
 <!--two non-normative versions, the <loc href="wsdl20-z.html">ZED</loc> and <loc href="wsdl20-z-ie.html">ZED-IE</loc> versions.
Both of these non-normative versions allow the reader to interactively hide and show the Z Notation.
They differ in the way that they encode the mathematical symbols that are used in Z Notation.
The ZED version of this specification uses Unicode characters to encode the mathematical symbols
and is compliant with the W3C Character Model <bibref ref="W3CCharacterModel"/>.
Mozilla Firefox correctly displays the mathematical Unicode characters, provided that the required fonts are installed.
Mathematical fonts for Mozilla Firefox can be downloaded from the <loc href="http://www.mozilla.org/projects/mathml/fonts/">Mozilla Web site</loc>.
The ZED-IE version of this specification uses font substitution to display the mathematical symbols correctly in Internet Explorer.-->
</p>

<p xml:space="default">
The Z Notation was used to improve the quality of the normative text that defines the Component Model, and to help ensure that the test suite covered
all important rules implied by the Component Model.
However, the Z Notation is non-normative, so any conflict between it and the normative text is an error in the Z Notation.
Readers and implementers may nevertheless find the Z Notation useful in cases where the normative text is unclear.
</p>

<p xml:space="default">
There are two elements of Z Notation syntax that conflict with the notational conventions described in the preceding sections.
In Z Notation, square brackets are used to introduce basic sets, e.g. <z:math>[ID]</z:math>,
which conflicts with the use of square brackets to denote XML Information Set properties
<specref ref="xmlinfosetproperties" xml:space="default"/>.
Also, in Z Notation, curly brackets are used to denote set display and set comprehension, e.g. <z:math>{1, 2, 3}</z:math>,
which conflicts with the use of curly brackets to denote
WSDL 2.0 Component Model properties <specref ref="wsdlcomponentmodelproperties" xml:space="default"/>.
However, the intended meaning of square and curly brackets should be clear from their context and 
this minor notational conflict should not cause any confusion.
</p>

</div3>

<div3 id="bnfpseudoschemas" xml:space="default">
<head xml:space="default">BNF Pseudo-Schemas</head>

<p xml:space="default">Pseudo-schemas are provided for each component, before the description
   of the component. They use BNF-style conventions for attributes and elements:
   <attval xml:space="default">?</attval> denotes optionality (i.e. zero or one occurrences), 
   <attval xml:space="default">*</attval> denotes zero or more occurrences, 
   <attval xml:space="default">+</attval> one or more occurrences,
   <attval xml:space="default">[</attval> and <attval xml:space="default">]</attval> are used to form groups, and
   <attval xml:space="default">|</attval> represents choice. 
   Attributes are conventionally assigned a value which corresponds
   to their type, as defined in the normative schema.
   Elements with simple content are conventionally assigned a value which
   corresponds to the type of their content, as defined in the normative
   schema.
   Pseudo schemas do not include extension points for brevity.
</p>

<eg xml:space="preserve">
&lt;!-- sample pseudo-schema --&gt;
&lt;<b>defined_element</b>
      required_attribute_of_type_string="<emph xml:space="default">xs:string</emph>"
      optional_attribute_of_type_int="<emph xml:space="default">xs:int</emph>"? &gt;
  &lt;required_element /&gt;
  &lt;optional_element /&gt;?
  &lt;one_or_more_of_these_elements /&gt;+
  [ &lt;choice_1 /&gt; | &lt;choice_2 /&gt; ]*
&lt;/<b>defined_element</b>&gt;
</eg>

</div3>

	<div3 id="assertions" xml:space="default">
		<head xml:space="default">Assertions</head>
		<p xml:space="default">
			Assertions about WSDL 2.0 documents and components that are
			not enforced by the normative XML schema for WSDL 2.0 are
			marked by a dagger symbol (†) at the end
			of a sentence. Each assertion has been assigned a unique
			identifier that consists of a descriptive textual prefix and
			a unique numeric suffix. The numeric suffixes are assigned
			sequentially and never reused so there may be gaps in the
			sequence.  The assertion identifiers MAY be used
			by implementations of this specification for any purpose,
			e.g. error reporting.
		</p>
		<p xml:space="default">
			The assertions and their identifiers are
			summarized in section <specref ref="assertionsummary" xml:space="default"/>.
		</p>
	</div3>

</div2>

</div1>

<!-- ******************************************************************* -->

<div1 id="component_model" xml:space="default">
<head xml:space="default">Component Model</head>

  <p xml:space="default">
  This section describes the conceptual model of WSDL 2.0 as a set of  
  components with attached properties, which collectively describe a Web  
  service. This model is called the <emph xml:space="default">Component Model</emph> of WSDL 2.0.
  A <emph xml:space="default">valid WSDL 2.0 component model</emph> is a set of WSDL 2.0 components and 
properties that satisfy all the requirements given in this specification 
as indicated by keywords whose interpretation is defined by RFC 2119 <bibref ref="RFC2119" xml:space="default"/>.
  </p>
  
  <z:notation name="ComponentModel">

  <p xml:space="default">
  	A WSDL 2.0 document, and its related documents, defines a set of
  	components that together form an instance of a Component Model.
  	This specification defines the structure and constraints on the
  	components in a valid component model instance.
  </p>

  <p xml:space="default">
  	Let
  	<z:i>ComponentModel</z:i>
  	be the set of valid component model instances:
  </p>

  <schema xmlns="http://www.w3.org/2004/zml" name="ComponentModel">
  		DescriptionCM <nl/>
  		ElementDeclarationCM <nl/>
  		TypeDefinitionCM <nl/>
  		InterfaceCM <nl/>
  		InterfaceFaultCM <nl/>
  		InterfaceOperationCM <nl/>
  		InterfaceMessageReferenceCM <nl/>
  		InterfaceFaultReferenceCM <nl/>
  		BindingCM <nl/>
  		BindingFaultCM <nl/>
  		BindingOperationCM <nl/>
  		BindingMessageReferenceCM <nl/>
  		BindingFaultReferenceCM <nl/>
  		ServiceCM <nl/>
  		EndpointCM
  </schema>
  
  <z:see names="DescriptionCM ElementDeclarationCM TypeDefinitionCM    InterfaceCM InterfaceFaultCM  InterfaceOperationCM InterfaceMessageReferenceCM InterfaceFaultReferenceCM    BindingCM BindingFaultCM BindingOperationCM BindingMessageReferenceCM BindingFaultReferenceCM   ServiceCM EndpointCM"/>

  <p xml:space="default">
  	The definition of
  	<z:i>ComponentModel</z:i>
  	is built up from definitions for each of the component
  	types. A component model instance is valid if and only if the
  	constraints on each of the component types are satisfied. The
  	component type definitions are given in the following sections.
  </p>

  </z:notation>
  
  <p xml:space="default">
  Components are typed collections of properties that correspond to  
  different aspects of Web services.
  Each subsection herein describes a different type of  
  component, its defined properties, and its representation as an XML  
  Infoset <bibref ref="XMLInfoSet" xml:space="default"/>.
  </p>

  <z:notation name="Component">
  
  <p xml:space="default">
  Let <z:i>Component</z:i> be the union of each of the component types
  that appear in the WSDL 2.0 component model:
  </p>
  
  <zed xmlns="http://www.w3.org/2004/zml">
  		Component ::= <nl/>
  		<t1/>	description<ldata/>Description<rdata/> | <nl/>
  		<t1/>	elementDecl<ldata/>ElementDeclaration<rdata/> | <nl/>
  		<t1/>	typeDef<ldata/>TypeDefinition<rdata/> | <nl/>
  		<t1/>	interface<ldata/>Interface<rdata/> | <nl/>
  		<t1/>	interfaceFault<ldata/>InterfaceFault<rdata/> | <nl/>
  		<t1/>	interfaceOp<ldata/>InterfaceOperation<rdata/> | <nl/>
  		<t1/>	interfaceMessageRef<ldata/>InterfaceMessageReference<rdata/> | <nl/>
  		<t1/>	interfaceFaultRef<ldata/>InterfaceFaultReference<rdata/> | <nl/>
  		<t1/>	binding<ldata/>Binding<rdata/> | <nl/>
  		<t1/>	bindingFault<ldata/>BindingFault<rdata/> | <nl/>
  		<t1/>	bindingOp<ldata/>BindingOperation<rdata/> | <nl/>
  		<t1/>	bindingMessageRef<ldata/>BindingMessageReference<rdata/> | <nl/>
  		<t1/>	bindingFaultRef<ldata/>BindingFaultReference<rdata/> | <nl/>
  		<t1/>	service<ldata/>Service<rdata/> | <nl/>
  		<t1/>	endpoint<ldata/>Endpoint<rdata/>
  </zed>
  
  <z:see names="Description ElementDeclaration TypeDefinition Interface InterfaceFault InterfaceOperation     InterfaceMessageReference InterfaceFaultReference Binding BindingFault BindingOperation  BindingMessageReference BindingFaultReference Service Endpoint"/>
	
	<p xml:space="default">
	The <z:i>Component</z:i> type is an example of a Z Notation <emph xml:space="default">free type</emph>.
	The structure of a free type is similar to
	that of a variant record or discriminated union datatype that are found in some common
	programming languages.
	Each of the members of this union is formally defined in the
	following sections.
	</p>
	
  </z:notation>
  
  <z:notation name="ID">
  	<p xml:space="default">
  		When a component property is said to contain another component
  		or a set of other components, the intended meaning is that the
  		component property contains a reference to another component
  		or a set of references to other components. Every component
  		contains an unique identifier that is used to express
  		references.
  	</p>

  	<p xml:space="default">
  		Let
  		<z:i>ID</z:i>
  		be the set of all component identifier values:
  	</p>

  	<z:zed>[ID]</z:zed>

  	<p xml:space="default">
  		The
  		<z:i>ID</z:i>
  		type is an example of a Z Notation
  		<emph xml:space="default">basic set</emph>. 
  		The structure of a basic set is immaterial. The only
  		relevant aspect of
  		<z:i>ID</z:i>
  		is that it contains enough members to uniquely identify each
  		component, and that these identifiers can be compared for
  		equality. These identifiers are similar to XML element ids or
  		object identifiers that are found in common object-oriented
  		programming languages.
  	</p>

  </z:notation>

  <z:notation name="Identifier">
  
  <p xml:space="default">
  Every component has an identifier which uniquely identifies it within a component model
  instance.
  </p>
  
  <p xml:space="default">
  Let <z:i>Identifier</z:i> be the set of component identifier properties:
  </p>
  
  <ulist xml:space="default">
   <item xml:space="default"><p xml:space="default">Let <z:i>id</z:i> be the identifier of the component.</p></item>
  </ulist>
  
  <z:schema name="Identifier">
  		id : ID
  </z:schema>
  
  <z:see names="ID"/>
  
  <p xml:space="default">
  The <z:i>Identifier</z:i> set is a an example of Z Notation <emph xml:space="default">schema</emph>.
  The structure of a Z schema is similar
  to that of a record or struct datatype that are found in many common programming languages.
  The fields of an instance of a Z schema are selected using the usual dot notation, e.g.
  <z:math>x.id</z:math> selects the <z:i>id</z:i> field of the instance <z:i>x</z:i>.
  </p>
  
  <p xml:space="default">
  All component properties that contain an <z:i>ID</z:i>, except for <z:i>Identifier</z:i>,
  refer to other components.
  Every <z:i>ID</z:i> value that appears in a component reference corresponds to a unique
  component in the component model with that identifier.
  </p>
  
  </z:notation>
  
  <z:notation name="Id">
  
  <p xml:space="default">
  Let <z:i>Id</z:i> map components to their identifiers:
  </p>
  
  <axdef xmlns="http://www.w3.org/2004/zml">
  	Id : Component <fun/> ID
  <where/>
  	<forall/> x : Description @ Id(description(x)) = x.id <nl/>
  	<forall/> x : ElementDeclaration @ Id(elementDecl(x)) = x.id <nl/>
  	<forall/> x : TypeDefinition @ Id(typeDef(x)) = x.id <nl/>
  	<forall/> x : Interface @ Id(interface(x)) = x.id <nl/>
  	<forall/> x : InterfaceFault @ Id(interfaceFault(x)) = x.id <nl/>
  	<forall/> x : InterfaceOperation @ Id(interfaceOp(x)) = x.id <nl/>
  	<forall/> x : InterfaceMessageReference @ Id(interfaceMessageRef(x)) = x.id <nl/>
  	<forall/> x : InterfaceFaultReference @ Id(interfaceFaultRef(x)) = x.id <nl/>
  	<forall/> x : Binding @ Id(binding(x)) = x.id <nl/>
  	<forall/> x : BindingFault @ Id(bindingFault(x)) = x.id <nl/>
  	<forall/> x : BindingOperation @ Id(bindingOp(x)) = x.id <nl/>
  	<forall/> x : BindingMessageReference @ Id(bindingMessageRef(x)) = x.id <nl/>
  	<forall/> x : BindingFaultReference @ Id(bindingFaultRef(x)) = x.id <nl/>
  	<forall/> x : Service @ Id(service(x)) = x.id <nl/>
  	<forall/> x : Endpoint @ Id(endpoint(x)) = x.id
  </axdef>
  
  <z:see names="Component ID Description ElementDeclaration TypeDefinition Interface InterfaceFault InterfaceOperation     InterfaceMessageReference InterfaceFaultReference Binding BindingFault BindingOperation  BindingMessageReference BindingFaultReference Service Endpoint"/>
	
	<p xml:space="default">
	The <z:i>Id</z:i> function is an example of a Z Notation <emph xml:space="default">axiomatic definition</emph>.
	An axiomatic definition declares an object and then characterizes it with a set of axioms or 
	logical constraints that it satisfies.
	In this case, the <z:i>Id</z:i> function is constrained by giving its value on each possible type of component,
	which uniquely defines it.
	</p>

  </z:notation>
  
  <z:notation name="ComponentModel1">
  <p xml:space="default">
  A component model is a set of uniquely identified components that satisfy a set
  of validity constraints which are described in the following sections.
  </p>
  
  <p xml:space="default">
  Let <z:i>ComponentModel1</z:i> be the base set of component models.
  This set will be further constrained in the following sections:
    </p>
  <ulist xml:space="default">
  	<item xml:space="default"><p xml:space="default">Let <z:i>components</z:i> be the set of components in the component model.</p></item>
  	<item xml:space="default"><p xml:space="default">Let <z:i>componentIds</z:i> be the set of identifiers of components in the component model.</p></item>
  </ulist>
    
  <schema xmlns="http://www.w3.org/2004/zml" name="ComponentModel1">
  	components : <power/> Component <nl/>
  	componentIds : <power/> ID
  <where/>
  	<forall/> x, y : components @ <nl/>
  	<t1/>	Id(x) = Id(y) <implies/> x = y
  <also/>
  	componentIds = {~x : components @ Id(x)~}
  </schema>
  
  <z:see names="Component Id"/>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">No two components have the same identifier.</p></item>
  </ulist>
  
   </z:notation>
   
   <z:notation name="IdentifierValid">
   
   	<p xml:space="default">An identifier is valid if it is the identifier of a component in the component model.</p>
   	
   	<p xml:space="default">Let <z:i>IdentifierValid</z:i> express this validity constraint:</p>
   	
   	<schema xmlns="http://www.w3.org/2004/zml" name="IdentifierValid">
   		ComponentModel1 <nl/>
   		Identifier
  	<where/>
  		id <in/> componentIds
  	</schema>
  	
  	<z:see names="ComponentModel1 Identifier"/>
   	
   </z:notation>
  
  <z:notation name="InterfaceComponents">
  
  <p xml:space="default">
  In order to express the additional constraints on the component model,
  it is convenient to define the subsets of components of each type
  and their corresponding subsets of identifiers.
  </p>
  
  <p xml:space="default">
  Let <z:i>InterfaceComponents</z:i> define the subsets of components
  that are related to the <comp>Interface</comp> component:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceComps</z:i> be the subset of <comp>Interface</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceFaultComps</z:i> be the subset of <comp>Interface Fault</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceOpComps</z:i> be the subset of <comp>Interface Operation</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceMessageRefComps</z:i> be the subset of <comp>Interface Message Reference</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceFaultRefComps</z:i> be the subset of <comp>Interface Fault Reference</comp> components.</p></item>
  </ulist>
  
  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceComponents">
  	ComponentModel1 <nl/>
  	interfaceComps : <power/> Interface <nl/>
  	interfaceFaultComps : <power/> InterfaceFault <nl/>
  	interfaceOpComps : <power/> InterfaceOperation <nl/>
  	interfaceMessageRefComps : <power/> InterfaceMessageReference <nl/>
  	interfaceFaultRefComps : <power/> InterfaceFaultReference <nl/>
  <where/>
  	interfaceComps = {~x : Interface | <nl/>
  	<t1/>	interface(x) <in/> components~}
  <also/>
  	interfaceFaultComps = {~x : InterfaceFault | <nl/>
  	<t1/>	interfaceFault(x) <in/> components~}
  <also/>
  	interfaceOpComps = {~x : InterfaceOperation | <nl/>
  	<t1/>	interfaceOp(x) <in/> components~}
  <also/>
  	interfaceMessageRefComps = {~x : InterfaceMessageReference | <nl/>
  	<t1/>	interfaceMessageRef(x) <in/> components~}
  <also/>
  	interfaceFaultRefComps = {~x : InterfaceFaultReference | <nl/>
  	<t1/>	interfaceFaultRef(x) <in/> components~}
  </schema>
  
  <z:see names="ComponentModel1 Interface InterfaceFault InterfaceOperation InterfaceMessageReference InterfaceFaultReference"/>
  
  <p xml:space="default">
  The definition of <z:i>InterfaceComponents</z:i> is an example of Z Notation <emph xml:space="default">schema inclusion</emph>.
  In Z schema inclusion all the fields and constraints of the included Z schema, e.g. 
  <z:i>ComponentModel1</z:i> are added to the including Z schema, e.g. <z:i>InterfaceComponents</z:i>.
  </p>
  
  </z:notation>
  
  <z:notation name="InterfaceComponentIds">
  
  <p xml:space="default">
  Let <z:i>InterfaceComponentIds</z:i> define the subsets of component identifiers
  that are related to the <comp>Interface</comp> component:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceIds</z:i> be the subset of <comp>Interface</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceFaultIds</z:i> be the subset of <comp>Interface Fault</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceOpIds</z:i> be the subset of <comp>Interface Operation</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceMessageRefIds</z:i> be the subset of <comp>Interface Message Reference</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>interfaceFaultRefIds</z:i> be the subset of <comp>Interface Fault Reference</comp> component identifiers.</p></item>
  </ulist>

  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceComponentIds">
  	InterfaceComponents <nl/>
  	interfaceIds : <power/> ID <nl/>
  	interfaceFaultIds : <power/> ID <nl/>
  	interfaceOpIds : <power/> ID <nl/>
  	interfaceMessageRefIds : <power/> ID <nl/>
  	interfaceFaultRefIds : <power/> ID
  <where/>
   interfaceIds = {~x : interfaceComps  @ x.id~} <nl/>
   interfaceFaultIds = {~x : interfaceFaultComps  @ x.id~} <nl/>
   interfaceOpIds = {~x : interfaceOpComps  @ x.id~} <nl/>
   interfaceMessageRefIds = {~x : interfaceMessageRefComps  @ x.id~} <nl/>
   interfaceFaultRefIds = {~x : interfaceFaultRefComps  @ x.id~} <nl/>
  </schema>
  
  <z:see names="InterfaceComponents ID"/>

  </z:notation>
  
  <z:notation name="BindingComponents">
  
  <p xml:space="default">
  Let <z:i>BindingComponents</z:i> define the subsets of components
  that are related to the <comp>Binding</comp> component:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingComps</z:i> be the subset of <comp>Binding</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingFaultComps</z:i> be the subset of <comp>Binding Fault</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingOpComps</z:i> be the subset of <comp>Binding Operation</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingMessageRefComps</z:i> be the subset of <comp>Binding Message Reference</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingFaultRefComps</z:i> be the subset of <comp>Binding Fault Reference</comp> components.</p></item>
  </ulist>

  <schema xmlns="http://www.w3.org/2004/zml" name="BindingComponents">
  	ComponentModel1 <nl/>
  	bindingComps : <power/> Binding <nl/>
  	bindingFaultComps : <power/> BindingFault <nl/>
  	bindingOpComps : <power/> BindingOperation <nl/>
  	bindingMessageRefComps : <power/> BindingMessageReference <nl/>
  	bindingFaultRefComps : <power/> BindingFaultReference <nl/>
  <where/>
  	bindingComps = {~x : Binding | <nl/>
  	<t1/>	binding(x) <in/> components~}
  <also/>
  	bindingFaultComps = {~x : BindingFault | <nl/>
  	<t1/>	bindingFault(x) <in/> components~}
  <also/>
  	bindingOpComps = {~x : BindingOperation | <nl/>
  	<t1/>	bindingOp(x) <in/> components~}
  <also/>
  	bindingMessageRefComps = {~x : BindingMessageReference | <nl/>
  	<t1/>	bindingMessageRef(x) <in/> components~}
  <also/>
  	bindingFaultRefComps = {~x : BindingFaultReference | <nl/>
  	<t1/>	bindingFaultRef(x) <in/> components~}
  </schema>

  <z:see names="ComponentModel1 Binding BindingFault BindingOperation BindingMessageReference BindingFaultReference"/>
  
  </z:notation>
  
  <z:notation name="BindingComponentIds">
  
  <p xml:space="default">
  Let <z:i>BindingComponentIds</z:i> define the subsets of component identifiers
  that are related to the <comp>Binding</comp> component:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingIds</z:i> be the subset of <comp>Binding</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingFaultIds</z:i> be the subset of <comp>Binding Fault</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingOpIds</z:i> be the subset of <comp>Binding Operation</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingMessageRefIds</z:i> be the subset of <comp>Binding Message Reference</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>bindingFaultRefIds</z:i> be the subset of <comp>Binding Fault Reference</comp> component identifiers.</p></item>
  </ulist>

  <schema xmlns="http://www.w3.org/2004/zml" name="BindingComponentIds">
   BindingComponents <nl/>
   bindingIds : <power/> ID <nl/>
   bindingFaultIds : <power/> ID <nl/>
   bindingOpIds : <power/> ID <nl/>
   bindingMessageRefIds : <power/> ID <nl/>
   bindingFaultRefIds : <power/> ID
  <where/>
   bindingIds = {~x : bindingComps  @ x.id~} <nl/>
   bindingFaultIds = {~x : bindingFaultComps  @ x.id~} <nl/>
   bindingOpIds = {~x : bindingOpComps  @ x.id~} <nl/>
   bindingMessageRefIds = {~x : bindingMessageRefComps  @ x.id~} <nl/>
   bindingFaultRefIds = {~x : bindingFaultRefComps  @ x.id~}
  </schema>
  
  <z:see names="BindingComponents ID"/>

  </z:notation>
  
  <z:notation name="ServiceComponents">
  
  <p xml:space="default">
  Let <z:i>ServiceComponents</z:i> define the subsets of components
  that are related to the <comp>Service</comp> component:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>serviceComps</z:i> be the subset of <comp>Service</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>endpointComps</z:i> be the subset of <comp>Endpoint</comp> components.</p></item>
  </ulist>

  <schema xmlns="http://www.w3.org/2004/zml" name="ServiceComponents">
  	ComponentModel1 <nl/>
  	serviceComps : <power/> Service <nl/>
  	endpointComps : <power/> Endpoint
  <where/>
  	serviceComps = {~x : Service | <nl/>
  	<t1/>	service(x) <in/> components~}
  <also/>
  	endpointComps = {~x : Endpoint | <nl/>
  	<t1/>	endpoint(x) <in/> components~}
  </schema>

  <z:see names="ComponentModel1 Service Endpoint"/>
  
  </z:notation>
  
  <z:notation name="ServiceComponentIds">
  
  <p xml:space="default">
  Let <z:i>ServiceComponentIds</z:i> define the subsets of component identifiers
  that are related to the <comp>Service</comp> component:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>serviceIds</z:i> be the subset of <comp>Service</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>endpointIds</z:i> be the subset of <comp>Endpoint</comp> component identifiers.</p></item>
  </ulist>

  <schema xmlns="http://www.w3.org/2004/zml" name="ServiceComponentIds">
   ServiceComponents <nl/>
   serviceIds : <power/> ID <nl/>
   endpointIds : <power/> ID
  <where/>
   serviceIds = {~x : serviceComps  @ x.id~} <nl/>
   endpointIds = {~x : endpointComps  @ x.id~}
  </schema>
  
  <z:see names="ServiceComponents ID"/>

  </z:notation>
  
  <z:notation name="OtherComponents">
  
  <p xml:space="default">
  Let <z:i>OtherComponents</z:i> define the subsets of the other component types:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>descriptionComps</z:i> be the subset of <comp>Description</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>elementDeclComps</z:i> be the subset of <comp>Element Declaration</comp> components.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>typeDefComps</z:i> be the subset of <comp>Type Definition</comp> components.</p></item>
  </ulist>

  <schema xmlns="http://www.w3.org/2004/zml" name="OtherComponents">
  	ComponentModel1 <nl/>
  	descriptionComps : <power/> Description <nl/>
  	elementDeclComps : <power/> ElementDeclaration <nl/>
  	typeDefComps : <power/> TypeDefinition
  <where/>
  	descriptionComps = {~x : Description | <nl/>
  	<t1/>	description(x) <in/> components~}
  <also/>
  	elementDeclComps = {~x : ElementDeclaration | <nl/>
  	<t1/>	elementDecl(x) <in/> components~}
  <also/>
  	typeDefComps = {~x : TypeDefinition | <nl/>
  	<t1/>	typeDef(x) <in/> components~}
  </schema>
  
  <z:see names="ComponentModel1 Description ElementDeclaration TypeDefinition"/>
  
  </z:notation>
  
  <z:notation name="OtherComponentIds">
  
  <p xml:space="default">
  Let <z:i>OtherComponentIds</z:i> define the subsets of other component identifiers:
  </p>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">Let <z:i>descriptionIds</z:i> be the subset of <comp>Description</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>elementDeclIds</z:i> be the subset of <comp>Element Declaration</comp> component identifiers.</p></item>
  <item xml:space="default"><p xml:space="default">Let <z:i>typeDefIds</z:i> be the subset of <comp>Type Definition</comp> component identifiers.</p></item>
  </ulist>

  <schema xmlns="http://www.w3.org/2004/zml" name="OtherComponentIds">
  	OtherComponents <nl/>
  	descriptionIds : <power/> ID <nl/>
  	elementDeclIds : <power/> ID <nl/>
  	typeDefIds : <power/> ID
  <where/>
   descriptionIds = {~x : descriptionComps  @ x.id~} <nl/>
   elementDeclIds = {~x : elementDeclComps  @ x.id~} <nl/>
   typeDefIds = {~x : typeDefComps  @ x.id~}
  </schema>
  
  <z:see names="OtherComponents ID"/>

  </z:notation>
  
  <z:notation name="ComponentModel2">
  
  <p xml:space="default">
  	Let
  	<z:i>ComponentModel2</z:i>
  	be the basic component model, augmented with the definitions of
  	the subsets of each component type and their corresponding
  	identifiers:
  </p>

  <zed xmlns="http://www.w3.org/2004/zml">
  	ComponentModel2 <defs/> <nl/>
  	<t1/>	InterfaceComponentIds <land/> <nl/>
  	<t1/>	BindingComponentIds <land/> <nl/>
  	<t1/>	ServiceComponentIds <land/> <nl/>
  	<t1/>	OtherComponentIds
  </zed>
  
  <z:see names="InterfaceComponentIds BindingComponentIds ServiceComponentIds OtherComponentIds"/>
  
  <p xml:space="default">
  The definition of <z:i>ComponentModel2</z:i> is an example of Z Notation <emph xml:space="default">schema conjunction</emph>.
  In Z schema conjunction, the resulting Z schema, e.g. <z:i>ComponentModel2</z:i>, contains all the fields
  of the conjoined Z schemas, e.g. <z:i>InterfaceComponentIds</z:i>, <z:i>BindingComponentIds</z:i>, <z:i>ServiceComponentIds</z:i>, and
  <z:i>OtherComponentIds</z:i>, and its constraint is the conjunction (logical and) of their constraints.
  </p>
  
  </z:notation>
    
	  <z:notation name="Base">
	  
	  <p xml:space="default">
	  The component types in the
	  component model have an identifier.
	  It is convenient to put this field into a base Z schema that
	  can be included in other component schemas.
	  </p>
	  
	  <p xml:space="default">
	  Let <z:i>Base</z:i> be the common base Z schema for all component types
	  that have an identifier:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="Base">
		Identifier
	  </schema>

		<z:see names="Identifier"/>

	  </z:notation>
	  
	  <z:notation name="BaseValid">
	  
	  <p xml:space="default">
	  The base properties of a component are valid when the identifiers are valid:
	  </p>
	  
	  <p xml:space="default">
	  Let <z:i>BaseValid</z:i> be this validity constraint on the
	  base fields of a component:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="BaseValid">
		IdentifierValid
	  </schema>
	  
		<z:see names="IdentifierValid"/>
		
	  </z:notation>
	  
	  <z:notation name="NestedBase">
	  
	  <p xml:space="default">Nested components have an additional <prop comp="">parent</prop> property.</p>
	  
	  <p xml:space="default">
	  	Let
	  	<z:i>NestedBase</z:i>
	  	be the common base schema for all nested component types:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="NestedBase">
	  	Base <nl/>
	  	Parent
	  </schema>
	  
	  <z:see names="Base Parent"/>

	  </z:notation>
	  
	  <z:notation name="NestedBaseValid">
	  
	  <p xml:space="default">
	  The properties of a nested base component are valid
	  when the base properties are valid and the <prop comp="">parent</prop>
	  property is valid.
	  </p>

	  <p xml:space="default">
	  	Let
	  	<z:i>NestedBaseValid</z:i>
	  	be the validity constraints for nested
	  	components:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="NestedBaseValid">
	  	BaseValid <nl/>
	  	ParentValid
	  </schema>
	  
	  <z:see names="BaseValid ParentValid"/>
	  
	  </z:notation>
	  
  <p xml:space="default">
  Properties are unordered and unique  
  with respect to the component they are associated with. Individual  
  properties' definitions may constrain their content (e.g., to a typed  
  value, another component, or a set of typed values or components), and  
  components may require the presence of a property to be considered  
  conformant. Such properties are marked as REQUIRED, whereas those that
  are not required to be present are marked as OPTIONAL.
  By convention, when specifying the mapping rules from the XML Infoset
  representation of a component to the component itself, an optional
  property that is absent in the component in question is described as
  being “empty”. Unless otherwise specified, when a property is identified
  as being a collection (a set or a list), its value may be a 0-element
  (empty) collection. In order to simplify the presentation of the rules
  that deal with sets of components, for all OPTIONAL properties whose type
  is a set, the absence of such a property from a component MUST be treated
  as semantically equivalent to the presence of a property with the same
  name and whose value is the empty set. In other words, every OPTIONAL
  set-valued property MUST be assumed to have the empty set as its default
  value, to be used in case the property is absent.
  </p>
  
  <z:notation name="OPTIONAL">
  
  <p xml:space="default">
  An OPTIONAL simple property type is treated
  as a set-valued type that contains at most one member.
  If the property is absent then its value is the empty set.
  If the property is present then its value is the singleton set
  that contains the actual value of the property.
  </p>
  
  <p xml:space="default">
  Let <z:i>OPTIONAL</z:i>[<z:i>X</z:i>] be the OPTIONAL values
  of type X where X is a property type:
  </p>
  
  <gendef xmlns="http://www.w3.org/2004/zml" params="X">
  		OPTIONAL : <power/>(<power/> X)
  <where/>
  		OPTIONAL = {<emptyset/>} <cup/> {~x : X @ {x}~}
  </gendef>
  
  <ulist xml:space="default">
  <item xml:space="default"><p xml:space="default">An optional value of type <z:i>X</z:i> is either the empty set or a singleton set
  that contains one member of <z:i>X</z:i>.</p></item>
  </ulist>
  
  <p xml:space="default">
  For example, <z:math>OPTIONAL[{True, False}] = {<z:emptyset/>, {True}, {False}}</z:math>.
  </p>
  
  <p xml:space="default">
  The definition of <z:i>OPTIONAL</z:i> is an example of Z Notation <emph xml:space="default">generic definition</emph>.
  A Z generic definition defines an object whose type depends on the types of one or more sets that
  are given as arguments to the definition.
  A Z generic definition is similar to a generic, template, or parameterized type that are found in
  common programming languages.
  </p>
  </z:notation>
  
  <p xml:space="default">
  Component definitions are serializable in XML 1.0 format but are
  independent of any particular serialization of the component model. 
  Component definitions use a subset 
  (see <specref ref="simpletypes" xml:space="default"/>)
  of the simple types
  defined by the XML Schema 1.0 specification <bibref ref="XMLSchemaP2" xml:space="default"/>.
  </p>

  <p xml:space="default">
  In addition to the direct XML Infoset representation described here,  
  the component model allows components external to the Infoset through  
  the mechanisms described in <specref ref="modularize" xml:space="default"/>.
  </p>

  <p xml:space="default">
  A component model can be extracted from a given XML Infoset which  
  conforms to the XML Schema for WSDL 2.0 by recursively mapping  
  Information Items to their identified components, starting with the  
  <el xml:space="default">wsdl:description</el> <emph xml:space="default">element information item</emph>. This includes the  
  application of the mechanisms described in <specref ref="modularize" xml:space="default"/>.
  </p>

  <p xml:space="default">
  This document does not specify a means of producing an XML Infoset  
  representation from a component model instance.
  In particular, there are in general many valid ways to modularize
  a given component model instance into one or more XML Infosets.
  </p>

  <div2 id="Description" xml:space="default">
    <head xml:space="default">Description</head>

    <div3 id="Description_details" xml:space="default">
      <head xml:space="default">The Description Component</head>
      
      <p xml:space="default">At a high level, the <comp>Description</comp> component is just a
      container for two categories of components: WSDL 2.0 components and
      type system components.</p>

      <p xml:space="default">
      	WSDL 2.0 components are interfaces, bindings and services. Type
      	system components are element declarations and type
      	definitions.
      </p>

      <p xml:space="default">Type system components describe the constraints on a
      message's content. By default, these constraints are expressed
      in terms of the <bibref ref="XMLInfoSet" xml:space="default"/>, i.e. they define the
      [local name], [namespace name], [children] and [attributes]
      properties of an <emph xml:space="default">element information item</emph>.  Type systems based
      upon other data models are generally accommodated by extensions
      to WSDL 2.0; see <specref ref="language-extensibility" xml:space="default"/>.  In the
      case where they define information equivalent to that of a XML
      Schema global element declaration, they can be
      treated as if they were such a declaration.</p>

      <p xml:space="default">This specification does not define the behavior of a WSDL 2.0
      document that uses multiple schema languages for describing type
      system components simultaneously.</p>
      
      <z:notation name="ElementContentModel">
      <p xml:space="default">
      Let <z:i>ElementContentModel</z:i> be the set of all models that define the allowable
      values for the [children] and [attribute] properties of an <emph xml:space="default">element information item</emph>:
      </p>

      <z:zed>
      	[ElementContentModel]
      </z:zed>
      
      <p xml:space="default">
      The detailed structure of <z:i>ElementContentModel</z:i> is immaterial for the purposes of
      this specification. It is can be safely thought of as some superset of the set of all XML Schema
      complex type definitions.
      </p>

      </z:notation>
      
      <p xml:space="default">
      	An <compdef>Element Declaration</compdef> component defines the name and content model of an <emph xml:space="default">element information item</emph>
      	such as that defined by an XML Schema global element declaration.
      	It has a <propdef comp="Element Declaration">name</propdef> property that is the QName of the <emph xml:space="default">element information item</emph>
      	and a <propdef comp="Element Declaration">system</propdef> property that is the namespace IRI of the extension <emph xml:space="default">element information item</emph>s
      	for the type system, e.g. the namespace of XML Schema.
      </p>
      
      <z:notation name="ElementDeclaration">
      <p xml:space="default">
      Let <z:i>ElementDeclaration</z:i> be the type of <comp>Element Declaration</comp> components:
      </p>
      <ulist xml:space="default">
      <item xml:space="default"><p xml:space="default">Let <z:i>name</z:i> be the QName defined by the [local name] and [namespace name] 
      properties of the <emph xml:space="default">element information item</emph>.</p></item>
      <item xml:space="default"><p xml:space="default">Let <z:i>system</z:i> be the namespace IRI of the type system.</p></item>
      <item xml:space="default"><p xml:space="default">Let <z:i>elementContentModel</z:i> be the element content model that constrains the
      allowable contents of the [children] and [attribute] properties of the <emph xml:space="default">element information item</emph>.</p></item>
      </ulist>

      <schema xmlns="http://www.w3.org/2004/zml" name="ElementDeclaration">
      		Identifier <nl/>
      		name : QName <nl/>
      		system : AbsoluteURI <nl/>
      		elementContentModel : ElementContentModel
      </schema>
      
      <z:see names="QName AbsoluteURI ElementContentModel"/>

      </z:notation>
      
       <z:notation name="ElementDeclarationCM">

       		<p xml:space="default">
       			Each <comp>Element Declaration</comp> component is uniquely
       			identified by the combination of its <prop comp="Element Declaration">name</prop> 
       			and <prop comp="Element Declaration">system</prop> properties within the
       			component model.
       		</p>
       		
       		<p xml:space="default">
			       Let <z:i>ElementDeclarationCM</z:i> express this
			       constraint:
			</p>
			
			<schema xmlns="http://www.w3.org/2004/zml" name="ElementDeclarationCM">
				ComponentModel2
			<where/>
				<forall/> x, y : elementDeclComps | <nl/>
				<t1/>	x.name = y.name <land/> <nl/>
				<t1/>	x.system = y.system @ <nl/>
				<t2/>		x = y
			</schema>
			
			<z:see names="ComponentModel2"/>
			
			<ulist xml:space="default">
			<item xml:space="default"><p xml:space="default">No two <comp>Element Declaration</comp> components have the same <prop comp="Element Declaration">name</prop> 
			and <prop comp="Element Declaration">system</prop> properties.</p></item>
			</ulist>
		</z:notation>

      <p xml:space="default">
      	A <compdef>Type Definition</compdef> component defines the content model of an <emph xml:space="default">element information item</emph>
      	such as that defined by an XML Schema global type definition.
      	It has a <propdef comp="Type Definition">name</propdef> property that is the QName of the type
      	and a <propdef comp="Type Definition">system</propdef> property that is the namespace IRI of the extension <emph xml:space="default">element information item</emph>s
      	for the type system, e.g. the namespace of XML Schema.
      </p>
      
      <z:notation name="TypeDefinition">
      <p xml:space="default">
      Let <z:i>TypeDefinition</z:i> be the type of the <comp>Type Definition</comp> component:
      </p>
      <ulist xml:space="default">
      <item xml:space="default"><p xml:space="default">Let <z:i>name</z:i> be the QName of the type definition.</p></item>
      <item xml:space="default"><p xml:space="default">Let <z:i>system</z:i> be the namespace IRI of the type system.</p></item>
      <item xml:space="default"><p xml:space="default">Let <z:i>elementContentModel</z:i> be the element content model that constrains the
      allowable contents of the [children] and [attribute] properties of the <emph xml:space="default">element information item</emph>
      described by the type definition.</p></item>
      </ulist>

      <schema xmlns="http://www.w3.org/2004/zml" name="TypeDefinition">
      		Identifier <nl/>
      		name : QName <nl/>
      		system : AbsoluteURI <nl/>
      		elementContentModel : ElementContentModel
      </schema>

      <z:see names="QName AbsoluteURI ElementContentModel"/>

      </z:notation>
      
       <z:notation name="TypeDefinitionCM">

       		<p xml:space="default">
       			Each <comp>Type Definition</comp> component is uniquely
       			identified by the combination of its <prop comp="Type Definition">name</prop> 
       			and <prop comp="Type Definition">system</prop> properties within the
       			component model.
       		</p>
       		
       		<p xml:space="default">
			       Let <z:i>TypeDefinitionCM</z:i> express this
			       constraint:
			</p>
			
			<schema xmlns="http://www.w3.org/2004/zml" name="TypeDefinitionCM">
				ComponentModel2
			<where/>
				<forall/> x, y : typeDefComps | <nl/>
				<t1/>	x.name = y.name <land/> <nl/>
				<t1/>	x.system = y.system @ <nl/>
				<t2/>		x = y
			</schema>
			
			<z:see names="ComponentModel2"/>
			
			<ulist xml:space="default">
			<item xml:space="default"><p xml:space="default">No two <comp>Type Definition</comp> components have the same <prop comp="Type Definition">name</prop> 
			and <prop comp="Type Definition">system</prop> properties.</p>
			</item>
			</ulist>
		</z:notation>

      <p xml:space="default">
      	<comp>Interface</comp>, <comp>Binding</comp>, <comp>Service</comp>, <comp>Element Declaration</comp>, and <comp>Type
      	Definition</comp> components are directly contained in the
      	<comp>Description</comp> component and are referred to as
      	<emph xml:space="default">top-level components</emph>. 
      	The top-level WSDL 2.0 components contain other components, e.g.
      	<comp>Interface Operation</comp> and <comp>Endpoint</comp>, which are referred to as
      	<emph xml:space="default">nested components</emph>. Nested components may contain
      	other nested components. The component that contains
      	a nested component is referred to as the <emph xml:space="default">parent</emph>
      	of the nested component. Nested components have a <propdef comp="">parent</propdef>
      	property that is a reference to their parent component.
      </p>
      
      <z:notation name="TopLevelComponent">
      
      <p xml:space="default">Let <z:i>TopLevelComponent</z:i> be the set of all top-level components:
      </p>
      
      <zed xmlns="http://www.w3.org/2004/zml">
      	TopLevelComponent == <nl/>
      	<t1/>	<ran/> elementDecl <cup/> <nl/>
      	<t1/>	<ran/> typeDef <cup/> <nl/>
      	<t1/>	<ran/> interface <cup/> <nl/>
       	<t1/>	<ran/> binding <cup/> <nl/>
      	<t1/>	<ran/> service
      </zed>
      
      <z:see names="Component"/>
      
      </z:notation>
      
      <z:notation name="Name">
      
      <p xml:space="default">Let <z:i>Name</z:i> map a top-level component to its QName <prop comp="">name</prop> property:</p>
      
      <axdef xmlns="http://www.w3.org/2004/zml">
      	Name : TopLevelComponent <fun/> QName
      <where/>
      	<forall/> x : ElementDeclaration @ <nl/>
      	<t1/> Name(elementDecl(x)) = x.name
      <also/>
      	<forall/> x : TypeDefinition @ <nl/>
      	<t1/> Name(typeDef(x)) = x.name
      <also/>
      	<forall/> x : Interface @ <nl/>
      	<t1/> Name(interface(x)) = x.name
      <also/>
      	<forall/> x : Binding @ <nl/>
      	<t1/> Name(binding(x)) = x.name
      <also/>
      	<forall/> x : Service @ <nl/>
      	<t1/> Name(service(x)) = x.name
      </axdef>
      
      <z:see names="TopLevelComponent QName Component ElementDeclaration TypeDefinition Interface Binding Service"/>

      </z:notation>
   
      <z:notation name="Parent">

      <p xml:space="default">
      	Let
      	<z:i>Parent</z:i>
      	represent the <prop comp="">parent</prop> property of a nested component:
      </p>
      
      <schema xmlns="http://www.w3.org/2004/zml" name="Parent">
      	Identifier <nl/>
      	parent : ID
      </schema>
      
      <z:see names="Identifier ID"/>

      </z:notation>
      
      <z:notation name="ParentValid">
      
      <p xml:space="default">
      	The parent of a nested component in the component model MUST
      	also be in the component model. No component is its own parent.
      </p>

      <p xml:space="default">
      	Let
      	<z:i>ParentValid</z:i>
      	represent these validity constraints:
      </p>
      
      <schema xmlns="http://www.w3.org/2004/zml" name="ParentValid">
      	ComponentModel1 <nl/>
      	Parent
      <where/>
      	parent <in/> componentIds <nl/>
      	parent <neq/> id
      </schema>
      
      <z:see names="ComponentModel1 Parent"/>
      
      </z:notation>
      
      <z:notation name="NestedComponent">
      
      <p xml:space="default">Let <z:i>NestedComponent</z:i> be the set of all nested components:
      </p>
      
      <zed xmlns="http://www.w3.org/2004/zml">
      	NestedComponent == <nl/>
      	<t1/>	<ran/> interfaceFault <cup/> <nl/>
      	<t1/>	<ran/> interfaceOp <cup/> <nl/>
      	<t1/>	<ran/> interfaceMessageRef <cup/> <nl/>
      	<t1/>	<ran/> interfaceFaultRef <cup/> <nl/>
      	<t1/>	<ran/> bindingFault <cup/> <nl/>
      	<t1/>	<ran/> bindingOp <cup/> <nl/>
      	<t1/>	<ran/> bindingMessageRef <cup/> <nl/>
      	<t1/>	<ran/> bindingFaultRef <cup/> <nl/>
      	<t1/>	<ran/> endpoint
      </zed>
      
      <z:see names="Component"/>
      
      </z:notation>
      
      <z:notation name="ParentId">
      
      <p xml:space="default">Let <z:i>ParentId</z:i> map a nested component to its parent component identifier:</p>
      
      <axdef xmlns="http://www.w3.org/2004/zml">
      	ParentId : NestedComponent <fun/> ID
      <where/>
      	<forall/> x : InterfaceFault @ <nl/>
      	<t1/> ParentId(interfaceFault(x)) = x.parent
      <also/>
      	<forall/> x : InterfaceOperation @ <nl/>
      	<t1/> ParentId(interfaceOp(x)) = x.parent
      <also/>
      	<forall/> x : InterfaceMessageReference @ <nl/>
      	<t1/> ParentId(interfaceMessageRef(x)) = x.parent
      <also/>
      	<forall/> x : InterfaceFaultReference @ <nl/>
      	<t1/> ParentId(interfaceFaultRef(x)) = x.parent
      <also/>
      	<forall/> x : BindingFault @ <nl/>
      	<t1/> ParentId(bindingFault(x)) = x.parent
      <also/>
      	<forall/> x : BindingOperation @ <nl/>
      	<t1/> ParentId(bindingOp(x)) = x.parent
      <also/>
      	<forall/> x : BindingMessageReference @ <nl/>
      	<t1/> ParentId(bindingMessageRef(x)) = x.parent
      <also/>
      	<forall/> x : BindingFaultReference @ <nl/>
      	<t1/> ParentId(bindingFaultRef(x)) = x.parent
      <also/>
      	<forall/> x : Endpoint @ <nl/>
      	<t1/> ParentId(endpoint(x)) = x.parent
      </axdef>
      
      <z:see names="NestedComponent ID InterfaceFault InterfaceOperation InterfaceMessageReference InterfaceFaultReference          BindingFault BindingOperation BindingMessageReference BindingFaultReference Endpoint"/>

      </z:notation>
   
      <p xml:space="default">The properties of the <compdef>Description</compdef> component are as follows:</p>
	  <ulist xml:space="default">
	    <item xml:space="default"><p xml:space="default"><propdef comp="Description">interfaces</propdef> OPTIONAL. A set of <comp>Interface</comp> components.
	    </p></item>

	    <item xml:space="default"><p xml:space="default"><propdef comp="Description">bindings</propdef> OPTIONAL. A set of <comp>Binding</comp> components.
	    </p></item>

	    <item xml:space="default"><p xml:space="default"><propdef comp="Description">services</propdef> OPTIONAL. A set of <comp>Service</comp> components.
	    </p></item>

	    <item xml:space="default"><p xml:space="default"><propdef comp="Description">element declarations</propdef> OPTIONAL. A set of <comp>Element Declaration</comp> components.</p></item>

	    <item xml:space="default"><p xml:space="default"><propdef comp="Description">type definitions</propdef> REQUIRED. A set of <comp>Type Definition</comp> components.</p></item>
	  </ulist>

<z:notation name="Description">	
<p xml:space="default">
Let <z:i>Description</z:i> be the set of all <comp>Description</comp> components:
</p>

<schema xmlns="http://www.w3.org/2004/zml" name="Description">
	Identifier <nl/>
	interfaces : <power/> ID <nl/>
	bindings : <power/> ID <nl/>
	services : <power/> ID <nl/>
	elementDeclarations : <power/> ID <nl/>
	typeDefinitions : <power/> ID
</schema>

<z:see names="ID"/>

</z:notation>
    	
  <z:notation name="stringTD...">
  
  <p xml:space="default">
  Let the built-in XML schema datatypes correspond to the following <comp>Type Definition</comp> components:
  </p>
  
  <axdef xmlns="http://www.w3.org/2004/zml">
      		stringTD, booleanTD, decimalTD, floatTD, doubleTD, <nl/>
      		durationTD, dateTimeTD, timeTD, dateTD, <nl/>
      		gYearMonthTD, gYearTD, gMonthDayTD, gDayTD, <nl/>
    		gMonthTD, hexBinaryTD, base64BinaryTD, <nl/>
    		anyURITD, QNameTD, NOTATIONTD, normalizedStringTD, <nl/>
    		tokenTD, languageTD, NMTOKENTD, NMTOKENSTD, <nl/>
    		NameTD, NCNameTD, IDTD, IDREFTD, IDREFSTD, <nl/>
    		ENTITYTD, ENTITIESTD, integerTD, <nl/>
    		nonPositiveIntegerTD, negativeIntegerTD, <nl/>
    		longTD, intTD, shortTD, byteTD, <nl/>
    		nonNegativeIntegerTD, unsignedLongTD, unsignedIntTD, <nl/>
    		unsignedShortTD, unsignedByteTD, positiveIntegerTD : TypeDefinition    		
  </axdef>
  
  <z:see names="TypeDefinition"/>
  
  </z:notation>
  
  <z:notation name="BuiltInTypeDefComps">

  <p xml:space="default">Let <z:i>BuiltInTypeDefComps</z:i> be the set of all the built-in XML schema <comp>Type Definition</comp> components:</p>
  
  <zed xmlns="http://www.w3.org/2004/zml">
  	BuiltInTypeDefComps == <nl/>
  	<t1/> {stringTD, booleanTD, decimalTD, floatTD, doubleTD, <nl/>
  	<t1/> durationTD, dateTimeTD, timeTD, dateTD, <nl/>
    <t1/> gYearMonthTD, gYearTD, gMonthDayTD, gDayTD, <nl/>
    <t1/> gMonthTD, hexBinaryTD, base64BinaryTD, <nl/>
    <t1/> anyURITD, QNameTD, NOTATIONTD, normalizedStringTD, <nl/>
    <t1/> tokenTD, languageTD, NMTOKENTD, NMTOKENSTD, <nl/>
    <t1/> NameTD, NCNameTD, IDTD, IDREFTD, IDREFSTD, <nl/>
    <t1/> ENTITYTD, ENTITIESTD, integerTD, <nl/>
    <t1/> nonPositiveIntegerTD, negativeIntegerTD, <nl/>
    <t1/> longTD, intTD, shortTD, byteTD, <nl/>
    <t1/> nonNegativeIntegerTD, unsignedLongTD, unsignedIntTD, <nl/>
    <t1/> unsignedShortTD, unsignedByteTD, positiveIntegerTD}
  </zed>
  
  <z:see names="stringTD..."/>
  
  </z:notation>
  
  <z:notation name="XMLSchemaURI">

  <p xml:space="default">Let <z:i>XMLSchemaURI</z:i> be the namespace URI of XML Schema:</p>
  
  <axdef xmlns="http://www.w3.org/2004/zml">
  	XMLSchemaURI : AbsoluteURI
  </axdef>
  
  <z:see names="AbsoluteURI"/>
  
  <p xml:space="default">Both the namespace name of the <prop comp="Type Definition">name</prop> property
  and the <prop comp="Type Definition">system</prop> property of each built-in datatypes is the XML Schema URI:</p>
  
  <zed xmlns="http://www.w3.org/2004/zml">
  	<forall/> x : BuiltInTypeDefComps @ <nl/>
  	<t1/> x.name.namespaceName = x.system = XMLSchemaURI
  </zed>  
  
  <z:see names="BuiltInTypeDefComps"/>
  
  </z:notation>
  
  <z:notation name="BuiltInTypeDefIds">

  <p xml:space="default">Let <z:i>BuiltInTypeDefIds</z:i> be the set of ids of the built-in datatypes:</p>
  
  <zed xmlns="http://www.w3.org/2004/zml">
  	BuiltInTypeDefIds == {~x : BuiltInTypeDefComps @ x.id~}
  </zed>
  
  <z:see names="BuiltInTypeDefComps"/>
  
  <p xml:space="default">The built-in datatypes are distinct so there are forty-four ids in total:</p>
  
  <zed xmlns="http://www.w3.org/2004/zml">
	#BuiltInTypeDefIds = 44  
  </zed>
  
  </z:notation>
  
  <z:notation name="DescriptionTypeDefs">
  
  <p xml:space="default">The XML Schema built-in datatypes are also built into WSDL 2.0.</p>
  
  <p xml:space="default">Let <z:i>DescriptionTypeDefs</z:i> express this constraint on the <comp>Description</comp>:</p>
  
  <schema xmlns="http://www.w3.org/2004/zml" name="DescriptionTypeDefs">
  	ComponentModel2
  <where/>
  	BuiltInTypeDefComps <subseteq/> typeDefComps
  </schema>
  
  <z:see names="ComponentModel2 BuiltInTypeDefComps"/>

  </z:notation>
  
  <z:notation name="DescriptionKey">

<p xml:space="default">
The component model contains a unique <comp>Description</comp> component.
</p>

<p xml:space="default">
Let <z:i>DescriptionKey</z:i> express this constraint
on the <comp>Description</comp> component:
</p>

<ulist xml:space="default">
<item xml:space="default"><p xml:space="default">Let <z:i>descriptionComp</z:i> be the unique <comp>Description</comp> component.</p></item>
</ulist>

<schema xmlns="http://www.w3.org/2004/zml" name="DescriptionKey">
	ComponentModel2 <nl/>
	descriptionComp : Description
<where/>
	descriptionComps = {descriptionComp}
</schema>

<z:see names="ComponentModel2 Description"/>

<ulist xml:space="default">
<item xml:space="default"><p xml:space="default">The component model contains a unique <comp>Description</comp> component.</p></item>
</ulist>
</z:notation>

<z:notation name="DescriptionCM">
<p xml:space="default">
Each component referred to by the properties of the <comp>Description</comp> component
must exist in the component model.
</p>
<p xml:space="default">
Let <z:i>DescriptionCM</z:i> express these referential integrity constraints
on the <comp>Description</comp> component:
</p>

<schema xmlns="http://www.w3.org/2004/zml" name="DescriptionCM">
	DescriptionTypeDefs <nl/>
	DescriptionKey
<where/>
	descriptionComp.interfaces = interfaceIds <nl/>
	descriptionComp.bindings = bindingIds <nl/>
	descriptionComp.services = serviceIds <nl/>
	descriptionComp.elementDeclarations = elementDeclIds <nl/>
	descriptionComp.typeDefinitions = typeDefIds
</schema>

<z:see names="DescriptionTypeDefs DescriptionKey"/>

<ulist xml:space="default">
<item xml:space="default"><p xml:space="default">The <comp>Description</comp> component contains exactly the set of <comp>Interface</comp> components contained in the component model.</p></item>
<item xml:space="default"><p xml:space="default">The <comp>Description</comp> component contains exactly the set of <comp>Binding</comp> components contained in the component model.</p></item>
<item xml:space="default"><p xml:space="default">The <comp>Description</comp> component contains exactly the set of <comp>Service</comp> components contained in the component model.</p></item>
<item xml:space="default"><p xml:space="default">The <comp>Description</comp> component contains exactly the set of <comp>Element Declaration</comp> components contained in the component model.</p></item>
<item xml:space="default"><p xml:space="default">The <comp>Description</comp> component contains exactly the set of <comp>Type Definition</comp> components contained in the component model.</p></item>
</ulist>
</z:notation>

       <p xml:space="default">
       	The set of top-level components contained in the
       	<comp>Description</comp>
       	component associated with an initial WSDL 2.0 document
       	consists of the components defined in the initial document,
       	plus the components associated with the WSDL 2.0 documents
       	that the initial document includes, plus the components defined
       	by other WSDL 2.0 documents in the namespaces that the initial
       	document imports.
       	The component model
       	makes no distinction between the components that are defined
       	in the initial document versus those that are defined in the
       	included documents or imported namespaces.
       		However, any WSDL 2.0 document that contains component
       		definitions that refer by QName to WSDL 2.0 components
       		that belong to a different namespace MUST contain a
       		<el xml:space="default">wsdl:import</el>
       		<emph xml:space="default">element information item</emph>
       		for that namespace (see
       		<specref ref="imports" xml:space="default"/>
       		).
       		Furthermore, all QName references, whether to the same or
       		to different namespaces must resolve to components (see
       		<specref ref="qnameres" xml:space="default"/>
       		).
       </p>

       <p xml:space="default">When using the XML Schema language to describe type system components,
       the inclusion of <comp>Element Declaration</comp> components and
       <comp>Type Definition</comp> components in a <comp>Description</comp>
       component is governed by the rules in <specref ref="xsd-types" xml:space="default"/>.</p>
       
       <p xml:space="default">In addition to WSDL 2.0 components and type system
       components, additional extension components MAY be added via
       extensibility <specref ref="language-extensibility" xml:space="default"/>. Further,
       additional properties to WSDL 2.0 and type system components MAY
       also be added via extensibility.</p>
    </div3>

   <div3 id="Description_XMLRep" xml:space="default">
      <head xml:space="default">XML Representation of Description Component</head>
<eg xml:space="preserve">
&lt;<b>description</b>
      targetNamespace="<emph xml:space="default">xs:anyURI</emph>" &gt;
  &lt;documentation /&gt;*
  [ &lt;import /&gt; | &lt;include /&gt; ]*
  &lt;types /&gt;?
  [ &lt;interface /&gt; | &lt;binding /&gt; | &lt;service /&gt; ]*
&lt;/<b>description</b>&gt;
</eg>
      <p xml:space="default">
	  WSDL 2.0 descriptions are represented in XML by one or more
	  WSDL 2.0 Information Sets (Infosets), that is one or more
	  <el xml:space="default">description</el> <emph xml:space="default">element information item</emph>s.  A WSDL 2.0 Infoset contains
	  representations for a collection of WSDL 2.0 components that
	  share a common target namespace and zero or more
	  <el xml:space="default">wsdl:import</el> <emph xml:space="default">element information item</emph>s <specref ref="imports" xml:space="default"/> that
	  correspond to a collection with components from multiple
	  target namespaces.
      </p>
 
       <p xml:space="default">The components directly defined or included within a <comp>Description</comp>
       component are said to belong to the same <emph xml:space="default">target
       namespace</emph>. The target namespace therefore groups a set
       of related component definitions and represents an unambiguous
       name for the intended semantics of the collection of components.
       <assert class="component" id="Description-1001" cr-id="Description-1201001" required="false">The value of the <att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph> SHOULD be dereferencable.</assert>
       <assert class="component" id="Description-1002" cr-id="Description-1201002" required="false">It SHOULD resolve to a human or machine
       processable document that directly or indirectly defines the
       intended semantics of those components.</assert>
       <assert class="component" id="Description-1003" cr-id="Description-1201003" required="false">It MAY resolve to a WSDL 2.0 document that provides
       service description information for that namespace.</assert></p>

         <p xml:space="default"><assert class="document" id="Description-1004" cr-id="Description-1201004" required="true">If a WSDL 2.0 document is split into multiple WSDL 2.0 documents
         (which may be combined as needed via <specref ref="includes" xml:space="default"/>), then the <att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph>
         SHOULD resolve to a master WSDL 2.0 document that includes all the
         WSDL 2.0 documents needed for that service description.</assert> This
         approach enables the WSDL 2.0 component designator fragment
         identifiers to be properly resolved.</p>

         <p xml:space="default">
         	Components that belong to imported namespaces have
         	different target namespace values than that of the
         	importing WSDL 2.0 document. Thus importing is the
         	mechanism to use components from one namespace in the
         	definition of components from another namespace.
         </p>

         <p xml:space="default">
         	Note that each WSDL 2.0 document or type system component of the
         	same kind must be uniquely identified by its qualified
         	name. That is, if two distinct components of the same kind
         	(<comp>Interface</comp>,
         	<comp>Binding</comp>, etc.) are in the same target namespace, then their QNames
         	MUST be unique. However, different kinds of components
         	(e.g., an
         	<comp>Interface</comp>
         	component and a
         	<comp>Binding</comp>
         	component) MAY have the same QName. Thus, QNames of
         	components must be unique within the space of those
         	components in a given target namespace.
         </p>

         <p xml:space="default">The <el xml:space="default">description</el> <emph xml:space="default">element information item</emph> has the following Infoset properties:</p>
	  <ulist xml:space="default">
	    <item xml:space="default"><p xml:space="default">A [local name] of <el xml:space="default">description</el>.</p></item>
		<item xml:space="default"><p xml:space="default">A [namespace name] of
		<attval xml:space="default">http://www.w3.org/ns/wsdl</attval>.</p></item>
		<item xml:space="default">
		  <p xml:space="default">
		  One or more <emph xml:space="default">attribute information item</emph>s amongst its [attributes] as follows:
		  </p>
		  <ulist xml:space="default">
		    <item xml:space="default">
		      <p xml:space="default">
			  A REQUIRED <att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph>
			  as described below in <specref ref="Description_targetnamespace_attribute" xml:space="default"/>.
			  </p>
		    </item>
			<item xml:space="default">
			  <p xml:space="default">
			  Zero or more namespace qualified <emph xml:space="default">attribute information item</emph>s whose [namespace
			  name] is NOT
			  <attval xml:space="default">http://www.w3.org/ns/wsdl</attval>.
			  </p>
			</item>
		  </ulist>
		</item>
		<item xml:space="default">
		  <p xml:space="default">
		  <assert class="document" id="Description-1005" cr-id="Description-1201005" required="true">Zero or more <emph xml:space="default">element information item</emph>s amongst its [children], in order as
		  follows:</assert>
		  </p> 
		  <olist xml:space="default">
		    <item xml:space="default">
			  <p xml:space="default">
			  Zero or more <el xml:space="default">documentation</el> <emph xml:space="default">element information item</emph>s
			  (see <specref ref="eii-documentation" xml:space="default"/>).
			  </p>
			</item>
			<item xml:space="default">
			  <p xml:space="default">Zero or more <emph xml:space="default">element information item</emph>s from among the following, in any
			  order:
			  </p>
			  <ulist xml:space="default">
			    <item xml:space="default">
				  <p xml:space="default">
				  Zero or more <el xml:space="default">include</el> <emph xml:space="default">element information item</emph>s (see <specref ref="includes" xml:space="default"/>)
				  </p>
				</item>
			    <item xml:space="default">
				  <p xml:space="default">
				  Zero or more <el xml:space="default">import</el> <emph xml:space="default">element information item</emph>s (see <specref ref="imports" xml:space="default"/>)
				  </p>
				</item>
                <item xml:space="default">
                  <p xml:space="default">
Zero or more namespace-qualified <emph xml:space="default">element information item</emph>s whose
[namespace name] is NOT
<attval xml:space="default">http://www.w3.org/ns/wsdl</attval>.
                  </p>
                </item>
			  </ulist>
			</item>
			<item xml:space="default">
			  <p xml:space="default">
			  An OPTIONAL <el xml:space="default">types</el> <emph xml:space="default">element information item</emph> (see <specref ref="eii-types" xml:space="default"/>).
			  </p>
			</item>
			<item xml:space="default">
			  <p xml:space="default">
			  Zero or more <emph xml:space="default">element information item</emph>s from among the following, in any
			  order:
			  </p>
			  <ulist xml:space="default">
			    <item xml:space="default">
			      <p xml:space="default">
			      <el xml:space="default">interface</el> <emph xml:space="default">element information item</emph>s (see <specref ref="Interface_XMLRep" xml:space="default"/>).
			      </p>
			    </item>
			    <item xml:space="default">
			      <p xml:space="default">
			      <el xml:space="default">binding</el> <emph xml:space="default">element information item</emph>s (see <specref ref="Binding_XMLRep" xml:space="default"/>).
			      </p>
			    </item>
			    <item xml:space="default">
			      <p xml:space="default">
			      <el xml:space="default">service</el> <emph xml:space="default">element information item</emph>s (see <specref ref="Service_XMLRep" xml:space="default"/>).
			      </p>
			    </item>
                <item xml:space="default">
                  <p xml:space="default">
Zero or more namespace-qualified <emph xml:space="default">element information item</emph>s whose
[namespace name] is NOT
<attval xml:space="default">http://www.w3.org/ns/wsdl</attval>.
                  </p>
                </item>
	          </ulist>
		    </item>
          </olist>
        </item>
      </ulist>

      <div4 id="Description_targetnamespace_attribute" xml:space="default">
        <head xml:space="default"><att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph></head>
		<p xml:space="default">The <att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph> defines the namespace affiliation
	    of top-level components defined in this
		<el xml:space="default">description</el> <emph xml:space="default">element information item</emph>. <comp>Interface</comp>,
		<comp>Binding</comp> and <comp>Service</comp> are top-level components. 
		</p>
	    <p xml:space="default">
		The <att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph> has the following
		Infoset properties:
		</p>
		<ulist xml:space="default">
		  <item xml:space="default"><p xml:space="default">A [local name] of
		  <att xml:space="default">targetNamespace</att></p></item>
		  <item xml:space="default"><p xml:space="default">A [namespace name] which has no value</p></item>
		</ulist>
		<p xml:space="default">
		The type of the <att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph> is
		<emph xml:space="default">xs:anyURI</emph>. 
		<assert class="document" id="Description-1006" cr-id="Description-0025" required="true">Its value 
        MUST be an absolute IRI (see <bibref ref="RFC3987" xml:space="default"/>)
        and should be dereferencable.</assert>
		</p>

      </div4>
    </div3>

    <div3 id="Description_Mapping" xml:space="default">
      <head xml:space="default">Mapping Description's XML Representation to Component
      Properties</head>
	  <p xml:space="default">
	  The mapping from the XML Representation of the <el xml:space="default">description</el> <emph xml:space="default">element information item</emph>
          (see <specref ref="Description_XMLRep" xml:space="default"/>) to the properties of the <comp>Description</comp> component
		 is described
	  in <specref ref="tab_Description_Mapping" xml:space="default"/>.
	  </p>
	  <table border="1" id="tab_Description_Mapping" xml:space="default">
	    <caption xml:space="default">Mapping from XML Representation to Description Component Properties</caption>
		<col width="20%" xml:space="default" span="1"/>
  		<col width="80%" xml:space="default" span="1"/>
	    <tbody xml:space="default">
		  <tr xml:space="default">
		    <th xml:space="default" rowspan="1" colspan="1">Property</th>
		    <th xml:space="default" rowspan="1" colspan="1">Value</th>
		  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Description">interfaces</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Interface</comp> components corresponding to all
			the <el xml:space="default">interface</el> <emph xml:space="default">element information item</emph>s in the
			[children] of the <el xml:space="default">description</el> <emph xml:space="default">element information item</emph>,
			if any, plus any included (via <el xml:space="default">wsdl:include</el>) or imported (via <el xml:space="default">wsdl:import</el>)
			<comp>Interface</comp> components (see <specref ref="modularize" xml:space="default"/>).
			</td>
		  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Description">bindings</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Binding</comp> components corresponding to all
			the <el xml:space="default">binding</el> <emph xml:space="default">element information item</emph>s in the [children]
			of the <el xml:space="default">description</el> <emph xml:space="default">element information item</emph>, if any,
			plus any included (via <el xml:space="default">wsdl:include</el>) or imported (via <el xml:space="default">wsdl:import</el>) <comp>Binding</comp>
			components (see <specref ref="modularize" xml:space="default"/>).
			</td>
                  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Description">services</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Service</comp> components corresponding to all
			the <el xml:space="default">service</el> <emph xml:space="default">element information item</emph>s in the [children]
			of the <el xml:space="default">description</el> <emph xml:space="default">element information item</emph>, if any,
			plus any included (via <el xml:space="default">wsdl:include</el>) or imported (via <el xml:space="default">wsdl:import</el>) <comp>Service</comp>
			components (see <specref ref="modularize" xml:space="default"/>).
		    </td>
		  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Description">element declarations</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Element Declaration</comp> components
			corresponding to all the element declarations
			defined as descendants of the <el xml:space="default">types</el>
			<emph xml:space="default">element information item</emph>, if any, plus any included (via <el xml:space="default">xs:include</el>) or imported (via <el xml:space="default">xs:import</el>) <comp>Element
			Declaration</comp> components. At a minimum this will include
			all the global element declarations defined by
			XML Schema <el xml:space="default">element</el> <emph xml:space="default">element information item</emph>s. It MAY
			also include any declarations from some other
			type system which describes the [local name],
			[namespace name], [attributes] and [children]
			properties of an <emph xml:space="default">element information item</emph>.
			<assert class="component" id="Types-1007" cr-id="Types-1201006" required="true">Each XML Schema element declaration MUST have a unique QName.</assert>
		    </td>
		  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Description">type definitions</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Type Definition</comp> components
			corresponding to all the type definitions
			defined as descendants of the <el xml:space="default">types</el>
			<emph xml:space="default">element information item</emph>, if any, plus any included (via <el xml:space="default">xs:include</el>) or imported (via <el xml:space="default">xs:import</el>) <comp>Type
			Definition</comp> components.
			
			<!-- starting a new paragraph if it had been allowed would have been good -->
			
			In addition, the built-in datatypes defined by
    		XML Schema Part 2: Datatypes Second Edition
    		<bibref ref="XMLSchemaP2" xml:space="default"/>, namely the nineteen primitive datatypes
    		<el xml:space="default">xs:string</el>, <el xml:space="default">xs:boolean</el>, <el xml:space="default">xs:decimal</el>, <el xml:space="default">xs:float</el>, <el xml:space="default">xs:double</el>, <el xml:space="default">xs:duration</el>,
    		<el xml:space="default">xs:dateTime</el>, <el xml:space="default">xs:time</el>, <el xml:space="default">xs:date</el>, <el xml:space="default">xs:gYearMonth</el>, <el xml:space="default">xs:gYear</el>, <el xml:space="default">xs:gMonthDay</el>, <el xml:space="default">xs:gDay</el>,
    		<el xml:space="default">xs:gMonth</el>, <el xml:space="default">xs:hexBinary</el>, <el xml:space="default">xs:base64Binary</el>, <el xml:space="default">xs:anyURI</el>, <el xml:space="default">xs:QName</el>, <el xml:space="default">xs:NOTATION</el>,
    		and the twenty-five derived datatypes
    		<el xml:space="default">xs:normalizedString</el>, <el xml:space="default">xs:token</el>, <el xml:space="default">xs:language</el>, <el xml:space="default">xs:NMTOKEN</el>, <el xml:space="default">xs:NMTOKENS</el>, <el xml:space="default">xs:Name</el>,
    		<el xml:space="default">xs:NCName</el>, <el xml:space="default">xs:ID</el>, <el xml:space="default">xs:IDREF</el>, <el xml:space="default">xs:IDREFS</el>, <el xml:space="default">xs:ENTITY</el>, <el xml:space="default">xs:ENTITIES</el>, <el xml:space="default">xs:integer</el>,
    		<el xml:space="default">xs:nonPositiveInteger</el>, <el xml:space="default">xs:negativeInteger</el>, <el xml:space="default">xs:long</el>, <el xml:space="default">xs:int</el>, <el xml:space="default">xs:short</el>, <el xml:space="default">xs:byte</el>,
    		<el xml:space="default">xs:nonNegativeInteger</el>, <el xml:space="default">xs:unsignedLong</el>, <el xml:space="default">xs:unsignedInt</el>,
    		<el xml:space="default">xs:unsignedShort</el>, <el xml:space="default">xs:unsignedByte</el>, <el xml:space="default">xs:positiveInteger</el>.
    		
    		The set MAY also include any definitions from some
			other type system which describes the [attributes]
			and [children] properties of an <emph xml:space="default">element information item</emph>.
			
			<assert class="component" id="Types-1008" cr-id="Types-0026" required="true">Each XML Schema type definition MUST have a unique QName.</assert>
		    </td>
		  </tr>
		</tbody>
	  </table>
    </div3>
  </div2>

  <div2 id="Interface" xml:space="default">
    <head xml:space="default">Interface</head>

    <div3 id="Interface_details" xml:space="default">
      <head xml:space="default">The Interface Component</head>
      
        <p xml:space="default"> An <comp>Interface</comp> component describes sequences of messages
        that a service sends and/or receives. It does this by grouping
        related messages into operations. An operation is a sequence
        of input and output messages, and an interface is a set of
        operations.</p>

        <p xml:space="default">
        An interface can optionally extend one or more other interfaces.
        <assert class="component" id="Interface-1009" cr-id="Interface-0027" required="true">
        	To avoid circular definitions, an interface MUST NOT appear
        	in the set of interfaces it extends, either
        	directly or indirectly.
        </assert>
        The set of operations available in an interface includes all the
        operations defined by the interfaces it extends directly or indirectly,
        together with any operations it directly defines.
        The operations directly defined
        on an interface are referred to as the
        <emph xml:space="default">declared</emph> operations of the interface.
	In the process, operation components that are
	equivalent per <specref ref="compequiv" xml:space="default"/> are treated as one single component.
	The interface extension mechanism behaves in a similar
	way for all other components that can be defined inside
	an interface, namely <comp>Interface Fault</comp>
	components.</p>
	
        <p xml:space="default"> Interfaces are named constructs and can be referred to by
        QName (see <specref ref="qnameres" xml:space="default"/>). For instance, <comp>Binding</comp>
        components refer to interfaces in this way.  </p>

        <p xml:space="default">The properties of the <compdef>Interface</compdef> component are as
        follows:</p>

	  <ulist xml:space="default">
	    <item xml:space="default"><p xml:space="default"><propdef comp="Interface">name</propdef> REQUIRED. An <emph xml:space="default">xs:QName</emph>.</p></item>

        <item xml:space="default"><p xml:space="default"><propdef comp="Interface">extended interfaces</propdef> OPTIONAL. A set of declared <comp>Interface</comp>
        components which this interface extends.</p> </item>

  	    <item xml:space="default"><p xml:space="default"><propdef comp="Interface">interface faults</propdef> OPTIONAL. The set of declared <comp>Interface Fault</comp>
  	    components. 
  	    Note that the namespace name of the <prop comp="Interface Fault">name</prop> property of each <comp>Interface Fault</comp>
  	    in this set is the same as the namespace name of the <prop comp="Interface">name</prop> property of this
  	    <comp>Interface</comp> component.
  	    </p></item>

  	    <item xml:space="default"><p xml:space="default"><propdef comp="Interface">interface operations</propdef> OPTIONAL. A set of declared <comp>Interface Operation</comp>
  	    components.
  	    Note that the namespace name of the <prop comp="Interface Operation">name</prop> property of each <comp>Interface Operation</comp>
  	    in this set is the same as the namespace name of the <prop comp="Interface">name</prop> property of this
  	    <comp>Interface</comp> component.
  	    </p></item>

	  </ulist>
	  
		<z:notation name="Interface">	
		<p xml:space="default">Let <z:i>Interface</z:i> be the set of all <comp>Interface</comp> components:</p>
		<ulist xml:space="default">
		<item xml:space="default"><p xml:space="default">Let <z:i>allExtendedInterfaces</z:i> be the set off all interfaces that are extended directly or indirectly by this interface.</p></item>
		<item xml:space="default"><p xml:space="default">Let <z:i>allInterfaceFaults</z:i> be the set of all faults that are directly or indirectly on this interface.</p></item>
		<item xml:space="default"><p xml:space="default">Let <z:i>allInterfaceOperations</z:i> be the set of all operations that are directly or indirectly on this interface.</p></item>
		</ulist>
		
		<schema xmlns="http://www.w3.org/2004/zml" name="Interface">
			Base <nl/>
			name : QName <nl/>
			extendedInterfaces : <power/> ID <nl/>
			interfaceFaults : <power/> ID <nl/>
			interfaceOperations : <power/> ID
		<also/>
			allExtendedInterfaces : <power/> ID <nl/>
			allInterfaceFaults : <power/> ID <nl/>
			allInterfaceOperations : <power/> ID
		<where/>
			extendedInterfaces <subseteq/> allExtendedInterfaces <nl/>
			interfaceFaults <subseteq/> allInterfaceFaults <nl/>
			interfaceOperations <subseteq/> allInterfaceOperations
		</schema>
		
		<z:see names="Base QName ID"/>
		
		</z:notation>

	  <z:notation name="InterfaceRI">
	  
	  <p xml:space="default">
	  Each component referenced by an <comp>Interface</comp> component must exist in the component model.
	  </p>
	  <p xml:space="default">
	  Let <z:i>InterfaceRI</z:i> express the referential integrity constraints on the <comp>Interface</comp> component:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceRI">
	  	ComponentModel2
	  	<where/>
	  	<forall/> Interface | <theta/>Interface <in/> interfaceComps @ <nl/>
	  	<t1/>	BaseValid <land/> <nl/>
	  	<t1/>	extendedInterfaces <subset/> interfaceIds <land/> <nl/>
	  	<t1/>	interfaceFaults <subseteq/> interfaceFaultIds <land/> <nl/>
	  	<t1/>	interfaceOperations <subseteq/> interfaceOpIds
	  </schema>
	  
	  <z:see names="ComponentModel2 Interface BaseValid"/>
	  
	  <p xml:space="default">
	  This Z schema introduces some additional notation.
	  The universal quantifier <z:math xmlns="http://www.w3.org/2004/zml"><forall/>Interface</z:math> declares each field that is part of the <z:i>Interface</z:i>
	  schema as an in-scope variable and constrains them to satisfy the rules for <z:i>Interface</z:i>.
	  The expression <z:math xmlns="http://www.w3.org/2004/zml"><theta/>Interface</z:math> assembles these variables into <z:i>Interface</z:i> record
	  or struct.
	  The expression <z:math xmlns="http://www.w3.org/2004/zml"><theta/>Interface <in/> interfaceComps</z:math> constrains the <z:i>Interface</z:i> record
	  to exist in the component model.
	  </p>
	  
	  <ulist xml:space="default">
	  <item xml:space="default"><p xml:space="default">Every <comp>Interface</comp> component satisfies the base validity constraints.</p></item>
	  <item xml:space="default"><p xml:space="default">The <comp>Interface</comp> components extended by each <comp>Interface</comp> component are contained in the component model.</p></item>
	  <item xml:space="default"><p xml:space="default">The <comp>Interface Fault</comp> components of each <comp>Interface</comp> component are contained in the component model.</p></item>
	  <item xml:space="default"><p xml:space="default">The <comp>Interface Operation</comp> components of each <comp>Interface</comp> component are contained in the component model.</p></item>
	  </ulist>
	  
	  </z:notation>
	  
	  <p xml:space="default"><assert class="component" id="Interface-1010" cr-id="Interface-0030" required="true">For each <comp>Interface</comp> component in the <prop comp="Description">interfaces</prop>
	  property of a <comp>Description</comp> component, the <prop comp="Interface">name</prop> property MUST be unique.</assert>
	  </p>
	  
       <z:notation name="InterfaceKey">
			<p xml:space="default">
			       Let <z:i>InterfaceKey</z:i> express the
			       QName uniqueness constraint on the <comp>Interface</comp> component:
			</p>
			
			<schema xmlns="http://www.w3.org/2004/zml" name="InterfaceKey">
				ComponentModel2
			<where/>
				<forall/> x, y : interfaceComps | <nl/>
				<t1/>	x.name = y.name @ x = y
			</schema>
			
			<z:see names="ComponentModel2"/>
			
			<ulist xml:space="default">
			<item xml:space="default"><p xml:space="default">No two <comp>Interface</comp> components have the same <prop comp="Interface">name</prop> property.</p></item>
			</ulist>
		</z:notation>

	  <z:notation name="InterfaceParent">
	  
	  <p xml:space="default">An <comp>Interface</comp> component contains nested <comp>Interface Operation</comp> and <comp>Interface Fault</comp> components.
	  These components MUST have the <comp>Interface</comp> component as their parent.</p>
	  
	  <p xml:space="default">
	  	Let
	  	<z:i>InterfaceParent</z:i>
	  	express the constraints on the
	  	<prop comp="">parent</prop>
	  	properties of the nested components of an
	  	<comp>Interface</comp>
	  	component:
	  </p>

	  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceParent">
	  	ComponentModel2
	  <where/>
	  	<forall/> i : interfaceComps; <nl/>
	  	<t1/>	if : interfaceFaultComps; <nl/>
	  	<t1/>	io : interfaceOpComps @ <nl/>
	  	<t1/>	if.id <in/> i.interfaceFaults <iff/> if.parent = i.id <land/> <nl/>
	  	<t1/>	io.id <in/> i.interfaceOperations <iff/> io.parent = i.id
	  </schema>
	  
	  <z:see names="ComponentModel2"/>
	  
	  <ulist xml:space="default">
	  	<item xml:space="default">
	  		<p xml:space="default">
	  			The set of <comp>Interface Fault</comp> components contained by an
	  			<comp>Interface</comp> component is exactly the set of <comp>Interface
	  			Fault</comp> components that have that <comp>Interface</comp> component as
	  			their parent.
	  		</p>
	  	</item>
	  	<item xml:space="default">
	  		<p xml:space="default">
	  			The set of <comp>Interface Operation</comp> components contained by an
	  			<comp>Interface</comp> component is exactly the set of <comp>Interface
	  			Operation</comp> components that have that <comp>Interface</comp> component as
	  			their parent.
	  		</p>
	  	</item>
	  </ulist>

	  </z:notation>
	  
	  <z:notation name="InterfaceAllExtendedInterfaces">

	  <p xml:space="default">
	  The set of all extended interfaces that are available on an <comp>Interface</comp> component consist of those
	  that are declared on the component and those that are available on its extended interfaces.
	  </p>
	  
	  <p xml:space="default">
	  Let <z:i>InterfaceAllExtendedInterfaces</z:i> express this definition:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceAllExtendedInterfaces">
	  	ComponentModel2 <nl/>
	  <where/>
	  	<forall/> i : interfaceComps @ <nl/>
	  	<t1/>	i.allExtendedInterfaces = i.extendedInterfaces <cup/> <nl/>
	  	<t2/>		{~x : interfaceComps; y : ID | <nl/>
	  	<t3/>			x.id <in/> i.extendedInterfaces <land/> <nl/>
	  	<t3/>			y <in/> x.allExtendedInterfaces @ y~}
	  </schema>
	  
	  <z:see names="ComponentModel2"/>
	  
	  <ulist xml:space="default">
	  	<item xml:space="default">
	  		<p xml:space="default">
	  			An <comp>Interface</comp> component directly or indirectly extends an
	  			<comp>Interface</comp> component if it directly extends it, or if
	  			an <comp>Interface</comp> component that it directly extends,
	  			directly or indirectly extends it.
	  		</p>
	  	</item>
	  </ulist>
	  
	  </z:notation>
	  
	  <z:notation name="InterfaceExtendsAcyclic">
	  
	  	<p xml:space="default">An <comp>Interface</comp> component MUST NOT directly or indirectly extend itself.</p>
	  	
	  	<p xml:space="default">Let <z:i>InterfaceExtendsAcyclic</z:i> express this constraint:</p>
	  	
	  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceExtendsAcyclic">
	  	ComponentModel2
	  <where/>
	  	<forall/> i : interfaceComps @ <nl/>
	  	<t1/>	i.id <notin/> i.allExtendedInterfaces
	  </schema>
	  
	  <z:see names="ComponentModel2"/>
	  	
	  </z:notation>
	  
	  <z:notation name="InterfaceAllInterfaceOperations">	  

	  <p xml:space="default">
	  	The set of all <comp>Interface Operation</comp> components that are available on an
	  	<comp>Interface</comp> component consist of those that are contained by the
	  	<comp>Interface</comp> component and those that are available on <comp>Interface</comp> components
	  	that it directly or indirectly extends.
	  </p>

	  <p xml:space="default">
	  Let <z:i>InterfaceAllInterfaceOperations</z:i> express this definition:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceAllInterfaceOperations">
	  	ComponentModel2 <nl/>
	  <where/>
	  	<forall/> i : interfaceComps @ <nl/>
	  	<t1/>	i.allInterfaceOperations = i.interfaceOperations <cup/> <nl/>
	  	<t2/>		{~x : interfaceComps; y : ID | <nl/>
	  	<t3/>			x.id <in/> i.allExtendedInterfaces <land/> <nl/>
	  	<t3/>			y <in/> x.interfaceOperations @ y~}
	  </schema>
	  
	  <z:see names="ComponentModel2"/>
	  
	  <ulist xml:space="default">
	  	<item xml:space="default">
	  		<p xml:space="default">
	  			An <comp>Interface Operation</comp> component is available on an <comp>Interface</comp>
	  			component if it is contained by the <comp>Interface</comp>
	  			component or it is available on an <comp>Interface</comp>
	  			component that this <comp>Interface</comp> component directly or
	  			indirectly extends.
	  		</p>
	  	</item>
	  </ulist>
	  
	  </z:notation>
	  	  
	  <z:notation name="InterfaceAllInterfaceFaults">	  

	  <p xml:space="default">
	  	The set of all <comp>Interface Operation</comp> components that are available on an
	  	<comp>Interface</comp> component consist of those that are contained by the
	  	<comp>Interface</comp> component and those that are available on <comp>Interface</comp> components
	  	that it directly or indirectly extends.
	  </p>

	  <p xml:space="default">
	  Let <z:i>InterfaceAllInterfaceFaults</z:i> express this definition:
	  </p>
	  
	  <schema xmlns="http://www.w3.org/2004/zml" name="InterfaceAllInterfaceFaults">
	  	ComponentModel2 <nl/>
	  <where/>
	  	<forall/> i : interfaceComps @ <nl/>
	  	<t1/>	i.allInterfaceFaults = i.interfaceFaults <cup/> <nl/>
	  	<t2/>		{~x : interfaceComps; y : ID | <nl/>
	  	<t3/>			x.id <in/> i.allExtendedInterfaces <land/> <nl/>
	  	<t3/>			y <in/> x.interfaceFaults @ y~}
	  </schema>
	  
	  <z:see names="ComponentModel2"/>
	  
	  <ulist xml:space="default">
	  	<item xml:space="default">
	  		<p xml:space="default">
	  			An <comp>Interface Fault</comp> component is available on an <comp>Interface</comp>
	  			component if it is contained by the <comp>Interface</comp>
	  			component or it is available on an <comp>Interface</comp>
	  			component that this <comp>Interface</comp> component directly or
	  			indirectly extends.
	  		</p>
	  	</item>
	  </ulist>
	  
	  </z:notation>
	  
	  <z:notation name="InterfaceCM">
	  
	  	<p xml:space="default">
	  		Let
	  		<z:i>InterfaceCM</z:i>
	  		be the conjunction of all the component model constraints
	  		on <comp>Interface</comp> components.
	  	</p>

	  	<zed xmlns="http://www.w3.org/2004/zml">
			InterfaceCM <defs/> <nl/>
			<t1/>	InterfaceRI <land/> <nl/>
			<t1/>	InterfaceKey <land/> <nl/>
			<t1/>	InterfaceParent <land/> <nl/>
			<t1/>	InterfaceAllExtendedInterfaces <land/> <nl/>
			<t1/>	InterfaceExtendsAcyclic <land/> <nl/>
			<t1/>	InterfaceAllInterfaceOperations <land/> <nl/>
			<t1/>	InterfaceAllInterfaceFaults
	  	</zed>
	  	
	  	<z:see names="InterfaceRI InterfaceKey InterfaceParent InterfaceAllExtendedInterfaces      InterfaceExtendsAcyclic InterfaceAllInterfaceOperations InterfaceAllInterfaceFaults"/>
	  		
	  </z:notation>

    </div3>

    <div3 id="Interface_XMLRep" xml:space="default">
      <head xml:space="default">XML Representation of Interface Component</head>

<eg xml:space="preserve">&lt;description&gt;
  &lt;<b>interface</b>
        name="<emph xml:space="default">xs:NCName</emph>" 
        extends="<emph xml:space="default">list of xs:QName</emph>"?
        styleDefault="<emph xml:space="default">list of xs:anyURI</emph>"? &gt;
    &lt;documentation /&gt;*
    [ &lt;fault /&gt; | &lt;operation /&gt; ]*
  &lt;/<b>interface</b>&gt;
&lt;/description&gt;
</eg>

      <p xml:space="default">
	  The XML representation for an <comp>Interface</comp> component is
	  an <emph xml:space="default">element information item</emph> with the following Infoset properties:
	  </p>
	  <ulist xml:space="default">
	    <item xml:space="default"><p xml:space="default">A [local name] of <el xml:space="default">interface</el></p></item>
	    <item xml:space="default"><p xml:space="default">A [namespace name] of <attval xml:space="default">http://www.w3.org/ns/wsdl</attval></p></item>
		<item xml:space="default"><p xml:space="default">One or more <emph xml:space="default">attribute information item</emph>s amongst its [attributes] as
		follows:</p>
		<ulist xml:space="default">
		<item xml:space="default">
		  <p xml:space="default">
		  A REQUIRED <att xml:space="default">name</att> <emph xml:space="default">attribute information item</emph> as described below
		  in <specref ref="Interface_name_attribute" xml:space="default"/>.
		  </p>
		</item>
		<item xml:space="default">
		  <p xml:space="default">
		  An OPTIONAL <att xml:space="default">extends</att> <emph xml:space="default">attribute information item</emph> 
		  as described below in <specref ref="Interface_extends_attribute" xml:space="default"/>.
		  </p>
		</item>
		<item xml:space="default">
		  <p xml:space="default">
		  An OPTIONAL <att xml:space="default">styleDefault</att> <emph xml:space="default">attribute information item</emph> as
		  described below in <specref ref="Interface_styleDefault_attribute" xml:space="default"/>.
		  </p>
		</item>
		<item xml:space="default">
		  <p xml:space="default">
		  Zero or more namespace qualified <emph xml:space="default">attribute information item</emph>s whose
		  [namespace name]
		  is NOT <attval xml:space="default">http://www.w3.org/ns/wsdl</attval>.
		  </p>
		</item>
		</ulist>
		</item>
		<item xml:space="default">
		  <p xml:space="default">Zero or more <emph xml:space="default">element information item</emph>s amongst its [children], in order, as
		  follows:</p>
		  <olist xml:space="default">
		    <item xml:space="default">
		      <p xml:space="default">
		      Zero or more <el xml:space="default">documentation</el> <emph xml:space="default">element information item</emph>s (see <specref ref="eii-documentation" xml:space="default"/>).
		      </p>
		    </item>
			<item xml:space="default"><p xml:space="default">Zero or more <emph xml:space="default">element information item</emph>s from among the following, in
			any order:</p>
			<ulist xml:space="default">
		    <item xml:space="default">
			  <p xml:space="default">
			  Zero or more <el xml:space="default">fault</el> <emph xml:space="default">element information item</emph>s <specref ref="InterfaceFault_XMLRep" xml:space="default"/>.
			  </p>
			</item>
		    <item xml:space="default">
			  <p xml:space="default">
			  Zero or more <el xml:space="default">operation</el> <emph xml:space="default">element information item</emph>s <specref ref="InterfaceOperation_XMLRep" xml:space="default"/>.
			  </p>
			</item>
            <item xml:space="default">
              <p xml:space="default">
Zero or more namespace-qualified <emph xml:space="default">element information item</emph>s whose
[namespace name] is NOT
<attval xml:space="default">http://www.w3.org/ns/wsdl</attval>.
              </p>
            </item>
			</ulist>
		  </item>
		  </olist>
        </item>
      </ulist>

      <div4 id="Interface_name_attribute" xml:space="default">
        <head xml:space="default"><att xml:space="default">name</att> <emph xml:space="default">attribute information item</emph> with <el xml:space="default">interface</el> [owner element]</head>
	    <p xml:space="default">
		The <att xml:space="default">name</att> <emph xml:space="default">attribute information item</emph> together with the
		<att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph> of the [parent] <el xml:space="default">description</el>
		<emph xml:space="default">element information item</emph> forms the QName of the interface.
		</p>
		<p xml:space="default">
		The <att xml:space="default">name</att> <emph xml:space="default">attribute information item</emph> has the following Infoset properties:
		</p>
		<ulist xml:space="default">
		  <item xml:space="default"><p xml:space="default">A [local name] of <att xml:space="default">name</att></p></item>
		  <item xml:space="default"><p xml:space="default">A [namespace name] which has no value</p></item>
		</ulist>
		<p xml:space="default">
		The type of the <att xml:space="default">name</att> <emph xml:space="default">attribute information item</emph> is <emph xml:space="default">xs:NCName</emph>.
		</p>
      </div4>

      <div4 id="Interface_extends_attribute" xml:space="default">
        <head xml:space="default"><att xml:space="default">extends</att> <emph xml:space="default">attribute information item</emph></head>
	    <p xml:space="default">
		The <att xml:space="default">extends</att> <emph xml:space="default">attribute information item</emph> lists the interfaces that this interface
		derives from.
		</p>
		<p xml:space="default">
		The <att xml:space="default">extends</att> <emph xml:space="default">attribute information item</emph> has the following Infoset properties:
		</p>
		<ulist xml:space="default">
		  <item xml:space="default"><p xml:space="default">A [local name] of <att xml:space="default">extends</att></p></item>
		  <item xml:space="default"><p xml:space="default">A [namespace name] which has no value</p></item>
		</ulist>
		<p xml:space="default">
		The type of the <att xml:space="default">extends</att> <emph xml:space="default">attribute information item</emph> is a whitespace-separated list of <emph xml:space="default">xs:QName</emph>.
		</p>
		<p xml:space="default">
		<assert class="component" id="Interface-1011" cr-id="Interface-0028" required="true">The list of <emph xml:space="default">xs:QName</emph> in an <att xml:space="default">extends</att> <emph xml:space="default">attribute information item</emph> MUST NOT contain duplicates.</assert>
		</p>
      </div4>

      <div4 id="Interface_styleDefault_attribute" xml:space="default">
        <head xml:space="default"><att xml:space="default">styleDefault</att> <emph xml:space="default">attribute information item</emph></head>
	    <p xml:space="default">
		The <att xml:space="default">styleDefault</att> <emph xml:space="default">attribute information item</emph> indicates the
		default style (see <specref ref="InterfaceOperationStyle" xml:space="default"/>) used to construct the
		<prop comp="Interface Message Reference">element declaration</prop> properties of 
		<prop comp="Interface Operation">interface message references</prop> of all
		operations contained within the [owner element]
		<el xml:space="default">interface</el>.
		</p>

		<p xml:space="default">
		The <att xml:space="default">styleDefault</att> <emph xml:space="default">attribute information item</emph> has the following
		Infoset properties:
		</p>
		<ulist xml:space="default">
		  <item xml:space="default"><p xml:space="default">A [local name] of
		  <att xml:space="default">styleDefault.</att></p></item>

		  <item xml:space="default"><p xml:space="default">A [namespace name] which has no
		  value.</p></item>
		</ulist>
		<p xml:space="default">
		The type of the <att xml:space="default">styleDefault</att> <emph xml:space="default">attribute information item</emph> is
		<emph xml:space="default">list of xs:anyURI</emph>. 
		<assert class="document" id="Interface-1012" cr-id="Interface-0031" required="true">Its value, if present, MUST contain
		absolute IRIs (see <bibref ref="RFC3987" xml:space="default"/>).</assert>
		</p>

      </div4>

    </div3>

    <div3 id="Interface_Mapping" xml:space="default">
	  <head xml:space="default">Mapping Interface's XML Representation to Component Properties</head>
	  <p xml:space="default">
	  The mapping from the XML Representation of
	  the <el xml:space="default">interface</el> <emph xml:space="default">element information item</emph> (see <specref ref="Interface_XMLRep" xml:space="default"/>)
	  to the properties of the <comp>Interface</comp> component is
	  as described in <specref ref="tab_Interface_Mapping" xml:space="default"/>.
	  </p>

	  <table border="1" id="tab_Interface_Mapping" xml:space="default">
	    <caption xml:space="default">Mapping from XML Representation to Interface Component Properties</caption>
		<col width="20%" xml:space="default" span="1"/>
  		<col width="80%" xml:space="default" span="1"/>
	    <tbody xml:space="default">
		  <tr xml:space="default">
		    <th xml:space="default" rowspan="1" colspan="1">Property</th>
		    <th xml:space="default" rowspan="1" colspan="1">Value</th>
		  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Interface">name</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">The QName whose local name is actual value of the <att xml:space="default">name</att> <emph xml:space="default">attribute information item</emph>
				and whose namespace name is the actual value of the	<att xml:space="default">targetNamespace</att> <emph xml:space="default">attribute information item</emph>
			of the [parent] <el xml:space="default">description</el>	<emph xml:space="default">element information item</emph>
			</td>
		  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Interface">extended interfaces</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Interface</comp> components resolved to
			by the values in the <att xml:space="default">extends</att> <emph xml:space="default">attribute information item</emph>,
			if any (see <specref ref="qnameres" xml:space="default"/>).
			</td>
		  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Interface">interface faults</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Interface Fault</comp> components
			corresponding to the <el xml:space="default">fault</el> <emph xml:space="default">element information item</emph>s in
			[children], if any.
			</td>
                  </tr>
		  <tr xml:space="default">
		    <td xml:space="default" rowspan="1" colspan="1"><prop comp="Interface">interface operations</prop></td>
			<td xml:space="default" rowspan="1" colspan="1">
			The set of <comp>Interface Operation</comp> components
			corresponding to the <el xml:space="default">operation</el> <emph xml:space="default">element information item</emph>s
			in [children], if any.
			</td>
                  </tr>
		</tbody>
	  </table>

	  <p xml:space="default">Recall that, per <specref ref="Interface_details" xml:space="default"/>, the
	  <comp>Interface</comp> components in the <prop comp="Interface">extended interfaces</prop> property
	  of a given <comp>Interface</comp> component MUST NOT contain that
	  <comp>Interface</comp> component in any of their <prop comp="Interface">extended interfaces</prop>
	  properties, that is to say, recursive extension of
	  interfaces is disallowed.  </p>

    </div3>
  </div2>

  <div2 id="InterfaceFault" xml:space="default">
    <head xml:space="default">Interface Fault</head>

    <div3 id="InterfaceFault_details" xml:space="default">
      <head xml:space="default">The Interface Fault Component</head> 
        
        <p xml:space="default">A fault is an event that occurs during the execution of a
        message exchange that disrupts the normal flow of
        messages.</p>
 
        <p xml:space="default">A fault is typically raised when a party is unable to
        communicate an error condition inside the normal message flow,
        or a party wishes to terminate a message exchange. A fault
        message may be used to communicate out of band information
        such as the reason for the error, the origin of the fault, as
        well as other informal diagnostics such as a program stack
        trace.</p>

        <p xml:space="default">An <comp>Interface Fault</comp> component describes a fault that MAY
        occur during invocation of an operation of the interface.  The
        <comp>Interface Fault</comp> component declares an abstract fault by naming
        it and indicating the contents of the fault message. When and
        how the fault message flows is indicated by the <comp>Interface
        Operation</comp> component.</p>

        <p xml:space="default">The <comp>Interface Fault</comp> component provides a clear mechanism to
        name and describe the set of faults an interface may
        generate. This allows operations to easily identify the
        individual faults 