SMEX stands for Simple Message Exchange, and SMEX-D for SMEX Descriptor, an XML language designed to provide simple descriptions of a wide range of Web-Service message exchanges, both REST-based and SOAP-based.

A SMEX is a pair of messages sent between two systems referred to as the client and server. The first message, from client to server, is called the request; the second, from server to client, the response. A SMEX might represent a complete transaction in the RPC style, or one step in an extended conversation between client and server, or between multiple co-operating computers.

Amazon.com Example · Here is a SMEX-D instance describing an Amazon.com ItemSearch transaction.

A SMEX-D Instance · In this discussion, the acronym “NSX” stands for “Non-SOAP XML”, i.e. an XML document whose root element is not in the SOAP namespace. ¶

A SMEX request may take one of three forms:

  1. Name-value pairs.

  2. An NSX message.

  3. A SOAP message.

A SMEX response may take one of three forms:

  1. No reply, in which case the “exchange” is a one-way message transmission consisting only of the request.

  2. An NSX message.

  3. A SOAP message.

The namespace for SMEX-D is http://smex-d.net/ns/. All elements in a SMEX instance are in the SMEX-D namespace, and all attributes are in no namespace, unless otherwise specified.

A SMEX-D instance’s root element is <smex-d>. The <smex-d> element must have two child elements, <request> and <response>.

The <smex-d> element may have an update attribute whose value must be one of true or false. The default value of update is false.

update="false" asserts that this message exchange operation is “safe and idempotent” as the terms are defined in HTTP 1.1; true means that there is no assertion of safety or idempotence.

<smex-d> must have an href attribute, whose value must be a URI to which the SMEX request is to be sent.

The request Element · <request> must have a form attribute whose value must be one of pairs, soap, or nsx. ¶

The request message is transmitted from client to server via HTTP, using either the POST or GET verb. If the containing <smex-d> element has update="true", or the request form is nsx or soap, then the client must use the HTTP POST verb. otherwise, it should use GET.

The response Element · <response> must have a form attribute whose value must be one of soap, nsx, or none. The last value means that there is no response expected to the request. ¶

The response message is transmitted from the server to the client as an HTTP response to the request message.

Name-Value Pairs · <request> elements with form="pairs" have zero or more child <pair> elements. Each <pair> element must have a name attribute whose value must be a Name, in XML terms. <pair> may have a child <enum> element, which, if provided, contains one or more <v> elements containing the allowed values. ¶

If there is no <enum>, the values are constrained using the type attribute, whose value is a string identifying one of the 19 primitive datatypes from XML Schema section 3.2. The default value is string.

Here is an example of such a <request> element:

 <request form="pairs">
  <pair name="user" />
  <pair name="max-weight" type="decimal" />
  <pair name="rgb"><enum><v>R</v><v>G</v><v>B</v></enum></pair>
 </request>

A request in pairs form is to be transmitted from the client to the server using the usual URL-encoding techniques for GET and name-value pairs for POST.

The language Element · This element is used to describe the language used in an NSX message, or in a SOAP message’s header or body, by specifying either its namespace or one or more schemas, or both. <language> may have a namespace attribute, whose value must be an XML Namespace Name identifying the language used in the NSX message. ¶

It may also contain contain one or more <schema> elements, each identifying a schema that constrains the message.

A <schema> element must have a flavor attribute, whose value must be one or more of relaxng, xsd, or schematron. If omitted, the default value is relaxng.

<schema> may also have a root attribute, whose value must be a Name, in XML terms, giving the required root element.

<schema> must have an href attribute whose value is a URI for the schema.

<language> must have either a namespace attribute or at least one child <schema> element.

An example of <language>:

 <language namespace="http://example.com/ns/invoices">
  <schema root="simple-invoice" href="http://example.com/schemas/invoice" />
 </language>

Defining NSX Messages · <request> and <response> elements with form="nsx" specify that the request or response takes the form of an XML document whose root is not in the SOAP namespace. Such elements must contain a single <language> element which describes the language in the message. ¶

An example of an NSX <request> element:

 <request form="nsx">
  <language namespace="http://example.com/ns/invoices" />
 </request>

Defining SOAP Messages · <request> and <response> elements with form="soap" specify that the request or response is an XML document whose infoset is a SOAP 1.2 Message. Such an element must contain two children, <header> and <body>. Each of these children must contain one or more <language> elements which describe the elements that may appear as top-level children of the SOAP header and body. ¶

An example of a SOAP <response> element:

 <response form="soap">
  <header>
   <language namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing" />
   <language>
    <schema href="http://example.com/schemas/query" />
   </language>
  </header>
  <body>
   <language>
    <schema href="http://example.com/schemas/invoice" />
   </language>
  </body>
 </response>

author · Dad
colophon · rights
picture of the day
May 03, 2005
· Technology (90 fragments)
· · Web (398 fragments)
· · · Services (61 more)

By .

The opinions expressed here
are my own, and no other party
necessarily agrees with them.

A full disclosure of my
professional interests is
on the author page.

I’m on Mastodon!