Is there a reason to have identical interfaces called DocumentSelector and ElementSelector that are identical? Would it not make sense to just define a NodeSelector or something and require Document and Element nodes to implement it? The confromance requirement could be easily stated in terms of descendants of the Node in question in a way that would work for both Document and Element nodes...
-Boris