Équipe d'ingénierie de l'Internet (IETF)	C. Daboo, Apple Inc.	
Request for Comments: 5689	septembre 2009	
RFC mises à jour : 4791, 4918 		
Catégorie : Sur la voie de la normalisation		
ISSN: 2070-1721	Traduction Claude Brière de L'Isle	

Extension de MKCOL pour répertorier les auteurs et les versions réparties sur la Toile (WebDAV)

Résumé
La présente spécification étend la méthode "faire une collection" (MKCOL, Make Collection) de répertoire des auteurs et des versions réparti sur la Toile (WebDAV, Web Distributed Authoring and Versioning) pour permettre la création de collections de types de ressources arbitraires et permettre en même temps d'établir les propriétés.

Statut de ce mémoire
Ceci est un document de l’Internet sur la voie de la normalisation.

Le présent document a été produit par l’équipe d’ingénierie de l’Internet (IETF). Il représente le consensus de la communauté de l’IETF. Il a subi une révision publique et sa publication a été approuvée par le groupe de pilotage de l’ingénierie de l’Internet (IESG). Tous les documents approuvés par l’IESG ne sont pas candidats à devenir une norme de l’Internet ; voir la Section 2 de la RFC5741.

Les informations sur le statut actuel du présent document, tout errata, et comment fournir des réactions sur lui peuvent être obtenues à http://www.rfc-editor.org/info/rfc5689 

Notice de droits de reproduction
Copyright (c) 2009 IETF Trust et les personnes identifiées comme auteurs du document. Tous droits réservés.

