Obory názvů XAML pro služby .NET XAML

Obor názvů XAML je koncept, který rozšiřuje definici oboru názvů XML. Podobně jako obor názvů XML můžete definovat obor názvů XAML pomocí atributu xmlns v kódu. Obory názvů XAML jsou také reprezentovány ve streamu uzlu XAML a dalších rozhraních API služeb XAML. Toto téma definuje koncept oboru názvů XAML a popisuje, jak lze definovat obory názvů XAML a které používají kontexty schématu XAML a další aspekty služeb XAML XAML.

Obor názvů XML a obor názvů XAML

Obor názvů XAML je specializovaný obor názvů XML, stejně jako XAML je specializovaná forma XML a používá základní xml formulář pro jeho revize. V kódu deklarujete obor názvů XAML a jeho mapování prostřednictvím atributu xmlns použitého na element. Deklarace xmlns může být provedena pro stejný prvek, ve který je obor názvů XAML deklarován. Deklarace oboru názvů XAML vytvořená pro element je platná pro tento element, všechny atributy tohoto elementu a všechny podřízené položky tohoto elementu. Atributy mohou používat obor názvů XAML, který není stejný jako prvek, který obsahuje atribut, pokud název atributu sám odkazuje na předponu jako součást názvu atributu v kódu.

Rozdíl oboru názvů XAML oproti oboru názvů XML spočívá v tom, že obor názvů XML může být použit k odkazování na schéma nebo jednoduše k rozlišení entit. U XAML musí být typy a členy používané v XAML nakonec vyřešeny na záložní typy a koncepty schématu XML se na tuto funkci dobře nevztahují. Obor názvů XAML obsahuje informace, které musí mít kontext schématu XAML k dispozici, aby bylo možné provést mapování tohoto typu.

Komponenty oboru názvů XAML

Definice oboru názvů XAML má dvě komponenty: předponu a identifikátor. Každá z těchto komponent se nachází, když je obor názvů XAML deklarován v kódu nebo definován v systému typů XAML.

Předpona může být libovolný řetězec povolený obory názvů W3C ve specifikaci XML 1.0. Podle konvence jsou předpony obvykle krátké řetězce, protože předpona se opakuje mnohokrát v typickém souboru značek. Některé obory názvů XAML, které mají být použity v několika implementacích XAML, používají konkrétní konvenční předpony. Například obor názvů XAML jazyka XAML je obvykle mapován pomocí předpony x. Můžete definovat výchozí obor názvů XAML, kde předpona není uvedena v definici, ale je reprezentována jako prázdný řetězec, pokud je definován nebo dotazován by.NET rozhraní API služeb XAML. Výchozí obor názvů XAML je obvykle záměrně zvolen, aby bylo možné zvýšit maximalizované množství předpon a vynechání značek implementovanou technologií XAML a jejími scénáři a slovníky.

Identifikátor může být libovolný řetězec povolený obory názvů W3C ve specifikaci XML 1.0. Podle konvence se identifikátory pro obory názvů XML nebo obory názvů XAML často zobrazují ve formě identifikátorů URI, obvykle jako absolutní identifikátor URI kvalifikovaný protokolem. Informace o verzi, které definují konkrétní slovník XAML, se často implikují jako součást řetězce cesty. Obory názvů XAML přidávají další konvenci identifikátorů nad rámec konvence identifikátorů URI XML. Pro obory názvů XAML identifikátor komunikuje informace potřebné kontextem schématu XAML k překladu typů zadaných jako elementů v tomto oboru názvů XAML nebo k překladu atributů členům.

Pro účely komunikace informací s kontextem schématu XAML může být identifikátor oboru názvů XAML stále ve formě identifikátoru URI. V tomto případě je však identifikátor URI také deklarován jako odpovídající identifikátor v určitém sestavení nebo seznamu sestavení. To se provádí v sestaveních přiřazením sestavení pomocí XmlnsDefinitionAttribute. Tato metoda identifikace oboru názvů XAML a podpory chování překladu typů založeného na CLR v atributovém sestavení je podporováno výchozím kontextem schématu XAML ve službách .NET XAML Services. Obecněji lze tuto konvenci použít pro případy, kdy kontext schématu XAML zahrnuje CLR nebo je založen na výchozím kontextu schématu XAML, což je nezbytné ke čtení atributů CLR ze sestavení CLR.

Obory názvů XAML lze také identifikovat konvencí, která komunikuje s oborem názvů CLR a sestavením definujícím typ. Tato konvence se používá v případech, kdy v sestaveních obsahujících typy neexistuje žádné XmlnsDefinitionAttribute přiřazení. Tato konvence je potenciálně složitější než konvence identifikátoru URI a má také potenciál nejednoznačnosti a duplikace, protože existuje několik způsobů odkazování na sestavení.

Nejzásadnější forma identifikátoru, který používá obor názvů CLR a konvenci sestavení, je následující:

clr-namespace:clrnsName; assembly=assemblyShortName

clr-namespace: a ; assembly= jsou literální komponenty syntaxe.

clrnsName je název řetězce, který identifikuje obor názvů CLR. Tento název řetězce obsahuje všechny interní tečkové znaky (.), které poskytují rady o oboru názvů CLR a jeho vztahu k jiným oborům názvů CLR.

