Texto después del # en un URI de recurso
En hipertexto informático , un fragmento de URI es una cadena de caracteres que hace referencia a un recurso subordinado a otro recurso primario. El recurso principal se identifica mediante un Identificador uniforme de recursos (URI) y el identificador de fragmento apunta al recurso subordinado.
El identificador de fragmento introducido por una marca hash #
es la última parte opcional de una URL para un documento. Normalmente se utiliza para identificar una parte de ese documento. La sintaxis genérica se especifica en RFC 3986. [1] El separador de marca hash en los URI no forma parte del identificador de fragmento.
Lo esencial
En los URI, una marca de almohadilla #
introduce el fragmento opcional cerca del final de la URL. La sintaxis genérica RFC 3986 para URI también permite una parte de consulta opcional introducida por un signo de interrogación ?
. En los URI con una consulta y un fragmento, el fragmento sigue a la consulta. Las partes de la consulta dependen del esquema 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 URI a los servidores cuando recuperan un documento. [1] [2]
#
La sintaxis genérica permite un URI que termina en y es una especie de fragmento vacío. En tipos de documentos MIME como text/html
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 como fragmento vacío.
El identificador de fragmento funciona de manera diferente al resto del URI: su procesamiento es exclusivamente del lado del cliente sin participación del servidor web , aunque el servidor generalmente ayuda a determinar el tipo MIME, y el tipo MIME determina el procesamiento de fragmentos. Cuando un agente (como un navegador web) solicita un recurso web de un servidor web, el agente envía el URI al servidor, pero no envía el fragmento. En cambio, el agente espera a que el servidor envíe el recurso y luego procesa el recurso según el tipo de documento y el valor del fragmento. [3]
En una página web HTML, el agente buscará un ancla identificada con una etiqueta HTML que incluya un atributo id=
o name=
igual al identificador del fragmento.
Ejemplos
- En los URI para 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 normalmente se desplazan para colocar las páginas de modo que la parte superior del elemento identificado por la identificación del fragmento esté alineada con la parte superior de la ventana gráfica; por lo tanto, los identificadores de fragmentos se utilizan a menudo en tablas de contenido y en enlaces permanentes .
- La apariencia del elemento identificado se puede cambiar mediante la pseudoclase
:target
CSS ; Wikipedia usa esto para resaltar la referencia seleccionada. En particular, CSS display: block
se puede usar para mostrar contenido solo si es el objetivo y, de lo contrario, se puede ocultar mediante display: none
. - El
name
atributo obsoleto (permitido sólo para algunos elementos) tenía un propósito similar en navegadores ahora obsoletos. Si está presente name
y id
debe ser idéntico.
- En todos los tipos de documentos XML , incluidos los fragmentos XHTML correspondientes a atributos
xml:id
similares, id
siga la Name
sintaxis - y comience con una letra, un guión bajo o dos puntos. En particular, no pueden comenzar con un dígito o un guión. [4]xml:id
es uno de los pocos atributos XML genéricos, por ejemplo, xml:lang
que se puede utilizar sin declarar explícitamente un espacio de nombres. [5] En XHTML id
se debe utilizar, porque XHTML se especificó antes de xml:id
que existiera.
- En aplicaciones XML, los identificadores de fragmentos en una sintaxis determinada pueden ser XPointers ; por ejemplo, el identificador de fragmento en el URI
http://www.example.org/foo.xml#xpointer(//Rube)
se refiere 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 de 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 "más amplio" en el vocabulario 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 del mismo. vocabulario. - En los 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
". Parece faltar compatibilidad con el navegador. [6] El siguiente ejemplo identifica las líneas 11 a 20 de un documento de texto:http://example.com/document.txt#line=10,20
- En los URI para
text/csv
documentos MIME, RFC 7111 especifica un identificador de fragmento como selector de filas, columnas y celdas utilizando las palabras clave " row
" , " col
" y " cell
", por ejemplo:http://example.com/data.csv#row=4
– Selecciona la 4ª fila.http://example.com/data.csv#col=2
– Selecciona la segunda columna.http://example.com/data.csv#row=5-7
– Selecciona tres filas consecutivas comenzando por la quinta fila.http://example.com/data.csv#row=5-*
– Selecciona todas las filas comenzando por 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 los URI para documentos MIME audio/*, image/*, video/*, muy pocos tienen fragmentos definidos o semántica de fragmentos. [7] La sintaxis de Media Fragments URI 1.0 (básica) admite el direccionamiento de un recurso multimedia en dos dimensiones (temporal y espacial) utilizando las palabras clave
t
y xywh
. Por lo tanto, se pueden utilizar los siguientes fragmentos de medios URI en el src
atributo del elemento HTML5audio
o :video
http://example.com/foo.mp4#t=10,20
http://example.com/bar.webm#t=40,80&xywh=160,120,320,240
- 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 para
#01h25m30s
comenzar a reproducirse en la posición especificada, [8] y YouTube usa un código similar como #t=3m25s
. [9]
- En JavaScript , se puede acceder al identificador de fragmento de la página HTML o XHTML actual en la propiedad "hash"
location.hash
; JavaScript también se puede utilizar con otros tipos de documentos. Con el auge de AJAX , algunos sitios web utilizan identificadores de fragmentos para emular el comportamiento del botón Atrás de los navegadores para cambios de página que no requieren recarga, o para emular subpáginas.- Por ejemplo, Gmail utiliza una única URL para casi todas las interfaces (buzones de correo, correos electrónicos individuales, resultados de búsqueda, configuraciones); el fragmento se utiliza para hacer que estas interfaces se puedan vincular directamente. [10]
- Los sitios web de Adobe Flash pueden utilizar la parte del fragmento para informar al usuario sobre el estado del sitio web o de la aplicación web y para facilitar los enlaces profundos , normalmente con la ayuda de la biblioteca JavaScript SWFAddress.
- Un URI que enlaza con un documento JSON puede especificar un puntero a un valor específico. [11]
#/foo
Por ejemplo, se podría utilizar una URL que termine en para extraer el valor de un par clave-valor en un documento que comience con{ "foo": ["bar", "baz"], ... }
- En los URI para
application/pdf
documentos MIME, los visores de PDF reconocen varios identificadores de fragmentos. [12] [13] Por ejemplo, una URL que termina en .pdf#page=35
hará que la mayoría de los lectores abran el PDF y se desplacen a 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 múltiples parámetros con símbolos:http://example.org/doc.pdf#view=fitb&nameddest=Chapter3
.
- En SVG , los fragmentos pueden especificar argumentos como
viewBox()
, preserveAspectRatio()
y transform()
. [14]
Propuestas
Se han realizado varias propuestas para identificadores de fragmentos para su uso con documentos de texto plano (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:
- En septiembre de 2012, Media Fragments URI 1.0 (básico) es una recomendación del W3C . [15]
- Las versiones 80 y superiores de Chrome [16] [17] implementan los fragmentos de texto WICG del W3C , [18] por lo que el navegador buscará , resaltará el texto coincidente y se desplazará 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 se utiliza para buscar 'visión' precedida por 'noche' ).
#:~:text=foo
foo
foo
#:~:text=night-,vision
- El índice de paquetes de Python agrega el hash MD5 de un archivo a la URL como identificador de fragmento. [19] 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 hash-bang [20] es un fragmento que comienza con un signo de exclamación
!
. Se utilizó en un enfoque ahora obsoleto para indexar aplicaciones dinámicas de una sola página . Un signo de exclamación es ilegal en identificadores HTML4 , XHTML y XML, lo que otorga cierto grado de separación de esa funcionalidad. Sin embargo, está permitido en HTML5 . [21]- Entre 2009 y 2015, Google Webmaster Central propuso y luego recomendó un "esquema de rastreo AJAX" [22] [23] utilizando 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_=
[22] - Varios escritores, incluida Jeni Tennison, en el W3C, han considerado que los URI hash-bang son problemáticos porque hacen que las páginas sean inaccesibles para aquellos que no tienen JavaScript activado en su navegador. También rompen los encabezados de referencia HTTP ya que los navegadores no pueden enviar el identificador de fragmento en el encabezado de referencia. [20]
- En 2015, Google desaprobó su propuesta de rastreo AJAX hash-bang y recomendó en su lugar el uso de mejora progresiva y el método HTML5 [
history.pushState()
24] . [25] - Gervase Markham, empleado de la Fundación Mozilla, ha propuesto un identificador de fragmento para la búsqueda, del formato
#!s!search terms
. Agregar un número después de la s ( #!s10!
) indica que el navegador debe buscar la enésima aparición del término de búsqueda. Un número negativo ( #!s-3!
) inicia la búsqueda hacia atrás desde el final del documento. Hay un script de Greasemonkey disponible para agregar esta funcionalidad a navegadores compatibles. [26]http://example.com/index.html#!s3!search terms
- Erik Wilde y Marcel Baschnagel de ETH Zurich amplían esto para identificar también fragmentos en documentos de texto plano utilizando expresiones regulares , con la palabra clave "
match
". [27] También describen una implementación prototipo como una extensión para el navegador Firefox . Por ejemplo, lo siguiente encontraría el texto "RFC" que no distingue 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 con dos puntos y una palabra clave para diferenciarlos de los identificadores de anclaje. Un identificador de fragmento de búsqueda de texto con "esquema de especificación de fragmento" id "
words
" es la primera propuesta en este esquema. [28] El siguiente ejemplo buscaría en un documento la primera aparición de la cadena "algún contexto para un término de búsqueda" y luego resaltaría las palabras "término de búsqueda":http://example.com/index.html#:words:some-context-for-a-(search-term)
- El esquema anterior se implementó en la versión 80 de Chrome. [29]
- El proyecto LiveURLs [30] propuso un formato de identificador de fragmento 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. [31] Implementaron una variante de este esquema como una extensión para el navegador Firefox, [32] usando el formulario #LFWS+C
, donde L es la longitud del fragmento en sí, en dos dígitos hexadecimales . Vincular a la palabra "Fragmento" usando la variante implementada produciría:http://example.com/index.html#115Fragm8+-52f89c4c
- Hasta Firefox 5, Firefox admitía enlaces XPath como #xpath:/html/body/div[3] que podían usarse junto con un bookmarklet como http://antimatter15.com/wp/2009/11/xpath- bookmark-bookmarklet/ para vincular dentro de documentos HTML que carecían de las identificaciones adecuadas. Esta característica se eliminó como parte de una limpieza de código en https://bugzilla.mozilla.org/show_bug.cgi?id=457102
- En formato de libro electrónico ePub , el Identificador canónico de fragmentos EPUB (epubcfi, [33] 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 contenido después de actualizar el texto y se utilizan, por ejemplo, en Apple Books .
Ver también
Referencias
- ^ ab "Identificador uniforme de recursos (URI) RFC 3986: 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 y enrutamiento de mensajes". 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}}
: Mantenimiento CS1: 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 .
- ^ "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 .
- ^ "Número 77024". Cromo . 2011 . Consultado el 13 de julio de 2011 .
- ^ "Revisión del tipo de medio". Grupo de trabajo sobre fragmentos de medios del W3C . 2009 . Consultado el 29 de abril de 2009 .
- ^ "Nueva función: enlace dentro de un vídeo". 2006-07-19 . Consultado el 13 de julio de 2011 .
- ^ "Enlace a las mejores partes de tus vídeos". YouTube . 2008-10-30 . Consultado el 13 de julio de 2011 .
- ^ 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)". La sociedad de Internet . 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: tipo de medio de aplicación/pdf". herramientas.ietf.org . La sociedad de Internet. doi : 10.17487/RFC3778 . Consultado el 20 de septiembre de 2017 .
- ^ "Vinculación - SVG 1.1 (segunda edición)".
- ^ "Recomendación del W3C de URI 1.0 (básico) de fragmentos de medios" . Consultado el 25 de septiembre de 2012 .
- ^ "Desplácese hasta 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 controvertida actualización de enlaces profundos". Forbes . Consultado el 4 de junio de 2020 .
- ^ "WICG/scroll-to-text-fragment: propuesta para permitir especificar un fragmento de texto en un fragmento de URL". GitHub . Grupo comunitario de incubadora WebPlatform.org en el W3C . Consultado el 18 de mayo de 2020 .
- ^ "Soporte de verificación de Pypi md5" . Consultado el 13 de julio de 2011 .
Pypi tiene la costumbre de agregar un fragmento md5 a las URL de sus huevos, lo usaremos para verificar los archivos de distribución ya presentes en el caché.
- ^ ab "URI hash". Blog del W3C . 2011-05-12 . Consultado el 13 de julio de 2011 .
- ^ "HTML 5.1, segunda edición". W3C . 2017 . Consultado el 3 de agosto de 2018 .
- ^ ab "Propuesta para hacer que AJAX sea rastreable". 2009-10-07 . Consultado el 13 de julio de 2011 .
- ^ "(Especificaciones) Cómo hacer que las aplicaciones AJAX sean rastreables". Corporación Google . Consultado el 4 de mayo de 2013 .
- ^ "Manipular el historial del navegador". Red de desarrolladores de Mozilla . Consultado el 23 de febrero de 2017 .
- ^ "Desaprobando nuestro esquema de rastreo AJAX". Blog oficial del Centro para webmasters de Google . 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 ACM sobre hipertexto e hipermedia doi :10.1145/1083356.1083398
- ^ Identificadores de fragmentos de búsqueda de texto, K. Yee, Grupo de trabajo en red, Foresight Institute, marzo de 1998
- ^ bmcquade; bokán; nburris (24 de marzo de 2022). "Función: desplácese hasta Fragmento de texto". Estado de la plataforma Chrome . cromo.org . Consultado el 3 de mayo de 2022 .
- ^ Proyecto LiveURL
- ^ La tecnología detrás de LiveURL, consultado el 13 de marzo de 2011.
- ^ Complemento de Firefox "Web Marker", 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 de medios del W3C, que establece una sintaxis y semántica de URI para abordar fragmentos de medios en material audiovisual (como una región en una imagen o un subclip de un video)
- El portal comunitario MediaMixer recopila presentaciones, tutoriales, casos de uso y demostradores relacionados con el uso de la tecnología Media Fragment.