Каково значение конечных косых черт в URI пространства имен?

Я изучал SOAP и WSDL в рамках подготовки к внедрению веб-службы. Одна вещь, с которой я столкнулся с этим головоломкой, заключается в том, что некоторые из URI, которые я видел, используют конечную косую черту, например:

http://www.w3.org/some-namespace/

в то время как другие примеры, которые я изучил, опускают эту завершающую косую черту. У меня действительно есть несколько вопросов относительно этого:

  • Каково значение конечной косой черты?
  • Является ли URI, http://www.w3.org/some-namespace таким же, как http://www.w3.org/some-namespace/?
  • Если они не совпадают, как я могу решить, когда одна форма оправдана в сравнении с другой?
  • Я прочитал рекомендации, приведенные w3c относительно URI, и они показывают, что этот URI следует считать равным только в том случае, если сравнение строк URI с учетом регистра считается равным. Правильно ли эта интерпретация?

Ответ 1

URI пространства имен просто обозначаются как уникальные идентификаторы (здесь ссылка на правила сравнения). Использование URI (по сравнению с, скажем, "foo" ) можно проследить (я считаю) на использование URI в XML DOCTYPE.

Что также, я думаю, где возникает путаница в отношении "изъятия" таких URI. Спецификация XML требует, чтобы идентификатор SYSTEM в DOCTYPE можно было использовать для извлечения DTD документа (я ссылаюсь на Аннотированный спецификатор XML, а не на W3C, потому что я считаю, что комментарий Тима Брея очень полезен).

Хотя другие спецификации (например, схема XML) не требуют такого поведения, я считаю, что это полезная привычка следовать, особенно в случае целевых пространств имен схемы. Во-первых, это позволяет потребителям вашей схемы всегда находить правильное определение. Для другого, если у вас есть возможность разместить документ по общедоступному URL-адресу, вы также можете убедиться, что URI уникален.

Наконец: Унифицированные идентификаторы ресурсов (URI) - это надмножество Uniform Resource Locators (URL). Вы также можете иметь унифицированное имя ресурса (URN), и я верю (но не имею спецификации), что существует третья форма идентификатора.

Ответ 2

Да, рекомендации w3c относительно URI, которые вы прочитали, верны.

Два пространства имен, не имеющие равных строк, - это разные пространства имен. Даже капитализация и пробелы имеют значение.

Пространство имен-uri не означает, что выдача запроса на него должна давать веб-ответ. Поэтому любое рассуждение о том, должно ли оно или не должно заканчиваться на "/", не имеет особого значения.

Фактически, пространство имен-uri может даже не удовлетворять правилам синтаксиса для URI, и оно все равно будет служить своей целью для определения пространства имен. Полезно использовать пространство имен, например, скажем:

"\/^%$#sdhfgds"

пока он уникален (заметьте, я никоим образом не рекомендую такое использование:)). Существующие XML-процессоры (такие как синтаксические анализаторы, процессоры XPath или XSLT) не создают ошибок при их возникновении.

Ответ 3

Нет, они не совпадают.

Самая большая разница заключалась бы в формировании относительного ури с этой базы; с косой чертой относительный ури был бы потомком; без косой черты это был бы родной брат, т.е. (пример С#):

    Uri uri = new Uri(@"http://www.w3.org/some-namespace/");
    Console.WriteLine(new Uri(uri, "foo")); // http://www.w3.org/some-namespace/foo

    uri = new Uri(@"http://www.w3.org/some-namespace");
    Console.WriteLine(new Uri(uri, "foo")); //http://www.w3.org/foo