[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