Partager via


Espaces de noms XAML pour les services XAML .NET

Un espace de noms XAML est un concept qui se développe sur la définition d’un espace de noms XML. Comme pour un espace de noms XML, vous pouvez définir un espace de noms XAML à l’aide d’un xmlns attribut dans le balisage. Les espaces de noms XAML sont également représentés dans le flux de nœuds XAML et d’autres API des services XAML. Cette rubrique définit le concept d’espace de noms XAML et décrit comment les espaces de noms XAML peuvent être définis et sont utilisés par les contextes de schéma XAML et d’autres aspects des services XAML .NET.

Espace de noms XML et espace de noms XAML

Un espace de noms XAML est un espace de noms XML spécialisé, tout comme XAML est une forme spécialisée de XML et utilise le formulaire XML de base pour son balisage. Dans le balisage, vous déclarez un espace de noms XAML et son mappage par le biais d’un xmlns attribut appliqué à un élément. La xmlns déclaration peut être effectuée sur le même élément que celui dans lequel l’espace de noms XAML est déclaré. Une déclaration d’espace de noms XAML faite à un élément est valide pour cet élément, tous les attributs de cet élément et tous les enfants de cet élément. Les attributs peuvent utiliser un espace de noms XAML qui n’est pas le même que l’élément qui contient l’attribut, tant que le nom de l’attribut lui-même fait référence au préfixe dans le cadre de son nom d’attribut dans le balisage.

La distinction entre un espace de noms XAML et un espace de noms XML est qu’un espace de noms XML peut être utilisé pour référencer un schéma ou simplement pour différencier les entités. Pour XAML, les types et les membres utilisés en XAML doivent finalement être résolus en types de stockage, et les concepts de schéma XML ne s’appliquent pas bien à cette fonctionnalité. L’espace de noms XAML contient des informations que le contexte de schéma XAML doit avoir disponibles pour effectuer ce mappage de type.

Composants d’espace de noms XAML

La définition de l’espace de noms XAML comporte deux composants : un préfixe et un identificateur. Chacun de ces composants est présent lorsqu’un espace de noms XAML est déclaré dans le balisage ou défini dans le système de type XAML.

Le préfixe peut être n’importe quelle chaîne autorisée par les espaces de noms W3C dans la spécification XML 1.0. Par convention, les préfixes sont généralement des chaînes courtes, car le préfixe est répété plusieurs fois dans un fichier de balisage classique. Certains espaces de noms XAML destinés à être utilisés dans plusieurs implémentations XAML utilisent des préfixes conventionnels particuliers. Par exemple, l’espace de noms XAML du langage XAML est généralement mappé à l’aide du préfixe x. Vous pouvez définir un espace de noms XAML par défaut, où le préfixe n’est pas donné dans la définition, mais est représenté sous la forme d’une chaîne vide si elle est définie ou interrogée by.NET API des services XAML. En règle générale, l’espace de noms XAML par défaut est délibérément choisi pour promouvoir une quantité agrandie de balisage omissant le préfixe par une technologie d’implémentation XAML et ses scénarios et ses vocabulaires.

L’identificateur peut être n’importe quelle chaîne autorisée par les espaces de noms W3C dans la spécification XML 1.0. Par convention, les identificateurs pour les espaces de noms XML ou les espaces de noms XAML sont souvent donnés sous forme d’URI, généralement en tant qu’URI absolu qualifié de protocole. Souvent, les informations de version qui définissent un vocabulaire XAML particulier sont implicites dans le cadre de la chaîne de chemin d’accès. Les espaces de noms XAML ajoutent une convention d’identificateur supplémentaire au-delà de la convention d’URI XML. Pour les espaces de noms XAML, l’identificateur communique les informations nécessaires par un contexte de schéma XAML afin de résoudre les types spécifiés en tant qu’éléments sous cet espace de noms XAML ou pour résoudre les attributs en membres.

Pour communiquer des informations à un contexte de schéma XAML, l’identificateur d’un espace de noms XAML peut toujours se trouver sous forme d’URI. Toutefois, dans ce cas, l’URI est également déclaré en tant qu’identificateur correspondant dans un assembly particulier ou une liste d’assemblys. Pour ce faire, dans les assemblys, attribuez l’assembly avec XmlnsDefinitionAttribute. Cette méthode d’identification de l’espace de noms XAML et de prise en charge d’un comportement de résolution de type CLR dans l’assembly attribué est prise en charge par le contexte de schéma XAML par défaut dans les services XAML .NET. Plus généralement, cette convention peut être utilisée pour les cas où le contexte de schéma XAML incorpore le CLR ou est basé sur le contexte de schéma XAML par défaut, ce qui est nécessaire pour lire les attributs CLR à partir d’assemblys CLR.

Les espaces de noms XAML peuvent également être identifiés par une convention qui communique un espace de noms CLR et un assembly de définition de type. Cette convention est utilisée dans les cas où aucune attribution n’existe XmlnsDefinitionAttribute dans les assemblys qui contiennent des types. Cette convention est potentiellement plus complexe que la convention d’URI, et a également le potentiel d’ambiguïté et de duplication, car il existe plusieurs façons de faire référence à un assembly.

La forme la plus simple d’un identificateur qui utilise l’espace de noms CLR et la convention d’assembly est la suivante :

clr-namespace:clrnsName; assembly=assemblyShortName

clr-namespace: et ; assembly= sont des composants littéraux de la syntaxe.

