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: new draft of DSMLv2 core


Attached is a draft with many changes to cleanup the proposed core. The
changes to the previous version are:

1) simplified definitions of Control and Extended Ops to include
references out to any external XML chunks - why imply ASN.1 BER encoding
of
common controls?

2) abstracted the requestID and controls into DsmlMessage and defined
the requests and responses as extensions of that.

3) defined ExtendedResponse as an extension of LDAPResult

4) defined OID (union of NumericOID and xsd:NMTOKEN). Used for attribute
descriptions, etc.

5) corrected minOccurs to =0 for "attr" element of Modify per RFC 2251

6) defined DsmlValue to capture three cases: utf-8, binary, and URI
references. DsmlValue referenced from DsmlAttr, DsmlModifyAttr,
MatchingRuleAssertion, AttributeValueAssertion, SubstringFilter.

7) fixed Compare to have AttributeValueAssertion for "attr"

8) fixed definition of SubstringFilter to account for unbounded
occurrences of initial, any, and final - per RFC 2251

9) fixed BindRequest to just have the DN of the principal. The idea is
that only the DN is needed at the DSMLv2 level since we will specify
that authentication is performed in the transport binding.

   -- see separate note on DSML and security from Christine Tomlinson
and Mark Wahl --

10) added abandonRequest - omission

11) defined DsmlDN/DslmRDN - used in the obivious places

12) deleted the ObjectClass construction - discuss on telecon,
rationale: if needed consider XPath/XLink; missing general approach to
self contained schema without consideration of document level

13) defined 'attributes' in SearchRequest to as an XML sequence of
AttributeDescription elements rather than RFC2255
',' (comma) separated list in keeping with Filter.

14) made SearchResultEntry, SearchResultReference, and SearchResultDone
top level

15) defined errorResponse to incorporate 'local' errors such as
'notAttempted', 'couldNotConnect', and 'connectionClosed'

16) added ExtensionTypeID to incorporate either NumericOID or anyURI for
controlType, ExtendedRequest/Response type

17) corrected minOccurs to ="1" for Filter. corrected min/maxOccurs to
="1" on FilterGroup

18) ensured that 'desc' is used uniformly for all occurrences where an
attribute description is called for

19) moved scope, derefAliases, sizeLimit, timeLimit, typesOnly in
SearchRequest to attributes for conciseness

20) changed name DsmlModifyAttr to DsmlModificiation - align with ASN.1
nomenclature

21) included minOccurs="0" on 'value' of DsmlModification

22) moved all DNs, RDNs, and booleans to attributes on ModifyDNRequest -
conciseness


Christine Tomlinson
Mark Wahl
Nigel Jacobs
Sun Microsystems
<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="bindRequest" type="BindRequest" />
      <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="abandonRequest" type="AbandonRequest" />
      <xsd:element name="extendedReq" type="ExtendedRequest" />
    </xsd:choice>    
</xsd:group>

<!-- DSML Responses -->
<xsd:group name="DSMLResponse">
    <xsd:choice>
       <xsd:element name="bindResponse"  type="LDAPResult"/>
       <xsd:element name="searchResultEntry"  type="SearchResultEntry"/>
       <xsd:element name="searchResultReference"  type="SearchResultReference"/>
       <xsd:element name="searchResultDone"  type="LDAPResult"/>
       <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="ErrorResponse" />
    </xsd:choice>    
</xsd:group>


<!-- ***** DsmlDN ***** -->
<xsd:simpleType name="DsmlDN">
  <xsd:restriction base="xsd:string"/>
</xsd:simpleType>

<!-- ***** DsmlRDN ***** -->
<xsd:simpleType name="DsmlRDN">
  <xsd:restriction base="xsd:string"/>
</xsd:simpleType>

<!-- ***** Request ID ***** -->
<xsd:simpleType name="RequestID">
  <xsd:restriction base="xsd:string"/>
</xsd:simpleType>

<!-- ***** OID ***** -->
<xsd:simpleType name="OID">
  <xsd:union memberTypes="NumericOID xsd:NMTOKEN"/>
</xsd:simpleType>

<xsd:simpleType name="NumericOID">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="[0-2].[0-9]+[.[0-9]+]*"/>
  </xsd:restriction>
</xsd:simpleType>

<!-- ***** ExtensionTypeID ***** -->
<xsd:simpleType name="ExtensionTypeID">
  <xsd:union memberTypes="NumericOID xsd:anyURI"/>
</xsd:simpleType>

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

<!-- **** DSML Value **** -->
<xsd:complexType name="DsmlValue">
  <xsd:choice>
    <xsd:element name="utf8" type="xsd:string"/>
    <xsd:element name="binary" type="xsd:base64Binary"/>
    <xsd:element name="uri" type="xsd:anyURI"/>
  </xsd:choice>
