Bagikan melalui


Namespace XAML untuk Layanan XAML .NET

Namespace XAML adalah konsep yang diperluas pada definisi namespace XML. Mirip dengan namespace XML, Anda dapat menentukan namespace XAML menggunakan xmlns atribut dalam markup. Namespace XAML juga diwakili dalam aliran simpul XAML dan API Layanan XAML lainnya. Topik ini mendefinisikan konsep namespace XAML, dan menjelaskan bagaimana namespace XAML dapat didefinisikan dan digunakan oleh konteks skema XAML dan aspek lain dari Layanan XAML .NET.

Namespace XML dan Namespace XAML

Namespace XAML adalah namespace XML khusus, sama seperti XAML adalah bentuk XML khusus dan menggunakan formulir XML dasar untuk markupnya. Dalam markup, Anda mendeklarasikan namespace XAML dan pemetaannya melalui atribut yang xmlns diterapkan ke elemen. xmlns Deklarasi dapat dibuat ke elemen yang sama dengan namespace XAML yang dideklarasikan. Deklarasi namespace XAML yang dibuat untuk elemen tersebut valid untuk elemen tersebut, semua atribut elemen tersebut, dan semua turunan elemen tersebut. Atribut dapat menggunakan namespace XAML yang tidak sama dengan elemen yang berisi atribut , selama nama atribut itu sendiri mereferensikan awalan sebagai bagian dari nama atributnya dalam markup.

Perbedaan namespace XAML versus namespace XML adalah bahwa namespace XML mungkin digunakan untuk mereferensikan skema atau hanya untuk membedakan entitas. Untuk XAML, jenis dan anggota seperti yang digunakan dalam XAML pada akhirnya harus diselesaikan ke jenis backing, dan konsep skema XML tidak berlaku dengan baik untuk kemampuan ini. Namespace XAML berisi informasi yang harus tersedia oleh konteks skema XAML untuk melakukan pemetaan jenis ini.

Komponen Namespace XAML

Definisi namespace XAML memiliki dua komponen: awalan, dan pengidentifikasi. Masing-masing komponen ini ada ketika namespace XAML dideklarasikan dalam markup, atau didefinisikan dalam sistem jenis XAML.

Awalan dapat berupa string apa pun seperti yang diizinkan oleh Namespace W3C dalam spesifikasi XML 1.0. Menurut konvensi, awalan biasanya string pendek, karena awalan diulang berkali-kali dalam file markup umum. Namespace XAML tertentu yang dimaksudkan untuk digunakan dalam beberapa implementasi XAML menggunakan awalan konvensional tertentu. Misalnya, namespace XAML bahasa XAML biasanya dipetakan menggunakan awalan x. Anda dapat menentukan namespace XAML default, di mana awalan tidak diberikan dalam definisi tetapi diwakili sebagai string kosong jika didefinisikan atau dikueri by.NET API Layanan XAML. Biasanya, namespace XAML default sengaja dipilih untuk mempromosikan jumlah markup awalan yang dimaksimalkan oleh teknologi penerapan XAML dan skenario dan kosakatanya.

Pengidentifikasi dapat berupa string apa pun seperti yang diizinkan oleh Namespace W3C dalam spesifikasi XML 1.0. Menurut konvensi, pengidentifikasi untuk namespace XML atau namespace XAML sering diberikan dalam bentuk URI, biasanya sebagai URI absolut yang memenuhi syarat protokol. Seringkali, informasi versi yang mendefinisikan kosakata XAML tertentu tersirat sebagai bagian dari string jalur. Namespace XAML menambahkan konvensi pengidentifikasi tambahan di luar konvensi URI XML. Untuk namespace XAML, pengidentifikasi mengkomunikasikan informasi yang diperlukan oleh konteks skema XAML untuk menyelesaikan jenis yang ditentukan sebagai elemen di bawah namespace XAML tersebut, atau untuk menyelesaikan atribut kepada anggota.

Untuk tujuan mengomunikasikan informasi ke konteks skema XAML, pengidentifikasi untuk namespace XAML mungkin masih dalam bentuk URI. Namun, dalam hal ini URI juga dinyatakan sebagai pengidentifikasi yang cocok dalam rakitan atau daftar rakitan tertentu. Ini dilakukan dalam rakitan dengan mengambil rakitan dengan XmlnsDefinitionAttribute. Metode mengidentifikasi namespace XAML ini dan mendukung perilaku resolusi jenis berbasis CLR dalam rakitan yang diatribusikan didukung oleh konteks skema XAML default dalam Layanan XAML .NET. Lebih umum, konvensi ini dapat digunakan untuk kasus di mana konteks skema XAML menggabungkan CLR atau didasarkan pada konteks skema XAML default, yang diperlukan untuk membaca atribut CLR dari rakitan CLR.

Namespace XAML juga dapat diidentifikasi oleh konvensi yang mengomunikasikan namespace CLR dan rakitan yang menentukan jenis. Konvensi ini digunakan dalam kasus di mana tidak ada XmlnsDefinitionAttribute atribusi dalam rakitan yang berisi jenis. Konvensi ini berpotensi lebih kompleks daripada konvensi URI, dan juga memiliki potensi ambiguitas dan duplikasi, karena ada beberapa cara untuk merujuk ke perakitan.

Bentuk paling mendasar dari pengidentifikasi yang menggunakan namespace layanan CLR dan konvensi perakitan adalah sebagai berikut:

clr-namespace:clrnsName; assembly=assemblyShortName

clr-namespace: dan ; assembly= merupakan komponen harfiah dari sintaks.

