For background, for readers who don't know what normalization is: consider A with an angstrom diacritical: a legacy character set may use two one character to represent A and one character to represent combining the angstrom, or it may use one. Unicode supports both forms ( U+0041 U+0301 i.e. NFD, and U+0058 i.e. NFC) , and they are invisible to the eye and disruptive for simple collating and string matching.
Actually. there are three cases:
1) U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE
2) U+212B ANGSTROM SIGN
3) U+0041 LATIN SMALL LETTER A followed by U+030A COMBINING RING ABOVE
Normalization form C will reduce all three to case 1 (and normalization form D will reduce all three to case 3).
First, to confirm the status quo: as I understand it:
- XML 1.0 (5th) says non-normatively to use NFC for 1. names: element
names, attribute names, entity names, name tokens in attribute values as
best practise.
Correct.
Correct. (I wish the W3C would deprecate XML 1.1 once and for all.)
(My proposal for my system is that normalization of names (to NFC) is a server-side responsibility, which clients may check for: or they may build name normalization in themselves too. This only applies to tokens that are not in double quotes, not to strings or literals. (I will update the documentation on
www.schematron.com for RAN: Random Access Notation with this. )
As I said before, normalization should be left to processes that do comparison or searching. No flavor of XML normalizes start-tags or end-tags; if they don't match using verbatim code points, you are out of luck.