XAML-naamruimten voor .NET XAML-services
Een XAML-naamruimte is een concept dat de definitie van een XML-naamruimte uitbreidt. Net als bij een XML-naamruimte kunt u een XAML-naamruimte definiëren met behulp van een xmlns
kenmerk in markeringen. XAML-naamruimten worden ook weergegeven in de XAML-knooppuntstroom en andere XAML Services-API's. In dit onderwerp wordt het concept van de XAML-naamruimte gedefinieerd en wordt beschreven hoe XAML-naamruimten kunnen worden gedefinieerd en worden gebruikt door XAML-schemacontexten en andere aspecten van .NET XAML Services.
XML-naamruimte en XAML-naamruimte
Een XAML-naamruimte is een gespecialiseerde XML-naamruimte, net zoals XAML een gespecialiseerde vorm van XML is en het basis-XML-formulier voor de opmaak gebruikt. In markeringen declareert u een XAML-naamruimte en de toewijzing ervan via een xmlns
kenmerk dat is toegepast op een element. De declaratie van xmlns
kan worden uitgevoerd op hetzelfde element waarin de XAML-naamruimte is gedeclareerd. Een XAML-naamruimtedeclaratie die is gemaakt aan een element is geldig voor dat element, alle kenmerken van dat element en alle onderliggende elementen van dat element. Kenmerken kunnen een XAML-naamruimte gebruiken die niet hetzelfde is als het element dat het kenmerk bevat, zolang de kenmerknaam zelf verwijst naar het voorvoegsel als onderdeel van de kenmerknaam in markeringen.
Het onderscheid tussen een XAML-naamruimte en een XML-naamruimte is dat een XML-naamruimte kan worden gebruikt om te verwijzen naar een schema of om entiteiten te onderscheiden. Voor XAML moeten de typen en leden die in XAML worden gebruikt, uiteindelijk worden omgezet in back-uptypen en xml-schemaconcepten zijn niet goed van toepassing op deze mogelijkheid. De XAML-naamruimte bevat informatie die de context van het XAML-schema beschikbaar moet hebben om deze typetoewijzing uit te voeren.
XAML-naamruimteonderdelen
De definitie van de XAML-naamruimte heeft twee onderdelen: een voorvoegsel en een id. Elk van deze onderdelen is aanwezig wanneer een XAML-naamruimte wordt gedeclareerd in markeringen of is gedefinieerd in het XAML-typesysteem.
Het voorvoegsel kan elke tekenreeks zijn die is toegestaan door de W3C-naamruimten in xml 1.0-specificatie. Standaard zijn de voorvoegsels korte tekenreeksen, omdat het voorvoegsel vaak wordt herhaald in een typisch opmaakbestand. Bepaalde XAML-naamruimten die bedoeld zijn om te worden gebruikt in meerdere XAML-implementaties gebruiken bepaalde conventionele voorvoegsels. De XAML-taal XAML-naamruimte wordt bijvoorbeeld meestal toegewezen met het voorvoegsel x
. U kunt een standaard XAML-naamruimte definiëren, waarbij het voorvoegsel niet wordt opgegeven in de definitie, maar wordt weergegeven als een lege tekenreeks als deze is gedefinieerd of opgevraagd by.NET XAML Services-API. Normaal gesproken wordt de standaardnaamruimte XAML gekozen om een gemaximaliseerde hoeveelheid voorvoegselmarkeringen te promoten door een XAML-implementatietechnologie en de bijbehorende scenario's en woordenlijsten.
De id kan elke tekenreeks zijn die is toegestaan door de W3C-naamruimten in de XML 1.0-specificatie. Volgens de conventie worden id's voor XML-naamruimten of XAML-naamruimten vaak in URI-vorm gegeven, meestal als een door het protocol gekwalificeerde absolute URI. Versie-informatie die een bepaalde XAML-woordenlijst definieert, wordt vaak geïmpliceerd als onderdeel van de padtekenreeks. XAML-naamruimten voegen een extra id-conventie toe buiten de XML-URI-conventie. Voor XAML-naamruimten communiceert de id informatie die nodig is voor een XAML-schemacontext om de typen op te lossen die zijn opgegeven als elementen onder die XAML-naamruimte of om kenmerken op te lossen aan leden.
Voor het doorgeven van informatie aan een XAML-schemacontext is de id voor een XAML-naamruimte mogelijk nog steeds in URI-vorm. In dit geval wordt de URI echter ook gedeclareerd als een overeenkomende id in een bepaalde assembly of lijst met assembly's. Dit wordt gedaan in assembly's door de assembly te verdelen met XmlnsDefinitionAttribute. Deze methode voor het identificeren van de XAML-naamruimte en het ondersteunen van een op CLR gebaseerd typeomzettingsgedrag in de toegeschreven assembly wordt ondersteund door de standaard XAML-schemacontext in .NET XAML Services. Over het algemeen kan deze conventie worden gebruikt voor gevallen waarin de XAML-schemacontext de CLR bevat of is gebaseerd op de standaard XAML-schemacontext, wat nodig is om CLR-kenmerken van CLR-assembly's te lezen.
XAML-naamruimten kunnen ook worden geïdentificeerd door een conventie die een CLR-naamruimte en een type-definiërende assembly communiceert. Deze conventie wordt gebruikt in gevallen waarin geen XmlnsDefinitionAttribute toeschrijving bestaat in de assembly's die typen bevatten. Deze conventie is mogelijk complexer dan de URI-conventie en heeft ook het potentieel voor dubbelzinnigheid en duplicatie, omdat er meerdere manieren zijn om naar een assembly te verwijzen.
De meest eenvoudige vorm van een id die gebruikmaakt van de CLR-naamruimte en assemblyconventie is als volgt:
clr-namespace:clrnsName; assembly=assemblyShortName
clr-namespace:
en ; assembly=
zijn letterlijke onderdelen van de syntaxis.
clrnsName is de naam van de tekenreeks die een CLR-naamruimte identificeert. Deze tekenreeksnaam bevat interne punttekens (.) die hints geven over de CLR-naamruimte en de relatie met andere CLR-naamruimten.
assemblyShortName is de tekenreeksnaam van een assembly die typen definieert die nuttig zijn in XAML. De typen die moeten worden geopend via de gedeclareerde XAML-naamruimte, worden naar verwachting gedefinieerd door de assembly en moeten worden gedeclareerd binnen de CLR-naamruimte die is opgegeven door clrnsName. Deze tekenreeksnaam parallelleert doorgaans de informatie zoals gerapporteerd door AssemblyName.Name.
Een volledigere definitie van de CLR-naamruimte en assemblyconventie is als volgt:
clr-namespace:clrnsName; assembly=assemblyName
assemblyName vertegenwoordigt een tekenreeks die juridisch is als Assembly.Load(String) invoer. Deze tekenreeks kan cultuur-, openbare sleutel- of versie-informatie bevatten (definities van deze concepten worden gedefinieerd in het referentieonderwerp voor Assembly). COFF-indeling en bewijs (zoals gebruikt door andere overbelastingen van Load) zijn niet relevant voor XAML-assemblyladingsdoeleinden; alle laadgegevens moeten worden weergegeven als een tekenreeks.
Het opgeven van een openbare sleutel voor de assembly is een handige techniek voor XAML-beveiliging of voor het verwijderen van mogelijke dubbelzinnigheid die kan bestaan als assembly's worden geladen met een eenvoudige naam of die al bestaan in een cache of toepassingsdomein. Zie XAML-beveiligingsoverwegingenvoor meer informatie.
XAML-naamruimtedeclaraties in de XAML Services-API
In de XAML Services-API wordt een XAML-naamruimtedeclaratie vertegenwoordigd door een NamespaceDeclaration-object. Als u een XAML-naamruimte in code declareren, roept u de NamespaceDeclaration(String, String) constructor aan. De parameters ns
en prefix
worden opgegeven als tekenreeksen en de invoer die voor deze parameters moet worden opgegeven, komt overeen met de definitie van de XAML-naamruimte-id en het voorvoegsel XAML-naamruimte, zoals eerder in dit onderwerp is opgegeven.
Als u XAML-naamruimtegegevens onderzoekt als onderdeel van een XAML-knooppuntstroom of via andere toegang tot het XAML-typesysteem, rapporteert NamespaceDeclaration.Namespace de XAML-naamruimte-id en NamespaceDeclaration.Prefix het voorvoegsel van de XAML-naamruimte rapporteert.
In een XAML-knooppuntstroom kan de informatie over de XAML-naamruimte worden weergegeven als een XAML-knooppunt dat voorafgaat aan de entiteit waarop deze van toepassing is. Dit geldt ook voor gevallen waarin de informatie over de XAML-naamruimte voorafgaat aan de StartObject
van het XAML-hoofdelement. Zie Understanding XAML Node Stream Structures and Conceptsvoor meer informatie.
Voor veel scenario's die gebruikmaken van de .NET XAML Services-API, wordt verwacht dat er ten minste één XAML-naamruimtedeclaratie bestaat en moet de declaratie informatie bevatten of verwijzen naar informatie die vereist is voor een XAML-schemacontext. De XAML-naamruimten moeten assembly's opgeven die moeten worden geladen of helpen bij het oplossen van specifieke typen binnen naamruimten en assembly's die al zijn geladen of die bekend zijn door de XAML-schemacontext.
Als u een XAML-knooppuntstroom wilt genereren, moet informatie over het XAML-type beschikbaar zijn via de context van het XAML-schema. De gegevens van het XAML-type kunnen niet worden bepaald zonder eerst de relevante XAML-naamruimte te bepalen voor elk knooppunt dat moet worden gemaakt. Op dit moment worden er nog geen exemplaren van typen gemaakt, maar de XAML-schemacontext moet mogelijk informatie opzoeken uit het definiërende assembly- en back-uptype. Als u bijvoorbeeld de markeringen wilt verwerken <Party><PartyFavor/></Party>
, moet de context van het XAML-schema de naam en het type van de ContentProperty
van Party
kunnen bepalen en moet u dus ook de informatie over de XAML-naamruimte voor Party
en PartyFavor
weten. In het geval van de standaardcontext van het XAML-schema rapporteert statische reflectie veel van de systeeminformatie van het XAML-type die nodig is voor het genereren van XAML-typeknooppunten in de knooppuntstroom.
Als u een objectgrafiek wilt genereren op basis van een XAML-knooppuntstroom, moeten XAML-naamruimtedeclaraties bestaan voor elk XAML-voorvoegsel dat wordt gebruikt in de oorspronkelijke markering en vastgelegd in de XAML-knooppuntstroom. Op dit moment worden exemplaren gemaakt en wordt het gedrag van echte typetoewijzingen uitgevoerd.
Als u informatie over de XAML-naamruimte vooraf moet invullen, kunt u de XAML-naamruimte declaraties declareren in de XmlParserContext voor een XmlReader. Gebruik dat XmlReader vervolgens als invoer voor een XAML-lezerconstructor of XamlServices.Load(XmlReader).
Twee andere API's die relevant zijn voor de verwerking van XAML-naamruimten in .NET XAML Services zijn de kenmerken XmlnsDefinitionAttribute en XmlnsPrefixAttribute. Deze kenmerken zijn van toepassing op assembly's. XmlnsDefinitionAttribute wordt gebruikt door een XAML-schemacontext om een XAML-naamruimtedeclaratie te interpreteren die een URI bevat. XmlnsPrefixAttribute wordt gebruikt door hulpprogramma's die XAML verzenden, zodat een bepaalde XAML-naamruimte kan worden geserialiseerd met een voorspelbaar voorvoegsel. Zie XAML-Related CLR-kenmerken voor aangepaste typen en bibliothekenvoor meer informatie.
Zie ook
.NET Desktop feedback