XML ドキュメントでの名前空間の管理Managing Namespaces in an XML Document

XML 名前空間は、XML ドキュメントの要素名と属性名をカスタムの定義済み URI に関連付けます。XML namespaces associate element and attribute names in an XML document with custom and predefined URIs. この関係を作成するには、名前空間 URI のプレフィックスを定義し、そのプレフィックスを使用して XML データ内の要素名と属性名を修飾します。To create these associations, you define prefixes for namespace URIs, and use those prefixes to qualify element and attribute names in XML data. 名前空間は要素名や属性名の競合を防ぎ、同じ名前の要素や属性を個別に処理および評価できるようにします。Namespaces prevent element and attribute name collisions, and enable elements and attributes of the same name to be handled and validated differently.

名前空間の宣言Declaring namespaces

要素で名前空間を宣言するには、xmlns: 属性を使用します。To declare a namespace on an element, you use the xmlns: attribute:

xmlns:<name>=<"uri">

ここで、<name> は名前空間プレフィックスで、<"uri"> は名前空間を識別する URI です。where <name> is the namespace prefix and <"uri"> is the URI that identifies the namespace. プレフィックスを宣言したら、そのプレフィックスを使用して XML ドキュメント内の要素と属性を修飾し、名前空間 URI と関連付けることができます。After you declare the prefix, you can use it to qualify elements and attributes in an XML document and associate them with the namespace URI. 名前空間プレフィックスはドキュメント全体を通じて使用されるため、短くする必要があります。Because the namespace prefix is used throughout a document, it should be short in length.

この例では、2 つの BOOK 要素を定義しています。This example defines two BOOK elements. 1 つ目の要素はプレフィックス mybook で修飾され、2 つ目の要素はプレフィックス bb で修飾されています。The first element is qualified by the prefix, mybook, and the second element is qualified by the prefix, bb. プレフィックスはそれぞれ、異なる名前空間 URI に関連付けられています。Each prefix is associated with a different namespace URI:

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

ある要素が特定の名前空間の一部であることを指定するには、名前空間プレフィックスをその要素に追加します。To signify that an element is a part of a particular namespace, add the namespace prefix to it. たとえば、Author 要素が mybook 名前空間に属する場合は、<mybook:Author> として宣言されます。For example, if a Author element belongs to the mybook namespace, it is declared as <mybook:Author>.

宣言のスコープDeclaration scope

名前空間の有効な範囲は、宣言された位置から、宣言された要素の最後までです。A namespace is effective from its point of declaration until the end of the element it was declared in. この例では、BOOK 要素で定義されている名前空間は、BOOK 要素など、Publisher 要素の外側にある要素には適用されません。In this example, the namespace defined in the BOOK element doesn't apply to elements outside the BOOK element, such as the Publisher element:

<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 ドキュメントの先頭に示されている必要はありません。A namespace must be declared before it can be used, but it doesn't have to appear at the top of the XML document.

1 つの XML ドキュメントで複数の名前空間を使用する場合は、そのうちの 1 つを既定の名前空間として定義することで、ドキュメントの外観を見やすくできます。When you use multiple namespaces in an XML document, you can define one namespace as the default namespace to create a cleaner looking document. 既定の名前空間はルート要素で宣言され、ドキュメント内の修飾されていないすべての要素に適用されます。The default namespace is declared in the root element and applies to all unqualified elements in the document. 既定の名前空間は要素にのみ適用されます。属性には適用されません。Default namespaces apply to elements only, not to attributes.

既定の名前空間を使用するには、要素の宣言でプレフィックスとコロンを省略します。To use the default namespace, omit the prefix and the colon from the declaration on the element:

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

名前空間の管理Managing namespaces

XmlNamespaceManager クラスには、名前空間 URI とそのプレフィックスのコレクションが格納されます。このクラスを使用すると、コレクションで名前空間を検索、追加、および削除できます。The XmlNamespaceManager class stores a collection of namespace URIs and their prefixes, and lets you look up, add, and remove namespaces from this collection. このクラスは、特定のコンテキストで、XML の処理のパフォーマンスを向上させるために必要です。In certain contexts, this class is required for better XML processing performance. たとえば、XPath をサポートするには、XsltContext クラスで XmlNamespaceManager を使用します。For example, the XsltContext class uses XmlNamespaceManager for XPath support.

名前空間マネージャーでは名前空間の検証は一切実行されません。このマネージャーでは、プレフィックスと名前空間が既に確認され、W3C 名前空間仕様に準拠していることが前提となっています。The namespace manager doesn't perform any validation on the namespaces, but assumes that prefixes and namespaces have already been verified and conform to the W3C Namespaces specification.

注意

C# および Visual Basic の LINQ to XML では、名前空間を管理するために XmlNamespaceManager を使用しません。LINQ TO XML in C# and Visual Basic don't use XmlNamespaceManager to manage namespaces. LINQ to XML を使用している場合の名前空間の管理については、LINQ のドキュメントにある「XML 名前空間の使用 (C#)」および XML 名前空間の使用 (Visual Basic) に関するページを参照してください。See Working with XML Namespaces (C#) and Working with XML Namespaces (Visual Basic) in the LINQ documentation for information about managing namespaces when using LINQ to XML.

XmlNamespaceManager クラスを使用して実行できる管理タスクと検索タスクをいくつか次に示します。Here are some of the management and lookup tasks you can perform with the XmlNamespaceManager class. 使用例を含む詳細については、各メソッドまたはプロパティのリファレンス ページへのリンクをクリックしてください。For more information and examples, follow the links to the reference page for each method or property.

終了To 上限のファイル数を変更するには、Use
名前空間を追加するAdd a namespace AddNamespace メソッドAddNamespace method
名前空間を削除するRemove a namespace RemoveNamespace メソッドRemoveNamespace method
既定の名前空間の URI を検索するFind the URI for the default namespace DefaultNamespace プロパティDefaultNamespace property
名前空間プレフィックスの URI を検索するFind the URI for a namespace prefix LookupNamespace メソッドLookupNamespace method
名前空間 URI のプレフィックスを検索するFind the prefix for a namespace URI LookupPrefix メソッドLookupPrefix method
現在のノードの名前空間の一覧を取得するGet a list of namespaces in the current node GetNamespacesInScope メソッドGetNamespacesInScope method
名前空間のスコープを指定するScope a namespace PushScope メソッドおよび PopScope メソッドPushScope and PopScope methods
現在のスコープ内にプレフィックスが定義されているかどうかを確認するCheck whether a prefix is defined in the current scope HasNamespace メソッドHasNamespace method
プレフィックスおよび URI を検索するときに使用する名前テーブルを取得するGet the name table used to look up prefixes and URIs NameTable プロパティNameTable property

関連項目See also