[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]
Powered by eList eXpress LLC