clrnsName est le nom de chaîne qui identifie un espace de noms CLR. Ce nom de chaîne inclut tous les points internes (.) qui fournissent des indications sur l’espace de noms CLR et sa relation avec d’autres espaces de noms CLR.

assemblyShortName est le nom de chaîne d’un assembly qui définit des types utiles en XAML. Les types à accéder via l’espace de noms XAML déclaré sont censés être définis par l’assembly et déclarés dans l’espace de noms CLR spécifié par clrnsName. Ce nom de chaîne met généralement en parallèle les informations indiquées par AssemblyName.Name.

Une définition plus complète de l’espace de noms CLR et de la convention d’assembly est la suivante :

clr-namespace:clrnsName; assembly=assemblyName

assemblyName représente toute chaîne légale en tant qu’entrée Assembly.Load(String) . Cette chaîne peut inclure la culture, la clé publique ou les informations de version (les définitions de ces concepts sont définies dans la rubrique de référence pour Assembly). Le format et la preuve COFF (utilisés par d’autres surcharges) ne sont pas pertinents pour les besoins de Loadchargement d’assembly XAML ; toutes les informations de chargement doivent être présentées sous forme de chaîne.

La spécification d’une clé publique pour l’assembly est une technique utile pour la sécurité XAML ou pour supprimer l’ambiguïté possible qui peut exister si les assemblys sont chargés par un nom simple ou pré-existent dans un cache ou un domaine d’application. Pour plus d’informations, consultez Considérations relatives à la sécurité XAML.

Déclarations d’espace de noms XAML dans l’API des services XAML

Dans l’API des services XAML, une déclaration d’espace de noms XAML est représentée par un NamespaceDeclaration objet. Si vous déclarez un espace de noms XAML dans le code, vous appelez le NamespaceDeclaration(String, String) constructeur. Les ns paramètres et prefix les chaînes sont spécifiés, et l’entrée à fournir pour ces paramètres correspond à la définition de l’identificateur d’espace de noms XAML et du préfixe d’espace de noms XAML, comme indiqué précédemment dans cette rubrique.

Si vous examinez les informations d’espace de noms XAML dans le cadre d’un flux de nœuds XAML ou par le biais d’un autre accès au système de type XAML, NamespaceDeclaration.Namespace signale l’identificateur d’espace de noms XAML et NamespaceDeclaration.Prefix signale le préfixe d’espace de noms XAML.

Dans un flux de nœuds XAML, les informations d’espace de noms XAML peuvent apparaître sous la forme d’un nœud XAML qui précède l’entité à laquelle elle s’applique. Cela inclut les cas où les informations d’espace de noms XAML précèdent l’élément StartObject racine XAML. Pour plus d'informations, consultez Understanding XAML Node Stream Structures and Concepts.

Pour de nombreux scénarios qui utilisent l’API des services XAML .NET, au moins une déclaration d’espace de noms XAML est censée exister, et la déclaration doit contenir ou faire référence à des informations requises par un contexte de schéma XAML. Les espaces de noms XAML doivent spécifier des assemblys à charger, ou aider à résoudre des types spécifiques dans des espaces de noms et des assemblys déjà chargés ou connus par le contexte de schéma XAML.

Pour générer un flux de nœuds XAML, les informations de type XAML doivent être disponibles via le contexte de schéma XAML. Les informations de type XAML ne peuvent pas être déterminées sans d’abord déterminer l’espace de noms XAML approprié pour chaque nœud à créer. À ce stade, aucune instance de types n’est encore créée, mais le contexte de schéma XAML peut avoir besoin de rechercher des informations à partir de l’assembly de définition et du type de stockage. Par exemple, pour traiter le balisage <Party><PartyFavor/></Party>, le contexte de schéma XAML doit être en mesure de déterminer le nom et le type du ContentPropertyPartycode, et doit donc également connaître les informations d’espace de noms XAML pour Party et PartyFavor. Dans le cas du contexte de schéma XAML par défaut, la réflexion statique signale une grande partie des informations système de type XAML nécessaires pour générer des nœuds de type XAML dans le flux de nœuds.

Pour générer un graphique d’objet à partir d’un flux de nœuds XAML, les déclarations d’espace de noms XAML doivent exister pour chaque préfixe XAML utilisé dans le balisage d’origine et enregistré dans le flux de nœud XAML. À ce stade, les instances sont créées et le comportement de mappage de type true se produit.

Si vous devez préremplir les informations d’espace de noms XAML, dans les cas où l’espace de noms XAML que vous envisagez d’utiliser le contexte de schéma XAML n’est pas défini dans le balisage, une technique que vous pouvez utiliser consiste à déclarer des déclarations d’espace de noms XML dans le cadre d’un XmlParserContextXmlReader. Ensuite, utilisez-le XmlReader comme entrée pour un constructeur de lecteur XAML, ou XamlServices.Load(XmlReader).

Deux autres API pertinentes pour la gestion des espaces de noms XAML dans les services XAML .NET sont les attributs XmlnsDefinitionAttribute et XmlnsPrefixAttribute. Ces attributs s’appliquent aux assemblys. XmlnsDefinitionAttribute est utilisé par un contexte de schéma XAML pour interpréter toute déclaration d’espace de noms XAML qui inclut un URI. XmlnsPrefixAttribute est utilisé par les outils qui émettent du code XAML afin qu’un espace de noms XAML particulier puisse être sérialisé avec un préfixe prédictible. Pour plus d’informations, consultez attributs CLR liés au code XAML pour les types et bibliothèques personnalisés.

Voir aussi