Кратко

  • RFC 3151 нормализовал строку публичного идентификатора и детерминированно переносил пробелы, структурные разделители и буквальные зарезервированные символы в urn:publicid:; правильная транскрипция не проверяла владельца или ресурс.
  • Эквивалентность оставалась лексической: после нормализации две URN были эквивалентны только при полном совпадении. Одинаковое имя могло встретить разные каталоги, байты и результаты.
  • Разрешение оставалось контекстным — каталог, локальный путь, встроенное знание или кэш — поэтому выбор, отображение, получение, разбор и эффект нуждались в отдельных квитанциях.

Переносилось имя, а не местоположение

У внешней сущности XML были системный и публичный идентификаторы. Первый по определению являлся URI и часто обозначал локальное место. Второй был строкой из практики SGML и служил более глобальным, постоянным именем.

Когда новые спецификации потребовали URI, старые строки не вошли в интерфейс. RFC 3151 не отменил установленные каталоги, а создал формальное пространство publicid для записи имени как URN.

Форма URI могла выглядеть как повышение авторитета. Но уникальность и постоянство наследовались от исходного имени. Незарегистрированный владелец не регистрировался от префикса, слабая политика не исправлялась.

RFC был Informational и не задавал Internet Standard. Примеры назывались педагогическими, без гарантии реальности. Они показывали правило, но не развёртывание или достижимый ресурс.

Нормализация стирала след ради сравнения

До транскрипции серии пробелов, табуляций, возвратов и переводов строки превращались в один пробел, края очищались. Разные отступы могли дать одно имя.

Потеря была намеренной и необратимой, если осталась лишь URN. Следовало хранить исходную строку, кодировку, нормализованный результат и версию правила.

Пробел становился +, а буквальный плюс — %2B. Поскольку серии схлопывались заранее, соседние плюсы не должны были появляться из пробелов. Формы свидетельствовали о разных исходных символах.

Правдоподобный результат не доказывал порядок обработки. Квитанция требовала промежуточных состояний.

Контуры структуры не были сертификатом

Formal Public Identifiers обычно содержали владельца, класс, описание, язык и иногда версию. // разделял поля, а :: мог появляться внутри.

RFC 3151 превращал // в :, а :: в ;, сохраняя вид структуры без полного SGML-парсера. Проверка FPI не входила в алгоритм.

Двоеточие доказывало двойной слеш в нормализованном источнике, но не регистрацию владельца или корректность полей.

Литеральное двоеточие становилось %3A, одиночный слеш %2F, точка с запятой %3B; апостроф, вопрос, решётка и процент также экранировались. Позиция и порядок замен были частью доказательства.

Round-trip подтверждал сохранность нормализованного имени, не назначение и не разрешение.

Совпадение текста не означало совпадение ресурса

После нормализации две URN были эквивалентны тогда и только тогда, когда лексически идентичны. Не было смены регистра, псевдонимов владельца или семантического сравнения.

Локальный каталог мог вести два имени к файлу, не делая имена равными. Одна URN могла пройти разные цепочки каталогов, базовые URI, файловые системы и кэши.

Один ресурс мог иметь несколько публичных идентификаторов. Равенство имени, отображения, байтов и поведения были четырьмя проверками. Поздние RFC о URI/URN не расширяли правило 3151 задним числом.

Слабость владельца тоже наследовалась

FPI с зарегистрированным владельцем должны были быть уникальны. Неформальные имена и незарегистрированные владельцы могли столкнуться; единой политики принуждения не было.

Постоянство также приходило от источника. Регистрация давала лучшую основу, но не гарантировала каталог или содержание. Схема IDN на доменном имени наследовала слабости доменов.

urn:publicid: не ремонтировал выдачу, не поддерживал сервис и не замораживал представление. Ресурс без публичного идентификатора сначала получал его по исходным правилам, затем применялась транскрипция.

Нужно сохранять владельца, регистрацию, политику, время и контекст, а не выводить авторитет из формы.

Разрешение осталось локальной цепочкой решений

Документ называл каталоги OASIS, преобразование в локальные пути, встроенные таблицы и кэши. Единого мирового resolver он не задавал.

Порядок каталогов, rewrite, база, mount, сеть и возраст кэша выбирали цель. Совпадение правила подтверждало выбор, не чтение.

Затем требовались байты и хэш, парсер и entity-policy, диагностика и результат приложения. resolved=true скрывал цепочку.

Механизм валидации не задавался. Отсутствие дополнительных security considerations не аутентифицировало владельца, каталог, кэш или содержимое. Точный encoder мог точно привести к старому файлу.

Работающий код исправлял вывод из идеального имени

Идеальная URN может найти старую локальную DTD. Правило, открытие и parsing успешны, но приложение использует неверную версию. Другая машина выберет по тому же имени иные байты.

Таблица RFC авторитетна для транскрипции. Исполнение показывает resolver, правило, байты и эффект. У каждого уровня своя квитанция.

Историческое достижение было точно ограничено: старое имя вошло в архитектуру URI, не выдавая себя за адрес. Перенос идентичности не завершал разрешение.

Источники