Каково значение конечных косых черт в 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