On Sun, Feb 3, 2013 at 1:31 PM, Oren Ben-Kiki <yaml-oren@ben-kiki.org> wrote:
The question isn't one of ease of parsing (we all know YAML isn't easy to parse :-).

:-) Indeed!

It is a matter of ambiguity. The !<verbatim> syntax was added very late in the game, to allow avoiding the tag prefix games.   
 
The thinking isn't "domain" vs. "local", the thinking is "full arbitrary URI" (inside <...>) vs. "suffix added to some arbitrary URI prefix" (without the <...>). The difference between "!", "!!" and "!foo!" is just "which URI prefix should we use here".

Though in practice that's what people see. Perhaps the better terminology is "globally unique" vs "local" tags. Although determining if a prefix is applied would depend on whether the tag contains a `:` or not, sticking with current spec, !<...> tags would still not resolve. To clarify the difference:

    %TAG ! tag:foo.org/
    --- 
    - !foo                   => !<tag:foo.org/foo>
    - !tag:bar.org/bar   => !<tag:bar.org/bar>

Also, I think this would open up `!<foo>` to be a legal local tag, rather then the degenerate global tag it is now b/c it is not a valid URI. So, without a `%TAG !` directive:

    ---
    - !foo                 => !<foo>

So the `!` would no longer have any significance if a tags *name*. It would be used only to designate a tag and to sub prefixes, but a local tag would not need to be `!foo` any more, just `foo`.

If we said "we don't attach any prefix if what follows the "!" looks like a complete URI" we'd be entering a world of pain. URIs can be in all sort of forms: "urn:isbn:0-395-36341-1" is a URI and hence (if someone wanted) !<urn:isbn:0-395-36341-1> would be a valid (if somewhat insane) tag. So "looking like a complete URI" isn't really easy to define. "Looking like a tag URI" is well-defined, but YAML really doesn't insist on using "tag URIs", even though we call the "node type tags", well, tags.

I'm not seeing how this translates into be a world of pain. Keeping it simple, as in "does it contain a `:`" should suffice b/c `:` is required of a valid URI. Local tags can live without them. Some adjustment might be required by end users in rare cases. Like your example, they could use !<urn:isbn#0-395-36341-1>. I don't think it's too much to ask of end-users that local tags not use `:`. (If it really is too much to ask then perhaps a different escape notion could be allowed, e.g `![urn:isbn:0-395-36341-1]`.

(Note, before I suggested that `/` be an indicator of global tag too. In that case if no `:` is present, `tag:` would be assumed. That just seemed like a nice convenience, but it is not necessary.)