.NET XAML サービスの XAML 名前空間

XAML 名前空間は、XML 名前空間の定義を拡張する概念です。 XML 名前空間と同様に、マークアップで xmlns 属性を使用して XAML 名前空間を定義できます。 XAML 名前空間は、XAML ノード ストリームやその他の XAML サービス API でも表されます。 このトピックでは、XAML 名前空間の概念を定義し、XAML 名前空間を定義し、XAML スキーマ コンテキストや .NET XAML サービスのその他の側面で使用する方法について説明します。

XML 名前空間と XAML 名前空間

XAML 名前空間は、XAML が特殊な形式の XML であり、そのマークアップに基本的な XML 形式を使用するのと同様に、特殊化された XML 名前空間です。 マークアップでは、要素に適用される xmlns 属性を使用して、XAML 名前空間とそのマッピングを宣言します。 xmlns 宣言は、XAML 名前空間が宣言されているのと同じ要素に対して行うことができます。 要素に対して行われた XAML 名前空間宣言は、その要素、その要素のすべての属性、およびその要素のすべての子に対して有効です。 属性は、属性名自体がマークアップ内の属性名の一部としてプレフィックスを参照している限り、属性を含む要素と同じではない XAML 名前空間を使用できます。

XAML 名前空間と XML 名前空間の違いは、XML 名前空間を使用してスキーマを参照したり、エンティティを区別したりすることです。 XAML の場合、XAML で使用される型とメンバーは最終的にバッキング型に解決する必要があり、XML スキーマの概念はこの機能に適していません。 XAML 名前空間には、この型マッピングを実行するために XAML スキーマ コンテキストが使用できる必要がある情報が含まれています。

XAML 名前空間コンポーネント

XAML 名前空間定義には、プレフィックスと識別子の 2 つのコンポーネントがあります。 これらの各コンポーネントは、XAML 名前空間がマークアップで宣言されている場合、または XAML 型システムで定義されている場合に存在します。

プレフィックスは、XML 1.0 仕様の W3C 名前空間で許可されている任意の文字列にすることができます。 通常、プレフィックスは一般的なマークアップ ファイルで何度も繰り返されるため、通常、プレフィックスは短い文字列です。 複数の XAML 実装で使用することを目的とした特定の XAML 名前空間では、特定の従来のプレフィックスが使用されます。 たとえば、XAML 言語の XAML 名前空間は、通常、プレフィックス xを使用してマップされます。 既定の XAML 名前空間を定義できます。この名前空間では、プレフィックスは定義で指定されませんが、XAML サービス API で定義またはクエリを実行した場合は空の文字列として表 by.NET。 通常、既定の XAML 名前空間は、XAML 実装テクノロジとそのシナリオとボキャブラリによって、プレフィックスを省略するマークアップの最大量を昇格させるために意図的に選択されます。

この識別子は、XML 1.0 仕様の W3C 名前空間で許可される任意の文字列にすることができます。 慣例により、XML 名前空間または XAML 名前空間の識別子は、通常はプロトコルで修飾された絶対 URI として URI 形式で指定されます。 多くの場合、特定の XAML ボキャブラリを定義するバージョン情報は、パス文字列の一部として暗黙的に示されます。 XAML 名前空間では、XML URI 規則を超える識別子規則が追加されます。 XAML 名前空間の場合、識別子は、XAML 名前空間の要素として指定されている型を解決したり、属性をメンバーに解決したりするために、XAML スキーマ コンテキストで必要な情報を伝達します。

XAML スキーマ コンテキストに情報を伝達するために、XAML 名前空間の識別子は引き続き URI 形式である可能性があります。 ただし、この場合、URI は、特定のアセンブリまたはアセンブリのリストで一致する識別子としても宣言されます。 これはアセンブリ内で、アセンブリを XmlnsDefinitionAttributeに関連付けることで行われます。 XAML 名前空間を識別し、属性付きアセンブリで CLR ベースの型解決動作をサポートするこのメソッドは、.NET XAML サービスの既定の XAML スキーマ コンテキストでサポートされています。 一般に、この規則は、XAML スキーマ コンテキストに CLR が組み込まれている場合、または CLR アセンブリから CLR 属性を読み取るために必要な既定の XAML スキーマ コンテキストに基づいている場合に使用できます。

XAML 名前空間は、CLR 名前空間と型定義アセンブリを通信する規則によって識別することもできます。 この規則は、型を含むアセンブリに XmlnsDefinitionAttribute 属性が存在しない場合に使用されます。 この規則は、URI 規則よりも複雑になる可能性があり、アセンブリを参照する方法が複数あるため、あいまいさと重複の可能性もあります。

CLR 名前空間とアセンブリ規則を使用する識別子の最も基本的な形式は次のとおりです。

clr-namespace:clrnsName; assembly=assemblyShortName

clr-namespace:; assembly= は、構文のリテラル コンポーネントです。

clrnsName は、CLR 名前空間を識別する文字列名です。 この文字列名には、CLR 名前空間とその他の CLR 名前空間との関係に関するヒントを提供する内部ドット文字 (.) が含まれます。

