Texto después del # en una URI de recurso
En el hipertexto informático , un fragmento de URI es una cadena de caracteres que hace referencia a un recurso subordinado a otro recurso principal. El recurso principal se identifica mediante un identificador uniforme de recursos (URI) y el identificador del fragmento apunta al recurso subordinado.
El identificador de fragmento introducido por una almohadilla #
es la última parte opcional de una URL para un documento. Se utiliza normalmente para identificar una parte de ese documento. La sintaxis genérica se especifica en RFC 3986. [1] El separador de almohadilla en las URI no forma parte del identificador de fragmento.
Lo esencial
En las URI, un signo de almohadilla #
introduce el fragmento opcional cerca del final de la URL. La sintaxis genérica RFC 3986 para las URI también permite una parte de consulta opcional introducida por un signo de interrogación ?
. En las URI con una consulta y un fragmento, el fragmento sigue a la consulta. Las partes de la consulta dependen del esquema de la URI y son evaluadas por el servidor (por ejemplo, http:
admite consultas a diferencia de ) ftp:
. Los fragmentos dependen del tipo MIME del documento y son evaluados por el cliente ( navegador web ). Se supone que los clientes no deben enviar fragmentos de la URI a los servidores cuando recuperan un documento. [1] [2]
La sintaxis genérica permite que una URL que termine en #
, sea un tipo de fragmento vacío. En los tipos de documentos MIME como text/html
o cualquier tipo XML, no se permiten identificadores vacíos que coincidan con esta construcción sintácticamente legal. Los navegadores web suelen mostrar la parte superior del documento para un fragmento vacío.
El identificador de fragmento funciona de manera diferente al resto de la URI: su procesamiento es exclusivamente del lado del cliente sin participación del servidor web , aunque el servidor normalmente ayuda a determinar el tipo MIME, y el tipo MIME determina el procesamiento de los fragmentos. Cuando un agente (como un navegador web) solicita un recurso web de un servidor web, el agente envía la URI al servidor, pero no envía el fragmento. En cambio, el agente espera a que el servidor envíe el recurso y luego el agente procesa el recurso de acuerdo con el tipo de documento y el valor del fragmento. [3]
En una página web HTML, el agente buscará un ancla identificado con una etiqueta HTML que incluya un atributo id=
o name=
igual al identificador del fragmento.
Ejemplos
- En las URI de páginas MIME
text/html
como http://www.example.org/foo.html#bar
el fragmento se refiere al elemento con id="bar"
.- Los navegadores web gráficos generalmente se desplazan para posicionar las páginas de modo que la parte superior del elemento identificado por el identificador del fragmento esté alineada con la parte superior de la ventana gráfica; [4] por eso los identificadores de fragmentos se usan a menudo en las tablas de contenido.
- La apariencia del elemento identificado se puede cambiar a través de la pseudoclase
:target
CSS . [5] Wikipedia utiliza esto para resaltar la referencia seleccionada. Cabe destacar que CSS display: block
se puede utilizar para mostrar contenido solo si es el objetivo y, de lo contrario, se oculta mediante display: none
. - El
name
atributo del <a>
elemento cumplía la misma función, pero ahora está obsoleto en favor del id
atributo, que se puede aplicar a cualquier elemento. [6]
- En todos los tipos de documentos XML , incluidos los fragmentos XHTML correspondientes a un atributo
xml:id
o id
atributos similares, se sigue la Name
sintaxis y comienzan con una letra, un guión bajo o dos puntos. Cabe destacar que no pueden comenzar con un dígito o un guión. [7]xml:id
es uno de los pocos atributos XML genéricos, por ejemplo, xml:lang
, que se pueden usar sin declarar explícitamente un espacio de nombres. [8] En XHTML id
también se puede usar y parece ser el preferido, [9] [10] porque XHTML se especificó antes de que xml:id
existiera.
- En aplicaciones XML, los identificadores de fragmentos en una sintaxis determinada pueden ser XPointers ; [11] [12] por ejemplo, el identificador de fragmento en el URI
http://www.example.org/foo.xml#xpointer(//Rube)
hace referencia a todos los elementos XML denominados "Rube" en el documento identificado por el URI http://www.example.org/foo.xml. Un procesador XPointer, dado ese URI, obtendría una representación del documento (por ejemplo, solicitándolo desde Internet) y devolvería una representación de los elementos "Rube" del documento. - En los vocabularios RDF , como RDFS , OWL o SKOS , los identificadores de fragmentos se utilizan para identificar recursos en el mismo espacio de nombres XML , pero no necesariamente corresponden a una parte específica de un documento. Por ejemplo,
http://www.w3.org/2004/02/skos/core#broader
identifica el concepto "broader" en el vocabulario de SKOS Core, pero no hace referencia a una parte específica del recurso identificado por http://www.w3.org/2004/02/skos/core
, un archivo RDF completo en el que se declara la semántica de este concepto específico, junto con otros conceptos en el mismo vocabulario. - En las URI para
text/plain
documentos MIME, RFC 5147 especifica un identificador de fragmento para las posiciones y rangos de caracteres y líneas dentro del documento utilizando las palabras clave " char
" y " line
", y se puede agregar una verificación de integridad, ya sea " length
" o " md5
". [13] Parece que falta compatibilidad con navegadores. [14] El siguiente ejemplo identifica las líneas 11 a 20 de un documento de texto:http://example.com/document.txt#line=10,20
- En las URI para documentos MIME
text/csv
, RFC 7111 especifica un identificador de fragmento como selector para filas, columnas y celdas utilizando las palabras clave " row
" , " col
" y " cell
", [15] Por ejemplo:http://example.com/data.csv#row=4
– Selecciona la 4ª fila.http://example.com/data.csv#col=2
– Selecciona la 2da columna.http://example.com/data.csv#row=5-7
– Selecciona tres filas consecutivas comenzando con la quinta fila.http://example.com/data.csv#row=5-*
– Selecciona todas las filas comenzando con la quinta fila.http://example.com/data.csv#cell=4,1-6,2
– Selecciona una región que comienza en la cuarta fila y la primera columna y termina en la sexta fila y la segunda columna.
- En las URI para documentos MIME audio/*, image/*, video/*, muy pocas tienen fragmentos definidos o semántica de fragmentos. [16] La sintaxis de la URI de fragmentos de medios 1.0 (básica) permite direccionar un recurso de medios a lo largo de dos dimensiones (temporal y espacial) utilizando las palabras clave
t
y xywh
, y la URI de fragmentos de medios 1.0 (avanzada) agrega track
y id
. [17] Por lo tanto, se puede utilizar la siguiente URI de fragmentos de medios en el src
atributo del elemento audio
o video
HTML5 :http://example.com/foo.mp4#t=10,20
(esto indica el intervalo de tiempo que comienza en 10 segundos y termina antes de 20 segundos)http://example.com/bar.webm#t=40,80&xywh=160,120,320,240
- La especificación también permite especificar horas, minutos (deben tener 2 dígitos) y segundos (deben tener 2 dígitos) utilizando dos puntos, y milisegundos utilizando un punto decimal. También se pueden especificar otros esquemas de tiempo mediante prefijos, siendo
npt:
(Normal Play Time) el valor predeterminado. - Otros sitios web utilizan la parte del fragmento para pasar información adicional a los scripts que se ejecutan en ellos; por ejemplo, Google Video entiende los enlaces permanentes en el formato de
#01h25m30s
para comenzar a reproducirse en la posición especificada, [18] y YouTube usa un código similar como #t=3m25s
. [19]
- En JavaScript , se puede acceder al identificador de fragmento de la página HTML o XHTML actual en la propiedad "hash"
location.hash
[20] – JavaScript también se puede utilizar con otros tipos de documentos. Con el auge de AJAX , algunos sitios web utilizan identificadores de fragmento para emular el comportamiento del botón Atrás de los navegadores para cambios de página que no requieren una recarga, o para emular subpáginas.- Por ejemplo, Gmail utiliza una única URL para casi todas las interfaces (buzones de correo, correos individuales, resultados de búsqueda, configuraciones); el fragmento se utiliza para que estas interfaces se puedan vincular directamente. [21]
- Los sitios web de Adobe Flash pueden usar la parte de fragmento para informar al usuario sobre el estado del sitio web o la aplicación web y para facilitar los enlaces profundos , comúnmente con la ayuda de la biblioteca de JavaScript SWFAddress.
- Una URI que se vincula a un documento JSON puede especificar un puntero a un valor específico. [22]
- Por ejemplo, una URL que termina en
#/foo
podría usarse para extraer el valor de un par clave-valor en un documento que comienza con{ "foo": ["bar", "baz"], ... }
- En las URI de
application/pdf
los documentos MIME, los lectores de PDF reconocen una serie de identificadores de fragmentos. [23] [24] Por ejemplo, una URL que termina en .pdf#page=35
hará que la mayoría de los lectores abran el PDF y se desplacen hasta la página 35. Son posibles varios otros parámetros, incluidos #nameddest=
(similares a los anclajes HTML), #search="word1 word2"
, #zoom=
, etc. Se pueden combinar varios parámetros con ampersands:http://example.org/doc.pdf#view=fitb&nameddest=Chapter3
.
- En SVG , se permite que los fragmentos especifiquen argumentos como
viewBox()
, preserveAspectRatio()
, y transform()
. [25]
Propuestas
Se han realizado varias propuestas de identificadores de fragmentos para su uso con documentos de texto simple (que no pueden almacenar metadatos de anclaje) o para hacer referencia a ubicaciones dentro de documentos HTML en los que el autor no ha utilizado etiquetas de anclaje:
- A partir de septiembre de 2012, la URI 1.0 (básica) de fragmentos de medios es una recomendación del W3C . [26]
- Las versiones 80 y posteriores de Chrome [27] [28] implementan los fragmentos de texto WICG de W3C , [29] por lo que harán que el navegador busque , resalte el texto coincidente y se desplace hasta él. Además del inicio y el final, el fragmento también puede especificar un contexto: texto que debe preceder o seguir pero que no se resaltará ( ejemplo que usa para buscar 'vision' precedido por 'night' ).
#:~:text=foo
foo
foo
#:~:text=night-,vision
- El índice de paquetes de Python agrega el hash MD5 de un archivo a la URL como un identificador de fragmento. [30] Si MD5 no estuviera roto (es una función hash rota ), podría usarse para garantizar la integridad del paquete.
https://pypi.python.org ... zodbbrowser-0.3.1.tar.gz#md5=38dc89f294b24691d3f0d893ed3c119c
- Un fragmento de hash-bang [31] es un fragmento que comienza con un signo de exclamación
!
. Se utilizaba en un enfoque ahora obsoleto para indexar aplicaciones dinámicas de una sola página . Un signo de exclamación es ilegal en HTML4 , XHTML y identificadores XML, lo que otorga cierto grado de separación de esa funcionalidad. Sin embargo, está permitido en HTML5 . [32]- Entre 2009 y 2015, Google Webmaster Central propuso y luego recomendó un "esquema de rastreo AJAX" [33] [34] que utiliza un signo de exclamación inicial en los identificadores de fragmentos para páginas AJAX con estado :
http://example.com/page?query#!state
- Otra implementación ha sido la sustitución de
#!
por ?_escaped_fragment_=
[33] - Varios autores, entre ellos Jeni Tennison del W3C, han considerado que las URL con hash-bang son problemáticas porque hacen que las páginas sean inaccesibles para quienes no tienen JavaScript activado en su navegador. También dañan los encabezados de referencia HTTP , ya que los navegadores no pueden enviar el identificador del fragmento en el encabezado de referencia. [31]
- En 2015, Google dejó de lado su propuesta de rastreo AJAX hash-bang y recomendó en su lugar el uso de la mejora progresiva y el método HTML5
history.pushState()
[35] . [36] - Gervase Markham, empleado de la Fundación Mozilla, ha propuesto un identificador de fragmentos para búsquedas, de la forma
#!s!search terms
. Añadir un número después de la s ( #!s10!
) indica que el navegador debe buscar la n ésima ocurrencia del término de búsqueda. Un número negativo ( #!s-3!
) comienza la búsqueda hacia atrás desde el final del documento. Hay disponible un script de Greasemonkey para añadir esta funcionalidad a los navegadores compatibles. [37]http://example.com/index.html#!s3!search terms
- Erik Wilde y Marcel Baschnagel de la ETH Zurich amplían este método para identificar también fragmentos en documentos de texto sin formato mediante expresiones regulares , con la palabra clave "
match
". [38] También describen una implementación prototipo como una extensión para el navegador Firefox . Por ejemplo, lo siguiente encontraría el texto "RFC" sin distinción entre mayúsculas y minúsculas en cualquier parte del documento:http://example.com/document.txt#match=[rR][fF][cC]
- K. Yee, del Foresight Institute, propone "identificadores de fragmentos extendidos" delimitados por dos puntos y una palabra clave para diferenciarlos de los identificadores de anclaje. Un identificador de fragmento de búsqueda de texto con el id "fragment specified scheme"
words
" es la primera propuesta de este esquema. [39] El siguiente ejemplo buscaría en un documento la primera aparición de la cadena "some context for a search term" y luego resaltaría las palabras "search term":http://example.com/index.html#:words:some-context-for-a-(search-term)
- El esquema anterior se implementó en la versión 80 de Chrome. [40]
- El proyecto LiveURLs [41] propuso un formato de identificador de fragmentos para hacer referencia a una región de texto dentro de una página, de la forma
#FWS+C
, donde F es la longitud de la primera palabra (hasta cinco caracteres), W es la primera palabra en sí, S es la longitud del texto seleccionado y C es un CRC de 32 bits del texto seleccionado. [42] Implementaron una variante de este esquema como una extensión para el navegador Firefox, [43] utilizando la forma #LFWS+C
, donde L es la longitud del fragmento en sí, en dos dígitos hexadecimales . Al vincular a la palabra "Fragmento" utilizando la variante implementada se obtendría:http://example.com/index.html#115Fragm8+-52f89c4c
- Hasta Firefox 5, Firefox admitía enlaces XPath como #xpath:/html/body/div[3], que se podían usar junto con un bookmarklet como http://antimatter15.com/wp/2009/11/xpath-bookmark-bookmarklet/ para crear enlaces dentro de documentos HTML que carecían de identificadores adecuados. Esta función se eliminó como parte de una limpieza de código en https://bugzilla.mozilla.org/show_bug.cgi?id=457102
- En el formato de libro electrónico ePub , el Identificador de Fragmentos Canónicos EPUB (epubcfi, [44] 2011-2017) define un método estandarizado por W3C / IDPF para hacer referencia a contenido arbitrario utilizando identificadores de fragmentos para localizar rangos de texto no anclados a través de la estructura del documento y la coincidencia de patrones. Estos enlaces profundos dinámicos ayudan a localizar el contenido después de que se actualiza el texto y se utilizan, por ejemplo, en Apple Books .
Véase también
Referencias
- ^ ab "RFC 3986 Identificador uniforme de recursos (URI): sintaxis genérica". Grupo de trabajo de ingeniería de Internet. Enero de 2005. Consultado el 6 de marzo de 2012 .
- ^ R. Fielding, Ed., Adobe; J. Reschke, Ed., greenbytes (junio de 2014). "Protocolo de transferencia de hipertexto (HTTP/1.1): sintaxis de mensajes y enrutamiento". Grupo de trabajo de ingeniería de Internet (IETF) . Consultado el 27 de diciembre de 2023. El
URI de destino excluye el componente de fragmento de la referencia, si lo hay, ya que los identificadores de fragmentos están reservados para el procesamiento del lado del cliente.
{{cite web}}
: CS1 maint: varios nombres: lista de autores ( enlace ) - ^ "Tipos de representación y semántica de identificadores de fragmentos". Arquitectura de la World Wide Web, volumen uno . W3C . 2004. Consultado el 13 de julio de 2011 .
- ^ Coyier, Chris (9 de abril de 2012) [última actualización el 13 de enero de 2022]. "Uso del selector CSS :target". CSS-Tricks . Consultado el 7 de octubre de 2024 .
- ^ Colaboradores de MDN (8 de agosto de 2024). "target". CSS: Hojas de estilo en cascada . MDN . Consultado el 7 de octubre de 2024 .
- ^ "Funciones obsoletas". HTML Living Standard . WHATWG . 2024-08-07 . Consultado el 2024-08-08 .
- ^ "Restricción de validez: ID". XML 1.0 (quinta edición) . W3C . 2008. Consultado el 13 de julio de 2011 .
- ^ "xml:id Versión 1.0". W3C . 2005 . Consultado el 13 de julio de 2011 .
- ^ Birbeck, Mark; Gylling, Markus; McCarron, Shane; Pemberton, Steven; et al., eds. (16 de diciembre de 2010) [Copyright © 2001-2010]. "12. Módulo de atributos básicos de XHTML: 12.1. Colección de atributos básicos" (Borrador del editor del W3C, parte de la Nota del grupo de trabajo del W3C) . XHTML™ 2.0 . Consorcio World Wide Web (W3C) . Consultado el 7 de octubre de 2024 .
- ^ Axelsson, Jonny; Epperson, Beth; Ishikawa, Masayasu; McCarron, Shane; Navarro, Ann; Pemberton, Steven, eds. (6 de mayo de 2003). "6. Colecciones de atributos XHTML: 6.1. Colección de atributos básicos" (Borrador de trabajo del W3C) . XHTML™ 2.0 . Consorcio World Wide Web (W3C) . Consultado el 7 de octubre de 2024 .
- ^ Daniel, Ron, Jr.; DeRose, Steve; Maler, Eve, eds. (7 de junio de 2000). "XML Pointer Language (XPointer) Version 1.0" (Recomendación candidata del W3C) . Consorcio World Wide Web (W3C) . Consultado el 7 de octubre de 2024 .
{{cite web}}
: Mantenimiento de CS1: varios nombres: lista de editores ( enlace ) - ^ Møller, Anders; Schwartzbach, Michael I. (octubre de 2003) [Publicado por primera vez: marzo de 2000]. "Identificadores de fragmentos de XPointer". Tutorial de XML: La revolución XML: tecnologías para la Web del futuro . BRICS, Universidad de Aarhus . Consultado el 7 de octubre de 2024. NOTA
: Estas diapositivas no se han actualizado desde 2003. Han sido reemplazadas por el libro
Introducción a XML y tecnologías web
de Addison-Wesley y el material en línea que lo acompaña. Consulte http://www.brics.dk/ixwt/ para obtener más información.
- ^ Dürst, Martin J.; Wilde, Erik (abril de 2008). Identificadores de fragmentos de URI para el tipo de medio text/plain (RFC - Estándar propuesto). Solicitud de comentarios del Grupo de trabajo de redes. Grupo de trabajo de ingeniería de Internet. doi :10.17487/RFC5147.
- ^ "Número 77024". Chromium . 2011 . Consultado el 13 de julio de 2011 .
- ^ Hausenblas, Michael; Wilde, Erik; Tennison, Jeni (enero de 2014). Identificadores de fragmentos de URI para el tipo de medio text/csv (RFC - Informativo). Solicitud de comentarios para envío independiente. (No avalada por) el Grupo de trabajo de ingeniería de Internet. doi :10.17487/RFC7111. ISSN 2070-1721.
- ^ "Revisión de tipos de medios". Grupo de trabajo sobre fragmentos de medios del W3C . 2009. Consultado el 29 de abril de 2009 .
- ^ Hausenblas, Michael; Jägenstedt, Philip; Jansen, Jack; Lafon, Yves; Parker, Conrado; Steiner, Thomas (25 de septiembre de 2012). Troncy, Rafael; Mannens, Erik; Pfeiffer, Silvia; Van Deursen, Davy (eds.). "URI de fragmentos de medios 1.0 (básico)" (Recomendación del W3C) . Grupo de trabajo sobre fragmentos de medios del W3C, Consorcio World Wide Web.
- ^ "Nueva función: enlace dentro de un vídeo". 19 de julio de 2006. Consultado el 13 de julio de 2011 .
- ^ "Enlace a las mejores partes de tus videos". YouTube . 2008-10-30 . Consultado el 2011-07-13 .
- ^ Colaboradores de MDN (18 de julio de 2024). "Ubicación: propiedad hash". API web . MDN . Consultado el 7 de octubre de 2024 .
- ^ Enlace a contenido específico en Gmail, Google Blogoscoped, 17 de noviembre de 2007
- ^ Bryan, P (2 de abril de 2013). «RFC 6901 – Puntero de notación de objetos JavaScript (JSON)». The Internet Society . Consultado el 14 de julio de 2022 .
- ^ "Parámetros para abrir archivos PDF: especificación de parámetros en una URL" (PDF) . Adobe. Abril de 2007 . Consultado el 20 de septiembre de 2017 .
- ^ Taft, E.; Pravetz, J.; Zilles, S.; Masinter, L. (mayo de 2004). "RFC 3778 – El tipo de medio application/pdf". tools.ietf.org . The Internet Society. doi :10.17487/RFC3778 . Consultado el 20 de septiembre de 2017 .
- ^ "Enlace – SVG 1.1 (segunda edición)".
- ^ "Recomendación W3C para la URI 1.0 (básica) de fragmentos multimedia" . Consultado el 25 de septiembre de 2012 .
- ^ "Desplazarse hasta el fragmento de texto". Estado de la plataforma Chrome . Google Chrome . Consultado el 18 de mayo de 2020 .
- ^ Kelly, Gordon. "Google Chrome 80 lanzado con una actualización controvertida de enlaces profundos". Forbes . Consultado el 4 de junio de 2020 .
- ^ "WICG/scroll-to-text-fragment: Propuesta para permitir la especificación de un fragmento de texto en un fragmento de URL". GitHub . Grupo comunitario de incubación de WebPlatform.org en W3C . Consultado el 18 de mayo de 2020 .
- ^ "Compatibilidad con comprobación de md5 de Pypi" . Consultado el 13 de julio de 2011.
Pypi tiene la costumbre de añadir un fragmento md5 a sus URL de huevo, lo utilizaremos para comprobar los archivos de distribución ya presentes en la memoria caché.
- ^ ab "URIs hash". Blog del W3C . 12 de mayo de 2011. Consultado el 13 de julio de 2011 .
- ^ "HTML 5.1 2.ª edición". W3C . 2017 . Consultado el 3 de agosto de 2018 .
- ^ ab "Propuesta para hacer que AJAX sea rastreable". 2009-10-07 . Consultado el 2011-07-13 .
- ^ "(Especificaciones) Cómo hacer que las aplicaciones AJAX sean rastreables". Google Inc. Consultado el 4 de mayo de 2013 .
- ^ "Manipulación del historial del navegador". Mozilla Developer Network . Consultado el 23 de febrero de 2017 .
- ^ "Desaprobación de nuestro esquema de rastreo AJAX". Blog oficial de Google Webmaster Central . Consultado el 23 de febrero de 2017 .
- ^ Búsqueda de fragmentos, gerv.net
- ^ Identificadores de fragmentos para archivos de texto sin formato, Erik Wilde y Marcel Baschnagel, Instituto Federal Suizo de Tecnología (ETH Zúrich), Actas de la decimosexta conferencia de la ACM sobre hipertexto e hipermedia doi :10.1145/1083356.1083398
- ^ Identificadores de fragmentos de búsqueda de texto, K. Yee, Grupo de trabajo de redes, Foresight Institute, marzo de 1998
- ^ bmcquade; bokan; nburris (24 de marzo de 2022). «Función: Desplazarse hasta el fragmento de texto». Estado de la plataforma Chrome . chromium.org . Consultado el 3 de mayo de 2022 .
- ^ Proyecto LiveURLs
- ^ La tecnología detrás de LiveURLs, consultado el 13 de marzo de 2011
- ^ Complemento "Web Marker" de Firefox, consultado el 13 de marzo de 2011
- ^ "Identificadores de fragmentos canónicos EPUB 1.1". idpf.org . Consultado el 3 de junio de 2020 .
Enlaces externos
- Grupo de trabajo sobre fragmentos multimedia del W3C, que establece una sintaxis y una semántica de URI para abordar fragmentos multimedia en material audiovisual (como una región de una imagen o un subclip de un vídeo)
- El portal de la comunidad MediaMixer recopila presentaciones, tutoriales, casos de uso y demostradores relacionados con el uso de la tecnología Media Fragment.