On page 4-100 and 4-101 in the 1.4.1 specification document, there is some code that purports to show how weights are assigned to bones.
In this code, there are weights assigned to bones -1 through 3. This makes sense, as -1 means “bind pose” and 0…3 means the four joints defined.
However, it then goes on to use blend weights with index 0…4. This confuses me, as there are only 4 blend weights defined – it seems that a weight index of 4 would be out-of-bounds for the data defined. Is this a typo, or am I misunderstanding something?
It seems to be a typo, all arrays I’ve encountered in COLLADA are zero based, and as you mention, 4 would be out of bounds.
I have not encountered a file that uses the bind shape (whatever that means in this context).
I recommend looking at functional dae files from the Model Bank rather than rely on the samples in the spec, most of the time the spec samples are incomplete or contain just the minimal information to get you started.