Thanks for the insightful points.
I don't believe that it's specified that "" is a reference to the
current document, it's just that that interpretation is a consequence
of other things that it does say.
Ok.
This is because the resolution of schemaLocation="path/path/filename"
is taken as a relative URI from the base URI, which is (typically) the
current document (unless overridden specifically). So the degenerate
case of a relative URI is "", which when combined with base URI, is the
current document (unless base URI is set to something else, in which
case it's still base URI, but it's not the current document).
Ok.
Your alternative also seems reasonable, if that's how your resolvers
work, but to do so you'd have to special case "". If you don't
special-case it, then "" == base URI (because appending nothing to base
URI has that effect). In your case, presumably you're treating it as an
absolute (null) URI, rather than as a relative URI?
I had reported my <xs:include> URI resolution findings for Xerces-J by using the Xerces sample jaxp.SourceValidator [1]. This seems to ignore the XSD instruction, <xs:include schemaLocation=""/>. It doesn't present a warning like Saxon does, that "" could be a reference to the including XSD document.
It seems that, for XSD validation with Xerces-J, we can customize the URI resolution method for <xs:include>, <xs:import> etc. I guess, we can use an API like [2] (I haven't used this much before. I'm answering only by looking at Xerces-J docs).