Le présent document est soumis au BCP 78 et aux dispositions légales de l’IETF Trust qui se rapportent aux documents de l’IETF (http://trustee.ietf.org/license-info) en vigueur à la date de publication de ce document. Prière de revoir ces documents avec attention, car ils décrivent vos droits et obligations par rapport à ce document. Les composants de code extraits du présent document doivent inclure le texte de licence simplifié de BSD comme décrit au paragraphe 4.e des dispositions légales du Trust et sont fournis sans garantie comme décrit dans la licence de BSD simplifiée.

Le présent document peut contenir des matériaux provenant de documents de l’IETF ou de contributions à l’IETF publiées ou rendues disponibles au public avant le 10 novembre 2008. La ou les personnes qui ont le contrôle des droits de reproduction sur tout ou partie de ces matériaux peuvent n’avoir pas accordé à l’IETF Trust le droit de permettre des modifications de ces matériaux en dehors du processus de normalisation de l’IETF. Sans l’obtention d’une licence adéquate de la part de la ou des personnes qui ont le contrôle des droits de reproduction de ces matériaux, le présent document ne peut pas être modifié en dehors du processus de normalisation de l’IETF, et des travaux dérivés ne peuvent pas être créés en dehors du processus de normalisation de l’IETF, excepté pour le formater en vue de sa publication comme RFC ou pour le traduire dans une autre langue que l’anglais.
Table des matières
1. Introduction	2
2. Conventions utilisées dans ce document	2
3. MKCOL étendue pour WebDAV	2
3.1 Prise en charge de MKCOL étendue	3
3.2 Codes d'état	3
3.3 Précondition supplémentaire pour MKCOL étendue	3
3.4 Exemple : demande réussie de MKCOL étendue	3
3.5 Exemple : échec de demande MKCOL étendue	4
4. Utilisation de MKCOL étendue comme remplacement des méthodes MKxxx	5
4.1 Alternative à MKCALENDAR	5
5. Définitions d'élément XML	7
5.1 Élément XML mkcol	7
5.2 Élément XML mkcol-response	7
6. Considérations sur la sécurité	7
7. Remerciements	7
8. Références normatives	7
Adresse de l'auteur	8

 	1.	Introduction

WebDAV [RFC4918] définit la méthode HTTP [RFC2616] MKCOL. Cette méthode est utilisée pour créer des collections WebDAV sur le serveur. Cependant, plusieurs spécifications fondées sur WebDAV (par exemple, CalDAV [RFC4791]) définissent des collections "spéciales" -- qui sont identifiées par des valeurs supplémentaires dans la propriété DAV:ressourcetype allouée à la ressource de collection ou par d'autres moyens. Ces collections "spéciales" sont créées par de nouvelles méthodes (par exemple, MKCALENDAR). L'ajout d'une nouvelle méthode MKxxx pour chaque nouvelle collection "spéciale" ajoute à la complexité du serveur et est au détriment de la fiabilité globale due à la nécessité de s'assurer que les intermédiaires connaissent ces méthodes.

La présente spécification définit une extension à la méthode WebDAV MKCOL qui ajoute un corps de demande permettant à un client de spécifier des propriétés WebDAV à établir sur la nouvelle collection ou ressource créée. En particulier, la propriété DAV:resourcetype peut être utilisée pour créer une collection "spéciale" ; autrement, d'autres propriétés peuvent être utilisées pour créer une ressource "spéciale". Cela évite d'avoir à inventer de nouvelles méthodes MKxxx.

 	2.	Conventions utilisées dans ce document

Les mots clés "DOIT", "NE DOIT PAS", "EXIGE", "DEVRA", "NE DEVRA PAS", "DEVRAIT", "NE DEVRAIT PAS", "RECOMMANDE", "PEUT", et "FACULTATIF" en majuscules dans ce document sont à interpréter comme décrit dans le BCP 14, [RFC2119].

Le présent document utilise des fragments de DTD XML (paragraphe 3.2 de [xml-20081126]) comme une pure convention de notation. Les cœurs de demande et réponse WebDAV ne peuvent pas être validés par un DTD à cause des règles d'extensibilité spécifiques définies à la Section 17 de la [RFC4918] et du fait que tous les éléments XML définis par la présente spécification utilisent le nom d'espace de noms XML "DAV:". En particulier :

1.	Les noms d'éléments utilisent l'espace de noms "DAV:".

2.	L'ordre des éléments n'est pertinent que déclaré explicitement.

3.	Les éléments d'extension (éléments non déjà définis comme éléments fils valides) peuvent être ajoutés partout, sauf mention contraire explicite.

4.	Les attributs d'extension (attributs non déjà définis comme valides pour cet élément) peuvent être ajoutés partout, sauf mention contraire explicite.

Quand un type d'élément XML dans l'espace de noms "DAV:" est référencé dans le présent document en dehors du contexte d'un fragment XML, la chaîne "DAV:" va être mise en préfixe devant le type d'élément.

Le présent document hérite, et parfois étend, les productions de DTD de la Section 14 de la [RFC4918].

 	3.	MKCOL étendue pour WebDAV

La demande WebDAV MKCOL est étendue pour permettre l'inclusion d'un corps de demande. Le corps de demande est un document XML contenant un seul élément XML DAV:mkcol comme élément racine. L'en-tête de demande Content-Type DOIT être réglé de façon appropriée pour un corps XML (par exemple, réglé à "text/xml" ou "application/xml"). Les corps de type XML pour une demande MKCOL qui n'ont pas de DAV:mkcol comme élément racine sont réservés pour une utilisation future.

Un ou plusieurs éléments XML DAV:set peuvent être inclus dans l'élément XML DAV:mkcol pour permettre de régler les propriétés sur la collection lors de sa création. En particulier, pour créer une collection d'un type particulier, l'élément XML DAV:resourcetype DOIT être inclus dans un élément XML DAV:set et DOIT spécifier les éléments de type de ressource attendu pour la nouvelle ressource, qui DOIVENT inclure l'élément DAV:collection qui doit être présent pour toute collection WebDAV.

Selon la méthode PROPPATCH (paragraphe 9.2 de la [RFC4918]) les serveurs DOIVENT traiter toutes les instructions DAV:set dans l'ordre du document (exception à la règle normale que l'ordre n'a pas d'importance). Si une instruction échoue à s'exécuter, toutes les instructions DOIVENT échouer (c'est-à-dire, soit toutes réussissent, soit toutes échouent). Donc, si une erreur se produit durant le traitement, toutes les instructions exécutées DOIVENT être défaites et un résultat d'erreur approprié être retourné. L'échec à établir une valeur de propriété sur la collection DOIT résulter en l'échec de toute la demande MKCOL -- c'est-à-dire, la collection n'est pas créée.

La réponse à une demande MKCOL étendue DOIT être un document XML contenant un seul élément XML DAV:mkcol-response, qui DOIT contenir des éléments XML DAV:propstat avec l'état de chaque propriété quand la demande échoue à cause de l'échec de l'établissement de une ou plusieurs des propriétés spécifiées dans le corps de la demande. Le serveur PEUT retourner un corps de réponse dans le cas où la demande réussit, indiquant le succès de l'établissement de chaque propriété spécifiée dans le corps de la demande. Quand un corps de réponse vide est retourné avec un code d'état de demande réussie, le client peut supposer que toutes les propriétés ont été établies.

À tous les autres égards, le comportement de la demande MKCOL étendue suit celui de la demande MKCOL standard.

 	3.1	Prise en charge de MKCOL étendue
Un serveur qui prend en charge les caractéristiques décrites dans le présent document DOIT inclure "extended-mkcol" comme champ dans l'en-tête de réponse DAV provenant d'une demande OPTIONS sur un URI qui prend en charge l'utilisation de la méthode MKCOL étendue.

 	3.1.1	Exemple : utilisation de OPTIONS pour la découverte de la prise en charge de MKCOL étendue
