Почему конструктор URI позволяет пропустить протокол (а URL - нет)? - PullRequest
0 голосов
/ 07 января 2019

Почему URI разрешает пропуск протокола (а URL - нет)?

В википедии Схема (и даже путь) кажутся обязательными компонентами URI:

Общий синтаксис URI состоит из иерархической последовательности из пяти Компоненты: [8]

URI = схема : [// авторитет] путь [? Запрос] [# фрагмент]

Или, по умолчанию, отсутствует протокол (например, http)? Я не нашел ничего подобного в документах.

new URI("my.html");        // 1
new URI("xabc:my.html");   // 2
new URL("my.html");        // 3      
new URL("xabc:my.html");   // 4

По поводу "обязательного" пути - ОК, есть наклонный URI. Но почему допускается отсутствующий протокол (он должен присутствовать даже для обязательного URI, который должен быть абсолютным)

Я мог бы понять, что относительно URL / URI не требуют протокола (<img src="/images/pic.png">), но URL также дает время выполнения java.net.MalformedURLException: no protocol в этом случае (в то время как URI не).

1 Ответ

0 голосов
/ 07 января 2019

Ваш относительный путь должен быть неправильным, Java URI поддерживает пустую схему для относительного URI:

относительный URI, то есть URI, который не определяет схему. Некоторые примеры иерархических URI:

docs/guide/collections/designfaq.html#28

Схема необязательна:

[scheme:]scheme-specific-part[#fragment]

Аналогично URL , например ::

URL url = new URL("/guidelines.txt");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...