</xsd:complexType>

<!-- **** DSML Any external XML structure **** -->
<xsd:complexType name="DsmlANY">
  <xsd:sequence>
    <xsd:any/>
  </xsd:sequence>
</xsd:complexType>


<!-- **** DSML Control **** --> 
<xsd:complexType name="Control">
  <xsd:sequence>
    <xsd:element name="controlValue" minOccurs="0" maxOccurs="1" type="DsmlANY"/>
  </xsd:sequence>
  <xsd:attribute name="type" use="required" type="ExtensionTypeID"/>
  <xsd:attribute name="criticality" use="optional" default="false" type="xsd:boolean" />
</xsd:complexType>

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

<xsd:group name="FilterGroup">
  <xsd:sequence>
    <xsd:choice minOccurs="1" maxOccurs="1" >
      <xsd:element name="and" type="FilterSet"/>
      <xsd:element name="or"  type="FilterSet"/>
      <xsd:element name="not"  type="Filter"/>
      <xsd:element name="equalityMatch" type="AttributeValueAssertion"/>
      <xsd:element name="substrings" type="SubstringFilter"/>
      <xsd:element name="greaterOrEqual" type="AttributeValueAssertion"/>
      <xsd:element name="lessOrEqual" type="AttributeValueAssertion"/>
      <xsd:element name="present" type="AttributeDescription"/>
      <xsd:element name="approxMatch" type="AttributeValueAssertion"/>
      <xsd:element name="extensibleMatch" type="MatchingRuleAssertion"/>
    </xsd:choice>    
  </xsd:sequence>
</xsd:group>

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

<xsd:complexType name="AttributeValueAssertion">
  <xsd:sequence>
    <xsd:element name="value" type="DsmlValue"/>
  </xsd:sequence>
  <xsd:attribute name="desc" type="OID"/>
</xsd:complexType>

<xsd:complexType name="AttributeDescription">
  <xsd:attribute name="desc" type="OID"/>
</xsd:complexType>

<xsd:complexType name="SubstringFilter">
  <xsd:sequence>
    <xsd:choice minOccurs="1" maxOccurs="unbounded">
      <xsd:element name="initial" type="DsmlValue"/>
      <xsd:element name="any" type="DsmlValue"/>
      <xsd:element name="final" type="DsmlValue"/>
    </xsd:choice>
  </xsd:sequence>
  <xsd:attribute name="desc" type="OID"/>
</xsd:complexType>

<xsd:complexType name="MatchingRuleAssertion">
  <xsd:sequence>
    <xsd:element name="value" type="DsmlValue"/>
  </xsd:sequence>
  <xsd:attribute name="dnAttributes" use="optional" type="xsd:boolean" default="false"/>
  <xsd:attribute name="matchingRule" use="optional" type="OID"/>
  <xsd:attribute name="desc" use="optional" type="OID"/>
</xsd:complexType>

<!--  *************** DSML MESSAGE ******************** -->
<xsd:complexType name="DsmlMessage">
  <xsd:sequence>
    <xsd:element name="control" minOccurs="0" maxOccurs="unbounded" type="Control"/>
  </xsd:sequence>
  <xsd:attribute name="requestID" use="optional" type="RequestID" />
</xsd:complexType>

<!--  *************** 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="insufficientAccessRights" />
         <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:restriction>
</xsd:simpleType>

<xsd:complexType name="ResultCode">
  <xsd:attribute name="code" type="xsd:int"/>
  <xsd:attribute name="descr" use="optional" type="LDAPErrorCode"/>
</xsd:complexType>

<xsd:complexType name="LDAPResult">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="resultCode" minOccurs="1" maxOccurs="1" type="ResultCode"/>
        <xsd:element name="errorMessage" minOccurs="0" maxOccurs="1" default="" type="xsd:string" />
        <xsd:element name="referral"  minOccurs="0" maxOccurs="unbounded" default=""  type="xsd:anyURI" />
      </xsd:sequence>
      <xsd:attribute name="matchedDN" use="optional" default="" type="DsmlDN"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="ErrorResponse">
  <xsd:sequence>
    <xsd:element name="message" minOccurs="0" type="xsd:string"/>
  </xsd:sequence>
  <xsd:attribute name="requestID" use="optional" type="RequestID" />
  <xsd:attribute name="type">
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:enumeration value="notAttempted"/>
        <xsd:enumeration value="couldNotConnect"/>
        <xsd:enumeration value="connectionClosed"/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
</xsd:complexType>


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

