# XML変換の制限事項

- DataMagicでは入力XMLファイルの読み込みにlibxml2（http://www.xmlsoft.org/）を使用しています。libxml2はXML1.0仕様に準拠しています。XML1.0仕様でない入力XMLファイルは、読み込み時にエラーとなることがあります。

- 出力がXMLファイルの場合、"追加書き"は指定できません。

- XMLファイルの要素内容が空白文字（0x0A、0x0D、0x09、0x20）のみで構成されている場合、その要素内容はNULLであるとみなされます。

- XMLファイルの要素内容を数値データとして定義しているとき、そこに数字文字列以外、または数値に変換できる文字列以外を入出力しようとした場合、変換エラーとなります。

- 出力側のXML情報がXML Schemaで、データ加工情報の出力設定で「XMLスキーマインスタンス属性」が"出力する"に設定されている場合、対象名前空間が指定されていると、出力側XMLにはデフォルト名前空間として対象名前空間URIが出力されます。なお、出力設定の「スキーマ位置」が設定されている場合のみ、XMLスキーマインスタンス属性（schemaLocationもしくはnoNamespaceSchemaLocation属性）を出力します。

- 入力XMLファイルの文字コードが、UTF-8またはUTF-16の場合は外字に対応していますが、その他の文字コードの外字には対応しておりません。UTF-8またはUTF-16以外の入力XMLファイルに外字がある場合、変換エラーとなります。

- XML出力で「XMLレコード単位」が"2"または"3"の場合、指定された繰り返す階層よりも上位階層に定義されている属性は、マッピングされていても出力されません。上位階層への属性出力を行う場合は「XMLレコード単位」="任意"の設定を使用してください。

- 入出力ともにXMLで親同士のマッピングをした場合、子の項目情報（「文字データ後スペースの扱い」、「数値データの前ゼロの扱い」）の設定はできません。出力ファイルの設定が有効になります。また、この際ユーザ出口プログラムの設定は行えません。

- 入力XMLファイルと入力側スキーマファイルの妥当性検証は行いません。

- 出力されるXMLファイルが出力側スキーマファイルに対して妥当であることを保証するものではありません。

- 出力されるXMLファイルが整形式あることを保証するものではありません。例としては要素名の先頭が数字であるXMLファイルなども、そのまま出力されます。

- 外部DTDのみに許可される記述を持った外部サブセットのDTDファイルをXML情報としてインポートし、それを内部サブセットとしてXMLファイルへ取り込んで出力できます。この場合、出力されるXMLファイルへそのまま出力されますので、整形式でなくなります。

- 入力がXMLファイルであるとき、数値演算式に"$INUM"は使用できません。

- 入力がXMLファイルであるとき、ユーザ出口プログラム内で項目番号指定のAPIを使用すると、エラーになります。

- 入力XMLファイルのテキスト部分に通常のテキストとCDATAセクションが混在している場合、最初に出現した値が採用されます。それ以降の値は無視されます。以下の図の例では、child要素の値として「aaa」が採用されます。

  図4.90 テキストとCDATAセクションの混在

- 入力XMLファイルに関連付けられるXML情報は1つのみです。よって、複数のスキーマファイルを参照するような入力XMLファイルには対応しておりません。

- 入力XMLファイルで「XMLレコード単位」を"1"または"要素"に設定した場合、使用メモリ容量は入力ファイルのサイズに依存します。

- XML出力で「XMLレコード単位」を"任意"に設定した場合、使用メモリ容量は入力ファイルのサイズに依存します。

- 入力XMLファイルでサポートするXMLヘッダ内のencoding属性は「Shift_JIS」、「EUC-JP」、「UTF-8」、「UTF-16」のみです。

- データ型のファセットを含むXMLスキーマからレイアウト情報を作成した場合、ファセットの設定内容は取り込まれません。

- XML情報で同階層に同要素名が存在する時、正常に変換ができない場合があります。

  ＜発生条件＞

    XMLで同階層に同要素名が存在する

    同階層の同要素名の2つ目以降のマッピングを実施する

  ＜動作＞
    入力側に指定の場合：

      (1) 変換実行は成功しますが、同階層の2つ目以降の同要素名のデータが出力されません。

    出力側に指定の場合：

      (1) 変換実行は成功しますが、同階層の2つ目以降の同要素名のデータが出力されません。

      (2) マッピングエラーが発生する場合があります。

- スキーマファイルの最初の要素は、elementを指定してください。

- 内容モデルの「maxOccurs」および「minOccurs」の値は変換実行時は無視します。出現した項目数分、変換処理を行います。また、マッピング情報設定画面のツリー表示においてもこの値を無視するため、繰り返し項目の描画数が指定した値と異なる場合があります。

- 出力側のXML情報に、DTDをインポートして作成したXML情報IDを指定している場合、プレフィックスを付加することはできません。

- XMLスキーマにおいて、要素の出現回数を表す「maxOccurs」の設定により、変換結果が異なる場合があります。

  要素の「maxOccurs」の設定が2以上に設定されている場合、要素の繰り返しの指定が「レコード単位」の設定より優先して処理されます。

- 出力側にXML情報を指定して、「レコード単位」に"任意"を設定しているマッピング画面で、繰り返しの基点を以下のいずれかで設定している場合、XMLデータとして正しく出力されないことがあります。

  - 繰り返しの基点に指定した要素およびその子孫要素に1つもマッピングがされていない場合

  - 複数の条件が設定されており、繰り返しの基点とする要素が条件順にXML 親階層から順番に設定されていない場合

- XMLスキーマの属性に、名前空間は指定できません。

- 入力XMLファイルは、2GB以下のものをご利用ください。このサイズを超えるデータを処理しようとすると、入力エラーが発生する場合があります。

- 下記条件をすべて満たすと、出力結果が不正になる場合があります。その場合はデータ加工情報を複数に分割し、下記条件のいずれかを満たさないようにしてデータ加工を実行してください。

  - 入力ファイルの形式がXML

  - 抽出条件を複数指定

  - マッピングにおいて、抽出条件が属するモデルとは異なるモデルの要素、もしくはその配下の要素を出力項目に指定

  以下に、出力結果が不正となる設定例を示します。

  画面4.51 抽出キー設定で、複数の抽出条件（要素a、要素d）を指定する例

  画面4.52 抽出条件1（要素a）のマッピング情報設定において、出力項目に抽出条件2（要素d）が属する
  モデルの要素（c,d）およびその配下の要素（e,f）を含めて指定する例

  画面4.53 抽出条件2（要素d）のマッピング情報設定において、出力項目に抽出条件1（要素a）が属する
  モデルの要素（a,b）を含めて指定する例