次の方法で共有


XML ドキュメントでの名前空間の管理

XML 名前空間は、XML ドキュメント内の要素と属性の名前を、カスタム URI と定義済みの URI に関連付けます。 これらの関連付けを作成するには、名前空間 URI のプレフィックスを定義し、それらのプレフィックスを使用して XML データ内の要素名と属性名を修飾します。 名前空間は、要素と属性名の競合を防ぎ、同じ名前の要素と属性を異なる方法で処理および検証できるようにします。

名前空間の宣言

要素で名前空間を宣言するには、 xmlns: 属性を使用します。

xmlns:<name>=<"uri">

ここで、 <name> は名前空間プレフィックス、 <"uri"> は名前空間を識別する URI です。 プレフィックスを宣言したら、それを使用して XML ドキュメント内の要素と属性を修飾し、名前空間 URI に関連付けることができます。 名前空間プレフィックスはドキュメント全体で使用されるため、長さは短くする必要があります。

この例では、2 つの BOOK 要素を定義します。 最初の要素はプレフィックス 、 mybookで修飾され、2 番目の要素はプレフィックス ( bb) で修飾されます。 各プレフィックスは、異なる名前空間 URI に関連付けられます。

<mybook:BOOK xmlns:mybook="http://www.contoso.com/books.dtd">  
    <bb:BOOK xmlns:bb="urn:blueyonderairlines" />
</mybook:BOOK>

要素が特定の名前空間の一部であることを示すには、名前空間プレフィックスを追加します。 たとえば、 Author 要素が mybook 名前空間に属している場合、 <mybook:Author>として宣言されます。

宣言スコープ

名前空間は、宣言の時点から宣言された要素の末尾まで有効です。 この例では、BOOK要素で定義されている名前空間は、Publisher要素など、BOOK要素の外部の要素には適用されません。

<Author>Joe Smith</Author>  
<BOOK xmlns:book="http://www.contoso.com">  
    <title>My Wonderful Day</title>  
      <price>$3.95</price>  
</BOOK>  
<Publisher>  
    <Name>MSPress</Name>  
</Publisher>  

名前空間は使用する前に宣言する必要がありますが、XML ドキュメントの先頭に表示する必要はありません。

XML ドキュメントで複数の名前空間を使用する場合は、1 つの名前空間を既定の名前空間として定義して、よりクリーンな外観のドキュメントを作成できます。 既定の名前空間はルート要素で宣言され、ドキュメント内のすべての修飾されていない要素に適用されます。 既定の名前空間は、属性ではなく要素にのみ適用されます。

既定の名前空間を使用するには、要素の宣言からプレフィックスとコロンを省略します。

<BOOK xmlns="http://www.contoso.com/books.dtd">  
...
</BOOK>

名前空間の管理

XmlNamespaceManager クラスは、名前空間 URI とそのプレフィックスのコレクションを格納し、このコレクションの名前空間を検索、追加、および削除できます。 特定のコンテキストでは、このクラスは XML 処理のパフォーマンスを向上させるために必要です。 たとえば、 XsltContext クラスは XPath のサポートに XmlNamespaceManager を使用します。

名前空間マネージャーは名前空間に対して検証を実行しませんが、プレフィックスと名前空間は既に検証済みであり、 W3C 名前空間 の仕様に準拠していることを前提としています。

C# および Visual Basic の LINQ TO XML では、名前空間の管理にXmlNamespaceManagerは使用されません。 LINQ to XML を使用する場合の名前空間の管理については、LINQ ドキュメントの XML 名前空間の操作 (C#) と XML 名前空間の操作 (Visual Basic) を参照してください。

XmlNamespaceManager クラスで実行できる管理タスクと参照タスクの一部を次に示します。 詳細と例については、各メソッドまたはプロパティのリファレンス ページへのリンクを参照してください。

移行先 用途
名前空間を追加する AddNamespace メソッド
名前空間を削除する RemoveNamespace メソッド
既定の名前空間の URI を検索する DefaultNamespace プロパティ
名前空間プレフィックスの URI を検索する LookupNamespace メソッド
名前空間 URI のプレフィックスを検索する LookupPrefix メソッド
現在のノード内の名前空間の一覧を取得する GetNamespacesInScope メソッド
名前空間のスコープを設定する PushScope および PopScope メソッド。
プレフィックスが現在のスコープで定義されているかどうかを確認する HasNamespace メソッド
プレフィックスと URI の検索に使用する名前テーブルを取得する NameTable プロパティ

こちらも参照ください