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

 


Help: OASIS Mailing Lists Help | MarkMail Help

dsml message

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


Subject: requestIDs and other topics


In the interest of moving the discussion along and as committed to on last week's telecon, two schemas are attached that illustrate an approach to some of  the issues that have been raised concerning synchronous/asynchronous and the encoding of filters. As consensus warrants the baseline document can be augmented accordingly.

The first schema is DSMLv2.xsd. This is intended to specify the operations and responses (Search results needs to be broken out in a pretty obvious manner) as individual elements without regard for any means of packaging. In order to address the asynchronous use of these elements, we have introduced an optional "requestID" element of type "xsd:string". The intent is that an application of DSML v2 MAY associate a requestID assigned by the application with a given request and the implementation of DSML v2 will then include that requestID element in any and all responses associated with the request.

This requestID is NOT the LDAP messageID which may be assigned by an underlying LDAP implementation (SDK).

This requestID need only by unique within the context of  the implicit application session that exists by virtue of whatever security associations may have been established outside the current specification of DSML v2. The underlying implementation is required in any event to establish some means of associating the various requests with some security information and that association is sufficient to provide a scope for the uniqueness of the requestID.

The use of requests specified in the attached DSMLv2.xsd in an asynchronous or synchronous manner is an implementation matter determined by a specific DSML v2 implementation. I.e., whether an application MUST wait for a response to a request before issuing a subsequent request will depend on the specifics of the means by which the application is permitted to issue the request and receive the response by the underlying implementation.

The DSMLv2.xsd includes a start at the Filter but does not yet fully elaborate it with attribute value assertions and so forth.

The second schema is Batch.xsd which illustrates the definition of the DSMLRequestEnvelope and DSMLResponseEnvelope in terms of the DSMLv2.xsd and is largely in tact from the baseline proposal. However, the principle is illustrated by which a variety of different packaging approaches may be developed ontop of a common DSMLv2 base.

ciao,
Christine Tomlinson
Sun/iPlanet

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.dsml.org/DSML/v2/batch"
            xmlns:dsml="http://www.dsml.org/DSML/v2/base"
	    xmlns="http://www.dsml.org/DSML/v2/batch"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified">
<xsd:import namespace="http://www.dsml.org/DSML/v2/base" schemaLocation="DSMLv2.xsd"/>

<!--  *************** DSMLv2.0 Batch Envelopes ********************* -->

<xsd:element name="batchRequest" type="DSMLBatchRequestEnvelope"/>
<xsd:element name="batchResponse" type="DSMLBatchResponseEnvelope"/>

<!-- **** DSML Batch Request Envelope **** -->
<xsd:complexType name="DSMLBatchRequestEnvelope">
  <xsd:sequence>
    <xsd:group ref="dsml:DSMLRequest" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>

  <xsd:attribute name="processing" use="optional" default="sequential">
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="sequential"/>
        <xsd:enumeration value="parallel"/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attribute name="onError" use="optional" default="exit">
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="resume"/>
        <xsd:enumeration value="exit"/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:complexType>

<!-- **** DSML Batch Response Envelope **** -->
<xsd:complexType name="DSMLBatchResponseEnvelope">
  <xsd:sequence>
    <xsd:group ref="dsml:DSMLResponse" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>
</xsd:complexType>

</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns="http://www.dsml.org/DSML/v2/base"
 targetNamespace="http://www.dsml.org/DSML/v2/base"
 elementFormDefault="qualified">

<!-- DSML Requests -->
<xsd:group name="DSMLRequest">
    <xsd:choice>
      <xsd:element name="searchRequest" type="SearchRequest" />
      <xsd:element name="modifyRequest" type="ModifyRequest" />
      <xsd:element name="addRequest" type="AddRequest" />
      <xsd:element name="delRequest" type="DelRequest" />
      <xsd:element name="modDNRequest" type="ModifyDNRequest" />
      <xsd:element name="compareRequest" type="CompareRequest" />
      <xsd:element name="extendedReq" type="ExtendedRequest" />
    </xsd:choice>    
</xsd:group>

<!-- DSML Responses -->
<xsd:group name="DSMLResponse">
    <xsd:choice>
       <xsd:element name="searchResponse"  type="SearchResponse"/>
       <xsd:element name="modifyResponse" type="LDAPResult" />
       <xsd:element name="addResponse" type="LDAPResult" />
       <xsd:element name="delResponse" type="LDAPResult" />
       <xsd:element name="modDNResponse" type="LDAPResult" />
       <xsd:element name="compareResponse" type="LDAPResult" />
       <xsd:element name="extendedResp" type="ExtendedResponse" />
       <xsd:element name="errorResponse" type="xsd:string" />
    </xsd:choice>    