assemblyShortName は、XAML で役立つ型を定義するアセンブリの文字列名です。 宣言された XAML 名前空間を介してアクセスされる型は、アセンブリによって定義され、clrnsNameで指定された CLR 名前空間内で宣言 必要があります。 この文字列名は、通常、AssemblyName.Nameによって報告された情報と同じになります。

CLR 名前空間とアセンブリ規則のより完全な定義は次のとおりです。

clr-namespace:clrnsName; assembly=assemblyName

assemblyName は、 入力として有効な任意の文字列を表します。 この文字列には、カルチャ、公開キー、またはバージョン情報を含めることができます (これらの概念の定義は、Assemblyのリファレンス トピックで定義されています)。 COFF 形式と証拠 (Loadの他のオーバーロードで使用される) は、XAML アセンブリの読み込み目的には関係ありません。すべての読み込み情報は文字列として表示する必要があります。

アセンブリの公開キーを指定することは、XAML セキュリティや、アセンブリが単純な名前で読み込まれた場合、またはキャッシュまたはアプリケーション ドメインに事前に存在する場合に存在する可能性のあるあいまいさを取り除くための便利な手法です。 詳細については、「XAML セキュリティに関する考慮事項」を参照してください。

XAML サービス API での XAML 名前空間宣言

XAML サービス API では、XAML 名前空間宣言は NamespaceDeclaration オブジェクトによって表されます。 コードで XAML 名前空間を宣言する場合は、NamespaceDeclaration(String, String) コンストラクターを呼び出します。 ns パラメーターと prefix パラメーターは文字列として指定され、これらのパラメーターに対して指定する入力は、このトピックで前述したように、XAML 名前空間識別子と XAML 名前空間プレフィックスの定義に対応します。

XAML ノード ストリームの一部として、または XAML 型システムへの他のアクセスを通じて XAML 名前空間情報を調べる場合は、XAML 名前空間識別子を報告 NamespaceDeclaration.Namespace、XAML 名前空間プレフィックスを報告 NamespaceDeclaration.Prefix

XAML ノード ストリームでは、XAML 名前空間情報は、適用先のエンティティの前にある XAML ノードとして表示できます。 これには、XAML 名前空間情報が XAML ルート要素の StartObject の前にある場合が含まれます。 詳細については、「XAML ノード ストリームの構造と概念について」を参照してください。

.NET XAML サービス API を使用する多くのシナリオでは、少なくとも 1 つの XAML 名前空間宣言が存在することが想定されており、宣言には XAML スキーマ コンテキストで必要な情報を含めるか参照する必要があります。 XAML 名前空間は、読み込むアセンブリを指定するか、既に読み込まれているか、XAML スキーマ コンテキストによって認識されている名前空間とアセンブリ内の特定の型の解決を支援する必要があります。

XAML ノード ストリームを生成するには、XAML スキーマ コンテキストを介して XAML 型情報を使用できる必要があります。 作成する各ノードの関連する XAML 名前空間を最初に決定しないと、XAML 型情報を特定できません。 この時点で、型のインスタンスはまだ作成されていませんが、XAML スキーマ コンテキストでは、定義アセンブリとバッキング型から情報を検索する必要がある場合があります。 たとえば、マークアップ <Party><PartyFavor/></Party>を処理するには、XAML スキーマ コンテキストが ContentPropertyParty の名前と型を決定できる必要があります。したがって、PartyPartyFavorの XAML 名前空間情報も認識する必要があります。 既定の XAML スキーマ コンテキストの場合、静的リフレクションは、ノード ストリームで XAML 型ノードを生成するために必要な XAML 型システム情報の多くを報告します。

XAML ノード ストリームからオブジェクト グラフを生成するには、元のマークアップで使用され、XAML ノード ストリームに記録される XAML プレフィックスごとに XAML 名前空間宣言が存在する必要があります。 この時点で、インスタンスが作成され、実際の型マッピング動作が発生します。

XAML 名前空間の情報を事前に入力する必要がある場合、XAML スキーマ コンテキストを使用する XAML 名前空間がマークアップで定義されていない場合、使用できる 1 つの手法は、XmlParserContextXmlReader で XML 名前空間宣言を宣言することです。 その後、その XmlReader を XAML リーダー コンストラクターの入力として使用するか、XamlServices.Load(XmlReader)使用します。

.NET XAML サービスでの XAML 名前空間の処理に関連する他の 2 つの API は、XmlnsDefinitionAttribute 属性と XmlnsPrefixAttribute属性です。 これらの属性はアセンブリに適用されます。 XmlnsDefinitionAttribute は、URI を含む XAML 名前空間宣言を解釈するために XAML スキーマ コンテキストによって使用されます。 XmlnsPrefixAttribute は、特定の XAML 名前空間を予測可能なプレフィックスでシリアル化できるように、XAML を出力するツールによって使用されます。 詳細については、「カスタム型とライブラリの CLR 属性XAML-Related する」を参照してください。

関連項目