assemblyShortName je název řetězce sestavení, které definuje typy, které jsou užitečné v XAML. Očekává se, že typy, které mají být přístupné prostřednictvím deklarovaného oboru názvů XAML, budou definovány sestavením a deklarovány v rámci oboru názvů CLR určeného clrnsName. Tento název řetězce obvykle paralelně informace hlášené uživatelem AssemblyName.Name.

Podrobnější definice oboru názvů CLR a konvence sestavení je následující:

clr-namespace:clrnsName; assembly=assemblyName

AssemblyName představuje libovolný řetězec, který je legální jako Assembly.Load(String) vstup. Tento řetězec může zahrnovat informace o jazykové verzi, veřejném klíči nebo verzi (definice těchto konceptů jsou definovány v referenčním tématu pro Assembly). Formát COFF a důkazy (používané jinými přetíženími Load) nejsou relevantní pro účely načítání sestavení XAML. Všechny informace o načtení musí být uvedeny jako řetězec.

Zadání veřejného klíče pro sestavení je užitečná technika zabezpečení XAML nebo odebrání možné nejednoznačnosti, která může existovat, pokud jsou sestavení načtena jednoduchým názvem nebo před existencí v mezipaměti nebo doméně aplikace. Další informace najdete v tématu Aspekty zabezpečení XAML.

Deklarace oboru názvů XAML v rozhraní API služeb XAML

V rozhraní API služeb XAML je deklarace oboru názvů XAML reprezentována objektem NamespaceDeclaration . Pokud deklarujete obor názvů XAML v kódu, zavoláte NamespaceDeclaration(String, String) konstruktor. prefix Parametry ns jsou zadány jako řetězce a vstup, který se má poskytnout pro tyto parametry, odpovídá definici identifikátoru oboru názvů XAML a předpony oboru názvů XAML, jak je uvedeno dříve v tomto tématu.

Pokud zkoumáte informace o oboru názvů XAML jako součást datového proudu uzlu XAML nebo prostřednictvím jiného přístupu k systému typů XAML, NamespaceDeclaration.Namespace hlásí identifikátor oboru názvů XAML a NamespaceDeclaration.Prefix hlásí předponu oboru názvů XAML.

V datovém proudu uzlu XAML se informace o oboru názvů XAML můžou zobrazit jako uzel XAML, který předchází entitě, na kterou se vztahuje. To zahrnuje případy, kdy informace o oboru názvů XAML předchází StartObject kořenovému elementu XAML. Další informace najdete v tématu Principy struktur a konceptů datových proudů uzlů XAML.

U mnoha scénářů, které používají rozhraní .NET XAML Services API, se očekává, že existuje alespoň jedna deklarace oboru názvů XAML a deklarace musí obsahovat nebo odkazovat na informace požadované kontextem schématu XAML. Obory názvů XAML musí buď určovat sestavení, která se mají načíst, nebo pomáhat při překladu konkrétních typů v rámci oborů názvů a sestavení, která jsou již načtena nebo známa kontextem schématu XAML.

Aby bylo možné vygenerovat datový proud uzlu XAML, musí být informace o typu XAML dostupné prostřednictvím kontextu schématu XAML. Informace o typu XAML nelze určit bez prvního určení příslušného oboru názvů XAML pro každý uzel, který se má vytvořit. V tomto okamžiku se zatím nevytvořily žádné instance typů, ale kontext schématu XAML může potřebovat vyhledat informace z definujícího typu sestavení a backingu. Aby bylo možné například zpracovat kód <Party><PartyFavor/></Party>, kontext schématu XAML musí být schopen určit název a typ ContentProperty objektu Party, a proto musí znát informace o oboru názvů XAML pro Party a PartyFavor. V případě výchozího kontextu schématu XAML hlásí statické reflexe většinu informací o systému typů XAML, které jsou potřeba k vygenerování uzlů typu XAML ve streamu uzlu.

Aby bylo možné vygenerovat graf objektů ze streamu uzlu XAML, musí deklarace oboru názvů XAML existovat pro každou předponu XAML použitou v původním kódu a zaznamenána ve streamu uzlu XAML. V tuto chvíli se vytvářejí instance a dochází k chování mapování typu true.

Pokud potřebujete předem naplnit informace o oboru názvů XAML, v případech, kdy obor názvů XAML, který chcete použít, není v kódu definován kontext schématu XAML, je jedna technika, kterou můžete použít k deklaraci deklarací oboru názvů XML v objektu XmlParserContextXmlReaderfor . Pak ho použijte XmlReader jako vstup pro konstruktor čtečky XAML nebo XamlServices.Load(XmlReader).

Další dvě rozhraní API, která jsou relevantní pro zpracování oboru názvů XAML ve službě .NET XAML Services, jsou atributy XmlnsDefinitionAttribute a XmlnsPrefixAttribute. Tyto atributy platí pro sestavení. XmlnsDefinitionAttribute používá kontext schématu XAML k interpretaci jakékoli deklarace oboru názvů XAML, která obsahuje identifikátor URI. XmlnsPrefixAttribute je používán nástroji, které generují XAML, aby byl konkrétní obor názvů XAML serializován s předvídatelnou předponou. Další informace najdete v tématu Atributy CLR související s XAML pro vlastní typy a knihovny.

Viz také