Почему существуют пространства имен XAML, которые являются URLS?

В Silverlight/WPF xaml в верхней части кода вы указываете объявления типа пространства имен/импорта. Я могу легко понять, как эти объявления могут указывать на сборку, чтобы типы и т.д. Могли быть загружены из нее. То, что я не понимаю (и то, о чем я не думал до сих пор), - это то, как эти пространства имен работают, когда они указывают на URL-адрес, например.

http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit

Взгляд на этот URL-адрес дает мне ошибку, поэтому мне ничего не говорят.

Ответ 1

Там атрибут, который вы можете использовать в коде вашей ссылочной сборки, который отображает Uri в пространство имен кода:

[XmlnsDefinitionAttribute("http://yournamespace/", "Your.Assembly.Namespace")]

Вы можете включить несколько этих атрибутов, как правило, в AssemblyInfo.cs, позволяя ссылаться на несколько пространств имен экземпляров одним пространством имен Uri в Xaml.

Это делает объявления вашего пространства имен более компактными (поскольку вы можете опустить имя сборки). Это также позволяет вам гибко реорганизовать пространства имен в указанной сборке, не нарушая разметку.

EDIT:, например, если вы указываете Reflector на сборке PresentationCore, вы можете увидеть такие атрибуты на уровне сборки:

[assembly: 
    XmlnsDefinition( "http://schemas.microsoft.com/netfx/2007/xaml/presentation"
                   , "System.Windows.Ink") ]

Таким образом, импорт Uri сопоставляется с кодовыми пространствами имен.

Ответ 2

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

Если вы проверяете HTML-типы, то они точно такие же, как и при загрузке не на самом деле:) Например: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd или http://www.w3.org/TR/html4/strict.dtd

Не имеет никакого смысла, почему на этих URL-адресах нет ничего, хотя было бы неплохо иметь некоторые фактические ссылки...