Пространства имен XAML для служб XAML .NET

Пространство имен XAML — это концепция, которая расширяет определение пространства имен XML. Как и пространство имен XML, можно определить пространство имен XAML с помощью атрибута xmlns в разметке. Пространства имен XAML также представлены в потоке узлов XAML и других API служб XAML. В этом разделе определяется концепция пространства имен XAML и описывается, как можно определить пространства имен XAML и использовать контексты схемы XAML и другие аспекты служб XAML . NET.

Пространство имен XML и пространство имен XAML

Пространство имен XAML — это специализированное пространство имен XML, так же как XAML является специализированной формой XML и использует базовую XML-форму для разметки. В разметке вы объявляете пространство имен XAML и его сопоставление с помощью атрибута, примененного xmlns к элементу. Объявление xmlns можно сделать в том же элементе, в который объявляется пространство имен XAML. Объявление пространства имен XAML, сделанное для элемента, допустимо для этого элемента, всех атрибутов этого элемента и всех дочерних элементов этого элемента. Атрибуты могут использовать пространство имен XAML, которое не совпадает с элементом, содержащим атрибут, до тех пор, пока имя атрибута ссылается на префикс как часть его имени атрибута в разметке.

Различие пространства имен XAML и пространства имен XML заключается в том, что пространство имен XML может использоваться для ссылки на схему или просто для отличия сущностей. Для XAML типы и члены, используемые в XAML, в конечном счете должны быть разрешены к резервным типам, и понятия схемы XML не применяются хорошо к этой возможности. Пространство имен XAML содержит сведения о том, что контекст схемы XAML должен иметь доступ для выполнения этого сопоставления типов.

Компоненты пространства имен XAML

Определение пространства имен XAML содержит два компонента: префикс и идентификатор. Каждый из этих компонентов присутствует при объявлении пространства имен XAML в разметке или определении в системе типов XAML.

Префикс может быть любой строкой, разрешенной пространствами имен W3C в спецификации XML 1.0. По соглашению префиксы обычно являются короткими строками, так как префикс повторяется много раз в типичном файле разметки. Некоторые пространства имен XAML, которые предназначены для использования в нескольких реализациях XAML, используют определенные стандартные префиксы. Например, пространство имен XAML языка XAML обычно сопоставляется с помощью префикса x. Можно определить пространство имен XAML по умолчанию, где префикс не указан в определении, но представляется пустой строкой, если определен или запрашивается by.NET API служб XAML. Как правило, пространство имен XAML по умолчанию намеренно выбирается для повышения максимального объема префикса, пропускающего разметку технологией XAML и ее сценариями и словарями.

Идентификатор может быть любой строкой, разрешенной пространствами имен W3C в спецификации XML 1.0. По соглашению идентификаторы для пространств имен XML или пространств имен XAML часто задаются в форме URI, как правило, как абсолютный универсальный код ресурса (URI) с учетом протокола. Часто информация о версии, определяющая определенный словарь XAML, подразумевается как часть строки пути. Пространства имен XAML добавляют дополнительное соглашение об идентификаторе за пределами соглашения URI XML. Для пространств имен XAML идентификатор передает сведения, необходимые контексту схемы XAML для разрешения типов, указанных в качестве элементов в этом пространстве имен XAML, или разрешения атрибутов членам.

Для обмена данными с контекстом схемы XAML идентификатор пространства имен XAML может по-прежнему находиться в форме URI. Однако в этом случае универсальный код ресурса (URI) также объявляется как соответствующий идентификатор в определенной сборке или списке сборок. Это делается в сборках путем атрибутирования сборки с XmlnsDefinitionAttribute. Этот метод определения пространства имен XAML и поддержки поведения разрешения типов на основе СРЕДЫ CLR в сборке атрибутов поддерживается контекстом схемы XAML по умолчанию в службах XAML .NET. Как правило, это соглашение можно использовать для случаев, когда контекст схемы XAML включает среду CLR или основан на контексте схемы XAML по умолчанию, который необходим для чтения атрибутов CLR из сборок CLR.

Пространства имен XAML также можно определить с помощью соглашения, которое взаимодействует с пространством имен CLR и сборкой, определяющей тип. Это соглашение используется в тех случаях, когда в сборках, содержащих типы, не XmlnsDefinitionAttribute существует атрибуции. Это соглашение потенциально сложнее, чем соглашение URI, а также имеет потенциал для неоднозначности и дублирования, так как существует несколько способов ссылки на сборку.

Самая базовая форма идентификатора, использующего пространство имен СРЕДЫ CLR и соглашение о сборке, выглядит следующим образом:

clr-namespace:clrnsName; assembly=assemblyShortName

clr-namespace: и ; assembly= являются литеральными компонентами синтаксиса.

clrnsName — это строковое имя, определяющее пространство имен СРЕДЫ CLR. Это строковое имя содержит все внутренние символы точек (.), которые содержат указания о пространстве имен СРЕДЫ CLR и его отношении к другим пространствам имен CLR.

assemblyShortName — это строковое имя сборки, которая определяет типы, полезные в XAML. Типы для доступа через объявленное пространство имен XAML, как ожидается, определяются сборкой и объявляются в пространстве имен CLR, указанном clrnsName. Это имя строки обычно параллелирует сведения, как сообщается AssemblyName.Name.

Более полное определение пространства имен СРЕДЫ CLR и соглашения о сборке выглядит следующим образом:

clr-namespace:clrnsName; assembly=assemblyName

AssemblyName представляет любую строку, которая является законной в качестве входных Assembly.Load(String) данных. Эта строка может включать язык и региональные параметры, открытый ключ или сведения о версии (определения этих понятий определяются в справочном разделе).Assembly Формат COFF и доказательства (используемые другими перегрузками) не имеют значения для загрузки сборки LoadXAML; все сведения о загрузке сборки должны быть представлены в виде строки.

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

Объявления пространства имен XAML в API служб XAML

В API служб XAML объявление пространства имен XAML представлено NamespaceDeclaration объектом. Если вы объявляете пространство имен XAML в коде, вызовите NamespaceDeclaration(String, String) конструктор. prefix Параметры ns указаны в виде строк, а входные данные для этих параметров соответствуют определению идентификатора пространства имен XAML и префикса пространства имен XAML, как указано ранее в этом разделе.

Если вы изучаете сведения о пространстве имен XAML как часть потока узла XAML или через другой доступ к системе типов XAML, NamespaceDeclaration.Namespace сообщает идентификатор пространства имен XAML и NamespaceDeclaration.Prefix сообщает префикс пространства имен XAML.

В потоке узлов XAML сведения о пространстве имен XAML могут отображаться как узел XAML, предшествующий сущности, к которой она применяется. Это включает в себя случаи, когда сведения о пространстве имен XAML предшествуют StartObject корневому элементу XAML. Для получения дополнительной информации см. Understanding XAML Node Stream Structures and Concepts.

Во многих сценариях, использующих API служб XAML .NET, должно существовать хотя бы одно объявление пространства имен XAML, а объявление должно содержать или ссылаться на сведения, необходимые контексту схемы XAML. Пространства имен XAML должны указывать сборки для загрузки или разрешать определенные типы в пространствах имен и сборках, которые уже загружены или известны контекстом схемы XAML.

Чтобы создать поток узлов XAML, сведения о типе XAML должны быть доступны в контексте схемы XAML. Сведения о типе XAML нельзя определить без первого определения соответствующего пространства имен XAML для каждого создаваемого узла. На этом этапе экземпляры типов еще не созданы, но контекст схемы XAML может потребоваться найти информацию из определяемой сборки и типа резервной копии. Например, чтобы обработать разметку <Party><PartyFavor/></Party>, контекст схемы XAML должен иметь возможность определить имя и тип ContentPropertyPartyобъекта, а также знать сведения о пространстве имен XAML для Party и PartyFavor. В случае контекста схемы XAML по умолчанию статические отражения сообщают большую часть системных сведений о типе XAML, необходимых для создания узлов типа XAML в потоке узлов.

Чтобы создать граф объектов из потока узлов XAML, объявления пространства имен XAML должны существовать для каждого префикса XAML, используемого в исходной разметке и записанном в потоке узлов XAML. На этом этапе создаются экземпляры и происходит истинное поведение сопоставления типов.

Если необходимо предварительно заполнить сведения о пространстве имен XAML, в случаях, когда пространство имен XAML, используемое контекст схемы XAML, не определен в разметке, один из способов, который можно использовать, заключается в объявлении объявлений пространства имен XML в параметре XmlParserContextXmlReader. Затем используйте это XmlReader в качестве входных данных для конструктора средства чтения XAML или XamlServices.Load(XmlReader).

Два других API, которые относятся к обработке пространства имен XAML в службах XAML .NET, являются атрибутами XmlnsDefinitionAttribute и XmlnsPrefixAttribute. Эти атрибуты применяются к сборкам. XmlnsDefinitionAttribute используется контекстом схемы XAML для интерпретации любого объявления пространства имен XAML, включающего универсальный код ресурса (URI). XmlnsPrefixAttribute используется средствами, которые выдают XAML, чтобы определенное пространство имен XAML можно сериализовать с прогнозируемым префиксом. Дополнительные сведения см. в разделе атрибуты CLR, связанные с XAML, для пользовательских типов и библиотек.

См. также