clrnsName adalah nama string yang mengidentifikasi namespace CLR. Nama string ini mencakup karakter titik internal (.) yang memberikan petunjuk tentang namespace CLR dan hubungannya dengan namespace CLR lainnya.

assemblyShortName adalah nama string dari rakitan yang menentukan jenis yang berguna di XAML. Jenis yang akan diakses melalui namespace XAML yang dideklarasikan diharapkan didefinisikan oleh rakitan dan dideklarasikan dalam namespace CLR yang ditentukan oleh clrnsName. Nama string ini biasanya menyejajarkan informasi seperti yang dilaporkan oleh AssemblyName.Name.

Definisi yang lebih lengkap dari namespace layanan CLR dan konvensi perakitan adalah sebagai berikut:

clr-namespace:clrnsName; assembly=assemblyName

assemblyName mewakili string apa pun yang legal sebagai Assembly.Load(String) input. String ini dapat mencakup budaya, kunci publik, atau informasi versi (definisi konsep ini didefinisikan dalam topik referensi untuk Assembly). Format dan bukti COFF (seperti yang digunakan oleh kelebihan beban Loadlain ) tidak relevan untuk tujuan pemuatan rakitan XAML; semua informasi beban harus disajikan sebagai string.

Menentukan kunci publik untuk rakitan adalah teknik yang berguna untuk keamanan XAML, atau untuk menghapus kemungkinan ambiguitas yang dapat ada jika rakitan dimuat dengan nama sederhana, atau sudah ada sebelumnya di cache atau domain aplikasi. Untuk informasi selengkapnya, lihat Pertimbangan Keamanan XAML.

Deklarasi Namespace XAML di API Layanan XAML

Dalam API Layanan XAML, deklarasi namespace XAML diwakili oleh NamespaceDeclaration objek. Jika Anda mendeklarasikan namespace XAML dalam kode, Anda memanggil NamespaceDeclaration(String, String) konstruktor. Parameter ns dan prefix ditentukan sebagai string, dan input yang akan disediakan untuk parameter ini sesuai dengan definisi pengidentifikasi namespace XAML dan awalan namespace XAML seperti yang disediakan sebelumnya dalam topik ini.

Jika Anda memeriksa informasi namespace XAML sebagai bagian dari aliran simpul XAML atau melalui akses lain ke sistem jenis XAML, NamespaceDeclaration.Namespace laporkan pengidentifikasi namespace XAML, dan NamespaceDeclaration.Prefix melaporkan awalan namespace XAML.

Dalam aliran simpul XAML, informasi namespace XAML dapat muncul sebagai simpul XAML yang mendahului entitas yang diterapkannya. Ini termasuk kasus di mana informasi namespace XAML mendahului StartObject elemen akar XAML. Untuk informasi selengkapnya, lihat Memahami Struktur dan Konsep Aliran Simpul XAML.

Untuk banyak skenario yang menggunakan .NET XAML Services API, setidaknya satu deklarasi namespace XAML diharapkan ada, dan deklarasi harus berisi atau merujuk ke informasi yang diperlukan oleh konteks skema XAML. Namespace XAML harus menentukan rakitan yang akan dimuat, atau membantu menyelesaikan jenis tertentu dalam namespace dan rakitan yang sudah dimuat atau diketahui oleh konteks skema XAML.

Untuk menghasilkan aliran simpul XAML, informasi jenis XAML harus tersedia, melalui konteks skema XAML. Informasi jenis XAML tidak dapat ditentukan tanpa terlebih dahulu menentukan namespace XAML yang relevan untuk setiap simpul yang akan dibuat. Pada titik ini, belum ada instans jenis yang dibuat, tetapi konteks skema XAML mungkin perlu mencari informasi dari rakitan dan jenis pencadangan yang menentukan. Misalnya, untuk memproses markup <Party><PartyFavor/></Party>, konteks skema XAML harus dapat menentukan nama dan jenis ContentProperty dari Party, dan dengan demikian juga harus mengetahui informasi namespace XAML untuk Party dan PartyFavor. Dalam kasus konteks skema XAML default, refleksi statis melaporkan banyak informasi sistem jenis XAML yang diperlukan untuk menghasilkan node jenis XAML dalam aliran simpul.

Untuk menghasilkan grafik objek dari aliran simpul XAML, deklarasi namespace XAML harus ada untuk setiap awalan XAML yang digunakan dalam markup asli dan direkam dalam aliran simpul XAML. Pada titik ini, instans sedang dibuat, dan perilaku pemetaan jenis yang benar terjadi.

Jika Anda perlu mengisi sebelumnya informasi namespace XAML, dalam kasus di mana namespace XAML yang Anda niatkan konteks skema XAML untuk digunakan tidak ditentukan dalam markup, salah satu teknik yang dapat Anda gunakan adalah mendeklarasikan deklarasi namespace XML di XmlParserContext untuk XmlReader. Kemudian gunakan itu XmlReader sebagai input untuk konstruktor pembaca XAML, atau XamlServices.Load(XmlReader).

Dua API lain yang relevan untuk penanganan namespace XAML di Layanan XAML .NET adalah atribut XmlnsDefinitionAttribute dan XmlnsPrefixAttribute. Atribut ini berlaku untuk rakitan. XmlnsDefinitionAttribute digunakan oleh konteks skema XAML untuk menginterpretasikan deklarasi namespace XAML apa pun yang menyertakan URI. XmlnsPrefixAttribute digunakan oleh alat yang memancarkan XAML sehingga namespace XAML tertentu dapat diserialisasikan dengan awalan yang dapat diprediksi. Untuk informasi selengkapnya, lihat Atribut CLR Terkait XAML untuk Jenis dan Pustaka Kustom.

Baca juga