OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

ebxml-transport message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Subject: Re: Extension mechanism proposal for 12/14 phone vote


All,

Actually, I had something close to this in mind,
but have been working with David on some related
changes which incorporates a namespace qualified
extension capability into the ebXMLHeader document.
I had hoped to get this out sooner, but threw my back out
Monday and lost a day. 

Specifically, I have (as has Robert) used XMLSchema
and added:

<xsd:anyAttribute namespace="##any"/> 

to the list of attributes permitted in the 
ebXMLHeader element. This will permit us
to add any attributes necessary as we go forward.

We could restrict the namespace to:
	 http://www.ebxml.org/namespaces/messageHeader
if we wanted to preclude any other namespaced attributes
from being added.

I have also added three new elements as children of
ebXMLHeader:

<xsd:element ref = "ApplicationHeaders" minOccurs = "0" maxOccurs="1"/>
<xsd:element ref = "Errors" minOccurs = "0" maxOccurs="1"/>
<xsd:element ref = "Acknowledgment" minOccurs = "0" maxOccurs="1"/>
<xsd:element ref = "ds:Signature" minOccurs = "0"/>

Specifically, the ApplicationHeaders element is intended
to contain any APPLICATION-SPECIFIC extension headers.
It permits 0 or more namespace qualified extension elements
as children. The intent is to REQUIRE an MSH implementation
to make these available to the "application" via the MSH's
abstract service interface layer.

The Errors element essentially relocates the Error "payload"
information into the header document. I'm convinced... uncle...
Ralph and David have beaten me into submission;-) I now
agree that all MSH specific stuff must go in the header document.
Note that we're still discussing the form of the Error
element (which I carved out for this email).

The Acknowledgment element has been added to enable implicit
acks. David and I are still polishing up that aspect of
our combined proposal.

Finally, the ds:Signature element(s) are appended to enable
XMLDSig signing of the header (and optionally the payload
tbd based on my proposal before the ta-security group).

I haven't an explicit container element for header
extensions as has been proposed by Robert. Rather,
I have added:

<xsd:any namespace="##any" processContents="lax" minOccurs="0"/>

to the Header element, providing a place for namespace qualified
extension elements in the ebXMLHeader/Header element.

I have also provided the same capability for the Manifest/Reference
element (note the name change. I anticipate a *possible* convergence
with XMLDSig Manifest).

Note that the attached schema is still not finalized. It
represents a point in time of an exchange between David
and I which in all fairness he hasn't had a chance to
fully review and comment. Thus, I have carved out some of
the bits which we haven't come to full agreement on as yet.

Finally, I have, in the current draft of the CPP/CPA DTD
added a repeating element to the DeliveryChannel (or is it
DocExchange?) element which enumerates, for purposes
of interoperability, the list of namespace extensions
supported (or agreed to).

I haven't expressly added a mustUnderstand attribute, but
do agree that something of its ilk is needed. I was thinking
that to avoid any possible conflict, that we would choose
a name such as 'requiredExtension="true"' or possibly simply
'required="true"' be made available for use by an
extension element.

To be honest, I'm not sure how to define a "floating"
attribute such as this which is untethered to an element.

I think it is clear that we need to have a formal mechanism
in place to ensure that ebXML can add stuff as it needs
going forward. In that vein, it *may* also be necessary 
to add a wildcard element as a child of ebXMLHeader,
probably BEFORE ds:Signature which permits elements of
our namespace to be added in furure versions. This is
not reflected in the xsd attached, but deserves some
discussion.

Comments? 

Cheers,

