Aller au contenu principal

15. DAV Properties (Propriétés DAV)

15. DAV Properties (Propriétés DAV)

Pour les propriétés DAV, le nom de la propriété est également identique au nom de l'élément XML qui contient sa valeur. Dans la section ci-dessous, la dernière ligne de chaque section donne la déclaration de type d'élément en utilisant le format défini dans [REC-XML]. Le champ "Value", lorsqu'il est présent, spécifie des restrictions supplémentaires sur le contenu autorisé de l'élément XML en utilisant BNF (c'est-à-dire pour restreindre davantage les valeurs d'un élément PCDATA).

Une propriété protégée est une propriété qui ne peut pas être modifiée avec une requête PROPPATCH. Il peut y avoir d'autres requêtes qui entraîneraient une modification d'une propriété protégée (comme lorsqu'une requête LOCK affecte la valeur de DAV:lockdiscovery). Notez qu'une propriété donnée pourrait être protégée sur un type de ressource, mais pas protégée sur un autre type de ressource.

Une propriété calculée est une propriété dont la valeur est définie en termes de calcul (basé sur le contenu et d'autres propriétés de cette ressource, ou même d'une autre ressource). Une propriété calculée est toujours une propriété protégée.

Le comportement COPY et MOVE fait référence aux opérations COPY et MOVE locales.

Pour les propriétés définies en fonction des en-têtes de réponse HTTP GET (DAV:get*), la valeur de l'en-tête pourrait inclure LWS tel que défini dans [RFC2616], Section 4.2. Les implémenteurs de serveurs DEVRAIENT supprimer LWS de ces valeurs avant de les utiliser comme valeurs de propriété WebDAV.

15.1. creationdate Property (Propriété creationdate)

Nom (Name): creationdate

Objectif (Purpose): Enregistre l'heure et la date de création de la ressource.

Valeur (Value): date-time (défini dans [RFC3339], voir l'ABNF dans la section 5.6.)

Protégé (Protected): PEUT être protégé. Certains serveurs permettent de modifier DAV:creationdate pour refléter l'heure à laquelle le document a été créé si cela est plus significatif pour l'utilisateur (plutôt que l'heure à laquelle il a été téléchargé). Ainsi, les clients NE DEVRAIENT PAS utiliser cette propriété dans la logique de synchronisation (utilisez DAV:getetag à la place).

Comportement COPY/MOVE: Cette valeur de propriété DEVRAIT être conservée lors d'une opération MOVE, mais est normalement réinitialisée lorsqu'une ressource est créée avec un COPY. Elle ne devrait pas être définie dans un COPY.

Description: La propriété DAV:creationdate DEVRAIT être définie sur toutes les ressources conformes à DAV. Si elle est présente, elle contient un horodatage du moment où la ressource a été créée. Les serveurs qui sont incapables d'enregistrer de manière persistante la date de création DEVRAIENT plutôt la laisser non définie (c'est-à-dire signaler "Not Found").

<!ELEMENT creationdate (#PCDATA) >

15.2. displayname Property (Propriété displayname)

Nom (Name): displayname

Objectif (Purpose): Fournit un nom pour la ressource qui convient à la présentation à un utilisateur.

Valeur (Value): N'importe quel texte.

Protégé (Protected): NE DEVRAIT PAS être protégé. Notez que les serveurs implémentant [RFC2518] pourraient avoir fait de cela une propriété protégée car c'est une nouvelle exigence.

Comportement COPY/MOVE: Cette valeur de propriété DEVRAIT être préservée dans les opérations COPY et MOVE.

Description: Contient une description de la ressource qui convient à la présentation à un utilisateur. Cette propriété est définie sur la ressource et devrait donc avoir la même valeur indépendamment du Request-URI utilisé pour la récupérer (ainsi, calculer cette propriété en fonction du Request-URI est déprécié). Bien que les clients génériques puissent afficher la valeur de la propriété aux utilisateurs finaux, les concepteurs d'interface utilisateur client doivent comprendre que la méthode d'identification des ressources reste l'URL. Les modifications apportées à DAV:displayname n'émettent pas de déplacements ou de copies vers le serveur, mais modifient simplement une partie des métadonnées sur la ressource individuelle. Deux ressources peuvent avoir la même valeur DAV:displayname même au sein de la même collection.

<!ELEMENT displayname (#PCDATA) >

15.3. getcontentlanguage Property (Propriété getcontentlanguage)

Nom (Name): getcontentlanguage

Objectif (Purpose): Contient la valeur de l'en-tête Content-Language (de la section 14.12 de [RFC2616]) telle qu'elle serait retournée par un GET sans en-têtes d'acceptation.

Valeur (Value): language-tag (language-tag est défini dans la section 3.10 de [RFC2616])

Protégé (Protected): NE DEVRAIT PAS être protégé, afin que les clients puissent réinitialiser la langue. Notez que les serveurs implémentant [RFC2518] pourraient avoir fait de cela une propriété protégée car c'est une nouvelle exigence.

Comportement COPY/MOVE: Cette valeur de propriété DEVRAIT être préservée dans les opérations COPY et MOVE.

Description: La propriété DAV:getcontentlanguage DOIT être définie sur toute ressource conforme à DAV qui renvoie l'en-tête Content-Language sur un GET.

<!ELEMENT getcontentlanguage (#PCDATA) >

15.4. getcontentlength Property (Propriété getcontentlength)

Nom (Name): getcontentlength

Objectif (Purpose): Contient l'en-tête Content-Length renvoyé par un GET sans en-têtes d'acceptation.

Valeur (Value): Voir la section 14.13 de [RFC2616].

Protégé (Protected): Cette propriété est calculée, donc protégée.

Description: La propriété DAV:getcontentlength DOIT être définie sur toute ressource conforme à DAV qui renvoie l'en-tête Content-Length en réponse à un GET.

Comportement COPY/MOVE: Cette valeur de propriété dépend de la taille de la ressource de destination, et non de la valeur de la propriété sur la ressource source.

<!ELEMENT getcontentlength (#PCDATA) >

15.5. getcontenttype Property (Propriété getcontenttype)

Nom (Name): getcontenttype

Objectif (Purpose): Contient la valeur de l'en-tête Content-Type (de la section 14.17 de [RFC2616]) telle qu'elle serait retournée par un GET sans en-têtes d'acceptation.

Valeur (Value): media-type (défini dans la section 3.7 de [RFC2616])

Protégé (Protected): Potentiellement protégé si le serveur préfère attribuer lui-même les types de contenu (voir également la discussion dans la section 9.7.1).

Comportement COPY/MOVE: Cette valeur de propriété DEVRAIT être préservée dans les opérations COPY et MOVE.

Description: Cette propriété DOIT être définie sur toute ressource conforme à DAV qui renvoie l'en-tête Content-Type en réponse à un GET.

<!ELEMENT getcontenttype (#PCDATA) >

15.6. getetag Property (Propriété getetag)

Nom (Name): getetag

Objectif (Purpose): Contient la valeur de l'en-tête ETag (de la section 14.19 de [RFC2616]) telle qu'elle serait retournée par un GET sans en-têtes d'acceptation.

Valeur (Value): entity-tag (défini dans la section 3.11 de [RFC2616])

Protégé (Protected): DOIT être protégé car cette valeur est créée et contrôlée par le serveur.

Comportement COPY/MOVE: Cette valeur de propriété dépend de l'état final de la ressource de destination, et non de la valeur de la propriété sur la ressource source. Notez également les considérations dans la section 8.8.

Description: La propriété getetag DOIT être définie sur toute ressource conforme à DAV qui renvoie l'en-tête Etag. Reportez-vous à la section 3.11 de RFC 2616 pour une définition complète de la sémantique d'un ETag, et à la section 8.6 pour une discussion des ETags dans WebDAV.

<!ELEMENT getetag (#PCDATA) >

15.7. getlastmodified Property (Propriété getlastmodified)

Nom (Name): getlastmodified

Objectif (Purpose): Contient la valeur de l'en-tête Last-Modified (de la section 14.29 de [RFC2616]) telle qu'elle serait retournée par une méthode GET sans en-têtes d'acceptation.

Valeur (Value): rfc1123-date (défini dans la section 3.3.1 de [RFC2616])

Protégé (Protected): DEVRAIT être protégé car certains clients peuvent s'appuyer sur la valeur pour un comportement de mise en cache approprié, ou sur la valeur de l'en-tête Last-Modified auquel cette propriété est liée.

Comportement COPY/MOVE: Cette valeur de propriété dépend de la date de dernière modification de la ressource de destination, et non de la valeur de la propriété sur la ressource source. Notez que certaines implémentations de serveurs utilisent la valeur de date de modification du système de fichiers pour la valeur DAV:getlastmodified, et cela peut être préservé dans un MOVE même lorsque la valeur HTTP Last-Modified DEVRAIT changer. Notez que puisque [RFC2616] exige que les clients utilisent des ETags lorsqu'ils sont fournis, un serveur implémentant des ETags peut compter sur les clients utilisant un mécanisme bien meilleur que les dates de modification pour la synchronisation hors ligne ou le contrôle du cache. Notez également les considérations dans la section 8.8.

Description: La date de dernière modification sur une ressource DEVRAIT uniquement refléter les modifications du corps (les réponses GET) de la ressource. Un changement dans une propriété uniquement NE DEVRAIT PAS entraîner la modification de la date de dernière modification, car les clients PEUVENT s'appuyer sur la date de dernière modification pour savoir quand écraser le corps existant. La propriété DAV:getlastmodified DOIT être définie sur toute ressource conforme à DAV qui renvoie l'en-tête Last-Modified en réponse à un GET.

<!ELEMENT getlastmodified (#PCDATA) >

15.8. lockdiscovery Property (Propriété lockdiscovery)

Nom (Name): lockdiscovery

Objectif (Purpose): Décrit les verrous actifs sur une ressource

Protégé (Protected): DOIT être protégé. Les clients modifient la liste des verrous via LOCK et UNLOCK, et non via PROPPATCH.

Comportement COPY/MOVE: La valeur de cette propriété dépend de l'état de verrouillage de la destination, et non des verrous de la ressource source. Rappelez-vous que les verrous ne sont pas déplacés dans une opération MOVE.

Description: Renvoie une liste de qui a un verrou, quel type de verrou il a, le type de délai d'expiration et le temps restant sur le délai d'expiration, et le jeton de verrou associé. Les informations sur le propriétaire PEUVENT être omises si elles sont considérées comme sensibles. S'il n'y a pas de verrous, mais que le serveur prend en charge les verrous, la propriété sera présente mais contiendra zéro élément 'activelock'. S'il y a un ou plusieurs verrous, un élément 'activelock' apparaît pour chaque verrou sur la ressource. Cette propriété n'est PAS verrouillable par rapport aux verrous d'écriture (Section 7).

<!ELEMENT lockdiscovery (activelock)* >

15.8.1. Exemple - Récupération de DAV:lockdiscovery

Requête (Request):

PROPFIND /container/ HTTP/1.1
Host: www.example.com
Content-Length: xxxx
Content-Type: application/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D='DAV:'>
<D:prop><D:lockdiscovery/></D:prop>
</D:propfind>

Réponse (Response):

HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx

<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D='DAV:'>
<D:response>
<D:href>http://www.example.com/container/</D:href>
<D:propstat>
<D:prop>
<D:lockdiscovery>
<D:activelock>
<D:locktype><D:write/></D:locktype>
<D:lockscope><D:exclusive/></D:lockscope>
<D:depth>0</D:depth>
<D:owner>Jane Smith</D:owner>
<D:timeout>Infinite</D:timeout>
<D:locktoken>
<D:href
>urn:uuid:f81de2ad-7f3d-a1b2-4f3c-00a0c91a9d76</D:href>
</D:locktoken>
<D:lockroot>
<D:href>http://www.example.com/container/</D:href>
</D:lockroot>
</D:activelock>
</D:lockdiscovery>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>

Cette ressource a un seul verrou d'écriture exclusif dessus, avec un délai d'expiration infini.

15.9. resourcetype Property (Propriété resourcetype)

Nom (Name): resourcetype

Objectif (Purpose): Spécifie la nature de la ressource.

Protégé (Protected): DEVRAIT être protégé. Le type de ressource est généralement décidé par l'opération créant la ressource (MKCOL vs PUT), et non par PROPPATCH.

Comportement COPY/MOVE: Généralement, un COPY/MOVE d'une ressource entraîne le même type de ressource à la destination.

Description: DOIT être défini sur toutes les ressources conformes à DAV. Chaque élément enfant identifie un type spécifique auquel appartient la ressource, tel que 'collection', qui est le seul type de ressource défini par cette spécification (voir la section 14.3). Si l'élément contient l'élément enfant 'collection' plus des éléments non reconnus supplémentaires, il devrait généralement être traité comme une collection. Si l'élément ne contient aucun élément enfant reconnu, il devrait être traité comme une ressource non-collection. La valeur par défaut est vide. Cet élément NE DOIT PAS contenir de texte ou de contenu mixte. Tout élément enfant personnalisé est considéré comme un identifiant pour un type de ressource.

Exemple: (exemple fictif pour montrer l'extensibilité)

<x:resourcetype xmlns:x="DAV:">
<x:collection/>
<f:search-results xmlns:f="http://www.example.com/ns"/>
</x:resourcetype>

15.10. supportedlock Property (Propriété supportedlock)

Nom (Name): supportedlock

Objectif (Purpose): Fournir une liste des capacités de verrouillage prises en charge par la ressource.

Protégé (Protected): DOIT être protégé. Les serveurs, et non les clients, déterminent quels mécanismes de verrouillage sont pris en charge.

Comportement COPY/MOVE: Cette valeur de propriété dépend du type de verrous pris en charge à la destination, et non de la valeur de la propriété sur la ressource source. Les serveurs tentant de COPIER vers une destination ne devraient pas essayer de définir cette propriété à la destination.

Description: Renvoie une liste des combinaisons de portée et de types d'accès qui peuvent être spécifiées dans une demande de verrou sur la ressource. Notez que le contenu réel est lui-même contrôlé par des contrôles d'accès, de sorte qu'un serveur n'est pas tenu de fournir des informations que le client n'est pas autorisé à voir. Cette propriété n'est PAS verrouillable par rapport aux verrous d'écriture (Section 7).

<!ELEMENT supportedlock (lockentry)* >

15.10.1. Exemple - Récupération de DAV:supportedlock

Requête (Request):

PROPFIND /container/ HTTP/1.1
Host: www.example.com
Content-Length: xxxx
Content-Type: application/xml; charset="utf-8"

<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop><D:supportedlock/></D:prop>
</D:propfind>

Réponse (Response):

HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
Content-Length: xxxx

<?xml version="1.0" encoding="utf-8" ?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>http://www.example.com/container/</D:href>
<D:propstat>
<D:prop>
<D:supportedlock>
<D:lockentry>
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
<D:lockentry>
<D:lockscope><D:shared/></D:lockscope>
<D:locktype><D:write/></D:locktype>
</D:lockentry>
</D:supportedlock>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>