Udostępnij za pośrednictwem


Przestrzenie nazw XAML dla usług XAML platformy .NET

Przestrzeń nazw XAML to pojęcie, które rozszerza definicję przestrzeni nazw XML. Podobnie jak w przestrzeni nazw XML, można zdefiniować przestrzeń nazw XAML przy użyciu atrybutu xmlns w adiustacji. Przestrzenie nazw XAML są również reprezentowane w strumieniu węzła XAML i innych interfejsach API usług XAML. W tym temacie zdefiniowano koncepcję przestrzeni nazw XAML i opisano sposób, w jaki można definiować przestrzenie nazw XAML i które są używane przez konteksty schematu XAML XAML oraz inne aspekty usług XAML platformy .NET.

Przestrzeń nazw XML i przestrzeń nazw XAML

Przestrzeń nazw XAML jest wyspecjalizowaną przestrzenią nazw XML, podobnie jak XAML jest wyspecjalizowaną formą XML i używa podstawowego formularza XML do adiustacji. W znacznikach deklarujesz przestrzeń nazw XAML i jej mapowanie za pomocą atrybutu zastosowanego xmlns do elementu. Deklarację xmlns można wykonać do tego samego elementu, w którego zadeklarowano przestrzeń nazw XAML. Deklaracja przestrzeni nazw XAML wykonana dla elementu jest prawidłowa dla tego elementu, wszystkich atrybutów tego elementu i wszystkich elementów podrzędnych tego elementu. Atrybuty mogą używać przestrzeni nazw XAML, która nie jest taka sama jak element zawierający atrybut, tak długo, jak sama nazwa atrybutu odwołuje się do prefiksu jako części nazwy atrybutu w adiustacji.

Rozróżnienie przestrzeni nazw XAML w porównaniu z przestrzenią nazw XML polega na tym, że przestrzeń nazw XML może służyć do odwołowania się do schematu lub po prostu rozróżniania jednostek. W przypadku języka XAML typy i elementy członkowskie używane w języku XAML muszą być ostatecznie rozpoznawane jako typy kopii zapasowych, a koncepcje schematu XML nie mają zastosowania do tej możliwości. Przestrzeń nazw XAML zawiera informacje, które kontekst schematu XAML musi być dostępny w celu wykonania tego mapowania typów.

Składniki przestrzeni nazw XAML

Definicja przestrzeni nazw XAML ma dwa składniki: prefiks i identyfikator. Każdy z tych składników jest obecny, gdy przestrzeń nazw XAML jest zadeklarowana w adiustacji lub zdefiniowana w systemie typów XAML.

Prefiks może być dowolnym ciągiem dozwolonym przez przestrzenie nazw W3C w specyfikacji XML 1.0. Zgodnie z konwencją prefiksy są zazwyczaj krótkimi ciągami, ponieważ prefiks jest powtarzany wiele razy w typowym pliku znaczników. Niektóre przestrzenie nazw XAML, które mają być używane w wielu implementacjach XAML, używają określonych konwencjonalnych prefiksów. Na przykład przestrzeń nazw XAML języka XAML jest zwykle mapowana przy użyciu prefiksu x. Możesz zdefiniować domyślną przestrzeń nazw XAML, w której prefiks nie jest podany w definicji, ale jest reprezentowany jako pusty ciąg, jeśli jest zdefiniowany lub zapytany by.NET interfejs API usług XAML. Zazwyczaj domyślna przestrzeń nazw XAML jest celowo wybierana w celu promowania zmaksymalizowanej ilości prefiksu pomijania znaczników przez technologię implementowania XAML oraz jej scenariuszy i słownictwa.

Identyfikator może być dowolnym ciągiem dozwolonym przez przestrzenie nazw W3C w specyfikacji XML 1.0. Zgodnie z konwencją identyfikatory przestrzeni nazw XML lub przestrzeni nazw XAML są często podane w formularzu identyfikatora URI, zazwyczaj jako kwalifikowany bezwzględny identyfikator URI protokołu. Często informacje o wersji definiujące konkretne słownictwo XAML są implikowane jako część ciągu ścieżki. Przestrzenie nazw XAML dodają dodatkową konwencję identyfikatora poza konwencją identyfikatora URI XML. W przypadku przestrzeni nazw XAML identyfikator komunikuje informacje wymagane przez kontekst schematu XAML w celu rozpoznania typów określonych jako elementów w tej przestrzeni nazw XAML lub rozpoznawania atrybutów dla elementów członkowskich.

