Una referencia numérica de caracteres ( NCR ) es una construcción de marcado común utilizada en SGML y lenguajes de marcado derivados de SGML, como HTML y XML . Consiste en una secuencia corta de caracteres que, a su vez, representa un único carácter. Desde WebSgml , XML y HTML 4 , se utilizan los puntos de código del Conjunto Universal de Caracteres (UCS) de Unicode . Las NCR se utilizan normalmente para representar caracteres que no se pueden codificar directamente en un documento en particular (por ejemplo, porque son caracteres internacionales que no se ajustan al conjunto de caracteres de 8 bits utilizado, o porque tienen un significado sintáctico especial en el lenguaje). Cuando un lector que reconoce el marcado interpreta el documento, cada NCR se trata como si fuera el carácter que representa.
Ejemplos
En SGML, HTML y XML, las siguientes son referencias numéricas válidas para la letra griega mayúscula Sigma.
En SGML, HTML y XML, las siguientes son referencias numéricas válidas para la letra mayúscula latina AE.
En SGML, HTML y XML, las siguientes son referencias numéricas válidas para la letra minúscula latina sharp s
Lista de referencias numéricas de caracteres para los caracteres ASCII imprimibles:
Discusión
Los lenguajes de marcado se definen normalmente en términos de caracteres UCS o Unicode. Es decir, un documento consiste, en su nivel de abstracción más fundamental, en una secuencia de caracteres, que son unidades abstractas que existen independientemente de cualquier codificación .
Idealmente, cuando los caracteres de un documento que utiliza un lenguaje de marcado se codifican para su almacenamiento o transmisión a través de una red como una secuencia de bits , la codificación utilizada será aquella que permita representar cada uno de los caracteres del documento, si no de todo Unicode, directamente como una secuencia de bits específica.
En ocasiones, por conveniencia o debido a limitaciones técnicas, los documentos se codifican con un sistema que no permite representar directamente algunos caracteres. Por ejemplo, las codificaciones ampliamente utilizadas basadas en la norma ISO 8859 solo pueden representar, como máximo, 256 caracteres únicos como un byte de 8 bits cada uno.
En la práctica, rara vez se permite que los documentos utilicen más de una codificación internamente, por lo que la responsabilidad suele recaer en el lenguaje de marcado para proporcionar a los autores de documentos un medio para expresar caracteres no codificables en términos de caracteres codificables. Esto generalmente se realiza mediante algún tipo de mecanismo de "escape" .
Los lenguajes de marcado basados en SGML permiten a los autores de documentos usar secuencias especiales de caracteres del rango ASCII (los primeros 128 puntos de código de Unicode) para representar o hacer referencia a cualquier carácter Unicode, independientemente de si el carácter representado está disponible directamente en la codificación del documento. Estas secuencias especiales son referencias de caracteres .
Las referencias de caracteres que se basan en el punto de código UCS o Unicode del carácter referenciado se denominan referencias numéricas de caracteres. En HTML 4 y en todas las versiones de XHTML y XML, el punto de código puede expresarse como un número decimal (base 10) o como un número hexadecimal (base 16). La sintaxis es la siguiente:
Carácter U+0026 ( ampersand ), seguido del carácter U+0023 ( signo de número ), seguido de una de las siguientes opciones:
- uno o más dígitos decimales del cero (U+0030) al nueve (U+0039); o
- carácter U+0078 ("x") seguido de uno o más dígitos hexadecimales, que son del cero (U+0030) al nueve (U+0039), la letra mayúscula latina A (U+0041) a la F (U+0046) y la letra minúscula latina a (U+0061) a la f (U+0066);
Todo ello seguido del carácter U+003B ( punto y coma ). Las versiones antiguas de HTML no permitían la sintaxis hexadecimal.
Los caracteres que componen una referencia numérica a caracteres pueden representarse en cualquier codificación de caracteres utilizada actualmente en informática y telecomunicaciones, por lo que no existe riesgo de que la referencia en sí misma no pueda codificarse.
Existe otro tipo de referencia de carácter llamada referencia de entidad de carácter , que permite hacer referencia a un carácter mediante un nombre en lugar de un número. (Nombrar un carácter crea una entidad de carácter ). HTML define algunas entidades de carácter, pero no muchas; todos los demás caracteres solo pueden incluirse mediante codificación directa o utilizando NCR.
Restricciones
El conjunto de caracteres universal definido por la norma ISO 10646 es el "conjunto de caracteres del documento" de SGML y HTML 4, por lo que, por defecto, cualquier carácter en dicho documento, y cualquier carácter al que se haga referencia en dicho documento, debe pertenecer al UCS.
Si bien la sintaxis de SGML no prohíbe las referencias a puntos de código no válidos o no asignados, como , los lenguajes de marcado derivados de SGML, como HTML y XML, pueden restringir, y a menudo lo hacen, las referencias a caracteres numéricos solo a aquellos puntos de código que están asignados a caracteres.
También pueden aplicarse restricciones por otras razones. Por ejemplo, en HTML 4, , que es una referencia a un carácter de control "salto de página" no imprimible, está permitido porque un carácter de salto de página está permitido. Pero en XML, el carácter de salto de página no se puede usar, ni siquiera por referencia. [ 1 ] Como otro ejemplo, , que es una referencia a otro carácter de control, no está permitido usarlo ni referenciarlo ni en HTML ni en XML, pero cuando se usa en HTML, generalmente no es marcado como un error por los navegadores web, algunos de los cuales lo interpretan como una referencia al carácter representado por el valor de código 128 en la codificación Windows-1252 por razones de compatibilidad. Este carácter, "€", debe representarse como en un código HTML que cumpla con el estándar. Como ejemplo adicional, antes de la publicación de la segunda edición de XML 1.0 el 6 de octubre de 2000, XML 1.0 se basaba en una versión anterior de ISO 10646 y prohibía el uso de caracteres superiores a U+FFFD, excepto en datos de caracteres, lo que hacía que una referencia como (U+10000) fuera ilegal. En XML 1.1 y ediciones posteriores de XML 1.0, dicha referencia está permitida, ya que el repertorio de caracteres disponible se amplió explícitamente.€€𐀀
Los lenguajes de marcado también imponen restricciones sobre dónde pueden aparecer las referencias a caracteres.
Problemas de compatibilidad
En las versiones iniciales de SGML y HTML , las referencias numéricas a caracteres se interpretaban según la codificación de caracteres del documento, en lugar de Unicode . Para documentos escritos en alfabeto latino, las referencias numéricas a caracteres entre x80 y x9F no serán correctas según Unicode y deberán recodificarse. Los estándares HTML anteriores a HTML 4 solo admitían documentos escritos en alfabeto latino occidental: el tratamiento de las referencias a caracteres superiores a #7F puede variar según la aplicación y las convenciones nacionales.
Por ejemplo, como se mencionó anteriormente, la referencia numérica correcta para el símbolo del euro "€" U+20ACal usar Unicode es decimal €y hexadecimal €. Sin embargo, si se utilizan herramientas que admiten implementaciones obsoletas de HTML, la referencia € (símbolo del euro en la página de códigos CP-1252 ) o ¤(símbolo del euro en ISO/IEC 8859-15 ) puede funcionar.
Como otro ejemplo, si un texto se creó originalmente usando el conjunto de caracteres MacRoman , la comilla doble izquierda " se representará con el punto de código xD2. Esto no se mostrará correctamente en un sistema que espera un documento codificado como UTF-8, ISO 8859-1 o CP-1252, donde este punto de código está ocupado por la letra Ò . La referencia de carácter numérica correcta para " en HTML 4 y posteriores es “, porque U+ 201C es su código UCS. En algunos sistemas, también puede estar disponible la referencia de carácter con nombre“ .
Véase también
Referencias
- ↑ "HTML 5.2: 8. La sintaxis HTML" . www.w3.org .
- HTML
- Unicode
- XML