</xsd:group>



<!-- **** DSML Control **** --> 
<xsd:complexType name="Control">
  <xsd:sequence>
    <xsd:element name="controlType" minOccurs="1" maxOccurs="1" type="xsd:string" />
    <xsd:element name="criticality" minOccurs="0" default="false" type="xsd:boolean" />
    <xsd:element name="controlValue" minOccurs="0" maxOccurs="1" type="xsd:string" />
  </xsd:sequence>
</xsd:complexType>

<!-- **** DSML Filter **** --> 
<xsd:complexType name="Filter">
  <xsd:group minOccurs="0" maxOccurs="1" ref="FilterGroup"/>
</xsd:complexType>

<xsd:group name="FilterGroup">
  <xsd:sequence>
    <xsd:choice minOccurs="0" maxOccurs="unbounded" >
      <xsd:element name="and" type="FilterSet"/>
      <xsd:element name="or"  type="FilterSet"/>
      <xsd:element name="not"  type="Filter"/>
    </xsd:choice>    
  </xsd:sequence>
</xsd:group>

<xsd:complexType name="FilterSet">
  <xsd:sequence>
    <xsd:group minOccurs="0" maxOccurs="unbounded" ref="FilterGroup"/>
  </xsd:sequence>
</xsd:complexType>

<!-- ***** MAX Integer ***** -->
<xsd:simpleType name="MAXINT">
    <xsd:restriction base="xsd:unsignedInt">
       <xsd:maxInclusive value="2147483647" />
   </xsd:restriction>
</xsd:simpleType>

<!--  *************** LDAP RESULT ********************* -->

<xsd:simpleType name="LDAPErrorCode">
   <xsd:restriction base="xsd:string">
         <xsd:enumeration value="success" />
         <xsd:enumeration value="operationsError" />
         <xsd:enumeration value="protocolError" />
         <xsd:enumeration value="timeLimitExceeded" />
         <xsd:enumeration value="sizeLimitExceeded" />
         <xsd:enumeration value="compareFalse" />
         <xsd:enumeration value="compareTrue" />
         <xsd:enumeration value="authMethodNotSupported" />
         <xsd:enumeration value="strongAuthRequired" />
         <xsd:enumeration value="referral" />
         <xsd:enumeration value="adminLimitExceeded" />
         <xsd:enumeration value="unavailableCriticalExtension" />
         <xsd:enumeration value="confidentialityRequired" />
         <xsd:enumeration value="saslBindInProgress" />
         <xsd:enumeration value="noSuchAttribute" />
         <xsd:enumeration value="undefinedAttributeType" />
         <xsd:enumeration value="inappropriateMatching" />
         <xsd:enumeration value="constraintViolation" />
         <xsd:enumeration value="attributeOrValueExists" />
         <xsd:enumeration value="invalidAttributeSyntax" />
         <xsd:enumeration value="noSuchObject" />
         <xsd:enumeration value="aliasProblem" />
         <xsd:enumeration value="invalidDNSyntax" />
         <xsd:enumeration value="aliasDerefencingProblem" />
         <xsd:enumeration value="inappropriateAuthentication" />
         <xsd:enumeration value="invalidCredentials" />
         <xsd:enumeration value="insufficientAccessRighs" />
         <xsd:enumeration value="busy" />
         <xsd:enumeration value="unavailable" />
         <xsd:enumeration value="unwillingToPerform" />
         <xsd:enumeration value="loopDetect" />
         <xsd:enumeration value="namingViolation" />
         <xsd:enumeration value="objectClassViolation" />
         <xsd:enumeration value="notAllowedOnNonLeaf" />
         <xsd:enumeration value="notAllowedOnRDN" />
         <xsd:enumeration value="entryAlreadyExists" />
         <xsd:enumeration value="objectClassModsProhibited" />
         <xsd:enumeration value="affectMultipleDSAs" />
         <xsd:enumeration value="other" />
         <xsd:enumeration value="notAttempted" />
         <xsd:enumeration value="couldNotConnect" />
         <xsd:enumeration value="connectionClosed" />
    </xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="LDAPResult">
  <xsd:sequence>
    <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
    <xsd:element name="resultCode" minOccurs="1" maxOccurs="1"> 
         <xsd:complexType>
            <xsd:simpleContent>
               <xsd:extension base="xsd:int">
                   <xsd:attribute name="descr" use="optional" type="LDAPErrorCode" />
               </xsd:extension>
            </xsd:simpleContent>
         </xsd:complexType>  
    </xsd:element>
    <xsd:element name="matchedDN" minOccurs="0" maxOccurs="1" default="" type="xsd:string" />
    <xsd:element name="errorMessage" minOccurs="0" maxOccurs="1" default="" type="xsd:string" />
    <xsd:element name="referral"  minOccurs="0" maxOccurs="unbounded" default=""  type="xsd:string" />
  </xsd:sequence>
