XML 型のスキーマでデータを出力する際に、ある要素で名前空間を宣言した後、その要素の配下で同一の名前宣言を宣言しようとしましたが、配下のほうの要素には名前空間の値が出力できませんでした

Avatar
dstn

Question

XML 型のスキーマでデータを出力する際に、ある要素で名前空間を宣言した後、
その要素の配下で同一の名前宣言を宣言しようとしましたが、
配下のほうの要素には名前空間の値が出力できませんでした。

原因と対処方法を教えてください。

Answer

■仕様説明 

ある要素で名前空間を宣言した場合、その名前空間はその要素の
コンテンツ全体に適用されます。

つまり、ある要素で名前空間を宣言した場合、配下の要素でも
適用されます。このため、配下の要素で同一の名前空間を宣言した場合、
既に適用済みのため値を省略します。

■対処方法

上記の動作はXML の名前空間の仕様に準拠しています。
(詳細は参考情報のリンクをご参照ください。)

このため、ある要素と同一の名前宣言の値を、ある要素の配下の
要素に出力することはできません。

■回避策

既に宣言されている値とは別の値でいったん宣言しておいて、
後続の処理で他のアダプタを使って変換するなどの対応を
ご検討ください。

たとえば、いったん XML ファイルとして出力しておいて、
外部アプリケーション起動で変換するプログラムを呼び出す、または
CSV アダプタで読み取った後で変換し、またファイルに書き出す、
などの対応となります。

■補足(回避策に関する注意点)

同一コンテンツ内で、同一の名前空間を複数宣言している場合、
読み取られないことがありますのでご注意ください。

たとえば、XML アダプタの場合は、ある要素とその配下の要素で、同一の
名前空間を宣言していた場合には、配下の要素の名前空間に関しては
読み取りません。

参考情報

・XML Schema: 名前空間について(※外部サイト) 
 http://otndnld.oracle.co.jp/tech/xml/xmldb/htdocs/srivastava_namespaces/srivastava_namespaces.html

該当部分は以下です。

名前空間は、要素の属性として宣言されます。 名前空間の宣言は、必ずしもルート要素で行う必要はなく、
XML文書の任意の要素で宣言できます。 同一の接頭辞名を使用した別の名前空間の宣言によって上書きされない限り、
宣言された名前空間の有効範囲は宣言された要素から開始され、その要素のコンテンツ全体に適用されます。
​ここで、要素のコンテンツとは、その要素の<開始タグ>と</終了タグ>の間のコンテンツです。 

 



[注意事項]
  • このFAQの内容は2017年3月時点のものです。内容は予告なく変更されることがありますので、ご注意ください。
  • 一部にDataSpider Servistaサポートサイトへのリンクを含むことがあります。サポートサイトにアクセスするには、DataSpiderのサポート契約が必要です。


ID:Q264

コメント

記事コメントは受け付けていません。

Powered by Zendesk