|
Bog BOS: sitelife: URI (URL, URN, URC) - Universal Resource Identifier |
Последнее изменение файла: 2011.06.06
Скопировано с www.bog.pp.ru: 2024.11.23
Имена и адреса |
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 - 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 |
CWD <cwd1> ... CWD <cwdN> TYPE <typecode> RETR <name>Надо заметить, что все CWD - относительные, т.е. если хочется указать абсолютный путь к файлу, например /etc/passwd, то надо написать:
<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 определяется в след.порядке:
Относительный 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 ищет "сломанные" ссылки на страницах и целых сайтах. Лицензия - 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).
Установка:
Некоторые ключи (регулярные выражения в формате питона, но восклицательный знак впереди - отрицание):
Примеры:
В конце документации автор любезно сообщает ссылки на другие программы проверки ссылок.
|
Bog BOS: sitelife: URI (URL, URN, URC) - Universal Resource Identifier |