</xsd:complexType>


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



<xsd:complexType name="SearchRequest">
<xsd:sequence>
    <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
    <xsd:element name="scope" minOccurs="1" maxOccurs="1">
	<xsd:simpleType>
   	   <xsd:restriction base="xsd:string">
              <xsd:enumeration value="baseObject" />
              <xsd:enumeration value="singleLevel" />
              <xsd:enumeration value="wholeSubtree" />
           </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
    <xsd:element name="derefAliases" minOccurs="1" maxOccurs="1">
	 <xsd:simpleType>
   	   <xsd:restriction base="xsd:string">
              <xsd:enumeration value="neverDerefAliases" />
              <xsd:enumeration value="derefInSearching" />
              <xsd:enumeration value="derefFindingBaseObj" />
              <xsd:enumeration value="derefAlways" />
           </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
    <xsd:element name="sizeLimit" minOccurs="0" maxOccurs="1" default="0" type="MAXINT" />
    <xsd:element name="timeLimit" minOccurs="0" maxOccurs="1" default="0" type="MAXINT" />
    <xsd:element name="typesOnly" minOccurs="0" maxOccurs="1" default="false" type="xsd:boolean" />
    <xsd:element name="filter" minOccurs="1" maxOccurs="1" type="Filter" />
    <xsd:element name="attributes" minOccurs="0" maxOccurs="1" type="xsd:string" />
    <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
 </xsd:sequence>
 <xsd:attribute name="dn" use="required" type="xsd:string" />
</xsd:complexType>


<xsd:complexType name="SearchResponse">
   <xsd:sequence>
       <xsd:element name="searchResEntry" minOccurs="0" maxOccurs="unbounded" type="SearchResultEntry" />
       <xsd:element name="searchResRef"  minOccurs="0" maxOccurs="unbounded" type="SearchResultRef"/>
       <xsd:element name="searchResDone" minOccurs="1" maxOccurs="1" type="LDAPResult" />
   </xsd:sequence>
</xsd:complexType>



<xsd:complexType name="SearchResultEntry">
     <xsd:sequence>
       <xsd:element name="objectclass" minOccurs="0" maxOccurs="1" type="ObjectClass" />      
       <xsd:element name="attr" minOccurs="0" maxOccurs="unbounded" type="DsmlAttr" />
       <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
   </xsd:sequence>
   <xsd:attribute name="dn" use="required" type="xsd:string" />
</xsd:complexType>



<xsd:complexType name="DsmlAttr">
   <xsd:sequence>       
       <xsd:element name="value" minOccurs="0" maxOccurs="unbounded">
         <xsd:complexType>
            <xsd:simpleContent>
               <xsd:extension base="xsd:string">
                     <xsd:attribute name="encoding" use="optional" >   
                         <xsd:simpleType>
                             <xsd:restriction base="xsd:string">
                                <xsd:enumeration value="base64" />
                             </xsd:restriction>
                        </xsd:simpleType>
                     </xsd:attribute>
               </xsd:extension>
            </xsd:simpleContent>
         </xsd:complexType>  
       </xsd:element>
   </xsd:sequence>
   <xsd:attribute name="name" use="required" type="xsd:string" />
   <xsd:attribute name="ref" use="optional" type="xsd:anyURI" />
</xsd:complexType>


<xsd:complexType name="DsmlModifyAttr">
   <xsd:sequence>
     <xsd:element name="value" maxOccurs="unbounded">
         <xsd:complexType>
            <xsd:simpleContent>
               <xsd:extension base="xsd:string">
                     <xsd:attribute name="encoding" use="optional" >   
                         <xsd:simpleType>
                             <xsd:restriction base="xsd:string">
                                <xsd:enumeration value="base64" />
                             </xsd:restriction>
                        </xsd:simpleType>
                     </xsd:attribute>
               </xsd:extension>
            </xsd:simpleContent>
         </xsd:complexType>   
     </xsd:element>     
   </xsd:sequence>
   <xsd:attribute name="name" use="required" type="xsd:string" />
   <xsd:attribute name="operation" use="required" > 
        <xsd:simpleType>
   	   <xsd:restriction base="xsd:string">
              <xsd:enumeration value="add" />
              <xsd:enumeration value="delete" />
              <xsd:enumeration value="replace" />
           </xsd:restriction>
        </xsd:simpleType>
   </xsd:attribute>
</xsd:complexType>

<xsd:complexType name="ObjectClass">
  <xsd:sequence>
    <xsd:element name="oc-value" minOccurs="1" maxOccurs="unbounded" >
         <xsd:complexType>
            <xsd:simpleContent>
               <xsd:extension base="xsd:string">
                     <xsd:attribute name="ref" use="optional" type="xsd:anyURI" />   
                </xsd:extension>
            </xsd:simpleContent>
         </xsd:complexType>   
    </xsd:element>
  </xsd:sequence>
</xsd:complexType>



<xsd:complexType name="SearchResultRef">
  <xsd:sequence>
     <xsd:element name="ldapURL" minOccurs="1" maxOccurs="unbounded" type="xsd:string" />
     <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>
</xsd:complexType>



<!-- ************* MODIFY ******************** -->
<xsd:complexType name="ModifyRequest">
  <xsd:sequence>
    <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
    <xsd:element name="attr" minOccurs="1" maxOccurs="unbounded" type="DsmlModifyAttr" />
    <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>
  <xsd:attribute name="dn" use="required" type="xsd:string" />
</xsd:complexType>





<!--  *************** ADD ********************* -->
<xsd:complexType name="AddRequest">
  <xsd:sequence>
     <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
     <xsd:element name="objectclass" minOccurs="0" maxOccurs="1" type="ObjectClass" />           
     <xsd:element name="attr" minOccurs="0" maxOccurs="unbounded" type="DsmlAttr" />
     <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>  
  <xsd:attribute name="dn" use="required" type="xsd:string"/>
</xsd:complexType>



<!-- *************** DELETE ********************* -->
<xsd:complexType name="DelRequest">
  <xsd:sequence>
      <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
      <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>
  <xsd:attribute name="dn" use="required" type="xsd:string"/>  
</xsd:complexType>



<!-- *************** MODIFY DN ********************* -->
<xsd:complexType name="ModifyDNRequest">
  <xsd:sequence>
      <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
      <xsd:element name="newrdn" minOccurs="1" maxOccurs="1" type="xsd:string" />
      <xsd:element name="deleteoldrdn" minOccurs="1" maxOccurs="1" type="xsd:boolean" />
      <xsd:element name="newSuperior" minOccurs="0" maxOccurs="1" type="xsd:string" /> 
      <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>
 <xsd:attribute name="dn" use="required" type="xsd:string"/>  
</xsd:complexType>



<!-- ************* COMPARE ******************** -->
<xsd:complexType name="CompareRequest">
  <xsd:sequence>
    <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
    <xsd:element name="attr" minOccurs="1" maxOccurs="1" type="DsmlAttr" />
    <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>  
  </xsd:sequence>
 <xsd:attribute name="dn" use="required" type="xsd:string"/>  
</xsd:complexType>


<!-- ************* EXTENDED OPERATION ******************** -->

<xsd:complexType name="ExtendedRequest">
  <xsd:sequence>
     <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
     <xsd:element name="requestName" minOccurs="1" maxOccurs="1" type="xsd:string" /> 
     <xsd:element name="requestValue" minOccurs="0" maxOccurs="1" type="xsd:string" /> 
     <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="ExtendedResponse">
  <xsd:sequence>
     <xsd:element name="requestID" minOccurs="0" maxOccurs="1" type="xsd:string" />
     <xsd:element name="resultCode" minOccurs="1" maxOccurs="1"> 
         <xsd:complexType>
            <xsd:simpleContent>
               <xsd:extension base="xsd:int">
                   <xsd:attribute name="descr" use="optional" type="LDAPErrorCode" />
               </xsd:extension>
            </xsd:simpleContent>
         </xsd:complexType>  
     </xsd:element>
     <xsd:element name="matchedDN" minOccurs="0" maxOccurs="1" default="" type="xsd:string" />
     <xsd:element name="errorMessage" minOccurs="0" maxOccurs="1" default=""  type="xsd:string" />
     <xsd:element name="referral"  minOccurs="0" maxOccurs="unbounded" default="" type="xsd:string" />
     <xsd:element name="responseName" minOccurs="0" maxOccurs="1" type="xsd:string" />       
     <xsd:element name="response" minOccurs="0" maxOccurs="1" type="xsd:string" />
     <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>
  <xsd:attribute name="dn" use="optional" type="xsd:string" />
</xsd:complexType>

<!-- ********************END base SCHEMA ********************* -->

</xsd:schema>


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


Powered by eList eXpress LLC