字符值引用
字符值引用(numeric character reference, NCR)是在标记语言SGML以及派生的如HTML与XML中常见的一种转义序列结构,用来表示Unicode的通用字符集 (UCS)中的单个字符. NCR可以表示在一个特定文档中不能直接编码的字符,而该标记语言阅读器软件把每个NCR当作一个字符来处理。
例如,在ISO/IEC 8859-1编码的网页文件中使用了俄文字母或者希腊字母。由于该编码不支持这些字母,就需要用NCR来表示。网页浏览器可以正确地把这些NCR绘制为相应的西里尔字母或希腊字母。
例子
在SGML, HTML, XML中, 下述是希腊字母Sigma的有效的字符值引用:
U+03A3 Σ GREEK CAPITAL LETTER SIGMA (3A316 = 93110) | |||
Unicode字符 | 进位制 | 标记语言中的字符值引用 | 效果 |
---|---|---|---|
U+03A3 | 十进制 | Σ | Σ |
U+03A3 | 十进制 | Σ | Σ |
U+03A3 | 十六进制 | Σ | Σ |
U+03A3 | 十六进制 | Σ | Σ |
U+03A3 | 十六进制 | Σ | Σ |
描述
标记语言使用的字符编码方法(如ISO-8859),常常不能表示所有的Unicode字符,这就需要使用“转义”机制来处理这些不能编码的字符。
基于SGML的标记语言允许使用7比特ASCII字符(即Unicode的前128个码位)的序列来表示或者说引用任何Unicode字符. 基于Unicode字符"码位"的字符引用被称作字符值引用. HTML 4与所有版本的XHTML及XML, 这些Unicode字符的码位可以表示为十进制或十六进制. 语法如下:
字符U+0026 (&), 后跟随U+0023 (#), 后跟随下列选择之一:
- 一个或更多十进制数字0(U+0030)到9(U+0039);
- 字符U+0078 (x)后跟随一个或更多个十六进制数字, 包括从0 (U+0030)到9(U+0039), 大写拉丁字母从A (U+0041)到F (U+0046), 小写拉丁字母从a(U+0061)到f(U+0066);
上述两种选择情形之后,跟随字符U+003B (;). 老的版本的HTML不支持十六进制表示法.
另外一种字符引用被称作字符实体引用, 允许字符用其名字而不是码位的值来引用. HTML定义了一些字符实体,但是并不多 ; 其它字符只能直接用NCR来引用.
限制
通用字符集(UCS)是SGML以及HTML 4的文档字符集, 因此缺省地, 用这些标记语言写的文档的所有字符,必须出自UCS.
同时SGML并不禁止引用一个Unicode中未赋予字符的码位, 例如
。SGML派生的标记语言如HTML与XML限于引用那些赋予字符的码位以及那些没有永久性保留不赋予字符的码位.
还存在其它的限制情况. 例如在HTML 4中, 
, 引用了一个不可显示的字符"换页"控制字符,这是被允许的。但在XML中, 不能使用换页符, 甚至不能引用换页符. 另一个例子, €
引用另外一个控制字符,在HTML与XML中不能使用、引用, 但是如果出现在HTML中, 网页浏览器通常不会把它标记为一个错误—有的甚至把它解释为Windows-1252编码中码位为128的字符: "€",虽然这个字符应该表示为字符值引用€
. 进一步的例子, 在2000年10月6日XML 1.0第二版发布之前,XML 1.0是基于老版的ISO 10646因此禁止使用码位大于U+FFFD的字符,因此引用𐀀
(U+10000)字符是非法的。在XML 1.1与更新版本的XML 1.x, 这些引用是允许的,因为字符库(repertoire)被大大扩展了。
参见
參考文獻
- TEI guidelines
- Markup systems and the future of scholarly text processing 页面存档备份,存于 by James H. Coombs, Allen H. Renear, and Steven J. DeRose. Originally published in the November 1987 CACM, and reprinted several times in other forums, this article introduced many of the concepts now used in discussing markup languages, and lays out the basic arguments for the superior usability of descriptive markup.