3.4.2 名前空間の正規化の例

名前空間の正規化では,次に示す処理が実行されます。

  1. インスタンス文書の読み込み時に作成した名前空間一覧を,ルート要素に追加します。
  2. インスタンス文書の読み込み時に作成した名前空間一覧を基に,各要素の名前空間宣言を削除します。
  3. 削除した名前空間宣言の代わりとなる名前空間に対応する名前空間接頭辞を,必要に応じて,要素または属性に設定・変更します。

ここでは,名前空間に対して接頭辞を一つにするときの正規化規則と,その例について説明します。

同じ名前空間に対して複数の名前空間宣言が記述されていた場合,最初に出現した名前空間宣言の接頭辞を優先し,名前空間に対する接頭辞を一つにします。このとき,名前空間の重複が排除され,名前空間接頭辞が自動生成されます。これらの例については,「3.4.2(1) 名前空間宣言の重複排除」および「3.4.2(2) 名前空間接頭辞の自動作成」を参照してください。

ただし,デフォルト名前空間に関しては,次の点が異なります。これらの例外は,グローバル属性やQName型要素,NOTATION型要素のためです。

<この項の構成>
(1) 名前空間宣言の重複排除
(2) 名前空間接頭辞の自動作成
(3) デフォルト名前空間の例外的処置-グローバル属性への配慮(2番目以降の宣言を優先)
(4) デフォルト名前空間の例外的処置-QName型などへの配慮(デフォルト名前空間の取り消し)
(5) デフォルト名前空間の例外的処置-QName型などへの配慮(名前空間接頭辞の自動生成)

(1) 名前空間宣言の重複排除

正規化前:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
     :
 <xbrli:numericContext id='Current_AsOf' precision='18' cwa='true'>
     :
 </xbrli:numericContext>
     :
 <xbrli:group xmlns:p0="http://www.xbrl.org/2001/instance>
   <p0:numericContext id='Prior_Shares' precision='18' cwa='true'>
     :
   </p0:numericContext>
 </xbrli:group>
</xbrli:group>

正規化後:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
     :
 <xbrli:numericContext id='Current_AsOf' precision='18' cwa='true'>
     :
 </xbrli:numericContext>
     :
 <xbrli:group>
   <xbrli:numericContext id='Prior_Shares' precision='18' cwa='true'>
     :
   </xbrli:numericContext>
 </xbrli:group>
</xbrli:group>

解説:
名前空間「http://www.xbrl.org/2001/instance」に対して,正規化前では,接頭辞「xbrli」「p0」が混在しています。正規化後では,最初に出現した,接頭辞「xbrli」に統一されています。また,ルート要素の子要素である<group>要素にあった「xmlns:p0」の名前空間宣言は不要なため削除されます。

(2) 名前空間接頭辞の自動作成

正規化前:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
 :
 <xbrli:group xmlns:xbrli="http://www.sampleCompany.com/fr/xbrli">
   <xbrli:PropertyPlantEquipment
          numericContext='Current_AsOf'>540000</xbrli:PropertyPlantEquipment>
 </xbrli:group>
 :
</xbrli:group>

正規化後:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
            xmlns:pr0="http://www.sampleCompany.com/fr/xbrli"
 :
 <xbrli:group>
   <pr0:PropertyPlantEquipment
        numericContext='Current_AsOf'>540000</pr0:PropertyPlantEquipment>
 </xbrli:group>
 :
</xbrli:group>

解説:
正規化前では,名前空間「http://www.xbrl.org/2001/instance」と「http://www.sampleCompany.com/fr/xbrli」に対して,一方は局所的ですが,接頭辞は共に「xbrli」です。正規化後では,最初に出現した名前空間「http://www.xbrl.org/2001/instance」は「xbrli」のままとなり,あとから出現した名前空間「http://www.sampleCompany.com/fr/xbrli」は,局所的な宣言が削除され,かつ,宣言をルート要素に移動し自動生成した接頭辞「pr0」が設定されています。
また,名前空間「http://www.sampleCompany.com/fr/xbrli」に属する要素(<PropertyPlantEquipment>)の接頭辞も「pr0」に変更されています。

(3) デフォルト名前空間の例外的処置-グローバル属性への配慮(2番目以降の宣言を優先)

正規化前:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
            xmlns:link="http://www.xbrl.org/2001/XLink/xbrllinkbase"
            xmlns="http://www.w3.org/1999/xlink"
   :
 <xbrli:group xmlns="http://www.xbrl.org/2001/XLink/xbrllinkbase"
              xmlns:xlink="http://www.w3.org/1999/xlink">
   <footnoteLink xlink:type="extended">
     <footnote xlink:type="resource" ...>
      :
   <link:footnoteLink>
 <xbrli:group>
</xbrli:group>

正規化後:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
            xmlns:link="http://www.xbrl.org/2001/XLink/xbrllinkbase"
            xmlns:xlink="http://www.w3.org/1999/xlink"
   :
 <xbrli:group>
   <link:footnoteLink xlink:type="extended">
     <link:footnote xlink:type="resource" ...>
      :
   </link:footnoteLink>
 <xbrli:group>
</xbrli:group>

解説:
正規化前は,名前空間「http://www.w3.org/1999/xlink」に対し,ルート要素ではデフォルト名前空間(接頭辞なし)として宣言されています。しかし,ルート要素の子要素である<group>要素で局所的に接頭辞「xlink」と宣言し直しています。このため,<group>要素の子孫ノードとなる<link:footnoteLink>などでは,グローバル属性である「xlink:type」が利用できます。
例外的処置をしない場合,先に出現した名前空間宣言が優先されるため,次のようになります。グローバル属性であった「xlink:type」がローカル属性「type」となり,不正なインスタンス文書となってしまいます。

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
            xmlns:link="http://www.xbrl.org/2001/XLink/xbrllinkbase"
            xmlns="http://www.w3.org/1999/xlink"
   :
 <xbrli:group>
   <link:footnoteLink type="extended">
     <link:footnote type="resource" ...>
      :
   </link:footnoteLink>
 <xbrli:group>
</xbrli:group>

このため,正規化後では,名前空間「http://www.w3.org/1999/xlink」に対して,最初に出現した宣言はデフォルト名前空間(接頭辞なし)であり,あとから出現した名前空間宣言の接頭辞が「xlink」になります。この場合には,例外的処置が適用され,あとから出現した接頭辞「xlink」を名前空間「http://www.w3.org/1999/xlink」の接頭辞とします。この結果,インスタンス文書の意味は変更されません。

(4) デフォルト名前空間の例外的処置-QName型などへの配慮(デフォルト名前空間の取り消し)

正規化前:

<group xmlns="http://www.xbrl.org/2001/instance"
      xmlns:p0="http://www.sampleCompany.com/fr/xbrli"
 :
 <p0:tradePayable.notes nonNumericContext='Current_AsOf'
       xmlns="">note</p0:tradePayable.notes>
 :
</group>

注 <p0:tradePayable.notes>は,xsd:QName型とします。
正規化後:

<pr0:group xmlns:pr0="http://www.xbrl.org/2001/instance"
          xmlns:p0="http://www.sampleCompany.com/fr/xbrli"
          xmlns=""
 :
 <p0:tradePayable.notes nonNumericContext='Current_AsOf'
       >note</p0:tradePayable.notes>
 :
</pr0:group>

解説:
正規化前は,名前空間「http://www.xbrl,rog/2001/instance」に対し,ルート要素ではデフォルト名前空間(接頭辞なし)として宣言されています。しかし,ルート要素の子要素である<tradePayable.notes>要素で局所的にデフォルト名前空間を取り消す「xmlns=""」と宣言し直しています。このため,<tradePayable.note>要素の値は,{null, note}であり,名前空間に属さない「note」を意味します。
例外的処置を行わない場合,デフォルト名前空間には,先に「http://www.xbrl.org/2001/instance」が割り当てられているため,「xmlns=""」には自動生成された接頭辞が割り当てられ,次のようになります。