Na potrzeby przekazywania informacji do kontekstu schematu XAML identyfikator przestrzeni nazw XAML może nadal znajdować się w postaci identyfikatora URI. Jednak w tym przypadku identyfikator URI jest również zadeklarowany jako zgodny identyfikator w określonym zestawie lub liście zestawów. Odbywa się to w zestawach przez przypisywanie zestawu za pomocą polecenia XmlnsDefinitionAttribute. Ta metoda identyfikowania przestrzeni nazw XAML i obsługi zachowania rozpoznawania typów opartych na clR w zestawie przypisanym jest obsługiwana przez domyślny kontekst schematu XAML w usługach XAML platformy .NET. Ogólnie rzecz biorąc, ta konwencja może być używana w przypadkach, gdy kontekst schematu XAML zawiera CLR lub jest oparty na domyślnym kontekście schematu XAML, który jest niezbędny do odczytu atrybutów CLR z zestawów CLR.

Przestrzenie nazw XAML można również zidentyfikować za pomocą konwencji, która komunikuje przestrzeń nazw CLR i zestaw definiujący typ. Ta konwencja jest używana w przypadkach, gdy w zestawach zawierających typy nie XmlnsDefinitionAttribute istnieje żadne przypisanie autorstwa. Ta konwencja jest potencjalnie bardziej złożona niż konwencja identyfikatora URI, a także ma potencjał niejednoznaczności i duplikacji, ponieważ istnieje wiele sposobów odwoływania się do zestawu.

Najbardziej podstawową formą identyfikatora korzystającego z przestrzeni nazw CLR i konwencji zestawu jest następująca:

clr-namespace:clrnsName; assembly=assemblyShortName

clr-namespace: i ; assembly= są składnikami literału składni.

clrnsName to nazwa ciągu identyfikującego przestrzeń nazw CLR. Ta nazwa ciągu zawiera wszelkie wewnętrzne znaki kropki (.), które zapewniają wskazówki dotyczące przestrzeni nazw CLR i jej relacji z innymi przestrzeniami nazw CLR.

assemblyShortName to nazwa ciągu zestawu, który definiuje typy, które są przydatne w języku XAML. Oczekuje się, że typy, które mają być dostępne za pośrednictwem zadeklarowanej przestrzeni nazw XAML, zostaną zdefiniowane przez zestaw i zostaną zadeklarowane w przestrzeni nazw CLR określonej przez clrnsName. Ta nazwa ciągu zwykle jest równoległa do informacji zgłaszanych przez AssemblyName.Nameelement .

Bardziej kompletna definicja przestrzeni nazw CLR i konwencji zestawów jest następująca:

clr-namespace:clrnsName; assembly=assemblyName

assemblyName reprezentuje dowolny ciąg, który jest legalny Assembly.Load(String) jako dane wejściowe. Ten ciąg może zawierać informacje o kulturze, kluczu publicznym lub wersji (definicje tych pojęć są zdefiniowane w temacie referencyjnym dla programu Assembly). Format i dowody COFF (używane przez inne przeciążenia Load) nie są istotne dla celów ładowania zestawu XAML; wszystkie informacje o obciążeniu muszą być prezentowane jako ciąg.

Określenie klucza publicznego dla zestawu jest przydatną techniką zabezpieczeń XAML lub usunięcie możliwej niejednoznaczności, która może istnieć, jeśli zestawy są ładowane przez prostą nazwę lub wstępnie istnieją w pamięci podręcznej lub domenie aplikacji. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące zabezpieczeń XAML.

Deklaracje przestrzeni nazw XAML w interfejsie API usług XAML

W interfejsie API usług XAML deklaracja przestrzeni nazw XAML jest reprezentowana przez NamespaceDeclaration obiekt. Jeśli deklarujesz przestrzeń nazw XAML w kodzie, wywołasz NamespaceDeclaration(String, String) konstruktor. Parametry ns i prefix są określane jako ciągi, a dane wejściowe, które należy podać dla tych parametrów, odpowiadają definicji identyfikatora przestrzeni nazw XAML i prefiksu przestrzeni nazw XAML, jak podano wcześniej w tym temacie.

