Articulo de referencia

fragmento URI

En el hipertexto informático , un fragmento URI es una cadena de caracteres que hace referencia a un recurso subordinado a otro recurso principal. El recurso principal se identi...

En el hipertexto informático , un fragmento 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 porción de dicho documento. La sintaxis genérica se especifica en la RFC 3986. [ 1 ] El separador de almohadilla en las URI no forma parte del identificador de fragmento.

Lo esencial

En las URI, una 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 las URI con una consulta y un fragmento, el fragmento sigue a la consulta. Las partes de consulta dependen del esquema de 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 ]

Una URI que termina en #está permitida por la sintaxis genérica y es una especie de fragmento vacío. En tipos de documentos MIME como text/htmlo cualquier tipo XML, no se permiten identificadores vacíos que coincidan con esta construcción sintácticamente válida. 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 este último suele ayudar a determinar el tipo MIME, y este tipo MIME determina el procesamiento de los fragmentos. Cuando un agente (como un navegador web) solicita un recurso web a un servidor web, el agente envía la URI al servidor, pero no el fragmento. En cambio, el agente espera a que el servidor envíe el recurso y, a continuación, lo procesa 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 las URI para text/htmlpáginas MIME, como http://www.example.org/foo.html#barel fragmento, se refiere al elemento con id="bar".
    • Los navegadores web gráficos suelen desplazarse para posicionar las páginas de manera que la parte superior del elemento identificado por el ID de fragmento esté alineada con la parte superior de la ventana gráfica; [ 4 ] por lo tanto, los identificadores de fragmento se utilizan a menudo en las tablas de contenido.
    • La apariencia del elemento identificado se puede cambiar mediante la pseudoclase :targetCSS . [ 5 ] Wikipedia utiliza esto para resaltar la referencia seleccionada. Cabe destacar que CSS se puede utilizar para mostrar contenido solo si es el objetivo, y de lo contrario ocultarlo mediante .display: blockdisplay: none
    • El nameatributo del <a>elemento cumplía la misma función, pero ahora está obsoleto en favor del idatributo, que puede aplicarse a cualquier elemento. [ 6 ]
  • En todos los tipos de documentos XML , incluidos los fragmentos XHTML correspondientes a atributos como `<span> xml:id` o similares , idse sigue la Namesintaxis `<span>` y se empieza con una letra, un guion bajo o dos puntos. Cabe destacar que no pueden empezar con un dígito ni con un guion. [ 7 ]
    • xml:ides 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 idtambién se puede usar y parece ser el preferido, [ 9 ] [ 10 ] porque XHTML se especificó antes de que xml:idexistiera.
  • En las aplicaciones XML, los identificadores de fragmento en una sintaxis determinada pueden ser XPointers ; [ 11 ] [ 12 ] por ejemplo, el identificador de fragmento en la URI http://www.example.org/foo.xml#xpointer(//Rube)se refiere a todos los elementos XML llamados "Rube" en el documento identificado por la URI http://www.example.org/foo.xml . Un procesador XPointer, dada esa URI, obtendría una representación del documento (como solicitándolo a 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 fragmento 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#broaderidentifica el concepto "broader" en el vocabulario SKOS Core, pero no se refiere 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 las URI para text/plaindocumentos MIME, RFC 5147 especifica un identificador de fragmento para las posiciones y rangos de caracteres y líneas dentro del documento usando 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
  • text/csvEn las URI para documentos MIME , RFC 7111 especifica un identificador de fragmento como selector para filas, columnas y celdas usando las palabras clave " row" , " col", y " cell", [ 15 ] Por ejemplo:
    • http://example.com/data.csv#row=4– Selecciona la cuarta 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 fila 4 y la columna 1 y termina en la fila 6 y la columna 2.
  • En las URI para documentos MIME audio/*, image/*, video/*, muy pocas tienen fragmentos definidos o semántica de fragmentos. [ 16 ] La sintaxis URI de fragmentos multimedia 1.0 (básica) admite el direccionamiento de un recurso multimedia a lo largo de dos dimensiones (temporal y espacial) usando las palabras clave ty xywh, y la URI de fragmentos multimedia 1.0 (avanzada) agrega tracky id. [ 17 ] Por lo tanto, se puede usar la siguiente URI de fragmentos multimedia en el srcatributo del elemento audioo videoHTML5 :
    • http://example.com/foo.mp4#t=10,20(Esto indica el intervalo de tiempo que comienza a los 10 segundos y termina antes de los 20 segundos).
    • http://example.com/bar.webm#t=40,80&xywh=160,120,320,240
    • La especificación también permite indicar horas, minutos (deben ser de 2 dígitos) y segundos (deben ser de 2 dígitos) usando dos puntos, y milisegundos usando un punto decimal. También se pueden especificar otros esquemas de tiempo mediante prefijos, siendo npt:(Tiempo de juego normal) el 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 #01h25m30spara comenzar a reproducirse en la posición especificada, [ 18 ] y YouTube utiliza 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 usar con otros tipos de documentos. Con el auge de AJAX , algunos sitios web usan identificadores de fragmento para emular el comportamiento del botón de retroceso de los navegadores para cambios de página que no requieren una recarga, o para emular subpáginas.
  • Una URI que enlaza a un documento JSON puede especificar un puntero a un valor específico. [ 22 ]
    • Por ejemplo, una URL que termina en #/foopodría usarse para extraer el valor de un par clave-valor en un documento que comienza con{ "foo": ["bar", "baz"], ... }
  • En las URI para application/pdfdocumentos MIME, los visores de PDF reconocen varios identificadores de fragmento. [ 23 ] [ 24 ] Por ejemplo, una URL que termine en .pdf#page=35hará que la mayoría de los lectores abran el PDF y se desplacen a la página 35. Son posibles 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 , los fragmentos pueden especificar argumentos como viewBox(), preserveAspectRatio(), y transform(). [ 25 ]
  • Para identificar un fragmento de texto dentro del texto, este ":~:text=[prefix-,]textStart[,textEnd][,-suffix]resaltará "textStart" o avanzará hasta "textEnd" si se aplica. El prefijo y el sufijo no se resaltarán, pero ayudan a encontrar el texto en la página. Ejemplo: https://en.wikipedia.org/w/index.php?title=Cat&oldid=916388819#:~:text=Claws-,Like%20almost,the%20Felidae%2C,-cats [ 26 ]

Propuestas

Se han presentado varias propuestas para el uso de identificadores de fragmentos con documentos de texto plano (que no pueden almacenar metadatos de anclaje), o para referirse a ubicaciones dentro de documentos HTML en los que el autor no ha utilizado etiquetas de anclaje:

  • Desde septiembre de 2012, el URI de fragmentos de medios 1.0 (básico) es una recomendación del W3C . [ 27 ]
  • Las versiones 80 y superiores de Chrome [ 28 ] [ 29 ] y las versiones 131 y superiores de Firefox [ 30 ] implementan los fragmentos de texto WICG del W3C , [ 31 ] 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 encontrar 'visión' precedido por 'noche').#:~:text=foofoofoo#:~:text=night-,vision).
  • El Índice de Paquetes de Python agrega el hash MD5 de un archivo a la URL como un identificador de fragmento. [ 32 ] 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 [ 33 ] es un fragmento que comienza con un signo de exclamación !. Se utilizaba en un método ahora obsoleto para indexar aplicaciones dinámicas de una sola página . El signo de exclamación no es válido en los identificadores HTML4 , XHTML y XML, lo que otorga cierto grado de separación de esa funcionalidad. Sin embargo, está permitido en HTML5 . [ 34 ]
    • Entre 2009 y 2015, Google Webmaster Central propuso y luego recomendó un "esquema de rastreo AJAX" [ 35 ] [ 36 ] 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 #!con ?_escaped_fragment_=[ 35 ]
    • Las URI con hash-bang han sido consideradas problemáticas por varios autores, incluida Jeni Tennison del W3C, porque hacen que las páginas sean inaccesibles para quienes no tienen JavaScript activado en su navegador. También rompen los encabezados HTTP Referer, ya que los navegadores no tienen permitido enviar el identificador de fragmento en el encabezado Referer. [ 33 ]
    • En 2015, Google dejó de usar su propuesta de rastreo AJAX hash-bang y recomendó en su lugar el uso de la mejora progresiva y el método de HTML5 history.pushState()[ 37 ] . [ 38 ]
    • Gervase Markham, empleado de la Fundación Mozilla , ha propuesto un identificador de fragmento para la búsqueda, con el formato #!s!search terms. Añadir un número después de la s ( #!s10!) indica que el navegador debe buscar la n -é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. Existe un script de Greasemonkey disponible para añadir esta funcionalidad a los navegadores compatibles. [ 39 ]
      http://example.com/index.html#!s3!search terms
  • Erik Wilde y Marcel Baschnagel de la ETH Zúrich extienden esto para identificar también fragmentos en documentos de texto plano utilizando expresiones regulares , con la palabra clave " match". [ 40 ] 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 de 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 fragmento 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 "esquema de especificación de fragmento" id " words" es la primera propuesta en este esquema. [ 41 ] 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 proyecto LiveURLs [ 42 ] propuso un formato de identificador de fragmento para referirse 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. [ 43 ] Implementaron una variante de este esquema como una extensión para el navegador Firefox, [ 44 ] utilizando la forma #LFWS+C, donde L es la longitud del fragmento en sí, en dos dígitos hexadecimales . Enlazar a la palabra "Fragmento" utilizando la variante implementada daría como resultado:
    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 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 fragmento canónico EPUB (epubcfi, [ 45 ] 2011-2017) define un método estandarizado por W3C / IDPF para referenciar contenido arbitrario utilizando identificadores de fragmento 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 que se actualiza el texto y se utilizan, por ejemplo, en Apple Books .

Véase también

Referencias

  1. 1 2 "RFC 3986 Identificador uniforme de recursos (URI): Sintaxis genérica" . Grupo de trabajo de ingeniería de Internet. Enero de 2005. Recuperado el 6 de marzo de 2012 .
  2. 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 hubiera, ya que los identificadores de fragmento están reservados para el procesamiento del lado del cliente .{{cite web}}: CS1 maint: varios nombres: lista de autores ( enlace )
  3. "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 .
  4. Coyier, Chris (09-04-2012) [última actualización 13 de enero de 2022]. "Uso del selector CSS :target" . CSS-Tricks . Consultado el 07-10-2024 .
  5. Colaboradores de MDN (08/08/2024). "target" . CSS: Hojas de estilo en cascada . MDN . Consultado el 07/10/2024 .{{cite web}}: |last=tiene nombre genérico ( ayuda )
  6. "Características obsoletas" . HTML Living Standard . WHATWG . 2024-08-07 . Consultado el 2024-08-08 .
  7. "Restricción de validez: ID" . XML 1.0 (Quinta edición) . W3C . 2008. Consultado el 13 de julio de 2011 .
  8. "xml:id Versión 1.0" . W3C . 2005. Consultado el 13 de julio de 2011 .
  9. Birbeck, Mark; Gylling, Markus; McCarron, Shane; Pemberton, Steven; et al., eds. (16-12-2010) [Copyright © 2001-2010]. "12. Módulo de atributos principales de XHTML : 12.1. Colección de atributos principales" (Borrador del editor del W3C, parte de la nota del grupo de trabajo del W3C) . XHTML™ 2.0 . Consorcio World Wide Web (W3C) . Recuperado el 07-10-2024 .  
  10. Axelsson, Jonny; Epperson, Beth; Ishikawa, Masayasu; McCarron, Shane; Navarro, Ann; Pemberton, Steven, eds. (2003-05-06). "6. Colecciones de atributos XHTML : 6.1. Colección de atributos principales" (borrador de trabajo del W3C) . XHTML™ 2.0 . Consorcio World Wide Web (W3C) . Consultado el 7 de octubre de 2024 . 
  11. Daniel, Ron Jr.; DeRose, Steve; Maler, Eve, eds. (2000-06-07). "XML Pointer Language (XPointer) Version 1.0" (W3C Candidate Recommendation) . World Wide Web Consortium (W3C) . Recuperado el 2024-10-07 .
  12. Møller, Anders; Schwartzbach, Michael I. (octubre de 2003) [Primera publicación: marzo de 2000]. "Identificadores de fragmentos XPointer" . Tutorial XML : La revolución XML : Tecnologías para la web del futuro . BRICS, Universidad de Aarhus . Recuperado 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.  {{cite web}}: Enlace externo en |quote=( ayuda )
  13. Dürst, Martin J.; Wilde, Erik (abril de 2008). Identificadores de fragmentos 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 .
  14. "Número 77024" . Chromium . 2011. Consultado el 13 de julio de 2011 .
  15. Hausenblas, Michael; Wilde, Erik; Tennison, Jeni (enero de 2014). Identificadores de fragmentos URI para el tipo de medio text/csv (RFC - Informativo). Solicitud de comentarios de envío independiente. (No respaldado por) el Grupo de Trabajo de Ingeniería de Internet. doi : 10.17487/RFC7111 . ISSN 2070-1721 . 
  16. "Revisión de tipos de medios" . Grupo de trabajo de fragmentos de medios del W3C . 2009. Consultado el 29 de abril de 2009 .
  17. 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.
  18. "Nueva función: Enlace dentro de un vídeo" . 19/07/2006 . Consultado el 13/07/2011 .
  19. Colaboradores de MDN (18/07/2024). "Ubicación: propiedad hash" . API web . MDN . Consultado el 07/10/2024 .{{cite web}}: |last=tiene nombre genérico ( ayuda )
  20. Enlace a contenido específico en Gmail , Google Blogoscoped, 17/11/2007
  21. Bryan, P (2013-04-02). "RFC 6901 – JavaScript Object Notation (JSON) Pointer" . The Internet Society . Recuperado el 14 de julio de 2022 .
  22. "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 .
  23. 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 . Recuperado el 20 de septiembre de 2017 .
  24. "Enlace – SVG 1.1 (Segunda edición)" .
  25. "Identificación de un fragmento de texto" . Marzo de 2026.
  26. "Recomendación W3C para URI de fragmentos de medios 1.0 (básico)" . Consultado el 25 de septiembre de 2012 .
  27. "Desplazarse al fragmento de texto" . Estado de la plataforma Chrome . Google Chrome . Consultado el 18 de mayo de 2020 .
  28. Kelly, Gordon. "Google Chrome 80 lanzado con una actualización de enlaces profundos controvertida" . Forbes . Consultado el 4 de junio de 2020 .
  29. "Notas de la versión de Firefox 131.0" . mozilla.org . Consultado el 12 de noviembre de 2024 .
  30. "WICG/scroll-to-text-fragment: Propuesta para permitir especificar 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 .
  31. "Soporte para verificación md5 de PyPI" . Consultado el 13 de julio de 2011. PyPI suele añadir un fragmento md5 a las URL de sus egg; lo usaremos para comprobar los archivos de distribución ya presentes en la caché.
  32. 1 2 "URI Hash" . Blog del W3C . 12 de mayo de 2011. Consultado el 13 de julio de 2011 .
  33. "HTML 5.1 2nd Edition" . W3C . 2017. Consultado el 3 de agosto de 2018 .
  34. 1 2 "Propuesta para hacer que AJAX sea rastreable" . 2009-10-07 . Recuperado el 2011-07-13 .
  35. "(Especificaciones) Cómo hacer que las aplicaciones AJAX sean rastreables" . Google Inc. Recuperado el 4 de mayo de 2013 .
  36. "Manipulación del historial del navegador" . Mozilla Developer Network . Consultado el 23 de febrero de 2017 .
  37. "Descontinuación de nuestro esquema de rastreo AJAX" . Blog oficial de Google Webmaster Central . Consultado el 23 de febrero de 2017 .
  38. Búsqueda de fragmentos , gerv.net
  39. Identificadores de fragmentos para archivos de texto plano, 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
  40. Identificadores de fragmentos de búsqueda de texto , K. Yee, Grupo de trabajo de redes, Foresight Institute, marzo de 1998
  41. "Proyecto LiveURLs" . Archivado del original el 15 de agosto de 2019. Consultado el 13 de abril de 2011 .
  42. La tecnología detrás de LiveURLs Archivado el 29/04/2020 en Wayback Machine , consultado el 13/03/2011
  43. Complemento de Firefox "Web Marker" Archivado el 3 de noviembre de 2018 en Wayback Machine , consultado el 13 de marzo de 2011.
  44. "Identificadores de fragmentos canónicos EPUB 1.1" . idpf.org . Consultado el 3 de junio de 2020 .
  • El Grupo de Trabajo sobre Fragmentos Multimedia del W3C establece una sintaxis y semántica URI para abordar los 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 demostraciones relacionados con el uso de la tecnología Media Fragment.