Идентификатор uri: Что такое URI с примерами [АйТи бубен]

URI — сложно о простом (Часть 1) / Хабр

Привет хабр!

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

«Пфф, ссылки они и в Африке ссылки, чего тут разбираться?» — скажете вы, тогда я задам вопрос:

Что есть что и куда нас приведет?

Если вы не знаете однозначного ответа или вам просто интересно

и если вы не боитесь огромного количества трехбуквенных аббревиатур — милости прошу под кат.

Перед тем как начать хотел бы обозначить, что есть пост на схожую тему, в котором все обозначено проще и немного понятнее. Целью же этого поста, я ставлю более глубокое изучение вопроса и сбор информации об URI в одном месте, дабы «не потерять».

Ну, почти в одном месте, статья будет разделена на две части
А для удобства бахнем оглавление, которое работает не без особенностей URI, которую мы рассмотрим попозжа, в этой статье.

ОГЛАВЛЕНИЕ

  1. URI
    1.1. Синтаксис
    1.2. Компоненты URI
  2. URL
    2.1. Структура
  3. URN
    3.1. Структура

1. URI Унифицированный Идентификатор Ресурса, в простонародье — URI
Самое свежее описание того, чем же все-таки являются эти пресловутые URI датируется январем аж 2005-го, а именно RFC3986, написанный самим Тимом Бёнесом-Ли, родоначальника всеми нами любимого тырнета.
Резюмируя п.1.1 можно сформулировать определение:

URI — последовательность символов, идентифицирующая физический или абстрактный ресурс, который не обязательно должен быть доступен через сеть Интернет, причем, тип ресурса, к которому будет получен доступ, определяется контекстом и/или механизмом.


Например:

  • перейдя по http://example.com — мы попадем на http-сервер ресурса идентифицируемого как example.com
  • в то же время ftp://example.com — приведет наc на ftp-сервер того же самого ресурса
  • или например http://localhost/ — URI идентифицирующий саму машину откуда производится доступ
В современном интернете, чаще всего используется две разновидности URIURL и URN.
Основное различие между ними — в задачах:

  • URLUniform Resource Locator, помогает найти какой либо ресурс
  • URNUniform Resource Name, помогает этот ресурс идентифицировать
Упрощая: URL — отвечает на вопрос: «Где и как найти что-то?», URN — отвечает на вопрос: «Как это что-то идентифицировать».

Парочка интересностей про URI

Многие из вас замечали, что на разных ресурсах ссылки называют то URL, то URI и, вероятно, становилось интересно — какой же из вариантов правильный?
Дело в том, что URL увидел свет и был документирован в 1990 году, в то время как URI был документирован лишь в 1994 году. И вплоть до 2002 года, до выхода RFC3305, уместными были оба варианта именования, что, порой вносило путаницу.
В п.2 RFC3305 сообщается об устаревании такого термина как URL, применимо к ссылкам, и что отныне верным будет именование URI, с того момента, во всех документах W3C использует термин URI. Исходя из этого, применяя термин URL к соответствующим ссылкам, вы не делаете смысловой ошибки, но делаете ее с точки зрения правильного именования.

Так же примечателен тот момент, что вплоть до выхода RFC2396, в 1997 году, URI расшифровывался как Universal Resource Identifier, что можно увидеть в RFC1630

Обобщая всевозможные варианты, URI имеет следующий вид:

Забегая вперед, стоит отметить, что не все три компоненты являются строго обязательными. Для того чтобы ссылка считалась URI необходимо наличие:

  • либо scheme+authority+path,
  • либо sheme+path,
  • либо только path.
1.
1. Синтаксис Согласно п.2 RFC3986:

URI составлен из ограниченного набора символов, состоящих из цифр, букв и нескольких графических символов, все эти символы вписываются в кодировку US-ASCII (ASCII). Зарезервированное подмножество символов может использоваться, чтобы разграничить компоненты синтаксиса в URI, в то время как остающиеся символы: не зарезервированный набор и включая те зарезервированные символы, которые не действуют как разделители в данной компоненте URI, определяют данные идентификации каждого компонента.

Зарезервированные символы
Зарезервированные символы делятся на два типа:

  • gen-delims, они же «главные разделители», т.е. символы, разделяющие URI на крупные компоненты.
     ":", "/", "?", "#", "[", "]", "@"
  • sub-delims, они же «под разделители» — символы, которые разделяют текущую крупную компоненту, на более мелкие составляющие, для каждой компоненты они свои, вот список самых распространенных:
     "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "="

Не зарезервированные символы
Исходя из предыдущего пункта, не зарезервированные символы — символы, не входящие в gen-delims, а так же не значимые для данной компоненты sub-delims. Но в общем случае это:

ALPHA, DIGIT, "-", ".", "_", "~"
Для данного случая, согласно ABNF:
ALPHA — любая буква верхнего и нижнего регистров кодировки ASCII (в regExp [A-Za-z])
DIGIT — любая цифра (в regExp [0-9])
HEXDIG — шестнадцатиричная цифра (в regExp [0-9A-F])

Процентное кодирование
В случае, если используются символы выходящие за пределы кодировки ASCII используется механизм т.н. «Процентного кодирования«. Так же он применяется для передачи зарезервированных символов в составе данных. Зарезервированные символы, по правилам, не участвуют в процентном кодировании.
Процентно-кодированный символ представляет из себя символьный триплет, состоящий из знака «%» и следующих за ним двух шестнадцатиричных чисел:

pct-encoded = "%" HEXDIG HEXDIG
Т.о., %20, например, означает пробел.