<group xmlns="http://www.xbrl.org/2001/instance"
      xmlns:p0="http://www.sampleCompany.com/fr/xbrli"
      xmlns:pr0=""
 :
 <p0:tradePayable.notes nonNumericContext='Current_AsOf'
       >note</p0:tradePayable>
 :
</group>

この場合,デフォルト名前空間を局所的に打ち消していたため{null:note}と解釈されていた<tradePayable.note>の値が,{http://www.xbrl.org/2001/instance, note}と解釈されることになり,不正なインスタンス文書となります。
このため,デフォルト名前空間を取り消す宣言「xmlns=""」が出現した場合,デフォルト名前空間であった「http://www.xbrl.org/2001/instance」に対して,自動生成した接頭辞を割り当てる例外処置を適用します。この結果,インスタンス文書の意味は変更されません。

(5) デフォルト名前空間の例外的処置-QName型などへの配慮(名前空間接頭辞の自動生成)

正規化前:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
            xmlns:p0="http://www.sampleCompany.com/fr/xbrli"
 :
 <p0:tradeReceivables.notes xmlns="http://sample/qname"
       nonNumericContext='Current_AsOf'>note1</p0:tradeReceivables.notes>
 <p0:tradePayable.notes
       nonNumericContext='Current_AsOf'>note2</p0:tradePayable.notes>
 :
</xbrli:group>

注 <p0:tradeReceivables.notes>および<p0:tradePayable.notes>は,共にxsd:QName型とします。
正規化後:

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
            xmlns:p0="http://www.sampleCompany.com/fr/xbrli"
            xmlns:pr0="http://sample/qname"
 :
 <p0:tradeReceivables.notes
       nonNumericContext='Current_AsOf'>pr0:note1</p0:tradeReceivables.notes>
 <p0:tradePayable.notes
       nonNumericContext='Current_AsOf'>note2</p0:tradePayable.notes>
 :
</xbrli:group>

解説:
正規化前は,<tradeReceivables.notes>要素に,局所的な名前空間「http://sample.qname」がデフォルト名前空間(接頭辞なし)として宣言されています。このため,<tradeReceivables.note>要素の値は,{http://sample.qname, note1}であり,名前空間「http://sample.qname」に属する「note1」を意味します。
例外的処置を行わない場合,デフォルト名前空間は宣言されていないため,ルート要素である<group>要素に「http://sample.qname」が移動され,次のようになります。

<xbrli:group xmlns:xbrli="http://www.xbrl.org/2001/instance"
            xmlns:p0="http://www.sampleCompany.com/fr/xbrli"
            xmlns="http://sample/qname"
 :
 <p0:tradeReceivables.notes
       nonNumericContext='Current_AsOf'>note1</p0:tradeReceivables.notes>
 <p0:tradePayable.notes
       nonNumericContext='Current_AsOf'>note2</p0:tradePayable.notes>
 :
</xbrli:group>

<tradeReceivables.notes>要素の値は,{http://sample.qname, note1}のままであり,例外的処理をしなくても意味は変わりません。しかし,<tradePayable.notes>要素の値は,名前空間に属さない{null, note2}でしたが,デフォルト名前空間宣言をルート要素に単純に移動したため{http://sample.qname, note2}となってしまいます。
このため,正規化後ではルート要素にデフォルト名前空間宣言がなく,ルート要素以外にデフォルト名前空間宣言があった場合の例外的処置を適用します。名前空間「http://sample.qname」に自動生成した接頭辞「pr0」を割り当て,QName型の値も接頭辞「pr0」を付けています。