Resumen

  • RFC 3151 normalizaba una cadena pública y convertía espacios, separadores y caracteres reservados literales en una forma determinista urn:publicid:; acertar la conversión no validaba dueño ni recurso.
  • La equivalencia era estrictamente léxica: tras normalizar, dos URN solo eran equivalentes si eran idénticas. El mismo nombre aún podía producir mapas, bytes y conductas distintas.
  • La resolución seguía varios caminos — catálogo, ruta local, conocimiento integrado o caché —, por lo que selección, mapeo, recuperación, análisis y resultado necesitaban recibos propios.

El problema era llevar un nombre, no localizarlo

Una entidad externa XML tenía identificador de sistema e identificador público. El primero era una URI por definición y solía apuntar a una ubicación local. El segundo era una cadena heredada de SGML, usada como nombre más global y persistente.

Cuando XSLT, XML Schema y otras especificaciones empezaron a exigir URI, esos nombres no cabían. RFC 3151 no reemplazó catálogos instalados ni fingió que una ubicación local era estable. Creó el espacio formal publicid para expresar la cadena con sintaxis URN.

La forma URI podía parecer una promoción de autoridad. No lo era. Un dueño no registrado seguía sin registro; una política débil seguía débil. La unicidad y la persistencia se heredaban del identificador original.

El documento era Informational y negaba ser un estándar de Internet. Sus ejemplos eran pedagógicos, no identificadores cuya existencia estuviera garantizada. Una transformación de ejemplo probaba la regla, no un despliegue ni una respuesta de red.

Normalizar hacía comparable y perdía historia

Antes de transcribir, una secuencia de espacios, tabuladores, retornos o saltos de línea se convertía en un solo espacio. Los blancos de los extremos desaparecían. El RFC daba por cumplido ese paso.

Dos capturas con sangrías diferentes podían terminar en la misma cadena. Eso era útil para comparar y destructivo para reconstruir la fuente. Guardar solo la URN borraba qué blancos habían existido.

El espacio normalizado pasaba a +. Como las secuencias ya estaban colapsadas, no debían aparecer plus consecutivos generados por blancos. Un plus literal tomaba %2B. Visualmente cercanos, registraban hechos diferentes.

Un recibo serio conserva fuente, codificación, cadena normalizada, versión de reglas y salida exacta. La base de datos que conserva solo el resultado puede comparar, pero no explicar el proceso.

Los delimitadores preservaban forma sin certificarla

Los Formal Public Identifiers componían propietario, clase, descripción, idioma o secuencia y, a veces, versión. Solían separar campos con // y usar :: dentro de componentes.

RFC 3151 hizo // → : y :: → ;. Así conservaba una estructura visible sin exigir que el traductor entendiera toda la gramática SGML. Reconocer un FPI correcto quedaba fuera de alcance.

Por eso, un : de salida demostraba una pareja de barras en la cadena normalizada, no que el propietario estuviera registrado ni que los campos fueran válidos.

Los literales necesitaban rutas separadas: : fuera de :: era %3A; / fuera de //, %2F; ;, %3B. Apóstrofo, interrogación, almohadilla y porcentaje también se escapaban. El orden de reemplazo era parte del algoritmo.

Una prueba de ida y vuelta puede certificar que no se perdió un carácter normalizado. No puede certificar asignación, resolución ni contenido.

Igualdad de texto no era igualdad de recurso

La regla fue deliberadamente pequeña: dos URN eran equivalentes si y solo si eran léxicamente idénticas. No había plegado de mayúsculas, alias de propietarios ni interpretación semántica de campos.

Un catálogo local podía dirigir dos nombres a un archivo, sin convertirlos en el mismo nombre del espacio. Y una URN idéntica podía atravesar dos catálogos o cachés y obtener archivos distintos.

El RFC permitía más de un identificador público para un recurso. Por tanto, ni identidad de nombre implicaba identidad de bytes ni diversidad de nombre implicaba diversidad de recurso. Nombre, regla elegida, destino, contenido y comportamiento se observaban por separado.

RFC 3986, RFC 8141 y otros textos posteriores cuentan la evolución de URI y URN. No cambian retrospectivamente el resultado de un catálogo ni amplían la equivalencia de 3151.

La debilidad del dueño cruzaba el puente

Los FPI con propietario registrado debían ser únicos. Los informales y los de dueño no registrado podían serlo o no, y no existía una política general de cumplimiento.

La persistencia también venía de la fuente. El dueño registrado ofrecía una expectativa mejor, no disponibilidad garantizada. El esquema IDN basado en dominio heredaba las debilidades de persistencia de los dominios.

Añadir urn:publicid: no mantenía el catálogo, no renovaba un dominio y no fijaba para siempre una representación. Para una cosa sin identificador público, primero había que crear el nombre según su propio régimen; después se aplicaba la conversión.

La procedencia debía guardar dueño, política, registro, momento de asignación y cadena, no deducir autoridad de la apariencia.

Resolver seguía siendo una decisión local

El RFC enumeró catálogos OASIS, componentes convertidos en rutas locales, conjuntos conocidos por el programa y mecanismos URI como cachés. No diseñó un servicio mundial único.

El orden de catálogos, las reglas de reescritura, la base, el montaje de archivos y la edad de caché podían elegir destinos diferentes. Un match probaba que una regla ganó. Faltaba probar que el destino se abrió y qué devolvió.

Luego venían los bytes y su hash, el parser y sus políticas, los diagnósticos y el efecto en la aplicación. Un booleano resolved convertía toda esa cadena en una afirmación imposible de auditar.

No se especificó validación. La ausencia de nuevas consideraciones de seguridad no autenticó propietario, catálogo, caché ni contenido. Un codificador correcto podía conducir con precisión a una regla obsoleta o maliciosa.

La ejecución tenía derecho a contradecir la sintaxis

Una URN perfecta puede encontrar un archivo local viejo. La regla coincide, la apertura funciona y el parser acepta; aun así, la aplicación usa una versión equivocada. En otra máquina, la misma URN puede seleccionar una DTD distinta.

La especificación manda sobre la transcripción. La ejecución responde quién resolvió, qué regla ganó, qué bytes llegaron y qué ocurrió. Esas respuestas no invalidan el algoritmo, pero impiden atribuirle un resultado que nunca prometió.

La virtud histórica fue una frontera pequeña. El nombre público entró en la arquitectura URI sin convertirse en ubicación. Transportar identidad fue un paso; resolverla siguió siendo otro sistema.

Fuentes