<xsd:complexType name="BindRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:attribute name="principal" use="required" type="DsmlDN"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

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

<xsd:complexType name="AttributeDescriptions">
  <xsd:sequence minOccurs="0" maxOccurs="unbounded">
    <xsd:element name="attribute" type="AttributeDescription"/>
  </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="SearchRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="filter" minOccurs="1" maxOccurs="1" type="Filter" />
        <xsd:element name="attributes" minOccurs="0" maxOccurs="1" type="AttributeDescriptions"/>
      </xsd:sequence>
      <xsd:attribute name="dn" use="required" type="DsmlDN" />
      <xsd:attribute name="scope" use="required">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
             <xsd:enumeration value="baseObject" />
             <xsd:enumeration value="singleLevel" />
             <xsd:enumeration value="wholeSubtree" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
      <xsd:attribute name="derefAliases" use="required">
        <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:attribute>
      <xsd:attribute name="sizeLimit" use="optional" default="0" type="MAXINT" />
      <xsd:attribute name="timeLimit" use="optional" default="0" type="MAXINT" />
      <xsd:attribute name="typesOnly" use="optional" default="false" type="xsd:boolean" />
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>


<!-- ***** Search Result Entry ***** -->

<xsd:complexType name="SearchResultEntry">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="attr" minOccurs="0" maxOccurs="unbounded" type="DsmlAttr"/>
      </xsd:sequence>
      <xsd:attribute name="dn" use="required" type="DsmlDN"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>



<xsd:complexType name="DsmlAttr">
   <xsd:sequence>       
     <xsd:element name="value" minOccurs="0" maxOccurs="unbounded" type="DsmlValue"/>
   </xsd:sequence>
   <xsd:attribute name="desc" use="required" type="OID"/>
</xsd:complexType>


<xsd:complexType name="DsmlModification">
   <xsd:sequence>
     <xsd:element name="value" minOccurs="0" maxOccurs="unbounded" type="DsmlValue"/>
   </xsd:sequence>
   <xsd:attribute name="desc" use="required" type="OID"/>
   <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>


<!-- ***** Search Result Reference ***** -->
<xsd:complexType name="SearchResultReference">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="ref" minOccurs="1" maxOccurs="unbounded" type="xsd:anyURI" />
      </xsd:sequence>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>



<!-- ************* MODIFY ******************** -->
<xsd:complexType name="ModifyRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="attr" minOccurs="0" maxOccurs="unbounded" type="DsmlModification" />
      </xsd:sequence>
      <xsd:attribute name="dn" use="required" type="DsmlDN" />
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>





<!--  *************** ADD ********************* -->
<xsd:complexType name="AddRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="attr" minOccurs="0" maxOccurs="unbounded" type="DsmlAttr" />
      </xsd:sequence>  
      <xsd:attribute name="dn" use="required" type="DsmlDN"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>



<!-- *************** DELETE ********************* -->
<xsd:complexType name="DelRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:attribute name="dn" use="required" type="DsmlDN"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>



<!-- *************** MODIFY DN ********************* -->
<xsd:complexType name="ModifyDNRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:attribute name="dn" use="required" type="DsmlDN"/>  
      <xsd:attribute name="newrdn" use="required" type="DsmlRDN"/>
      <xsd:attribute name="deleteoldrdn" use="optional" default="true" type="xsd:boolean"/>
      <xsd:attribute name="newSuperior" use="optional" type="DsmlDN"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>



<!-- ************* COMPARE ******************** -->
<xsd:complexType name="CompareRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="attr" minOccurs="1" maxOccurs="1" type="AttributeValueAssertion" />
      </xsd:sequence>
      <xsd:attribute name="dn" use="required" type="DsmlDN"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>


<!-- ***** ABANDON ***** -->
<xsd:complexType name="AbandonRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:attribute name="abandonID" use="required" type="RequestID"/>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>


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

<xsd:complexType name="ExtendedRequest">
  <xsd:complexContent>
    <xsd:extension base="DsmlMessage">
      <xsd:sequence>
        <xsd:element name="requestName" minOccurs="1" maxOccurs="1" type="ExtensionTypeID"/>
        <xsd:element name="requestValue" minOccurs="0" maxOccurs="1" type="DsmlANY"/> 
      </xsd:sequence>
    </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="ExtendedResponse">
  <xsd:complexContent>
    <xsd:extension base="LDAPResult">
      <xsd:sequence>
        <xsd:element name="responseName" minOccurs="0" maxOccurs="1" type="ExtensionTypeID"/>
        <xsd:element name="response" minOccurs="0" maxOccurs="1" type="DsmlANY"/>
      </xsd:sequence>
    </xsd:extension>
  </xsd:complexContent>
</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