Chris
"Adams, Robert" wrote:
> 
> Here is a description, text and schema for (what I believe) is the header
> extension mechanism we discussed last week.  This is for the vote that is
> scheduled for this Thursday's phone call.  This adds an <extension> element
> to DocumentReference, Manifest and ebXMLHeader.  The contents of this
> element must be namespace qualified and it has a "mustUnderstand" attribute
> that has a default value of "true".
> 
> == Add section 7.7.2.3 (missing?)
> == Add section 7.7.2.4
> 7.7.2.4 Extension
> The Extension element is optional and may occur multiple times within the
> ebXMLHeader element. It contains extra information pertaining to the header
> or the document as a whole. Examples could be signature information on the
> Header or Manifest elements or extra routing or error information.
> The Extension element has an attribute "mustUnderstand" which can have the
> values "true" (or "1") and "false" (or "0"). A receiving agent who receives
> a message with an Extension element who's "mustUnderstand" attribute's value
> is "true", and the receiver does not know how to process the content, the
> receiver will return an error.  If the value of the "mustUnderstand" element
> is "false", then the receiver may skip over the contents of this element if
> the receiver does not know how to process the contents.
> If the "mustUnderstand" attribute is not present, the value is presumed to
> be "true".
> The elements in the body of the Extension element must be XML namespace [XML
> Namespace] qualified.
> == Modify section 7.8
> "consisting of zero or more DocumentReference elements." becomes "consisting
> of zero or more DocumentReference elements followed by zero or more
> extension elements".
> Append to paragraph: "The extension elements contain additional information
> that pertains to the whole manifest.  Refer to section 7.7.2.4 for a
> detailed description of the Extension element.
> == Add in section 7.8.1 (added "Extension" to send of list)
> == Add section 7.8.1.4
> 7.8.1.4 Extension
> The <strong>Extension</strong> element is optional and may occur multiple
> times within the DocumentReference  element.  It contains extra information
> pertaining to this particular document.  Examples could be signature or
> certificate information for the document or additional description or
> identification.  Refer to section 7.7.2.4 for a detailed explanation of the
> Extension element.
> 
> ===================DTD Fragments======================
> <!ELEMENT xbXMLHeader (Manifest, Header, RoutingHeader, Extension*)>
> ...
> <!ELEMENT Manifest (DocumentReference+, Extension*)>
> ...
> <!ELEMENT DocumentReference (DocumentDescription?, DocumentLabel,
> DocumentID, Extension*)>
> ...
> <!-- this DTD does not enforce all of the constraints for "Extension".  The
> content of the Extension
>       element must be XML namespace qualified.  The default processing of
> the content is "skip". -->
> <!ELEMENT Extension (ANY)*>
> <!ATTLIST Extension mustUnderstand CDATA #IMPLIED "true">
> ===================Schema Fragments===================
> <element name="ebXMLHeader">
>     <complextype content="elementOnly">
>         <sequence>
>             <element ref="Manifest"/>
>             <element ref="Header"/>
>             <element ref="RoutingHeader"/>
>             <element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
>         </sequence>
>     </complextype>
> </element
> ...
> <element name="Manifest">
>     <complexType>
>         <sequence>
>             <element ref="DocumentReference"
>                     minOccurs="0" maxOccurs="unbounded"/>
>             <element ref="Extension"
>                     minOccurs="0" maxOccurs="unbounded/>
>         </sequence>
>     </complexType>
> </element>
> ...
> <element name="DocumentReference">
>     <complexType>
>         <sequence>
>             <element ref="DocumentDescription"
>                 minOccurs="0" />
>             <element ref="DocumentLabel" />
>             <element ref="DocumentID" />
>             <element ref="Extension"
>                     minOccurs="0" maxOccurs="unbounded"/>
>         </sequence>
>     </complexType>
> </element>
> ...
> <!-- Elements contained in Extension must be namespace
>     qualified.  If the namespace is not understood and the mustUnderstand
>     attribute is set to true, then the contents of the
>     DocumentReference should not be used. -->
> <element name="Extension">
>     <complexType>
>         <sequence>
>             <any namespace="##other" processContents="skip" />
>         </sequence>
>         <attribute name="mustUnderstand" type="boolean"
>                 use="optional" value="true" />
>     </complexType>
> </element>
> =========================end of Fragments =========================
> 
>         Robert Adams
>         mailto:Robert.Adams@intel.com
>         MS JF3-212
>         2111 NE 25th Ave
>         Hillsboro, OR   97124    USA
>         phone: +1.503.264.9424; cell: +1.503.709.3259; FAX: +1.503.264.3375
<?xml version = "1.0" encoding = "UTF-8"?>
<!--Generated by XML Authority. Conforms to w3c http://www.w3.org/2000/10/XMLSchema-->
<xsd:schema xmlns = "http://www.ebxml.org/namespaces/messageHeader"
	 targetNamespace = "http://www.ebxml.org/namespaces/messageHeader"
	 xmlns:ds = "http://www.w3.org/2000/10/xmldsig#"
	 xmlns:xsd = "http://www.w3.org/2000/10/XMLSchema">
	<xsd:import namespace = "http://www.w3.org/2000/10/xmldsig#" schemaLocation = "file:///C:/My%20Documents/ebXML/xmldsig-v2.xsd"/>
	<xsd:element name = "ebXMLHeader">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "Manifest" minOccurs = "0"/>
				<xsd:element ref = "Header"/>
				<xsd:element ref = "RoutingHeaders"/>
				<xsd:element ref = "ApplicationHeaders" minOccurs = "0" maxOccurs="1"/>
				<xsd:element ref = "Errors" minOccurs = "0" maxOccurs="1"/>
				<xsd:element ref = "Acknowledgment" minOccurs = "0" maxOccurs="1"/>
				<xsd:element ref = "ds:Signature" minOccurs = "0"/>
			</xsd:sequence>
			<xsd:attribute name = "version" use = "fixed" value = "1.0" type = "xsd:string"/>
			<xsd:anyAttribute namespace="##any"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "Header">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "From"/>
				<xsd:element ref = "To"/>
				<xsd:element ref = "CPAId"/>
				<xsd:element ref = "ConversationId"/>
				<xsd:element ref = "Service"/>
				<xsd:element ref = "Action"/>
				<xsd:element ref = "MessageData"/>
				<xsd:element ref = "ReliableMessagingInfo" minOccurs = "0"/>
				<xsd:any namespace = "##any" processContents = "lax" minOccurs = "0" maxOccurs = "unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "Service" type = "xsd:string"/>
	<xsd:element name = "Action" type = "xsd:string"/>
	<xsd:element name = "CPAId" type = "xsd:uriReference"/>
	<xsd:element name = "ConversationId" type = "xsd:uriReference"/>
	<xsd:element name = "MessageData">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "MessageId"/>
				<xsd:element ref = "Timestamp"/>
				<xsd:element ref = "RefToMessageId" minOccurs = "0"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "RefToMessageId" type = "xsd:string"/>
	<xsd:element name = "Timestamp" type = "xsd:timeInstant"/>
	<xsd:element name = "MessageId" type = "xsd:string"/>
	<xsd:element name = "From">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base = "xsd:string">
					<xsd:attribute name = "context" type = "xsd:string"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "To">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base = "xsd:string">
					<xsd:attribute name = "context" type = "xsd:string"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "ReliableMessagingInfo">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base = "ReliableMessagingInfo">
					<xsd:attribute name = "deliverySemantics" use = "required">
						<xsd:simpleType>
							<xsd:restriction base = "xsd:NMTOKEN">
								<xsd:enumeration value = "OnceAndOnlyOnce"/>
								<xsd:enumeration value = "BestEffort"/>
							</xsd:restriction>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "RoutingHeader">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "SenderURI"/>
				<xsd:element ref = "ReceiverURI"/>
				<xsd:element ref = "ErrorURI" minOccurs = "0"/>
				<xsd:element ref = "Timestamp"/>
				<xsd:element ref = "SequenceNumber" minOccurs = "0"/>
				<xsd:any namespace = "##any" processContents = "lax" minOccurs = "0" maxOccurs = "unbounded"/>
			</xsd:sequence>
			<xsd:attribute name = "id" type = "xsd:ID"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "SenderURI" type = "xsd:uriReference"/>
	<xsd:element name = "ReceiverURI" type = "xsd:uriReference"/>
	<xsd:element name = "SequenceNumber" type = "xsd:positiveInteger"/>
	<xsd:element name = "ErrorURI" type = "xsd:string"/>
	<xsd:element name = "Schema">
		<xsd:complexType>
			<xsd:simpleContent>
				<xsd:extension base = "Schema">
					<xsd:attribute name = "location" use = "required" type = "xsd:string"/>
					<xsd:attribute name = "version" use = "required" type = "xsd:string"/>
				</xsd:extension>
			</xsd:simpleContent>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "RoutingHeaders">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "RoutingHeader" maxOccurs = "unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "ApplicationHeaders" type = "ApplicationHeaders"/>
	<xsd:element name = "Errors">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "Error" maxOccurs = "unbounded"/>
			</xsd:sequence>
			<xsd:attribute name = "highestSeverity" use = "default" value = "Warning">
				<xsd:simpleType>
					<xsd:restriction base = "xsd:string">
						<xsd:enumeration value = "Warning"/>
						<xsd:enumeration value = "Error"/>
						<xsd:enumeration value = "Fatal"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "Error">
		<xsd:complexType>
			<xsd:sequence/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "Acknowledgment">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "Timestamp"/>
				<xsd:element ref = "From" minOccurs = "0"/>
			</xsd:sequence>
			<xsd:attribute name = "type" use = "default" value = "DeliveryReceipt">
				<xsd:simpleType>
					<xsd:restriction base = "xsd:NMTOKEN">
						<xsd:enumeration value = "DeliveryReceipt"/>
						<xsd:enumeration value = "SignedDeliveryReceipt"/>
						<xsd:enumeration value = "IntermediateAck"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>
	<xsd:simpleType name = "ReliableMessagingInfo">
		<xsd:restriction base = "xsd:string"/>
	</xsd:simpleType>
	<xsd:simpleType name = "Schema">
		<xsd:restriction base = "xsd:string"/>
	</xsd:simpleType>
	<xsd:complexType name = "ApplicationHeaders">
		<xsd:sequence>
			<xsd:any namespace = "##any" processContents = "lax"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:element name = "Manifest">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "Reference" maxOccurs = "unbounded"/>
				<xsd:any namespace = "##any" processContents = "lax"/>
			</xsd:sequence>
			<xsd:attribute name = "id" use = "required" type = "xsd:ID"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name = "Reference">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref = "Schema" minOccurs = "0"/>
				<xsd:any namespace = "##any" processContents = "lax"/>
			</xsd:sequence>
			<xsd:attribute name = "xlink:href" use = "required" type = "xsd:uriReference"/>
			<xsd:attribute name = "xlink:label" type = "xsd:string"/>
			<xsd:attribute name = "xlink:role" use = "required" type = "xsd:uriReference"/>
			<xsd:attribute name = "id" type = "xsd:ID"/>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>
begin:vcard 
n:Ferris;Christopher
x-mozilla-html:FALSE
org:Sun Microsystems, Inc;XTC Advanced Development
adr:;;;;;;
version:2.1
email;internet:chris.ferris@east.sun.com
title:Sr. Staff Engineer
x-mozilla-cpt:;0
fn:Christopher Ferris
end:vcard


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]

Search: Match: Sort by:
Words: | Help


Powered by eList eXpress LLC