Почему существуют пространства имен 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-адресах нет ничего, хотя было бы неплохо иметь некоторые фактические ссылки...