 
<!-- COMMENT:

   Preliminary version of DTD for WebDAV protocol XML documents.

   I have gone through the specification for sections describing XML
   elements.  This has not yet been run through any sort of parser.

   These element definitions are for the basic element content as specified
   in the protocol document.  It does not include elements that may be part
   of any added schemas.

   For the time being the elements have been named D:XXXXX.  When the
   namespace features of XML are further defined, this will change.
   The full names cannot be used directly as they contain non NameChar
   characters. 

   A number of elements have descriptions of their contents.  The DTD can
   not specify this, and the content model will generally be (#PCDATA) in
   those cases.

   The structure of the rest of the document is, a comment containing the
   relevant section of the spec, followed by a definition.  I have added
   some comments of my own.  To make them easier to find, my comments are
   prefaced with "COMMENT:".

  John Turner
  johnt@cgocable.net
  10/10/97
--> 

<!--       2.3.1     PropSchema XML Element

          Name:     http://www.ietf.org/standards/dav/PropSchema
          Purpose:  To provide information about properties
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Values=   [DTD] [DefinedProps]
          Description: This property contains the definition of the schema.
          This definition consists of two parts. A DTD element that
          contains a DTD that declares all XML elements and DefinedProps
          that defines any properties associated with the schema. As with
          all XML it is possible to add extra XML elements. Therefore
          schemas may define extra XML elements which are to be included
          with their values.
-->
<!-- COMMENT: Is an empty PropSchema acceptable? -->
<!element D:PropSchema (D:DTD?, D:DefinedProps?) >


<!--       2.3.2     DTD XML Element

          Name:     http://www.ietf.org/standards/dav/DTD
          Purpose:  To contain the DTD for XML elements associated with the
                    schema.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Values:   XML Declaration statements
-->
<!-- COMMENT: 
    Element declarations can only occur in the internal or external
    subsets of the document prolog.  They are not allowed in markup.
    The definition below is merely a placeholder.  A means to send a
    correct DTD needs to be defined.
-->
<!element D:DTD ANY>



<!--       2.3.3     DefinedProps XML Element

          Name:     http://www.ietf.org/standards/dav/DefinedProps
          Purpose:  To contain a list of properties defined by the schema.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Values=   1*PropEntries
-->
<!element D:DefinedProps (D:PropEntries+) >


<!--       2.3.4     PropEntries XML Element

          Name:     http://www.ietf.org/standards/dav/PropEntries
          Purpose:  To contain the name of a defined property, the DTD of
                    its value, and its live/dead status.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   DefinedProps
          Values=   Prop [DTD] [Live]
          Description: Prop contains the name of the property. The DTD
          contains the DTD of the property's value. Live, if defined,
          indicates that the property has semantics and syntax that are
          enforced by the server.
-->
<!element D:PropEntries (D:prop, D:DTD?, D:Live?)>



<!--       2.3.5     Live XML Element

          Name:     http://www.ietf.org/standards/dav/Live
          Purpose:  If present this indicates the server MUST enforce the
                    syntax and semantics of the property.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   PropEntries
-->
<!element D:Live EMPTY>



<!--       2.4.1     DAV Property

          Name:     http://www.ietf.org/standards/dav
          Purpose:  Defines support for the DAV schema and protocol.
          Schema:   http://www.ietf.org/standards/dav/
          Values=   PropSchema Level
          Description:This property indicates that the resource supports
          the DAV schema and protocol to the level indicated. THE VALUE IN
          PROPSCHEMA IS TBD, WE NEED TO PROVIDE IT IN AN APPENDIX.
-->
<!element D:dav (D:propschema, D:level)>



<!--       2.4.2     Level XML Element

          Name:     http://www.ietf.org/standards/dav/level
          Purpose:  To indicate the level of DAV compliance the resource
                    meets.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   DAV
          Values=   "1" | "2" | "3"
          Description: A value of 1 for level indicates that the resource
          supports the property and namespace sections of the DAV
          specification. Level 2 indicates that the resource supports level
          1 and the lock section of the specification, with a minimum
          locking capability of the write lock. Level 3 indicates support
          for levels 1 and 2 as well as support for the versioning section
          of the DAV specification.
-->
<!-- COMMENT:
    Another way to do this would be to define an attribute on the element
    that hold this value.
    <!element level EMPTY >
    <!attlist level lvl ("1"|"2"|"3") #implied >
    this would allow better checking from the DTD, and simpler XML.
-->
<!element D:level (#PCDATA)>



<!--       2.4.3     Prop XML element

          Name:     http://www.ietf.org/standards/dav/prop
          Purpose:  Contains properties related to a resource.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Values:   XML Elements
          Description: The Prop XML element is a generic container for
          properties defined on resources. All elements inside Prop MUST
          define properties related to the resource. No other elements may
          be used inside of a Prop element.
-->
<!element D:prop ANY>



<!--       2.6.3     Link XML Element

          Name:     http://www.ietf.org/standards/dav/link
          Purpose:  To identify a property as a link and to contain the
                    source and destination of that link.
          Schema:   http://www.ietf.org/standards/dav/
          Values=   1*Src 1*Dst
          Description: Link is used to provide the sources and destinations
          of a link. The type of the property containing the Link XML
          element provides the type of the link. Link is a multi-valued
          element, so multiple Links may be used together to indicate
          multiple links with the same type.
-->
<!element D:link (D:src+, D:dst+)>



<!--       2.6.4     Src XML Element

          Name:    http://www.ietf.org/standards/dav/src
          Purpose: To indicate the source of a link.
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  http://www.ietf.org/standards/dav/link
          Values=  URI
-->
<!element D:src (#PCDATA) >



<!---       2.6.5     Dst XML Element

          Name:    http://www.ietf.org/standards/dav/Dst
          Purpose: To indicate the destination of a link
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  http://www.ietf.org/standards/dav/link
          Values=  URI
-->
<!element D:dst (#PCDATA) >



<!--       2.7.3.1   MultiResponse

          Name:     http://www.ietf.org/standards/dav/multiresponse
          Purpose:  Contains multiple response messages.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Value:    1*Response [ResponseDescription]
          Description: The ResponseDescription at the top level is used to
          provide a general message describing the over arching nature of
          the response. If this value is available an application MAY use
          it instead of presenting the individual response descriptions
          contain within the responses.
-->
<!element D:MultiResponse (D:response+, D:ResponseDescription?) >



<!--       2.7.3.2   Response

          Name:     http://www.ietf.org/standards/dav/response
          Purpose:  Holds a single response
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Value:    (Prop | HREF) Status [ResponseDescription]
          Description: Prop MUST contain one or more empty XML elements
          representing the name of properties. Multiple properties may be
          included if the same response applies to them all. If HREF is
          used then the response refers to a problem with the referenced
          resource, not a property.
-->
<!element D:response ( ( D:prop | D:href ), D:status, D:ResponseDescription? )>



<!--       2.7.3.3   Status

          Name:     http://www.ietf.org/standards/dav/status
          Purpose:  Holds a single HTTP status-line
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Response
          Value:    status-line   ;status-line defined in [Fielding et al.,
                    1997]
-->
<!element D:Status (#PCDATA) >



<!--       2.7.3.4   ResponseDescription

          Name:     http://www.ietf.org/standards/dav/ResponseDescription
          Purpose:  Contains a message that can be displayed to the user
                    explaining the nature of the response.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Multiresponse and/or Response
          Value:    Any
          Description:   This XML element provides information suitable to
          be presented to a user.
-->
<!element D:ResponseDescription (#PCDATA) >


<!---       2.8.3.1   PropertyUpdate XML element

          Name:     http://www.ietf.org/standards/dav/PropertyUpdate
          Purpose:  To contain a request to alter the properties on a
                    resource.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Values=   *(Create | Remove)
          Description: This XML element is a container for the information
          required to modify the properties on the resource. This XML
          element is multi-valued.
-->
<!-- COMMENT: Is an empty PropertyUpdate acceptable? -->
<!element D:PropertyUpdate (D:Create | D:Remove)* >



<!--       2.8.3.2   Create XML element

          Name:     http://www.ietf.org/standards/dav/create
          Purpose:  To create the DAV properties specified inside the
                    Create XML element.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   http://www.ietf.org/standards/dav/PropertyUpdate
          Values=   Prop
          Description: This XML element MUST contain only a Prop XML
          element. The elements contained by Prop specify the name and
          value of properties that are created on Request-URI. If a
          property already exists then its value is replaced. The Prop XML
          element MUST NOT contain a PropLoc XML attribute.
-->
<!element D:create (D:Prop) >



<!--       2.8.3.3   Remove XML element

          Name:     http://www.ietf.org/standards/dav/remove
          Purpose:  To remove the DAV properties specified inside the
                    Remove XML element.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   http://www.ietf.org/standards/dav/PropertyUpdate
          Values=   Prop
          Description: Remove specifies that the properties specified in
          Prop should be removed. Specifying the removal of a property that
          does not exist is not an error. All the elements in Prop MUST be
          empty, as only the names of properties to be removed are
          required.
-->
<!element D:remove (D:Prop) >



<!--       2.8.5.1   Propfind XML element

          Name:     http://www.ietf.org/standards/dav/Propfind
          Purpose:  To specify the set of matching properties
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Values=   (Prop | Allprop | Propname)
          Description: Propfind is a container element for the exact
          specification of a PROPFIND request.
-->
<!element D:Propfind (D:Prop | D:AllProp | D:Propname) >



<!--       2.8.5.2   Allprop

          Name:     http://www.ietf.org/standards/dav/Allprop
          Purpose:  To specify that all properties are to be returned
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Propfind
          Description: Its presence in a PROPFIND request specifies the
          name and value of all properties defined on the resource MUST be
          returned.
-->
<!element D:Allprop EMPTY >



<!--       2.8.5.3   Propname

          Name:     http://www.ietf.org/standards/dav/Propname
          Purpose:  To specify that the names of all properties defined on
                    the resource are to be returned.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Propfind
          Description: Its presence in a PROPFIND request specifies the
          name of all properties defined on the resource MUST be returned.
-->
<!element D:Propname EMPTY >



<!--       2.8.5.4   PropFindResult XML element

          Name:    http://www.ietf.org/standards/dav/PropFindResult
          Purpose: To contain the results of a SEARCH request
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  Any
          Values:  Prop
-->
<!-- COMMENT: is this element required, with no SEARCH? -->
<!element D:PropFindResult (D:Prop) >


<!--       3.3.1     IsCollection Property

          Name:     http://www.ietf.org/standards/dav/iscollection
          Purpose:  This property contains a Boolean value that is set to
                    "true" if the resource is a collection
          Schema:   http://www.ietf.org/standards/dav/
          Value:    ("true" | "false")
          Description: This property MUST be defined on all DAV compliant
          resources.
-->
<!-- COMMENT:
    Another way to do this would be to define an attribute on the element
    that hold this value.
    <!element IsCollection EMPTY >
    <!attlist level lvl ("true"|"false") #implied >
    this would allow better checking from the DTD, and simpler XML.
-->
<!element D:IsCollection (#PCDATA) >



<!--       3.3.2     DisplayName Property

          Name:     http://www.ietf.org/standards/dav/displayname
          Purpose:  A name for the resource that is suitable for
                    presentation to a user.
          Schema:   http://www.ietf.org/standards/dav/
          Value:    Any valid XML character data (as defined in [Bray,
                    Sperberg-McQueen, 1997])
          Description: This property SHOULD be defined on all DAV compliant
          resources. If present, the property a description of the resource
          that is suitable for presentation to a user.
-->
<!element D:DisplayName (#PCDATA) >



<!--       3.3.3     CreationDate Property

          Name:     http://www.ietf.org/standards/dav/creationdate
          Purpose:  The time and 4date the resource was created.
          Schema:   http://www.ietf.org/standards/dav/
          Value:    The time and date MUST be given in ISO 8601 format
                    [ISO8601]
          Description: This property SHOULD be defined on all DAV compliant
          resources. If present, it contains a timestamp of the moment when
          the resource was created (i.e., the moment it had non-null
          state).
-->
<!-- COMMENT:
    This element is a property for the DAV schema.  There is also a
    Creation-Date element needed as an element contained in the GETEnity
    and INDEXEntity property elements.  Should these be the same, or
    distinct elements?  There is no section describing the Creation-Date
    element.
-->
<!element D:CreationDate (#PCDATA) >



<!--       3.3.4     GETentity Property

          Name:     http://www.ietf.org/standards/dav/GETentity
          Purpose:  Contains the value of headers that are returned by a
                    GET without Accept headers.
          Schema:   http://www.ietf.org/standards/dav/
          Value:    Content-Type Content-Length Content-Language Last-
                    Modified Etag Creation-Date
          Description: This property MUST be defined on all DAV compliant
          resources unless GET is not supported, in which case this
          property MUST NOT be defined. This property MUST contain at most
          one instance of each element in its Value, if they are defined.
-->
<!element D:GETentity (D:Content-Type?, D:Content-Length?,
                       D:Content-Language?, D:Last-Modified?,
                       D:Etag?, D:Creation-Date?) >


<!--       3.3.5     INDEXentity Property

          Name:     http://www.ietf.org/standards/dav/INDEXentity
          Purpose:  Contains the value of headers that are returned by an
                    INDEX.
          Schema:   http://www.ietf.org/standards/dav/
          Value:    Content-Type Content-Length Content-Language Last-
                    Modified Etag Creation-Date
          Description: This property MUST be defined on all DAV compliant
          resources unless INDEX is not supported, in which case this
          property MUST NOT be defined. This property MUST contain at most
          one instance of each element in its Value, if they are defined.
-->
<!element D:INDEXentity (D:Content-Type?, D:Content-Length?,
                         D:Content-Language?, D:Last-Modified?,
                         D:Etag?, D:Creation-Date?) >



<!--       3.3.6     Content-Type XML Element

          Name:     http://www.ietf.org/standards/dav/content-type
          Purpose:  The content-type of the member resource.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   GETentity or INDEXentity
          Value:    media-type   ; defined in Section 3.7 of [Fielding et
                    al., 1997]
          Description: If the parent of this element is GETentity, the
          value MUST be identical to the content-type returned by a GET on
          the resource without Accept headers.  If the parent is
          INDEXentity, the value MUST be identical to the content-type
          returned by an INDEX on the resource.  If no content-type is
          available, this element MUST NOT be defined.
-->
<!element D:Content-Type (#PCDATA) >



<!--       3.3.7     Content-Length XML Element

          Name:     http://www.ietf.org/standards/dav/content-length
          Purpose:  Describes the default content-length of the resource.
          Schema:   http://www.ietf.org/standards/dav/
          Value:    content-length ; see section 14.14 of RFC 2068
          Description: If the parent of this element is GETentity, this
          element MUST have a value equal to the content-length header
          returned by a GET on the resource without Accept headers.  If the
          parent is INDEXentity, the value MUST be identical to the content-
          length returned by an INDEX on the resource.  If no content-
          length is available, this element MUST NOT be defined.
-->
<!element D:content-length (#PCDATA) >



<!--       3.3.8     Content-Language XML Element

          Name:     http://www.ietf.org/standards/dav/content-language
          Purpose:  Describes the default natural language of a resource.
          Schema:   http://www.ietf.org/standards/dav/
          Value:    language-tag   ;language-tag is defined in section
          14.13 of RFC 2068
          Description: If the parent of this element is GETentity, this
          element MUST have a value equal to the content-language header
          returned by a GET on the resource without Accept headers.  If the
          parent is INDEXentity, the value MUST be identical to the content-
          language header returned by an INDEX on the resource.  If no
          content-language header is available, this element MUST NOT be
          defined.
-->
<!element D:content-language (#PCDATA) >



<!--       3.3.9     Last-Modified XML Element

          Name:     http://www.ietf.org/standards/dav/last-modified
          Purpose:  The date the resource was last modified.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   GETentity or INDEXentity
          Value:    The date MUST be given in RFC 1123 format (rfc-1123
          production, defined in section 3.3.1 of [Fielding et al., 1997]
          Description: If the parent of this element is GETentity, this
          element MUST have a value equal to the last-modified header
          returned by a GET on the resource without Accept headers.  If the
          parent is INDEXentity, the value MUST be identical to the last-
          modified header returned by an INDEX on the resource.  If no
          last- modified header is available, this element MUST NOT be
          defined.
-->
<!element D:last-modified (#PCDATA) >



<!--       3.3.10    Etag XML Element

          Name:     http://www.ietf.org/standards/dav/etag
          Purpose:  The entity tag of the resource.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   GETentity or INDEXentity
          Value:    entity-tag  ; defined in Section 3.11 of [Fielding et
                    al., 1997]
          Description: If the parent of this element is GETentity, this
          element MUST have a value equal to the entity-tag header returned
          by a GET on the resource without Accept headers.  If the parent
          is INDEXentity, the value MUST be identical to the entity-tag
          header returned by an INDEX on the resource.  If no entity-tag
          header is available, this element MUST NOT be defined.
-->
<!element D:etag (#PCDATA) >



<!--       3.4.5     ResInfo XML Element

          Name:     http://www.ietf.org/standards/dav/resinfo
          Purpose:  Describes a resource.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Value:    Href Prop Members
          Description: There MUST be at least one Href element.  Each Href
          element contains a URI for the resource, which MUST be an
          absolute URI. There MUST be a single Prop element that contains a
          series of properties defined on the resource.  If the resource is
          a collection, it MAY have at most one Members element, which
          describes the members of the collection.
-->
<!element D:resinfo (D:href+, D:prop, D:members?) >



<!--       3.4.6     Members XML Element

          Name:     http://www.ietf.org/standards/dav/members
          Purpose:  Describes the membership of a collection resource.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   ResInfo
          Value:    ResInfo
          Description: Contains zero or more ResInfo elements, which
          describe members of the collection.
-->
<!element D:members (D:resinfo)* >


<!--
          3.4.7     Href XML Element

          Name: http://www.ietf.org/standards/dav/href
          Purpose:  To identify that the content of the element is a URI.
          Schema:   http://www.ietf.org/standards/dav/
          Parent:   Any
          Value:    URI ; See section 3.2.1 of [Fielding et al., 1997]
-->
<!element D:href (#PCDATA) >


<!--       3.10.4.1  ResourceUpdate element

          Name:     http://www.ietf.org/standards/dav/patch/resourceupdate
          Purpose:  Contains an ordered set of changes to a non-collection,
                    non-property resource.
          Schema:   http://www.ietf.org/standards/dav/patch/
          Parent:   Any
          Value:    *(Insert | Delete | Replace)
-->
<!element D:resourceupdate (D:insert | D:delete | D:replace)* >



<!--       3.10.4.2  Insert element

          Name:     http://www.ietf.org/standards/dav/patch/insert
          Purpose:  Insert the XML element’s contents starting at the
                    specified octet.
          Schema:   http://www.ietf.org/standards/dav/patch/
          Parent:   ResourceUpdate
          Value:    The insert XML element MUST contain an Octet-Range
          XML element that specifies an octet position within the body of a
          resource.  A value of "end" specifies the end of the resource.
          The body of the insert XML element contains the octets to be
          inserted.
          Please note that in order to protect the white space contained in
          this XML element the following attribute/value MUST be included
          in the element: XML-SPACE = "PRESERVE".
-->
<!-- COMMENT: 
        The definition specified by the text is in fact:
        (octet-range, #PCDATA)  But XML does not allow
        this.
-->
<!element D:insert (#PCDATA | D:octet-range) >

<!-- COMMENT: The following attribute definition is based on the XML spec -->
<!attlist D:insert XML-SPACE (DEFAULT|PRESERVE) #IMPLIED >
<!-- COMMENT: The following might be better for our use. -->
<!attlist D:insert XML-SPACE (PRESERVE) #FIXED 'PRESERVE' >



<!--       3.10.4.3  Delete element

          Name:     http://www.ietf.org/standards/dav/patch/delete
          Purpose:  Removes the specified range of octets.
          Schema:   http://www.ietf.org/standards/dav/patch/
          Parent:   ResourceUpdate
          Value:    The Delete XML element MUST contain an octet-range
                    XML element.
          Discussion: The octets that are deleted are removed, which means
          the resource is collapsed and the length of the resource is
          decremented by the size of the octet range.  It is not
          appropriate to replace deleted octets with zeroed-out octets,
          since zero is a valid octet value.
-->
<!-- COMMENT: The definition specified by the text is in fact:
        (D:octet-range, #PCDATA)  But XML does not allow
        this.
-->
<!element D:delete (#PCDATA | D:octet-range) >



<!--       3.10.4.4  Replace element

          Name:     http://www.ietf.org/standards/dav/patch/replace
          Purpose:  Replaces the specified range of octets with the
          contents of the XML element.  If the number of octets in the XML
          element is different from the number of octets specified, the
          update MUST be rejected.
          Schema:   http://www.ietf.org/standards/dav/patch/
          Parent:   ResourceUpdate
          Value:    The Replace XML element MUST contain an octet-
          range XML element. The contents of the entity are the replacement
          octets.
          Please note that in order to protect the white space contained in
          this XML element the following attribute/value MUST be included
          in the element: XML-SPACE = "PRESERVE".
-->
<!-- COMMENT: The definition specified by the text is in fact:
        (D:octet-range, #PCDATA)  But XML does not allow
        this.
-->
<!element D:replace (#PCDATA | D:octet-range) >

<!-- COMMENT: The following attribute definition is based on the XML spec -->
<!attlist D:replace XML-SPACE (DEFAULT|PRESERVE) #IMPLIED >
<!-- COMMENT: The following might be better for our use. -->
<!attlist D:replace XML-SPACE (PRESERVE) #FIXED 'PRESERVE'>



<!--       3.10.4.5  Octet-Range Attribute

          Name:     http://www.ietf.org/standards/dav/patch/octet-range
          Purpose:  Specifies a range of octets that the enclosing property
                    effects.
          Schema:   http://www.ietf.org/standards/dav/patch/
          Parent:   Insert, Delete, Replace
          Value:    number ["-" (number | "end")]
                    Number = 1*Digit
          Description: Octet numbering begins with 0. If the octet contains
          a single number then the operation is to begin at that octet and
          to continue for a length specified by the operation. In the case
          of a delete, this would mean to delete a single octet. In the
          case of an insert this would mean to begin the insertion at the
          specified octet and to continue for the length of the included
          value, extending the resource if necessary. In the case of
          replace, the replace begins at the specified octet and overwrites
          all that follow to the length of the included value.
-->
<!-- COMMENT: The title says attribute, but the examples show an element -->
<!element D:octet-range (#PCDATA) >


<!--       3.12.1    Source Link Property Type

          Name:     http://www.ietf.org/standards/dav/link/source
          Purpose:  The destination of the source link identifies the
          resource that contains the unprocessed source of the link
          source.
          Schema:   http://www.ietf.org/standards/dav/link/
          Parent:   Any
          Value:    An XML document with zero or more link XML
                    elements.
          Discussion: The source of the link (src) is typically the URI of
          the output resource on which the link is defined, and there is
          typically only one destination (dst) of the link, which is the
          URI where the unprocessed source of the resource may be accessed.
          When more than one link destination exists, this specification
          asserts no policy on ordering.
-->
<!element D:source (D:link)* >


<!--       5.6.1.2   SupportedLock Property

          Name:    http://www.ietf.org/standards/dav/lock/supportedlock
          Purpose: To provide a listing of the lock types supported by the
                   resource.
          Schema:  http://www.ietf.org/standards/dav/
          Values:  An XML document containing zero or more LockEntry XML
                   elements.
          Description: The SupportedLock property of a resource returns a
          listing of the combinations of scope and access types which may
          be specified in a lock request on the resource. Note that the
          actual contents are themselves controlled by access controls so a
          server is not required to provide information the client is not
          authorized to see. If SupportedLock is available on "*" then it
          MUST define the set of locks allowed on all resources on that
          server.
-->
<!element D:supportedlock (D:LockEntry)* >


<!--       5.6.1.3   LOCKENTRY XML Element

          Name:    http://www.ietf.org/standards/dav/lockentry
          Purpose: Defines a DAVLockType/LockScope pair which may be
          legally  used with a LOCK on the specified resource.
          Schema:  HYPERLINK http://www.ietf.org/standards/dav/
          Parent:  A SupportedLock entry
          Values:  LockType LockScope
-->
<!element D:lockentry (D:locktype, D:lockscope) >




<!--       5.6.1.4   LOCKTYPE XML Element

          Name:    http://www.ietf.org/standards/dav/locktype
          Purpose: Lists a DAVLockType
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  LOCKENTRY
          Values:  DAVLockTypeValue
-->
<!element D:locktype (#PCDATA) >


<!--       5.6.1.5   LOCKSCOPE XML Element

          Name:    http://www.ietf.org/standards/dav/lockscope
          Purpose: Lists a DAVLockScope
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  LOCKENTRY
          Values:  DAVLockScopeValue
-->
<!element D:lockscope (#PCDATA) >



<!--       5.6.2.4   ACTIVELOCK XML Element

          Name:    http://www.ietf.org/standards/dav/activelock
          Purpose: A multivalued XML element that describes a particular
          active   lock on a resource
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  A LOCKDISCOVERY entry
          Values=  LOCKTYPE LOCKSCOPE OWNER TIMEOUT LOCKTOKEN
-->
<!element D:activelock (D:locktype?, D:lockscope?, D:owner?,
                        D:timeout?, D:locktoken?) >



<!--       5.6.2.5   OWNER XML Element

          Name:    http://www.ietf.org/standards/dav/lock/owner
          Purpose: Returns owner information
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  ACTIVELOCK
          Values=  XML:REF | {any valid XML string}
-->
<!-- COMMENT: The element definition allows more than the spec.  The
             definition below allows a mixing of characters and any
             number of XML:REF elements. -->
<!element D:owner (#PCDATA|XML:REF) >



<!--       5.6.2.6   TIMEOUT XML Element

          Name:    http://www.ietf.org/standards/dav/timeout
          Purpose: Returns information about the timeout associated with
                   the lock
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  ACTIVELOCK
          Values=  CLOCKTYPE TIMETYPE TIMEOUTVAL
-->
<!element D:timeout (D:clocktype?, D:timetype?, D:timeoutval?) >



<!--       5.6.2.7   CLOCKTYPE XML Element

          Name:    http://www.ietf.org/standards/dav/clocktype
          Purpose: Returns the clock type used with this lock
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  TIMEOUT
          Values=  ClockTypeValue
-->
<!element D:clocktype (#PCDATA) >



<!--       5.6.2.8   TIMETYPE XML Element

          Name:    http://www.ietf.org/standards/dav/timetype
          Purpose: Returns the time type used with this lock
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  TIMEOUT
          Values=  TimeTypeValue
-->
<!-- COMMENT:
    The name was incorrect in the text, it said clocktype.
-->
<!element D:timetype (#PCDATA) >



<!--       5.6.2.9   TIMEOUTVAL XML Element

          Name:    http://www.ietf.org/standards/dav/timeoutval
          Purpose: Returns the amount of time left on the lock
          Schema:  http://www.ietf.org/standards/dav/
          Parent:  TIMEOUT
          Values=  DAVTimeOutVal
-->
<!element D:timeoutval (#PCDATA) >




<!--       5.6.2.10  LOCKTOKEN XML Element
          Name: http://www.ietf.org/standards/dav/statetoken
          Purpose: Returns the lock token
          Schema: http://www.ietf.org/standards/dav/
          Parent: ACTIVELOCK
          Values= XML:REF
          Description: The REF contains a Lock-Token-URL.
-->
<!element D:locktoken (XML:REF) >








<!-- COMMENT: An attribute for the use of various schema property elements. -->


<!--       2.4.4     PropLoc XML Attribute

          Name:     http://www.ietf.org/standards/dav/PropLoc
          Purpose:  To specify the location of the associated property.
          Schema:   http://www.ietf.org/standards/dav/
          Values=   URL
          Description: This attribute is used with elements inside of Props
          contained in responses to specify the URL of the property on the
          associated resource. The PropLoc attribute MUST NOT be used in
	  requests.
-->


<!-- COMMENT: This attribute can be defined on any element defined as a property
    element in a supported schema -->
<!-- <!attlist SomeProperty 
     ...
     D:PropLoc CDATA #IMPLIED
     ... >
-->

