Binding loops and PROPFIND clarification needed (was Re: COPY and bindings)

Reading this discussion has brought up another point of confusion that 
may need clarification in the spec. If you have a binding loop and you 
are doing a Depth: infinity PROPFIND, you either (correct me if I'm 
wrong, 'course):

a) return a 506 Loop Detected error
b) return a 207 Multistatus containing responses and when you come 
across loops, identify them as such with a 506 Loop Detected

What's unclear to me (perhaps due to the example given in the spec) is 
that, in the second case, do you continue traversing the tree when a 506 
is encountered or do you terminate traversal?

For example, if you had the following example:
             --C-
            v      |
1-A->2-B->3
   -D->4

Sorry for the poor ASCII graphics and it's probably unreadable. The 
numbers represent unique resources (think of them as resource id's.) The 
textual description is that the root collection "/" contains two members 
"/A" and "/D". "/A" contains one member "/A/B" and "/A/B" contains one 
member "/A/B/C" which is bound to "/A" (resource id 2).

Now, presuming we do a depth-first search and we go down "/A/B" first, 
we would report a 200 for "/A", a 200 for "/A/B", a 506 for the loop 
"/A/B/C", and a 200 for "/A/D". Correct? Or do I report a 200 for 
"/A/B/C" and then a 506 for the fact that "/A/B/C" created a loop?

How would I tell where the loop connected to? (i.e. how do I tell the 
loop goes back to resource id 2 and not 1?) Would I do a followup 
PROPFIND on "/A/B/C" to determine the resource id? What if I got back 10 
506 responses?

Would it be possible (correct) to either report a 200 for "/A/B/C" 
(containing the resource-id property) and then a 506? Or perhaps a 
"Resource-ID" HTTP header in the 506 response?

This is important if we want clients to be able to replicate loops 
across servers.

Received on Friday, 11 July 2003 17:40:29 UTC