My understanding is that BIP 21 reduces the level of processing of the Bitcoin URI by both humans and machines and makes the overall URI scheme simpler.
To have single representation of an amount fixed as decimal BTCs (decimal biased) means that people can easily read the value as presented in their client in a raw state (e.g. a browser) without having to do any specialised thinking. For example, a member of the general public attempting to decode "amount=500X0Y6" would fail utterly. Equally, machine processing is made simple because there will nearly always be a decimal in place, and further decimal positions (e.g. a move from 8dp to 10dp or whatever) won't invalidate earlier URIs.
The purpose of a URI is to provide a unique resource identifier, and good design typically means that one URI binds to one resource (although others can temporarily point to the same one). In this case the resource is interpreted as a payment request.
The notation for the "required parameter" was going to change from "req:" to "req-" in line with RFC 3986 Section 2.2 "Reserved Characters" but the edits may not have made it to the wiki yet.
Hmm, thanks for this informative post. I still don't understand why this would make decimal shifts easier, however, as the X parameter can easily be expanded to include a negative exponent (e.g., Z instead of X). According to the wiki, however, decimal points are not needed in BIP 21, which gives rise to the multiple-URI one semantic I outlined in my previous post.
I guess the design of BIP 21 focused on decoding the URI, while my proposal and understanding only considered making creating the URI more efficient and easier. To resolve this issue, I wrote a simple python script which would take a 500X0Y6 like parameter and convert it into a BIP 21 protocol string. Thanks again for clearing it up for me.
Is it possible to offer third-party extensions in BIP21? For example, having a bitcoin client support a field like "req-satoshi-detailedamount" or "armory-lowfee", without coordination between the client developers?