5.2. Пример схемы CID URI
Рассмотрим схему URI на основе MIME Content-Id. URI может иметь вид:
cid:[email protected]
Отметим, что этот пример выбран с учебными целями и не соответствует схеме CID URI.
Первым шагом процесса преобразования будет нахождение схемы CID. Эта схема выделяется из URI путем добавления в конце суффикса '.uri.arpa.' и поиска NAPTR для имени 'cid.uri.arpa.'. Результат может иметь вид:
cid.uri.arpa. ;; order pref flags service regexp replacement IN NAPTR 100 10 "" "" "!^cid:[email protected] ([^\.]+\.)(.*)$!\2!i" .
Поскольку здесь имеется лишь одна запись, упорядочение не представляет проблемы. Поле replacement пусто, поэтому используется шаблон, указанный в поле regexp. Это регулярное выражение применяется ко всему значению URI для проверки соответствия и дает позитивный результат. Компонента \2 выражения для замены возвращает строку "example.com". Поскольку поле флагов пусто, поиск не является завершающим и далее следует запрос к DNS для получения новых записей NAPTR, связанных с доменом 'example.com'.
Отметим, что правило не выделяет полное доменное имя из CID, предполагая, что CID происходит от хоста и выделяя доменное имя этого хоста. Хотя все хосты (такие, как bar) иогут иметь свои собственные записи NAPTR, поддержка независимых записей для всех хостов сайта может оказаться слишком обременительной. Шаблоны здесь не подходят, поскольку их использование будет возвращать результат лишь при отсутствии точного соответствия имен в системе.
Записи, возвращенные по запросу для имени example.com, могут иметь вид:
example.com. ;; order pref flags service regexp replacement IN NAPTR 100 50 "s" "z3950+I2L+I2C" "" z3950.tcp.example.com. IN NAPTR 100 50 "s" "rescap+I2C" "" rescap.udp.example.com. IN NAPTR 100 50 "s" "thttp+I2L+I2C+I2R" "" thttp.tcp.example.com.
Продолжая рассмотрение этого примера, отметим, значения поля order совпадают для всех записей и клиент может выбрать любую запись. Приложение определяет флаг 's' как признак завершения поиска и указания на то, что результатом перезаписи будет доменное имя, для которого следует запросить запись SRV. Когда клиент сделает такой запрос, он получит информацию о хосте, номере порта, протоколе и службах, доступных по этому протоколу. Этой информации клиенту достаточно для контакта с сервером и запроса у него информации о CID URI.
Напомним, что в регулярном выражении последовательность \2 служит для выделения доменного имени из CID, а \. для соответствия символам точки, разделяющим компоненты доменного имени. Поскольку '\' используется в качестве escape-символа, вхождение этого символа как литерала должно использовать дополнительный escape-символ '\'. Для приведенной выше записи cid.uri.arpa регулярное выражение в master-файле должно иметь форму "!^cid:[email protected] ([^\\.]+\\.)(.*)$!\\2!i". Когда клиентская программа получает запись, шаблон преобразуется в "!^cid:[email protected] ([^\.]+\.)(.*)$!\2!i".