>> Demande <<

   OPTIONS /addressbooks/users/ HTTP/1.1
   Host: addressbook.exemple.com

>> Réponse <<

   HTTP/1.1 200 OK
   Allow: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, COPY, MOVE
   Allow: MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, REPORT, ACL
   DAV: 1, 2, 3, access-control, extended-mkcol
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Length: 0

 	3.2	Codes d'état
Comme au paragraphe 9.3.1 de la [RFC4918].

 	3.3	Précondition supplémentaire pour MKCOL étendue
WebDAV ([RFC4918], Section 16) définit des préconditions et postconditions pour le comportement de demande. La présente spécification ajoute la précondition suivante pour la demande MKCOL étendue.

Nom : valid-resourcetype
Espace de noms : DAV:
Utilisé avec : normalement 403 (Interdit)
Objet : (précondition) -- Le serveur DOIT prendre en charge la valeur resourcetype spécifiée pour la collection spécifiée.

 	3.4	Exemple : demande réussie de MKCOL étendue
Cet exemple montre comment la demande MKCOL étendue est utilisée pour créer une collection d'un type fictif "special-resource". Le corps de réponse est vide car la demande s'est achevée avec succès.

>> Demande <<

   MKCOL /home/special/ HTTP/1.1
   Host: special.exemple.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:mkcol xmlns:D="DAV:" xmlns:E="http://exemple.com/ns/">
     <D:set>
       <D:prop>
         <D:resourcetype>
           <D:collection/>
           <E:special-resource/>
         </D:resourcetype>
         <D:displayname>Special Resource</D:displayname>
       </D:prop>
     </D:set>
   </D:mkcol>

>> Réponse <<

   HTTP/1.1 201 Created
   Cache-Control: no-cache
   Date: Sat, 11 Nov 2006 09:32:12 GMT

 	3.5	Exemple : échec de demande MKCOL étendue
Cet exemple montre une tentative d'utiliser la demande MKCOL étendue pour créer une collection d'un type fictif "special-resource", qui n'est en fait pas pris en charge par le serveur. Le corps de réponse montre qu'une erreur s'est produite spécifiquement avec la propriété DAV:resourcetype.

>> Demande <<

   MKCOL /home/special/ HTTP/1.1
   Host: special.exemple.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:mkcol xmlns:D="DAV:" xmlns:E="http://exemple.com/ns/">
     <D:set>
       <D:prop>
         <D:resourcetype>
           <D:collection/>
           <E:special-resource/>
         </D:resourcetype>
         <D:displayname>Special Resource</D:displayname>
       </D:prop>
     </D:set>
   </D:mkcol>

>> Réponse <<

   HTTP/1.1 403 Forbidden
   Cache-Control: no-cache
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:mkcol-response xmlns:D="DAV:">
     <D:propstat>
       <D:prop>
         <D:resourcetype/>
       </D:prop>
       <D:status>HTTP/1.1 403 Forbidden</D:status>
       <D:error><D:valid-resourcetype /></D:error>
       <D:responsedescription>Type de ressource non accepté par ce serveur</D:responsedescription>
     </D:propstat>
     <D:propstat>
       <D:prop>
         <D:displayname/>
       </D:prop>
       <D:status>HTTP/1.1 424 Échec de dépendance</D:status>
     </D:propstat>
   </D:mkcol-response>

 	4.	Utilisation de MKCOL étendue comme remplacement des méthodes MKxxx

Un des buts de cette extension est d'éliminer le besoin d'autres extensions pour définir leur propre variante de MKCOL pour créer les collections spéciales dont elles ont besoin. Cette extension peut être utilisée comme solution de remplacement aux méthodes MKxxx existantes dans d'autres extensions comme précisé ci-dessous. Si un serveur prend en charge cette extension et l'autre extension mentionnée, alors le serveur DOIT prendre en charge l'utilisation de la méthode MKCOL étendue pour réaliser le même résultat que la méthode MKxxx de l'autre extension.

 	4.1	Alternative à MKCALENDAR
CalDAV définit la méthode MKCALENDAR pour créer une collection de calendrier ainsi qu'établir les propriétés durant la création (paragraphe 5.3.1 de la [RFC4791]).

La méthode MKCOL étendue peut être utilisée à la place en spécifiant à la fois les éléments XML DAV:collection et CALDAV:calendar-collection dans la propriété DAV:resourcetype, établie durant la demande MKCOL étendue.

 	4.1.1	Exemple : utilisation de MKCOL en remplacement de MKCALENDAR
Le premier exemple ci-dessous montre une demande MKCALENDAR contenant un élément XML CALDAV:mkcalendar dans le corps de demande et retournant un élément XML CALDAV:mkcalendar-response dans le corps de réponse.

>> Demande MKCALENDAR <<

   MKCALENDAR /home/lisa/calendars/events/ HTTP/1.1
   Host: calendar.exemple.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <C:mkcalendar xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:set>
       <D:prop>
         <D:displayname>Événements de Lisa</D:displayname>
       </D:prop>
     </D:set>
   </C:mkcalendar>

>> Réponse MKCALENDAR <<

   HTTP/1.1 201 Created
   Cache-Control: no-cache
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <C:mkcalendar-response xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:propstat>
       <D:prop>
         <D:displayname/>
       </D:prop>
       <D:status>HTTP/1.1 200 OK</D:status>
     </D:propstat>
   </C:mkcalendar-response>

Le second exemple montre la demande MKCOL étendue équivalente avec les mêmes éléments XML de demande et réponse.

>> Demande MKCOL <<

   MKCOL /home/lisa/calendars/events/ HTTP/1.1
   Host: calendar.exemple.com
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:mkcol xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:set>
       <D:prop>
         <D:resourcetype>
           <D:collection/>
           <C:calendar/>
         </D:resourcetype>
         <D:displayname>Événements de Lisa</D:displayname>
       </D:prop>
     </D:set>
   </D:mkcol>

>> Réponse MKCOL <<

   HTTP/1.1 201 Created
   Cache-Control: no-cache
   Date: Sat, 11 Nov 2006 09:32:12 GMT
   Content-Type: application/xml; charset="utf-8"
   Content-Length: xxxx

   <?xml version="1.0" encoding="utf-8" ?>
   <D:mkcol-response xmlns:D="DAV:"
                 xmlns:C="urn:ietf:params:xml:ns:caldav">
     <D:propstat>
       <D:prop>
         <D:resourcetype/>
         <D:displayname/>
       </D:prop>
       <D:status>HTTP/1.1 200 OK</D:status>
     </D:propstat>
   </D:mkcol-response>

 	5.	Définitions d'élément XML
 	5.1	Élément XML mkcol
Nom : mkcol
Espace de noms : DAV:
Objet : utilisé dans une demande pour spécifier les propriété à établir dans une demande MKCOL étendue, ainsi que toutes les informations supplémentaires nécessaires pour créer la ressource.
Description : Cet élément XML est un conteneur pour les informations exigées pour modifier les propriétés d'une ressource de collection lorsque elle est créée dans une demande MKCOL étendue.
Définition : <!ELEMENT mkcol (set+)>

 	5.2	Élément XML mkcol-response
Nom : mkcol-response
Espace de noms : DAV:
Objet : utilisé dans une réponse pour indiquer l'état des propriétés qui ont été établies ou dont l'établissement a échoué durant une demande MKCOL étendue.
Description : cet élément XML est un conteneur pour les informations retournées sur une ressource créée dans une demande MKCOL étendue.
Définition : <!ELEMENT mkcol-response (propstat+)>

 	6.	Considérations sur la sécurité

Cette extension n'introduit aucun nouveau problème de sécurité au delà de ceux déjà décrits dans HTTP [RFC2616] et WebDAV [RFC4918].

 	7.	Remerciements

Merci à Bernard Desruisseaux, Mike Douglass, Alexey Melnikov, Julian Reschke, et à Simon Vaillancourt.

 	8.	Références normatives

[RFC2119]	S. Bradner, "Mots clés à utiliser dans les RFC pour indiquer les niveaux d'exigence", BCP 14, mars 1997. DOI 10.17487/RFC2119, (MàJ par RFC8174)

[RFC2616]	R. Fielding et autres, "Protocole de transfert hypertexte -- HTTP/1.1", juin 1999. (D.S., MàJ par 2817, 6585)

[RFC4791]	C. Daboo et autres, "Extensions de calendrier à WebDAV (CalDAV)", mars 2007. (P.S., MàJ par 6637, 7809, 7953)

[RFC4918]	L. Dusseault, éd. "Extensions HTTP pour les informations d'auteur et de version distribuées sur la Toile (WebDAV)", juin 2007. (Remplace RFC2518) (P.S.)

[xml-20081126]	Maler, E., Yergeau, F., Paoli, J., Bray, T., and C. Sperberg-McQueen, "Extensible Markup Language (XML) 1.0 (Fifth Edition)", World Wide Web Consortium Recommendation REC-xml-20081126, novembre 2008, <http://www.w3.org/TR/2008/REC-xml-20081126>.

 	Adresse de l'auteur

Cyrus Daboo
Apple Inc.
1 Infinite Loop
Cupertino, CA  95014
USA

mél : cyrus@daboo.name
URI : http://www.apple.com/