Que deviennent en Unicode les notions de lettre, de chiffre, etc
que nous connaissons en ASCII ?
NB. Sauts de ligne : le caractère CR (#x0D) n'a pas droit de cité !
Il est réputé avoir été remplacé par LF (#x0A) avant tout traitement.
La norme définissant XML (http://www.w3.org/TR/2006/REC-xml-20060816/#CharClasses)
déclare 5 classes de caractères Unicode, en se fondant sur les informations contenues dans la base Unidata.
Ce sont :
- les caractères de base (BaseChar)
- les idéogrammes (Ideographic)
- les diacritiques (CombiningChar)
- les chiffres (Digit)
- les extensions (Extenders)
Les lettres (Letter) sont ensuite définies comme BaseChar + Ideographic.
Pour formuler sa spécification, la norme ne se réfère pas
officiellement à la base Unidata (elle la mentionne à titre de
commentaire informatif).
Elle énumére directement les intervalles de numéros Unicode qui constituent les différentes classes.
Cette énulération est compliquée du fait des lacunes dans l'énumération Unicode elle-même,
Exemple du tamoul :
L'ensemble des caractères de base tamouls est
[#x0B85-#x0B8A] | [#x0B8E-#x0B90] | [#x0B92-#x0B95] | [#x0B99-#x0B9A] | #x0B9C | [#x0B9E-#x0B9F]
| [#x0BA3-#x0BA4] | [#x0BA8-#x0BAA] | [#x0BAE-#x0BB5] | [#x0BB7-#x0BB9]
qui décrit exactement toutes les voyelles initiales et toutes les consonnes tamoules.
Il exclut #x0B82 et #x0B83 (anusvara & visarga), ainsi que les matras des voyelles et le virama.
Ces derniers figurent tous parmi les diacritiques, où on trouve
[#x0B82-#x0B83] | [#x0BBE-#x0BC2] | [#x0BC6-#x0BC8] | [#x0BCA-#x0BCD] | #x0BD7
tandis que les chiffres tamouls [#x0BE7-#x0BEF] se trouvent parmi les Digits,
mais pas les symboles de nombres (10, 100, 1000), ni les symboles d'année, etc,
à savoir toute la plage [#x0BF0-#x0BFA] qui apparemment n'est nulle part.
Par une aberration étrange, aucun caractère du syllabaire éthiopien [#x1200#x135A] n'est acceptble à aucun titre....
La grammaire de base est alors
Names and Tokens
NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | CombiningChar | Extender
Name ::= (Letter | '_' | ':') (NameChar)*
Names ::= Name (#x20 Name)*
Nmtoken ::= (NameChar)+
Nmtokens ::= Nmtoken (#x20 Nmtoken)*
sachant que
- Name est la classe lexicale des noms de balise et des noms d'attributs.
- les valeurs d'attributs sont beaucoup moins contraintes : pas de '<' ou de '&', et placé entre '"' ou "'"
AttValue ::= '"' ([^<&"] | Reference)* '"'
| "'" ([^<&'] | Reference)* "'"
Reference ::= EntityRef | CharRef
EntityRef ::= '&' Name ';'
CharRef ::=
'&#' [0-9]+ ';'| '&#x' [0-9a-fA-F]+
';'