Jeśli badasz informacje o przestrzeni nazw XAML w ramach strumienia węzła XAML lub za pośrednictwem innego dostępu do systemu typów XAML, NamespaceDeclaration.Namespace raportuje identyfikator przestrzeni nazw XAML i NamespaceDeclaration.Prefix zgłasza prefiks przestrzeni nazw XAML.

W strumieniu węzła XAML informacje o przestrzeni nazw XAML mogą być wyświetlane jako węzeł XAML, który poprzedza jednostkę, do której ma zastosowanie. Obejmuje to przypadki, w których informacje o przestrzeni nazw XAML poprzedzają StartObject element główny XAML. Aby uzyskać więcej informacji, zobacz Understanding XAML Node Stream Structures and Concepts (Omówienie struktur i pojęć strumienia węzłów XAML).

W przypadku wielu scenariuszy korzystających z interfejsu API usług XAML platformy .NET oczekuje się, że istnieje co najmniej jedna deklaracja przestrzeni nazw XAML, a deklaracja musi zawierać lub odwoływać się do informacji wymaganych przez kontekst schematu XAML. Przestrzenie nazw XAML muszą określać zestawy do załadowania lub pomóc w rozpoznawaniu określonych typów w przestrzeniach nazw i zestawach, które są już załadowane lub znane w kontekście schematu XAML.

Aby wygenerować strumień węzła XAML, informacje o typie XAML muszą być dostępne za pośrednictwem kontekstu schematu XAML. Nie można określić informacji o typie XAML bez uprzedniego określenia odpowiedniej przestrzeni nazw XAML dla każdego węzła do utworzenia. W tym momencie nie są jeszcze tworzone żadne wystąpienia typów, ale kontekst schematu XAML może wymagać wyszukania informacji z definiującego zestawu i typu kopii zapasowej. Na przykład, aby przetworzyć znaczniki <Party><PartyFavor/></Party>, kontekst schematu XAML musi być w stanie określić nazwę i typ PartyContentProperty elementu , a tym samym musi znać informacje o przestrzeni nazw XAML dla Party i PartyFavor. W przypadku domyślnego kontekstu schematu XAML statyczne odbicie zgłasza większość informacji systemowych typu XAML potrzebnych do generowania węzłów typu XAML w strumieniu węzłów.

Aby wygenerować graf obiektu ze strumienia węzła XAML, deklaracje przestrzeni nazw XAML muszą istnieć dla każdego prefiksu XAML używanego w oryginalnym znaczniku i zarejestrowanego w strumieniu węzła XAML. W tym momencie tworzone są wystąpienia i występuje prawdziwe zachowanie mapowania typów.

Jeśli musisz wstępnie wypełniać informacje o przestrzeni nazw XAML, w przypadkach, gdy przestrzeń nazw XAML, której zamierzasz użyć kontekstu schematu XAML, nie jest zdefiniowana w znaczniku, jedną z technik jest zadeklarowanie deklaracji przestrzeni nazw XML w XmlParserContext obiekcie dla elementu XmlReader. Następnie użyj tego XmlReader jako danych wejściowych dla konstruktora czytnika XAML lub XamlServices.Load(XmlReader).

Dwa inne interfejsy API, które są istotne dla obsługi przestrzeni nazw XAML w usługach XAML platformy .NET, to atrybuty XmlnsDefinitionAttribute i XmlnsPrefixAttribute. Te atrybuty mają zastosowanie do zestawów. XmlnsDefinitionAttribute jest używany przez kontekst schematu XAML do interpretowania dowolnej deklaracji przestrzeni nazw XAML, która zawiera identyfikator URI. XmlnsPrefixAttribute jest używany przez narzędzia emitujące kod XAML, dzięki czemu określona przestrzeń nazw XAML może być serializowana z przewidywalnym prefiksem. Aby uzyskać więcej informacji, zobacz Atrybuty CLR związane z językiem XAML dla typów niestandardowych i bibliotek.

Zobacz też