1.2. Компоненты URI
Следующий список содержит описания крупных компонент, составляющих URI:

  • Scheme (схема)
    Каждый URI начинается с имени схемы, которое относится к спецификации для присвоения идентификаторов в этой схеме. Также, синтаксис URI — объединенная и расширяемая система именования, причем, спецификация каждой схемы может далее ограничить синтаксис и семантику идентификаторов, использующих эту схему.
    Название схемы обязательно начинается с буквы и далее может быть продолжено любым количеством разрешенных символов.
    Разрешенные символы для схемы:
    ALPHA, DIGIT, "+", "-", "."
  • Authority (честно говоря, не знаю как перевести слово на русский, без потери смысла)
    Компонента authority начинается с двойного слеша(//) и заканчивается следующим слешем(/), знаком вопроса(?) или октоторпом(#)(да-да, «решеточка» зовется именно так=)) или концом URI
    Authority состоит из:
    [ userinfo "@" ] host [ ":" port ]
    где в квадратных скобках опциональные компоненты
    Каждую из подкомпонент, отдельно, мы рассмотрим чуть позже, в разделе посвященном URL.
  • Path (Путь)
    Компонента пути содержит данные, обычно, организованные в иерархической форме, которые, вместе с данными в неиерархическом компоненте запроса (Query), служит, чтобы идентифицировать ресурс в рамках схемы URI и authority (если таковая компонента указана).

    Путь начинается со слеша(/) и заканчивается знаком вопроса(?), октоторпом(#) или концом URI
    Разрешенные символы для пути:
    Не зарезервированные, процентно-кодированные, sub-delims, ":", "@"
  • Query (Запрос)
    Компонента запроса содержит данные, организованные в неиерархической форме, которые, вместе с данными в иерархическом компоненте пути (Path), служит, чтобы идентифицировать ресурс в рамках схемы URI и authority (если таковая компонента указана).
    Запрос начинается с первого знака вопроса(?) и заканчивается октоторпом(#) или концом URI
    Разрешенные символы для запроса:
    Не зарезервированные, процентно-кодированные, sub-delims, ":", "@", "/", "?"
    В запросе чаще всего передаются данные в формате key=value (ключ=значение), значение рекомендуется передавать в процентно-кодированном виде, обусловлено это тем, что в значении может встретиться символ «&», который используется для разделения пар ключ-значение, в результате появления такого артефакта дальнейшая последовательность пар ключ-значение может быть нарушена.
  • Fragment (Фрагмент)
    Компонента фрагмент позволяет осуществить косвенную идентификацию вторичного ресурса по отношению к первому.
    Семантика фрагмента никак не ограничена, фрагмент начинается октоторпом(#) и заканчивается концом URI, при этом может состоять из абсолютно любого набора символов.
    Примером применения фрагментов является оглавление данной статьи. Оно состоит из относительных ссылок
    <a href="#someanchor"></a>
    а по статье, в определенных местах, раскиданы т.н. «якоря» — теги
    <anchor>someanchor</anchor>

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

    <anchor>
    на экране.
На этом, пожалуй, знакомство с URI можно закончить и начать углубляться в отдельные подвиды URI, а именно

2. URL Стандарт URL документирован в RFC1738.
Из п.2:

URL используются, чтобы определить местоположение ресурсов, обеспечивая абстрактную идентификацию расположения ресурса. Определив местоположение ресурса, система может выполнить множество операций на ресурсе, которые могут быть характеризованы такими словами как ‘доступ’, ‘обновление’, ‘замена’, ‘поиск атрибутов’. В целом только метод доступа должен быть определен для любой схемы URL.
Т. о.: URL призван решить широкий ряд задач, начиная с получения и заканчивая изменением данных на ресурсе, а обязательным параметром для получения доступа — является метод, т. е. любой полноценный (абсолютный) URL можно свести к виду:

<scheme>:<часть свойственная этой схеме>

2.1. Структура
В целом, URL имеет схожую структуру, для всех схем, хотя для каждой отдельно взятой схемы, структура может отличаться от общего шаблона.
Графически ее можно выразить в следующем виде:

И вот, примерно на этом моменте, можно рассмотреть различия между абсолютными (absolute) и относительными (relative) URL, данные определения распространяются не только на URL, но и на URI в целом.

После того, как мы разобрались с тем, что же такое относительные и абсолютные пути — можно отвечать на вопрос заданный в начале поста:

  • http://example.com — откроет http://example.com
  • www.example.com — по-идее должен открыть http://habrahabr.ru/topic/232385/www.example.com, но хабр сам исправляет ссылку, хотя по стандартам www.example.com — ссылка относительного пути
  • //www.example.com — откроет www.example.com со схемой с которой вы просматриваете текущую страницу, т.е. скорее всего будет открыт http://example.com
  • mailto:[email protected] — здесь уже вступают в силу настройки браузера, он предложит вам открыть эту ссылку при помощи почтовой программы и отправить электронное письмо адресату [email protected], а так, это абсолютный URL со схемой mailto
Мы уже рассмотрели крупные компоненты, а теперь давайте углубимся в детали построения URL.

3. URN Стандарт URN документирован в RFC2141.
Из п.1:

Унифицированные имена ресурсов (URN) предназначены, чтобы служить постоянными, независимыми от расположения, идентификаторами ресурсов и разработаны для упрощения отображения других пространств имен (которые совместно используют свойства URN) в URN-пространство. Таким образом, синтаксис URN обеспечивает средство закодировать символьные данные в форме, которая может быть отправлена посредством существующих протоколов, записана при помощи большинства клавиатур, и т.д.
Т. е., в отличие от URL, который ссылается на како-то место, где хранится документ, URN ссылается на сам документ, и при перемещении документа в другое место ссылка не изменится.
В силу того, что URN концептуально отличается от URL, то и система разрешения имен у него другая — DDDS, которая преобразует URN в URL, по которым можно найти ресурс/объект или что бы то ни было, на что ссылается URN.

3.1. Структура
URN имеет следующий вид:

"urn:" <NID> ":" <NSS>

  • «urn:» — обязательная, регистронезависимая часть URN
  • NID — Namespace Identifier, данная компонента определяет синтаксическую интерпретацию компоненты NSS.
    Минимальная длина — 2 символа, максимальная — 32, разрешенные символы:
    латинские буквы, цифры, "-"
    NID должен начинаться только с буквы или цифры.
    Так же, слово «urn» для NID является зарезервированным, дабы избежать неоднозначности при определении URN в целом.
    Список официально зарегистрированных NID можно посмотреть тут
  • NSS — Namespace Specific String, эта компонента служит непосредственно для передачи каких-либо данных.
    Разрешенные символы:
    латинские буквы, цифры, процентно-кодированные, "(", ")", "+", ",", "-", ".", ":", "=", "@", ";", "$", "_", "!", "*", "'"
    Зарезервированные символы:
    "%", "/", "?", "#"
    Запрещенные символы должны быть процентно-кодированы. «, «`», «{«, «|», «}», «~», октеты 127-255 (7F-FF hex)
Самоидентифицирующийся URN
Такие URN содержат в NID название хэш-функции, а в NSS значение хэша, вычисленного для идентифицируемого объекта. Такие ссылки используются в magnet-ссылках и заголовках p2p-сети Gnutela2.
Например, URN из magnet-ссылки с одного торрент-трекера:
magnet:?xt=urn:btih:c68abc1ba9b8c7c4bc373862cad1a8c01d69e53d...

С теорией все, во второй части рассмотрим, что можно и что нужно делать с URI, если мы их обрабатываем, а именно — нормализация, разбор и т.д.

За сим откланяюсь, спасибо что читали, надеюсь не было скучно, удачи!

URI — сложно о простом (Часть 1) / Хабр

Привет хабр!

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

«Пфф, ссылки они и в Африке ссылки, чего тут разбираться?» — скажете вы, тогда я задам вопрос:

Что есть что и куда нас приведет?

Если вы не знаете однозначного ответа или вам просто интересно

и если вы не боитесь огромного количества трехбуквенных аббревиатур — милости прошу под кат.

Перед тем как начать хотел бы обозначить, что есть пост на схожую тему, в котором все обозначено проще и немного понятнее. Целью же этого поста, я ставлю более глубокое изучение вопроса и сбор информации об URI в одном месте, дабы «не потерять». Ну, почти в одном месте, статья будет разделена на две части
А для удобства бахнем оглавление, которое работает не без особенностей URI, которую мы рассмотрим попозжа, в этой статье.

ОГЛАВЛЕНИЕ

  1. URI
    1. 1. Синтаксис
    1.2. Компоненты URI
  2. URL
    2.1. Структура
  3. URN
    3.1. Структура

1. URI Унифицированный Идентификатор Ресурса, в простонародье — URI
Самое свежее описание того, чем же все-таки являются эти пресловутые URI датируется январем аж 2005-го, а именно RFC3986, написанный самим Тимом Бёнесом-Ли, родоначальника всеми нами любимого тырнета.
Резюмируя п.1.1 можно сформулировать определение:

URI — последовательность символов, идентифицирующая физический или абстрактный ресурс, который не обязательно должен быть доступен через сеть Интернет, причем, тип ресурса, к которому будет получен доступ, определяется контекстом и/или механизмом.
Например:

  • перейдя по http://example.com — мы попадем на http-сервер ресурса идентифицируемого как example.com
  • в то же время ftp://example. com — приведет наc на ftp-сервер того же самого ресурса
  • или например http://localhost/ — URI идентифицирующий саму машину откуда производится доступ
В современном интернете, чаще всего используется две разновидности URIURL и URN.
Основное различие между ними — в задачах:

  • URLUniform Resource Locator, помогает найти какой либо ресурс
  • URNUniform Resource Name, помогает этот ресурс идентифицировать
Упрощая: URL — отвечает на вопрос: «Где и как найти что-то?», URN — отвечает на вопрос: «Как это что-то идентифицировать».

Парочка интересностей про URI

Многие из вас замечали, что на разных ресурсах ссылки называют то URL, то URI и, вероятно, становилось интересно — какой же из вариантов правильный?
Дело в том, что URL увидел свет и был документирован в 1990 году, в то время как URI был документирован лишь в 1994 году. И вплоть до 2002 года, до выхода RFC3305, уместными были оба варианта именования, что, порой вносило путаницу.
В п.2 RFC3305 сообщается об устаревании такого термина как URL, применимо к ссылкам, и что отныне верным будет именование URI, с того момента, во всех документах W3C использует термин URI. Исходя из этого, применяя термин URL к соответствующим ссылкам, вы не делаете смысловой ошибки, но делаете ее с точки зрения правильного именования.

Так же примечателен тот момент, что вплоть до выхода RFC2396, в 1997 году, URI расшифровывался как Universal Resource Identifier, что можно увидеть в RFC1630

Обобщая всевозможные варианты, URI имеет следующий вид:

Забегая вперед, стоит отметить, что не все три компоненты являются строго обязательными. Для того чтобы ссылка считалась URI необходимо наличие:

  • либо scheme+authority+path,
  • либо sheme+path,
  • либо только path.
1.
1. Синтаксис Согласно п.2 RFC3986:

URI составлен из ограниченного набора символов, состоящих из цифр, букв и нескольких графических символов, все эти символы вписываются в кодировку US-ASCII (ASCII). Зарезервированное подмножество символов может использоваться, чтобы разграничить компоненты синтаксиса в URI, в то время как остающиеся символы: не зарезервированный набор и включая те зарезервированные символы, которые не действуют как разделители в данной компоненте URI, определяют данные идентификации каждого компонента.

Зарезервированные символы
Зарезервированные символы делятся на два типа:

  • gen-delims, они же «главные разделители», т.е. символы, разделяющие URI на крупные компоненты.
     ":", "/", "?", "#", "[", "]", "@"
  • sub-delims, они же «под разделители» — символы, которые разделяют текущую крупную компоненту, на более мелкие составляющие, для каждой компоненты они свои, вот список самых распространенных:
     "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "="

Не зарезервированные символы
Исходя из предыдущего пункта, не зарезервированные символы — символы, не входящие в gen-delims, а так же не значимые для данной компоненты sub-delims. Но в общем случае это:

ALPHA, DIGIT, "-", ".", "_", "~"
Для данного случая, согласно ABNF:
ALPHA — любая буква верхнего и нижнего регистров кодировки ASCII (в regExp [A-Za-z])
DIGIT — любая цифра (в regExp [0-9])
HEXDIG — шестнадцатиричная цифра (в regExp [0-9A-F])

Процентное кодирование
В случае, если используются символы выходящие за пределы кодировки ASCII используется механизм т.н. «Процентного кодирования«. Так же он применяется для передачи зарезервированных символов в составе данных. Зарезервированные символы, по правилам, не участвуют в процентном кодировании.
Процентно-кодированный символ представляет из себя символьный триплет, состоящий из знака «%» и следующих за ним двух шестнадцатиричных чисел:

pct-encoded = "%" HEXDIG HEXDIG
Т.о., %20, например, означает пробел.

1.2. Компоненты URI
Следующий список содержит описания крупных компонент, составляющих URI:

  • Scheme (схема)
    Каждый URI начинается с имени схемы, которое относится к спецификации для присвоения идентификаторов в этой схеме. Также, синтаксис URI — объединенная и расширяемая система именования, причем, спецификация каждой схемы может далее ограничить синтаксис и семантику идентификаторов, использующих эту схему.
    Название схемы обязательно начинается с буквы и далее может быть продолжено любым количеством разрешенных символов.
    Разрешенные символы для схемы:
    ALPHA, DIGIT, "+", "-", "."
  • Authority (честно говоря, не знаю как перевести слово на русский, без потери смысла)
    Компонента authority начинается с двойного слеша(//) и заканчивается следующим слешем(/), знаком вопроса(?) или октоторпом(#)(да-да, «решеточка» зовется именно так=)) или концом URI
    Authority состоит из:
    [ userinfo "@" ] host [ ":" port ]
    где в квадратных скобках опциональные компоненты
    Каждую из подкомпонент, отдельно, мы рассмотрим чуть позже, в разделе посвященном URL.
  • Path (Путь)
    Компонента пути содержит данные, обычно, организованные в иерархической форме, которые, вместе с данными в неиерархическом компоненте запроса (Query), служит, чтобы идентифицировать ресурс в рамках схемы URI и authority (если таковая компонента указана).
    Путь начинается со слеша(/) и заканчивается знаком вопроса(?), октоторпом(#) или концом URI
    Разрешенные символы для пути:
    Не зарезервированные, процентно-кодированные, sub-delims, ":", "@"
  • Query (Запрос)
    Компонента запроса содержит данные, организованные в неиерархической форме, которые, вместе с данными в иерархическом компоненте пути (Path), служит, чтобы идентифицировать ресурс в рамках схемы URI и authority (если таковая компонента указана).
    Запрос начинается с первого знака вопроса(?) и заканчивается октоторпом(#) или концом URI
    Разрешенные символы для запроса:
    Не зарезервированные, процентно-кодированные, sub-delims, ":", "@", "/", "?"
    В запросе чаще всего передаются данные в формате key=value (ключ=значение), значение рекомендуется передавать в процентно-кодированном виде, обусловлено это тем, что в значении может встретиться символ «&», который используется для разделения пар ключ-значение, в результате появления такого артефакта дальнейшая последовательность пар ключ-значение может быть нарушена.
  • Fragment (Фрагмент)
    Компонента фрагмент позволяет осуществить косвенную идентификацию вторичного ресурса по отношению к первому.
    Семантика фрагмента никак не ограничена, фрагмент начинается октоторпом(#) и заканчивается концом URI, при этом может состоять из абсолютно любого набора символов.
    Примером применения фрагментов является оглавление данной статьи. Оно состоит из относительных ссылок
    <a href="#someanchor"></a>
    а по статье, в определенных местах, раскиданы т.н. «якоря» — теги
    <anchor>someanchor</anchor>

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

    <anchor>
    на экране.
На этом, пожалуй, знакомство с URI можно закончить и начать углубляться в отдельные подвиды URI, а именно

2. URL Стандарт URL документирован в RFC1738.
Из п.2:

URL используются, чтобы определить местоположение ресурсов, обеспечивая абстрактную идентификацию расположения ресурса. Определив местоположение ресурса, система может выполнить множество операций на ресурсе, которые могут быть характеризованы такими словами как ‘доступ’, ‘обновление’, ‘замена’, ‘поиск атрибутов’. В целом только метод доступа должен быть определен для любой схемы URL.
Т. о.: URL призван решить широкий ряд задач, начиная с получения и заканчивая изменением данных на ресурсе, а обязательным параметром для получения доступа — является метод, т. е. любой полноценный (абсолютный) URL можно свести к виду:

<scheme>:<часть свойственная этой схеме>

2.1. Структура
В целом, URL имеет схожую структуру, для всех схем, хотя для каждой отдельно взятой схемы, структура может отличаться от общего шаблона.
Графически ее можно выразить в следующем виде:

И вот, примерно на этом моменте, можно рассмотреть различия между абсолютными (absolute) и относительными (relative) URL, данные определения распространяются не только на URL, но и на URI в целом.

После того, как мы разобрались с тем, что же такое относительные и абсолютные пути — можно отвечать на вопрос заданный в начале поста:

  • http://example.com — откроет http://example.com
  • www.example.com — по-идее должен открыть http://habrahabr.ru/topic/232385/www.example.com, но хабр сам исправляет ссылку, хотя по стандартам www.example.com — ссылка относительного пути
  • //www.example.com — откроет www.example.com со схемой с которой вы просматриваете текущую страницу, т.е. скорее всего будет открыт http://example.com
  • mailto:[email protected] — здесь уже вступают в силу настройки браузера, он предложит вам открыть эту ссылку при помощи почтовой программы и отправить электронное письмо адресату [email protected], а так, это абсолютный URL со схемой mailto
Мы уже рассмотрели крупные компоненты, а теперь давайте углубимся в детали построения URL.

3. URN Стандарт URN документирован в RFC2141.
Из п.1:

Унифицированные имена ресурсов (URN) предназначены, чтобы служить постоянными, независимыми от расположения, идентификаторами ресурсов и разработаны для упрощения отображения других пространств имен (которые совместно используют свойства URN) в URN-пространство. Таким образом, синтаксис URN обеспечивает средство закодировать символьные данные в форме, которая может быть отправлена посредством существующих протоколов, записана при помощи большинства клавиатур, и т.д.
Т. е., в отличие от URL, который ссылается на како-то место, где хранится документ, URN ссылается на сам документ, и при перемещении документа в другое место ссылка не изменится.
В силу того, что URN концептуально отличается от URL, то и система разрешения имен у него другая — DDDS, которая преобразует URN в URL, по которым можно найти ресурс/объект или что бы то ни было, на что ссылается URN.

3.1. Структура
URN имеет следующий вид:

"urn:" <NID> ":" <NSS>

  • «urn:» — обязательная, регистронезависимая часть URN
  • NID — Namespace Identifier, данная компонента определяет синтаксическую интерпретацию компоненты NSS.
    Минимальная длина — 2 символа, максимальная — 32, разрешенные символы:
    латинские буквы, цифры, "-"
    NID должен начинаться только с буквы или цифры.
    Так же, слово «urn» для NID является зарезервированным, дабы избежать неоднозначности при определении URN в целом.
    Список официально зарегистрированных NID можно посмотреть тут
  • NSS — Namespace Specific String, эта компонента служит непосредственно для передачи каких-либо данных.
    Разрешенные символы:
    латинские буквы, цифры, процентно-кодированные, "(", ")", "+", ",", "-", ".", ":", "=", "@", ";", "$", "_", "!", "*", "'"
    Зарезервированные символы:
    "%", "/", "?", "#"
    Запрещенные символы должны быть процентно-кодированы. «, «`», «{«, «|», «}», «~», октеты 127-255 (7F-FF hex)
Самоидентифицирующийся URN
Такие URN содержат в NID название хэш-функции, а в NSS значение хэша, вычисленного для идентифицируемого объекта. Такие ссылки используются в magnet-ссылках и заголовках p2p-сети Gnutela2.
Например, URN из magnet-ссылки с одного торрент-трекера:
magnet:?xt=urn:btih:c68abc1ba9b8c7c4bc373862cad1a8c01d69e53d...

С теорией все, во второй части рассмотрим, что можно и что нужно делать с URI, если мы их обрабатываем, а именно — нормализация, разбор и т.д.

За сим откланяюсь, спасибо что читали, надеюсь не было скучно, удачи!

Определение, основные отличия и многое другое

Развитие веб-сайта Домен

19 мая 2023 г.

Sopha M.

10 мин Чтение

Хотя в некоторых случаях универсальный идентификатор ресурса (URI) и универсальный указатель ресурса (URL) могут использоваться взаимозаменяемо, это не одно и то же.

Знание разницы между URI и URL-адресом может упростить процесс разработки веб-сайта. Например, вы сможете упростить разработку REST API, поскольку URI или URL-адрес будут идентифицировать каждый ресурс в Интернете.

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

В этой статье мы более подробно объясним различия между URI и URL, а также их структуру. Кроме того, мы включим варианты использования как URI, так и URL, вместе с их плюсами и минусами.

Что такое URI

URI или универсальный идентификатор ресурса — это строка символов, которая обычно идентифицирует любой веб-ресурс с использованием имени, местоположения или того и другого. Унифицированный указатель ресурса (URL) и универсальное имя ресурса (URN) — это два типа URI.

Различия между URI и URL

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

URI URL
URI — это аббревиатура от универсального идентификатора ресурса. URL — это аббревиатура от универсального указателя ресурсов.
URI — это надмножество URN и URL. URL-адрес является подмножеством URI.
URI идентифицирует ресурс и отличает его от других, используя имя, местоположение или и то, и другое. URL-адрес определяет веб-адрес или местоположение уникального ресурса.
URI содержит такие компоненты, как схема, полномочия, путь и запрос. Компоненты URL аналогичны URI, но его полномочия состоят из доменного имени и порта.
Пример URI: ISBN 0-476-35557-4. Пример URL: https://hostinger.com.
URI обычно используется в XML, файлах библиотеки тегов и других файлах, таких как JSTL и XSTL. URL в основном предназначен для поиска веб-страниц в Интернете.
Схема URI может быть протоколом, спецификацией или обозначением, таким как HTTP, файл или данные. Схема URL — это протокол, такой как HTTP и HTTPS.

Типы URI

Выяснив ключевые различия между URI и URL, давайте подробно сосредоточимся на двух типах URI.

Унифицированные имена ресурсов (URN)

URN — это постоянный и независимый от местоположения идентификатор, предназначенный для постоянной идентификации ресурса. Это означает, что ресурс остается действительным, даже если его данные перемещаются в другое место.

Для этого URN использует схему для различения ресурсов. Например, urn:isbn:0405999832 идентифицирует книгу по номеру ISBN.

Каждое универсальное имя ресурса (URN) состоит как минимум из трех компонентов:

  • URN – каждый URN использует префикс urn: спецификация схемы .
  • NID — относится к идентификатору пространства имен, который должен быть зарегистрирован в Администрации адресного пространства Интернета (IANA). Это могут быть буквы, цифры или дефис, за которым следует двоеточие.
  • NSS — это строка, относящаяся к пространству имен, которая идентифицирует интернет-ресурс. Он может содержать коды ASCII, цифры, знаки препинания и специальные символы.

Унифицированные указатели ресурсов (URL)

URL-адрес определяет метод получения представления о физическом расположении посредством описания основного механизма доступа или его сетевого расположения. Ресурсы, которые он пытается найти, могут быть веб-страницей, видео, изображением или любым документом, опубликованным в Интернете.

В отличие от URN, этот идентификатор интернет-ресурса не всегда является постоянным и независимым от местоположения, поскольку он указывает путь к ресурсу, который может меняться со временем. Кроме того, URL-адрес не соответствует схеме URN.

Основное различие между обоими идентификаторами заключается в том, что URN указывает только имя ресурса, в то время как URL-адресу требуется метод доступа или протоколы для получения местоположения ресурса.

Короче говоря, все URL-адреса являются URI, но не все URI являются URL-адресами.

Синтаксис URI

Синтаксис универсального идентификатора ресурса (URI) определяет его структуру, позволяя программе понять его. Вот общий синтаксис URI:

 схема:[//полномочие]путь[?запрос][#фрагмент] 

Теперь давайте рассмотрим элементы синтаксиса URI:

Схема

Схема — это первый компонент URI, определяющий систему адресации. В некоторых случаях схемы URI представляют собой протокол, используемый для доступа к ресурсу. Между тем, другие методы могут не указывать какой-либо протокол.

Например, схема about: используется в веб-браузерах, где ресурс встроен в клиент и не привязан ни к какому конкретному протоколу.

Может содержать любую комбинацию букв, цифр, плюсов, точек или дефисов, за которыми следует двоеточие. Наиболее распространенные схемы URI включают HTTP, HTTPS, FTP, mailto и файл.

Например, если URI — file:website.com/pathtofile/intro.pdf , имя схемы — file .

Компонент полномочий

Это необязательный компонент, которому предшествует двойная косая черта и который заканчивается косой чертой, знаком вопроса или символом решетки. Он состоит из трех подкомпонентов:

  • Userinfo – включает имя пользователя и пароль, разделенные двоеточием.
  • Хост — состоит либо из IP-адреса, либо из зарегистрированного имени. IP-адрес должен быть заключен в скобки.
  • Порт — протокол, используемый для подключения к серверу. Это необязательный подкомпонент, за которым следует двоеточие.

Например, авторитетный компонент из file:website. com/pathtofile/intro.pdf — это Website.com/ .

Путь

Путь содержит последовательность сегментов данных, описывающую расположение ресурса в структуре каталогов. Он должен быть пустым или разделен косой чертой. Например, телнет://192.0.2.16:80/ или foo://info.example.com?fred — допустимый URI с пустым путем, поскольку нет указания на конкретное расположение ресурса.

Компонент запроса

Запрос — это необязательный компонент, содержащий строку запроса неиерархических данных. Часто это строка из пар ключ=значение . Этому компоненту предшествует вопросительный знак. Например, если URI равен https://example.org/test/test1?search=test-question#part2 , компонент запроса search=test-question .

Компонент фрагмента

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

Например, компонент фрагмента из https://example.org/test/test1?search=test-question#part2 равен part2 .

Что такое URL-адрес

URL-адрес или универсальный указатель ресурсов — это идентификатор, который указывает только местоположение веб-страницы. Это относится к веб-адресу и возможностям доступа к нему, таким как HTTP, FTP и mailto.

Синтаксис URL-адреса

Каждый URL-адрес должен соответствовать синтаксису URI, который имеет структуру, аналогичную URI. Ниже приведен пример синтаксиса URL-адреса:

https://www.example.com/forum/questions/?tag=networking&order=newest#top

Приведенный выше URL-адрес можно разделить на следующие компоненты:

Схема

Первая часть синтаксиса URL — это протокол, используемый для извлечения ресурса. Схема URL-адреса определяет тип приложения, которое ваше устройство использует для открытия URL-адреса. Например, FaceTime использует схему URL facetime:// для совершения звонков. Другие наиболее часто используемые протоколы для схем URL включают:

  • Протокол передачи гипертекста (HTTP) — позволяет пользователям получать доступ к данным с веб-страниц с помощью гипертекстовых ссылок.
  • Безопасный протокол передачи гипертекста (HTTPS) — защищает передачу данных между браузером пользователя и сайтом.
  • Протокол передачи файлов (FTP) — используется для передачи файлов между различными устройствами по сети.

Кроме того, некоторые протоколы URL-адресов используют ссылку mailto для идентификации адресов электронной почты или JDBC для указания доступа к базе данных в соответствии с требованиями пользователя.

Полномочия

Перед этим компонентом стоит двойная косая черта. Он содержит два подкомпонента — доменное имя и порт , ресурс, к которому вы обращаетесь. Доменное имя — это зарегистрированное имя ресурса, например hostinger.com или google.com .

Pro Tip

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

Что касается порта, это конкретный номер, который определяет, какую веб-службу вы запрашиваете на веб-сервере. Например, номер порта для URL-адреса HTTP — 80, а для URL-адреса HTTPS — 443. Однако, если веб-сервер использует стандартный протокол, такой как HTTP или HTTPS, порт обычно не указывается в URL-адресе.

Путь

Этот элемент определяет конкретное расположение веб-страницы, сообщения или других файлов, к которым пользователи хотят получить доступ в рамках доменного имени. Путь также содержит любое расширение файла ресурса, например изображения и документы.

Однако не все URL-адреса отображают компонент пути. На многих современных веб-серверах вы можете не увидеть компонент пути, поскольку его можно опустить для сокращения URL-адресов. Некоторые примеры путей: …/software/htp/index.html или …/forum/question/.

Строка запроса

Эта строка предоставляет данные о ресурсе на веб-сервере, и ей предшествует вопросительный знак. Обычно он содержит пары ключ-значение, разделенные амперсандом. Например, ?tag=networking&order=newest.

В строке запроса хранятся данные, поскольку протокол HTTP не имеет состояния. Это означает, что каждый запрос независим и не связан с предыдущим запросом. В результате соединение между браузером и веб-сервером будет автоматически закрыто после завершения запроса клиента.

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

Идентификаторы фрагментов

Идентификатор фрагмента или якорь обычно появляется в конце URL-адреса и начинается со знака решетки. Это необязательный компонент для направления веб-браузера на вторичный ресурс. Он относится к определенному разделу на веб-странице.

На HTML-странице браузер переходит к определенному разделу, помеченному фрагментом.

Например, если URL-адрес https://example.com/results.html#intro , он будет напрямую вести к тегу intro на странице с именем results.html .

Причины использования универсального идентификатора ресурса (URI)

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

Вот три варианта использования URI:

  • Аудиовизуальные произведения — ISAN — это серийный кодовый номер, используемый для идентификации аудиовизуальных произведений и их версий, таких как фильмы, телепрограммы или документальные фильмы. Используя схему urn:, URI может идентифицировать ISAN без протокола или способа доступа к нему. Например, urn:isan:0000-0000-2CEA-0000-1-0000-0000-Y , что относится к фильму «Человек-паук» 2002 года. Он идентифицирует ресурс с помощью аудиовизуального номера, не сообщая пользователю, где его найти.
  • Телефонные номера — URI может идентифицировать ресурс с помощью строки набора номера, которая имеет точку завершения сети (NTP), содержащую информацию, необходимую для маршрутизации вызова. Схема tel: представляет собой только глобальный уникальный идентификатор (GUID) и не относится к какому-либо физическому устройству. Например, тел:+1-816-555-6666 описывает GUID как стандартный номер телефона в США.
  • Удаленный доступ — Telnet — это сетевой протокол, в котором URI используют его для указания доступа к удаленному компьютеру или хосту через Интернет. Например, телнет://192.0.2.16:80/. Telnet обычно используется для удаленного тестирования или устранения неполадок веб-серверов или почтовых серверов.

Теперь давайте посмотрим, какие преимущества и недостатки имеет URI:

Плюсы :

  • Однозначный идентификатор — URI может предотвратить двусмысленность, предоставляя уникальные схемы для идентификации ресурсов и их дифференциации в семантической сети. Это помогает структуре описания ресурсов (RDF) интерпретировать информацию для пользователей. Таким образом, не будет путаницы между веб-документами и другими ресурсами.
  • Единообразие — URI идентифицирует имя и местоположение ресурса. Кроме того, в одном и том же контексте могут использоваться различные типы идентификаторов ресурсов. Например, URL-адрес и URI могут ссылаться на один и тот же ресурс. Единообразие относится к общему синтаксису URI, которому следует следовать.
  • Идентификация абстрактных и физических ресурсов — Схемы URI могут указывать любой ресурс, включая объекты реального мира, такие как номера телефонов, места, книги и люди. Ресурс не обязательно ограничен веб-страницами, доступными через Интернет.
  • Несколько URI могут быть связаны с одним ресурсом — например, данные по http://www.example.com/abc/2022/Q1 также могут быть доступны по адресу http://www.example.com /abc/Q12022 . Это облегчит клиент-серверу обращение к ресурсу.

Минусы :

  • URI должны быть постоянными — после того, как вы создали URI, его изменение может повредить репутации вашего веб-сайта. Даже если вы все еще можете перекодировать неработающие URL-адреса, это требует времени и усилий.
  • Несовместимо со всеми браузерами — хотя URI могут использоваться во многих популярных браузерах, таких как Google Chrome и Mozilla Firefox, некоторые старые версии браузеров, такие как Internet Explorer 5,6,7 или Safari 5 и 6, не поддерживаются Схема URI.

Причины использования унифицированного указателя ресурсов (URL)

Как и URI, URL-адрес используется для идентификации ресурса. Оба имеют тонкие различия с точки зрения их назначения и структуры. Имейте в виду, что большинство URL-адресов предоставляют протокол. Вот несколько вариантов использования URL:

  • Ссылка на адрес электронной почты — URL-адрес может указывать адрес электронной почты с использованием схемы mailto: . Он предоставляет гиперссылку для отправки электронной почты непосредственно со страницы HTML. Например, mailto:abc@example. com.
  • Получение веб-страниц — наиболее распространенные URL-адреса относятся к веб-адресу. Он содержит протокол, доменное имя и путь. Он также известен как абсолютный URL. Например, https://www.example.com/news/business/ сообщает вам адрес и каталог ресурса.
  • Перенаправление ресурса — вы можете использовать URL-адрес для перенаправления старого ресурса в новое место. Обычно используется для перемещения веб-страницы. Например, если вы изменили адрес своего веб-сайта с https://www.blog.example.com на https://www.example.com/blog , вы можете реализовать переадресацию 301. Это предотвратит получение посетителями различных кодов состояния HTTP, таких как страница с ошибкой 404.
  • Ссылка на внутреннюю страницу — URL-адреса могут отображаться без протокола и доменного имени, но только с указанием пути. Он используется для ссылки на определенный файл в том же домене, который можно назвать относительным URL-адресом. Например, если URL-адрес https://www.example.com/news/business/, относительный URL-адрес будет /news/business /.

Каждый URL-адрес состоит из нескольких компонентов, которые влияют на безопасность вашего сайта и поисковую оптимизацию (SEO). Узнаем о его плюсах и минусах.

Pros :

  • Расширение возможностей пользователей — хорошо структурированный URL-адрес поможет пользователям понять, к какой странице они обращаются. Например, если веб-сайт www.example.com имеет тег заголовка «Рецепт шоколадного пудинга к Рождеству» на своей веб-странице, ваш URL-адрес может быть http://example.com/recipes/chocolate-pudding для описания страницы. содержание четко.
  • Повышение рейтинга сайта . Помимо авторитета домена, ключевые слова в URL-адресах выступают в качестве второстепенного фактора ранжирования вашего сайта. Это может повлиять на страницы результатов поисковой системы (SERP) при анализе конкретной страницы или релевантности ресурса.
  • Защитите свой сайт — использование URL-адресов HTTPS может защитить ваш сайт и конфиденциальность посетителей более надежно, чем HTTP. Это связано с тем, что HTTPS поставляется с сертификатом Secure Sockets Layer (SSL), который обеспечивает зашифрованное соединение между веб-сервером и веб-браузером для передачи данных.

Минусы :

  • Угроза безопасности — создание сокращенного URL-адреса также может поставить под угрозу репутацию вашего сайта. Многие хакеры используют сокращатели URL-адресов, такие как Bitly, owl.ly, AdF.ly и TinyURL, чтобы скрыть свои злонамеренные намерения от пользователей. Пример сокращенного URL: 9.0097 http://bitly.is/example , где вы не можете увидеть домен сайта.
  • Кража контента — использование относительных URL-адресов может быть рискованным для кражи контента, поскольку людям не нужно переписывать какие-либо внутренние ссылки. Они могут легко скопировать вашу страницу и разместить ее на новом домене с помощью парсера.
  • Неработающая ссылка — это может произойти, когда вы используете службу сокращения URL-адресов. Это связано с тем, что служба может выйти из строя или даже прекратить работу, в результате чего ваша ссылка не будет работать.
Pro Tip

Хорошие URL-адреса должны быть простыми, четкими и краткими. Таким образом, пользователи могут получить представление о том, чего ожидать на странице.

Заключение

Понимание различий между URI и URL и их использованием важно для каждого веб-мастера. Например, создание REST API с использованием предсказуемой и иерархической структуры URI или URL-адреса может повысить производительность REST API.

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

С другой стороны, URL-адрес или унифицированный указатель ресурса представляет собой строку символов, которая показывает адрес ресурса и способ доступа к нему на веб-странице. Поскольку URL-адрес является частью URI, они имеют схожую структуру.

Мы надеемся, что эта статья помогла вам понять разницу между URI и URL и когда их использовать. Наконец, если у вас есть дополнительные вопросы, не стесняйтесь поделиться ими в разделе комментариев ниже!

Узнайте больше об URL-адресах и доменных именах

Как купить доменное имя: простое руководство для начала работы
Что такое TLD? Все, что вам нужно знать о доменах верхнего уровня
Что такое субдомены? Подробное руководство для начинающих
Полное доменное имя (полное доменное имя): что это такое, примеры и многое другое
Домен и хостинг: определение и различия
.com и .net — различия между доменными расширениями
Что означает . io: когда использовать Используйте это, плюсы и минусы и многое другое

Часто задаваемые вопросы по URI и URL

Что такое пример URI и URL?

Примером URI может быть «https://www.example.com/index.html», который идентифицирует конкретный ресурс. URL-адрес является типом URI и будет ссылаться на тот же пример, указывая местоположение ресурса в Интернете.

Как связаны URI и URL?

URL — это тип URI. URI шире и могут включать в себя различные типы, такие как URL-адреса и URN (унифицированные имена ресурсов). URL-адреса конкретно указывают конкретное местоположение или адрес ресурса в Интернете.

Динда — энтузиаст WordPress и цифрового маркетинга. Она любит делиться своими знаниями с другими, чтобы они могли добиться успеха в своих онлайн-начинаниях. В свободное время она любит смотреть фильмы и исследовать исторические места.

Еще от Sopha M.

ГЛАВНАЯ | uricaine.com.0002

Композиция из 10 частей для джазового трио, камерного оркестра

и госпел-хора с участием Барбары Уокер 487 «Страсти по Октавию Катто» будут исполнены Бостонским симфоническим оркестром 19, 20 и 21 марта 2020 года.

Осенью 2017 года в Филадельфии перед зданием мэрии была открыта статуя Октавиуса Катто. Катто был афроамериканским борцом за свободу XIX века, известным своей работой в качестве аболициониста, педагога, первопроходца в бейсболе, гражданского и защитник права голоса.

Произведение Ури Кейна «Страсти Октавиуса Катто», написанное для оркестра, хорового ансамбля, вокалиста госпел и джазового трио, было заказано Музыкальным центром Манна и Центром искусств Пью. Его сочинение из десяти частей документирует активную деятельность Катто на протяжении всей жизни, которая была прервана его убийством в день выборов 1871 года. Насилие, совершенное против афроамериканцев из Филадельфии, когда они пытались реализовать свое право голоса — выиграли двумя годами ранее с прохождением 15-го Поправка к Конституции.

Воспитание Кейна в Филадельфии создало благодатную среду для пианиста и композитора, у которого была возможность играть в группах таких легенд, как Хэнк Мобли, Филли Джо Джонс и Микки Рокер, местных героев, таких как Бутси Барнс, и будущих звезд, таких как Гровер Вашингтон-младший. В подростковом возрасте Кейн изучал классическое фортепиано у Бернарда Пайффера и композицию у Джорджа Рохберга. Он продолжал учиться у Рохберга и композитора Джорджа Крамба в Пенсильванском университете. Кейн продолжал работать на всех сторонах улицы в качестве солиста и со своими собственными акустическими и электрическими ансамблями. Он работал в группах под руководством Джона Зорна, Дона Байрона, Дэйва Дугласа и Арто Линдси. Кейн выступал с лучшими камерными ансамблями, включая Струнный квартет Ардитти и Камерный оркестр Лос-Анджелеса, а также в выступлениях с Кливлендским оркестром, Филадельфийским оркестром, Шведским камерным оркестром, Оркестром Би-би-си и Бостонским симфоническим оркестром. Страсть как классическая форма послужила форматом для включения оркестра, хора и трио Каина, но также предоставила Каину возможность включить традицию священной музыки Евангелия, а также историческую связь Евангелия с классической музыкой. Афроамериканские исполнители, обученные традиции госпел-музыки, приняли идиому классической музыки, когда представились такие возможности. Хоровые партии в «Страстях Октавиуса Катто» взял на себя доктор Джей Флуеллен, постоянный представитель

Большая сцена исполнительского искусства Филадельфии в качестве хорового и музыкального руководителя, педагога, продюсера, клавишника и композитора. Точно так же Барбара Уокер, солистка этой записи, работала в разных жанрах музыки на сцене, в театре, кино и на телевидении. Певцы из Филадельфии. Оркестр с энтузиазмом возглавляет Андре Рафель , который был приглашенным дирижером для крупнейших оркестров по всей Америке, в том числе для Филадельфийского оркестра в Манн-центре , где были заказаны и впервые исполнены «Страсти Октавия Катто».

Кейн был знаком с общими чертами истории Октавиуса Катто, выросшего в Филадельфии. Его понимание и оценка жизни активиста углубились после прочтения биографии «Вкус свободы», написанной Дэниелом Биддлом и Мюрреем Дубином.

После вступительного пролога Кейн выбирает ключевые события середины XIX века , вокруг которых создает репрезентативные композиции. Пенсильванский зал, построенный Обществом против рабства, открылся в мае 1838 года для трехдневного съезда аболиционистов.0003

и сжег его дотла. «Пролог, Сожжение Пенсильванского зала» и последующие главы из жизни Октавиуса Катто выбраны Кейном и сочинены для различных комбинаций текстов и инструментов для фортепианного и джазового трио, сольных и госпел-голосов. , а также оркестр и хор. Две речи, произнесенные Катто, послужили источником вдохновения для «Ни Востока, ни Запада». Третья речь Катто, выступающая за равенство голосов, послужила источником вдохновения для «Change». И четвертый, «Протест трамвая в Филадельфии 1867 года», основан на протесте за равный доступ к трамваям. Кейн резервирует одну главу в «Страстях», посвященную триумфам Катто на бейсбольном поле. В «Поправках» хор и оркестр начинают захватывающее выступление, ссылаясь на борьбу Катто за принятие 13-й, 14-й и 15-й поправок в законодательном собрании штата Пенсильвания. Эта часть также является хитрым намеком на отца Кейна, Бертона Кейна, бывшего президента филадельфийского отделения Американского союза гражданских свобод.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *