@ Карта сайта News Автора!

Bog BOS: sitelife:  URI (URL, URN, URC) - Universal Resource Identifier

Последнее изменение файла: 2011.06.06
Скопировано с www.bog.pp.ru: 2024.04.26

Bog BOS: sitelife: URI (URL, URN, URC) - Universal Resource Identifier

Имена и адреса

URI - Universal Resource Identifier (RFC 2396, August 1998) - компактная строка символов для идентификации абстрактного или физического ресурса. Под ресурсом понимается любой объект, принадлежащий некоторому пространству. Включает и переопределяет определенные ранее URL (RFC 1738/RFC 1808) и URN (RFC 2141, RFC 2611). Имеет абсолютную и относительную формы. Стандарт (RFC 2396) установлен IETF. WWW консорциум принимает участие в определении схемы http.

Материалы рабочей группы IETF по URI.

URL (RFC 1738, RFC 2396)

URL - Uniform Resource Locators явно описывает как добраться до объекта.

   <scheme>:<scheme-specific-part>

Имя схемы - последовательность [a-z0-9+.-] Буквы из верхнего регистра переводятся в нижний.

Кодировка символов. Стандарт URI имеет дело с символами, а не октетами (для US-ASCII это одно и то же). Можно использовать шестнадцатеричные значения в виде: %5f. Обязательно должны кодироваться непечатные октеты: 00-1F, 7F, 80-FF. Также всегда кодируются "небезопасные" символы: " ", "<", ">", """, "#", "%", "{", "}", "|", "\", "^", "~", "[", "]", "`". Некоторые схемы резервируют и другие символы: ";","/","?",":","@","=" и "&". Их также необходимо кодировать, если хочется "обойти" их специальное трактование. Таким образом остаются [a-z0-9$-_.+!*'(),] и резервированные символы в их специальном значении для данной схемы. Правило: если смысл URI изменится от кодирования данного символа, то его надо кодировать, если он не разделитель в данной схеме. Некодированные пробелы, табуляции и символы управления кареткой игнорируются. Символы не ASCII должны быть переведены в UTF-8 и представлены шестнадцатеричными значениями как указано выше. Главное, не произвести кодирование/декодирование дважды.

Если URL упоминается в обычном тексте, то рекомендуется заключать его в угловые скобки.

Основные схемы URL

<host> - полное доменное имя (fqdn) или IP адрес в виде 4х десятичных чисел, разделенных точкой.

Новые схемы назначаются IANA:

IANA ведет также

Еще больший список ведется (велся - им тоже надоело :) WWW консорциумом (надо отметить about:, addbook:, https:, javascript:, urn: (RFC 2141).

Relative URL - относительные URL (RFC1808, June 1995; RFC 2396)

Избавляет от необходимости лишний раз вводить, хранить и передавать уже имеющуюся информацию. Облегчает передвижение дерева документов или смену схемы (один и тот же набор документов может быть доступен как по схеме http:, так и ftp: и file:).

Предполагается, что базовая схема описывается синтаксисом:
<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>
Синтаксис относительного URI позволяет опускать <scheme> (использовать схему Базового URI), <net_loc> (указываемый объект лежит в том же месте, что и базовый), первый слеш (<path> определяется относительно базового пути). Базовый URI определяется в след.порядке:

  1. явно указан в тексте документа (например, в HTML)
  2. определен в объемлющем документе (например, вложение в письмо)
  3. URI, используемый для извлечения исходного документа (после обработки redirect-ов)
  4. определяется приложением

Относительный URI приводится к абсолютной форме, используя базовый URI для возмещения недостающих частей и с использованием имен сегментов ".." и "." как в файловой системе Unix (этот механизм используется для получения строки абсолютного URI до извлечения ресурса, а не в процессе извлечения!). Первый сегмент пути получившегося URI не может быть "..". Если относительный URI - пуст (состоит только из указания фрагмента), то ресурс не должен извлекаться повторно.

Фрагмент ресурса

В конце URI может быть строка, отделенная символом "#". Она позволяет указать на фрагмент ресурса, но не является частью синтаксиса URI. Используется клиентской программой после успешного извлечения ресурса. Использование только фрагмента без URI позволяет ссылаться на текущий ресурс.

URN - Uniform Resource Name (RFC 2141, May 1997; RFC 2611)

Предназначается для идентификации ресурсов, независимой от их месторасположения. Общий синтаксис:
  urn:<Namespace Identifier>:<Namespace Specific String>
NID определяет синтаксис NSS, представляет собой имя (буквы, цифры, тире, длиной до 32 символов, большие и маленькие буквы не различаются). Фактически задает пространство имен. Для кодирования не-ASCII символов их требуется преобразовать в UTF-8, а затем представить каждый октет в виде шестнадцатеричных кодов: %<цифра><цифра>.

Например, URN для поля заголовка сообщения выглядит так:
urn:ietf:params:message-header:from
где имена полей приводятся к строчным символам; символы, которые можно использовать в имени поля, но нельзя использовать в URN, преобразуются в %-форму.

URC - Uniform Resource Characteristics (RFC 2483)

Материалы

Примеры работы с URI

Извлечение ссылок из файлов в формате HTML (/usr/local/bin/qxurl.pl):

#!/usr/bin/perl -n
BEGIN { $/ = '' }
print "$2\n" while m{
                      < \s*
                         A \s+ HREF \s* = \s* (["']) (.*?) \1
                      \s* >
                  }gsix;

Превращение bookmarks.html от Netscape в список URL:

cat закладки | qxurl.pl | awk -F\" '{print $1}' > url.list

Проверка ссылок - linkchecker

LinkChecker ищет "сломанные" ссылки на страницах и целых сайтах. Лицензия - GPL. Версия - 5.1 (август 2009). Многопоточный. Интерфейс - текстовый, графический, вебинтерфейс. Журнал - текст, HTML, XML, CSV, граф связности сайта. Понимает HTTP/1.1, HTTPS, FTP, mailto:, news:, nntp:, Telnet и локальные файлы. Поддержка прокси, куки, авторизации, robots.txt. Антивирусная проверка (clamav). Проверка синтаксиса HTML и CSS (W3C validators, tidy, cssutils).

Установка:

Некоторые ключи (регулярные выражения в формате питона, но восклицательный знак впереди - отрицание):

Примеры:

В конце документации автор любезно сообщает ссылки на другие программы проверки ссылок.

Ссылки

@ Карта сайта News Автора!

Bog BOS: sitelife:  URI (URL, URN, URC) - Universal Resource Identifier



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru