COBOL2002　XML連携機能ガイド

手引・操作書

3021-3-608-50

前書き

対象製品

P-1M36-1141 COBOL2002 Net Server Suite 04-70（適用OS：AIX V7.1，AIX V7.2，AIX 7.3）

P-1M36-2141 COBOL2002 Net Server Runtime 04-70（適用OS：AIX V7.1，AIX V7.2，AIX 7.3）

P-1M36-1241 COBOL2002 Net Server Suite(64) 04-70（適用OS：AIX V7.1，AIX V7.2，AIX 7.3）

P-1M36-2241 COBOL2002 Net Server Runtime(64) 04-70（適用OS：AIX V7.1，AIX V7.2，AIX 7.3）

P-2636-2344 COBOL2002 Net Developer 04-70（適用OS：Windows 7，Windows 8.1，Windows 10，Windows 11，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

P-2436-5344 COBOL2002 Net Server Runtime 04-70（適用OS：Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

P-2636-3344 COBOL2002 Net Client Runtime 04-70（適用OS：Windows 7，Windows 8.1，Windows 10，Windows 11）

P-2436-6344 COBOL2002 Net Server Suite 04-70（適用OS：Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

P-2636-4344 COBOL2002 Net Client Suite 04-70（適用OS：Windows 7，Windows 8.1，Windows 10，Windows 11）

P-2936-2344 COBOL2002 Net Developer(64) 04-70（適用OS：Windows 7(x64)，Windows 8.1(x64)，Windows 10(x64)，Windows 11，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

P-2936-5344 COBOL2002 Net Server Runtime(64) 04-70（適用OS：Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

P-2936-6344 COBOL2002 Net Server Suite(64) 04-70（適用OS：Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

P-9W36-1241 COBOL2002 Net Server Suite(64) 04-70（適用OS：Linux Server 7 (64-bit x86_64)，Linux Server 8 (64-bit x86_64)，Linux Server 9 (64-bit x86_64)）

P-9W36-2241 COBOL2002 Net Server Runtime(64) 04-70（適用OS：Linux Server 7 (64-bit x86_64)，Linux Server 8 (64-bit x86_64)，Linux Server 9 (64-bit x86_64)）

P-2636-7344 COBOL2002 Developer Professional 04-70（適用OS：Windows 7，Windows 8.1，Windows 10，Windows 11，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

P-2936-7344 COBOL2002 Developer Professional(64) 04-70（適用OS：Windows 7(x64)，Windows 8.1(x64)，Windows 10(x64)，Windows 11，Windows Server 2008 R2，Windows Server 2012，Windows Server 2012 R2，Windows Server 2016，Windows Server 2019，Windows Server 2022）

これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。

輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。

なお、不明な場合は、弊社担当営業にお問い合わせください。

商標類

HITACHI，Cosminexusは，株式会社 日立製作所の商標または登録商標です。

AMDは，Advanced Micro Devices, Inc.の商標です。

IBMおよびAIXは，世界の多くの国で登録された International Business Machines Corporation の商標です。

Intelは，Intel Corporation またはその子会社の商標です。

Linuxは，Linus Torvalds氏の米国およびその他の国における登録商標です。

Microsoft，Windows，Windows Serverは，マイクロソフト 企業グループの商標です。

Oracle(R)，Java，MySQL及びNetSuiteは，Oracle，その子会社及び関連会社の米国及びその他の国における登録商標です。

Red Hat, and Red Hat Enterprise Linux are registered trademarks of Red Hat, Inc. in the United States and other countries. Linux(R) is the registered trademark of Linus Torvalds in the U.S. and other countries.

Red Hat，およびRed Hat Enterprise Linuxは，米国およびその他の国におけるRed Hat, Inc.の登録商標です。Linux(R)は，米国およびその他の国におけるLinus Torvalds氏の登録商標です。

UNIXは，The Open Groupの登録商標です。

その他記載の会社名，製品名などは，それぞれの会社の商標もしくは登録商標です。

発行

2024年4月　3021-3-608-50

著作権

All Rights Reserved. Copyright (C) 2017, 2024, Hitachi, Ltd.

変更内容

変更内容（3021-3-608-50）　COBOL2002 Net Server Suite 04-70，COBOL2002 Net Server Runtime 04-70，COBOL2002 Net Server Suite(64) 04-70，COBOL2002Net Server Runtime(64) 04-70

追加・変更内容

変更個所

次の製品の適用OSに「AIX 7.3」を追加した。

P-1M36-1141 COBOL2002 Net Server Suite

P-1M36-2141 COBOL2002 Net Server Runtime

P-1M36-1241 COBOL2002 Net Server Suite(64)

P-1M36-2241 COBOL2002 Net Server Runtime(64)

−

UNIX COBOL2002で，XML連携機能が生成するCOBOL原始プログラムをコンパイルする場合の制限事項に，次のコンパイラオプションを追加した。

-VOSCBL,AssignDataToDevice

-VOSCBL,EvaluateWhenOther

6.1.1

単なる誤字・脱字などはお断りなく訂正しました。

はじめに

このマニュアルは，次に示すプログラムプロダクトのXML連携機能について説明したものです。

P-1M36-1141 COBOL2002 Net Server Suite

P-1M36-2141 COBOL2002 Net Server Runtime

P-1M36-1241 COBOL2002 Net Server Suite(64)

P-1M36-2241 COBOL2002 Net Server Runtime(64)

P-2636-2344 COBOL2002 Net Developer

P-2436-5344 COBOL2002 Net Server Runtime

P-2636-3344 COBOL2002 Net Client Runtime

P-2436-6344 COBOL2002 Net Server Suite

P-2636-4344 COBOL2002 Net Client Suite

P-2936-2344 COBOL2002 Net Developer(64)

P-2936-5344 COBOL2002 Net Server Runtime(64)

P-2936-6344 COBOL2002 Net Server Suite(64)

P-9W36-1241 COBOL2002 Net Server Suite(64)

P-9W36-2241 COBOL2002 Net Server Runtime(64)

P-2636-7344 COBOL2002 Developer Professional

P-2936-7344 COBOL2002 Developer Professional(64)

対象読者

COBOL2002のXML連携機能を使って，XMLドキュメントを操作するCOBOLプログラムを作成したい方を対象としています。また，COBOL2002とXMLの知識があり，UNIXまたはWindowsの基本操作について理解していることを前提としています。

このマニュアルで使用する記号

このマニュアルで使用する記号を次に示します。

記号

意味

｛　｝

この記号で囲まれている複数の項目のうちから一つを選択することを意味する。項目が縦に複数行にわたって記述されている場合は，そのうちの1行分を選択する。

〔　〕

この記号で囲まれている項目は省略してもよいことを意味する。

複数の項目が縦または横に並べて記述されている場合には，すべてを省略するか，記号｛　｝と同じく，どれか一つを選択する。

…

記述が省略されていることを意味する。

この記号の直前に示された項目を繰り返して複数個指定できる。

（下線）

括弧で囲まれた複数の項目のうち1項目に対して使用され，括弧内のすべてを省略したときにシステムがとる標準値を意味する。

｜

横に並べられた複数の項目に対して項目間の区切りを示し，「または」を意味する。

（斜体文字）

ユーザが値を指定することを意味する。

［　］

ウィンドウのメニューバーから選択するメニュー，またはコマンドを意味する。

1　XML連携機能の概要

この章では，XML連携機能の概要，およびXML連携機能を使ったアプリケーション開発の流れについて説明します。

1.1　XML連携機能とは

1.1.1　XMLとは

XML（eXtensible Markup Language）は，World Wide Web Consortium（W3C）によって標準化されている，文章の構造を定義するための言語です。

XMLでは，ユーザがタグと呼ばれる文字列をドキュメントに埋め込んで，データの意味づけをします。このとき，独自のタグをドキュメントに埋め込んで意味づけし，さらに，タグ同士を入れ子にして論理的な階層構造を持つドキュメントを記述できます。

また，XMLドキュメントは，テキスト形式のデータとして作成するのでプラットフォームに依存しません。このため，インターネットを利用した企業間のデータ交換フォーマットなどに利用されています。

図1‒1　XMLの特長

XMLドキュメントは，要素と呼ばれるタグ付きデータの集合から構成されています。おのおのの要素は，要素を意味づけるタグ，要素の内容であるデータ，および要素を修飾する属性から構成されています。

1.1.2　XML連携機能

XML連携機能は，XMLドキュメントにアクセスするCOBOLプログラム（以降，XML対応COBOLプログラムと呼びます）を作成するために使用します。

XML連携機能を使うと，COBOLのデータ項目とXMLドキュメント中のXML要素を対応づけられます。COBOLプログラムでは，XML要素に対応づけられたCOBOLのデータ項目（XMLアクセス用データ定義）を操作することで，XML要素の値を読み込んだり，XML要素に値を書き出したりできます。また，実際のXMLドキュメントへアクセスするには，XML連携機能が生成する副プログラム（XMLアクセスルーチン）を呼び出します。XMLアクセスルーチンは，XML連携機能の実行時ライブラリを使って，XMLドキュメントへアクセスします。

図1-2に，XML連携機能およびXML連携機能の実行時ライブラリの提供する機能について示します。

図1‒2　XML連携機能およびXML連携実行時ライブラリの機能

1.1.3　処理できるXMLドキュメント

COBOL2002　XML連携機能では，W3Cで勧告されたXML 1.0に従ったXMLドキュメントを処理できます。

ただし，XML連携機能でXMLドキュメントを出力する場合，XMLドキュメント内に文書の型宣言（DOCTYPE宣言）を出力しません。

1.2　XML連携機能を使ったプログラム開発の概要

ここでは，XML連携機能を使ってXML対応COBOLプログラムを作成する流れを説明します。

XML対応COBOLプログラムの作成手順を，図1-3に示します。

図1‒3　XML対応COBOLプログラムの作成手順

XML要素とCOBOLデータ項目を対応づける

COBOLプログラムからアクセスしたいXML要素を，データ定義ファイル（Data Definition File）を使ってCOBOLのデータ項目と対応づけます。この手順の詳細については，「2.　XML要素とCOBOLデータ項目の対応づけ」を参照してください。

また，入出力データ情報定義機能を使用すると，XMLデータに入出力する値の型，データ長などを詳細に定義できます。入出力データ情報定義機能の詳細については，「3.　入出力データ情報定義機能」を参照してください。

XMLアクセスルーチンとXMLアクセス用データ定義を生成する

cblxmlコマンドを使って，XMLドキュメントの文書型定義（DTD）とData Definition File（DDF）からXMLアクセスルーチンとXMLアクセス用データ定義を生成します。この手順の詳細については，「4.　XMLアクセスルーチンとXMLアクセス用データ定義の生成」を参照してください。

XMLアクセスルーチンを使用したCOBOLプログラムを作成する

XMLアクセスルーチンを呼び出してXMLドキュメントにアクセスするユーザプログラムをコーディングします。この手順の詳細については，「5.　XMLアクセスルーチンを使用したCOBOLプログラムの作成」を参照してください。

コンパイル，リンケージをする

ユーザプログラム，XMLアクセスルーチン，XMLアクセス用データ定義のコンパイル，リンケージをして，実行可能ファイルを作成します。この手順の詳細については，「6.　コンパイルとリンケージ」を参照してください。

プログラムを実行する

完成した実行可能ファイルを実行します。この手順の詳細については，「7.　実行」を参照してください。

Windowsの場合，COBOL2002の開発マネージャからXMLアクセスルーチンとXMLアクセス用データ定義の生成，およびXML対応COBOLプログラムのコンパイル，リンケージができます。詳細については，「8.　開発マネージャ連携（Windowsの場合）」を参照してください。

2　XML要素とCOBOLデータ項目の対応づけ

XML連携機能では，XMLドキュメントの文書型定義（DTD）中の要素をCOBOLデータ項目に対応づけることで，COBOLプログラムからXMLドキュメントにアクセスできるようにします。

この章では，DTDの概要，DTDから必要な要素を抽出してCOBOLデータ項目を生成するためのデータ定義ファイル（DDF）の概要，およびDDFに記述するデータ定義言語（DDL）の文法について説明します。

2.1　文書型定義（DTD）の概要

XMLでは，それぞれのドキュメントに対して文書型定義（DTD）と呼ばれるドキュメントの構造定義を宣言できます。DTDを使うと，XMLドキュメントの構造の解析，検証などができます。

2.1.1　DTDの有無とXMLドキュメントの種類

XMLドキュメントは，対応するDTDが定義されているかどうかによって，次の2種類に分類されます。

正しい形式のXMLドキュメント（well-formed XML document）

XMLとしてのドキュメント形式（要素の親子関係，タグの記述など）が正しいXMLドキュメントを指します。DTDの有無は問いません。

妥当なXMLドキュメント（valid XML document）

正しい形式のXMLドキュメントであり，かつDTDが定義されているXMLドキュメントを指します。

XML連携機能では，COBOLプログラムからアクセスしたいXMLドキュメントの構造を参照するためにDTDを利用します。アクセス対象となるXMLドキュメントは，DTDに対して妥当なXMLドキュメントである必要があります。

アクセス対象となるXMLドキュメントは，XMLドキュメントが正しい形式であるための制約（well-formedness constraint）を満たすために必要な場合を除き，DTDを含んでいてもいなくてもかまいません。ただし，入力XMLドキュメントの妥当性をチェックする場合は，アクセス対象となるXMLドキュメントにDTDがなければなりません。入力XMLドキュメントの妥当性チェック機能については，「7.2.8　入力XMLドキュメントの妥当性チェック機能」を参照してください。

2.1.2　XML連携機能で扱えるDTDの形式

XML連携機能では，XML Version 1.0の規格に従ったDTDを扱えます。ただし，次の点に注意する必要があります。

(1)　XML宣言

XML宣言では，DTDファイルの文字エンコーディングを指定できます。使用できる文字エンコーディングについては，「付録G.1　XMLドキュメントの文字エンコーディング」を参照してください。

使用できる文字エンコーディング以外を指定した場合

動作は保証しません。

文字エンコーディングを省略した場合

"UTF-8"が仮定されます。

XML宣言の例

<?xml version="1.0" encoding="Shift_JIS"?>

(2)　文書の型宣言（DOCTYPE宣言）

文書の型宣言（DOCTYPE宣言）は，内部サブセット，外部サブセットのどちらでも定義できます。

内部サブセット

内部サブセットは，DOCTYPE宣言の記述されているXMLドキュメント中に，型宣言の実体を記述する形式です。

内部サブセットを使ったDOCTYPE宣言の例

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (book)>
  <!ELEMENT book  (#PCDATA)>
]>
<table/>

外部サブセット

外部サブセットは，外部DTDファイルに型宣言の実体を記述し，XMLドキュメントのDOCTYPE宣言には外部DTDファイルへの参照指示を記述する形式です。

外部DTDファイルは，外部識別子で指定します。外部識別子については，「付録E.3　外部識別子の解釈」を参照してください。

外部サブセットを使ったDOCTYPE宣言の例

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table SYSTEM "book-content.xml">
<table/>

外部DTDファイル（book-content.xml）の指定例

<!ELEMENT table (book)>
<!ELEMENT book  (#PCDATA)>

内部サブセットと外部サブセットが同時に指定されている場合，両方の定義が有効となります。ただし，要素が重複して定義されている場合は，内部サブセットの定義が有効となります。

(3)　要素宣言

要素宣言の内容モデルでは，#PCDATAとEMPTYだけを使用できます。

要素宣言の例

<!ELEMENT table (book)+>
<!ELEMENT book  (#PCDATA)>

(4)　属性リスト宣言

属性リスト宣言に指定する属性の型（CDATA，ID，IDREF，IDREFS，NMTOKEN，NMTOKENS，列挙）以外は使用できません。

(5)　実体宣言

実体宣言は，XMLドキュメントで実体を置換します。外部実体となる場合，テキスト宣言でエンコーディングを指定します。テキスト宣言がない場合はエンコーディングにUTF-8が仮定されます。テキスト宣言については，「(7) テキスト宣言」を参照してください。

一般実体

パースされるテキストを置換します。

一般実体「ITEM1」を定義します。

例

<!ENTITY ITEM1 "The item 01.">

外部一般実体

外部にあるテキストを含んだ実体です。

公開識別子でデータを指定する例

実体「abc」を定義します。

<!ENTITY abc PUBLIC "-//HITACHI//DTD test 1.0//EN" "/home/groupX/manual.dtd">

データを特定の位置として指定する例

実体「def」を定義します。

<!ENTITY def SYSTEM "/home/groupX/manual.dtd">

パラメタ実体

パラメタ実体はDTD内のテキストを置換します。

実体「para1」を定義します。

例

<!ENTITY % para1 "(item01A | item01B )">

外部パラメタ実体

外部パラメタ実体は，DTDを含む実体や，外部にあるDTDの一部を含む実体を示します。

公開識別子でデータを指定する例

実体「paragroup1」を定義します。

<!ENTITY % paragroup1 PUBLIC "-//HITACHI//DTD test 1.0//EN" "/home/groupX/table1.dtd">

データを特定の位置として指定する例

実体「paragroup2」を定義します。

<!ENTITY % paragroup2 SYSTEM "/home/groupX/table2.dtd">

(6)　公開識別子

外部DTDや外部実体を識別するための文字列です。XML連携機能では，公開識別子と，外部DTDや外部実体を含むファイルの対応を，カタログファイルで定義することで，公開識別子を用いて外部DTDや外部実体を参照するXMLドキュメントを処理できます。

公開識別子の解釈については，「付録E.3　外部識別子の解釈」を参照してください。

外部DTDの例

<!DOCTYPE root PUBLIC "-//HITACHI//DTD test 1.0a//EN" "/home/project1/myDTD.xml">

(7)　テキスト宣言

テキスト宣言では，外部解析対象実体の文字エンコーディングを指定できます。

例

<?xml version="1.0" encoding="Shift_JIS"?>

(8)　コメント

形式

<!-- コメント -->

機能

コメントは"<!--"で始まり，"-->"で終わる間に記述します。

規則

コメントはXMLドキュメントに出力されません。

DTDファイルのコメントの例

<?xml version="1.0" encoding="Shift_JIS"?>
<!-- コメント -->
<!DOCTYPE table [
  <!ELEMENT table (book)>
  <!ELEMENT book  (#PCDATA)>
]>
<table/>

(9)　その他の注意事項

DTDファイルは，それ自身が完結したXMLドキュメントである必要があります。そのため，DTDファイルにXML要素が記述されていない場合は，内容が空のルート要素をファイルの末尾に付ける必要があります。

XMLドキュメントとして完結したDTDファイルの例

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (book)>
  <!ELEMENT book  (#PCDATA)>
]>
<table/>

2.2　データ定義ファイル（DDF）の作成

XMLドキュメントの要素は，データを常に文字列として持っているため，DTDだけではそれぞれの要素がどの種類のCOBOLデータ項目に対応するかわかりません。そのため，XML要素とCOBOLデータ項目とを結び付ける対応情報を定義する必要があります。

データ定義ファイル（DDF）は，XMLドキュメントのDTDで定義されたXML要素のうち，COBOLプログラムからアクセスしたい要素とCOBOLデータ項目との対応づけを記述するファイルです。

DDFでは，データ定義言語（DDL）を使ってXML要素とCOBOLデータ項目とを対応づけます。DDLの記述方法については，「2.3　データ定義言語（DDL）の文法」を参照してください。

DDFの形式

<?xml version="1.0" encoding="Shift_JIS"?>

データ定義言語（DDL）

例

DTD中の要素「row」の要素「address」に含まれる要素「name」および「age」をCOBOLデータ項目に対応づけるDDFを次に示します。

（DTDの例）

<!DOCTYPE table [
  <!ELEMENT table (row)*>
  <!ELEMENT row (name, address, grade, age)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT address (addr1, addr2, city, state, zip)>
  <!ELEMENT addr1 (#PCDATA)>
  <!ELEMENT addr2 (#PCDATA)>
  <!ELEMENT city (#PCDATA)>
  <!ELEMENT state (#PCDATA)>
  <!ELEMENT zip (#PCDATA)>
  <!ELEMENT grade (#PCDATA)>
  <!ELEMENT age (#PCDATA)>
]>
<table/>

（DDFの例）

<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="row">
    <Group cobName="row">
      <Item elemName="name" cobName="full-name"
            type="alphanumeric" size="20"/>
      <Item elemName="age" type="numeric"
            size="3"/>
      <Item elemName="city" type="alphanumeric"
            size="30"/>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目の例）

01 row.
  02 full-name PIC X(20).
  02 age  PIC 9(3).
  02 city PIC X(30).

2.3　データ定義言語（DDL）の文法

ここでは，データ定義ファイル（DDF）に記載するデータ定義言語（DDL）の文法について説明します。

DDLの形式

DDLは，XMLの文法規則に従って記述します。DDLの記述例を次に示します。

（DDLの記述例）

<Interface interfaceName="EXAMPLE">
 <BaseElement elemName=" ・・・
    ：
 </BaseElement>
</Interface>

DDLで使用する要素

DDLで使用する要素を，表2-1に示します。

表2‒1　DDLで使用する要素

要素名

機能

Interface

COBOLプログラムとXMLとを対応づけるインタフェースを宣言する。

BaseElement

アクセス対象とするXML要素を指定する。

Group

XML要素をCOBOL集団項目に対応づける。

Item

XML要素をCOBOLデータ項目に対応づける。

Array

XMLの繰り返し要素を，OCCURS句付きのCOBOLデータ項目に対応づける。

AttrItem

XML要素の属性をCOBOLデータ項目に対応づける。

2.3.1　Interface要素（インタフェースの定義）

Interface要素は，COBOLプログラムとXMLとを対応づけるインタフェースを宣言する要素です。Interface要素を定義すると，XMLドキュメントにアクセスするためのCOBOL副プログラム（XMLアクセスルーチン）や登録集原文（XMLアクセス用データ定義）などのインタフェースが対応して生成されます。

Interface要素は，ドキュメントのルート（最上位の要素）としてDDL中に1回だけ記述できます。また，子要素として一つ以上のBaseElement要素を持つ必要があります。

形式

<Interface interfaceName="インタフェース名"〔accessInfo="yes|no"〕>

BaseElement要素 …

</Interface>

(1)　interfaceName属性

形式

interfaceName="インタフェース名"

機能

Interface要素に対応するインタフェース名を指定します。インタフェース名は，Interface要素に対応して生成されるXMLアクセスルーチンのプログラム名の一部に使用されます。XMLアクセスルーチンの名称については，「4.2.1　XMLアクセスルーチンの名称形式」を参照してください。

規則

インタフェース名称は，COBOLプログラム名に指定できる次の文字で構成する必要があります。

英文字（A〜Z，a〜z），数字（0〜9），ハイフン（-），下線（_），#，¥，@，日本語文字

インタフェース名は，ほかのインタフェース名と重複しない一意な名称を指定する必要があります。

インタフェース名と，BaseElement要素のcobName属性（省略時はelemName属性）に指定した名称の長さの合計は，19バイト以下の文字列で指定する必要があります。19バイトを超える名称を指定した場合，動作は保証しません。

指定例

インタフェース「EXAMPLE」を宣言します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (person)*>
  <!ELEMENT person (name, address)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT address (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="person">
  <Group elemName="person">
   <Item elemName="name" cobName="FULLNAME"
         type="alphanumeric" size="30"/>
   <Item elemName="address" cobName="FULLADDRESS"
         type="alphanumeric" size="120"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目の例）

01 person.
 02 FULLNAME PIC X(30).
 02 FULLADDRESS PIC X(120).

（XMLアクセスルーチンの呼び出し例）

  :
CALL 'CBLXML-OP-EXAMPLE'
    USING XML-FILE-NAME-POINTER XML-FILE-LENGTH
          XML-FILE-MODE XML-POINTER
    RETURNING CBLXML-RETURN-CODE.
  :

(2)　accessInfo属性

形式

accessInfo="yes|no"

機能

Interface要素の下位の要素で入出力データ情報定義機能を使用するかどうか指定します。入出力データ情報定義機能については，「3.　入出力データ情報定義機能」を参照してください。

規則

accessInfo属性の指定を省略した場合は，"no"が仮定されます。

Interface要素とBaseElement要素の両方にaccessInfo属性を指定した場合，BaseElement要素のaccessInfo属性値が優先されます。

accessInfo属性に"yes""no"以外の値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性とemptyValue属性を同時に指定した場合，accessInfo属性の指定が優先されます。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01, item02)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT item02  (itema, itemb)*>
  <!ELEMENT itema   (#PCDATA)>
  <!ELEMENT itemb   (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE"
   accessInfo="yes">
  <BaseElement elemName="root">
    <Group cobName="root">
      <Item elemName="item01" type="alphanumeric"
            size="10" />
      <Array max="10">
        <Group cobName="item02">
          <Item elemName="itema"
                type="alphanumeric" size="10" />
          <Item elemName="itemb"
                type="alphanumeric" size="10" />
        </Group>
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.
  02 root.
   03 item01 PIC X(10).
   03 item02 OCCURS 10.
    04 itema PIC X(10).
    04 itemb PIC X(10).
* Access Information
  02 root-GROUP.
   03 item01-FLG PIC 1(32) USAGE BIT.
   03 item01-LEN PIC 9(9) COMP.
   03 item02-TOTAL PIC 9(9) COMP.
   03 item02-COUNT PIC 9(9) COMP.
   03 item02-GROUP OCCURS 10.
    04 itema-FLG PIC 1(32) USAGE BIT.
    04 itema-LEN PIC 9(9) COMP.
    04 itemb-FLG PIC 1(32) USAGE BIT.
    04 itemb-LEN PIC 9(9) COMP.

2.3.2　BaseElement要素（アクセスする要素の定義）

BaseElement要素は，COBOLプログラムから読み出し，および書き込みをするXML要素を指定する要素です。BaseElement要素によってCOBOLデータ項目と対応づけられたXML要素は，COBOLプログラムからXMLアクセスルーチンを使ってデータにアクセスできます。XMLアクセスルーチンの詳細については，「4.2　生成されるXMLアクセスルーチン」を参照してください。

BaseElement要素は，子要素としてGroup要素，Item要素，またはAttrItem要素のどれか一つを持ちます。

形式

<BaseElement elemName="XML要素の名称"

〔cobName="XMLアクセスルーチンの名称"〕

〔accessInfo="yes|no"〕

〔nameOfBaseVar="XMLアクセス用データ定義の名称"〕>

｛Group要素｜Item要素｜AttrItem要素｝

</BaseElement>

規則

DTD中の複数の要素をBaseElement要素と対応づけた場合，対応するアクセスルーチンの呼び出し順序は，次のとおりでなくてはなりません。

（XMLドキュメントの入力および更新の場合）

BaseElement要素と対応づけた要素が実際のXMLドキュメント中に出現する順に，対応するアクセスルーチンを使用して入力（更新）してください。

（XMLドキュメントの出力の場合）

DTDで定義された順序に従った妥当なXMLドキュメントとなるように，対応するアクセスルーチンを使用して出力してください。

(1)　elemName属性

形式

elemName="XMLの要素名"

機能

BaseElement要素に対応づけるXMLの要素名を指定します。XMLの要素名は，BaseElement要素に対応して生成されるXMLアクセスルーチンのプログラム名の一部に使用されます。XMLアクセスルーチンの名称については，「4.2.1　XMLアクセスルーチンの名称形式」を参照してください。

規則

XMLの要素名称は，XMLで規定された文字で構成する必要があります。

XMLの要素名称とインタフェース名称の長さの和が19バイトを超える場合は，cobName属性を使って19バイト以下の名称を指定する必要があります。cobName属性を指定しないと，COBOL原始プログラムの生成時にエラーとなります。

(2)　cobName属性

形式

cobName="XMLアクセスルーチンの名称"

機能

elemName属性の値の代わりにXMLアクセスルーチンのCOBOLプログラム名に使用する名称を指定します。elemName属性に指定するXML要素の名称が，COBOLプログラム名に使用できない場合などに指定します。XMLアクセスルーチンの名称については，「4.2.1　XMLアクセスルーチンの名称形式」を参照してください。

規則

cobName属性に指定する名称は，COBOLのプログラム名として使用できる名称である必要があります。COBOLのプログラム名として使用できない名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

cobName属性の名称は，19バイト以下の文字列で指定する必要があります。19バイトを超える名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

(3)　accessInfo属性

形式

accessInfo="yes|no"

機能

BaseElement要素の下位の要素で入出力データ情報定義機能を使用するかどうかを指定します。入出力データ情報定義機能については，「3.　入出力データ情報定義機能」を参照してください。

規則

accessInfo属性の指定を省略した場合は，Interface要素のaccessInfo属性値が仮定されます。

Interface要素とBaseElement要素の両方にaccessInfo属性を指定した場合，BaseElement要素のaccessInfo属性値が優先されます。

accessInfo属性に"yes""no"以外の値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性とemptyValue属性を同時に指定した場合，accessInfo属性の指定が優先されます。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (group01, group02)>
  <!ELEMENT group01 (item01)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT group02 (item02)>
  <!ELEMENT item02  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="group01"
      accessInfo="yes">
    <Group elemName="group01">
      <Item elemName="item01" type="alphanumeric"
            size="10" />
    </Group>
  </BaseElement>
  <BaseElement elemName="group02"
      accessInfo="no">
    <Group elemName="group02">
      <Item elemName="item02" type="alphanumeric"
            size="10" />
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 group01-BASE.
  02 group01.
   03 item01 PIC X(10).
* Access Information
  02 group01-FLG PIC 1(32) USAGE BIT.
  02 group01-GROUP.
   03 item01-FLG PIC 1(32) USAGE BIT.
    03 item01-LEN PIC 9(9) USAGE COMP.
 01 group02.
  02 item02 PIC X(10).

(4)　nameOfBaseVar属性

形式

nameOfBaseVar="XMLアクセス用データ定義の名称"

機能

入出力データ情報定義機能を使用した場合のXMLアクセス用データ定義の名称を指定します。入出力データ情報定義機能については，「3.　入出力データ情報定義機能」を参照してください。

規則

nameOfBaseVar属性の指定を省略した場合は，cobName属性（省略時はelemName属性）の名称に"-BASE"を追加した名称がXMLアクセス用データ定義に生成されます。

BaseElement要素のcobName属性またはelemName属性の名称は，25文字以下で指定する必要があります。25文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfBaseVar属性に指定する名称は，30文字以下で指定する必要があります。30文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfBaseVar属性には，COBOLデータ項目名として使用できる名称を指定する必要があります。COBOLデータ項目名に使用できない文字を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性の指定を省略した場合，またはaccessInfo属性に"no"を指定した場合，nameOfBaseVar属性の指定は無効となります。

accessInfo属性の指定例については，「3.3.1(2)　指定例」を参照してください。

nameOfBaseVar属性には，次に示す属性とは異なる名称を指定する必要があります。同じ名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

　nameOfBaseVar属性と異なる名称を指定する属性

BaseElement要素のcobName属性※，nameOfBaseVar属性

Group要素のcobName属性※，nameOfGroupVar属性

Item要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

Array要素のnameOfCountVar属性，nameOfTotalVar属性

AttrItem要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

注※

cobName属性の指定を省略した場合は，elemName属性になります。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01, item02)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT item02  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" accessInfo="yes"
       nameOfBaseVar="BASE">
    <Group elemName="root">
      <Item elemName="item01" type="alphanumeric"
            size="10" />
      <Item elemName="item02" type="alphanumeric"
            size="10" />
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 BASE.
  02 root.
   03 item01 PIC X(10).
   03 item02 PIC X(10).
* Access Information
  02 root-FLG PIC 1(32) USAGE BIT.
  02 root-GROUP.
   03 item01-FLG PIC 1(32) USAGE BIT.
   03 item01-LEN PIC 9(9) USAGE COMP.
   03 item02-FLG PIC 1(32) USAGE BIT.
   03 item02-LEN PIC 9(9) USAGE COMP.

(5)　BaseElement要素の使い方

(a)　繰り返し要素をBaseElement要素に指定する

繰り返しのあるXML要素を，BaseElement要素に指定できます。

例えば，次のDTDのドキュメント構造を持つXMLドキュメントで，繰り返し要素「row」をBaseElement要素に指定できます。この場合，XML要素を読み込むアクセスルーチンを実行するたびに，要素「row」のデータが順番に読み込まれます。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (row)*>
  <!ELEMENT row (name, address, age)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT address (addr1, addr2)>
  <!ELEMENT addr1 (#PCDATA)>
  <!ELEMENT addr2 (#PCDATA)>
  <!ELEMENT age (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="row">
  <Group cobName="row">
   <Item elemName="name" cobName="FULLNAME"
         type="alphanumeric" size="30"/>
   <Item elemName="addr1" type="alphanumeric"
         size="40"/>
   <Item elemName="addr2" type="alphanumeric"
         size="40"/>
   <Item elemName="age" type="alphanumeric"
         size="3"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目の例）

01 row.
 02 FULLNAME PIC X(30).
 02 addr1 PIC X(40).
 02 addr2 PIC X(40).
 02 age PIC X(3).

（XMLアクセスルーチンの呼び出し例）

  :
CALL 'CBLXML-RD-EXAMPLE-row'
    USING XML-POINTER row
    RETURNING CBLXML-RETURN-CODE.
  :

（XMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<table>
  <row>
    <name>Mr. X</name>
    <address>
      <addr1>Kanagawa ken</addr1>
      <addr2>Yokohama shi</addr2>
    </address>
    <age>22</age>
  </row>
</table>

(b)　入れ子になっている繰り返し要素をBaseElement要素に指定する

繰り返し要素の親要素が，さらに繰り返し要素になっている場合でもアクセスできます。この場合，アクセスしたいXML要素をBaseElement要素に指定して，XMLアクセスルーチンを繰り返し呼び出して取得します。

例えば，次のDTDの場合，要素「sentence」をBaseElementに設定して，XMLアクセスルーチンを繰り返し呼び出すことで，要素の値を読み書きできます。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE book [
  <!ELEMENT book (chapter)*>
  <!ELEMENT chapter (paragraph)*>
  <!ELEMENT paragraph (sentence)*>
  <!ELEMENT sentence (#PCDATA)>
]>
<book/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="sentence">
    <Item elemName="sentence" cobName="sentence1"
          type="alphanumeric" size="200"/>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 sentence1 PIC X(200).

また，親の繰り返し要素「paragraph」をBaseElement要素に指定し，子の繰り返し要素「sentence」をArray要素でCOBOLデータ項目に対応づける方法もあります。この場合，1回のアクセスルーチンの呼び出しで，一つの要素「paragraph」の下位にあるすべての要素「sentence」の値を読み書きできます。Array要素のmax属性には，読み書きしたい要素の最大数を指定してください。

（正しいDDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="paragraph">
  <Group cobName="paragraph">
   <Array max="20" nameOfCountVar="NumSentences">
    <Item elemName="sentence" cobName="sentence1"
          type="alphanumeric" size="200"/>
   </Array>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 paragraph.
 02 sentence1 PIC X(200) OCCURS 20.
 02 NumSentences PIC 9(9) USAGE COMP.

(c)　選択要素をBaseElement要素に指定する

選択要素（複数の要素のうち，どれが出現してもよい要素）の一つをBaseElement要素に対応づける場合は，すべての選択要素をBaseElement要素に指定する必要があります。

例えば次の例の場合，選択要素の一方「chapter1」をBaseElement要素に対応づける場合は，「chapter1」「chapter2」をそれぞれBaseElement要素に指定する必要があります。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE book [
  <!ELEMENT book (chapter1 | chapter2)*>
  <!ELEMENT chapter1 (sentence1)>
  <!ELEMENT sentence1 (#PCDATA)>
  <!ELEMENT chapter2 (sentence2)>
  <!ELEMENT sentence2 (#PCDATA)>
]>
<book/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="chapter1">
  <Group cobName="chapter1">
    <Item elemName="sentence1" type="alphanumeric"
          size="200"/>
  </Group>
 </BaseElement>
 <BaseElement elemName="chapter2">
  <Group cobName="chapter2">
    <Item elemName="sentence2" type="alphanumeric"
          size="200"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 chapter1.
 02 sentence1 PIC X(200).
01 chapter2.
 02 sentence2 PIC X(200).

（XMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<book>
  <chapter2>
    <sentence2>Mr. A</sentence2>
  </chapter2>
  <chapter1>
    <sentence1>Mr. B</sentence1>
  </chapter1>
</book>

（XMLアクセスルーチンの呼び出しの例）

  :
CALL 'CBLXML-RD-EXAMPLE-chapter1'
    USING XML-HANDLE chapter1
    RETURNING CBLXML-RETURN-CODE.
IF CBLXML-CANT-SKIP-BE THEN
 CALL 'CBLXML-RD-EXAMPLE-chapter2'
    USING XML-HANDLE chapter2
    RETURNING CBLXML-RETURN-CODE
END-IF.
IF CBLXML-NO-BE-LEFT THEN
  CALL 'CBLXML-CL-EXAMPLE' USING XML-HANDLE
       RETURNING CBLXML-RETURN-CODE
END-IF.
  :

上記の例の場合，次のように処理が実行されます。

要素「chapter1」を読み込むXMLアクセスルーチン（CBLXML-RD-EXAMPLE-chapter1）が実行される

XMLドキュメント上の最初の選択要素が要素「chapter2」なので，XMLアクセスルーチンの戻り値には，エラーのステータス5（CBLXML-CANT-SKIP-BE）が返されます。

要素「chapter1」の読み込みに失敗したので，次に要素「chapter2」を読み込むXMLアクセスルーチン（CBLXML-RD-EXAMPLE-chapter2）が実行される

要素「chapter2」の読み込みに成功します。XMLアクセスルーチンの戻り値には，正常終了のステータス0（CBLXML-OK）が返されます。

要素「chapter1」を読み込むXMLアクセスルーチン（CBLXML-RD-EXAMPLE-chapter1）が実行される

XMLドキュメント上の次の選択要素が要素「chapter1」なので，要素の読み込みに成功します。XMLアクセスルーチンの戻り値には，正常終了のステータス0（CBLXML-OK）が返されます。

要素「chapter1」を読み込むXMLアクセスルーチン（CBLXML-RD-EXAMPLE-chapter1）が実行される

XMLドキュメントには，もう読み込む要素が残っていないので，要素の読み込みに失敗します。XMLアクセスルーチンの戻り値には，エラーのステータス111（CBLXML-NO-BE-LEFT）が返されます。

(d)　異なる要素の下に共通にある要素

複数の異なる要素の下に共通にある要素をBaseElement要素に対応づけて，要素を入力，および更新できます。ただし，要素の出力については，動作は保証しません。

次に，異なる要素の下に共通にある要素の例を示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE root [
  <!ELEMENT root (group1 , group2 )>
  <!ELEMENT group1 (item1)>
  <!ELEMENT group2 (item1)>
  <!ELEMENT item1  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="item1">
  <Item elemName="item1" size="10"/>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 item1 PIC X(10).

（XMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
 <group1>
  <item1>dataa</item1>
 </group1>
 <group2>
  <item1>datab</item1>
 </group2>
</root>

（XMLアクセスルーチンの呼び出しの例）

  :
CALL 'CBLXML-RD-EXAMPLE-item1'
    USING XML-HANDLE item1 RETURNING CBLXML-RETURN-CODE.　…1.
  :
CALL 'CBLXML-RD-EXAMPLE-item1'
    USING XML-HANDLE item1 RETURNING CBLXML-RETURN-CODE.　…2.
  :

（説明）

group1の下のitem1を入力します。

group2の下のitem1を入力します。

2.3.3　Group要素（集団項目の定義）

Group要素は，子要素を持つXML要素をCOBOLの集団項目に対応づける要素です。Group要素を使うと，DTDの階層構造に沿ったCOBOLデータ項目を作成できます。また，DTDの階層構造とは無関係にCOBOLの集団項目を作成することもできます。

Group要素は，子要素としてGroup要素，Array要素，Item要素，またはAttrItem要素のどれかを一つ以上持ちます。

形式

<Group

〔elemName="XMLの要素名"〕

〔cobName="Group要素に対応する名称"〕

〔nameOfFlagVar="アクセス情報フラグの名称"〕

〔nameOfGroupVar="入出力データ情報項目の名称"〕

〔update="yes"〕>

｛Group要素｜Array要素｜Item要素｜AttrItem要素｝…

</Group>

(1)　elemName属性

形式

elemName="XMLの要素名"

機能

Group要素に対応づけるXMLの要素名を指定します。

elemName属性は，DTDの階層構造と同じ構造でCOBOL集団項目を生成する場合に使用します。

規則

Group要素にelemName属性を指定した場合，Group要素の下位に存在するGroup要素すべてにelemName属性を指定する必要があります。

XMLの要素名称は，XMLで規定された文字で構成する必要があります。

elemName属性で指定したXMLの要素名称がCOBOLの集団項目名として使用できない場合，COBOL原始プログラム生成時にエラーとなります。この場合，cobName属性を使って集団項目名を指定する必要があります。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE group1 [
  <!ELEMENT group1 (group21, group22)>
  <!ELEMENT group21 (item01, item02)>
  <!ELEMENT group22 (item01, item02)>
  <!ELEMENT item01 (#PCDATA)>
  <!ELEMENT item02 (#PCDATA)>
]>
<group1/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="group1">
  <Group elemName="group1">
   <Group elemName="group21">
    <Item elemName="item01" type="alphanumeric"
          size="50"/>
    <Item elemName="item02" type="alphanumeric"
          size="50"/>
   </Group>
   <Group elemName="group22">
    <Item elemName="item01" type="alphanumeric"
          size="50"/>
    <Item elemName="item02" type="alphanumeric"
          size="50"/>
   </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 group1.
 02 group21.
  03 item01 PIC X(50).
  03 item02 PIC X(50).
 02 group22.
  03 item01 PIC X(50).
  03 item02 PIC X(50).

(2)　cobName属性

形式

cobName="Group要素に対応する名称"

機能

elemName属性の値の代わりにCOBOLの集団項目名を指定します。elemName属性に指定するXML要素の名称が，COBOLの集団項目名に使用できない場合などに指定します。

また，elemName属性を省略してcobName属性だけを指定した場合，COBOLプログラムからアクセスする特定のXML要素だけをCOBOL集団項目に対応づけられます。

規則

cobName属性には，COBOLの集団項目名として使用できる名称を指定する必要があります。COBOLの集団項目名として使用できない名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

elemName属性を省略してcobName属性だけを指定した場合，DTDの中で基底要素（BaseElementタグに指定する要素）として選択した要素に含まれる要素の内容は，すべて異なっている必要があります。

例えば，次のDTDでは要素Xが要素内容として2回出現するため，要素Aを基底要素にできません。

<!ELEMENT A(P,Q)>

<!ELEMENT P(X)>

<!ELEMENT Q(X)>

指定例（elemName属性，cobName属性の両方を指定する場合）

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (group21 , group22)>
  <!ELEMENT group21 (item01, item02)>
  <!ELEMENT group22 (item01, item02)>
  <!ELEMENT item01 (#PCDATA)>
  <!ELEMENT item02 (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Group elemName="table" cobName="GROUP1">
   <Group elemName="group21">
    <Item elemName="item01" type="alphanumeric"
          size="50"/>
    <Item elemName="item02" type="alphanumeric"
          size="50"/>
   </Group>
   <Group elemName="group22">
    <Item elemName="item01" type="alphanumeric"
          size="50"/>
    <Item elemName="item02" type="alphanumeric"
          size="50"/>
   </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 GROUP1.
 02 group21.
  03 item01 PIC X(50).
  03 item02 PIC X(50).
 02 group22.
  03 item01 PIC X(50).
  03 item02 PIC X(50).

指定例（cobName属性だけを指定する場合）

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (group21 , group22)>
  <!ELEMENT group21 (item01, item02)>
  <!ELEMENT group22 (item03, item04)>
  <!ELEMENT item01 (#PCDATA)>
  <!ELEMENT item02 (#PCDATA)>
  <!ELEMENT item03 (#PCDATA)>
  <!ELEMENT item04 (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Group cobName="group22">
    <Item elemName="item03" type="alphanumeric"
          size="50"/>
    <Item elemName="item04" type="alphanumeric"
          size="50"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 group22.
 02 item03 PIC X(50).
 02 item04 PIC X(50).

(3)　nameOfFlagVar属性

形式

nameOfFlagVar="アクセス情報フラグの名称"

機能

Interface要素またはBaseElement要素のaccessInfo属性に"yes"を指定した場合に，Group要素に対応するアクセス情報フラグの名称を指定します。

アクセス情報フラグについては，「3.2.1　アクセス情報フラグ」を参照してください。

規則

nameOfFlagVar属性の指定を省略した場合は，Group要素のcobName属性（省略時はelemName属性）に指定した名称に"-FLG"を追加した名称がXMLアクセス用データ定義に生成されます。

Group要素のcobName属性またはelemName属性の名称は，26文字以下で指定する必要があります。26文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfFlagVar属性には，COBOLデータ項目名として使用できる名称を指定する必要があります。COBOLデータ項目名に使用できない文字を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性の指定を省略した場合，またはaccessInfo属性に"no"を指定した場合，nameOfFlagVar属性の指定は無効となります。

accessInfo属性の指定例については，「3.3.2(2)　指定例」を参照してください。

nameOfFlagVar属性には，次に示す属性とは異なる名称を指定する必要があります。同じ名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

　nameOfFlagVar属性と異なる名称を指定する属性

BaseElement要素のcobName属性※，nameOfBaseVar属性

Group要素のcobName属性※，nameOfFlagVar属性，nameOfGroupVar属性

Item要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

Array要素のnameOfCountVar属性，nameOfTotalVar属性

AttrItem要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

注※

cobName属性の指定を省略した場合は，elemName属性になります。

nameOfFlagVar属性の指定例については，「3.2.1(3)　nameOfFlagVar属性の指定例」を参照してください。

(4)　nameOfGroupVar属性

形式

nameOfGroupVar="入出力データ情報項目の名称"

機能

入出力データ情報定義機能によって生成された集団項目の名称を指定します。このとき，Interface要素またはBaseElement要素のaccessInfo属性には"yes"を指定しておきます。

入出力データ情報定義機能については，「3.　入出力データ情報定義機能」を参照してください。

規則

nameOfGroupVar属性の指定を省略した場合は，Group要素のcobName属性（省略時はelemName属性）に指定した名称に"-GROUP"を追加した名称がXMLアクセス用データ定義に生成されます。

Group要素のcobName属性またはelemName属性の名称は，24文字以下で指定する必要があります。24文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfGroupVar属性の名称は30文字以下で指定する必要があります。30文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfGroupVar属性には，COBOLデータ項目の名称に使用できる名称を指定する必要があります。COBOLデータ項目名に使用できない文字を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性の指定を省略した場合，またはaccessInfo属性に"no"を指定した場合，nameOfGroupVar属性の指定は無効となります。

accessInfo属性の指定例については，「3.3.2(2)　指定例」を参照してください。

nameOfGroupVar属性には，次に示す属性とは異なる名称を指定する必要があります。同じ名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

　nameOfGroupVar属性と異なる名称を指定する属性

BaseElement要素のcobName属性※，nameOfBaseVar属性

Group要素のcobName属性※，nameOfFlagVar属性，nameOfGroupVar属性

Item要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

Array要素のnameOfCountVar属性，nameOfTotalVar属性

AttrItem要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

注※

cobName属性の指定を省略した場合は，elemName属性になります。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01, item02)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT item02  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" accessInfo="yes">
    <Group elemName="root"
     nameOfGroupVar="GROUP1">
      <Item elemName="item01" type="alphanumeric"
            size="10" />
      <Item elemName="item02" type="alphanumeric"
            size="10" />
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.
  02 root.
   03 item01 PIC X(10).
   03 item02 PIC X(10).
* Access Information
  02 root-FLG PIC 1(32) USAGE BIT.
  02 GROUP1.
   03 item01-FLG PIC 1(32) USAGE BIT.
   03 item01-LEN PIC 9(9) USAGE COMP.
   03 item02-FLG PIC 1(32) USAGE BIT.
   03 item02-LEN PIC 9(9) USAGE COMP.

(5)　update属性

形式

update="yes"

機能

Group要素を更新の対象にするかどうかを指定します。更新機能については，「7.2.11　XMLドキュメントの更新」を参照してください。

規則

Group要素をelemName属性でXML要素に対応づけた場合，update属性を指定したGroup要素に対応するXML要素に含まれるすべての要素が更新の対象となります。Group要素にcobName属性だけを指定した場合，update属性を指定したGroup要素に含まれるItem要素，Group要素が更新の対象となります。

update属性に"yes"以外の値を指定した場合は，COBOL原始プログラムの生成時にエラーとなります。

update属性を指定したGroup要素の内側にあるGroup要素やItem要素に対してupdate属性を指定してはなりません。指定した場合は，COBOL原始プログラムの生成時に警告メッセージが出力され，update属性が無視されます。

(6)　Group要素の使い方

(a)　XMLドキュメントの構造と異なるCOBOLの集団項目への対応づけ

Group要素では，BaseElement要素でアクセス対象に指定したXML要素，およびその子要素をCOBOLの集団項目に対応づけられます。このとき，COBOLの集団項目がXMLドキュメントと異なる階層構造になってもかまいません。

COBOLの集団項目とXMLドキュメントとを異なる階層構造にする場合は，次の点に注意してください。

COBOL集団項目に対応するGroup要素には，elemName属性を指定できません。集団項目名は，cobName属性で指定してください。

DTDの中で基底要素（BaseElementタグに指定する要素）として選択する要素に含まれる要素の内容は，すべて異なっている必要があります。詳細は，「2.3.3(2)　cobName属性」の規則を参照してください。

XML要素「name」「zipcode」「telephone」および「addr1」をCOBOLの集団項目に対応づける例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (person)*>
  <!ELEMENT person (name, address, zipcode, telephone)>
  <!ELEMENT address (addr1, addr2)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT zipcode (#PCDATA)>
  <!ELEMENT telephone (#PCDATA)>
  <!ELEMENT addr1 (#PCDATA)>
  <!ELEMENT addr2 (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="person">
  <Group cobName="person">
   <Item elemName="name" cobName="FULLNAME"
         type="alphanumeric" size="30"/>
   <Item elemName="zipcode" type="alphanumeric"
         size="8"/>
   <Item elemName="telephone" type="alphanumeric"
         size="13"/>
   <Item elemName="addr1" type="alphanumeric"
         size="120"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 person.
 02 FULLNAME PIC X(30).
 02 zipcode PIC X(8).
 02 telephone PIC X(13).
 02 addr1 PIC X(120).

（出力されるXMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<table>
  <person>
    <name>Mr. X</name>
    <address>
      <addr1>Kanagawa ken</addr1>
      <addr2/>
    </address>
    <zipcode>XXX-XXX</zipcode>
    <telephone>XXX-XXXX-XXXX</telephone>
  </person>
</table>

(b)　Group要素内のGroup要素の省略

Group要素の中にGroup要素がある場合で，子のGroup要素をCOBOLプログラムからアクセスしないときは，対応づけを省略できます。このとき，省略したGroup要素のデータは，COBOLプログラムから読み込めません。また，COBOLプログラムからXMLドキュメントへの書き込みをした場合，省略したGroup要素に含まれるXML要素には，空要素が出力されます。

次の例では，Group要素「person」の子Group要素「fulladdress」への対応づけを省略しています。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (person)*>
  <!ELEMENT person (name, fulladdress, telephone)>
  <!ELEMENT telephone (#PCDATA)>
  <!ELEMENT fulladdress (address, zipcode)>
  <!ELEMENT address (#PCDATA)>
  <!ELEMENT zipcode (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="person">
  <Group cobName="person">
   <Item elemName="name" cobName="FULLNAME"
         type="alphanumeric" size="30"/>
   <Item elemName="telephone" type="alphanumeric"
         size="13"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 person.
 02 FULLNAME PIC X(30).
 02 telephone PIC X(13).

（出力されるXMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<table>
  <person>
    <name>Mr. X</name>
    <fulladdress>
      <address/>
      <zipcode/>
    </fulladdress>
    <telephone>XXX-XXXX-XXXX</telephone>
  </person>
</table>

(c)　選択要素をGroup要素に指定する場合

選択要素（複数の要素のうち，どれが出現してもよい要素）の一つをCOBOLの集団項目に対応づけるには，すべての選択要素をGroup要素に指定する必要があります。

例えば，次の例の場合，選択要素「order」「invoice」のどちらか一方にアクセスしたい場合は，「order」「invoice」の両方をGroup要素に指定する必要があります。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE transaction [
  <!ELEMENT transaction (order | invoice)>
  <!ELEMENT order (goods, name1, fulladdress1,
                   telephone1)>
  <!ELEMENT goods (#PCDATA)>
  <!ELEMENT name1 (#PCDATA)>
  <!ELEMENT fulladdress1 (address1, zipcode1)>
  <!ELEMENT address1 (#PCDATA)>
  <!ELEMENT zipcode1 (#PCDATA)>
  <!ELEMENT telephone1 (#PCDATA)>
  <!ELEMENT invoice (amount, name2, fulladdress2,
                     telephone2)>
  <!ELEMENT amount (#PCDATA)>
  <!ELEMENT name2 (#PCDATA)>
  <!ELEMENT fulladdress2 (address2, zipcode2)>
  <!ELEMENT address2 (#PCDATA)>
  <!ELEMENT zipcode2 (#PCDATA)>
  <!ELEMENT telephone2 (#PCDATA)>
]>
<transaction/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
 <Interface interfaceName="EXAMPLE">
 <BaseElement elemName="transaction">
  <Group elemName="transaction"
         cobName="TRANSACTION0">
   <Group elemName="order" cobName="ORDER1">
    <Item elemName="goods" type="alphanumeric"
          size="50"/>
    <Item elemName="name1" cobName="FULLNAME1"
          type="alphanumeric" size="30"/>
    <Group elemName="fulladdress1"
          cobName="FULLADDRESS1">
     <Item elemName="address1" cobName="ADDRESS1"
          type="alphanumeric" size="120"/>
     <Item elemName="zipcode1" type="alphanumeric"
          size="8"/>
    </Group>
    <Item elemName="telephone1" type="alphanumeric"
          size="13"/>
   </Group>
   <Group elemName="invoice" cobName="INVOICE">
    <Item elemName="amount" type="alphanumeric"
          size="50"/>
    <Item elemName="name2" cobName="FULLNAME2"
          type="alphanumeric" size="30"/>
    <Group elemName="fulladdress2"
           cobName="FULLADDRESS2">
     <Item elemName="address2" cobName="ADDRESS2"
           type="alphanumeric" size="120"/>
     <Item elemName="zipcode2" type="alphanumeric"
           size="8"/>
    </Group>
    <Item elemName="telephone2" type="alphanumeric"
          size="13"/>
   </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 TRANSACTION0.
 02 ORDER1.
  03 goods PIC X(50).
  03 FULLNAME1 PIC X(30).
  03 FULLADDRESS1.
   04 ADDRESS1 PIC X(120).
   04 zipcode1 PIC X(8).
  03 telephone1 PIC X(13).
 02 INVOICE.
  03 amount PIC X(50).
  03 FULLNAME2 PIC X(30).
  03 FULLADDRESS2.
   04 ADDRESS2 PIC X(120).
   04 zipcode2 PIC X(8).
  03 telephone2 PIC X(13).

（出力されるXMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<transaction>
  <order>
    <goods>DVD</goods>
    <name1>Mr. X</name1>
    <fulladdress1>
      <address1>Kanagawa ken</address1>
      <zipcode1>XXX-XXX</zipcode1>
    </fulladdress1>
    <telephone1>XXX-XXXX-XXXX</telephone1>
  </order>
</transaction>

なお，XMLドキュメントを書き込む場合，書き込む要素以外の選択要素は，初期化しておく必要があります。

(d)　再帰的なXML構造

再帰的構造を持つ要素は，verbatim属性に"yes"を指定したItem要素に対応づけることで，XMLドキュメントの入出力，および更新ができます。

DDFで対応づけていない要素が再帰的構造を持ち，それを省略できない場合，XMLドキュメントの入力および更新はできますが，出力はできません。XMLドキュメントを出力した場合は，CBLXML-WR-Interface-BaseElementアクセスルーチンのステータスに109が返されます。

DTDに再帰的構造があっても，再帰的構造の出力を省略できる場合は，XMLドキュメントの出力ができます。次にその例を示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE root [
  <!ELEMENT root (group1, item2) >
  <!ELEMENT group1 (item1, group1?) >    …1.
  <!ELEMENT item1 (#PCDATA)>
  <!ELEMENT item2 (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="item2" cobName="BE">
  <Item elemName="item2" type="alphanumeric" size="10"/>
</BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 item2 PIC X(10).

（出力されるXMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<root>
  <group1>
    <item1/>
                   …2.
  </group1>
  <item2>data1</item2>
</root>

（説明）

group1要素の中でgroup1要素を参照する再帰的構造です。

再帰のgroup1要素は省略できるので，出力しません。

(e)　XML要素の一意な参照

DTDと同じ階層を持つCOBOLデータ項目を作成する場合，COBOLで明示的に一意な参照ができる対応づけをする必要があります。XML要素の名称だけでは一意な参照ができない場合は，cobName属性を使ってデータ項目ごとに固有の名称を指定してください。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (group21 , group11)>
  <!ELEMENT group11 (group21)>
  <!ELEMENT group21 (item01)>
  <!ELEMENT item01 (#PCDATA)>
]>
<table/>

（データ項目名が一意になるように対応づけされていないDDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Group elemName="table" cobName="GROUP1">
   <Group elemName="group21">
    <Item elemName="item01" type="alphanumeric"
     size="50"/>
   </Group>
   <Group elemName="group11">
    <Group elemName="group21">
     <Item elemName="item01" type="alphanumeric"
      size="50"/>
    </Group>
   </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 GROUP1.
 02 group21.
  03 item01 PIC X(50).
 02 group11.
  03 group21.
   04 item01 PIC X(50).

上記のデータ項目の場合，"item01 OF group21 OF GROUP1"の名称が一意に特定できません。

（データ項目名が一意になるように対応づけされているDDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Group elemName="table" cobName="GROUP1">
   <Group elemName="group21" cobName="group21A">
    <Item elemName="item01" type="alphanumeric"
     size="50"/>
   </Group>
   <Group elemName="group11">
    <Group elemName="group21">
     <Item elemName="item01" type="alphanumeric"
      size="50"/>
    </Group>
   </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 GROUP1.
 02 group21A.
  03 item01 PIC X(50).
 02 group11.
  03 group21.
   04 item01 PIC X(50).

上記のデータ項目の場合，item01の属するデータ項目が「group21A」「group21」の2種類に分かれているので，名称が一意に特定できます。

2.3.4　Item要素（要素の対応づけの定義）

Item要素は，要素データを持つ個々のXML要素をCOBOLデータ項目に対応づける要素です。

形式

<Item elemName="XMLの要素名"

〔cobName="Item要素に対応する名称"〕

〔type="type属性値"〕

〔size="けた数"〕

〔fractionalDigits="けた数"〕

〔emptyValue="type属性値に対応したCOBOLの定数"〕

〔sign="符号種別"〕

〔trim="yes|no"〕

〔nameOfFlagVar="アクセス情報フラグの名称"〕

〔nameOfLengthVar="データ長の名称"〕

〔verbatim="yes|no"〕

〔update="yes"〕

〔emptyContentValue="type属性値に対応したCOBOLの定数"〕

〔invalidCharValue="type属性値に対応したCOBOLの定数"〕

〔overflowValue="type属性値に対応したCOBOLの定数"〕

/>

type属性の値と指定できるその他の属性の関連

Item要素に指定できる属性のうち，次の表にある属性は，type属性の値によって指定の可否が異なります。次の表に示さない属性は，type属性の値にかかわらず指定できます。

type属性の値

属性の指定の可否

size

sign

fractionalDigits

trim

verbatim

alphanumeric

○

×

×

○

○

national

○

×

×

○

×

numeric

○

○

○

○

×

packed

○

○

○

○

×

binary

○

○

○

○

×

float

×

×

×

×

×

double

×

×

×

×

×

（凡例）

○：指定できます。

×：指定できません。

(1)　elemName属性

形式

elemName="XMLの要素名"

機能

COBOLデータ項目に対応づけるXML要素の名称を指定します。

規則

XMLの要素名称は，XMLで規定された文字で構成する必要があります。

elemName属性に指定するXML要素は，要素データ（#PCDATAキーワードまたはEMPTYキーワード）を持っている必要があります。

elemName属性で指定したXMLの要素名称がCOBOLデータ項目名として使用できない場合，COBOL原始プログラム生成時にエラーとなります。この場合，cobName属性を使ってデータ項目名を指定する必要があります。

指定例

XML要素「goods」「name」「home」および「cellular」をそれぞれCOBOLデータ項目に対応づける例を，次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (order)*>
  <!ELEMENT order (goods, name, telephone)>
  <!ELEMENT goods (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT telephone (home | cellular)>
  <!ELEMENT home (#PCDATA)>
  <!ELEMENT cellular (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="order">
  <Group cobName="ORDERX">
   <Item elemName="goods" type="alphanumeric"
         size="30"/>
   <Item elemName="name" cobName="FULLNAME"
         type="alphanumeric" size="30"/>
    <Group cobName="telephone">
     <Item elemName="home" type="alphanumeric"
           size="13"/>
     <Item elemName="cellular" type="alphanumeric"
           size="13"/>
    </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 ORDERX.
 02 goods PIC X(30).
 02 FULLNAME PIC X(30).
 02 telephone.
  03 home PIC X(13).
  03 cellular PIC X(13).

(2)　cobName属性

形式

cobName="Item要素に対応する名称"

機能

elemName属性の値の代わりにCOBOLデータ項目の名称を指定します。elemName属性に指定するXML要素の名称が，COBOLデータ項目名に使用できない場合などに指定します。

規則

cobName属性には，COBOLデータ項目名として使用できる名称を指定する必要があります。COBOLデータ項目名として使用できない名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

指定例

XML要素「name」のCOBOLデータ項目名に「FULLNAME」，XML要素「address」のCOBOLデータ項目名に「ADDRESS1」をそれぞれ指定する例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (order)*>
  <!ELEMENT order (goods, name, fulladdress)>
  <!ELEMENT goods (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT fulladdress (zipcode, address)>
  <!ELEMENT zipcode (#PCDATA)>
  <!ELEMENT address (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="order">
  <Group cobName="ORDER1">
   <Item elemName="goods" type="alphanumeric"
         size="30"/>
   <Item elemName="name" cobName="FULLNAME"
         type="alphanumeric" size="30"/>
    <Group cobName="FULLADDRESS">
     <Item elemName="zipcode" type="alphanumeric"
           size="8"/>
     <Item elemName="address" cobName="ADDRESS1"
           type="alphanumeric" size="120"/>
    </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 ORDER1.
 02 goods PIC X(30).
 02 FULLNAME PIC X(30).
 02 FULLADDRESS.
  03 zipcode PIC X(8).
  03 ADDRESS1 PIC X(120).

(3)　type属性

形式

type="type属性値"

機能

Item要素に対応するCOBOLデータ項目のデータ型を指定します。

type属性に指定する値と，生成されるCOBOLデータ項目の対応を表 2-2に示します。

表2‒2　type属性に指定する値と生成されるCOBOLデータ項目の対応

type属性の値

生成されるCOBOLデータ項目

alphanumeric

英数字項目

national

日本語項目

numeric

数字項目（外部10進形式）

packed

数字項目（内部10進形式）

binary

数字項目（2進形式）

float

数字項目（内部浮動小数点形式　4バイト）

double

数字項目（内部浮動小数点形式　8バイト）

規則

type属性の指定を省略した場合は，"alphanumeric"が仮定されます。

指定例

XML要素「description」を英数字項目に対応づける例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (description)>
  <!ELEMENT description (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Item elemName="description"
        type="alphanumeric"/>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 description PIC X(100).

(4)　size属性

形式

size="けた数"

機能

COBOLデータ項目に対応するPICTURE句のけた数を指定します。

size属性に指定できるけた数の最小値，最大値，およびsize属性の指定を省略した場合に仮定されるけた数を，表2-3に示します。

表2‒3　size属性に指定できる値の範囲と省略時のけた数

type属性の値

size属性に指定できる値の範囲

size属性省略時のけた数

最小値

最大値

alphanumeric

1

16,777,215

100

national

1

16,383

100

numeric

1

18

9

packed

1

18

9

binary

1

18

9

規則

size属性は，同じItem要素のtype属性に"alphanumeric"，"national"，"numeric"，"packed"，または"binary"を指定した場合だけ，指定できます。

表2-3に示した最小値，最大値の範囲を超える値をsize属性に指定した場合，COBOL原始プログラムの生成時にエラーとなります。

COBOLデータ項目とXMLドキュメントとの間の転記の規則については，「7.2.7　値の入力，出力の動作」を参照してください。

指定例

XML要素「description」に対応するCOBOLデータ項目の文字数を200に設定する例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (description)>
  <!ELEMENT description (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Item elemName="description" type="alphanumeric"
        size="200"/>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 description PIC X(200).

(5)　fractionalDigits属性

形式

fractionalDigits="けた数"

機能

COBOLの数字項目に対して，小数点以下のけた数，または位取りのけた数を指定します。

規則

けた数には，次の値を指定します。

小数点以下のけた数を指定する場合

size属性に指定した（または仮定された）けた数以下の値を指定します。

整数部の位取りのけた数を指定する場合

値の前にハイフン（-）を付けて指定します。

小数部の位取りのけた数を指定する場合

size属性に指定した（または仮定された）けた数より大きい値を指定します。

fractionalDigits属性は，同じItem要素のtype属性に"numeric"，"packed"，または"binary"を指定した場合だけ，指定できます。

fractionalDigits属性を省略した場合，小数点以下のけた数，および位取りのけた数には0が仮定されます。

size属性に指定した，または仮定されたけた数を超えたけた数を，小数点以下のけた数に指定できません。

fractionalDigits属性で整数部の位取りを指定する場合，size属性の値とfractionalDigits属性の値の絶対値（総けた数）の和が18けたを超えてはなりません。18けたを超える値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

fractionalDigits属性で小数点以下のけた数，または小数部の位取りを指定する場合，18けた以内の値を指定する必要があります。18けたを超える値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

指定例

XML要素「price1」に対応するCOBOLデータ項目の小数点以下のけた数を3けたに設定します。

XML要素「price2」に対応するCOBOLデータ項目の小数点以下のけた数を6けたに設定します。

XML要素「price3」に対応するCOBOLデータ項目の小数部の位取りのけた数を3けたに設定します。

XML要素「price4」に対応するCOBOLデータ項目の整数部の位取りのけた数を3けたに設定します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (row)>
  <!ELEMENT row (price1, price2, price3, price4)>
  <!ELEMENT price1 (#PCDATA)>
  <!ELEMENT price2 (#PCDATA)>
  <!ELEMENT price3 (#PCDATA)>
  <!ELEMENT price4 (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="row">
  <Group cobName="row">
   <Item elemName="price1" type="numeric" size="6"
         fractionalDigits="3"/>
   <Item elemName="price2" type="numeric" size="6"
         fractionalDigits="6"/>
   <Item elemName="price3" type="numeric" size="6"
         fractionalDigits="9"/>
   <Item elemName="price4" type="numeric" size="6"
         fractionalDigits="-3"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 row.
 02 price1 PIC 9(3)V9(3).
 02 price2 PIC V9(6).
 02 price3 PIC VP(3)9(6).
 02 price4 PIC 9(6)P(3).

(6)　emptyValue属性

形式

emptyValue="type属性値に対応したCOBOLの定数"

機能

次のXML要素に対応するCOBOLデータ項目の値を指定します。

省略できる要素で，省略されている要素

選択要素で，選択されていない要素

countVar属性に"no"を指定した場合の繰り返し項目の要素

XMLドキュメントの読み込み時，読み込んだ要素が上記のどれかの場合，emptyValue属性に指定した値がCOBOLデータ項目に格納されます。

emptyValue属性に指定した値がCOBOLデータ項目に格納された状態でXMLドキュメントに書き込みをすると，そのデータ項目に対応する要素を出力しないようにできます。ただし，省略できる要素や選択要素がBaseElement要素で指定された要素の場合，COBOLデータ項目の値に関係なく必ず出力されます。

規則

emptyValue属性に指定できる要素の値，およびemptyValue属性の指定を省略した場合に仮定される要素の値を，表 2-4に示します。

表2‒4　emptyValue属性に指定できる値と省略時の値

type属性の値

英字

英数字

日本語文字

SPACE

数値

ZERO

HIGH-VALUE

LOW-VALUE

省略時の値

alphanumeric

○

○

○

○

○

○

○

○

SPACE

national

×

×

○

○

×

○

○

○

SPACE

numeric

×

×

×

×

○

○

○

○

ZERO

packed

×

×

×

×

○

○

×

×

ZERO

binary

×

×

×

×

○

○

×

×

ZERO

float

×

×

×

×

○

○

×

×

ZERO

double

×

×

×

×

○

○

×

×

ZERO

（凡例）

○：指定できます。

×：指定できます。

type属性とemptyValue属性に指定する値は，表 2-4に記載された組み合わせだけが有効となります。これ以外の組み合わせを指定した場合，COBOL原始プログラムの生成時にエラーとなります。

emptyValue属性に指定する文字列の長さは，同じItem要素のsize属性に指定するCOBOLデータ項目の長さを超えないようにしてください。超えた場合，size属性に指定した長さが有効となります。

accessInfo属性"yes"を指定したInterface要素，BaseElement要素の内側にあるItem要素にemptyValue属性は指定できません。emptyValue属性を指定した場合はCOBOLソースの生成時に警告メッセージが表示され，emptyValue属性は無視されます。

emptyValue属性に指定した文字列が160文字を超えた場合，先頭から160文字が採用されます。このとき，警告メッセージが表示されます。

「ZERO」「SPACE」「HIGH-VALUE」「LOW-VALUE」は，emptyValue属性の予約語です。これらの文字列は，COBOLの英数字定数としてemptyValue属性に指定できません。また，これらの文字列は，COBOL言語仕様の表意定数と同じように，英大文字と英小文字が等価として扱われます。

emptyValue属性に指定した数字が18けたを超える場合，COBOL原始プログラムの生成時にエラーとなります。また，浮動小数点の仮数部が16けたを超える，指数部が2けたを超えるなど，浮動小数点の形式でない場合も，COBOL原始プログラムの生成時にエラーとなります。なお，浮動小数点の形式で使用する「E」の文字は，大文字，小文字の両方を使用できます。

注意事項

ATTLIST属性のデフォルト指定で#FIXED値を指定した属性の入力に対しては，emptyValue属性を指定しても無効となります。必ず，#FIXEDで指定したデフォルト値を入力値として設定してください。

指定例（XMLドキュメントを出力する場合）

XML要素「item11」「item21」「item22」を省略した場合，または選択しなかった場合に設定するCOBOLの値を，それぞれ"ITEM11"，"ITEM21"，"ITEM22"に設定します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (item1, item2)>
  <!ELEMENT item1 (item11?)>
  <!ELEMENT item2 (item21 | item22)>
  <!ELEMENT item11 (#PCDATA)>
  <!ELEMENT item21 (#PCDATA)>
  <!ELEMENT item22 (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Group elemName="table" cobName="TABLE1">
   <Group elemName="item1">
    <Item elemName="item11" type="alphanumeric"
          size="30" emptyValue="ITEM11"/>
   </Group>
   <Group elemName="item2">
    <Item elemName="item21" type="alphanumeric"
          size="20" emptyValue="ITEM21"/>
    <Item elemName="item22" type="alphanumeric"
          size="20" emptyValue="ITEM22"/>
   </Group>
  </Group>
 </BaseElement>
</Interface>

（COBOLプログラムのコーディング例）

      :
MOVE 'ITEM11' TO ITEM11.  …1.
MOVE 'ITEM21' TO ITEM21.  …2.
MOVE 'ABCDEF' TO ITEM22.  …3.
      :

（説明）

省略できる要素を省略したい場合には，emptyValue属性に指定した値を設定する。

選択要素のうち，選択しない要素には，emptyValue属性に指定した値を設定する。

出力する要素には，値（文字列）を設定する。

（出力されるXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>

<table>
  <item1/>  …1.
  <item2>
    <item22>ABCDEF</item22>  …2.
  </item2>
</table>

（説明）

item11を省略したため，item1が空要素で出力される。

item22に，設定した文字列が出力される。

指定例（XMLドキュメントから入力する場合）

XML要素「item1」〜「item11」からCOBOLデータ項目に値を入力します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (item1?, item2?, item3?, item4?,
                   item5?, item6?, item7?, item8?,
                   item9?, item10?, item11?)>
  <!ELEMENT item1 (#PCDATA)>
  <!ELEMENT item2 (#PCDATA)>
  <!ELEMENT item3 (#PCDATA)>
  <!ELEMENT item4 (#PCDATA)>
  <!ELEMENT item5 (#PCDATA)>
  <!ELEMENT item6 (#PCDATA)>
  <!ELEMENT item7 (#PCDATA)>
  <!ELEMENT item8 (#PCDATA)>
  <!ELEMENT item9 (#PCDATA)>
  <!ELEMENT item10 (#PCDATA)>
  <!ELEMENT item11 (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="table">
  <Group elemName="table" cobName="TABLE1">
    <Item elemName="item1"  type="alphanumeric"
          size="30" emptyValue="SPACE"/>
    <Item elemName="item2"  type="alphanumeric"
          size="30" emptyValue="SPACE"/>
    <Item elemName="item3"  type="alphanumeric"
          size="30" emptyValue="SPACE"/>
    <Item elemName="item4"  type="alphanumeric"
          size="30" emptyValue="HIGH-VALUE"/>
    <Item elemName="item5"  type="alphanumeric"
          size="30" emptyValue="LOW-VALUE"/>
    <Item elemName="item6"  type="alphanumeric"
          size="30" emptyValue="COBOL"/>
    <Item elemName="item7"  type="alphanumeric"
          size="30" emptyValue="COBOL"/>
    <Item elemName="item8"  type="numeric"
          emptyValue="ZERO"/>
    <Item elemName="item9"  type="numeric"
          emptyValue="85"/>
    <Item elemName="item10" type="numeric"
          emptyValue="2001"/>
    <Item elemName="item11" type="numeric"
          emptyValue="LOW-VALUE"/>
  </Group>
 </BaseElement>
</Interface>>

（入力するXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>

<table>
 <!-- 要素なし <item1> -->
 <item2></item2>
 <item3>    </item3>
 <!-- 要素なし <item4> -->
 <!-- 要素なし <item5> -->
 <!-- 要素なし <item6> -->
 <item7>COBOL</item7>
 <!-- 要素なし <item8> -->
 <!-- 要素なし <item9> -->
 <item10>2001</item10>
 <!-- 要素なし <item11> -->
</table>

（COBOLデータ項目に格納される値）

データ項目名

値

item1

SPACE

item2

空白文字

item3

空白文字

item4

HIGH-VALUE

item5

LOW-VALUE

item6

"COBOL"

item7

"COBOL"

item8

ZERO

item9

"85"

item10

"2001"

item11

LOW-VALUE

(7)　sign属性

形式

sign="符号種別"

機能

COBOLの数字項目に対してPICTURE句の演算符号"S"，およびSIGN句を指定します。

規則

符号種別には，次のどれかの値を指定します。これら以外の値を指定した場合，COBOL原始プログラム生成時にエラーとなります。

unsigned

数字項目のPICTURE句に演算符号"S"を付けません。

signed

数字項目のPICTURE句に演算符号"S"を付けます。

leadingSeparate

数字項目に，PICTURE句の演算符号"S"と「SIGN LEADING SEPARATE」を付けます。

sign属性を省略した場合，"unsigned"が仮定されます。

sign属性に指定できる符号種別は，type属性に指定したデータ型によって異なります。指定できるtype属性の値とsign属性の値の組み合わせを表 2-5に示します。

表2‒5　指定できるtype属性の値とsign属性の値の組み合わせ

type属性の値

sign属性の値

unsigned

signed

leadingSeparate

numeric

○

○

○

packed

○

○

×

binary

○

○

×

上記以外

×

×

×

（凡例）

○：指定できます。

×：指定できません。

指定例

XML要素「UnsignedValue」「SignedValue」「LSSignedValue」に対応するCOBOLデータ項目に対して，それぞれ異なる演算符号やSIGN句を設定する例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (row)>
  <!ELEMENT row (UnsignedValue, SignedValue,
                 LSSignedValue)>
  <!ELEMENT UnsignedValue (#PCDATA)>
  <!ELEMENT SignedValue (#PCDATA)>
  <!ELEMENT LSSignedValue (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="row">
  <Group cobName="row">
   <Item elemName="UnsignedValue" type="numeric"
         sign="unsigned"/>
   <Item elemName="SignedValue" type="numeric"
         sign="signed"/>
   <Item elemName="LSSignedValue" type="numeric"
         sign="leadingSeparate"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 row.
 02 UnsignedValue PIC 9(9).
 02 SignedValue PIC S9(9).
 02 LSSignedValue PIC S9(9) SIGN LEADING SEPARATE.

(8)　trim属性

形式

trim="yes｜no"

機能

XMLドキュメントに出力されるデータ項目の値を整形するかどうかを指定します。

規則

trim属性には，値を整形する場合は"yes"，整形しない場合は"no"を指定します。それぞれを指定した場合の出力結果を表 2-6に示します。

表2‒6　type属性の値とtrim属性の値の組み合わせでの出力結果の相違

type属性の値

出力結果

trim="yes"

trim="no"

alphanumeric

末尾の空白文字が削除されて，値が出力される。

size属性で指定した長さの値が出力される。

national

末尾の全角空白文字が削除されて，値が出力される。

size属性で指定した長さの値が出力される。

numeric

packed

binary

数値の前ゼロ（0）が削除されて，値が出力される。また，正の符号'＋'が削除される。

size属性で指定した長さの値が出力される。また，sign属性にunsigned以外を指定した場合，値の左側に正の符号'＋'または負の符号'−'が出力される。

上記以外

trim属性を指定できない。指定した場合，COBOL原始プログラムの生成時にエラーとなる。

trim属性に"yes"を指定した場合で符号付きの数値のとき，符号を除いた先頭から前ゼロ（0）が削除されます。また，+記号は削除されます。

（例）

+000004　→　4

-000004　→　-4

trim属性の指定を省略した場合，"yes"が仮定されます。

trim属性に"yes"または"no"以外の値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

指定例

XML要素「test01」，「test02」の値を，それぞれ次のように出力する例を示します。

「test01」の値（英数字）は，size属性で指定した長さで出力する

「test02」の値（数値）は，前ゼロ（0）を削除して出力する

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (row)>
  <!ELEMENT row (test01, test02)>
  <!ELEMENT test01 (#PCDATA)>
  <!ELEMENT test02 (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="row">
    <Item elemName="test01" type="alphanumeric"
          trim="no"/>
    <Item elemName="test02" type="numeric"
          trim="yes"/>
  </BaseElement>
</Interface>

(9)　nameOfFlagVar属性

形式

nameOfFlagVar="アクセス情報フラグの名称"

機能

Interface要素またはBaseElement要素のaccessInfo属性に"yes"を指定した場合に，Item要素に対応するアクセス情報フラグの名称を指定します。

アクセス情報フラグについては，「3.2.1　アクセス情報フラグ」を参照してください。

規則

nameOfFlagVar属性の指定を省略した場合は，cobName属性（省略時はelemName属性）の名称に"-FLG"を追加した名称がXMLアクセス用データ定義に生成されます。

cobName属性（省略時はelemName属性）の名称は，26文字以下で指定する必要があります。26文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfFlagVar属性に指定する名称は，30文字以下で指定する必要があります。30文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfFlagVar属性には，COBOLデータ項目名として使用できる名称を指定する必要があります。COBOLデータ項目の名称に使用できない文字を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性を省略した場合，またはaccessInfo属性に"no"を指定した場合，nameOfFlagVar属性の指定は無効となります。

accessInfo属性の指定例については，「3.3.3(1)　指定例」を参照してください。

nameOfFlagVar属性には，次に示す属性とは異なる名称を指定する必要があります。同じ名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

　nameOfFlagVar属性と異なる名称を指定する属性

BaseElement要素のcobName属性※，nameOfBaseVar属性

Group要素のcobName属性※，nameOfGroupVar属性

Item要素のcobName属性※，nameOfFlagVar属性，nameOfLengthVar属性

Array要素のnameOfCountVar属性，nameOfTotalVar属性

AttrItem要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

注※

cobName属性を省略した場合は，elemName属性になります。

nameOfFlagVar属性の指定例については，「3.2.1(3)　nameOfFlagVar属性の指定例」を参照してください。

(10)　nameOfLengthVar属性

形式

nameOfLengthVar="データ長の名称"

機能

Interface要素またはBaseElement要素のaccessInfo属性に"yes"を指定した場合に，Item要素に対応するデータ長の名称を指定します。

データ長については，「3.2.2　データ長」を参照してください。

規則

nameOfLengthVar属性の指定を省略した場合は，cobName属性（省略時はelemName属性）の名称に"-LEN"を追加した名称がXMLアクセス用データ定義に生成されます。

cobName属性（省略時はelemName属性）の名称は，26文字以下で指定する必要があります。26文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfLengthVar属性に指定する名称は，30文字以下で指定する必要があります。30文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfLengthVar属性には，COBOLデータ項目名として使用できる名称を指定する必要があります。COBOLデータ項目の名称に使用できない文字を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性の指定を省略した場合，またはaccessInfo属性に"no"を指定した場合，nameOfLengthVar属性の指定は無効となります。

accessInfo属性の指定例については，「3.3.3(1)　指定例」を参照してください。

nameOfLengthVar属性には，次に示す属性とは異なる名称を指定する必要があります。同じ名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

　nameOfLengthVar属性と異なる名称を指定する属性

BaseElement要素のcobName属性※，nameOfBaseVar属性

Group要素のcobName属性※，nameOfGroupVar属性

Item要素のcobName属性※，nameOfFlagVar属性，nameOfLengthVar属性

Array要素のnameOfCountVar属性，nameOfTotalVar属性

AttrItem要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

注※

cobName属性の指定を省略した場合は，elemName属性になります。

nameOfLengthVar属性の指定例については，「3.2.2(3)　nameOfLengthVar属性の指定例」を参照してください。

(11)　verbatim属性

形式

verbatim="yes|no"

機能

verbatim属性に"yes"を指定した場合，elemName属性で指定した要素の内容を文字列として，COBOLデータ項目に対応づけます。指定した要素の内容に含まれるタグはすべて文字列とみなされます。

verbatim属性に"yes"を指定したItem要素は，Group要素およびDTDに定義した#PCDATAキーワードを持つ要素に対応づけられます。また，再帰的構造を持つ要素をXMLドキュメントに入出力できます。

規則

verbatim属性を指定する場合，type属性に"alphanumeric"を指定する必要があります。type属性に"alphanumeric"以外を指定してverbatim属性を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

verbatim属性を指定した場合，trim属性は指定できません。verbatim属性とtrim属性を同時に指定した場合，COBOL原始プログラムの生成時にエラーとなります。

verbatim属性の指定を省略した場合，"no"が仮定されます。

verbatim属性に対応する要素の内側の空白文字と改行文字は，XMLドキュメントからそのまま入力されます。

verbatim属性に対応する要素の内側に実体参照文字がある場合，定義済みの実体参照は「付録D.1　定義済み実体参照」の規則に従って変換されます。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01, item02, item03)>
  <!ELEMENT item01 (#PCDATA)>
  <!ELEMENT item02 (#PCDATA)>
  <!ELEMENT item03 (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root">
    <Item verbatim="yes" elemName="root"
          type="alphanumeric" size="200"/>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 root PIC X(200).

（入力ドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <item01>AAAAA</item01>
  <item02>BBBBB</item02>
  <item03>CCCCC</item03>
</root>

（COBOLデータ項目に格納される値）

[改行]<item01>AAAAA</item01>[改行]<item02>BBBBB</item02>[改行]<item03>CCCCC</item03>[改行]

注　[改行]は改行コード（0x0A）を表しています。

（出力ドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>

<root>
  <item01>AAAAA</item01>
  <item02>BBBBB</item02>
  <item03>CCCCC</item03>
</root>

出力ドキュメントには，COBOLデータ項目の値が出力されます。COBOLデータ項目に変更がない場合，入力ドキュメントと出力ドキュメントは等しくなります。

(12)　update属性

形式

update="yes"

機能

Item要素を更新の対象にするかどうかを指定します。更新機能については，「7.2.11　XMLドキュメントの更新」を参照してください。

規則

update属性に"yes"以外を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

(13)　emptyContentValue属性

形式

emptyContentValue="type属性値に対応したCOBOLの定数"

機能

入力するXMLドキュメントの，要素の内容が空である場合，emptyContentValue属性に指定したCOBOLの定数をCOBOLデータ項目に設定します。また，XMLドキュメントの出力時に，emptyContentValue属性に指定したCOBOLの定数をCOBOLデータ項目に設定した場合，対応する要素が空要素として出力されます。

emptyContentValue属性には，表2-7に示すtype属性値に対応したCOBOLの値を指定できます。

入力する要素の内容とemptyContentValue属性に指定した定数が同じ場合，要素が空であるかどうかを判定できません。必ず入力する要素の内容とemptyContentValue属性の定数が異なる値になるように，emptyContentValue属性の値を指定してください。

表2‒7　type属性の指定値とemptyContentValue属性に指定できる値

type属性値

指定できる値

英字

英数字

日本語文字

SPACE

数値

ZERO

HIGH-VALUE

LOW-VALUE

alphanumeric

○

○

○

○

○

○

○

○

national

×

×

○

○

×

○

○

○

numeric

×

×

×

×

○

○

○

○

packed

×

×

×

×

○

○

×

×

binary

×

×

×

×

○

○

×

×

float

×

×

×

×

○

○

×

×

double

×

×

×

×

○

○

×

×

（凡例）

○：指定できます。

×：指定できません。

規則

emptyContentValue属性に指定する文字列の長さは，同じItem要素のsize属性に指定するCOBOLデータ項目の長さを超えないようにしてください。超えた場合，size属性に指定した長さが有効となります。

accessInfo属性"yes"を指定したInterface要素，BaseElement要素の内側にあるItem要素にemptyContentValue属性は指定できません。emptyContentValue属性を指定した場合はCOBOL原始プログラムの生成時に警告メッセージが表示され，emptyContentValue属性は無視されます。

emptyContentValue属性に指定した文字列が160文字を超えた場合，先頭から160文字が採用されます。このとき，警告メッセージが表示されます。

「ZERO」「SPACE」「HIGH-VALUE」「LOW-VALUE」は，emptyContentValue属性の予約語です。これらの文字列は，COBOLの英数字定数としてemptyContentValue属性に指定できません。また，これらの文字列は，COBOL言語仕様の表意定数と同じように，英大文字と英小文字が等価として扱われます。

type属性とemptyContentValue属性に指定する値は，表2-7に記載された組み合わせだけが有効となります。これ以外の組み合わせを指定した場合，COBOL原始プログラムの生成時にエラーとなります。

emptyContentValue属性に指定した数字が18けたを超える場合，COBOL原始プログラムの生成時にエラーとなります。また，浮動小数点の仮数部が16けたを超える，指数部が2けたを超えるなど，浮動小数点の形式でない場合も，COBOL原始プログラムの生成時にエラーとなります。

なお，浮動小数点の形式で使用する「E」の文字は，大文字，小文字の両方を使用できます。

emptyValue属性とemptyContentValue属性に同じ値を指定し，XMLドキュメントを出力した場合，emptyValue属性が有効になります。ただし，対応する要素が省略できる要素でない場合は，その要素を削除できないため，emptyContentValue属性が有効になります。

注意事項

ATTLIST属性のデフォルト指定で#FIXED値を指定した属性の入力に対しては，emptyContentValue属性を指定しても，無効となります。必ず，#FIXED値で指定したデフォルト値を入力値として設定してください。

開始タグと終了タグ間の内容が空白文字（スペース，タブおよび改行）だけの場合でも空要素とみなしません。空要素とみなすのは，空タグの場合，および開始タグと終了タグ間の内容がない（<Item></Item>）場合だけです。

(14)　invalidCharValue属性

形式

invalidCharValue="type属性値に対応したCOBOLの定数"

機能

入力するXMLドキュメントに対応する要素の内容に不当な文字がある場合，invalidCharValue属性に指定したCOBOLの定数がCOBOLデータ項目に返されます。

invalidCharValue属性には，表2-8に示すtype属性値に対応したCOBOLの値を指定できます。

入力時にチェックする文字は「9.2　入出力時に不当な文字をチェックする機能」の「表9-3　入力時にチェックする文字」の「-chkcharオプション指定あり」を参照してください。

表2‒8　type属性の指定値とinvalidCharValue属性に指定できる値

type属性値

指定できる値

英字

英数字

日本語文字

SPACE

数値

ZERO

HIGH-VALUE

LOW-VALUE

alphanumeric

○

○

○

○

○

○

○

○

national

×

×

○

○

×

○

○

○

numeric

×

×

×

×

○

○

○

○

packed

×

×

×

×

○

○

×

×

binary

×

×

×

×

○

○

×

×

float

×

×

×

×

○

○

×

×

double

×

×

×

×

○

○

×

×

（凡例）

○：指定できます。

×：指定できません。

規則

invalidCharValue属性に指定する文字列の長さは，同じItem要素のsize属性に指定するCOBOLデータ項目の長さを超えないようにしてください。超えた場合，size属性に指定した長さが有効となります。

accessInfo属性"yes"を指定したInterface要素，BaseElement要素の内側にあるItem要素にinvalidCharValue属性は指定できません。invalidCharValue属性を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示され，invalidCharValue属性は無視されます。

invalidCharValue属性に指定した文字列が160文字を超えた場合，先頭から160文字が採用されます。このとき，警告メッセージが表示されます。

「ZERO」「SPACE」「HIGH-VALUE」「LOW-VALUE」は，invalidCharValue属性の予約語です。これらの文字列は，COBOLの英数字定数としてinvalidCharValue属性に指定できません。また，これらの文字列は，COBOL言語仕様の表意定数と同じように，英大文字と英小文字が等価として扱われます。

type属性とinvalidCharValue属性に指定する値は，表2-8に記載された組み合わせだけが有効となります。これ以外の組み合わせを指定した場合，COBOL原始プログラムの生成時にエラーとなります。

invalidCharValue属性に指定した数字が18けたを超える場合，COBOL原始プログラムの生成時にエラーとなります。また，浮動小数点の仮数部が16けたを超える，指数部が2けたを超えるなど，浮動小数点の形式でない場合も，COBOL原始プログラムの生成時にエラーとなります。

なお，浮動小数点の形式で使用する「E」の文字は，大文字，小文字の両方を使用できます。

invalidCharValue属性とoverflowValue属性の両方を指定した場合で，XMLドキュメントからの入力値に不当文字があり，かつsize属性に指定した長さを超えていると，invalidCharValue属性が有効になります。

注意事項

invalidCharValue属性を指定した場合でも，XMLアクセスルーチンのステータスは「9.2　入出力時に不当な文字をチェックする機能」の-chkcharオプション指定の有無の条件に従ったステータスが返ります。

(15)　overflowValue属性

形式

overflowValue="type属性値に対応したCOBOLの定数"

機能

入力するXMLドキュメントに対応する要素の内容がオーバフローした場合，overflowValue属性に指定したCOBOLの定数がCOBOLデータ項目に設定されます。

overflowValue属性には，表2-9に示すtype属性値に対応したCOBOLの値を指定できます。

入力値のオーバフローの条件は，「9.1　入力時のオーバフローをステータスで返す機能」の表9-1を参照してください。

表2‒9　type属性の指定値とoverflowValue属性に指定できる値

type属性値

指定できる値

英字

英数字

日本語文字

SPACE

数値

ZERO

HIGH-VALUE

LOW-VALUE

alphanumeric

○

○

○

○

○

○

○

○

national

×

×

○

○

×

○

○

○

numeric

×

×

×

×

○

○

○

○

packed

×

×

×

×

○

○

×

×

binary

×

×

×

×

○

○

×

×

float

×

×

×

×

○

○

×

×

double

×

×

×

×

○

○

×

×

（凡例）

○：指定できます。

×：指定できません。

規則

overflowValue属性に指定する文字列の長さは，同じItem要素のsize属性に指定するCOBOLデータ項目の長さを超えないようにしてください。超えた場合，size属性に指定した長さが有効となります。

accessInfo属性"yes"を指定したInterface要素，BaseElement要素の内側にあるItem要素にoverflowValue属性は指定できません。overflowValue属性を指定した場合はCOBOL原始プログラムの生成時に警告メッセージが表示され，overflowValue属性は無視されます。

overflowValue属性に指定した文字列が160文字を超えた場合，先頭から160文字が採用されます。このとき，警告メッセージが表示されます。

「ZERO」「SPACE」「HIGH-VALUE」「LOW-VALUE」は，overflowValue属性の予約語です。これらの文字列は，COBOLの英数字定数としてoverflowValue属性に指定できません。また，これらの文字列は，COBOL言語仕様の表意定数と同じように，英大文字と英小文字が等価として扱われます。

type属性とoverflowValue属性に指定する値は，表2-9に記載された組み合わせだけが有効となります。これ以外の組み合わせを指定した場合，COBOL原始プログラムの生成時にエラーとなります。

overflowValue属性に指定した数字が18けたを超える場合，COBOL原始プログラムの生成時にエラーとなります。また，浮動小数点の仮数部が16けたを超える，指数部が2けたを超えるなど，浮動小数点の形式でない場合も，COBOL原始プログラムの生成時にエラーとなります。

なお，浮動小数点の形式で使用する「E」の文字は，大文字，小文字の両方を使用できます。

invalidCharValue属性とoverflowValue属性の両方を指定した場合で，XMLドキュメントからの入力値に不当文字があり，かつsize属性に指定した長さを超えていると，invalidCharValue属性の値が設定されます。

注意事項

overflowValue属性を指定した場合でもXMLアクセスルーチンのステータスは「9.1　入力時のオーバフローをステータスで返す機能」の-chkovflowオプション指定の有無の条件に従ったステータスが返ります。

2.3.5　Array要素（繰り返し要素の定義）

Array要素は，繰り返し要素をOCCURS句を持つCOBOLデータ項目に対応づける要素です。

Array要素は，子要素としてGroup要素，Item要素，またはAttrItem要素のどれかを持ちます。

形式

<Array max="要素の最大繰り返し回数"

〔nameOfCountVar="繰り返し入出力数の名称"〕

〔nameOfTotalVar="繰り返し全要素数の名称"〕

〔countVar="yes|no"〕>

｛Group要素｜Item要素｜AttrItem要素｝

</Array>

指定例

Array要素を使って，繰り返し要素「sentence」をCOBOLのOCCURS句付きのデータ項目「a-sentence」に対応づける例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE book [
  <!ELEMENT book (chapter)*>
  <!ELEMENT chapter (paragraph)*>
  <!ELEMENT paragraph (sentence)*>
  <!ELEMENT sentence (#PCDATA)>
]>
<book/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
   <BaseElement elemName="paragraph">
     <Group cobName="paragraph">
       <Array max="20">
         <Item elemName="sentence"
               cobName="a-sentence"
               type="alphanumeric"
               size="1000"/>
       </Array>
     </Group>
   </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 paragraph.
 02 a-sentence PIC X(1000) OCCURS 20.
 02 a-sentence-COUNT PIC 9(9) USAGE COMP.

(1)　max属性

形式

max="配列の最大要素数"

機能

要素の繰り返し回数の最大値を指定します。

規則

max属性に指定できる値は，1〜16,777,215の範囲です。この範囲を超える値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

読み込もうとしたXML要素の数が，Array要素のmax属性に指定した値よりも小さい場合，余ったCOBOLデータ項目（XMLドキュメントから値を入力しなかったデータ項目）は表 2-10に示す値になります。

表2‒10　余ったCOBOLデータ項目の値

Array要素のに対するcountVar属性の指定

余ったCOBOLデータ項目の値

countVar="yes"またはcountVarを指定していない

不定となる

countVar="no"

emptyValue属性値を設定する

読み込もうとしたXML要素の数が，max属性に指定した値よりも大きい場合，最大値を超えた部分のデータは，COBOLデータ項目に読み込まれません。

（例）

max属性に指定した値と，XMLドキュメント中の要素の数による動作の違いを次に示します。

(2)　nameOfCountVar属性

形式

nameOfCountVar="繰り返し入出力数の名称"

機能

Array要素に対応した繰り返し項目の入出力数を扱うための繰り返し入出力数の名称を指定します。XMLドキュメント入力時には，繰り返し項目の入力した数が設定されます。XMLドキュメント出力時には，出力する繰り返し項目の数を設定できます。

Interface要素とBaseElement要素のaccessInfo属性に"no"を指定した場合，要素の繰り返し入出力数を格納するCOBOLデータ項目は繰り返し項目と同じレベルに生成されます。accessInfo属性に"yes"を指定した場合，入出力データ情報項目の中に生成されます。

規則

nameOfCountVar属性の指定を省略した場合は，Array要素の直下に含まれるItem要素またはGroup要素のcobName属性（省略時はelemName属性）の名称に"-COUNT"を追加した名称がXMLアクセス用データ定義に生成されます。

cobName属性（省略時はelemName属性）の名称は，24文字以下で指定する必要があります。24文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfCountVar属性に指定する名称は，30文字以下で指定する必要があります。30文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfCountVar属性には，COBOLデータ項目名に使用できる名称を指定する必要があります。COBOLデータ項目名として使用できない名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

nameOfCountVar属性には，次に示す属性とは異なる名称を指定する必要があります。同じ名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

　nameOfCountVar属性と異なる名称を指定する属性

BaseElement要素のcobName属性※，nameOfBaseVar属性

Group要素のcobName属性※，nameOfGroupVar属性

Item要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

Array要素のnameOfCountVar属性，nameOfTotalVar属性

AttrItem要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

注※

cobName属性の指定を省略した場合は，elemName属性になります。

指定例1

Array要素に含まれるGroup要素がelemName属性を持つ場合の指定例を次に示します。入力時にnameOfCountVar属性で指定したCOBOLデータ項目の値は，elemName属性で指定した要素の繰り返し回数となります。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table1 [
<!ELEMENT table1 (row)*>
<!ELEMENT row (item1?,item2?)>
<!ELEMENT item1 (#PCDATA)>
<!ELEMENT item2 (#PCDATA)>
]>
<table1/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="table1">
    <Group cobName="table1">
      <Array max="100">
        <Group elemName="row">
          <Item elemName="item1"
                type="alphanumeric" size="10"/>
          <Item elemName="item2"
                type="alphanumeric" size="10"/>
        </Group>
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 table1.
 02 row OCCURS 100.
  03 item1 PIC X(10).
  03 item2 PIC X(10).
 02 row-COUNT PIC 9(9) USAGE COMP.

（入力するXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<table1>
  <row>
    <item2/>
  </row>
  <row>
  </row>
  <row>
    <item1/>
  </row>
</table1>

この場合，Array要素に含まれるGroup要素のelemName属性に要素rowを指定しているので，row-COUNTの値はrow要素の出現回数である3になります。

指定例2

Array要素に含まれるGroup要素がelemName属性を持たない場合の指定例を次に示します。入力時のnameOfCountVar属性で指定したCOBOLデータ項目の値は，集団項目への要素の入力の繰り返し回数となります。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table1 [
<!ELEMENT table1 (row)*>
<!ELEMENT row (item1?,item2?)>
<!ELEMENT item1 (#PCDATA)>
<!ELEMENT item2 (#PCDATA)>
]>
<table1/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="table1">
    <Group cobName="table1">
      <Array max="100">
        <Group cobName="row">
          <Item elemName="item1"
                type="alphanumeric" size="10"/>
          <Item elemName="item2"
                type="alphanumeric" size="10"/>
        </Group>
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 table1.
 02 row OCCURS 100.
  03 item1 PIC X(10).
  03 item2 PIC X(10).
 02 row-COUNT PIC 9(9) USAGE COMP.

（入力するXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<table1>
  <row>
    <item2/>
  </row>
  <row>
  </row>
  <row>
    <item1/>
  </row>
</table1>

この場合，Array要素に含まれるGroup要素がelemName属性を持たないので，集団項目への要素の入力の繰り返し回数がrow-COUNTの値となります。また，2番目のrow要素には要素が含まれないため，この要素は繰り返し回数には含まれません。

要素の入力は，DDFに記述した順序で行われます。この例の場合，要素「item2」を入力した時点で1回目の繰り返しが終了し，要素「item1」を入力した時点で繰り返しが2回となるため，row-COUNTの値は2となります。

指定例3

要素「sentence」の読み込み，または書き込みを繰り返した回数を格納するCOBOLデータ項目の名称を「NumSentences」に指定する例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE book [
  <!ELEMENT book (chapter)*>
  <!ELEMENT chapter (paragraph)*>
  <!ELEMENT paragraph (sentence)*>
  <!ELEMENT sentence (#PCDATA)>
]>
<book/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
   <BaseElement elemName="paragraph">
     <Group cobName="paragraph">
       <Array max="20"
              nameOfCountVar="NumSentences">
         <Item elemName="sentence"
               cobName="a-sentence"
               type="alphanumeric"
               size="1000"/>
       </Array>
     </Group>
   </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 paragraph.
  02 a-sentence PIC X(1000) OCCURS 20.
  02 NumSentences PIC 9(9) USAGE COMP.

指定例4

Array要素の内側のGroup要素にelemName属性が指定されていない場合，入力数を表すデータ項目の値（繰り返し入出力数）は，集団項目へ要素を入力する繰り返し回数となります。例えば，次のようなDTDで要素「item1」を対応づけていない場合，group1要素だけが集団項目に入力されます。その結果，内側のArray要素に対応する繰り返しはオーバフローし，grp0-COUNTの値は1，group1-COUNT(1)の値は4となります。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root ((group1*, item1)*)>
  <!ELEMENT group1 (item2?)>
  <!ELEMENT item1 (#PCDATA)>
  <!ELEMENT item2 (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="root" cobName="BE">
 <Group elemName="root">
 <Array max="4">
  <Group cobName="grp0">
    <Array max="4">
    <Group elemName="group1">
      <Item elemName="item2"/>
    </Group>
    </Array>
  </Group>
 </Array>
 </Group>
</BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 root.
 02 grp0 OCCURS 4.
  03 group1 OCCURS 4.
   04 item2 PIC X(100).
  03 group1-COUNT PIC 9(9) USAGE COMP.
 02 grp0-COUNT PIC 9(9) USAGE COMP.

（入力するXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <group1> <item2>item2a1</item2> </group1>
  <group1> <item2>item2a2</item2> </group1>
  <group1> <item2>item2a3</item2> </group1>
  <group1> <item2>item2a4</item2> </group1>
  <item1/>
  <group1> <item2>item2b1</item2> </group1>
  <group1> <item2>item2b2</item2> </group1>
  <group1> <item2>item2b3</item2> </group1>
  <group1> <item2>item2b4</item2> </group1>
  <item1/>
</root>

入出力データ情報定義機能を使用した場合のnameOfCountVar属性の指定例については，「3.2.4(1)　nameOfTotalVar属性とnameOfCountVar属性の指定例」を参照してください。

(3)　nameOfTotalVar属性

形式

nameOfTotalVar="繰り返し全要素数の名称"

機能

Interface要素またはBaseElement要素のaccessInfo属性に"yes"を指定した場合に，繰り返し全要素数の名称を指定します。

繰り返し全要素数には，Array要素に対応づけたXMLドキュメント内の繰り返し要素の繰り返し回数が格納されます。

規則

nameOfTotalVar属性の指定を省略した場合は，cobName属性（省略時はelemName属性）の名称に"-TOTAL"を追加した名称がXMLアクセス用データ定義に生成されます。

cobName属性（省略時はelemName属性）の名称は，24文字以下で指定する必要があります。24文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfTotalVar属性に指定する名称は，30文字以下で指定する必要があります。30文字を超える名称を指定した場合，COBOL原始プログラムの生成時に警告メッセージが表示されます。

nameOfTotalVar属性には，COBOLデータ項目名として使用できる名称を指定する必要があります。COBOLデータ項目名に使用できない文字を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

accessInfo属性に指定がない場合，またはaccessInfo属性に"no"を指定した場合，nameOfTotalVar属性の指定は無効となります。

accessInfo属性の指定例については，「3.3.4　Array要素」を参照してください。

nameOfTotalVar属性と，次に示す属性とは異なる名称を指定する必要があります。同じ名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

　nameOfTotalVar属性と異なる名称を指定する属性

BaseElement要素のcobName属性※，nameOfBaseVar属性

Group要素のcobName属性※，nameOfGroupVar属性

Item要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

Array要素のnameOfCountVar属性，nameOfTotalVar属性

AttrItem要素のcobName属性※，nameOfLengthVar属性，nameOfFlagVar属性

注※

cobName属性の指定を省略した場合は，elemName属性になります。

入出力データ情報定義機能を使用した場合のnameOfTotalVar属性の指定例については，「3.2.4(1)　nameOfTotalVar属性とnameOfCountVar属性の指定例」を参照してください。

(4)　countVar属性

形式

countVar="yes|no"

機能

繰り返し入出力数に対応するCOBOLデータ項目を出力するかどうかを指定します。

countVar属性に"yes"を指定した場合，繰り返し入出力数を示すデータ項目がXMLアクセス用データ定義に生成されます。countVar属性に"no"を指定した場合，繰り返し入出力数を示すデータ項目は生成されません。

規則

countVar属性の指定を省略した場合は，"yes"が仮定されます。

countVar属性に"yes""no"以外の値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

countVar属性に"yes"を指定した場合，Array要素の直下にあるItem要素のemptyValue属性は無効となります。

countVar属性に"no"を指定した「＋」付きの繰り返し要素で全要素を出力しない場合，CBLXML-WR-Interface-BaseElementアクセスルーチンでステータス７は返りません。

countVar属性に"no"を指定した場合，繰り返し要素の特定の要素を出力するかどうかを決定する規則を次に示します。

Array要素の内側にItem要素がある場合（accessInfo="no"指定時）

繰り返し項目の要素に含まれる項目がemptyValue属性で指定した値に等しければ，その要素は出力されません。

Array要素の内側にItem要素がある場合（accessInfo="yes"指定時）

アクセス情報フラグにCBLXML-FLAG-MISSINGを指定すると，その要素は出力されません。

アクセス情報フラグの設定についての詳細については，「3.6　XMLドキュメント書き込み時に設定する入出力データ情報項目」を参照してください。

Array要素の内側にGroup要素がある場合

Array要素の内側にあるGroup要素が出力されなければ，繰り返し要素の特定の要素は出力されません。

指定例1

countVar属性に"no"を指定したArray要素の内側にItem要素がある場合の例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE book [
  <!ELEMENT book (chapter)*>
  <!ELEMENT chapter (paragraph)*>
  <!ELEMENT paragraph (sentence)*>
  <!ELEMENT sentence (#PCDATA)>
]>
<book/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
   <BaseElement elemName="paragraph">
     <Group cobName="paragraph">
       <Array max="5" countVar="no">
         <Item elemName="sentence"
        cobName="a-sentence" type="alphanumeric"
        size="100" emptyValue="SPACE"/>
       </Array>
     </Group>
   </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 paragraph.
 02 a-sentence PIC X(100) OCCURS 5.

（COBOLデータ項目の値）

MOVE "This is sentence 1." TO a-sentence(1).
MOVE SPACE TO a-sentence(2).
MOVE "This is sentence 3." TO a-sentence(3).
MOVE SPACE TO a-sentence(4).
MOVE SPACE TO a-sentence(5).

（出力ドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>

<book>
 <chapter>
<paragraph>
 <sentence>This is sentence 1.</sentence>
 <sentence>This is sentence 3.</sentence>
</paragraph>
</chapter>
</book>

指定例2

countVar属性に"no"を指定したArray要素の内側にGroup要素がある場合の例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
<!ELEMENT table (person)*>
<!ELEMENT person (name?,address?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT address (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="table">
    <Group cobName="table1">
      <Array max="3" countVar="no">
        <Group elemName="person">
          <Item elemName="name" cobName="name1"
          emptyValue="SPACE"/>
          <Item elemName="address"
          cobName="address1" emptyValue="SPACE"/>
        </Group>
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 table1.
 02 person OCCURS 3.
  03 name1 PIC X(100).
  03 address1 PIC X(100).

（COBOLデータ項目の値）

          MOVE 'name-1' TO name1(1).
          MOVE 'address-1' TO address1(1).
          MOVE SPACE TO name1(2).
          MOVE SPACE TO address1(2).
          MOVE 'name-3' TO name1(3).
          MOVE SPACE TO address1(3).

（出力ドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<table>
  <person>
    <name>name-1</name>
    <address>address-1</address>
  </person>
  <person>
    <name>name-3</name>
  </person>
</table>

2.3.6　AttrItem要素

AttrItem要素は，XML要素の属性をCOBOLデータ項目に対応づけます。

AttrItem要素は，要素内容がEMPTYと宣言された要素に対しても指定できます。要素内容がEMPTYである要素に対して指定した場合，属性に対するデータ項目だけが生成されます。

形式

<AttrItem elemName="XMLの要素名"

attrName="属性名"

〔cobName="AttrItem要素に対応する名称"〕

〔type="type属性値"〕

〔size="けた数"〕

〔fractionalDigits="けた数"〕

〔emptyValue="type属性値に対応したCOBOLの定数"〕

〔sign="符号種別"〕

〔trim="データ項目の整形の有無"〕

〔nameOfFlagVar="アクセス情報フラグの名称"〕

〔nameOfLengthVar="データ長の名称"〕

〔emptyContentValue="type属性値に対応したCOBOLの定数"〕

〔invalidCharValue="type属性値に対応したCOBOLの定数"〕

〔overflowValue="type属性値に対応したCOBOLの定数"〕

/>

規則

DTDの属性に指定されたデフォルト値より小さい値をAttrItem要素のsize属性に指定した場合，COBOL原始プログラムの生成時にエラーとなります。

DTDの属性に指定できるデフォルト値の最大値は，英数字項目および日本語項目の場合は160文字，数字項目の場合は18けた（符号，小数点は含まない）です。最大値を超える値を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (sale)*>
  <!ELEMENT sale (brand, style)>
  <!ATTLIST sale color (black | white | brown)
   #REQUIRED >
  <!ATTLIST style age (child | adult) #REQUIRED >
  <!ELEMENT brand (#PCDATA)>
  <!ELEMENT style (#PCDATA)>
]>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="sale">
    <Group elemName="sale">
      <AttrItem elemName="sale" attrName="color"
         cobName="colorname" type="alphanumeric"
          size="10"/>
      <Item elemName="style" size="100"/>
      <AttrItem elemName="style" attrName="age"
          type="alphanumeric" size="5"/>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 sale.
  02 colorname PIC X(10).
  02 style PIC X(100).
  02 style-age PIC X(5).

(1)　elemName属性

形式

elemName="XMLの要素名"

機能

AttrItem要素で対応づける属性が関連づけられているXML要素の名称を指定します。

elemName属性の規則，指定例については，「2.3.4(1)　elemName属性」を参照してください。

(2)　attrName属性

形式

attrName="属性名"

機能

AttrItem要素で対応づけるXML要素の属性の名称を指定します。

規則

AttrItem要素に指定する属性の名称は，elemName属性で指定した要素の属性としてDTD内で宣言されている必要があります。

cobName属性を省略した場合，elemName属性の値とattrName属性の値を'-'（ハイフン）でつないだ名称がCOBOLデータ項目名になります。

elemName属性値の長さとattrName属性値の長さの合計は29文字以下でなければなりません。

(3)　cobName属性

形式

cobName="COBOLデータ項目名"

機能

attrName属性の値の代わりにCOBOLデータ項目の名称を指定します。attrName属性に指定するXML要素の名称が，COBOLデータ項目名に使用できない場合などに指定します。

規則

二つ以上の異なる属性を，同じCOBOLデータ項目に対応づけられません。

cobName属性の指定例については，「2.3.4(2)　cobName属性」を参照してください。

(4)　type属性

形式

type="type属性値"

機能

AttrItem要素に対応するCOBOLデータ項目の形式を指定します。

type属性に指定できる値と，type属性の値に対応するCOBOLデータ項目を表 2-11に示します。

表2‒11　type属性に指定できる値

type属性の値

COBOLデータ項目

alphanumeric

英数字項目

national

日本語項目

numeric

数字項目（外部10進形式）

規則

type属性を省略した場合，type="alphanumeric"が仮定されます。

type属性に表 2-11に示したtype属性値以外を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

type属性の指定例については，「2.3.4(3)　type属性」を参照してください。

(5)　その他の属性

次に示す属性の形式，機能，規則，指定例については，「2.3.4　Item要素（要素の対応づけの定義）」を参照してください。ただし，Item要素と記載されている部分はAttrItem要素と読み替えてください。

size属性

fractionalDigits属性

emptyValue属性

sign属性

trim属性

nameOfFlagVar属性

nameOfLengthVar属性

emptyContentValue属性

invalidCharValue属性

overflowValue属性

3　入出力データ情報定義機能

入出力データ情報定義機能を使用すると，XMLデータの入出力状態を取得または定義できます。

この章では，入出力データ情報定義機能とDDL要素について説明します。

3.1　入出力データ情報定義機能の使用方法

入出力データ情報定義機能を使用すると，入力したXML要素や属性の入力状態を取得できます。また，XML要素の出力状態を設定することもできます。

使用方法

Interface要素の下位のすべての要素で入出力データ情報定義機能を使用する場合は，Interface要素のaccessInfo属性に"yes"を指定します。また，BaseElement要素ごとに入出力データ情報定義機能を使用するかどうかを指定する場合は，BaseElement要素のaccessInfo属性に"yes"または"no"を指定します。

Interface要素のaccessInfo属性の指定例については「2.3.1(2)　accessInfo属性」を，BaseElement要素のaccessInfo属性の指定例については「2.3.2(3)　accessInfo属性」を参照してください。

例

入出力データ情報定義機能を使用した場合の生成例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01, group01)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT group01 (item02, item03)*>
  <!ELEMENT item02  (#PCDATA)>
  <!ELEMENT item03  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE"
    accessInfo="yes">
  <BaseElement elemName="root">
    <Group cobName="root">
      <Item elemName="item01"
            type="alphanumeric" size="10" />
      <Array max="10">
        <Group cobName="group01">
          <Item elemName="item02"
                type="alphanumeric" size="10" />
          <Item elemName="item03"
                type="alphanumeric" size="10" />
        </Group>
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.       …1.
  02 root.            …2.
   03 item01 PIC X(10).
   03 group01 OCCURS 10.
    04 item02 PIC X(10).
    04 item03 PIC X(10).
* Access Information              …3.
  02 root-FLG PIC 1(32) USAGE BIT.
  02 root-GROUP.
   03 item01-FLG PIC 1(32) USAGE BIT.
   03 item01-LEN PIC 9(9) COMP.
   03 group01-TOTAL PIC 9(9) COMP.
   03 group01-COUNT PIC 9(9) COMP.
   03 group01-GROUP OCCURS 10.
    04 item02-FLG PIC 1(32) USAGE BIT.
    04 item02-LEN PIC 9(9) COMP.
    04 item03-FLG PIC 1(32) USAGE BIT.
    04 item03-LEN PIC 9(9) COMP.

（XMLアクセスルーチンを呼び出すCOBOLプログラム）

         :
    CALL 'CBLXML-WR-EXAMPLE-root'
         USING XML-POINTER root-BASE        …4.
        RETURNING CBLXML-RETURN-CODE.
         :

（説明）

入出力データ情報定義機能使用時の先頭集団項目名を表します。アクセスルーチンの引数に指定します。

入出力するXML要素や属性に対応したデータ項目です。この例では，集団項目「root」と「root」に含まれる下位項目が対応したデータ項目となります。

コメント行* Access Information以降は，入出力するXML要素に対応した入出力データ情報項目となります。

XMLアクセス用データ定義を指定します。

3.2　入出力データ情報項目

入出力データ情報定義機能を使用した場合，入出力するXML要素（COBOLデータ項目）に対応する入出力データ情報項目が生成されます。

入出力データ情報項目の内容を，表 3-1に示します。

表3‒1　入出力データ情報項目の内容

入出力データ情報項目

機能

アクセス情報フラグ

入力したXMLドキュメントの要素，属性の詳細な情報を取得する。出力するXMLドキュメントの要素，属性の状態を設定する。

データ長

入力したXMLドキュメントの要素，属性のデータ長を取得する。出力するXMLドキュメントの要素，属性の出力長を設定する。

繰り返し全要素数

XMLドキュメントの要素，属性の繰り返し要素の数を取得する。

繰り返し入出力数

XMLドキュメントから入力した繰り返し要素の数を取得する。XMLドキュメントへ出力する繰り返し要素の数を設定する。

次に，入出力データ情報項目が生成されるDDLの要素を表 3-2に示します。

表3‒2　入出力データ情報項目とDDLの要素の対応づけ

入出力データ情報項目

項目が生成されるDDLの要素

アクセス情報フラグ

Group要素，Item要素，AttrItem要素

データ長

Item要素，AttrItem要素

繰り返し全要素数

Array要素

繰り返し入出力数

Array要素

次に，入出力データ情報項目中の各項目の詳細について説明します。

3.2.1　アクセス情報フラグ

アクセス情報フラグには，入力した要素および属性の状態が格納されます。また，出力時にアクセス情報フラグを設定すると，要素および属性の出力状態を設定できます。アクセス情報フラグは32けたのブール項目として，cblxmlコマンドが生成するXMLアクセス用データ定義に生成されます。

アクセス情報フラグに対応するCOBOLのデータ項目の名称

Group要素，Item要素，またはAttrItem要素のnameOfFlagVar属性に指定した名称が，アクセス情報フラグに対応するCOBOLのデータ項目の名称になります。

nameOfFlagVar属性の指定を省略した場合は，cobName属性（省略時はelemName属性）の名称に"-FLG"を追加した名称が，アクセス情報フラグに対応するCOBOLのデータ項目の名称になります。

次に，アクセス情報フラグの値について，説明します。

(1)　入力時のアクセス情報フラグ

入力時に設定されるアクセス情報フラグの詳細を，表 3-3に示します。なお，XMLドキュメント入力時には，複数のフラグ値が設定される場合があります。

表3‒3　入力時のアクセス情報フラグ

登録集原文"CBLXMLRC.cbl"の定義名（78レベル）

アクセス情報フラグ値

アクセス情報フラグの意味

CBLXML-FLAG-MISSING

B'100000〜0'

要素または属性がない。

CBLXML-FLAG-EMPTY

B'010000〜0'

要素または属性の値が空である。※1

CBLXML-FLAG-INVAL-CHAR

B'001000〜0'

要素または属性の値にItem要素のtype属性に指定したCOBOLデータ形式で無効な文字が含まれている。※2

CBLXML-FLAG-OVERFLOW

B'000100〜0'

要素，属性の値の長さがItem要素のsize属性に指定した値を超えている。※3

注※1

開始タグと終了タグ間の内容が空白文字（スペース，タブおよび改行）だけの場合でも空要素とみなしません。空要素とみなすのは，空タグ，および開始タグと終了タグ間の内容がない（<Item></Item>）場合だけです。

注※2

無効な文字と判定される条件を次に示します。

type属性に"national"を指定して，COBOLデータ項目に1バイト文字を入力した場合

（不当な1バイト文字は，「[図データ]」（げた記号）に置き換えられます。「[図データ]」（げた記号）は2バイト文字であるため，size属性で指定した長さを超えてCBLXML-FLAG-OVERFLOWが同時に設定される場合があります）

不当文字については「9.2 入出力時に不当な文字をチェックする機能」の「表9-3 入力時にチェックする文字」を参照してください。

type属性に"numeric"，"packed"，"binary"，"float"，または"double"を指定して，COBOLデータ項目に数値以外の値を入力した場合

sign属性に"unsigned"を指定して，負値を入力した場合

（ただし，-0は+0が仮定されるため，このフラグは設定されません）

注※3

要素，属性の値の長さとItem要素のsize属性に指定した値を比較する場合の条件を次に示します。

数字項目（"numeric"，"packed"，"binary"）については，数値の左側の0を削除したけた数とsize属性のけた数を比較して大小を判定します。ただし，符号はけた数に含みません。

浮動小数点数（"float"，"double"）については，システムで定義した浮動小数点数の絶対値を超えた場合にsize属性の値を超えたと判定されます。システムで定義した浮動小数点数の絶対値については，ご使用のシステムのマニュアルを参照してください。

(2)　出力時のアクセス情報フラグ

出力時に設定するアクセス情報フラグの詳細を表 3-4に示します。

表3‒4　出力時のアクセス情報フラグ

登録集原文"CBLXMLRC.cbl"の定義名（78レベル）

アクセス情報フラグ値

アクセス情報フラグの意味

CBLXML-FLAG-OK

B'00000〜0'

要素または属性を出力する。

CBLXML-FLAG-MISSING

B'10000〜0'

要素を出力しない。※

CBLXML-FLAG-EMPTY

B'01000〜0'

空要素を出力する。

注※

対応づけた要素が省略できる場合，またはArray要素の直下にItem要素を対応づけた場合は，要素を出力しません。ただし，次の場合は要素，属性，または空要素を出力します。

対応づけた要素が省略できない要素である場合，または対応づけた属性に#REQUIREDを指定した場合

（CBLXML-FLAG-OKが仮定されて，要素を出力します）

CBLXML-FLAG-MISSINGとCBLXML-FLAG-EMPTYが同時に指定されている場合

（CBLXML-FLAG-EMPTYが仮定されて，空要素を出力します）

(3)　nameOfFlagVar属性の指定例

入出力データ情報定義機能を使用した場合のnameOfFlagVar属性の指定例を次に示します。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (group01)>
  <!ELEMENT group01 (item01)>
  <!ELEMENT item01  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE" accessInfo="yes">
  <BaseElement elemName="group01">
    <Group elemName="group01"
           nameOfFlagVar="G01-FLAG">
      <Item elemName="item01"
            nameOfFlagVar="I01-FLAG"
            type="alphanumeric" size="10"/>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 group01-BASE.
  02 group01.
   03 item01 PIC X(10).
* Access Information.
  02 G01-FLAG PIC 1(32) USAGE BIT.
  02 group01-GROUP.
   03 I01-FLAG PIC 1(32) USAGE BIT.
   03 item01-LEN PIC 9(9) USAGE COMP.

（COBOL原始プログラムでのアクセス情報フラグの判定例）

         :
01 CHECK-FLAG PIC 1(32) BIT.
         :
    COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-MISSING.
    IF CHECK-FLAG = CBLXML-FLAG-MISSING  THEN
       DISPLAY 'CBLXML-FLAG-MISSING'
    END-IF.
    COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-EMPTY.
    IF CHECK-FLAG = CBLXML-FLAG-EMPTY  THEN
       DISPLAY 'CBLXML-FLAG-EMPTY'
    END-IF.
    COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-INVAL-CHAR.
    IF CHECK-FLAG = CBLXML-FLAG-INVAL-CHAR  THEN
       DISPLAY 'CBLXML-FLAG-INVAL-CHAR'
    END-IF.
    COMPUTE CHECK-FLAG = I01-FLAG AND CBLXML-FLAG-OVERFLOW.
    IF CHECK-FLAG = CBLXML-FLAG-OVERFLOW  THEN
       DISPLAY 'CBLXML-FLAG-OVERFLOW'
    END-IF.
         :

3.2.2　データ長

データ長には，XMLドキュメントの入力時に要素に対応したデータ長が格納されます。また，出力時にデータ長を設定すると，出力する要素の出力長を設定できます。データ長は9けたの2進形式の数字項目として，cblxmlコマンドが生成するXMLアクセス用データ定義に生成されます。

データ長のCOBOLデータ項目名称

Item要素またはAttrItem要素のnameOfLengthVar属性に指定した名称が，データ長のCOBOLデータ項目の名称になります。

nameOfLengthVar属性の指定がない場合はcobName属性（省略時はelemName属性）の名称に"-LEN"を追加した名称が，データ長のCOBOLデータ項目名称になります。

(1)　入力時のデータ長

XMLドキュメント入力時に，データ長に格納される値を表3-5に示します。

表3‒5　入力時のデータ長

XMLドキュメント

データ長に入力される値

要素（Item要素）

XMLドキュメント内にある要素の内容のバイト数

属性（AttrItem要素）

XMLドキュメント内にある属性値のバイト数

注

実体参照がある場合の入力時のデータ長は，実体参照に対応する文字列へ変換された値の長さになります。

(2)　出力時のデータ長

XMLドキュメント出力時に，データ長に設定する値を表 3-6に示します。

表3‒6　出力時のデータ長

XMLドキュメント

データ長に設定する値

要素（Item要素）

要素の内容に出力するデータのバイト数

属性（AttrItem要素）

属性値に出力するデータのバイト数

注

XMLドキュメント出力時に0またはsize属性で指定した値よりも大きいバイト数をデータ長に指定した場合，size属性で指定したけた数が最大長として出力されます。このとき，type属性の指定に関係なく，左端からの長さが出力されます。

日本語項目の場合，出力される文字の長さはデータ長に格納される値のバイト数の半分になります。端数は切り捨てになります。

数字項目の場合，データ長には0が仮定されます。データ長に0が指定されると，size属性で指定したけた数で出力されます。

(3)　nameOfLengthVar属性の指定例

入出力データ情報定義機能を使用した場合のnameOfLengthVar属性の指定例を次に示します。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01)>
  <!ELEMENT item01  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE" accessInfo="yes">
  <BaseElement elemName="item01">
    <Item elemName="item01" nameOfLengthVar="I01L"
          type="alphanumeric" size="10"/>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

  01 item01-BASE.
   02 item01 PIC X(10).
* Access Information
   02 item01-FLAG PIC 1(32) USAGE BIT.
   02 I01L PIC 9(9) USAGE COMP.

3.2.3　繰り返し全要素数

繰り返し全要素数には，Array要素に対応づけた繰り返し要素が，実際に入力XMLドキュメントに出現した回数が格納されます。繰り返し全要素数は9けたの2進形式の数字項目として，cblxmlコマンドが生成するXMLアクセス用データ定義に生成されます。

繰り返し全要素数のCOBOLデータ項目の名称

Array要素のnameOfTotalVar属性に指定した名称が，繰り返し全要素数のCOBOLデータ項目の名称になります。

nameOfTotalVar属性の指定を省略した場合はcobName属性（省略時はelemName属性）の名称に"-TOTAL"を追加した名称が，繰り返し全要素数のCOBOLデータ項目の名称になります。

nameOfTotalVar属性の例については，「3.2.4(1)　nameOfTotalVar属性とnameOfCountVar属性の指定例」を参照してください。

3.2.4　繰り返し入出力数

繰り返し入出力数には，Array要素に対応づけた繰り返し要素を実際に入力した繰り返し回数が格納されます。繰り返し入出力数は9けたの2進形式の数字項目として，cblxmlコマンドが生成するXMLアクセス用データ定義に生成されます。

繰り返し入出力数のCOBOLデータ項目名称

Array要素のnameOfCountVar属性に指定した名称が，繰り返し入出力数のCOBOLデータ項目名称になります。

nameOfCountVar属性の指定がない場合は，cobName属性（省略時はelemName属性）の名称に"-COUNT"を追加した名称が，繰り返し入出力数のCOBOLデータ項目名称になります。

(1)　nameOfTotalVar属性とnameOfCountVar属性の指定例

入出力データ情報定義機能を使用した場合のnameOfTotalVar属性とnameOfCountVar属性の指定例を次に示します。

指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (group01*)>
  <!ELEMENT group01 (item01, item02)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT item02  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" accessInfo="yes">
    <Group cobName="root">
      <Array max="10" nameOfCountVar="ARY-CNT"
             nameOfTotalVar="ARY-TOL">
        <Group cobName="group1">
          <Item elemName="item01" type="alphanumeric"
                size="10" />
          <Item elemName="item02" type="alphanumeric"
                size="10" />
        </Group>
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.
  02 root.
   03 group01 OCCURS 10.
    04 item01 PIC X(10).
    04 item02 PIC X(10).
* Access Information
  02 root-GROUP.
   03 ARY-TOL PIC 9(9) USAGE COMP.
   03 ARY-CNT PIC 9(9) USAGE COMP.
   03 group01-GROUP OCCURS 10.
    04 item01-FLG PIC 1(32) USAGE BIT.
    04 item01-LEN PIC 9(9) USAGE COMP.
    04 item02-FLG PIC 1(32) USAGE BIT.
    04 item02-LEN PIC 9(9) USAGE COMP.

3.3　入出力データ情報定義とDDLの対応づけ

入出力データ情報定義機能を使用する場合の，DDLの各要素の規則と指定例について説明します。

3.3.1　BaseElement要素

入出力データ情報定義機能を使用した場合，XMLアクセス用データ定義の名称としてBaseElement要素に対応した01レベルの集団項目が生成されます。

集団項目名は，BaseElement要素のcobName属性に指定した名称（省略時はelemName属性）に"-BASE"を追加した名称になります。

(1)　規則

"-BASE"を追加した名称は，一意である必要があります。一意でない名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

(2)　指定例

BaseElement要素に対応した集団項目の下位レベルには，次に示す入出力データ項目と入出力データ項目に対応する入出力データ情報項目が生成されます。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01, item02)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT item02  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" accessInfo="yes">
    <Group elemName="root">
      <Item elemName="item01" type="alphanumeric"
            size="10" />
      <Item elemName="item02" type="alphanumeric"
            size="10" />
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.
  02 root.
   03 item01 PIC X(10).
   03 item02 PIC X(10).
* Access Information
  02 root-FLG PIC 1(32) USAGE BIT.
  02 root-GROUP.
   03 item01-FLG PIC 1(32) USAGE BIT.
   03 item01-LEN PIC 9(9) USAGE COMP.
   03 item02-FLG PIC 1(32) USAGE BIT.
   03 item02-LEN PIC 9(9) USAGE COMP.

3.3.2　Group要素

入出力データ情報定義機能を使用した場合，入出力データ情報項目の名称としてGroup要素に対応した集団項目が生成されます。

集団項目名は，Group要素のcobName属性に指定した名称（省略時はelemName属性）に"-GROUP"を追加した名称になります。

Group要素にelemName属性を使って要素を対応づけている場合は，Group要素に対してアクセス情報フラグが生成されます。Group要素にcobName属性だけを指定している場合は，アクセス情報フラグが生成されません。

(1)　規則

"-GROUP"を追加した名称は，一意である必要があります。一意でない名称を指定した場合，COBOL原始プログラムの生成時にエラーとなります。

(2)　指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (group01, group02)>
  <!ELEMENT group01 (item01)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT group02 (item02)>
  <!ELEMENT item02  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="group01" accessInfo="yes">
    <Group elemName="group01">
      <Item elemName="item01" type="alphanumeric"
            size="10" />
    </Group>
  </BaseElement>
  <BaseElement elemName ="group02" accessInfo="yes">
    <Group cobName="group02">
      <Item elemName="item02" type="alphanumeric"
            size="10" />
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 group01-BASE.
  02 group01.
   03 item01 PIC X(10).
* Access Information
  02 group01-FLG PIC 1(32) USAGE BIT.        …1.
  02 group01-GROUP.
   03 item01-FLG PIC 1(32) USAGE BIT.
   03 item01-LEN PIC 9(9) USAGE COMP.
 01 group02-BASE.
  02 group02.
   03 item02 PIC X(10).
* Access Information
  02 group02-GROUP.
   03 item02-FLG PIC 1(32) USAGE BIT.
   03 item02-LEN PIC 9(9) USAGE COMP.

（説明）

Group要素のアクセス情報フラグが生成されるのは，elemName属性を指定した場合だけです。

3.3.3　Item要素

入出力データ情報定義機能を使用した場合，Item要素に対応したアクセス情報フラグとデータ長が生成されます。

(1)　指定例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE root [
  <!ELEMENT root (item01)>
  <!ELEMENT item01  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" accessInfo="yes">
    <Item elemName="item01" type="alphanumeric"
          size="10" />
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.
  02 item01 PIC X(10).
* Access Information
  02 item01-FLG PIC 1(32) USAGE BIT.
  02 item01-LEN PIC 9(9) USAGE COMP.

3.3.4　Array要素

入出力データ情報定義機能を使用した場合，繰り返し項目に対応した繰り返し全要素数と繰り返し入出力数が生成されます。

繰り返し要素が単一（Item要素）の場合，Item要素に対応するアクセス情報フラグとデータ長にOCCURS句が付けられます。繰り返し要素が集団（Group要素）の場合は，Group要素に対応する集団項目にOCCURS句が付けられます。

(1)　繰り返し要素が単一の場合

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item01*)>
  <!ELEMENT item01  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" accessInfo="yes">
    <Group cobName="root">
      <Array max="10">
        <Item elemName="item01" type="alphanumeric"
              size="10" />
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.
  02 root.
   03 item01 PIC X(10) OCCURS 10.
* Access Information
  02 root-GROUP.
   03 item01-TOTAL PIC 9(9) USAGE COMP.
   03 item01-COUNT PIC 9(9) USAGE COMP.
   03 item01-FLG PIC 1(32) USAGE BIT OCCURS 10.
   03 item01-LEN PIC 9(9) USAGE COMP OCCURS 10.

(2)　繰り返し要素が集団の場合

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (group01*)>
  <!ELEMENT group01 (item01, item02)>
  <!ELEMENT item01  (#PCDATA)>
  <!ELEMENT item02  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" accessInfo="yes">
    <Group cobName="root">
      <Array max="10">
        <Group cobName="group1">
          <Item elemName="item01" type="alphanumeric"
                size="10" />
          <Item elemName="item02" type="alphanumeric"
                size="10" />
        </Group>
      </Array>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

 01 root-BASE.
  02 root.
   03 group01 OCCURS 10.
    04 item01 PIC X(10).
    04 item02 PIC X(10).
* Access Information
  02 root-GROUP.
   03 group01-TOTAL PIC 9(9) USAGE COMP.
   03 group01-COUNT PIC 9(9) USAGE COMP.
   03 group01-GROUP OCCURS 10.
    04 item01-FLG PIC 1(32) USAGE BIT.
    04 item01-LEN PIC 9(9) USAGE COMP.
    04 item02-FLG PIC 1(32) USAGE BIT.
    04 item02-LEN PIC 9(9) USAGE COMP.

3.4　XMLアクセスルーチン使用時の注意事項

入出力データ情報定義機能を使用した場合に，XMLアクセスルーチンを使用するときに注意が必要な点について説明します。

01レベルの集団項目名を指定する場合の注意事項

CBLXML-RD-Interface-BaseElementアクセスルーチン，CBLXML-WR-Interface-BaseElementアクセスルーチンに登録集原文での01レベルの集団項目名を指定する場合，BaseElement要素の名称に"-BASE"を追加した名称またはnameOfBaseVar属性で指定した名称を指定してください。

致命的なエラーステータスが返る場合の注意事項

XMLドキュメントの入力時に，CBLXML-RD-Interface-BaseElementアクセスルーチンが致命的なエラーステータスを返した場合は，入出力データ情報項目の値は保証しません。

3.5　XMLドキュメント読み込み時に設定される入出力データ情報項目

入出力データ情報定義機能を使用すると，XMLドキュメント入力時に入力した要素および属性の入力状態が入出力データ情報項目に設定されます。

DDLの各要素で設定される入出力データ情報項目の意味を表 3-7に示します。

表3‒7　XMLドキュメント読み込み時の入出力データ情報項目の値

入出力データ情報項目

Array要素

Group要素

Item要素

AttrItem要素

アクセス情報フラグ

−

要素の入力状態によって設定される値が異なる。詳細については，表 3-8を参照すること。

要素の入力状態によって設定される値が異なる。詳細については，表 3-8を参照すること。

要素の入力状態によって設定される値が異なる。詳細については，表 3-8を参照すること。

データ長

−

−

要素の値長が設定される（XMLドキュメント内の要素の値長）。

属性値の長さが設定される（XMLドキュメント内の属性の値長）。

繰り返し全要素数※

XMLドキュメントの繰り返し要素の数が設定される。

−

−

−

繰り返し入出力数※

入力した繰り返し要素の値の数が設定される。

−

−

−

（凡例）

−：値が設定されません。

注※

XMLドキュメントの繰り返し項目のすべてを入力していない場合，繰り返し全要素数が繰り返し入出力数より大きくなります。

次に，アクセス情報フラグについて説明します。設定されたアクセス情報フラグの種類からDDLの各要素の入力状態が判断できます。アクセス情報フラグが示すDDLの各要素の入力状態を表 3-8に示します。

表3‒8　XMLドキュメント読み込み時のアクセス情報フラグの値

アクセス情報フラグ

Array要素

Group要素

Item要素

AttrItem要素

B'10000〜0'

（CBLXML-FLAG-MISSING）

−

要素と対応づいていて，Group要素がない場合に設定される。

要素がない場合または上位の要素が空要素の場合に設定される。

属性がない場合または上位の要素が空要素の場合に設定される。

B'01000〜0'

（CBLXML-FLAG-EMPTY）

−

−

要素が空の場合に設定される。※1

例：<X></X>，または<X/>

属性値が空の場合に設定される。※2

例：name=""

B'00100〜0'

（CBLXML-FLAG-INVAL-CHAR）

−

−

要素の値に不当な文字が含まれる場合に設定される。

属性値に不当な文字が含まれる場合に設定される。

B'00010〜0'

（CBLXML-FLAG-OVERFLOW）

−

−

要素の値長がCOBOLデータ項目より長い場合に設定される。

属性値の長さがCOBOLデータ項目より長い場合に設定される。

（凡例）

−：値が設定されません。

注※1

開始タグと終了タグ間の内容が空白文字（スペース，タブおよび改行）だけの場合でも空要素とみなされません。空要素とみなされるのは空タグの場合，および開始タグと終了タグ間の内容がない（<Item></Item>）場合です。

注※2

属性値の内容が空白文字（スペース，タブおよび改行）だけの場合でも空要素とみなされません。空要素とみなされるのは，属性値がない（name=""）場合です。

3.6　XMLドキュメント書き込み時に設定する入出力データ情報項目

入出力データ情報項目の値を設定することで，XMLドキュメント出力時に要素の出力状態を設定できます。

入出力データ情報項目が示すDDLの各要素の出力状態を表 3-9に示します。

表3‒9　XMLドキュメント書き込み時の入出力データ情報項目の値

入出力データ情報項目

Array要素

Group要素

Item要素

AttrItem要素

アクセス情報フラグ

×

要素の出力状態や出力の有無を設定する。詳細については，表 3-10を参照すること。

要素の出力状態や出力の有無を設定する。詳細については，表 3-10を参照すること。

要素の出力状態や出力の有無を設定する。詳細については，表 3-10を参照すること。

データ長

×

×

出力する要素の値長を指定する。※

出力する属性の値長を指定する。※

繰り返し全要素数

無視する。

×

×

×

繰り返し入出力数

出力する繰り返し要素数を指定する。

×

×

×

（凡例）

×：値を設定できません。

注※

0またはsize属性で指定した値よりも大きい値を指定した場合は，size属性での最大値が出力されます。

type="numeric"を指定した場合は，データ長の指定は無視されます。

次に，アクセス情報フラグについて説明します。アクセス情報フラグを設定することで，DDLの各要素の出力状態をどのように設定できるかを表 3-10に示します。

表3‒10　XMLドキュメント書き込み時のアクセス情報フラグの値

アクセス情報フラグ

Array要素

Group要素

Item要素

AttrItem要素

B'00000〜0'

（CBLXML-FLAG-OK）

×

Group要素を出力する。

Item要素を出力する。

属性を出力する。

B'10000〜0'

（CBLXML-FLAG-MISSING）

×

省略できるGroup要素の場合，Group要素を出力しない。

省略できる要素の場合，要素を出力しない。※

属性に#REQUIREDを指定していない場合，属性を出力しない。

B'01000〜0'

（CBLXML-FLAG-EMPTY）

×

無視する。

空要素を出力する。

例：<xyz/>

属性値が空の状態で出力する。

例：name=""

（凡例）

×：値を設定できません。

注※

countVar属性に"no"を指定したArray要素の直下に繰り返し要素をItem要素で対応づけた場合は，省略できない要素であっても出力されません。

4　XMLアクセスルーチンとXMLアクセス用データ定義の生成

cblxmlコマンドは，XMLドキュメントのDTDとユーザが作成したDDFを基に，COBOLプログラムからXMLドキュメントにアクセスするために必要なXMLアクセスルーチン，およびXMLアクセス用データ定義を生成します。

XMLアクセスルーチンは，COBOLプログラムからXMLドキュメントにアクセスするときに呼び出す副プログラムです。

XMLアクセス用データ定義は，XMLドキュメントの各要素に対応づけられたCOBOLのデータ項目の定義です。

また，XMLアクセスルーチンは，ステータスコードとエラー定義名称を対応づけるためにXMLアクセス用ステータス定義と呼ばれる登録集原文を使用します。

この章では，cblxmlコマンドの使用方法と，XMLアクセスルーチン，XMLアクセス用データ定義，およびXMLアクセス用ステータス定義の概要について説明します。

4.1　cblxmlコマンド

cblxmlコマンドは，XMLドキュメントの文書型定義（DTD）とユーザが作成したデータ定義ファイル（DDF）を基に，COBOLプログラムからXMLドキュメントにアクセスするために必要な次のソースファイルを生成します。

XMLアクセスルーチン

COBOLプログラムからXMLドキュメントにアクセスするときに呼び出す副プログラムです。詳細については，「4.2　生成されるXMLアクセスルーチン」を参照してください。

XMLアクセス用データ定義

XMLドキュメントの各要素に対応づけられたCOBOLのデータ項目の定義です。詳細については，「4.3　生成されるXMLアクセス用データ定義」を参照してください。

なお，DTDについては「2.1　文書型定義（DTD）の概要」を，DDFについては「2.2　データ定義ファイル（DDF）の作成」を参照してください。

cblxmlコマンドの概要を図4-1に示します。

図4‒1　cblxmlコマンドの概要

4.1.1　cblxmlコマンドの使用方法

(1)　cblxmlコマンドの実行に必要な環境変数の設定

cblxmlコマンドを実行する場合は，次に示す環境変数を設定しておく必要があります。

（UNIXの場合）

システム環境変数PATH

cblxmlコマンドの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/bin

システム環境変数LIBPATH（AIXの場合）

共用ライブラリの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/lib

システム環境変数LD_LIBRARY_PATH（Linuxの場合）

共用ライブラリの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/lib:COBOL2002のインストールディレクトリ/lib/cblxml

システム環境変数NLSPATH

XMLパーサが出力するメッセージのパスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/lib/cblxml/cat/%L/%N

（例）

sh（Bシェル）の場合

NLSPATH=/opt/HILNGcbl2k/lib/cblxml/cat/%L/%N
export NLSPATH

システム環境変数LANG

　メッセージの言語種別を設定します。次の値を指定してください。

　AIXの場合

　　Ja_JP

　　ja_JP

　Linuxの場合

　　ja_JP.UTF-8

文字コードについては，「付録G.2　文字コード」を参照してください。

注

COBOL2002のインストールディレクトリは，OSによって異なります。

AIX(32)，Linux(x86)の場合

　/opt/HILNGcbl2k

AIX(64)，Linux(x64)の場合

　/opt/HILNGcbl2k64

（Windowsの場合）

システム環境変数PATH

cblxmlコマンドの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールフォルダ¥bin

システム環境変数LIB

共用ライブラリの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールフォルダ¥lib

（例）

set LIB=COBOL2002のインストールフォルダ¥lib

(2)　cblxmlコマンドの実行

cblxmlコマンドの実行方法について説明します。

形式

cblxml DDFファイル名 -dtd DTDファイル名
       -o 生成するCOBOL副プログラムのファイル名
       〔-catalog カタログファイル名〕
       〔-nopeconv〕 〔-chkovflow〕 〔-chkchar〕
       〔-gen 生成アクセスルーチンキーワード〕
       〔-outencoding エンコーディングキーワード〕
       〔-unisrc〕〔-bigendianbin〕〔-bigendianfloat〕

DDFファイル名

DTDに対応して作成したDDFファイル名を指定します。DDFファイル名の拡張子は「.cxd」でなければなりません。

DDFファイルでは，使用する文字エンコーディングをXML宣言で指定します。使用できる文字エンコーディングについては，「付録G.1　XMLドキュメントの文字エンコーディング」を参照してください。使用できない文字エンコーディングを指定した場合，動作は保証しません。

DDFファイルに文字エンコーディングの指定がない場合，「UTF-8」を仮定します。

-dtd DTDファイル名

COBOLプログラムのアクセス対象とするXMLドキュメントのDTDファイル名を指定します。DTDファイル名の拡張子は「.xml」または「.dtd」※でなければなりません。

DTDファイルでは，使用する文字エンコーディングをXML宣言で指定します。使用できる文字エンコーディングについては，「付録G.1　XMLドキュメントの文字エンコーディング」を参照してください。使用できない文字エンコーディングを指定した場合，動作は保証しません。

DTDファイルに文字エンコーディングの指定がない場合，「UTF-8」を仮定します。

注※

　「.dtd」はWindowsの場合だけで有効です。

-o 生成するCOBOL副プログラムのファイル名

cblxmlコマンドが出力するXMLアクセスルーチンのファイル名を指定します。指定するファイル名の拡張子は，「.cbl」でなければなりません。

なお，cblxmlコマンドが出力するXMLアクセス用データ定義のファイル名は，XMLアクセスルーチンのファイル名の末尾に「-COPY」を付けた名称となります。

出力するCOBOL原始プログラムは固定形式正書法で出力されます。

-catalog カタログファイル名

公開識別子を使用するためのカタログファイル名を指定します。拡張子は「.cxc」でなければなりません。

詳細については，「9.3.3　公開識別子が指定されたXMLドキュメント」を参照してください。

-nopeconv

verbatim属性に"yes"を指定していない場合，XMLドキュメントの出力時に定義済み実体を変換しません。

詳細については，「付録D.1　定義済み実体参照」を参照してください。

-chkovflow

XMLドキュメントの入力時にオーバフローが発生した場合，ステータス10を返します。

詳細については，「9.1　入力時のオーバフローをステータスで返す機能」を参照してください。

-chkchar

XMLドキュメントの入出力時に不当な文字のチェック範囲を拡張します。

詳細については，「9.2　入出力時に不当な文字をチェックする機能」を参照してください。

-gen 生成アクセスルーチンキーワード

生成アクセスルーチンキーワードに指定したXMLアクセスルーチンだけを生成します。

詳細については，「4.1.2　-genオプション」を参照してください。

-outencoding エンコーディングキーワード

XMLアクセスルーチンで出力するXMLドキュメントの文字エンコーディングを指定します。指定できるエンコーディングキーワードは，sjis，euc，utf8，utf16，utf16beまたはutf16leです。大文字は指定できません。エンコーディングキーワードと出力するXMLドキュメントの文字エンコーディングの対応を次に示します。詳細については，「付録G.1 表G-3　出力するXMLドキュメントの文字エンコーディングの設定方法」を参照してください。

エンコーディングキーワード

出力するXMLドキュメントの文字エンコーディング（encoding属性の値）

sjis

Shift_JIS

win31j

Windows-31J

euc

EUC-JP

utf8

UTF-8

utf16

Windows，Linuxの場合：UTF-16，リトルエンディアン

AIXの場合：UTF-16，ビッグエンディアン

utf16be

UTF-16，ビッグエンディアン

utf16le

UTF-16，リトルエンディアン

-unisrc

Unicode機能に対応したXMLアクセスルーチンを生成します。詳細については，「付録H　Unicode機能」を参照してください。

-bigendianbin（Windows，Linuxの場合）

XMLデータに対応する2進形式の数字項目をビッグエンディアン形式として扱う場合に指定します。詳細については，「4.1.4　-bigendianbinオプション（Windows，Linuxの場合）」を参照してください。

-bigendianfloat（Windows，Linuxの場合）

XMLデータに対応する浮動小数点形式の数字項目をビッグエンディアン形式として扱う場合に指定します。詳細については，「4.1.5　-bigendianfloatオプション（Windows，Linuxの場合）」を参照してください。

cblxmlコマンドの戻り値

戻り値

内容

0

正常終了した。

1

正常終了した。

ただし，警告メッセージが出力されている。

2

エラー終了した。

指定例

cblxml data.cxd -dtd data.xml -o subprog.cbl

DTD「data.xml」とDDF「data.cxd」の定義を基に，XMLアクセスルーチンの副プログラムファイル「subprog.cbl」とXMLアクセス用データ定義の登録集原文ファイル「subprog-COPY.cbl」が生成されます。

注意事項

cblxmlコマンドによって生成されたCOBOL副プログラム（XMLアクセスルーチン），および登録集原文（XMLアクセス用データ定義）の内容を編集しないでください。これらのファイルを編集した場合，実行時の動作は保証しません。

cblxmlコマンドでは，生成するCOBOL副プログラム（XMLアクセスルーチン），および登録集原文（XMLアクセス用データ定義）の領域の大きさについて，COBOL2002コンパイラの制限を超えたかどうかをチェックしません。コンパイラの制限値については，マニュアル「COBOL2002　使用の手引　手引編」または「COBOL2002　ユーザーズガイド」を参照してください。

4.1.2　-genオプション

-genオプションは，cblxmlコマンドが生成するXMLアクセスルーチンを指定するオプションです。

形式

-gen△生成アクセスルーチンキーワード

注

△は半角空白文字，またはタブ文字です。

生成アクセスルーチンキーワードは，表4-1に従って生成したいXMLアクセスルーチンに対応する生成アクセスルーチンキーワードをコンマで区切って指定します。CBLXML-OB-Interface，CBLXML-RD-Interface-BaseElement，およびCBLXML-CN-Interfaceアクセスルーチンを生成する場合の例を次に示します。

（例）

-gen△OB,RD,CN

注

△は半角空白文字，またはタブ文字です。

-genオプションに指定する生成アクセスルーチンキーワードは，表4-1に示す3種類のXMLドキュメントの操作（XMLドキュメントを開く（OP，OB），XMLドキュメントを入力，出力する（RD，WR），XMLドキュメントを閉じる（CL,CN））から，生成アクセスルーチンキーワードをそれぞれ一つ以上指定しなければなりません。

表4‒1　生成アクセスルーチンキーワード

生成アクセスルーチンキーワード

生成するXMLアクセスルーチン

XMLドキュメントの操作

OP

CBLXML-OP-Interface

XMLドキュメントを開く

OB

CBLXML-OB-Interface

RD

CBLXML-RD-Interface-BaseElement

XMLドキュメントを入力，出力する

WR

CBLXML-WR-Interface-BaseElement

CL

CBLXML-CL-Interface

XMLドキュメントを閉じる

CN

CBLXML-CN-Interface

注意事項

-genオプションの生成アクセスルーチンキーワードに次の不当な指定がされた場合，XMLアクセスルーチンの生成時にエラーとなります。

生成アクセスルーチンキーワード以外の文字列を指定した。

生成アクセスルーチンキーワードの区切り文字にコンマ以外の文字や空白を指定した。

同じ生成アクセスルーチンキーワードを複数回指定した。

生成アクセスルーチンキーワードを，XMLドキュメントを開く，入出力，閉じるの構成で指定していない。

生成アクセスルーチンキーワードの指定がない。

生成アクセスルーチンキーワード"WR"を指定しない場合，警告メッセージは表示されません。

生成アクセスルーチンキーワードは順不同です。

4.1.3　-outencodingオプション

-outencodingオプションは，XMLアクセスルーチンで出力するXMLドキュメントの文字エンコーディングを指定するオプションです。

XMLデータ定義ファイルの「ファイルの設定」で表示されるXMLデータ定義ファイルタグで表示するcblxmlコマンドの-outencodingオプションには，エンコーディングキーワードを一つだけ指定できます。

4.1.4　-bigendianbinオプション（Windows，Linuxの場合）

type属性値が"binary"のItem要素に対応するCOBOLデータ項目をビッグエンディアン形式として扱うオプションです。生成したXMLアクセス用データ定義を使用したプログラムで，コンパイル時に-BigEndian,Binコンパイラオプションを指定して，2進形式の数字項目をビッグエンディアン形式で扱いたい場合に指定します。

機能

CBLXML-RD-Interface-BaseElementアクセスルーチンを利用してXMLドキュメントから入力する場合，対応するCOBOLデータ項目へビッグエンディアン形式で格納する。

CBLXML-WR-Interface-BaseElementアクセスルーチンを利用してXMLドキュメントへ出力する場合，対応するCOBOLデータ項目をビッグエンディアン形式として扱う。

注意事項

このオプションを指定して生成したXMLアクセスルーチンおよびXMLアクセス用データ定義を使用するプログラムをコンパイルするとき，-BigEndian,Binコンパイラオプションと-Comp5コンパイラオプションを指定する必要があります。指定しない場合の動作は保証しません。

-BigEndian,Binコンパイラオプションを指定してコンパイルしたCOBOLプログラムでは，XMLサービスルーチンの引数で指定する数字項目の用途がCOMPの場合，ビッグエンディアン形式になるため，正常に動作しません。この場合は，引数となる数字項目（2進形式）をCOMP-5で定義してください。

4.1.5　-bigendianfloatオプション（Windows，Linuxの場合）

type属性値が"float"または"double"のItem要素に対応するCOBOLデータ項目をビッグエンディアン形式として扱うオプションです。生成したXMLアクセス用データ定義を使用したプログラムで，コンパイル時に-BigEndian,Floatコンパイラオプションを指定して，浮動小数点形式の数字項目をビッグエンディアン形式で扱いたい場合に指定します。

機能

CBLXML-RD-Interface-BaseElementアクセスルーチンを利用してXMLドキュメントから入力する場合，対応するCOBOLデータ項目へビッグエンディアン形式で格納する。

CBLXML-WR-Interface-BaseElementアクセスルーチンを利用してXMLドキュメントへ出力する場合，対応するCOBOLデータ項目をビッグエンディアン形式として扱う。

注意事項

このオプションを指定して生成したXMLアクセスルーチンおよびXMLアクセス用データ定義を使用するプログラムをコンパイルするとき，-BigEndian,Floatコンパイラオプションを指定する必要があります。指定しない場合の動作は保証しません。

4.1.6　cblxmlコマンドのメッセージ

cblxmlコマンドが出力するメッセージについて説明します。

(1)　メッセージの形式

メッセージの形式を次に示します。

KCCBnnnnX-z メッセージテキスト

KCCB：プリフィクス

nnnn：メッセージ番号

X：XML連携機能のメッセージであることを示す

z：メッセージレベル

E：エラー

W：警告

また，このマニュアルでは，メッセージを次の形式で記載します。

KCCBnnnnX-z

メッセージテキスト

要因：メッセージの説明を示します。

（S）システムの処置を示します。

（P）プログラム作成者の処置を示します。

メッセージ中の可変の埋め字部分は*** n ***（nは数字）で示します。

(2)　メッセージの一覧

メッセージの一覧を次に示します。

KCCB0011X-E

A version of message file is disagreed.

要因：異なるバージョンのcblxmlコマンドのメッセージファイルが存在する。

（S）COBOL原始プログラムの生成を中止する。

（P）異なるバージョンのプロダクトを削除して再実行する。

KCCB0012X-E

The file other than message file is opened.

要因：異なるシステムのcblxmlコマンドのメッセージファイルが存在する。

（S）COBOL原始プログラムの生成を中止する。

（P）異なるシステムのプロダクトを削除して再実行する。

KCCB0013X-E

Logical error occurred. (*** 1 ***)

要因：cblxmlコマンドのエラーメッセージ出力処理で論理エラーが発生した。

（S）COBOL原始プログラムの生成を中止する。

（P）当社保守員に連絡する。

KCCB0014X-E

The message number "*** 1 ***" is not in the message file.

要因：cblxmlコマンドで内部的に論理エラーが発生した。

（S）COBOL原始プログラムの生成を中止する。

（P）当社保守員に連絡する。

KCCB0015X-E

Unable to use the message file.

要因：cblxmlコマンドのメッセージファイルが存在しない，または壊れている。

（S）COBOL原始プログラムの生成を中止する。

（P）プロダクトを再インストールする。

KCCB0205X-E

稼働するメモリが足りません。

要因：cblxmlコマンドが稼働するメモリが足りない。

（S）COBOL原始プログラムの生成を中止する。

（P）削除できる資源を削除して再実行する。

KCCB0206X-W

不当なファイルまたはパラメタ"*** 1 ***"の指定があります。 "*** 1 ***"を無視します。

要因：不当なファイル名またはパラメタを指定した。

（S）不当なファイル名またはパラメタを無視して実行を続ける。

（P）不当なファイル名またはパラメタを削除する。

KCCB0207X-E

"*** 1 ***"オプションに続くファイル名の指定がありません。

要因：オプションに必要なファイル名がない。

（S）COBOL原始プログラムの生成を中止する。

（P）オプションに必要なファイル名を指定して実行を続ける。

KCCB0208X-W

"*** 1 ***"オプションを複数指定しました。最後に指定したオプションを有効にします。

要因：同じオプションを複数指定した。

（S）無効なオプションを無視して実行を続ける。

（P）同一オプションをまとめる。

KCCB0209X-W

"*** 1 ***"オプションは無効です。"*** 1 ***"オプションを無視します。

要因：無効なオプションを指定した。

（S）無効なオプションを無視して実行を続ける。

（P）無効なオプションを削除して再実行する。

KCCB0210X-E

"-dtd"オプションの指定がありません。"-dtd"オプションを指定してください。

要因："-dtd"オプションの指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）"-dtd"オプションを指定して再実行する。

KCCB0212X-E

"-o"オプションの指定がありません。"-o"オプションを指定してください。

要因："-o"オプションの指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）"-o"オプションを指定して再実行する。

KCCB0215X-E

DTDファイル"*** 1 ***"の解析中にXMLパーサエラーが発生しました。詳細情報を次に示します。

要因：DTDファイルの記述に誤りがある。

（S）COBOL原始プログラムの生成を中止する。

（P）DTDファイルの記述を修正して再実行する。

注

cblxmlコマンドのメッセージに続いて，XMLパーサのエラーメッセージが出力されます。

KCCB0216X-E

DDFファイル"*** 1 ***"の解析中にXMLパーサエラーが発生しました。詳細情報を次に示します。

要因：DDFファイルの記述に誤りがある。

（S）COBOL原始プログラムの生成を中止する。

（P）DDFファイルの記述を修正して再実行する。

注

cblxmlコマンドのメッセージに続いて，XMLパーサのエラーメッセージが出力されます。

KCCB0217X-E

DTDファイル中にBaseElement要素のelemName属性に指定した"*** 1 ***"が見つかりません。

要因：DDFファイルでBaseElement要素のelemName属性に指定した名称がDTDファイルに定義されていない。

（S）COBOL原始プログラムの生成を中止する。

（P）DTDファイルにBaseElement要素のelemName属性に指定した名称の要素を追加する。または，BaseElement要素のelemName属性に指定した名称を変更して再実行する。

KCCB0218X-E

要素"*** 2 ***"中に要素"*** 1 ***"は存在しません。

要因：DDFファイルでItem要素，またはGroup要素のelemName属性に指定した名称がBaseElement要素中に存在しない。

（S）COBOL原始プログラムの生成を中止する。

（P）DDFファイルにItem要素，またはGroup要素のelemName属性に指定した名称の要素を追加する。または，Item要素，Group要素のelemName属性に指定した名称を変更して再実行する。

KCCB0219X-E

cobName属性"*** 1 ***"を持つBaseElement要素"*** 2 ***"とBaseElement要素"*** 3 ***"があります。cobName属性に一意な名称を指定してください。

要因：複数のBaseElement要素のcobName属性に同じ名称を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）BaseElement要素のcobName属性に指定する名称を一意に変更して再実行する。

KCCB0220X-E

*** 1 ***要素"*** 2 ***"は，*** 3 ***次元です。DTDファイルでは，*** 4 ***回繰り返しています。繰り返しの次元が一致していません。

要因：DTDファイルの繰り返し要素とDDFファイルのArray要素の対応付けが一致していない。

（S）COBOL原始プログラムの生成を中止する。

（P）繰り返し要素とArray要素の対応付けを訂正して再実行する。

KCCB0221X-E

ファイル"*** 1 ***"に書き込めません。

要因：出力ファイルに書き込みができない。

（S）COBOL原始プログラムの生成を中止する。

（P）ファイル，およびディレクトリ（フォルダ）のアクセス権限を見直す。

KCCB0222X-E

要素"*** 2 ***"に対応するAttrItem要素"*** 1 ***"は，*** 3 ***次元です。DTDファイルでは，*** 4 ***回繰り返しています。繰り返しの次元が一致していません。

要因：DTDファイルの繰り返し要素とDDFファイルのArray要素の対応付けが一致していない。

（S）COBOL原始プログラムの生成を中止する。

（P）繰り返し要素とArray要素の対応付けを訂正して再実行する。

KCCB0223X-E

要素"*** 1 ***"に複数のItem要素は対応付けできません。

要因：一つの要素に複数のItem要素を対応付けようとした。

（S）COBOL原始プログラムの生成を中止する。

（P）一つの要素に対応するItem要素が一つになるように訂正して再実行する。

KCCB0224X-E

nameOfCountVar属性"*** 1 ***"を持つArray要素とnameOfCountVar属性"*** 2 ***"を持つArray要素が，同一の繰り返し記号"*** 3 ***"を持つ*** 4 ***要素に対応付けられています。Array要素は一つだけ指定できます。

要因：複数のArray要素を，XMLドキュメントの同じ繰り返し要素に対応付けようとした。

（S）COBOL原始プログラムの生成を中止する。

（P）XMLドキュメントの一つの繰り返し要素に一つのArray要素が対応するよう修正して再実行する。

KCCB0225X-E

DDFファイルの不当な位置に*** 1 ***要素があります。

要因：DDFファイル中の不当な位置に要素がある。

（S）COBOL原始プログラムの生成を中止する。

（P）DDFファイルの不当な位置にある要素を削除して再実行する。

KCCB0226X-W

XMLアクセスルーチンの名称"*** 1 ***"が30バイトを超えています。

要因：XMLアクセスルーチン名称をInterface要素，およびBaseElement要素から作成する場合に，名称の長さが30バイトを超えた。

（S）COBOL原始プログラムの生成を続行する。

（P）Interface要素，およびBaseElement要素の長さを調整し30バイト以内でXMLアクセスルーチンの条件を構成する。

KCCB0227X-E

*** 3 ***要素"*** 4 ***"の*** 2 ***属性に指定した値"*** 1 ***"は，不当です。

要因：COBOLのデータ項目の名称を指定する属性の値に空" "を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）COBOLのデータ項目名を指定できる名称に修正し，再実行する。

KCCB0228X-E

*** 1 ***属性に指定した値"*** 2 ***"に誤りがあります。

要因：elemName属性またはattrName属性に指定した値に，XMLの要素名に使えない文字を指定した。または，空を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）cobName属性に指定した値をXMLの要素名に指定できる名称に修正し，再実行する。または，elemName属性，attrName属性に要素名を指定する。

KCCB0229X-E

要素の子を持つ要素型宣言や混合内容宣言をItem要素"*** 1 ***"に対応付けられません。(#PCDATA)の要素型宣言だけに対応付けできます。

要因：要素の子を持つ要素型宣言や混合内容宣言の要素をItem要素に指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）要素の子を持つ要素型宣言，または混合内容宣言を（#PCDATA）に変更して再実行する。

KCCB0230X-W

countVar属性"no"を指定したArray要素にnameOfCountVar属性を同時に指定した。

要因：countVar属性"no"を指定したArray要素にnameOfCountVar属性を同時に指定した。

（S）COBOL原始プログラムの生成を続行する。

（P）nameOfCountVar属性を削除して再実行する。

KCCB0231X-E

Interface要素の指定がありません。

要因：Interface要素の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）Interface要素を指定して再実行する。

KCCB0232X-E

nameOfCountVar属性"*** 2 ***"を持つArray要素の内側に，nameOfCountVar属性"*** 1 ***"を持つArray要素が指定されました。Array要素の内側には，Item要素，AttrItem要素，又はGroup要素を一つだけ指定できます。

要因：Array要素の内側に直接Array要素を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素の内側に指定したArray要素を削除して再実行する。

KCCB0233X-E

Interface要素にinterfaceName属性の指定がありません。

要因：DDFでInterface要素にinterfaceName属性の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）Interface要素にinterfaceName属性を指定して再実行する。

KCCB0234X-E

Interface要素"*** 1 ***"の内側にBaseElement要素の指定がありません。

要因：Interface要素の内側にBaseElement要素の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）Interface要素の内側にBaseElement要素を指定して再実行する。

KCCB0235X-E

BaseElement要素"*** 1 ***"の内側にItem要素，AttrItem要素，又はGroup要素の指定がありません。

要因：BaseElement要素の内側にItem要素，AttrItem要素，またはGroup要素の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）BaseElement要素の内側にItem要素，AttrItem要素，またはGroup要素を指定して再実行する。

KCCB0236X-E

BaseElement要素にelemName属性の指定がありません。

要因：BaseElement要素にelemName属性の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）BaseElement要素にelemName属性を指定して再実行する。

KCCB0238X-E

BaseElement要素"*** 2 ***"の内側に不当なItem要素"*** 1 ***"があります。BaseElement要素はItem要素，AttrItem要素，又はGroup要素を一つだけ指定できます。

要因：BaseElement要素の内側に不当なItem要素がある。

（S）COBOL原始プログラムの生成を中止する。

（P）BaseElement要素の内側に指定した不当なItem要素を削除して再実行する。

KCCB0239X-E

BaseElement要素"*** 2 ***"の内側に不当なGroup要素"*** 1 ***"があります。BaseElement要素はItem要素，AttrItem要素，又はGroup要素を一つだけ指定できます。

要因：BaseElement要素の内側に不当なGroup要素がある。

（S）COBOL原始プログラムの生成を中止する。

（P）BaseElement要素の内側に指定した不当なGroup要素を削除して再実行する。

KCCB0240X-W

Item要素"*** 1 ***"に不当な要素の値があります。指定した要素の値を無視します。

要因：値を指定できないItem要素に値を指定した。

（S）COBOL原始プログラムの生成を続行する。

（P）Item要素を空要素に変更して再実行する。

KCCB0241X-E

DDFファイル名の指定がありません。拡張子".cxd"を持つファイル名を指定してください。

要因：DDFファイルの指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）DDFファイルを指定して再実行する。

KCCB0242X-W

*** 2 ***要素"*** 3 ***"に不当な*** 1 ***属性があります。*** 1 ***属性を無視します。

要因：不当な属性を指定した。

（S）不当な属性を無視してCOBOL原始プログラムの生成を続行する。

（P）不当な要素を削除して再実行する。

KCCB0243X-E

DDFファイル"*** 1 ***"が見つかりません。

要因：指定したDDFファイルが見つからない。

（S）COBOL原始プログラムの生成を中止する。

（P）存在するDDFファイルを指定して再実行する。

KCCB0244X-E

Group要素にelemName属性，又はcobName属性の指定がありません。

要因：Group要素にelemName属性，またはcobName属性の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）Group要素にelemName属性，またはcobName属性を指定して再実行する。

KCCB0245X-E

DTDファイル"*** 1 ***"が見つかりません。

要因：指定したDTDファイルが見つからない。

（S）COBOL原始プログラムの生成を中止する。

（P）存在するDTDファイルを指定して再実行する。

KCCB0246X-E

要素"*** 2 ***"の属性"*** 1 ***"に複数のAttrItem要素は対応付けできません。

要因：一つの属性に複数のAttrItem要素を対応付けようとした。

（S）COBOL原始プログラムの生成を中止する。

（P）一つの属性に対応するAttrItem要素を一つに訂正して再実行する。

KCCB0248X-E

Group要素"*** 1 ***"の内側にItem要素，AttrItem要素，Group要素，又はArray要素のどれかが指定されていません。

要因：Group要素の内側にItem要素，AttrItem要素，Group要素，またはArray要素の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）Group要素の内側にItem要素，AttrItem要素，Group要素，またはArray要素を追加して再実行する。

KCCB0249X-E

nameOfCountVar属性"*** 1 ***"のArray要素にmax属性が指定されていません。

要因：Array要素にmax属性が指定されていない。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素にmax属性を指定して再実行する。

KCCB0250X-E

nameOfCountVar属性"*** 2 ***"を持つArray要素の内側に，不当なItem要素"*** 1 ***"があります。Array要素はItem要素，AttrItem要素，又はGroup要素を一つだけ指定できます。

要因：Array要素の内側に二つ以上のItem要素があるか，AttrItem要素，Item要素とGroup要素が混在している。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素の内側に指定した不当なItem要素を削除して再実行する。

KCCB0251X-E

nameOfCountVar属性"*** 2 ***"を持つArray要素の内側に，不当なGroup要素"*** 1 ***"があります。Array要素はItem要素，AttrItem要素，又はGroup要素を一つだけ指定できます。

要因：Array要素の内側に二つ以上のGroup要素があるか，Item要素，AttrItem要素，およびGroup要素が混在している。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素の内側に指定した不当なGroup要素を削除して再実行する。

KCCB0252X-E

nameOfCountVar属性"*** 1 ***"を持つArray要素は，制限を超えた*** 2 ***次元にあります。最大*** 3 ***次元まで指定できます。

要因：Array要素の次元が7を超えた。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素の次元を7以下に変更して再実行する。

KCCB0253X-E

nameOfCountVar属性"*** 1 ***"を持つArray要素の内側にItem要素，AttrItem要素，又はGroup要素の指定がありません。

要因：nameOfCountVar属性を持つArray要素の内側にItem要素，AttrItem要素，またはGroup要素の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素の内側にItem要素，AttrItem要素，またはGroup要素を追加して再実行する。

KCCB0256X-W

#REQUIRED指定がある要素"*** 2 ***"の属性"*** 1 ***"が対応付けられていません。出力時に属性"*** 1 ***"の値に空（""）を仮定します。

要因：#REQUIREDの指定がある属性が，DDFでAttrItem要素によって対応付けられていないため，出力時の属性値をCOBOLデータ項目から取得できない。

（S）その属性の値がDDFで対応付けられていないため，次の場合は属性値として空（""）を出力するものとして，COBOL原始プログラムの生成を続行する。

XMLドキュメント出力時に出力する値

その属性がXMLドキュメント中の更新対象の要素（DDFで属性update="yes"を指定した要素）に含まれる場合の，XMLドキュメント更新時に出力する値

（P）システムの処置で空（""）以外の属性値を出力する必要がある場合，その属性を，DDFでAttrItem要素によって対応付ける。

KCCB0258X-E

Item要素"*** 3 ***"の*** 1 ***属性に不当な値"*** 2 ***"が指定されました。

要因：Item要素の属性値に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素の属性値を，その属性に合った値にして再実行する。

KCCB0259X-W

要素"*** 2 ***"に対応するAttrItem要素"*** 1 ***"に不当な要素の値があります。指定した要素の値を無視します。

要因：値を指定できないAttrItem要素に値を指定した。

（S）COBOL原始プログラムの生成を続行する。

（P）AttrItem要素を空要素に変更して再実行する。

KCCB0260X-E

AttrItem要素にattrName属性の指定がありません。

要因：AttrItem要素にattrName属性の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素の属性に，attrName属性を指定して再実行する。

KCCB0261X-E

BaseElement要素"*** 3 ***"の内側に，要素"*** 2 ***"に対応する不当なAttrItem要素"*** 1 ***"があります。BaseElement要素はItem要素，AttrItem要素，又はGroup要素を一つだけ指定できます。

要因：BaseElement要素の内側に二つ以上のAttrItem要素があるか，Item要素，AttrItem要素およびGroup要素が混在している。

（S）COBOL原始プログラムの生成を中止する。

（P）BaseElement要素の内側に指定した不当なAttrItem要素を削除して再実行する。

KCCB0262X-E

nameOfCountVar属性"*** 3 ***"を持つArray要素の内側に，要素"*** 2 ***"に対応する不当なAttrItem要素"*** 1 ***"があります。Array要素はItem要素，AttrItem要素，又はGroup要素を一つだけ指定できます。

要因：Array要素の内側に二つ以上のAttrItem要素があるか，Item要素，AttrItem要素およびGroup要素が混在している。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素の内側に指定した不当なAttrItem要素を削除して再実行する。

KCCB0263X-E

*** 3 ***要素"*** 4 ***"の*** 1 ***属性に"*** 2 ***"は指定できません。*** 1 ***属性には"yes"又は"no"を指定できます。

要因：属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）属性値に"yes"または"no"のどちらかを指定して再実行する。

KCCB0264X-E

Item要素"*** 2 ***"のsign属性に"*** 1 ***"は指定できません。sign属性には"signed"又は"unsigned"を指定できます。

要因：Item要素のsign属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素のsign属性に"signed"または"unsigned"のどちらかを指定して再実行する。

KCCB0265X-E

Item要素"*** 2 ***"のsign属性に"*** 1 ***"は指定できません。sign属性は"signed"，"unsigned"，又は"leadingSeparate"を指定できます。

要因：Item属性のsign属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素のsign属性に"signed"，"unsigned"，または"leadingSeparate"のどれかを指定して再実行する。

KCCB0267X-W

ファイル"*** 1 ***"を開くことができません。

要因：-catalogオプションに指定したカタログファイルのオープン処理中にエラーが発生した。次の要因が考えられる。

ファイルがない。

ファイルに対するアクセス権限がない。

処理中のファイル自身で入出力エラーが発生した。

（S）-catalogオプションを無視してCOBOL原始プログラムの生成を続行する。

（P）原因を調査し，カタログファイルの指定を訂正して再実行する。

KCCB0268X-W

ファイル"*** 1 ***"の内容が不当です。

要因：-catalogオプションに指定したカタログファイルの内容が不当である。

（S）-catalogオプションを無視してCOBOL原始プログラムの生成を続行する。

（P）カタログファイルの書き方を訂正して再実行する。

KCCB0269X-E

AttrItem要素にelemName属性の指定がありません。

要因：AttrItem要素にelemName属性の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素にelemName属性を指定して再実行する。

KCCB0271X-E

type属性に"*** 2 ***"を持つItem要素"*** 3 ***"に*** 1 ***属性は指定できません。

要因：Item要素に指定した属性が，そのItem要素のtype属性値に対して不当である。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素の属性に，type属性値に対して指定可能な属性を指定する。

KCCB0272X-E

COBOLデータ項目"*** 1 ***"は，COBOLデータ項目"*** 2 ***"と重複しています。

要因：次に示す属性のうち，名称が重複しているものがある。

cobName属性

elemName属性（cobName属性を省略した場合）

elemName属性-attrName属性（cobName属性を省略した場合）

nameOfBaseVar属性

nameOfGroupVar属性

nameOfFlagVar属性

nameOfLengthVar属性

nameOfCountVar属性

nameOfTotalVar属性

（S）COBOL原始プログラムの生成を中止する。

（P）cobName属性（省略時はelemName属性またはelemName属性＋attrName属性），nameOfBaseVar属性，nameOfGroupVar属性，nameOfFlagVar属性，nameOfLengthVar属性，nameOfCountVar属性，nameOfTotalVar属性に指定した名称を一意に変更して，再実行する。

KCCB0273X-E

要素"*** 2 ***"に対応するAttrItem要素"*** 1 ***"のレベルが制限を超えています。AttrItem要素の位置を49レベル以内に記述してください。

要因：AttrItem要素があるレベルが制限を超えた。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素の位置が49レベル以内になるように訂正して再実行する。

KCCB0274X-E

Item要素"*** 1 ***"のtype属性に指定した値"*** 2 ***"は不当です。type属性には"alphanumeric"，"national"，"numeric"，"packed"，"binary"，"float"，又は"double"を指定できます。

要因：Item要素のtype属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素のtype属性に"alphanumeric"，"national"，"numeric"，"packed"，"binary"，"float"，または"double"のどれかを指定して再実行する。

KCCB0275X-E

Item要素にelemName属性の指定がありません。

要因：Item要素にelemName属性の指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素にelemName属性を指定して再実行する。

KCCB0277X-E

nameOfCountVar属性"*** 2 ***"を持つArray要素のmax属性に指定した値"*** 1 ***"は不当です。

要因：Array要素のmax属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素のmax属性に1〜16,777,215の範囲の値を指定して再実行する。

KCCB0278X-E

*** 3 ***属性"*** 4 ***"の*** 2 ***属性に"yes"を指定した場合は，*** 1 ***属性を指定できません。

要因：verbatim属性に"yes"を指定した場合にtrim属性を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）verbatim属性に"yes"を指定した場合，trim属性を削除して再実行する。

KCCB0280X-E

要素"*** 3 ***"に対応するAttrItem要素"*** 2 ***"のtype属性に指定した値とDTDのデフォルト属性値"*** 1 ***"の形式が異なります。

要因：AttrItem要素のtype属性に指定した値とDTDのデフォルト属性値の形式が異なる。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素のtype属性に指定した値とDTDのデフォルト属性値の形式を合わせる。

KCCB0281X-E

DTDファイルに指定した要素"*** 1 ***"の定義が見つかりません。

要因：DTDに指定した要素の定義がない。

（S）COBOL原始プログラムの生成を中止する。

（P）DTDに指定した要素の定義を追加して再実行する。

KCCB0285X-E

Item要素"*** 1 ***"のレベルが制限を超えています。Item要素の位置を49レベル以内に記述してください。

要因：Item要素があるレベルが制限を超えた。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素の位置が49レベル以内になるように訂正して再実行する。

KCCB0286X-E

Item要素"*** 1 ***"のレベルが制限を超えています。Group要素の位置を49レベル以内に記述してください。

要因：Group要素があるレベルが制限を超えた。

（S）COBOL原始プログラムの生成を中止する。

（P）Group要素の位置が49レベル以内になるように訂正して再実行する。

KCCB0287X-E

DTDファイル"*** 1 ***"の解析中にXMLパーサで未知の例外が発生しました。

要因：DTDファイルのXMLの書き方に誤りがある。

（S）COBOL原始プログラムの生成を中止する。

（P）DTDファイルのXMLの書き方を訂正して再実行する。

KCCB0290X-E

DTDファイルのDOCTYPE宣言に指定したルート要素"*** 1 ***"の定義が見つかりません。

要因：DOCTYPE宣言に指定した要素に対応するルート要素宣言の定義がない。

（S）COBOL原始プログラムの生成を中止する。

（P）ルート要素の定義を追加して再実行する。

KCCB0291X-E

DTDファイルに要素の定義がありません。

要因：DTDに要素の定義がない。

（S）COBOL原始プログラムの生成を中止する。

（P）DTDに要素の定義を追加して再実行する。

KCCB0292X-W

COBOL予約語ファイル"*** 1 ***"が見つかりません。

要因：前提プログラムが正しくインストールされていない。

（S）COBOL原始プログラムの生成を続行する。

（P）前提プログラムを正しくインストールして再実行する。

KCCB0293X-W

COBOL予約語ファイル"*** 1 ***"は壊れています。

要因：前提プログラムが正しくインストールされていない。

（S）COBOL原始プログラムの生成を続行する。

（P）前提プログラムを正しくインストールして再実行する。

KCCB0294X-E

*** 3 ***要素"*** 4 ***"の*** 2 ***属性に指定した"*** 1 ***"は，COBOLの予約語です。

要因：要素の属性値にCOBOLの予約語を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）要素の属性値にCOBOLの予約語ではない語を指定して再実行する。

KCCB0295X-W

*** 3 ***要素"*** 4 ***"の*** 2 ***属性に指定した"*** 1 ***"は，30文字を超えています。

要因：次に示す属性で，30文字を超える名称が指定されているものがある。

cobName属性

nameOfBaseVar属性

nameOfGroupVar属性

nameOfFlagVar属性

nameOfLengthVar属性

nameOfCountVar属性

nameOfTotalVar属性

（S）COBOL原始プログラムの生成を続行する。

（P）「要因」で示した属性のうち，30文字を超える名称を指定したものは，30文字以下の名称に修正して再実行する。

KCCB0296X-E

*** 3 ***要素"*** 4 ***"の*** 2 ***属性に指定した"*** 1 ***"は，COBOLの語として不当な文字を含んでいます。

要因：要素の属性値に指定された名前がCOBOLの語として不当な文字を含んでいる。

（S）COBOL原始プログラムの生成を続行する。

（P）要素の属性値に指定する名前がCOBOLの語として使用できる文字から構成されるように修正して再実行する。

KCCB0297X-W

要素と対応付けていないGroup要素にnameOfFlagVar属性は指定できません。Group要素"*** 2 ***"のnameOfFlagVar属性"*** 1 ***"を無視します。

要因：要素と対応付けていないGroup要素に不当なnameOfFlagVar属性を指定した。

（S）COBOL原始プログラムの生成を続行する。

（P）要素と対応付けていないGroup要素からnameOfFlagVar属性を削除して，再実行する。

KCCB0299X-E

Item要素"*** 3 ***"に指定したtype属性値に対応しない*** 1 ***属性"*** 2 ***"を指定しました。

要因：Item要素に指定したtype属性値に対応しないCOBOLの定数をemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性のどれかに指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Item要素に指定したtype属性値に対応するCOBOLの定数をemptyValue属性，emptyContentValue属性，invalidCharValue属性，またはoverflowValue属性に指定して再実行する。

KCCB0300X-E

DDFファイル"*** 1 ***"の解析中にXMLパーサで未知の例外が発生しました。

要因：DDFファイルのXMLの書き方に誤りがある。

（S）COBOL原始プログラムの生成を中止する。

（P）DDFファイルのXMLの書き方を訂正して再実行する。

KCCB0301X-E

要素"*** 3 ***"に対応するAttrItem要素"*** 2 ***"のtype属性に不当な値"*** 1 ***"が指定されました。type属性には"alphanumeric", "national"又は"numeric"を指定できます。

要因：AttrItem要素のtype属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素のtype属性に"alphanumeric", "national"または"numeric"のどれかを指定して再実行する。

KCCB0303X-E

要素"*** 4 ***"に対応するAttrItem要素"*** 3 ***"の*** 1 ***属性に不当な値"*** 2 ***"が指定されました。

要因：AttrItem要素の属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素の属性値を，その属性に合った値にして再実行する。

KCCB0305X-E

要素"*** 3 ***"に対応するAttrItem要素"*** 2 ***"のsign属性に"*** 1 ***"は指定できません。sign属性には"signed"，"unsigned"又は"leadingSeparate"を指定できます。

要因：AttrItem要素のsign属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素のsign属性に"signed", "unsigned"または"leadingSeparate"のどれかを指定して再実行する。

KCCB0306X-E

要素"*** 4 ***"に対応するAttrItem要素"*** 3 ***"に指定したtype属性"*** 2 ***"に対して*** 1 ***属性は指定できません。

要因：AttrItem要素のtype属性に対して指定できない属性を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素のtype属性に対応する属性を指定して再実行する。

KCCB0307X-E

要素"*** 4 ***"に対応するAttrItem要素"*** 3 ***"に指定したtype属性値に対応しない"*** 1 ***"属性"*** 2 ***"を指定しました。

要因：AttrItem要素に指定したtype属性値に対応しないCOBOLの定数を，emptyValue属性，emptyContentValue属性，invalidCharValue属性，またはoverflowValue属性に指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）AttrItem要素に指定したtype属性値に対応するCOBOLの定数を，emptyValue属性，emptyContentValue属性，invalidCharValue属性，またはoverflowValue属性に指定し再実行する。

KCCB0308X-W

要素"*** 4 ***"に対応するtype属性"*** 2 ***"で指定したAttrItem要素"*** 3 ***"のデフォルト属性値"*** 1 ***"が160文字を超えています。

要因：ATTLIST宣言に指定した属性のデフォルト値が160文字を超えている。

（S）type属性値に従いデフォルト属性値の先頭の160文字だけを採用して生成を続ける。

（P）ATTLIST宣言に指定した属性のデフォルト値をtype属性値に従い160文字以下に訂正して再実行する。

KCCB0309X-W

type属性"*** 3 ***"を指定したItem要素"*** 4 ***"の*** 1 ***属性"*** 2 ***"が160文字を超えています。*** 1 ***属性値の先頭の160文字だけを採用します。

要因：Item要素に指定したemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性のどれかの値が160文字を超えている。

（S）type属性値に従いemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性に指定した値の先頭の160文字だけを採用して生成を続ける。

（P）Item要素に指定したemptyValue属性の値をtype属性値に従い160文字以下に訂正して再実行する。

KCCB0310X-W

要素"*** 5 ***"に対応するtype属性"*** 3 ***"を指定したAttrItem要素"*** 4 ***"の*** 1 ***属性"*** 2 ***"が160文字を超えています。*** 1 ***属性値の先頭の160文字だけを採用します。

要因：AttrItem要素に指定したemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性のどれかの値が160文字を超えている。

（S）type属性値に従いemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性に指定した値の先頭の160文字だけを採用して生成を続ける。

（P）AttrItem要素に指定したemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性の値をtype属性値に従い160文字以下に訂正して再実行する。

KCCB0311X-W

accessInfo属性に"yes"を指定した要素の内側にある要素に*** 1 ***属性は指定できません。*** 3 ***要素"*** 4 ***"の*** 1 ***属性"*** 2 ***"を無視します。

要因：accessInfo属性"yes"を指定した要素の内側にある要素に不当なemptyValue，emptyContentValue属性，invalidCharValue属性，またはoverflowValue属性属性を指定した。

（S）COBOL原始プログラムの生成を続行する。

（P）emptyValue属性，emptyContentValue属性，invalidCharValue属性，またはoverflowValue属性を削除して，再実行する。

KCCB0312X-E

要素"*** 4 ***"に対応するAttrItem要素"*** 3 ***"の*** 1 ***属性に"*** 2 ***"は指定できません。*** 1 ***属性には"yes"又は"no"を指定できます。

要因：属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）属性に"yes"または"no"のどちらかを指定して再実行する。

KCCB0313X-E

要素"*** 2 ***"中に属性*** 1 ***は存在しません。

要因：属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）DTDファイルで対応する要素の属性を宣言する。または，DDFファイルで指定した属性を削除して再実行する。

KCCB0315X-E

DDFファイルで再帰的な構造は対応付けできません。DDFファイルのGroup要素"*** 2 ***"の下に*** 1 ***要素"*** 2 ***"があります。

要因：DDFファイルに再帰的な構造を定義した。

（S）COBOL原始プログラムの生成を中止する。

（P）再帰的な構造を定義しないようにDDFファイルを変更し，再実行する。

KCCB0317X-E

nameOfCountVar属性"*** 3 ***"を持つArray要素の*** 1 ***属性に指定した値"*** 2 ***"は不当です。*** 1 ***属性には"yes"又は"no"を指定できます。

要因：Array要素の属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）属性値に"yes"または"no"のどちらかを指定して再実行する。

KCCB0318X-W

要素"*** 3 ***"に対応するAttrItem要素"*** 2 ***"に不当な*** 1 ***属性があります。*** 1 ***属性を無視します。

要因：AttrItem要素に不当な要素を指定した。

（S）不当な属性を無視してCOBOL原始プログラムの生成を続行する。

（P）AttrItem要素に指定した不当な要素を削除して再実行する。

KCCB0319X-W

nameOfCountVar属性"*** 2 ***"を持つArray要素に不当な*** 1 ***属性があります。*** 1 ***属性を無視します。

要因：AttrItem要素に不当な要素を指定した。

（S）不当な属性を無視してCOBOL原始プログラムの生成を続行する。

（P）AttrItem要素に指定した不当な要素を削除して再実行する。

KCCB0320X-E

nameOfCountVar属性"*** 3 ***"を持つArray要素の*** 2 ***属性に指定した"*** 1 ***"は，不当です。

要因：COBOLのデータ項目の名称を指定するArray要素の属性の値に空""を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）COBOLのデータ項目名に指定できる名称に修正し，再実行する。

KCCB0321X-E

nameOfCountVar属性"*** 3 ***"を持つArray要素の*** 2 ***属性に指定した"*** 1 ***"は，COBOLの予約語です。

要因：Array要素のnameOfCountVar属性にCOBOLの予約語を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素のnameOfCountVar属性にCOBOLの予約語でない語を指定して再実行する。

KCCB0322X-W

nameOfCountVar属性"*** 3 ***"を持つArray要素の*** 2 ***属性に指定した"*** 1 ***"は，30文字を超えています。

要因：Array要素のnameOfCountVar属性に30文字を超えた名称を指定した。

（S）COBOL原始プログラムの生成を続行する。

（P）Array要素のnameOfCountVar属性に30文字以下の名称を指定して再実行する。

KCCB0323X-E

nameOfCountVar属性"*** 3 ***"を持つArray要素の*** 2 ***属性に指定した"*** 1 ***"は，COBOLの語として不当な文字を含んでいます。

要因：Array要素のnameOfCountVar属性にCOBOLの語として不当な文字を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素のnameOfCountVar属性にCOBOLの予約語でない語を指定して再実行する。

KCCB0324X-W

update属性"*** 4 ***"を指定した*** 5 ***要素"*** 6 ***"の内側にある*** 2 ***要素"*** 3 ***"にupdate属性"*** 1 ***"を指定できません。内側に指定したupdate属性を無視します。

要因：update属性に"yes"を指定したGroup要素の内側にあるGroup要素やItem要素に対して，update属性に"yes"を指定した。

（S）COBOL原始プログラムの生成を続行する。

（P）update属性に"yes"を指定したGroup要素の内側の要素に指定したupdate属性"yes"を削除して再実行する。

KCCB0325X-E

*** 3 ***要素"*** 4 ***"の*** 1 ***属性に"*** 2 ***"は指定できません。値には"*** 5 ***"だけが指定できます。

要因：属性に不当な値を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）属性に指定した値を訂正して再実行する。

KCCB0326X-E

内部エラーが発生しました。 エラーコード = *** 1 ***， 詳細コード = *** 2 ***

要因：内部で論理エラーが発生した。

（S）COBOL原始プログラムの生成を中止する。

（P）当社保守員に連絡する。

KCCB0327X-E

カタログファイルに指定された公開識別子の長さが1024バイトを超えています。

要因：カタログファイルに1,024バイトを超えた公開識別子の名称を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）カタログファイルに指定する公開識別子の長さを1,024バイト以下に訂正し，再実行する。

KCCB0328X-E

カタログファイルに指定されたファイル名の長さが255バイトを超えています。

要因：カタログファイルに255バイトを超えたファイル名を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）カタログファイルに指定するファイル名の長さを255バイト以下に訂正し，再実行する。

KCCB0330X-E

DTDの要素"*** 1 ***"は無限に再帰しているため，対応付けできません。

要因：DTDで指定した要素が無限に再帰している。

（S）COBOL原始プログラムの生成を中止する。

（P）無限に再帰しないようにDTDの要素を訂正し，再実行する。

KCCB0331X-E

*** 3 ***要素"*** 4 ***"の*** 2 ***属性に指定した"*** 1 ***"は，COBOLのプログラム名として不当な文字を含んでいます。

要因：Array要素のnameOfCountVar属性にCOBOLの語として不当な文字を指定した。

（S）COBOL原始プログラムの生成を中止する。

（P）Array要素のnameOfCountVar属性にCOBOLの予約語でない語を指定して再実行する。

KCCB0332X-E

"-gen"オプションに指定した生成アクセスルーチンキーワード"*** 1 ***"は不当です。

要因："-gen"オプションに指定した生成アクセスルーチンキーワードでエラーが発生した。次の要因が考えられる。

生成アクセスルーチンキーワード以外の文字列を指定した。

生成アクセスルーチンキーワードの区切り文字にコンマ以外の文字や空白を指定した。

同じ生成アクセスルーチンキーワードを複数回指定した。

生成アクセスルーチンキーワードを，XMLドキュメントを開く，入力・出力，閉じるの構成で指定していない。

（S）COBOL原始プログラムの生成を中止する。

（P）

生成アクセスルーチンキーワードにOP,OB,RD,WR,CL,CNのどれかを指定する。

生成アクセスルーチンキーワードの区切り文字にコンマを指定する。

二つ以上の同じ生成アクセスルーチンキーワードを一つにまとめる。

XMLドキュメントを開く"OP，OB"，入力・出力"RD，WR"，閉じる"CL，CN"の生成アクセスルーチンキーワードから，それぞれ一つ以上を指定する。

KCCB0333X-E

"-outencoding"オプションに指定したエンコーディングキーワード"*** 1 ***"は不当です。"sjis"，"win31j"，"euc"，"utf8"，"utf16"，"utf16be"または"utf16le"を指定してください。

要因：-outencodingオプションに指定したエンコーディングキーワードでエラーが発生した。次の要因が考えられる。

エンコーディングキーワードに不当な文字列を指定した。

エンコーディングキーワードの指定がない。

（S）COBOL原始プログラムの生成を中止する。

（P）-outencodingオプションに指定するエンコーディングキーワードを訂正し，再実行する。

KCCB0334X-E

"-unisrc"オプションを指定した場合，type属性"*** 3 ***"を指定したItem要素"*** 4 ***"の*** 1 ***属性"*** 2 ***"をUnicodeに変換した値の長さがsize属性の指定値を超えています。size属性の指定値を大きくするか，または，*** 1 ***属性"*** 2 ***"の指定値を小さくしてください。

要因："-unisrc"オプションを指定した場合，Item要素に指定したemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性のどれかのUnicodeに変換した値の長さがsize属性で指定された長さを超えた。

（S）COBOLソースの生成を中止する。

（P）Item要素に指定したemptyValue属性，emptyContentValue属性，invalidCharValue属性，overflowValue属性の値をtype属性値に従いsize属性の設定値以下に修正するか，または，size属性の設定値をUnicode変換後の値が格納できる十分な長さに修正して，再実行する。

KCCB0335X-E

"-unisrc"オプションを指定した場合，Interface要素，BaseElement要素のcobName属性(指定がない場合はelemName属性)にUnicodeに変換すると多バイトになる文字は指定できません。

要因："-unisrc"オプションを指定した場合，Interface要素，BaseElement要素のcobName属性（指定がない場合はelemName属性）のどちらかに，Unicodeに変換すると多バイトになる文字を指定した。

（S）COBOLソースの生成を中止する。

（P）Interface要素，BaseElement要素のcobName属性（指定がない場合はelemName属性）の，Unicodeに変換すると多バイトになる文字をほかの文字に修正し，再実行する。

KCCB0336X-E

"-unisrc"オプションを指定した場合，"-o"オプションに指定するCOBOL副プログラム名にUnicodeに変換すると多バイトになる文字は指定できません。

要因："-unisrc"オプションを指定した場合，"-o"オプションに指定するCOBOL副プログラム名に，Unicodeに変換すると多バイトになる文字を指定した。

（S）COBOLソースの生成を中止する。

（P）"-o"オプションに指定するCOBOL副プログラム名の，Unicodeに変換すると多バイトになる文字をほかの文字に修正し，再実行する。

KCCB0337X-E

"-unisrc"オプションを指定した場合，環境変数LANGはシフトJISでなければなりません。

要因："-unisrc"オプションを指定した場合，環境変数LANGにシフトJIS以外の値が設定されている。または，環境変数LANGが設定されていない。

（S）COBOLソースの生成を中止する。

（P）環境変数LANGの値をシフトJISに修正し，再実行する。

KCCB0338X-E

"-unisrc"オプションを指定した場合，環境変数LANGはUTF-8でなければなりません。

要因："-unisrc"オプションを指定した場合，環境変数LANGにUTF-8以外の値が設定されている。または，環境変数LANGが設定されていない。

（S）COBOLソースの生成を中止する。

（P）環境変数LANGの値をUTF-8に修正し，再実行する。

KCCB0339X-E

環境変数LANGにUTF-8を指定した場合，"-unisrc"オプションを指定しなければなりません。

要因：環境変数LANGにUTF-8に対応する値が設定されている場合，"-unisrc"オプションが指定されていない。

（S）COBOLソースの生成を中止する。

（P）"-unisrc"オプションを指定し，再実行する。

4.2　生成されるXMLアクセスルーチン

cblxmlコマンドが生成する副プログラムには，COBOLプログラムからXMLドキュメントにアクセスするために必要なアクセスルーチン（XMLアクセスルーチン）が格納されています。

次に，XMLアクセスルーチンの一覧を示します。

CBLXML-OP-Interfaceアクセスルーチン

ファイル上のXMLドキュメントを開くときに呼び出すアクセスルーチンです。

CBLXML-OB-Interfaceアクセスルーチン

バッファ（メモリ）上のXMLドキュメントを開くときに呼び出すアクセスルーチンです。

CBLXML-RD-Interface-BaseElementアクセスルーチン

XMLドキュメントからデータを読み込むときに呼び出すアクセスルーチンです。

CBLXML-WR-Interface-BaseElementアクセスルーチン

XMLドキュメントへデータを書き込むときに呼び出すアクセスルーチンです。

CBLXML-CL-Interfaceアクセスルーチン

XMLドキュメントを閉じるときに呼び出すアクセスルーチンです。

CBLXML-CN-Interfaceアクセスルーチン

書き込みモードで開いたXMLドキュメントを閉じ，出力したXMLドキュメント長を取得するときに呼び出すアクセスルーチンです。

これらのアクセスルーチンをCOBOLプログラム中から呼び出すことで，XMLドキュメントにアクセスできます。

4.2.1　XMLアクセスルーチンの名称形式

XMLアクセスルーチンは，次の名称形式で生成されます。

XMLアクセスルーチン名の形式

CBLXML-xx-Interface-BaseElement

Interface

DDF中のInterface要素のinterfaceName属性に指定した名称が設定されます。

BaseElement

DDF中のBaseElement要素のcobName属性に指定した名称が設定されます。cobName属性を省略した場合は，elemName属性に指定した名称が設定されます。

例

次のcblxmlコマンドに入力するDDFと，生成されるXMLアクセスルーチン名の例を次に示します。

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="row" cobName="TABLEROW">
  ：
 </BaseElement>
</Interface>

（生成されるXMLアクセスルーチンの名称）

CBLXML-OP-EXAMPLE

CBLXML-OB-EXAMPLE

CBLXML-RD-EXAMPLE-TABLEROW

CBLXML-WR-EXAMPLE-TABLEROW

CBLXML-CL-EXAMPLE

CBLXML-CN-EXAMPLE

4.2.2　CBLXML-OP-Interfaceアクセスルーチン

CBLXML-OP-Interfaceアクセスルーチンは，ファイル上のXMLドキュメントを開くためのアクセスルーチンです。このアクセスルーチンで開いたXMLドキュメントは，CBLXML-RD-Interface-BaseElementアクセスルーチンやCBLXML-WR-Interface-BaseElementアクセスルーチンを使ってデータを読み書きできます。

形式

CALL 'CBLXML-OP-Interface'
                USING XML-FILE-NAME
                      XML-FILE-NAME-LENGTH
                      XML-MODE
                      XML-POINTER
                RETURNING CBLXML-RETURN-CODE.

引数

引数のデータ型

指定

説明

01 XML-FILE-NAME

USAGE POINTER.

○

開くXMLドキュメントのファイル名を指すポインタを指定する。

01 XML-FILE-NAME-LENGTH

PIC 9(9) COMP.

○

開くXMLドキュメントのファイル名の長さを指定する。

01 XML-MODE PIC X(16).

○

XMLドキュメントのアクセスモード※を指定する。

01 XML-POINTER

USAGE POINTER.

△

アクセスモードに'E'を指定しない場合，開いたXMLドキュメントのポインタが返される。

XMLドキュメントを開くことに失敗した場合，ポインタの値は保証しない。

○

アクセスモードに'E'を指定した場合，CBLXML-CREATE-XML-POINTERサービスルーチンで作成したXMLドキュメントのポインタを指定する。

01 CBLXML-RETURN-CODE

PIC 9(9) COMP.

△

ステータスが返される。詳細については，「7.3　XMLアクセスルーチンが返すステータス」を参照のこと。

（凡例）

○：アクセスルーチンの呼び出し時，値を設定しておく項目

△：アクセスルーチンの完了時，値が設定される項目

注※

指定できるアクセスモード文字列を示します。括弧内の文字は省略できます。また，順不同です。

R〔V〕〔N〕〔E〕

W〔E〕

U〔V〕〔N〕〔E〕

アクセスモード文字列と意味

文字列

意味

R

読み取りモード

W

書き込みモード

U

更新モード

V

妥当性チェックをする。妥当性チェック機能については，「7.2.8　入力XMLドキュメントの妥当性チェック機能」を参照のこと。

N

外部エンティティ参照を展開しない。

E

エラー情報取得機能や公開識別子を使用するために，サービスルーチンの設定を引き継ぐ。エラー情報取得機能や公開識別子については「9.3.2　エラー情報の取得」と「9.3.3　公開識別子が指定されたXMLドキュメント」を参照のこと。

規則

引数XML-MODEには，1バイト目からアクセスモードを示す文字を指定し，残りの領域には空白を指定します。

XMLドキュメントを開くことに成功した場合，取得したXMLドキュメントのポインタを用いてCBLXML-CL-Interfaceアクセスルーチン，またはCBLXML-CN-InterfaceアクセスルーチンでXMLドキュメントを閉じなければなりません。

CBLXML-OP-Interfaceアクセスルーチンは，開こうとしているXMLドキュメントがすでに開かれているかどうかチェックしません。すでに開かれているXMLドキュメントに対してCBLXML-OP-Interfaceアクセスルーチンを実行すると，そのXMLドキュメントに対する新しいXMLドキュメントのポインタが返されます。

読み取りモードまたは更新モードでは，アクセスモードに'V'と'N'を同時に指定できません。同時に指定したとき，あとに指定した文字列が有効となります。

アクセスモードに'N'を指定したとき，外部エンティティ参照の該当する個所にはテキストデータがないものとして解析します。

環境変数CBLXML_PARSE_NOXXEに'YES'を指定した場合，アクセスモードに'V'を指定していても，入力XMLドキュメントの妥当性チェック機能は無効となります。詳細については，「付録E.4　使用できる解析モードによる動作の違い」を参照してください。

注意事項

CBLXML-OP-Interfaceアクセスルーチンが返すステータスが110の場合は，CBLXML-GET-ERRORサービスルーチンを使用して詳細なエラー情報を取得できます。詳細については，「9.3.2　エラー情報の取得」を参照してください。

4.2.3　CBLXML-OB-Interfaceアクセスルーチン

CBLXML-OB-Interfaceアクセスルーチンは，バッファ（メモリ）上のXMLドキュメントを開くためのアクセスルーチンです。このアクセスルーチンで開いたXMLドキュメントは，CBLXML-RD-Interface-BaseElementアクセスルーチンやCBLXML-WR-Interface-BaseElementアクセスルーチンを使ってデータを読み書きできます。

形式

CALL 'CBLXML-OB-Interface'
                USING BUFFER
                      BUFFER-LENGTH
                      XML-MODE
                      XML-POINTER
                RETURNING CBLXML-RETURN-CODE.

引数

引数のデータ型

指定

説明

01 BUFFER

USAGE POINTER.

○

開くバッファを指すポインタを指定する。

01 BUFFER-LENGTH

PIC 9(9) COMP.

○

開くバッファの長さを指定する。

01 XML-MODE PIC X(16).

○

XMLドキュメントのアクセスモード※を指定する。

01 XML-POINTER

USAGE POINTER.

△

アクセスモードに'E'を指定しない場合，開いたXMLドキュメントのポインタが返される。XMLドキュメントを開くことに失敗した場合，ポインタの値は保証しない。

○

アクセスモードに'E'を指定した場合，CBLXML-CREATE-XML-POINTERサービスルーチンで作成したXMLドキュメントのポインタを指定する。

01 CBLXML-RETURN-CODE

PIC 9(9) COMP.

△

ステータスが返される。詳細については，「7.3　XMLアクセスルーチンが返すステータス」を参照のこと。

（凡例）

○：アクセスルーチンの呼び出し時，値を設定しておく項目

△：アクセスルーチンの完了時，値が設定される項目

注※

指定できるアクセスモード文字列を示します。括弧内の文字は省略できます。また，順不同です。

R〔V〕〔N〕〔E〕

W〔E〕

U〔V〕〔N〕〔E〕

アクセスモード文字列と意味

文字列

意味

R

読み取りモード

W

書き込みモード

U

更新モード

V

妥当性チェックをする。妥当性チェック機能については，「7.2.8　入力XMLドキュメントの妥当性チェック機能」を参照のこと。

N

外部エンティティ参照を展開しない。

E

エラー情報取得機能や公開識別子を使用するために，サービスルーチンの設定を引き継ぐ。エラー情報取得機能や公開識別子については「9.3.2　エラー情報の取得」と「9.3.3　公開識別子が指定されたXMLドキュメント」を参照のこと。

規則

引数XML-MODEには，1バイト目からアクセスモードを示す文字を指定し，残りの領域には空白を指定します。

XMLドキュメントを開くことに成功した場合，取得したXMLドキュメントのポインタを用いてCBLXML-CL-Interfaceアクセスルーチン，またはCBLXML-CN-InterfaceアクセスルーチンでXMLドキュメントを閉じなければなりません。

CBLXML-OB-Interfaceアクセスルーチンは，開こうとしているXMLドキュメントがすでに開かれているかどうかチェックしません。すでに開かれているXMLドキュメントに対してCBLXML-OB-Interfaceアクセスルーチンを実行すると，そのXMLドキュメントに対する新しいXMLドキュメントのポインタが返されます。

読み取りモードまたは更新モードでは，アクセスモードに'V'と'N'を同時に指定できません。同時に指定したとき，あとに指定した文字列が有効となります。

アクセスモードに'N'を指定したとき，外部エンティティ参照の該当する個所にはテキストデータがないものとして解析します。

環境変数CBLXML_PARSE_NOXXEに'YES'を指定した場合，アクセスモードに'V'を指定していても，入力XMLドキュメントの妥当性チェック機能は無効となります。詳細については，「付録E.4　使用できる解析モードによる動作の違い」を参照してください。

注意事項

CBLXML-OB-Interfaceアクセスルーチンでバッファ上のXMLドキュメントを開いた場合，実際に確保されているバッファ領域の大きさに関係なく，引数BUFFER-LENGTHに指定した長さの領域をバッファとみなして入出力します。引数BUFFER-LENGTHには，実際に確保したバッファ領域の大きさを超える長さを指定しないでください。

書き込みモードや更新モードでXMLドキュメントを開く場合，引数BUFFER-LENGTHで指定する入出力領域の長さには，出力または更新後のXMLドキュメントを格納するのに十分な長さを指定してください。

読み取りモードでXMLドキュメントを開く場合，引数BUFFER-LENGTHで指定した長さのバッファ全体をXMLドキュメントとみなして解析します。実際のXMLドキュメントの長さより大きな値を引数BUFFER-LENGTHに指定すると，実際のXMLドキュメントの処理時間に加え，実際のXMLドキュメントのあとを引数BUFFER-LENGTHで指定した長さまで解析するための処理時間が掛かります。引数BUFFER-LENGTHで指定する長さには，実際のXMLドキュメントの長さを指定するようにしてください。

CBLXML-OB-Interfaceアクセスルーチンが返すステータスが110の場合は，CBLXML-GET-ERRORサービスルーチンを使用して詳細なエラー情報を取得できます。詳細については，「9.3.2　エラー情報の取得」を参照してください。

4.2.4　CBLXML-RD-Interface-BaseElementアクセスルーチン

CBLXML-RD-Interface-BaseElementアクセスルーチンは，DDFのBaseElement要素に指定したXML要素の単位でデータの読み込みを実行します。1回のアクセスルーチンの呼び出しで，DDFのItem要素に対応するすべての要素のデータが読み込まれ，XMLアクセス用データ定義に格納されます。

形式

CALL 'CBLXML-RD-Interface-BaseElement'
                USING XML-POINTER
                      XMLアクセス用データ定義
                RETURNING CBLXML-RETURN-CODE.

引数

引数のデータ型

指定

説明

01 XML-POINTER

USAGE POINTER.

○

データを読み込むXMLドキュメントのポインタを指定する。CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定する。

XMLアクセス用データ定義

△

cblxmlコマンドで生成されたXMLアクセス用データ定義のデータ項目名を指定する。このデータ項目に，読み込まれたデータが格納される。

01 CBLXML-RETURN-CODE

PIC 9(9) COMP.

△

ステータスが返される。詳細については，「7.3　XMLアクセスルーチンが返すステータス」を参照のこと。

（凡例）

○：アクセスルーチンの呼び出し時，値を設定しておく項目

△：アクセスルーチンの完了時，値が設定される項目

規則

引数XML-POINTERには，CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定します。

CBLXML-RD-Interface-BaseElementアクセスルーチンが回復可能エラー（ステータス1〜99）を返した場合，XMLドキュメントの入力を続行できます。

CBLXML-RD-Interface-BaseElementアクセスルーチンが致命的エラー（ステータス100〜199）を返した場合，それ以上XMLドキュメントの入力を続行できません。

エラーが発生したXMLドキュメントに対しては，CBLXML-CL-Interfaceアクセスルーチンだけが実行できます。それ以外のアクセスルーチンを実行した場合，動作は保証しません。

CBLXML-RD-Interface-BaseElementアクセスルーチンがエラーを返しても，XMLドキュメントは閉じられません。必ずCBLXML-CL-Interfaceアクセスルーチン，またはCBLXML-CN-Interfaceアクセスルーチンを実行してXMLドキュメントを閉じてください。

4.2.5　CBLXML-WR-Interface-BaseElementアクセスルーチン

CBLXML-WR-Interface-BaseElementアクセスルーチンは，DDFのBaseElement要素に指定したXML要素の単位でデータの書き込みを実行します。1回のアクセスルーチンの呼び出しで，DDFのItem要素に対応するすべての要素のデータが書き込まれます。

形式

CALL 'CBLXML-WR-Interface-BaseElement'
                USING XML-POINTER
                      XMLアクセス用データ定義
                RETURNING CBLXML-RETURN-CODE.

引数

引数のデータ型

指定

説明

01 XML-POINTER

USAGE POINTER.

○

データを書き込むXMLドキュメントのポインタを指定する。CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定する。

XMLアクセス用データ定義

○

cblxmlコマンドで生成されたXMLアクセス用データ定義のデータ項目名を指定する。このデータ項目に，書き込むデータを格納しておく。

01 CBLXML-RETURN-CODE

PIC 9(9) COMP.

△

ステータスが返される。詳細については，「7.3　XMLアクセスルーチンが返すステータス」を参照のこと。

（凡例）

○：アクセスルーチンの呼び出し時，値を設定しておく項目

△：アクセスルーチンの完了時，値が設定される項目

規則

引数XML-POINTERには，CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定します。

CBLXML-WR-Interface-BaseElementアクセスルーチンが回復可能エラー（ステータス1〜99）を返した場合，XMLドキュメントの出力を続行できます。

CBLXML-WR-Interface-BaseElementアクセスルーチンが致命的エラー（ステータス100〜199）を返した場合，それ以上XMLドキュメントの出力を続行できません。

エラーが発生したXMLドキュメントに対しては，CBLXML-CL-Interfaceアクセスルーチン，またはCBLXML-CN-Interfaceアクセスルーチンだけが実行できます。それ以外のアクセスルーチンを実行した場合，動作は保証しません。

CBLXML-WR-Interface-BaseElementアクセスルーチンがエラーを返しても，XMLドキュメントは閉じられません。必ずCBLXML-CL-Interfaceアクセスルーチン，またはCBLXML-CN-Interfaceアクセスルーチンを実行してXMLドキュメントを閉じてください。CBLXML-WR-Interface-BaseElementアクセスルーチンが回復可能エラー，または致命的エラーを返した場合，不完全なXMLドキュメントが生成される可能性があります。

出力，更新した場合のXMLドキュメントの文字エンコーディングは，「付録G.1(1)　出力するXMLドキュメントの文字エンコーディングの設定」に従って出力されます。更新機能を使用する場合，開いたXMLドキュメントの文字エンコーディングではなく，出力するXMLドキュメントの文字エンコーディングの設定に従って変更されます。

更新モードで開いたXMLドキュメントに対応するDDFファイルで，update属性に"yes"を指定していない場合，CBLXML-WR-Interface-BaseElementアクセスルーチンは，XMLドキュメントを更新できないことを示すステータス13を返します。

更新モードで開いたXMLドキュメントから入力をしないで出力した場合，ステータス15が返ります。

更新モードで開いたXMLドキュメントで，直前の入力に対して異なるBaseElement属性で出力した場合，ステータス15が返ります。

4.2.6　CBLXML-CL-Interfaceアクセスルーチン

CBLXML-CL-Interfaceアクセスルーチンは，開いているXMLドキュメントを閉じるためのアクセスルーチンです。

形式

CALL 'CBLXML-CL-Interface'
                USING XML-POINTER
                RETURNING CBLXML-RETURN-CODE.

引数

引数のデータ型

指定

説明

01 XML-POINTER

USAGE POINTER.

○

閉じるXMLドキュメントのポインタを指定する。CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定する。

01 CBLXML-RETURN-CODE

PIC 9(9) COMP.

△

ステータスが返される。詳細については，「7.3　XMLアクセスルーチンが返すステータス」を参照のこと。

（凡例）

○：アクセスルーチンの呼び出し時，値を設定しておく項目

△：アクセスルーチンの完了時，値が設定される項目

規則

引数XML-POINTERには，CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定します。

更新モードで開いたXMLドキュメントを更新しないでCBLXML-CL-Interfaceアクセスルーチンを呼び出した場合，CBLXML-CL-Interfaceアクセスルーチンは，XMLドキュメントが更新されていないことを示すステータス12（CBLXML-NO-UPDATE）を返します。

ドキュメントを書き込みモードで開いている場合，CBLXML-CL-Interfaceアクセスルーチンは，XMLドキュメントを閉じる前に終了タグを出力します。このとき，次のように必要な要素が補完されます。

ドキュメント終了時の要素の補完

最後に書き出されたBaseElement要素とドキュメントの終わりの間に，さらにBaseElement要素が必要なとき，CBLXML-CL-Interfaceアクセスルーチンは，ステータス118（CBLXML-CANT-END-DOC）を返します。このとき，XMLドキュメントは，不完全な状態となります。正しいXMLドキュメントを生成するためには，必要なBaseElement要素を出力する必要があります。

最後に書き出されたBaseElement要素とドキュメントの終わりの間に，BaseElement要素に含まれない要素が必要なときは，その要素が空要素として出力されます。このとき，CBLXML-CL-Interfaceアクセスルーチンは，ステータス0（CBLXML-OK）を返します。CBLXML-CL-Interfaceアクセスルーチンが回復可能エラー，または致命的エラーを返した場合で，そのドキュメントが書き込みモードで開かれていたときは，不完全なXMLドキュメントが生成される可能性があります。

注意事項

XMLドキュメントの出力中にディスク容量の不足のエラーが発生したあと，そのXMLドキュメントを閉じた場合，CBLXML-CN-Interfaceアクセスルーチンで次に示すステータスを返します。

（UNIXの場合）

XMLアクセスルーチンに指定した引数に誤りがあることを示すステータス114（CBLXML-INVALID-PARAMS）を返します。

（Windowsの場合）

正常終了を示すステータス0（CBLXML-OK）を返します。

4.2.7　CBLXML-CN-Interfaceアクセスルーチン

CBLXML-CN-Interfaceアクセスルーチンは，書き込みモードで開いているXMLドキュメントを閉じ，出力したXMLドキュメント長を取得するためのアクセスルーチンです。

形式

CALL 'CBLXML-CN-Interface'
                USING XML-POINTER XML-LENGTH
                RETURNING CBLXML-RETURN-CODE.

引数

引数のデータ型

指定

説明

01 XML-POINTER

USAGE POINTER.

○

閉じるXMLドキュメントのポインタを指定する。CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定する。

01 XML-LENGTH

PIC 9(10) COMP.

△

出力したXMLドキュメントの長さが返される。

01 CBLXML-RETURN-CODE

PIC 9(9) COMP.

△

ステータスが返される。詳細については，「7.3　XMLアクセスルーチンが返すステータス」を参照のこと。

（凡例）

○：アクセスルーチンの呼び出し時，値を設定しておく項目

△：アクセスルーチンの完了時，値が設定される項目

規則

CBLXML-CN-Interfaceアクセスルーチンが正常終了すると，XMLドキュメントが閉じられ，引数XML-LENGTHに出力したXMLドキュメントの長さが返されます。

引数XML-POINTERには，CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを開いたときに取得したポインタを指定します。

更新モードで開いたXMLドキュメントを更新しないでCBLXML-CN-Interfaceアクセスルーチンを呼び出した場合，CBLXML-CN-Interfaceアクセスルーチンは，XMLドキュメントが更新されていないことを示すステータス12（CBLXML-NO-UPDATE）を返します。その場合，XMLドキュメントの長さ（XML-LENGTH）には正常終了を示すステータス0（CBLXML-OK）が返ります。

読み取りモードで開かれたXMLドキュメントをCBLXML-CN-Interfaceアクセスルーチンで閉じた場合，引数XML-LENGTHには正常終了を示すステータス0（CBLXML-OK）が返されます。このとき，CBLXML-CN-Interfaceアクセスルーチンは，ステータス9（CBLXML-NOT-WRITTEN）を返します。

CBLXML-WR-Interface-BaseElementアクセスルーチンやCBLXML-CN-Interfaceアクセスルーチンが回復可能エラー，または致命的エラーを返した場合，引数XML-LENGTHに返される値は不定となります。

ドキュメントを書き込みモードで開いている場合，CBLXML-CN-Interfaceは，XMLドキュメントを閉じる前に終了タグを出力します。このとき，次のように必要な要素が補完されます。

ドキュメント終了時の要素の補完

最後に書き出されたBaseElement要素とドキュメントの終わりの間に，さらにBaseElement要素が必要なとき，CBLXML-CN-Interfaceアクセスルーチンは，ステータス118（CBLXML-CANT-END-DOC）を返します。このとき，XMLドキュメントは，不完全な状態となります。正しいXMLドキュメントを生成するためには，必要なBaseElement要素を出力する必要があります。

最後に書き出されたBaseElement要素とドキュメントの終わりの間に，BaseElement要素に含まれない要素が必要なときは，その要素が空要素として出力されます。このとき，CBLXML-CN-Interfaceアクセスルーチンは，ステータス0（CBLXML-OK）を返します。

注意事項

XMLドキュメントの出力中にディスク容量の不足のエラーが発生したあと，そのXMLドキュメントを閉じた場合，CBLXML-CN-Interfaceアクセスルーチンで次に示すステータスを返します。

（UNIXの場合）

XMLアクセスルーチンに指定した引数に誤りがあることを示すステータス114（CBLXML-INVALID-PARAMS）を返します。

（Windowsの場合）

正常終了を示すステータス0（CBLXML-OK）を返します。

4.3　生成されるXMLアクセス用データ定義

XMLアクセス用データ定義は，COBOLプログラムからアクセスするXML要素に対応したデータ項目が格納された登録集原文です。このデータ項目は，XMLアクセスルーチンでデータの読み書きをするとき，COBOLプログラムとXMLドキュメントとのデータの受け渡しに使用します。

XMLアクセス用データ定義は，DDFのBaseElement要素ごとに01レベルを持つ集団項目となります。集団項目の名称は，BaseElement要素のcobName属性に指定した値となります。

XMLアクセス用データ定義の登録集原文は，COBOLプログラムのデータ部でCOPY文を使用して取り込みます。

4.4　XMLアクセス用ステータス定義

XMLアクセス用ステータス定義は，XMLアクセスルーチンのステータスコード（実行結果を表す値）とエラー定義名称（ステータスコードごとに定義された名称）との対応が格納された登録集原文です。この定義によって，一意のエラー定義名称を使って原始プログラムのステータスの表現を統一できます。

XMLアクセス用ステータス定義は，「CBLXMLRC.cbl」という名称の登録集原文として，XML連携機能によって提供されます。そのため，XML対応COBOLプログラムのコンパイル時には，XMLアクセス用ステータス定義の格納ディレクトリ（フォルダ）が登録集原文の格納ディレクトリ（フォルダ）になるよう，COBOLの環境変数CBLLIBを設定する必要があります。詳細については，「6.1.1(1)　コンパイルに必要な環境変数の設定」，「6.2.1(1)　環境変数の設定」を参照してください。

XMLアクセス用ステータス定義の格納場所

（UNIXの場合）

COBOL2002のインストールディレクトリ/copy

（Windowsの場合）

COBOL2002のインストールフォルダ¥copy

5　XMLアクセスルーチンを使用したCOBOLプログラムの作成

この章では，XMLアクセスルーチンを使ってXMLドキュメントにアクセスするCOBOLプログラムを作成する方法について説明します。

5.1　XMLドキュメントの読み込み

XMLドキュメントからデータを読み込むには，次のような手順のCOBOLプログラムを作成します。

XML要素を読み込むために，cblxmlコマンドで生成されたXMLアクセス用データ定義をCOPY文で取り込む

CBLXML-OB-Interfaceアクセスルーチンを呼び出し，XMLドキュメントを定義しているメモリ領域を開く

CBLXML-RD-Interface-BaseElementアクセスルーチンを呼び出し，XML要素に対応するCOBOLデータ項目にデータを読み込む

読み込んだデータを処理する

CBLXML-CL-Interfaceアクセスルーチンを呼び出し，XMLドキュメントを閉じる

プログラムを終了する

5.1.1　DTD，DDFの例

次に示すコーディング例が対象とするDTD，DDF，およびXMLアクセス用データ定義の例です。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (row)*>
  <!ELEMENT row      (name, address, grade, age)>
  <!ELEMENT name     (#PCDATA)>
  <!ELEMENT address  (addr1, addr2, city, state,
                      postcode)>
  <!ELEMENT addr1    (#PCDATA)>
  <!ELEMENT addr2    (#PCDATA)>
  <!ELEMENT city     (#PCDATA)>
  <!ELEMENT state    (#PCDATA)>
  <!ELEMENT postcode (#PCDATA)>
  <!ELEMENT grade    (#PCDATA)>
  <!ELEMENT age      (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="row">
  <Group cobName="row">
   <Item elemName="name" cobName="full-name"
         type="alphanumeric" size="20"/>
   <Item elemName="age"  type="numeric" size="3"/>
   <Item elemName="city" type="alphanumeric"
         size="30"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLのデータ項目）

01 row.
 02 full-name PIC X(20).
 02 age PIC 9(3).
 02 city PIC X(30).

5.1.2　XMLドキュメントの読み込みのコーディング例

メモリ上のXMLドキュメントからデータを読み込むプログラムのコーディング例を，次に示します。この例では，テスト用にXML要素を定義したメモリ空間をバッファに作成しています。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. READSAMPLE.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
         COPY 'subprog-COPY.cbl'.
       01 XML-POINTER USAGE POINTER.
       01 XML-ERROR-CODE PIC 9(9) USAGE COMP VALUE 0.
       01 BUFFER-MODE PIC X(16).
       01 BUFFER-LENGTH PIC 9(9) COMP VALUE 284.
       01 BUFFER USAGE POINTER VALUE NULL.

      * テストデータ
       01 TEST-DATA.
        02 TEST-DATA1 PIC X(147) VALUE
       '<?xml version="1.0" encoding="Shift_JIS"?><table>
      -'<!--typical values--><row><name>John Smith</name>
      -'<age>20</age><city>Irvine</city></row><row>
      -'<name>'.
        02 TEST-DATA2 PIC X(137) VALUE
       'Jane Doe</name><age>30</age><city>Los Angeles
      -'</city></row><row><name>Tim Johnson</name><age>100
      -'</age><city>San Diego</city></row></table>'.
       PROCEDURE DIVISION.
      *    プログラム開始
           DISPLAY ' COBOL Data Types - Buffer  READ'.

      *    テストデータ
           COMPUTE BUFFER = FUNCTION ADDR(TEST-DATA).

      *    XMLドキュメントを入力するための
      *    オープンモードを'READ'に設定
           MOVE 'R' TO BUFFER-MODE.

      *    XMLドキュメントを開く
           PERFORM OPEN-BUFFER.

           DISPLAY '      *****    Read 1st Row    *****'.

      *    row要素の値をXMLドキュメントから入力する
           PERFORM READ-BUFFER.

      *    入力値を確認する
           IF FULL-NAME NOT EQUAL TO 'John Smith' THEN
               DISPLAY 'ERROR! - FULL-NAME: ' FULL-NAME
           ELSE
               DISPLAY FULL-NAME
           END-IF.

           IF AGE NOT EQUAL TO 20 THEN
               DISPLAY 'ERROR! - age: ' AGE
           ELSE
               DISPLAY AGE
           END-IF.

           IF CITY NOT EQUAL TO 'Irvine' THEN
               DISPLAY 'ERROR! - city: ' CITY
           ELSE
               DISPLAY CITY
           END-IF.

           DISPLAY '      *****    Read 2nd ROW    *****'.
      *    row要素の値をXMLドキュメントから入力する
           PERFORM READ-BUFFER.

      *    入力値を確認する
           IF FULL-NAME NOT EQUAL TO 'Jane Doe' THEN
               DISPLAY 'ERROR! - FULL-NAME: ' FULL-NAME
           ELSE
               DISPLAY FULL-NAME
           END-IF.

           IF AGE NOT EQUAL TO 30 THEN
               DISPLAY 'ERROR! - age: ' AGE
           ELSE
               DISPLAY AGE
           END-IF.

           IF CITY NOT EQUAL TO 'Los Angeles' THEN
               DISPLAY 'ERROR! - city: ' CITY
           ELSE
               DISPLAY CITY
           END-IF.

           DISPLAY '      *****    Read 3rd ROW    *****'.
      *    row要素の値をXMLドキュメントから入力する
           PERFORM READ-BUFFER.

      *    入力値を確認する
           IF FULL-NAME NOT EQUAL TO 'Tim Johnson' THEN
               DISPLAY 'ERROR! - FULL-NAME: ' FULL-NAME
           ELSE
               DISPLAY FULL-NAME
           END-IF.

             IF AGE NOT EQUAL TO 100 THEN
               DISPLAY 'ERROR! - age: ' AGE
           ELSE
               DISPLAY AGE
           END-IF.

           IF CITY NOT EQUAL TO 'San Diego' THEN
               DISPLAY 'ERROR! - city: ' CITY
           ELSE
               DISPLAY CITY
           END-IF.

      *    XMLドキュメントを閉じる
           PERFORM CLOSE-BUFFER.

      *    プログラム終了
           STOP RUN.

      * XMLアクセスルーチン（メモリ空間を開く）
       OPEN-BUFFER.
           CALL 'CBLXML-OB-EXAMPLE'
               USING BUFFER BUFFER-LENGTH
                     BUFFER-MODE XML-POINTER
               RETURNING XML-ERROR-CODE.

           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
              'Failed to open XML document (open) - Error '
                   XML-ERROR-CODE
               GO TO ENDOFPROGRAM
           END-IF.

      * XMLアクセスルーチン（入力）
       READ-BUFFER.
           CALL 'CBLXML-RD-EXAMPLE-row'
               USING XML-POINTER ROW
               RETURNING XML-ERROR-CODE.

           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
                   'Failed to read XML document - Error '
                   XML-ERROR-CODE
               GO TO ENDOFPROGRAM
           END-IF.

      * XMLアクセスルーチン（閉じる）
       CLOSE-BUFFER.
           CALL 'CBLXML-CL-EXAMPLE'
               USING XML-POINTER
               RETURNING XML-ERROR-CODE.

           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
                  'Failed to close XML document - Error '
                   XML-ERROR-CODE
               GO TO ENDOFPROGRAM
           END-IF.

       ENDOFPROGRAM.
           STOP RUN.

       END PROGRAM READSAMPLE.

5.2　XMLドキュメントの書き込み

XMLドキュメントへデータを書き込むには，次のような手順のCOBOLプログラムを作成します。

XML要素を書き込むために，cblxmlコマンドで生成されたXMLアクセス用データ定義をCOPY文で取り込む

CBLXML-OB-Interfaceアクセスルーチンを呼び出し，XMLドキュメントを定義しているメモリ領域を開く

XML要素に書き込むためのデータを作成する

CBLXML-WR-Interface-BaseElementアクセスルーチンを呼び出し，COBOLデータ項目から対応するXML要素にデータを書き込む

CBLXML-CL-Interfaceアクセスルーチンを呼び出し，XMLドキュメントを閉じる

プログラムを終了する

5.2.1　XMLドキュメントの書き込みのコーディング例

メモリ上のXMLドキュメントへデータを書き込むプログラムのコーディング例を，次に示します。なお，このコーディング例が対象にしているDTD，DDFについては，「5.1.1　DTD，DDFの例」を参照してください。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. WRITESAMPLE.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
         COPY 'subprog-COPY.cbl'.
       01 BUFFER USAGE POINTER VALUE NULL.
       01 BUFFER-DATA PIC X(500).
       01 BUFFER-LENGTH PIC 9(9) COMP VALUE 500.
       01 BUFFER-MODE PIC X(16).
       01 XML-POINTER USAGE POINTER.
       01 XML-ERROR-CODE PIC 9(9) COMP VALUE 0.
       PROCEDURE DIVISION.
      *    プログラム開始
           DISPLAY ' COBOL Data Types - WRITE'.

      *    XMLドキュメントを入力するための
      *    オープンモードを'WRITE'に設定
           MOVE 'W' TO BUFFER-MODE.

      *    XMLドキュメントを開く
           PERFORM OPEN-BUFFER.

      *    row要素の値を初期化
           MOVE SPACES TO ROW.

           DISPLAY '      *****    Write 1st Row    *****'.

           MOVE 'John Smith'   TO FULL-NAME.
           MOVE 20             TO AGE.
           MOVE 'Irvine'       TO CITY.

      *    row要素の値をXMLドキュメントに出力する
           PERFORM WRITE-BUFFER.

           DISPLAY '      *****    Write 2nd ROW    *****'.

           MOVE 'Jane Doe'     TO FULL-NAME.
           MOVE 30             TO AGE.
           MOVE 'Los Angeles'  TO CITY.

      *    row要素の値をXMLドキュメントに出力する
           PERFORM WRITE-BUFFER.

           DISPLAY '      *****    Write 3rd ROW    *****'.

           MOVE 'Tim Johnson'  TO FULL-NAME.
           MOVE 100            TO AGE.
           MOVE 'San Diego'    TO CITY.

      *    row要素の値をXMLドキュメントに出力する
           PERFORM WRITE-BUFFER.

      *    XMLドキュメントを閉じる
           PERFORM CLOSE-BUFFER.
           STOP RUN.

      * XMLアクセスルーチン（メモリ空間を開く）
       OPEN-BUFFER.
           COMPUTE BUFFER = FUNCTION ADDR(BUFFER-DATA).
           CALL 'CBLXML-OB-EXAMPLE'
               USING BUFFER BUFFER-LENGTH
                     BUFFER-MODE XML-POINTER
               RETURNING XML-ERROR-CODE.

           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
              'Failed to open XML document (open) - Error '
                   XML-ERROR-CODE
               GO TO ENDOFPROGRAM
           END-IF.

      * XMLアクセスルーチン（出力する）
       WRITE-BUFFER.
           CALL 'CBLXML-WR-EXAMPLE-row'
               USING XML-POINTER ROW
               RETURNING XML-ERROR-CODE.

           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
                   'Failed write base element - Error '
                   XML-ERROR-CODE
                   GO TO ENDOFPROGRAM
           END-IF.

      * XMLアクセスルーチン（閉じる）
       CLOSE-BUFFER.
           CALL 'CBLXML-CL-EXAMPLE'
               USING XML-POINTER
               RETURNING XML-ERROR-CODE.

           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
                   'Failed to close XML document - Error '
                   XML-ERROR-CODE
               GO TO ENDOFPROGRAM
           END-IF.

       ENDOFPROGRAM.
           STOP RUN.

       END PROGRAM WRITESAMPLE.

6　コンパイルとリンケージ

この章では，XML対応COBOLプログラムのコンパイル，およびリンケージを実行して，実行可能ファイルを作成する方法について説明します。

COBOLプログラムのコンパイル，およびリンケージの詳細は，マニュアル「COBOL2002　使用の手引　手引編」またはマニュアル「COBOL2002　ユーザーズガイド」を参照してください。

6.1　UNIXで作成したCOBOLプログラムのUNIXでのコンパイルとリンケージ

UNIXで作成したCOBOLプログラムを，UNIXでコンパイル，リンケージする方法について説明します。

6.1.1　コンパイル

ccbl2002コマンドでコンパイルを実行して，オブジェクトファイル（.o）を生成します。

(1)　コンパイルに必要な環境変数の設定

XML対応COBOLプログラムをコンパイルする場合は，次に示す環境変数を設定しておく必要があります。

システム環境変数PATH

ccbl2002コマンドの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/bin

COBOLの環境変数CBLLIB

XMLステータス定義（登録集原文CBLXMLRC.cbl）の格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/copy

XMLステータス定義の詳細については，「4.4　XMLアクセス用ステータス定義」を参照してください。

指定例

sh（Bシェル）の場合

（AIX(32)，Linux(x86)の場合）

CBLLIB=/opt/HILNGcbl2k/copy
export CBLLIB

（AIX(64)，Linux(x64)の場合）

CBLLIB=/opt/HILNGcbl2k64/copy
export CBLLIB

(2)　コンパイルの指定例

コンパイルの指定例を次に示します。

指定例

（AIXの場合）

ccbl2002 -Compile,NoLink -Main,System mainprog.cbl subprog.cbl

（Linuxの場合）

ccbl2002 -Compile,NoLink -UniObjGen -Main,System mainprog.cbl subprog.cbl

mainprog.cbl

作成したCOBOL主プログラムファイルの名称です。

subprog.cbl

cblxmlコマンドによって生成されたCOBOL副プログラムファイル（XMLアクセスルーチン）の名称です。

注意事項

XML連携機能が生成するCOBOLソースプログラムをコンパイルする場合，ccbl2002コマンドに次のオプションを指定できません。指定した場合，動作は保証しません。

-SimMain　-Bin1Byte　-EquivRule,NotAny　-EquivRule,NotExtend　-EquivRule,StdCode　-V3Rec,Fixed　-V3Rec,Variable　-V3RecFCSpace　-JPN,Alnum　-JPN,V3JPN　-JPN,V3JPNSpace　-CompatiV3　-VOSCBL,OccursKey　-VOSCBL,ReportControl　-VOSCBL,DataComm　-VOSCBL,RedefinesData　-VOSCBL,AssignDataToDevice　-VOSCBL,EvaluateWhenOther　-DigitsTrunc　-V3Spec　-V3Spec,CopyEased　-LowerAsUpper

6.1.2　リンケージ

オブジェクトファイルとXML連携機能の実行時ライブラリを，リンカ（AIXの場合はxlCコマンド，Linuxの場合はg++コマンド）でリンクします。なお，Linux(x86)の場合，x64向けLinux環境では，32bitアプリケーションとしてリンクするために，-m32オプションの指定が必要です。

(1)　一般的なリンケージ

指定例

（AIX(32)の場合）

xlC -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k/lib
    -lcblxmlrt -lcbl2k -lcbl2kml -lm

（AIX(64)の場合）

xlC -q64 -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k64/lib
    -lcblxmlrt64 -lcbl2k64 -lcbl2kml64 -lm

（Linux(x86)の場合）

g++ -o mainprog mainprog.o subprog.o
    -lcblxmlrt -lcbl2k -lcbl2kml -lm -ldl

（Linux(x86)の場合（x64向けLinux環境））

g++ -m32 -o mainprog mainprog.o subprog.o
    -lcblxmlrt -lcbl2k -lcbl2kml -lm -ldl

（Linux(x64)の場合）

g++ -o mainprog mainprog.o subprog.o
    -lcblxmlrt -lcbl2k -lcbl2kml -lm -ldl

引数

-o mainprog

作成する実行可能ファイルの名称です。

-lcblxmlrt

XMLアクセス用実行時ライブラリのリンケージ指定です。

-lcbl2k -lcbl2kml

COBOL2002実行時ライブラリのリンケージ指定です。

-lm

数学ライブラリのリンケージ指定です。

(2)　テストデバッグ機能を使用する場合のリンケージ

-TDInf，-CVInf，-TestCmd,Full，または-TestCmd,Simオプションを指定して作成したオブジェクトファイルをリンケージするとき，AIXでは，COBOL2002テストデバッガのライブラリを指定しないでください。また，Linuxでは，COBOL2002テストデバッガのライブラリを指定しないで，「-ldl」オプションを指定してください。

指定例

（AIX(32)の場合）

xlC -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k/lib
    -lcblxmlrt -lcbl2k -lcbl2kml -lm

（AIX(64)の場合）

xlC -q64 -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k64/lib
    -lcblxmlrt64 -lcbl2k64 -lcbl2kml64 -lm

（Linux(x86)の場合）

g++ -o mainprog mainprog.o subprog.o
    -lcblxmlrt -lcbl2k -lcbl2kml -lm -ldl

（Linux(x86)の場合（x64向けLinux環境））

g++ -m32 -o mainprog mainprog.o subprog.o
    -lcblxmlrt -lcbl2k -lcbl2kml -lm -ldl

（Linux(x64)の場合）

g++ -o mainprog mainprog.o subprog.o
    -lcblxmlrt -lcbl2k -lcbl2kml -lm -ldl

6.1.3　マルチスレッドに対応したCOBOLプログラムの作成

マルチスレッド対応COBOLプログラムをコンパイルする場合は，-MultiThreadオプションを指定します。

指定するライブラリ

（AIX(32)の場合）

COBOL2002スレッド関数インターフェースライブラリ「-lcbl2kmp」，スレッド関数ライブラリ「-lpthreads」，およびスレッド対応システムライブラリ「-lC_r」

（AIX(64)の場合）

COBOL2002スレッド関数インターフェースライブラリ「-lcbl2kmp64」，スレッド関数ライブラリ「-lpthreads」，およびスレッド対応システムライブラリ「-lC_r」

（Linuxの場合）

COBOL2002スレッド関数インターフェースライブラリ「-lcbl2kmp」，およびスレッド関数ライブラリ「-lpthread」

実行可能プログラムの作成方法

（AIX(32)の場合）

ccbl2002 -Compile,NoLink -MultiThread subprog.cbl
xlC_r -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k/lib -L/opt/HILNGcbl2k/lib/cblxml
    -lcblxmlrt -lcbl2k -lcbl2kml -lcbl2kmp -lpthreads -lC_r -lm

（AIX(64)の場合）

ccbl2002 -Compile,NoLink -MultiThread subprog.cbl
xlC_r -q64 -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k64/lib -L/opt/HILNGcbl2k64/lib/cblxml
    -lcblxmlrt64 -lcbl2k64 -lcbl2kml64 -lcbl2kmp64 -lpthreads -lC_r
    -lm

（Linux(x86)の場合）

ccbl2002 -Compile,NoLink -MultiThread -UniObjGen subprog.cbl
g++ -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k/lib
    -lcblxmlrt -lcbl2k -lcbl2kml -lcbl2kmp -lpthread -lm

（Linux(x86)の場合（x64向けLinux環境））

ccbl2002 -Compile,NoLink -MultiThread -UniObjGen subprog.cbl
g++ -m32 -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k/lib
    -lcblxmlrt -lcbl2k -lcbl2kml -lcbl2kmp -lpthread -lm

（Linux(x64)の場合）

ccbl2002 -Compile,NoLink -MultiThread -UniObjGen subprog.cbl
g++ -o mainprog mainprog.o subprog.o
    -L/opt/HILNGcbl2k64/lib
    -lcblxmlrt -lcbl2k -lcbl2kml -lcbl2kmp -lpthread -lm

注意事項

XMLドキュメントの出力では排他制御しません。そのため，マルチスレッドでの動作時に，複数のスレッドから同じXMLドキュメントのファイルや同じXMLドキュメントのバッファへは，出力できません。

6.1.4　ダイナミックリンクに対応したCOBOLプログラムの作成

COBOL2002のダイナミックリンク機能を使用する場合，次のように実行可能ファイル，および副プログラムを作成してください。

(1)　実行可能ファイル（主プログラム）の作成方法

（AIX(32)の場合）

　ccbl2002 -Compile,NoLink -DynamicLink,Call -Main,System mainprog.cbl
　xlC -o mainprog mainprog.o -L/opt/HILNGcbl2k/lib
　    -L/opt/HILNGcbl2k/lib/cblxml -lcblxmlrt -lcbl2k -lcbl2kml
　    -lm

（AIX(64)の場合）

　ccbl2002 -Compile,NoLink -DynamicLink,Call -Main,System mainprog.cbl
　xlC -q64 -o mainprog mainprog.o -L/opt/HILNGcbl2k64/lib
　    -L/opt/HILNGcbl2k64/lib/cblxml -lcblxmlrt64 -lcbl2k64 -lcbl2kml64
　    -lm

（Linux(x86)の場合）

　ccbl2002 -Compile,NoLink -DynamicLink,Call -UniObjGen
　         -Main,System mainprog.cbl
　g++ -o mainprog mainprog.o
　    -L/opt/HILNGcbl2k/lib -lcblxmlrt -lcbl2k -lcbl2kml
　    -lm -ldl

（Linux(x86)の場合（x64向けLinux環境））

　ccbl2002 -Compile,NoLink -DynamicLink,Call -UniObjGen
　         -Main,System mainprog.cbl
　g++ -m32 -o mainprog mainprog.o
　    -L/opt/HILNGcbl2k/lib -lcblxmlrt -lcbl2k -lcbl2kml
　    -lm -ldl

（Linux(x64)の場合）

　ccbl2002 -Compile,NoLink -DynamicLink,Call -UniObjGen
　         -Main,System mainprog.cbl
　g++ -o mainprog mainprog.o
　    -L/opt/HILNGcbl2k64/lib -lcblxmlrt -lcbl2k -lcbl2kml
　    -lm -ldl

(2)　副プログラムの作成方法

（AIX(32)の場合）

　ccbl2002 -PIC,Std subprog.cbl
　xlC -o libsubprog.a subprog.o -qmkshrobj
　    -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lcblxmlrt -lm

（AIX(64)の場合）

　ccbl2002 -PIC,Std subprog.cbl
　xlC -q64 -o libsubprog.a subprog.o -qmkshrobj
　    -L/opt/HILNGcbl2k64/lib -lcbl2k64 -lcbl2kml64 -lcblxmlrt64 -lm

（Linux(x86)の場合）

　ccbl2002 -PIC,Std -UniObjGen subprog.cbl
　g++ -shared -o libsubprog.so subprog.o
　    -L/opt/HILNGcbl2k/lib -Bstatic -lcbl2kml

（Linux(x86)の場合（x64向けLinux環境））

　ccbl2002 -PIC,Std -UniObjGen subprog.cbl
　g++ -m32 -shared -o libsubprog.so subprog.o
　    -L/opt/HILNGcbl2k/lib -Bstatic -lcbl2kml

（Linux(x64)の場合）

　ccbl2002 -PIC,Std -UniObjGen subprog.cbl
　g++ -shared -o libsubprog.so subprog.o
　    -L/opt/HILNGcbl2k64/lib -Bstatic -lcbl2kml

注意事項

プログラムの実行前に，COBOL2002の環境変数CBLLPATHまたは環境変数CBLLSLIBに検索する共用ライブラリのディレクトリ名またはライブラリ名を設定しておく必要があります。Linuxでは，環境変数CBLLSLIBにライブラリ名を設定するとき，環境変数LD_LIBRARY_PATHに検索する共用ライブラリのディレクトリ名を設定しておく必要があります。

6.2　Windowsで作成したCOBOLプログラムのWindowsでのコンパイルとリンケージ

Windowsで作成したCOBOLプログラムを，Windowsでコンパイル，リンケージする方法について説明します。

6.2.1　コンパイルとリンケージ

ccbl2002コマンドでコンパイル，リンケージを実行して，実行可能ファイル（.exe）を生成します。

(1)　環境変数の設定

XML対応COBOLプログラムをコンパイルする場合は，次に示す環境変数を設定しておく必要があります。

システム環境変数PATH

ccbl2002コマンドの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールフォルダ¥bin

COBOLの環境変数CBLLIB

XMLステータス定義（登録集原文CBLXMLRC.cbl）の格納パスを設定します。次の値を指定してください。

COBOL2002のインストールフォルダ¥copy

XMLステータス定義の詳細については，「4.4　XMLアクセス用ステータス定義」を参照してください。

（例）

COBOLの環境変数CBLLIBの設定

set CBLLIB=COBOL2002インストールフォルダ¥copy

(2)　コンパイルとリンケージの指定例

cblxmlコマンドが生成したCOBOL原始プログラムをコンパイルしたオブジェクトファイルでリンケージする場合，ccbl2002コマンドにXMLアクセス用実行時ライブラリ（cblxmlrt.lib）を指定します。コンパイルとリンケージの指定例を次に示します。

指定例

ccbl2002 -OutputFile mainprog.exe mainprog.cbl subprog.cbl
         cblxmlrt.lib

mainprog.cbl

作成したCOBOL主プログラムファイルの名称です。

subprog.cbl

cblxmlコマンドによって生成されたCOBOLアクセスルーチンの副プログラムファイルの名称です。

cblxmlrt.lib

XMLアクセス用実行時ライブラリのリンケージ指定です。

注意事項

XML連携機能が生成するCOBOL原始プログラムをコンパイルする場合，ccbl2002コマンドには次のオプションを指定できません。オプションを指定した場合，動作は保証しません。

-SimMain　-Bin1Byte　-EquivRule,NotAny　-EquivRule,NotExtend　-EquivRule,StdCode　-V3Rec,Fixed　-V3Rec,Variable　-V3RecFCSpace　-JPN,Alnum　-JPN,V3JPN　-JPN,V3JPNSpace　-CompatiV3　-VOSCBL,OccursKey　-VOSCBL,ReportControl　-VOSCBL,DataComm　-VOSCBL,RedefinesData　-VOSCBL,AssignDataToDevice　-VOSCBL,EvaluateWhenOther　-DigitsTrunc　-V3Spec　-V3Spec,CopyEased　-LowerAsUpper

6.2.2　マルチスレッドに対応したCOBOLプログラムの作成

マルチスレッド対応COBOLプログラムをコンパイルする場合は，-MultiThreadオプションを指定します。ccbl2002コマンドでリンクをします。

実行可能プログラムの作成方法

ccbl2002 -Compile,NoLink -MultiThread subprog.cbl
ccbl2002 -OutputFile mainprog.exe mainprog.obj subprog.obj cblxmlrt.lib

注意事項

XMLドキュメントの出力での排他制御はしていません。そのため，マルチスレッドでの動作時に，複数のスレッドから同じXMLドキュメントのファイルや同じXMLドキュメントのバッファへは，出力できません。

6.2.3　ダイナミックリンクに対応したCOBOLプログラムの作成

COBOL2002のダイナミックリンク機能を使用する場合，静的なリンクのときは，副プログラムを先にコンパイルし，作成されたインポートライブラリを実行可能ファイル作成時に指定してください。

動的なリンクのときは，インポートライブラリを実行可能プログラム作成時に指定しないでください。

定数指定のCALL文の呼び出しを動的にリンクするときは，-DynamicLink,Callオプションを指定します。

(1)　副プログラムの作成方法

Windows(x86)の場合

ccbl2002 -OutputFile subprog.dll -Dll,Stdcall subprog.cbl cblxmlrt.lib

Windows(x64)の場合

ccbl2002 -OutputFile subprog.dll -Dll subprog.cbl cblxmlrt.lib

(2)　実行可能ファイル（主プログラム）の作成方法

(a)　静的なリンクの場合

Windows(x86)の場合

ccbl2002 -OutputFile mainprog.exe -Stdcall -Main,System mainprog.cbl subprog.lib

Windows(x64)の場合

ccbl2002 -OutputFile mainprog.exe -Main,System mainprog.cbl subprog.lib

注意事項

COBOL2002の-StdCallオプションで読み込む.cbwファイル（stdcall呼び出し指示ファイル）にXMLアクセスルーチンを指定する場合，XMLアクセスルーチン名に含まれる特殊文字は，COBOL2002のプログラム名の変換規則に従い，変換して指定してください。例えば，ハイフン（-）は下線（_）に変換したXMLアクセスルーチン名を指定してください。

(b)　動的なリンク（定数指定のCALL文での呼び出し）の場合

Windows(x86)の場合

ccbl2002 -DynamicLink,Call -OutputFile mainprog.exe -Stdcall -Main,System mainprog.cbl

Windows(x64)の場合

ccbl2002 -DynamicLink,Call -OutputFile mainprog.exe -Main,System mainprog.cbl

注意事項

動的なリンクを使用する場合，実行時に呼び出し先プログラムの検索方法などを指定してください。動的なリンクについては，マニュアル「COBOL2002　ユーザーズガイド」を参照してください。

cblxmlコマンドで生成したXMLアクセスルーチン（COBOL副プログラム）を，-DynamicLink,Callコンパイラオプションを指定してコンパイルしたとき，プログラム実行時に環境変数CBLLDLLにcblxmlrt.dllを指定する必要があります。

7　実行

この章では，XML対応COBOLプログラムの実行方法，実行時の動作で注意が必要な点，および実行時にXMLアクセスルーチンが返すステータスについて説明します。また，実行時のメモリ所要量について説明します。

7.1　実行方法

7.1.1　XML対応COBOLプログラム実行時に必要な環境変数の設定

XML対応COBOLプログラムを実行する場合は，次に示す環境変数を設定しておく必要があります。

（UNIXの場合）

システム環境変数PATH

cblxmlコマンドの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/bin

システム環境変数LIBPATH（AIXの場合）

共用ライブラリの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/lib

システム環境変数LD_LIBRARY_PATH（Linuxの場合）

共用ライブラリの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/lib:COBOL2002のインストールディレクトリ/lib/cblxml

システム環境変数NLSPATH

XMLパーサが出力するメッセージのパスを設定します。次の値を指定してください。

COBOL2002のインストールディレクトリ/lib/cblxml/cat/%L/%N

（指定例）

sh（Bシェル）の場合

NLSPATH=/opt/HILNGcbl2k/lib/cblxml/cat/%L/%N
export NLSPATH

システム環境変数LANG

メッセージの言語種別を設定します。次の値を指定してください。

　AIXの場合

　　Ja_JP

　　ja_JP

　Linuxの場合

　　ja_JP.UTF-8

文字コードについては，「付録G.2　文字コード」を参照してください。

注

COBOL2002のインストールディレクトリは，OSによって異なります。

AIX(32)，Linux(x86)の場合

　/opt/HILNGcbl2k

AIX(64)，Linux(x64)の場合

　/opt/HILNGcbl2k64

（Windowsの場合）

システム環境変数PATH

DLLファイルの格納パスを設定します。次の値を指定してください。

COBOL2002のインストールフォルダ¥bin

（指定例）

set PATH=COBOL2002インストールフォルダ¥bin

7.1.2　実行時に指定できる環境変数

実行時に指定できる環境変数を次に示します。

環境変数CBLXML_CHKUFLOW

小数点以下のけた落ちを判定します。詳細については「9.4　小数点以下のけた落ちを判定する機能」を参照してください。

環境変数CBLXML_ENTITYLIMIT

XMLドキュメントの入力時に，エンティティ参照回数を制限します。詳細については「付録E.8(2)　エンティティ参照の参照回数を制限する」を参照してください。

環境変数CBLXML_PARSE_NOXXE

XMLドキュメントの入力時に，外部エンティティ参照を展開しないで解析するかどうかを指定します。詳細については「付録E.8(1)　外部エンティティ参照の展開を無効にする」を参照してください。

7.1.3　XML対応COBOLプログラムの実行

XML対応COBOLプログラムは，通常のCOBOLプログラムと同様にコマンドラインから実行します。

（例）

実行可能ファイルwsampleを実行する例を次に示します。

（UNIXの場合）

wsample

（Windowsの場合）

wsample.exe

7.2　実行時の動作に関する注意事項

XML対応COBOLプログラムの実行時の動作で，注意が必要な点について説明します。

7.2.1　省略可能な要素へのアクセス

XMLでは，省略可能な要素を定義できます。省略可能な要素を定義するには，要素の名称の最後に（?）を追加します。

例えば，次のようなDTDが定義されたXMLドキュメントでは，要素「group1」の下位に要素「item1」は必要ですが，要素「item2」はあってもなくてもかまいません。

（省略可能な要素を含むDTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
 <!DOCTYPE table [
  <!ELEMENT table (group1)>
  <!ELEMENT group1 (item1, item2?)>
  <!ELEMENT item1  (#PCDATA)>
  <!ELEMENT item2  (#PCDATA)>
]>
<table/>

省略可能な要素にアクセスする場合，DDFは次のようにすべての要素にアクセスできるように記述する必要があります。

（省略可能な要素にアクセスするDDFの例）

emptyValue属性およびaccessInfo属性の指定がない場合

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE" >
 <BaseElement elemName="group1">
  <Group elemName="group1">
   <Item elemName="item1" type="alphanumeric"
         size="30"/>
   <Item elemName="item2" type="alphanumeric"
         size="30"/>
  </Group>
 </BaseElement>
</Interface>

emptyValue属性の指定がある場合

<?xml version="1.0" encoding="Shift_JIS"?>
 <Interface interfaceName="EXAMPLE" >
 <BaseElement elemName="group1">
  <Group elemName="group1">
   <Item elemName="item1" type="alphanumeric"
         size="30"/>
   <Item elemName="item2" type="alphanumeric"
         size="30" emptyValue="EP"/>
  </Group> </BaseElement></Interface>

accessInfo属性の指定がある場合

<?xml version="1.0" encoding="Shift_JIS"?>
 <Interface interfaceName="EXAMPLE" accessInfo="yes">
 <BaseElement elemName="group1">
  <Group elemName="group1">
   <Item elemName="item1" type="alphanumeric"
         size="30"/>
   <Item elemName="item2" type="alphanumeric"
         size="30"/>
  </Group>
 </BaseElement>
</Interface>

また，省略可能な要素は，XML対応COBOLプログラムでは次のように扱われます。

(1)　省略可能な要素の入力処理

省略可能な要素を省略したXMLドキュメントを入力した場合，Item要素に指定した属性によって，対応するCOBOLデータ項目に入力される値，およびアクセス情報フラグに設定される値が異なります。省略可能な要素を持つXMLドキュメントを入力した場合の，Item要素に指定した属性とCOBOLデータ項目に入力される値の関係を表 7-1に示します。

表7‒1　省略可能な要素の入力処理

省略可能な要素に対応するItem要素のemptyValue属性，emptyContentValue属性，accessInfo属性

入力XMLドキュメントの省略可能な要素

COBOLデータ項目（アクセス情報フラグ）の入力値

emptyValue

emptyContentValue

accessInfo="yes"

○

×

×

要素値あり

要素値

空要素

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

要素なし

emptyValue属性の指定値※2

○

○

×

要素値あり

要素値

空要素

emptyContentValue属性の指定値

要素なし

emptyValue属性の指定値※2

×

×

○

要素あり

要素値

（CBLXML-FLAG-OK）

空要素

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-EMPTY）

要素なし

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-MISSING）

（凡例）

○：指定あり

×：指定なし

注

emptyValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyValue属性の指定は無効となります。

emptyContentValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyContentValue属性の指定は無効となります。

注※1

type属性の指定が"alphanumeric"または"national"の場合はSPACEが設定されます。

type属性の指定が"numeric"，"packed"，"binary"，"float"，または"double"の場合はZEROが設定されます。

注※2

emptyValue属性の指定がない場合，emptyValue属性の省略値が設定されます。

(2)　省略可能な要素の出力処理

省略可能な要素に対応したCOBOLデータ項目，アクセス情報フラグに特定の値を設定することで，省略可能な要素をXMLドキュメントに出力します。Item要素の属性の指定とCOBOLデータ項目，アクセス情報フラグに設定する値によって出力するXMLドキュメントの省略可能な要素の関係を表 7-2に示します。

表7‒2　省略可能な要素の出力処理

省略可能な要素に対応するItem要素のemptyValue属性，emptyContentValue属性，accessInfo属性

COBOLデータ項目（アクセス情報フラグ）の値

出力XMLドキュメント

emptyValue

emptyContentValue

accessInfo="yes"

○

×

×

emptyValue属性の指定値以外の値

要素を出力する

emptyValue属性の指定値※

要素を出力しない

○

○

×

emptyValue属性，emptyContentValue属性の指定値以外の値

要素を出力する

emptyContentValue属性の指定値

空要素を出力する

emptyValue属性の指定値※

要素を出力しない

emptyContentValue属性とemptyValue属性が同じ指定値

要素を出力しない

×

×

○

値（CBLXML-FLAG-OK）

要素を出力する

値（CBLXML-FLAG-EMPTY）

空要素を出力する

値（CBLXML-FLAG-MISSING）

要素を出力しない

（凡例）

○：指定あり

×：指定なし

注

emptyValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyValue属性の指定は無効となります。

emptyContentValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyContentValue属性の指定は無効となります。

注※

emptyValue属性の指定がない場合，emptyValue属性の省略値を設定します。

7.2.2　省略可能な選択要素

省略可能な選択要素は，次の設定でXMLドキュメントの出力時に削除できます。

DTDの条件

設定方法

accessInfo="no"

すべての選択要素にemptyValue値を設定する。

accessInfo="yes"

すべての選択要素にCBLXML-FLAG-MISSINGを設定する。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root   (group1?)>
  <!ELEMENT group1 (item1 | item2)>
  <!ELEMENT item1  (#PCDATA)>
  <!ELEMENT item2  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="root">
  <Group elemName="root">
   <Group elemName="group1">
    <Item elemName="item1" size="10" emptyValue="A"/>
    <Item elemName="item2" size="10" emptyValue="B"/>
   </Group>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 root.
02 group1.
 03 item1 PIC X(10).
 03 item2 PIC X(10).

（COBOLプログラムのコーディング例）

       :
    MOVE 'A' TO item1.        …1.
    MOVE 'B' TO item2.        …2.
    CALL 'CBLXML-WR-EXAMPLE-root'
        USING XML-POINTER   root
        RETURNING CBLXML-RETURN-CODE.
      :

（説明）

item1を出力しないようにemptyValue値を設定してください。

item2を出力しないようにemptyValue値を設定してください。

7.2.3　＋繰り返しを持つ選択要素

選択する要素に＋繰り返し付きの要素がある場合，次の設定で＋繰り返し付きの要素を出力しないようにできます。

DTDの条件

設定方法

countVar指定なし

countVar="yes"

＋繰り返し付き要素のcountVarの値に0を設定する。

countVar="no"

accessInfo="no"

すべての繰り返し項目にemptyValue値を設定する。

countVar="no"

accessInfo="yes"

すべての繰り返し項目にCBLXML-FLAG-MISSINGを設定する。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (item1 | item2+ )>
  <!ELEMENT item1  (#PCDATA)>
  <!ELEMENT item2  (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="root">
  <Group elemName="root">
   <Item elemName="item1" size="10"/>
   <Array max="2">
    <Item elemName="item2" size="10"/>
   </Array>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 root.
 02 item1 PIC X(10).
 02 item2 PIC X(10) OCCURS 2.
 02 item2-COUNT PIC 9(9) USAGE COMP.

（COBOLプログラムのコーディング例）

       :
    MOVE 0 TO item2-COUNT.        …1.
    MOVE 'data1' TO item1.
    CALL 'CBLXML-WR-EXAMPLE-root'
        USING XML-POINTER   root
        RETURNING CBLXML-RETURN-CODE.
      :

（説明）

item2を出力しないように繰り返し数0を設定してください。

7.2.4　選択要素へのアクセス

XMLでは，選択要素（複数の項目のどれかが存在する要素）が定義できます。例えば，次のようなDTDが定義されたXMLドキュメントでは，aaa要素の下位にxxx，yyy，zzzのどれかの要素が存在する可能性があります。

（選択要素を含むDTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (aaa)*>
  <!ELEMENT aaa (xxx | yyy | zzz)>
  <!ELEMENT xxx (#PCDATA)>
  <!ELEMENT yyy (#PCDATA)>
  <!ELEMENT zzz (#PCDATA)>
]>
<table/>

選択要素にアクセスする場合，DDFは次のようにすべての要素にアクセスできるように記述する必要があります。

（選択要素にアクセスするDDFの例）

accessInfo属性の指定がない場合

<?xml version="1.0" encoding="Shift_JIS"?>
 <Interface interfaceName="EXAMPLE">
 <BaseElement elemName="aaa">
  <Group cobName="AAA">
   <Item elemName="xxx" type="alphanumeric"
         size="30"/>
   <Item elemName="yyy" type="alphanumeric"
         size="30"/>
   <Item elemName="zzz" type="alphanumeric"
         size="30"/>
  </Group>
 </BaseElement>
</Interface>

accessInfo属性の指定がある場合

<?xml version="1.0" encoding="Shift_JIS"?>
 <Interface interfaceName="EXAMPLE" accessInfo="yes">
 <BaseElement elemName="aaa">
  <Group cobName="AAA">
   <Item elemName="xxx" type="alphanumeric"
         size="30"/>
   <Item elemName="yyy" type="alphanumeric"
         size="30"/>
   <Item elemName="zzz" type="alphanumeric"
         size="30"/>
  </Group>
 </BaseElement>
</Interface>

また，選択要素は，XML対応COBOLプログラムでは次のように扱われます。

(1)　選択要素の入力処理

選択要素からの入力処理で，選択された要素以外の要素は，対応するCOBOLデータ項目に空白が設定されます。

入出力データ情報定義機能を使用する場合，値がある選択要素に対応するCOBOLデータ項目のアクセス情報フラグのCBLXML-FLAG-MISSING，CBLXML-FLAG-EMPTY，CBLXML-FLAG-INVAL-CHAR，およびCBLXML-FLAG-OVERFLOWにすべて0が設定されます。それ以外の選択要素に対応するCOBOLデータ項目のアクセス情報フラグには，CBLXML-FLAG-MISSINGが設定されます。

(2)　選択要素の出力処理

選択要素への出力処理では，出力したい要素に対応するCOBOLデータ項目だけにデータを格納してください。二つ以上の要素にデータを出力した場合や，選択要素のすべてに空白を格納した場合，XMLアクセスルーチンからエラーのステータスが返されます。

入出力データ情報定義機能を使用する場合，出力したい要素に対応するCOBOLデータ項目のアクセス情報フラグだけにCBLXML-FLAG-OKを設定し，その他のアクセス情報フラグにはCBLXML-FLAG-MISSINGを設定しなければなりません。選択要素中の二つ以上のCOBOLデータ項目のアクセス情報フラグにCBLXML-FLAG-OKを設定した場合，CBLXML-WR-Interface-BaseElementアクセスルーチンの戻り値にエラーのステータスが返されます。また，選択要素に対応するすべてのCOBOLデータ項目に対応するアクセス情報フラグにCBLXML-FLAG-MISSINGを設定した場合も，CBLXML-WR-Interface-BaseElementアクセスルーチンの戻り値にエラーのステータスが返されます。

7.2.5　対応づけしない要素の扱い

DTDの要素のうち，COBOLデータ項目に対応づけなかった要素の出力動作について説明します。

対応づけしない要素のうち0回以上の繰り返し要素（*）と省略可能な要素（?）は，BaseElement要素の内側にある場合は出力されません。その他の要素の場合，空要素が出力されます。

また，BaseElement要素の外側にある要素はすべて空要素が出力されます。BaseElement要素の内側および外側にある対応づけしない要素の出力例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [  <!ELEMENT root (group1, group2, group3)>
  <!ELEMENT group1 (item1a,  item1b, item1c*)>
  <!ELEMENT item1a  (#PCDATA)>
  <!ELEMENT item1b  (#PCDATA)>
  <!ELEMENT item1c  (#PCDATA)>
  <!ELEMENT group2 (item2a?, item2b+)>
  <!ELEMENT item2a  (#PCDATA)>
  <!ELEMENT item2b  (#PCDATA)>
  <!ELEMENT group3 (item3a | item3b)>
  <!ELEMENT item3a  (#PCDATA)>
  <!ELEMENT item3b  (#PCDATA)>]><root/>

item1a要素をBaseElement要素と対応づける場合の例を次に示します。item1a要素に値を代入し，XMLドキュメントを出力します。この場合，BaseElement要素の外側にある要素はすべて空要素として出力します。

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="item1a" cobName="BE">
    <Item elemName="item1a" type="alphanumeric" size="10"/>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 item1a PIC X(10).

（出力したXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <group1>
    <item1a>AAAAAAAAAA</item1a>
    <item1b/>
    <item1c/>
  </group1>
  <group2>
    <item2a/>
    <item2b/>
  </group2>
  <group3>
    <item3a/>
  </group3>
</root>

root要素をBaseElement要素と対応づける場合の例を次に示します。item1a要素に値を代入し，XMLドキュメントを出力します。この場合，BaseElement要素の内側にある要素で0回以上の繰り返し要素（*）と省略可能な要素（?）は出力しません。その他の要素は空要素を出力します。

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root" cobName="BE">
    <Group elemName="root" cobName="BASE">
      <Group elemName="group1">
        <Item elemName="item1a" type="alphanumeric"
              size="10"/>
      </Group>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 BASE.
 02 group1.
  03 item1a PIC X(10).

（出力したXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <group1>
    <item1a>AAAAAAAAAA</item1a>
    <item1b/>
  </group1>
  <group2>
    <item2b/>
  </group2>
  <group3>
    <item3a/>
  </group3>
</root>

7.2.6　要素に囲まれた要素の扱い

DTDで定義された要素のうち，一部の要素だけをDDFで対応づけた場合，対応づけした要素以外は空要素として出力されます。また，対応づけた要素の親要素を省略した場合，親要素が補われて出力されます。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE table [
  <!ELEMENT table (row)+>
  <!ELEMENT row (name, address, grade, age)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT address (addr1, addr2, city, state, zip)>
  <!ELEMENT addr1 (#PCDATA)>
  <!ELEMENT addr2 (#PCDATA)>
  <!ELEMENT city (#PCDATA)>
  <!ELEMENT state (#PCDATA)>
  <!ELEMENT zip (#PCDATA)>
  <!ELEMENT grade (#PCDATA)>
  <!ELEMENT age (#PCDATA)>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="row">
    <Group cobName="row">
      <Item elemName="name" cobName="full-name"
            type="alphanumeric" size="20"/>
      <Item elemName="age" type="numeric" size="3"/>
      <Item elemName="city" type="alphanumeric"
            size="30"/>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 row.
 02 full-name PIC X(20).
 02 age PIC 9(3).
 02 city PIC X(30).

（出力されるXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>

<table>
  <row>
    <name>Mr. X</name>
    <address>
      <addr1/>
      <addr2/>
      <city>Tokyo</city>
      <state/>
      <zip/>
    </address>
    <grade/>
    <age>103</age>
  </row>
</table>

7.2.7　値の入力，出力の動作

XMLドキュメントとCOBOLデータ項目間のデータの読み込み，書き込みには，それぞれ次の規則が適用されます。

(1)　数値の場合

数値データの入力規則

XMLのデータに「E」が含まれる場合，数値を浮動小数点数とみなします。このとき，「E」の左側が仮数部，右側が指数部となります。また，「E」の右側がない場合は，指数を0とみなします。

XMLのすべてのデータが数値以外（スペース，タブおよび改行も含む）の場合，0が読み込まれます。

入力する数値の中に数値以外（スペース，タブおよび改行も含む）がある場合，不当な数値であるため結果は不定となります。ただし，invalidCharValue属性が指定されている場合，その値となります。

（入力例）

<Item>1△2</Item>

注

△は，数値の中に空白文字（スペース，タブおよび改行）がある場合を表します。

入力する数値の前後に空白文字（スペース，タブおよび改行）がある場合，空白文字（スペース，タブおよび改行）を無視して数値だけが読み込まれます。

（入力例）

<Item>△12△</Item>

注

△は，数値の前後に空白文字（スペース，タブおよび改行）がある場合を表します。

浮動小数点数の入力で負符号を持つ0を入力した場合，正の0として入力されます。

数値データの入力例

DDFの定義例

COBOLデータ項目

XMLデータ

COBOLに

格納される値

type="numeric"

sign="signed"

size="9"

fractionalDigits="2"

S9(7)V9(2)

-234.56

-234.56E3

type="packed"

sign="unsigned"

size="9"

fractionalDigits="3"

9(6)V9(3)

USAGE

PACKED-DECIMAL

-234.56

-234.56E3

type="numeric"

sign="leadingSeparate"

S9(9) SIGN

LEADING SEPARATE

-23456

type="binary"

size="9"

9(9)

USAGE COMP

-234.56

'+000000234'

-234.56E3

'+000234560'

type="float"

COMP-1

12345.E4

' .12345000E 09'

234.56

' .23456000E 03'

type="double"

COMP-2

12345.E4

' .12345000000000000E 09'

234.56

' .23456000000000000E 03'

（凡例）

数値データの出力規則

DDFで，Item要素のtype属性に"numeric"，"packed"，または"binary"を指定した値は，size属性，sign属性，fractionalDigits属性，trim属性に従って値が出力されます。これらの数値は，size属性のけた数に従って数値の先頭部分に0が挿入されます。

DDFで，Item要素のtype属性に"float"，または"double"を指定した値は，次の例に示すような浮動小数点形式で出力されます。

数値データの出力例

DDFの定義例

COBOLデータ項目

COBOLデータ項目の値

XMLデータに出力される値

type="numeric"

sign="signed"

size="9"

fractionalDigits="2"

trim="yes"

S9(7)V9(2)

-0.05

<nu1>

-0.05

</nu1>

type="numeric"

sign="signed"

size="9"

fractionalDigits="2"

trim="yes"

S9(7)V9(2)

-123.45

<nu1>

-123.45

</nu1>

type="numeric"

sign="signed"

size="9"

fractionalDigits="2"

trim="no"

S9(7)V9(2)

-123.45

<nu1>

-0000123.45

</nu1>

type="numeric"

sign="leadingSeparate"

S9(9) SIGN

LEADING SEPARATE

-12345

<nu1>

-12345

</nu1>

type="packed"

sign="unsigned"

size="9"

fractionalDigits="3"

trim="no"

9(6)V9(3)

USAGE

PACKED-DECIMAL

123.45

<pa1>

000123.450

</pa1>

type="binary"

size="9"

trim="no"

9(9)

USAGE COMP

123

<bi1>

0000123

</bi1>

type="float"

COMP-1

123.45E2

<fl1>

1.2345000E+04

</fl1>

type="double"

COMP-2

123.45E2

<do1>

1.2345000000000000E+04

</do1>

無限大（Infinity）と非数（Not-a-Number）の浮動小数点数の出力結果

無限大や非数の浮動小数点数を出力した場合，無限大や非数を示す文字列を出力します。無限大や非数を示す文字列は入力できないため，無限大や非数の浮動小数点数は出力しないでください。

(2)　文字列の場合

文字列データの入力規則

DDFで，Item要素のtype属性に"national"，または"alphanumeric"を指定した値をXMLドキュメントから入力する場合，入力した文字列の長さよりCOBOLデータ項目の方が長いときは，余った領域に空白文字が埋められます。

入力する文字列中に不当な文字があった場合，動作は保証しません。

type属性に"national"を指定した値を入力した場合，データ中の1バイト文字は，すべて2バイト文字「[図データ]」（げた記号）に置き換えられます。不当文字については「9.2 入出力時に不当な文字をチェックする機能」の「表9-3 入力時にチェックする文字」を参照してください。

空要素を入力した場合，空白が格納されます。

XMLドキュメントから入力した文字列がスペースまたはタブの場合，そのままCOBOLデータ項目に読み込まれます。

改行コードは，UNIXの場合は，LF（0x0A）に置き換えられます。Windowsの場合は，CR/LF(0x0D0A)に置き換えられます。

文字列データの入力例

DDFの定義例

COBOL

データ項目

XMLデータ

COBOLに

格納される値

type="alphanumeric"

size="10"

X(10)

ABC

'ABC△△△△△△△'

ABCDEFGHIJKL

'ABCDEFGHIJ'

type="national"

size="10"

N(10)

あいう

'あいう▲▲▲▲▲▲▲'

あいうえおかきくけこさし

'あいうえおかきくけこ'

あABい

'あ[図データ]い▲▲▲▲▲▲'

（凡例）

△：半角空白文字

▲：全角空白文字

文字列データの出力規則

DDFで，Item要素のtype属性に"national"，または"alphanumeric"を指定した値をXMLドキュメントへ出力する場合，データの末尾の空白文字は削除されます。

出力する文字列中に不当な文字があった場合，動作は保証しません。

値がすべて空白のデータを出力した場合，空要素が出力されます。

COBOLデータ項目にタブ文字が含まれる場合，XMLドキュメントにそのまま出力されます。

改行コードは，UNIXの場合は，LF（0x0A）で出力されます。Windowsの場合は，CR/LF(0x0D0A)で出力されます。

文字列データの出力例

DDFの定義例

COBOL

データ項目

COBOL

データ項目の値

XMLデータに出力される値

type="alphanumeric"

size="10"

trim="yes"

X(10)

'ABC'

<an1>ABC</an1>

SPACE

<an1></an1>

type="alphanumeric"

size="10"

trim="no"

X(10)

'ABC'

<an1>ABC△△△△△△△</an1>

SPACE

<an1>△△△△△△△△△△</an1>

type="national"

size="5"

trim="yes"

N(5)

N'あいう'

<na1>あいう</na1>

SPACE

<na1></na1>

type="national"

size="5"

trim="no"

N(5)

N'あいう'

<na1>あいう▲▲</na1>

SPACE

<na1>▲▲▲▲▲</na1>

（凡例）

△：半角空白文字

▲：全角空白文字

7.2.8　入力XMLドキュメントの妥当性チェック機能

CBLXML-OP-InterfaceまたはCBLXML-OB-InterfaceアクセスルーチンのXML-MODE引数（アクセスモードを指定する引数）に"V"を指定すると，XMLパーサのチェック機能によって，入力するXMLドキュメントのDTDと本文の妥当性がチェックされます。

妥当性チェックを受けるXMLドキュメントは，DTDがなければなりません。DTDがない場合は，妥当性チェックでエラーになります。妥当性チェックでエラーが検出された場合，CBLXML-OP-InterfaceまたはCBLXML-OB-Interfaceアクセスルーチンのステータスとして110（CBLXML-XML-PARSE-FAIL）が返されます。

妥当性チェックの有無による動作の違いについては，「付録E.4　使用できる解析モードによる動作の違い」を参照してください。

7.2.9　属性の入出力

属性の入出力動作は，属性のデフォルト指定によって異なります。

この節では，属性のデフォルト指定と属性の入出力動作の関係を表にして説明します。また，属性のデフォルト指定および属性値の入力動作についての注意事項を説明したあとに，属性の入力例と出力例を示します。

(1)　属性のデフォルト指定値と属性の入力

表7‒3　属性のデフォルト指定値と属性の入力動作

ATTLIST属性のデフォルト指定

AttrItem要素のemptyValue属性，emptyContentValue属性，accessInfo属性

入力XMLドキュメントの属性値

COBOLデータ項目（アクセス情報フラグ）の入力値

emptyValue

emptyContentValue

accessInfo="yes"

#REQUIRED

○

×

×

属性あり（値あり）

属性値

属性あり（値なし）

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

属性なし

emptyValue属性の指定値※2

○

○

×

属性あり（値あり）

属性値

属性あり（値なし）

emptyContentValue属性の指定値

属性なし

emptyValue属性の指定値※2

×

×

○

属性あり（値あり）

属性値

（CBLXML-FLAG-OK）

属性あり（値なし）

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-EMPTY）

属性なし

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-MISSING）

#IMPLIED

○

×

×

属性あり（値あり）

属性値

属性あり（値なし）

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

属性なし

emptyValue属性の指定値※2

○

○

×

属性あり（値あり）

属性値

属性あり（値なし）

emptyContentValue属性の指定値

属性なし

emptyValue属性の指定値※2

×

×

○

属性あり（値あり）

属性値

（CBLXML-FLAG-OK）

属性あり（値なし）

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-EMPTY）

属性なし

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-MISSING）

値

○

×

×

属性あり（値あり）

属性値

属性あり（値なし）

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

属性なし

ATTLIST属性に指定したデフォルト値

○

○

×

属性あり（値あり）

属性値

属性あり（値なし）

emptyContentValue属性の指定値

属性なし

ATTLIST属性に指定したデフォルト値

×

×

○

属性あり（値あり）

属性値

（CBLXML-FLAG-OK）

属性あり（値なし）

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-EMPTY）

属性なし

※3

#FIXED 値

○

×

×

属性あり（値あり）

ATTLIST属性に指定したデフォルト値

属性あり（値なし）

属性なし

○

○

×

属性あり（値あり）

ATTLIST属性に指定したデフォルト値

属性あり（値なし）

属性なし

×

×

○

属性あり（値あり）

ATTLIST属性に指定したデフォルト値

（CBLXML-FLAG-OK）

属性あり（値なし）

※4

属性なし

※5

（凡例）

○：指定あり

×：指定なし

注

emptyValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyValue属性の指定は無効となります。

emptyContentValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyContentValue属性の指定は無効となります。

注※1

type属性の指定が"alphanumeric"または"national"の場合はSPACEが設定されます。

type属性の指定が"numeric"，"packed"，"binary"，"float"，または"double"の場合はZEROが設定されます。

注※2

emptyValue属性の指定がない場合，emptyValue属性の省略値が設定されます。

注※3

DTDあり

ATTLIST属性に指定したデフォルト値

（CBLXML-FLAG-OK）

DTDなし

cblxmlコマンドに指定したXMLドキュメントのATTLIST属性に指定したデフォルト値

（CBLXML-FLAG-MISSING）

注※4

DTDあり

ATTLIST属性に指定したデフォルト値

（CBLXML-FLAG-EMPTY）

DTDなし

cblxmlコマンドに指定したXMLドキュメントのATTLIST属性に指定したデフォルト値

（CBLXML-FLAG-EMPTY）

注※5

DTDあり

ATTLIST属性に指定したデフォルト値

（CBLXML-FLAG-OK）

DTDなし

cblxmlコマンドに指定したXMLドキュメントのATTLIST属性に指定したデフォルト値

（CBLXML-FLAG-MISSING）

(2)　属性のデフォルト指定値と属性の出力

表7‒4　属性のデフォルト指定値と属性の出力動作

ATTLIST属性のデフォルト指定

AttrItem要素のemptyValue属性，emptyContentValue属性，accessInfo属性

COBOLデータ項目（アクセス情報フラグ）の出力値

出力XMLドキュメントでの属性

emptyValue

emptyContentValue

accessInfo="yes"

#REQUIRED

○

×

×

emptyValue属性の指定値以外の値

指定した値の属性を出力する

emptyValue属性の指定値※

空の属性を出力する

○

○

×

emptyValue属性，emptyContentValue属性の指定値以外の値

指定した値の属性値

emptyContentValue属性の指定値

空の属性値

emptyValue属性の指定値※

空の属性値

emptyContentValue属性とemptyValue属性が同じ指定値

空の属性値

×

×

○

値（アクセス情報フラグにCBLXML-FLAG-OKが設定される）

指定した値の属性値

値（アクセス情報フラグにCBLXML-FLAG-EMPTYが設定される）

空の属性値

値（アクセス情報フラグにCBLXML-FLAG-MISSINGが設定される）

空の属性値

#IMPLIED

○

×

×

emptyValue属性の指定値以外の値

指定した値の属性値

emptyValue属性の指定値※

出力しない

○

○

×

emptyValue属性，emptyContentValue属性の指定値以外の値

指定した値の属性値

emptyContentValue属性の指定値

空の属性値

emptyValue属性の指定値

出力しない

emptyContentValue属性とemptyValue属性が同じ指定値

出力しない

×

×

○

値（アクセス情報フラグにCBLXML-FLAG-OKが設定される）

指定した値の属性値

値（アクセス情報フラグにCBLXML-FLAG-EMPTYが設定される）

空の属性値

値（アクセス情報フラグにCBLXML-FLAG-MISSINGが設定される）

出力しない

値

○

×

×

emptyValue属性の指定値以外の値

指定した値の属性値

emptyValue属性の指定値※

出力しない

○

○

×

emptyValue属性，emptyContentValue属性の指定値以外の値

指定した値の属性値

emptyContentValue属性の指定値

空の属性値

emptyValue属性の指定値※

出力しない

emptyContentValue属性とemptyValue属性が同じ指定値

出力しない

×

×

○

値（アクセス情報フラグにCBLXML-FLAG-OKが設定される）

指定した値の属性値

値（アクセス情報フラグにCBLXML-FLAG-EMPTYが設定される）

空の属性値

値（アクセス情報フラグにCBLXML-FLAG-MISSINGが設定される）

出力しない

#FIXED 値

○

×

×

emptyValue属性の指定値以外の値

属性のデフォルト指定値

emptyValue属性の指定値※

出力しない

○

○

×

emptyValue属性，emptyContentValue属性の指定値以外の値

属性のデフォルト指定値

emptyContentValue属性の指定値

空の属性値

emptyValue属性の指定値※

出力しない

emptyContentValue属性とemptyValue属性が同じ指定値

出力しない

×

×

○

値（アクセス情報フラグにCBLXML-FLAG-OKが設定される）

属性のデフォルト指定値

値（アクセス情報フラグにCBLXML-FLAG-EMPTYが設定される）

空の属性値

値（アクセス情報フラグにCBLXML-FLAG-MISSINGが設定される）

出力しない

（凡例）

○：指定あり

×：指定なし

注

emptyValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyValue属性の指定は無効となります。

emptyContentValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyContentValue属性の指定は無効となります。

注※

emptyValue属性の指定がない場合，emptyValue属性の省略値を設定します。

(3)　属性がDDFで対応づけされていない場合の属性の入出力

表7‒5　属性がDDFで対応づけされていない場合

ATTLIST属性のデフォルト指定

XMLドキュメントの入力

XMLドキュメントの出力

#REQUIRED※

無視する。

空の属性値（attr = ""）を出力する。

#IMPLIED

無視する。

属性を出力しない。

値

無視する。

属性を出力しない。

#FIXED 値

無視する。

属性を出力しない。

注※

属性値のデフォルト指定が#REQUIREDの場合は，必ずその属性をDDFで対応づけてください。DDFで対応づけていない場合，適正な属性値が出力されません。

DDFで対応づけた属性のデフォルト指定に#REQUIREDを使用した場合の指定例については，「(4)　属性のデフォルト指定時の注意事項」を参照してください。

(4)　属性のデフォルト指定時の注意事項

属性のデフォルト指定を使用する場合の注意事項を次に示します。

属性値の入出力は，属性の型には依存しません。属性値として記述された文字列は属性の型には関係なくCOBOLデータ項目に入出力されます。

ATTLIST属性のデフォルト指定では，英数字項目および日本語項目の場合は160文字，数字項目の場合は18けた（符号，小数点は含まない）を指定してください。

XMLドキュメント妥当性チェック機能で属性値が適正かどうかをチェックできるのは，属性値の入力時だけです。属性値の出力時に値が適正かどうかをチェックすることはできません。

XMLドキュメント妥当性チェック機能については，「7.2.8　入力XMLドキュメントの妥当性チェック機能」を参照してください。

属性のデフォルト指定に#REQUIREDを使用して属性値に空文字列が出力されると，出力された属性値が不正と判断される属性があります。常に適正な属性値を出力するために，#REQUIREDでデフォルト指定をする場合は，その属性をDDFで対応づける必要があります。

DDFで対応づけた属性を#REQUIREDで指定した場合の指定例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
 <!DOCTYPE table [
    <!ELEMENT table (item1, item2, item3, item4, item5)>
  <!ELEMENT item1 EMPTY>
  <!ELEMENT item2 EMPTY>
  <!ELEMENT item3 EMPTY>
  <!ELEMENT item4 EMPTY>
  <!ELEMENT item5 EMPTY>
  <!ATTLIST item1 attr11 CDATA #REQUIRED>
  <!ATTLIST item1 attr12 CDATA #IMPLIED>
  <!ATTLIST item1 attr13 CDATA "abc" >
  <!ATTLIST item1 attr14 CDATA #FIXED "def">
  <!ATTLIST item2 attr21 ID #IMPLIED >
  <!ATTLIST item2 attr22 IDREF #IMPLIED>
  <!ATTLIST item2 attr23 IDREFS #IMPLIED>
  <!ATTLIST item2 attr24 NMTOKEN #IMPLIED>
  <!ATTLIST item2 attr25 NMTOKENS #IMPLIED>
  <!ATTLIST item3 attr31 (blue|red|yellow) #IMPLIED>
  <!ATTLIST item4 attr41 CDATA #IMPLIED>
  <!ATTLIST item5 attr51 CDATA #REQUIRED>
  <!ATTLIST item5 attr52 CDATA #IMPLIED>
]>
<table/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="table">
    <Group cobName="grp1">
      <AttrItem elemName="item1" attrName="attr11"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item1" attrName="attr12"
      type="alphanumeric" emptyValue="xxx" size="10"/>
      <AttrItem elemName="item1" attrName="attr13"
      type="alphanumeric" emptyValue="yyy" size="10"/>
      <AttrItem elemName="item1" attrName="attr14"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item2" attrName="attr21"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item2" attrName="attr22"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item2" attrName="attr23"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item2" attrName="attr24"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item2" attrName="attr25"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item3" attrName="attr31"
      type="alphanumeric" size="10"/>
      <AttrItem elemName="item4" attrName="attr41"
      type="numeric" trim="no" size="4"/>
    </Group>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 grp1.
 02 item1-attr11 PIC X(10).
 02 item1-attr12 PIC X(10).
 02 item1-attr13 PIC X(10).
 02 item1-attr14 PIC X(10).
 02 item2-attr21 PIC X(10).
 02 item2-attr22 PIC X(10).
 02 item2-attr23 PIC X(10).
 02 item2-attr24 PIC X(10).
 02 item2-attr25 PIC X(10).
 02 item3-attr31 PIC X(10).
 02 item4-attr41 PIC 9(4).

(5)　属性値の入力動作についての注意事項

type属性に"alphanumeric"を指定し，入力する値の空白文字（スペース，タブおよび改行）はスペース(X'20')に置き換えてCOBOLデータ項目に読み込まれます。

type属性に"numeric"，"packed"，"binary"，"float"，"double"を指定し，入力する数値の前後に空白文字（スペース，タブおよび改行）がある場合，空白文字（スペース，タブおよび改行）を無視して数値だけが読み込まれます。

（入力例）

<Item>△12△</Item>

注

△は，数値の前後に空白文字（スペース，タブおよび改行）がある場合を表します。

type属性に"numeric"，"packed"，"binary"，"float"，"double"を指定し，入力する数値の中に空白文字（スペース，タブおよび改行）がある場合，不当な数値であるため結果は不定となります。

（入力例）

<Item>1△2</Item>

注

△は，数値の中に空白文字（スペース，タブおよび改行）がある場合を表します。

(6)　属性の入力例

次に示すXMLドキュメントを入力した場合にCOBOLデータ項目に格納される値を表 7-6に示します。

（入力ドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<table>
 <item1 attr11="aaa" attr14="ddd"/>
 <item2 attr21="id1" attr22="id1" attr23="id1 id1"
        attr24="1cm" attr25="1cm 2cm"/>
 <item3 attr31="red"/>
 <item4 attr41="nan"/>
 <item5 attr51="foo"/>
</table>

表7‒6　COBOLデータ項目に格納される値

COBOLデータ項目

値

備考

attr11

aaa

−

attr12

xxx

属性が存在しないため，emptyValueで指定した値が格納される。

attr13

abc

属性が存在しないため，DTDのデフォルト値が格納される。

attr14

def

#FIXEDが指定されているため，ドキュメント上の属性値に関係なくDTDのデフォルト値が格納される。

attr21

id1

−

attr22

id1

−

attr23

id1△id1

−

attr24

1cm

−

attr25

1cm△2cm

−

attr31

red

−

attr41

0000

数字項目に文字列が入力されたため，0が格納される。

（凡例）

△：半角空白文字

(7)　属性の出力例

表7‒7　COBOLデータ項目に設定した出力値

COBOLデータ項目

値

attr11

aaa

attr12

xxx

attr13

zzz

attr14

bbb

attr21

id1

attr22

id1

attr23

id1△id1

attr24

1cm

attr25

1cm△2cm

attr31

blue

attr41

0012

（凡例）

△：半角空白文字

表 7-7に示した値をCOBOLデータ項目に設定した場合，次のようなXMLドキュメントが出力されます。

（出力ドキュメント）

<table>
 <item1 attr11="aaa"attr13="zzz"attr14="def"/>    …1.
        attr13="zzz"
        attr14="def"/>           …2.
 <item2 attr21="id1"
        attr22="id1"
        attr23="id1 id1"
        attr24="1cm"
        attr25="1cm 2cm"
 <item3 attr31="blue"/>
 <item4 attr41="0012"/>          …3.
 <item5 attr51=""                …4.
 />
                                 …5.
</table>

（説明）

COBOLデータ項目の値がemptyValueの値に等しいため，属性は出力されません。

#FIXEDが指定されているため，COBOLデータ項目の値に関係なく"def"が出力されます。

trim="no"が指定されているため，前に0が付いて出力されます。

DDFで対応づけてはいませんが，#REQUIREDが指定されているため，空文字列が出力されます。

DDFで対応づけていないため，attr52は出力されません。

7.2.10　EMPTYを指定した要素の入出力

ELEMENT属性にEMPTYを指定した要素とItem要素を対応づける場合の入出力を次に示します。

(1)　EMPTYを指定した要素の入力

ELEMENT属性のキーワードに「EMPTY」を指定した場合の要素の入力内容を表 7-8に示します。

表7‒8　EMPTYを指定した要素の入力

Item要素のemptyValue属性，emptyContentValue属性，accessInfo属性

入力XMLドキュメント

COBOLデータ項目（アクセス情報フラグ）の入力値

emptyValue

emptyContentValue

accessInfo="yes"

○

×

×

空要素

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

要素なし

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

○

○

×

空要素

emptyContentValue属性の指定値

要素なし

emptyValue属性の指定値※2

×

×

○

空要素

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-EMPTY）

要素なし

type属性の指定によって，英数字と日本語はSPACE，数値はZERO※1

（CBLXML-FLAG-MISSING）

（凡例）

○：指定あり

×：指定なし

注

emptyValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyValue属性の指定は無効となります。

emptyContentValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyContentValue属性の指定は無効となります。

注※1

type属性の指定が"alphanumeric"または"national"の場合はSPACEが設定されます。

type属性の指定が"numeric"，"packed"，"binary"，"float"，または"double"の場合はZEROが設定されます。

注※2

emptyValue属性の指定がない場合，emptyValue属性の省略値が設定されます。

(2)　EMPTYを指定した要素の出力

ELEMENT属性のキーワードに「EMPTY」を指定した場合の要素の出力内容を表 7-9に示します。

表7‒9　EMPTYを指定した要素の出力

Item要素のemptyValue属性，emptyContentValue属性，accessInfo属性

COBOLデータ項目（アクセス情報フラグ）の出力値

出力XMLドキュメント

emptyValue

emptyContentValue

accessInfo="yes"

○

×

×

emptyValue属性の指定値以外の値

要素を出力する。

emptyValue属性の指定値※3

省略可能な要素の場合は要素を出力しない。

省略できない要素の場合はemptyValue属性の指定値を出力する。※1

○

○

×

emptyValue属性，emptyContentValue属性の指定値以外の値

COBOLデータ項目に指定した値

emptyContentValue属性の指定値

空要素

emptyValue属性の指定値

省略可能な要素の場合は要素を出力しない。

省略できない要素の場合はemptyValue属性の指定値を出力する。※1

emptyContentValue属性とemptyValue属性が同じ指定値

省略可能な要素の場合は要素を出力しない。

省略できない要素の場合は空要素を出力する。

×

×

○

属性値（アクセス情報フラグにCBLXML-FLAG-OKを設定する）

要素を出力する。

属性値（アクセス情報フラグにCBLXML-FLAG-EMPTYを設定する）

空要素を出力する。

属性値（アクセス情報フラグにCBLXML-FLAG-MISSINGを設定する）

省略可能な要素の場合は要素を出力しない。

省略できない要素の場合は要素値を出力する。※2

（凡例）

○：指定あり

×：指定なし

注

emptyValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyValue属性の指定は無効となります。

emptyContentValue属性とaccessInfo属性を同時に指定した場合，accessInfo属性の指定値が優先され，emptyContentValue属性の指定は無効となります。

EMPTYに属性があり，その属性だけをAttrItem要素で対応づけてXMLドキュメントを出力する場合，空要素を出力する。

注※1

空要素タグの例

<ABC/>

注※2

countVar属性に"no"を指定したArray要素の直下に繰り返し要素をItem要素で対応づけて，アクセス情報フラグにCBLXML-FLAG-MISSINGを指定した場合は，省略できない要素であっても出力されません。

注※3

emptyValue属性の指定がない場合，emptyValue属性の省略値を設定します。

7.2.11　XMLドキュメントの更新

XMLドキュメントの更新をする場合のXMLアクセスルーチンの呼び出し順を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE root [
  <!ELEMENT root (X)>
  <!ELEMENT X (A,B?)>
  <!ELEMENT A (#PCDATA)>
  <!ELEMENT B (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="X">
  <Group elemName="X" update="yes">
   <Item elemName="A" size="5"/>
   <Item elemName="B" size="5"/>
  </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 X.
 02 A PIC X(5).
 02 B PIC X(5).

（COBOL原始プログラム）

                 :
* open
     MOVE 'U' TO XML-MODE.
     MOVE 'data.xml' TO FILE-NAME.
     MOVE 8 TO XML-FILE-NAME-LENGTH.
     COMPUTE XML-FILE-NAME = FUNCTION ADDR(FILE-NAME).
     CALL 'CBLXML-OP-EXAMPLE'     …1.
         USING XML-FILE-NAME
               XML-FILE-NAME-LENGTH
               XML-MODE
               XML-POINTER
         RETURNING CBLXML-RETURN-CODE.

* read
     CALL 'CBLXML-RD-EXAMPLE-X'   …2.
         USING XML-POINTER X
         RETURNING CBLXML-RETURN-CODE.
     MOVE 'new A' TO A.
     MOVE 'new B' TO B.

* write
     CALL 'CBLXML-WR-EXAMPLE-X'   …3.
         USING XML-POINTER X
         RETURNING CBLXML-RETURN-CODE.

* close
     CALL 'CBLXML-CL-EXAMPLE'     …4.
         USING XML-POINTER
         RETURNING CBLXML-RETURN-CODE.
                  :

XMLドキュメントを更新する場合，次の順序でXMLアクセスルーチンを呼び出す必要があります。

アクセスモード"U"（更新）を指定して，CBLXML-OP-EXAMPLEアクセスルーチンでXMLドキュメントを開く。

CBLXML-RD-EXAMPLE-Xアクセスルーチンで更新対象を入力する。

CBLXML-WR-EXAMPLE-Xアクセスルーチンで更新対象を更新する。

CBLXML-CL-EXAMPLEアクセスルーチンでXMLドキュメントを閉じる。

XMLドキュメント

（更新前）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <X>
    <A>AAA01</A>
    <B>BBB01</B>
  </X>
</root>

（更新後）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <X>
    <A>new A</A>
    <B>new B</B>
  </X>
</root>

繰り返し要素の内側にBaseElement要素を対応づけた場合は，更新したい位置までCBLXML-RD-Interface-BaseElementアクセスルーチンを繰り返し呼び出し，更新したい項目に値を代入して，CBLXML-WR-Interface-BaseElementアクセスルーチンを呼び出すことで更新してください。3回目のrow要素を更新する場合のXMLアクセスルーチンの呼び出し例を次に示します。

（例）

CBLXML-OP-xyz                     ("U"更新モードでXMLドキュメントを開く)
CBLXML-RD-xyz-row                 (1回目のrow要素を入力する)
CBLXML-RD-xyz-row                 (2回目のrow要素を入力する)
CBLXML-RD-xyz-row                 (3回目のrow要素を入力する)
ADD 1 TO QUANTITY OF ROW          (更新したい要素に値を指定する)
CBLXML-WR-xyz-row                 (3回目のrow要素を更新する)
CBLXML-CL-xyz                     (XMLドキュメントを閉じる)

update属性に"yes"を指定したGroup要素をelemName属性で対応づけた場合，Group要素以下が更新の対象になります。cobName属性だけで対応づけた場合は，Group要素の直下のGroup要素，およびItem要素以下が更新の対象となります。

次に，elemName属性で対応づけた場合と，cobName属性で対応づけた場合の例を示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE root [
  <!ELEMENT root (X)>
  <!ELEMENT X (A,B)>
  <!ELEMENT A (#PCDATA)>
  <!ELEMENT B (#PCDATA)>
]>
<root/>

（DDFの例）

指定例1

（elemName属性で対応づけた場合）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="X">
 <Group elemName="X" update="yes">
   <Item elemName="A" size="5"/>
   <Item elemName="B" size="5"/>
 </Group>
 </BaseElement>
</Interface>

指定例2

（cobName属性で対応づけた場合）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="X">
 <Group cobName="X" update="yes">
   <Item elemName="A" size="5"/>
   <Item elemName="B" size="5"/>
 </Group>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 X.
 02 A PIC X(5).
 02 B PIC X(5).

（更新されるXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <X>
    <A>AAA</A>
    <!-- COMMENT -->
    <B>BBB</B>
  </X>
</root>

（更新後のXMLドキュメント）

指定例1の更新結果

elemName要素で対応づけた場合，X以下の要素が更新の対象となり更新時にコメントは削除されます。

<?xml version="1.0" encoding="Shift_JIS"?>

<root>
  <X>
    <A>New A</A>
    <B>New B</B>
  </X>
</root>

指定例2の更新結果

cobName要素だけで対応づけた場合，Xの直下のA要素とB要素が更新の対象となり，Xの直下のコメントは，更新されません。

<?xml version="1.0" encoding="Shift_JIS"?>

<root>
  <X>
    <A>New A</A>
    <!-- COMMENT -->
    <B>New B</B>
  </X>
</root>

7.2.12　XMLドキュメントの更新機能の注意事項

XMLドキュメントの更新処理では，更新対象外の部分であっても，更新前後で異なって出力される部分があります。詳細については，「付録E.7　入力ドキュメントとの相違点」を参照してください。

更新対象以外の要素の値や属性の値に，定義済み実体参照や文字参照がある場合，「付録D.1　定義済み実体参照」の規則に従って変換して更新されます。更新対象の要素の値や属性の値に，定義済み実体参照や文字参照がある場合は，cblxmlコマンドの-nopeconvオプション（実体参照を変換しない）の指定に従って更新されます。

XMLドキュメントを更新した場合，XMLドキュメントのXML宣言は，属性「version="1.0"」，およびencoding属性だけのXML宣言に変更されます。更新後の文字エンコーディングは，「付録G.1(1)　出力するXMLドキュメントの文字エンコーディングの設定」に従って出力されます。更新機能を使用する場合，開いたXMLドキュメントの文字エンコーディングではなく出力するXMLドキュメントの文字エンコーディングの設定に従って変更されます。

更新前のXMLドキュメントに文書型宣言（DOCTYPE宣言）がある場合，更新後のXMLドキュメントに，更新前と等価な文書型宣言（DOCTYPE宣言）を復元します。次の点は更新前と異なって出力されます。

文書型宣言の開始を示す'<!DOCTYPE'，ルート要素名，公開識別子，システム識別子，内部サブセットおよび文書型宣言の終了を示す'>'を区切る空白文字（スペース，タブおよび改行）は，一つのスペースに置き換えられます。

公開識別子，およびシステム識別子を囲む引用符は，必ず二重引用符(")で出力されます。

省略可能な要素（?）や，繰り返し要素（*，+）をBaseElement要素に対応づけ，属性update="yes"を指定して更新の対象とした場合，BaseElement要素に入出力した要素の値を更新できますが，追加，および削除はできません。

例えば，BaseElement要素に対応づけた省略可能な要素が入力するXMLドキュメントに存在しない場合，その省略可能な要素の値を指定しても，その要素を出力できません。また，BaseElement要素に対応づけた省略可能な要素が入力するXMLドキュメントに存在する場合，emptyValue属性やアクセス情報フラグで要素を出力しないようにしても，削除できません。その場合，空要素が出力されます。

要素を更新の対象とした場合，その要素の属性も更新の対象とみなされるため，更新の対象とした要素の属性は，DDFで対応づけなければなりません。対応づけない場合は，属性の指定に従い，値が空に更新されるか，または属性が削除されます。

XMLドキュメントを更新する場合，更新する要素や属性とそれらの値は，数値や文字列の出力規則に従って更新されます。詳細については「7.2.7　値の入力，出力の動作」を参照してください。

更新するXMLドキュメントの要素が次に示すように改行がなく，横に並んでいても更新する要素の内容だけが更新されます。

B要素を更新した場合

（更新前）

<A>123</A><B>456</B><C>789</C>

（更新後）

<A>123</A><B>777</B><C>789</C>

更新モードでの出力時に，属性update="yes"を指定していない要素の値を変更しても，更新されません。

バッファのXMLドキュメントを更新する場合で，更新前のXMLドキュメントの長さより更新後のXMLドキュメントが短くなったときは，短くなった領域は不定になります。そのため，CBLXML-CN-Interfaceアクセスルーチンを使用して更新後のXMLドキュメントの長さを取得し，更新後のXMLドキュメントの部分だけを参照してください。

省略可能な要素で複数の子要素を持つ場合，その子要素の一つだけにupdate="yes"を指定して，更新時に追加や削除をすると妥当でないXMLドキュメントが出力されます。このような省略可能な要素で複数の子要素を持つ場合は，すべての子要素にupdate="yes"を指定してください。次に一つのItem要素だけにupdate="yes"を指定する不当な書き方の例を示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE root [
  <!ELEMENT root (group1)>
  <!ELEMENT group1 (item1, item2)? >
  <!ELEMENT item1 (#PCDATA)>
  <!ELEMENT item2 (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="group1">
  <Group elemName="group1">
   <Item elemName="item1" size="10" update="yes"/>
   <Item elemName="item2" size="10"/>
  </Group>
 </BaseElement>
</Interface>

emptyValue値"SPACE"をCOBOLデータ項目に設定することでitem1要素を削除したとき，次のように更新後のドキュメントはDTDに対して妥当でなくなります。item1要素とitem2要素の両方にupdate="yes"属性を指定し，item1要素を削除した場合は，item2要素も削除してください。

（更新前）

<?xml version="1.0" encoding="Shift_JIS"?>

<root>
  <group1>
    <item1>data1</item1>
    <item2></item2>
  </group1>
</root>

（更新後の不当なXMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
  <group1>
    <item2/>
  </group1>
</root>

ファイル上のXMLドキュメントを更新した場合，更新対象となる要素の前後にある空白文字（スペース，タブおよび改行）の個数や位置が更新の前後で異なって出力されることがあります。

属性だけを更新することはできません。属性を更新する場合，属性に対応する要素も対応づけてください。

XMLドキュメントを更新した場合，XML宣言と文書型宣言（DOCTYPE宣言）の間のコメントは削除されます。

バッファ上のXMLドキュメントを更新する際にバッファ長を超えた場合，CBLXML-CL-Interface，CBLXML-CN-InterfaceアクセスルーチンでXMLドキュメントを閉じるときにバッファ長を超えた旨のステータス115が返されます。CBLXML-WR-Interface-BaseElementアクセスルーチンではバッファ長を超えた旨のステータス115が返されませんので注意してください。

DTDを持つXMLドキュメントを更新した場合，DTD上でデフォルト値を持つ属性は，更新対象外の部分であっても，更新後のXMLドキュメントに出力されます。

バッファのXMLドキュメントを更新する場合で，更新するXMLドキュメントを超えるバッファの領域は更新するXMLドキュメントの文字エンコーディングに従った空白文字（スペース，タブおよび改行）でなければなりません。

文字エンコーディング

スペース

タブ

改行

Shift_JIS，Windows-31J，EUC-JP

0x20

0x09

（Windowsの場合）0x0a0d，

（UNIXの場合）0x0a

UTF-8

0x20

0x09

（Windowsの場合）0x0a0d

（UNIXの場合）0x0a

UTF-16，リトルエンディアン

0x0020

0x0009

（Windowsの場合）0x000a000d

（UNIXの場合）0x000a

UTF-16，ビッグエンディアン

0x2000

0x0900

（Windowsの場合）0x0a000d00

（UNIXの場合）0x0a00

7.3　XMLアクセスルーチンが返すステータス

7.3.1　ステータスの概要

XML対応COBOLプログラムの実行時，XMLアクセスルーチンから戻り値としてステータスが返されます。

ステータスの値

ステータスは，0〜199の範囲の値で返されます。

0：

正常終了を表します。

1〜99の範囲：

回復可能なエラーを表します。アクセス中のXMLドキュメントに対する操作を続行できます。

100〜199の範囲：

回復できない致命的エラーであり，アクセス中のXMLドキュメントに対する操作をそれ以上続行できないことを表します。ただし，CBLXML-RD-Interface-BaseElementアクセスルーチンおよびCBLXML-WR-Interface-BaseElementアクセスルーチンで致命的エラーが発生した場合は，必ずCBLXML-CL-InterfaceまたはCBLXML-CN-Interfaceアクセスルーチンを呼び出してXMLドキュメントを閉じてください。

ステータスに対応するデータ項目

cblxmlコマンドが生成するXMLアクセス用データ定義には，それぞれのステータスと同じ値が格納されたデータ項目が定義されています。

ステータスごとに切り分け処理をする場合は，ステータス値に対応するステータス定義名称を使用することを推奨します。ステータス定義名称の詳細については，「4.4　XMLアクセス用ステータス定義」を参照してください。

7.3.2　ステータスの一覧

このマニュアルでは，ステータスの一覧を次の形式で記載します。

ステータス番号（エラー定義名称）　【ステータスを返すアクセスルーチン】

ステータスの説明

（要因）

ステータスが返される要因を示す。

（対策）

プログラム作成者の処置を示す。

ステータス番号

XMLアクセスルーチンが戻り値として返す番号を示します。

エラー定義名称

ステータス番号に対応したCOBOLのデータ名です。エラー定義名称は，XMLアクセス用ステータス定義によって定義されています。

ステータスを返すアクセスルーチン

ステータスを返すアクセスルーチンの種類を示します。

OP：CBLXML-OP-Interfaceアクセスルーチン

OB：CBLXML-OB-Interfaceアクセスルーチン

RD：CBLXML-RD-Interface-BaseElementアクセスルーチン

WR：CBLXML-WR-Interface-BaseElementアクセスルーチン

CL：CBLXML-CL-Interfaceアクセスルーチン

CN：CBLXML-CN-Interfaceアクセスルーチン

ステータスの一覧を次に示します。

0（CBLXML-OK）　【OP】【OB】【RD】【WR】【CL】【CN】

XMLアクセスルーチンは正常終了しました。

1（CBLXML-ELEM-NOT-DTD）　【WR】

要素がDTDファイルの構成と一致しません。

（要因）

出力したBaseElement要素がDTDで定義したXMLドキュメントの構成と一致していない。

（対策）

DTDで定義したXMLドキュメントの構成と一致するようにBaseElement要素を出力する。

3（CBLXML-ONLY-WRITE-BE）　【WR】

BaseElement要素を見つけることができません。

（要因）

BaseElement要素が見つからない。原因として，cblxmlコマンドの出力プログラムが改変されたことが考えられる。

（対策）

cblxmlコマンドでXMLアクセスルーチン（COBOL副プログラム）を生成し直す。

4（CBLXML-CANT-FIND-BE）　【WR】

BaseElement要素に対応する要素名が見つかりません。

（要因）

BaseElementがDTD中に定義されていない。原因として，cblxmlコマンドの出力プログラムが改変されたことが考えられる。

（対策）

XMLサービスルーチンのインタフェース名称を確認し，呼び出し順序を見直す。または，cblxmlコマンドでXMLアクセスルーチン（COBOL副プログラム）を生成し直す。

5（CBLXML-CANT-SKIP-BE）　【RD】

BaseElement要素を飛ばして，次のBaseElement要素を入力できません。

（要因）

読み込み中のXMLドキュメントの現在位置には，読み込もうとしたBaseElement要素とは異なるBaseElement要素が存在する。

（対策）

XMLドキュメントの現在位置に存在するBaseElement要素に対応したCBLXML-RD-Interface-BaseElementルーチンを実行する。

6（CBLXML-MUTUAL-VIOLATE）　【WR】

選択要素に対応づけられたすべてのデータ項目が空です。または選択要素の二つ以上のCOBOLデータ項目に値が設定されているため，出力できません。または，入出力データ情報定義機能を使用している場合に，選択要素の二つ以上のアクセス情報フラグに要素を出力するフラグを設定したため，出力できません。

（要因）

選択要素に対応づけたすべてのデータ項目にemptyValue属性の値を設定しているか，二つ以上のデータ項目にemptyValue属性の値以外の値を設定しているため，要素を出力できない。または，入出力データ情報定義機能を使用している場合，選択要素の二つ以上のアクセス情報フラグに要素を出力するフラグを設定しているため，要素を出力できない。

（対策）

出力したい要素以外の要素に対応するデータ項目に，emptyValue属性の値を設定して出力する。入出力データ情報定義機能を使用している場合，出力する要素に対応するCOBOLデータ項目のアクセス情報フラグだけに要素を出力するフラグを設定する。

7（CBLXML-PLUS-EMPTY-WR）　【WR】

'+'の繰り返し要素と対応づけられたCOBOLデータ項目の内容を出力するとき，出力数が0に設定されています。

（要因）

DTDで'+'の繰り返し記号で表される繰り返し要素を出力しようとしたが，nameOfCountVar属性に設定されているデータ項目の値が0になっている。

（対策）

nameOfCountVar属性に設定されているデータ項目に1以上の値を指定して出力する。

8（CBLXML-ILLEGAL-CHAR）　【RD】

XMLドキュメントの入力時に不当な文字が見つかりました。

（要因）

cblxmlコマンドに-chkcharオプションを指定して生成したCOBOL原始プログラムを用いて，XMLドキュメントから要素や属性を入力した場合，type="national"を指定したデータ項目に1バイト文字が入力された。数字項目や浮動小数点項目に数値以外の値やsign="unsigned"指定時に負値が入力された。または，type属性に"numeric"，"packed"，"binary"，"float"，"double"を指定した場合に320けたを超えた数値が入力された。

（対策）

入力する値が，type属性に指定した値の型に対し有効な文字から構成されるようにする。

9（CBLXML-NOT-WRITTEN）　【CN】

アクセスモード"R"で開いたXMLドキュメントに対して，CBLXML-CN-Interfaceアクセスルーチンを呼び出しました。XMLドキュメントを閉じる処理は成功しますが，XMLドキュメントの長さには0が設定されます。

（要因）

読み取りモードで開いたXMLドキュメントに対して，CBLXML-CN-Interfaceアクセスルーチンを呼び出した。

（対策）

読み取りモードで開いたXMLドキュメントを閉じる場合は，CBLXML-CL-Interfaceアクセスルーチンを呼び出す。

10（CBLXML-VALUE-OVERFLOW）　【RD】

XMLドキュメントから入力した要素，属性の値がオーバフローしました。

（要因）

cblxmlコマンドに-chkovflowオプションを指定して生成したCOBOL原始プログラムを用いて，XMLドキュメントから要素や属性を入力した場合で，要素や属性の値の長さがsize属性に指定したけた数を超えた。ただし，数字項目は左側の0を削除した数値のけた数がsize属性に指定したけた数を超えた。また，浮動小数点数はシステムで定義した浮動小数点数の絶対値を超えた。ただし，type属性に"numeric"，"packed"，"binary"，"float"，"double"を指定した場合に入力する数値が320けたを超えたときは，ステータスに8（CBLXML-ILLEGAL-CHAR）を返す。

（対策）

size属性のけた数を大きくする。または，XMLドキュメントの要素，属性値の長さがsize属性に指定したけた数を超えないようにする。

11（CBLXML-ILLEGAL-CHAR-WRITE）　【WR】

XMLドキュメントの出力時に不当な文字が指定されました。

（要因）

XMLドキュメントを出力する場合にtype="alphabetic"，"alphanumeric"，"national"，"numeric"，"packed"に対応するCOBOLデータ項目に0x00〜0x08，0x0b，0x0c，0x0e〜0x1f，0x80，0xa0，0xfd〜0xff，シフトJISコード，日本語EUCの多バイト文字以外を指定して出力しようとした。

（対策）

出力する文字列から制御文字や不当な多バイト文字文字を削除して出力する。

12（CBLXML-NO-UPDATE）　【CL】【CN】

更新モードで開いたXMLドキュメントを1回も更新していません。

（要因）

アクセスモード"U"で開いたXMLドキュメントに対してCBLXML-WR-Interface-BaseElementアクセスルーチンを1回も呼び出さずにCBLXML-CL-Interface，CBLXML-CN-Interfaceアクセスルーチンを呼び出した。

（対策）

アクセスモード"U"で開いたXMLドキュメントを更新する。

13（CBLXML-NO-UPDATE-BE）　【WR】

更新モードで開いたXMLドキュメントに対して更新の対象を指定しないで（update属性を指定していない）出力しました。

（要因）

アクセスモード"U"で開いたXMLドキュメントに対して更新の対象を指定していないDDFを用いて更新しようとした。

（対策）

DDFで更新の対象を設定する。

15（CBLXML-NOT-READ）　【WR】

更新モードで開いたXMLドキュメントを入力しないで出力しました。または，開いたXMLドキュメントに対して直前に同じBaseElement要素単位で入力しないで出力しました。

（要因）

更新モードで開いたXMLドキュメントを入力しないで出力した。または，更新モードで開いたXMLドキュメントで，直前の入力に対して異なるBaseElement要素単位を出力した。

（対策）

同じBaseElement要素単位のCBLXML-RD-Interface-BaseElementアクセスルーチンで入力したあとに同じBaseElement要素単位のCBLXML-WR-Interface-BaseElementアクセスルーチンを呼び出す。

101（CBLXML-NOT-ENOUGH-MEM）　【OP】【OB】【RD】【WR】【CL】【CN】

操作を続けるメモリを確保できません。

（要因）

操作を続けるためのメモリが不足した。

（対策）

使用可能なメモリを増やして再実行する。

103（CBLXML-FILE-OPEN-FAIL）　【OP】

ファイル上のXMLドキュメントを開けません。

（要因）

ファイルを書き込みモード，または更新モードで開けなかった（例：書き込み権限がない）。または，不当なファイル名称を指定した。

（対策）

ファイルのアクセス権限，ディスク容量などを見直す。または，ファイル名称を見直す。

104（CBLXML-FILE-CLOSE-FAIL）　【CL】【CN】

ファイル上のXMLドキュメントを閉じられません。

（要因）

書き込みモード，または更新モードで開かれたファイルを閉じられなかった（例：ディスクがいっぱいになった）。

（対策）

ディスク容量などのファイル環境を見直す。

105（CBLXML-BAD-SESSION）　【OP】【OB】

ファイルモードに不当なモードが指定されました。

（要因）

XMLドキュメントのアクセスモードに"R"，"W"，"U"，"V"，"E"以外の文字を指定した。または，アクセスモードの左端に"R"，"W"，"U"以外の文字を指定した。

（対策）

XMLドキュメントを開く際のアクセスモードに正しい文字列を指定する。

106（CBLXML-CANT-WRITE）　【WR】【CL】【CN】

ファイル上のXMLドキュメントに出力できません。

（要因）

ディスク容量不足，アクセス権がない，ネットワーク障害などの要因で，ファイルに出力できなかった。

（対策）

ディスク容量，ファイルのアクセス権，ネットワークの状態などを見直す。

109（CBLXML-RECURSIVE-DTD）　【WR】【CL】【CN】

DTDファイルに再帰的な要素を見つけました。

（要因）

DTDに再帰的な要素が定義されている。

（対策）

DTDを再帰しない構造で定義する。

110（CBLXML-XML-PARSE-FAIL）　【OP】【OB】

XMLドキュメントの解析でエラーが発生しました。

（要因）

XMLドキュメントの解析に失敗した。次の要因が考えられる。

XMLドキュメントが整形式でない。

構造がDTDの定義と一致しない。

エンティティ参照回数が制限した値を超えた。

CBLXML-GET-ERRORサービスルーチンを使用すると，詳細なエラー情報を取得できる。詳細については，「9.3.2　エラー情報の取得」を参照のこと。

エンティティ参照回数と制限値については，「付録E.8　エンティティ参照の扱い」を参照のこと。

（対策）

XMLドキュメントのエラー部分を修正する。

111（CBLXML-NO-BE-LEFT）　【RD】

XMLドキュメントにBaseElement要素が見つかりません。

（要因）

入力XMLドキュメントに読み込むBaseElement要素が残っていない。

（対策）

すべてのBaseElement要素を読み終わった場合は，XMLドキュメントを閉じる。

114（CBLXML-INVALID-PARAMS）　【OP】【OB】【RD】【WR】【CL】

XMLアクセスルーチンに指定した引数に誤りがあります。

（要因）

XMLアクセスルーチンに指定した引数が，各アクセスルーチンの引数仕様を満たしていない。

（対策）

XMLアクセスルーチンの引数を見直す。

115（CBLXML-BUF-OVERFLOW）　【WR】【CL】【CN】

バッファへの出力中にバッファ長を超えました。

（要因）

バッファへの書き込み時に，書き込むXMLドキュメントの長さがバッファ長を超えた。

（対策）

バッファ長を書き込むXMLドキュメント長よりも大きくとる。

117（CBLXML-FILE-IO）　【OP】【OB】【RD】【WR】【CL】【CN】

システムファイルI／Oの操作に失敗しました。

（要因）

ファイルI／Oのシステム関数の実行に失敗した。次の要因が考えられる。

XMLドキュメントを出力するファイルシステムの容量が不足した。

ファイルに対するアクセス権がない。

メモリが不足した。

出力する一つのXMLドキュメントに複数から同時にアクセスした。

（対策）

ファイルのエラー原因を調査する。

118（CBLXML-CANT-END-DOC）　【CL】【CN】

XMLドキュメントを閉じるタグを出力できません。

（要因）

書き込みモードで開いたXMLドキュメントに要素を出力しないで，XMLドキュメントを閉じた。

（対策）

XMLドキュメントを閉じる前に，要素を出力する。

119（CBLXML-ALREADY-OPEN）　【OP】【OB】

一つのXMLポインタに対して複数のXMLドキュメントを開こうとしました。

（要因）

アクセスモード"E"を指定して一つのXMLポインタに対して複数のXMLドキュメントを開こうとした。

（対策）

XMLドキュメントを開いているXMLポインタにアクセスモード"E"を指定してCBLXML-OP-Interface， CBLXML-OB-Interfaceアクセスルーチンを呼び出さないように処理を訂正する。

121（CBLXML-INTERNAL）　【OP】【OB】【RD】【WR】【CL】【CN】

内部で論理エラーが発生しました。

（要因）

XMLアクセスルーチンで内部的に論理エラーが発生した。または，XMLアクセスルーチンを生成したcblxmlコマンドに対してXMLアクセス用実行時ライブラリの方が古い。

（対策）

当社保守員に連絡する。または，XMLアクセスルーチンを生成したcblxmlコマンドが含まれるプロダクトと，同じまたは新しいバージョンのプロダクトをインストールする。

122（CBLXML-INVALIDCBLLANG）　【OP】【OB】

-unisrcオプションの指定と環境変数CBLLANGの設定に矛盾があります。

（要因）

cblxmlコマンドで-unisrcオプションを指定して生成したUnicode機能に対応したXMLアクセスルーチンを実行する場合，環境変数CBLLANGが設定されていないか，環境変数CBLLANGにUNICODE以外の値が指定されている。または，-unisrcオプションを指定しないで生成したXMLアクセスルーチンを実行する場合に環境変数CBLLANGがUNICODEに設定されている。

（対策）

-unisrcオプションを指定したUnicode機能に対応したXMLアクセスルーチンを実行する場合，環境変数CBLLANG=UNICODEに設定する。-unisrcオプションを指定していないXMLアクセスルーチンを実行する場合，環境変数CBLLANGを設定しない。

123（CBLXML-INVALIDLANG）　【OP】【OB】

-unisrcオプションの指定と環境変数LANGの設定に矛盾があります。

（要因）

（AIXの場合）cblxmlコマンドで-unisrcオプションを指定して生成したUnicode機能に対応したXMLアクセスルーチンを実行する場合，環境変数LANGが設定されていないか，環境変数LANGにシフトJIS以外の値が設定されている。

（Linuxの場合）cblxmlコマンドで-unisrcオプションを指定して生成したUnicode機能に対応したXMLアクセスルーチンを実行する場合，環境変数LANGが設定されていないか，環境変数LANGにUTF-8以外の値が設定されている。

（対策）

（AIXの場合）cblxmlコマンドで-unisrcオプションを指定している場合，環境変数LANGをシフトJISに設定する。

（Linuxの場合）cblxmlコマンドで-unisrcオプションを指定している場合，環境変数LANGをUTF-8に設定する。

なお，文字コードについては，「付録G.2　文字コード」を参照のこと。

124（CBLXML-PROG-FILE-TOO-OLD）　【OP】【OB】

互換性がない古いXMLアクセスルーチンを使用しています。

（要因）

実行したバージョンと互換性がない古いバージョンのcblxmlコマンドを使用して生成したXMLアクセスルーチンを使用した。

（対策）

実行したバージョンと同じバージョンのcblxmlコマンドを使用して，XMLアクセスルーチンおよびXMLアクセス用データ定義を再生成する。

7.4　実行時のメモリ所要量

XML連携機能を使用してXMLドキュメントをアクセスする場合，XMLドキュメントによっては使用するメモリ所要量が増大することがあります。ここでは，メモリ所要量の概算式について説明します。

この式は，メモリ所要量の上限を求めるものです。XMLドキュメントでタグが占める割合が低いほど，また，繰り返しが多い（同じ名前のタグや属性が多い）ほど，実際のメモリ所要量は小さくなります。

特に記載しないかぎり，概算式の結果および所要量を示す値の単位はバイトです。

7.4.1　XMLドキュメントを入出力，更新する場合のメモリ所要量

XMLドキュメントを入出力，または更新する場合のメモリ所要量を求める概算式を次に示します。

上限値=DT＋MA＋(NS＋2×(XC×2.6＋MC×5))×1.2＋MC＋ML＋UP

概算式で使用している変数について説明します。

(1)　DT

文書型定義（DTD）がある場合に，このDTDの情報を保持するために必要なメモリ領域です。DTDがない場合には，この項の値は0としてください。

DTDの情報を保持するために必要なメモリ所要量の詳細は，「7.4.2　文書型定義（DTD）の情報を保持するためのメモリ所要量」を参照してください。

(2)　MA

XML連携機能内で使用する情報を管理するために必要なメモリ領域です。

この値は固定値で，220キロバイトです。

(3)　NS

XMLドキュメントでの各構成要素の種類ごとのメモリ領域の累計です。

各構成要素の単価と構成要素数の積の総和になります。各構成要素の単価を次に示します。

表7‒10　XMLドキュメントでの各構成要素の単価

構成要素

システム

Windows(x86)，AIX(32)，Linux(x86)

Windows(x64)，AIX(64)，Linux(x64)

要素※1

240

420

属性※2

160

1,190

連続するテキスト※3

60

90

CDATAセクション

60

90

コメント

60

90

エンティティ宣言※4

870

980

エンティティ参照※4

140

220

記法宣言

680

720

処理命令

60

80

文書型宣言※5

920

1,310

XMLドキュメント※6

260

520

注※1

タグ間のテキストや子要素は含みません。

注※2

属性値は含みません。

注※3

タグを間に含まない連続するテキストデータです。

タグの前後の改行や空白文字もテキストデータとして扱われることに注意してください。

注※4

エンティティの内容のテキストは含みません。

注※5

DTDの内容（要素型宣言やエンティティ宣言など）は含みません。

注※6

XMLドキュメント1つに対して1つ生成されます。XMLドキュメント内のDTD，タグ，およびテキストデータは含みません。

(4)　XC

XMLドキュメント内の文字数です。多バイト文字が混在している場合は，次の計算方式で算出してください。

シフトJISまたは日本語EUCで多バイト文字が混在している場合

XC＝XS×(100−DR／2)／100　　（切り上げ）

各変数は，次のとおりです。

XS：XMLドキュメントのサイズ

DR：XMLドキュメントの多バイト文字の占有率（％）

UTF-16でエンコードされたXMLドキュメントの場合

XC＝XS／2　　　（切り上げ）

変数は，次のとおりです。

XS：XMLドキュメントのサイズ

UTF-8でエンコードされたXMLドキュメントの場合

XC＝XS×(100−DR2／2−2×DR3／3)／100　　　（切り上げ）

各変数は，次のとおりです。

XS：XMLドキュメントのサイズ

DR2：XMLドキュメントの2バイトコード占有率（％）

DR3：XMLドキュメントの3バイトコード占有率（％）

(5)　MC

連続するテキストデータ（タグ間テキスト，CDATAセクション，およびコメントを含む）の最大文字数です。

文書系のXMLドキュメント※の場合，この値の影響を大きく受けます。

伝票系のXMLドキュメント※の場合，最大文字数がXMLドキュメント全体の文字数に比べて小さいので，ほとんどの場合でこの項の影響を受けません。

注※

文書系のXMLドキュメントとは，タグが少なくテキストデータの割合の大きいXMLドキュメントです。伝票系のXMLドキュメントとは，タグが多くタグ間テキストが短いXMLドキュメントです。

(6)　ML

マッピングしたItem要素のタグ名を管理するメモリ領域です。次の計算方式で算出してください。

Σ(MNL×2＋MPL)

各変数は，次のとおりです。

MNL：Item要素のタグ名の長さ

MPL：Item要素のBaseElement要素からのパス名の長さ

このパス名はBaseElement要素から子要素をたどって，Item要素に至るまでのタグ名をスラント（/）でつなげた文字列です。

Σはデータ定義ファイル（DDF）でマッピングしたすべてのItem要素の合計を示します。

(7)　UP

XMLドキュメントを更新するときに，更新の情報などを保持するために必要なメモリ領域です。

XMLドキュメントを更新しない場合は，この項の値は0としてください。XMLドキュメントを更新のために必要なメモリ所要量の詳細は「7.4.3　XMLドキュメントを更新するためのメモリ所要量」を参照してください。

7.4.2　文書型定義（DTD）の情報を保持するためのメモリ所要量

XMLドキュメントにDTDがある場合に，DTDの情報を保持するために必要なメモリ領域を求める概算式を次に示します。

DT＝DS＋CM

概算式で使用している変数について説明します。

(1)　DS

DTD内に現れる各宣言の種類ごとの累計です。

各宣言の単価と宣言数の積の総和になります。各宣言の単価を次に示します。

表7‒11　DTD内の各宣言の単価

構成要素

単価

Windows(x86)，AIX(32)，Linux(x86)

Windows(x64)，AIX(64)，Linux(x64)

要素

720

860

属性

720

890

エンティティ宣言

1,400

1,670

記法宣言

900

1,270

(2)　CM

要素型宣言内に含まれる内容モデルの情報を格納するために必要なメモリ領域です。

入力XMLドキュメントの妥当性チェック機能を使用する場合は，次の概算式で求めます。

CM＝4×(EL^2)＋1280×EL

各変数は，次のとおりです。

＾：べき乗を表します。

EL：要素型宣言数

入力XMLドキュメントの妥当性チェック機能を使用しない場合，0となります。

7.4.3　XMLドキュメントを更新するためのメモリ所要量

XMLドキュメントを更新する場合，追加で必要なメモリ所要量を求める概算式を次に示します。

UP＝UDT＋UMA＋USS＋8×MC

概算式で使用している変数について説明します。

(1)　UDT

DTDがある場合に，DTDの情報を保持するために必要なメモリ領域です。

DTDがない場合には，この項の値は0としてください。DTDの情報を保持するために必要なメモリ所要量の詳細は，「7.4.2　文書型定義（DTD）の情報を保持するためのメモリ所要量」を参照してください。

(2)　UMA

XML連携機能内で使用する情報を管理するために必要なメモリ領域です。

この値は固定値で，80キロバイトです。

(3)　USS

XMLドキュメント内に現れる要素，および属性の名前ごとの累計です。各構成要素の概算式の算出結果の総和になります。

同じ名前の要素や属性がXMLドキュメント内に繰り返し現れるほど，XMLドキュメントのサイズに対して，メモリ所要量が一定値に近づきます。

各構成要素の概算式を次に示します。

表7‒12　更新時のXMLドキュメントでの各構成要素の概算式

構成要素

概算式

Windows(x86)，AIX(32)，Linux(x86)

Windows(x64)，AIX(64)，Linux(x64)

要素

180＋3×NC

500＋3×NC

属性

400＋3×NC

560＋3×NC

変数は，次のとおりです。

NC：各構成要素の名前の文字数

各構成要素の名前の文字数に大きなばらつきがなければ平均値で近似し，定数として扱ってもかまいません。

(4)　MC

連続するテキストデータの最大文字数です。

詳細は，「7.4.1　XMLドキュメントを入出力，更新する場合のメモリ所要量」の「(5)　MC」を参照してください。

7.4.4　概算式の計算例

次に示すXMLドキュメントでの概算式の計算例を示します。

このXMLドキュメントは，サイズが7,284バイトで，シフトJISの2バイトコードが4,000バイト（2,000文字）あります。2バイトコードの占有率が約55％となっています。

この例では，改行文字を「↓」と表記しています。

（XMLドキュメント）

<?xml version="1.0" encoding="Shift_JIS"?>↓
<root>↓                                               …1
    <e1>abcdefghij</e1>↓                              …2
    <e2>klmnopqrst<e3>uvw</e3>xyz</e2>↓               …3
<!--comment-->↓                                       …4
    <e4></e4>↓                                        …5
    <e5 a1="abc" a2=""/>↓                             …6
    <e5 a1="12345"/>↓                                 …7
    <e5>↓
 <?pi-target pi-data?>↓
       <e6>xxxxxx ...（3000文字）... xxxxxx<e6/>↓
       <e6>あああ ...（2000文字）... あああ<e6/>↓
    </e5>↓
</root>

データ定義ファイル（DDF）はBaseElement要素をrootに対応づけし，e1をItem要素に対応づけします。

（DDF）

<?xml version="1.0" encoding="Shift_JIS"?>↓
<Interface interfaceName="EXAMPLE">↓
 <BaseElement elemName="root" cobName="BE">↓
  <Item elemName="e1" size="10"/>↓
 </BaseElement>↓
</Interface>

このXMLドキュメントをXML連携機能で解析する場合のメモリ所要量の概算値は次のようになります。ここでは，Windows(x86)の場合の例を示します。ほかのプラットフォームの場合は，それぞれの概算式に各単価を当てはめて算出してください。

（計算例）

上限値＝DT＋MA＋(NS＋2×(XC×2.6＋MC×5))×1.2＋MC＋ML＋UP

上限値は，302,670バイトです。

DT＝0　　　　　　　　…DTDがない場合，0バイト。
MA＝220×1,024　　　 …固定値（220キロバイト）
NS＝240×10　　　　　…要素数＝10（root,e1,e2,e3,e4,e5×3,e6×2）
　　＋160×3　　　　 …属性数＝3（a1×2,a2）
　　＋60×21　　　　 …連続するテキストの数＝21※
　　＋60×1　　　　　…コメント数＝1
　　＋60×1　　　　　…処理命令数＝1
　　＋260　　　　　　…XMLドキュメント
　　＝4,520
XC＝XS×(100−DR／2)／100
　　＝7,284×(100−55／2)／100
　　≒5,281　　　　　…XMLドキュメントの文字数。
　　　　　　　　　　　 XMLドキュメントのサイズ7,284バイト，
　　　　　　　　　　　 2バイトコード占有率55％として換算。
MC＝3,000　　　　　　…最大長のテキストデータxxx...xxx（3,000文字）
ML＝Σ(2×2＋8)　　　…DDFでBaseElement要素をrootに対応づけし，
　　＝12               e1をItem要素に対応づけした場合，12バイト。
　　　　　　　　　　　 マッピングしたタグ名のサイズ（e1）＝2
                  　   BaseElementからのパス名のサイズ（/root/e1）＝8
UP＝0　　　　　　　　…更新しない場合，0バイト。

注※

タグの前後の改行や空白文字もテキストデータとして扱われます。

1.の改行と，続く2.のインデントは合わせて1つの連続するテキストデータとして扱われます。

4.の改行と5.のインデントも合わせて1つの連続するテキストデータとして扱われます。

3.の改行も1つのテキストデータとして扱われます。

3.のklmnopqrst，uvw，xyzはそれぞれ独立したテキストデータとして扱われます。

5.の空のタグ間テキストはテキストデータとして扱われません。

6.，7.の各属性の値は独立したテキストデータとして扱われます。

6.の属性a2の属性値は空文字列ですが，5.の空のタグ間テキストと異なり，テキストデータとして扱われます。

8　開発マネージャ連携（Windowsの場合）

この章では，Windows COBOL2002の開発マネージャを使用して，XML対応COBOLプログラムを開発する方法について説明します。

8.1　開発マネージャ上でのファイルの表示名

XML対応COBOLプログラムで使用するファイルは，開発マネージャ上では次の名称で表示されます。

ファイル種別

拡張子

開発マネージャ上での表示名

データ定義ファイル

（DDFファイル）

.cxd

XMLデータ定義ファイル

文書型定義ファイル

（DTDファイル）

.dtd

.xml

XML文書型定義ファイル

DDFファイルから生成されるCOBOL原始プログラム（XMLアクセスルーチン）については，通常のCOBOL原始プログラムと同じ表示になります。

8.2　開発マネージャ上でのイメージ図

開発マネージャ上でXML対応COBOLプログラムを作成しているプロジェクトのイメージ図を次に示します。

データ定義ファイル（DDFファイル）

XMLデータ定義ファイルから生成されるCOBOL原始プログラム（XMLアクセスルーチン）

COBOL原始プログラムのコンパイル時に登録される登録集原文（XMLアクセス用データ定義，XMLアクセス用ステータス定義）

文書型定義ファイル（DTDファイル）

8.3　開発マネージャの操作

8.3.1　DDFファイルの登録

DDFファイルは，開発マネージャがサポートしている，OLEプロジェクトを除くプロジェクトの種類で登録できます。

DDFファイルを登録する手順を次に示します。

DDFファイルの登録

生成されるCOBOL原始プログラムの登録

DTDファイルの登録

［プロジェクト］メニューから［ソースファイルの追加］を選ぶ

ファイルの追加ダイアログボックスが表示されます。

ファイルの種類ドロップダウンリストで「XMLデータ定義ファイル（*.cxd）」を指定する

ファイル名を指定して［開く］ボタンを選ぶ

ファイルの登録ダイアログボックスが表示されます。

ファイルの種類ドロップダウンリストで「COBOLソース（固定形式）（*.cbl,*.cob,*ocb）」を指定する

DDFファイルから生成されるCOBOLソースファイル名を指定して［開く］ボタンを選ぶ

再度ファイルの登録ダイアログボックスが表示されます。

ファイルの種類ドロップダウンリストで「XML文書型定義ファイル（*.xml,*.dtd）」を指定する

DDFファイルが参照しているDTDファイルを指定して［開く］ボタンを選ぶ

DDFファイル，生成されるCOBOLソースファイル，およびDTDファイルがプロジェクトに登録されます。なお，DTDファイルはDDFファイルの依存ファイルとして登録されます。

注意事項

DDFファイルから生成されるCOBOLソースファイルは，プロジェクトのメインファイルにはできません。

8.3.2　DDFファイルとDTDファイルの除外

DDFファイルとDTDファイルを除外する手順を次に示します。

DDFファイルは開発マネージャの画面上で，該当するファイルを選択する

［ファイル］メニューの［削除］を選ぶ

DDFファイルが除外されます。

注意事項

DDFファイルを除外すると，DDFファイルの依存となっているDTDファイルも除外されます。ただし，DTDファイルが複数のDDFファイルの依存ファイルになっている場合は，DTDファイルを参照しているDDFファイルがすべて除外されたときに，DTDファイルが開発マネージャ上から除外されます。

DTDファイルは単独では除外できません。

8.3.3　DTDファイルの変更

DDFファイルが参照するDTDファイルを変更する手順を次に示します。

開発マネージャのウィンドウの［プロジェクト］メニューから［プロジェクトの設定］を選ぶ

プロジェクト設定ダイアログボックスが表示されます。

プロジェクト設定ダイアログボックスのプロジェクト一覧ツリービューで，DDFファイルを選ぶ

［XMLデータ定義ファイル］タブが表示されます。

-dtdオプションのチェックボックスを選び，DTDファイルを変更する

［OK］ボタンを選ぶ

設定した内容がプロジェクトに反映されます。

注意事項

DTDファイルは必須のため，-dtdオプションを外すことはできません。

［依存ファイルの設定］メニューからは登録・変更できません。

8.3.4　生成されるCOBOLソースファイルの変更

DDFファイルから生成されるCOBOLソースファイルを変更する手順を次に示します。

開発マネージャのツリービューウィンドウで，出力先ファイルを変更したいDDFファイルを選ぶ

［ファイル］メニューから［出力ファイルの変更］を選ぶ

出力ファイルの変更ダイアログボックスが表示されます。

なお，ツリービューウィンドウのDDFファイルを右クリックして［出力ファイルの変更］を選んでも，出力ファイルの変更ダイアログボックスが表示されます。

ファイルの種類ドロップダウンリストで「COBOLソース（固定形式）（*.cbl,*.cob,*.ocb）」を指定する

DDFファイルから生成されるCOBOLソースファイル名を指定して［開く］ボタンを選ぶ

注意事項

変更した場合，出力ファイルに設定されていたオプションはクリアされます。

8.4　ビルド

開発マネージャでビルドするときの注意点を説明します。

8.4.1　生成されるCOBOLソースのコンパイル

ビルドの前に，XML連携機能が提供する登録集原文のあるフォルダをCOBOLの環境変数CBLLIBに設定しておく必要があります。

8.4.2　リンク

DDFファイルを含むプログラムでは，XML連携機能が提供するライブラリcblxmlrt.libをリンク時に指定する必要があります。開発マネージャはプロジェクトにDDFファイルが含まれている場合リンク時にcblxmlrt.libを指定してリンクするため，明示的にcblxmlrt.libを指定する必要はありません。

8.5　新規作成

開発マネージャ上からDDFファイルを新規に作成する手順を次に示します。

［ファイル］メニューの［新規作成］を選ぶ

ファイルの新規作成ダイアログボックスが表示されます。

「XMLデータ定義ファイル」を選ぶ

エディタが起動されます。

注意事項

エディタは，標準ではCOBOLエディタが起動されます。使用するエディタを変更する場合は，マニュアル「COBOL2002　操作ガイド」の開発マネージャのカスタマイズの説明を参照してください。

8.6　注意事項

XML連携機能では，生成されるCOBOLソースについて，幾つかのコンパイラオプションを指定した場合，動作は保証しません。開発マネージャでは，これらはチェックされません。これらのコンパイラオプションが指定された場合，動作は保証しません。なお，動作を保証しないオプションは「6.2.1　コンパイルとリンケージ」の注意事項を参照してください。

DDFファイルのコンパイルでエラーが発生した場合，メッセージウィンドウに表示されているエラーメッセージをダブルクリックしてもエラーの発生したファイルを参照できません。開発マネージャのツリービューウィンドウからDDFファイルを参照してください。

外部参照のXMLファイルは，ビルド後に開発マネージャのツリー上に自動的に登録されません。また，ユーザによる登録もできません。

プロジェクトに同名のDDFファイルを複数登録できません。また，すでにプロジェクトに登録されているCOBOLソース，およびほかのファイルの出力になっているCOBOLソースは，DDFファイルから生成されるCOBOLソースに指定できません。

OLEプロジェクトには，DDFファイルを登録できません。また，すでにDDFファイルが登録されているプロジェクトをOLEプロジェクトに変更した場合，DDFファイルはビルド対象になりません。

9　入出力時の拡張機能

この章では，XMLドキュメント入出力時の拡張機能について説明します。

9.1　入力時のオーバフローをステータスで返す機能

入力時のオーバフローをステータスで返す機能は，XMLドキュメントを入力する場合に，表9-1の条件に従って，オーバフローであればCBLXML-RD-Interface-BaseElementアクセスルーチンでステータス10を返す機能です。

この機能を使用する場合は，COBOL原始プログラムの生成時，cblxmlコマンドに-chkovflowオプションを指定します。cblxmlコマンドに-chkovflowオプションを指定しないで生成したCOBOL原始プログラムでは，XMLドキュメントの入力時にオーバフローの条件に該当した場合でもオーバフローのステータスを返しません。

表9‒1　入力時のオーバフローの条件

type属性値

オーバフローの条件

alphanumeric

national

size属性に指定したけた数を超えた場合。

numeric

packed

binary

左側の0を削除した数値がsize属性に指定したけた数を超えた場合。

float

double

システムで定義された浮動小数点の絶対値を超えた場合※。

注※

システムで定義された浮動小数点の絶対値については，ご使用のシステムのマニュアルを参照してください。

9.2　入出力時に不当な文字をチェックする機能

XMLドキュメントの入出力時に不当な文字をチェックする機能です。cblxmlコマンドの-chkcharオプションを指定することでチェックされる不当な文字のチェック範囲を拡張できます。

XMLドキュメント出力時，表9-2に従って不当な文字をチェックします。XMLドキュメント入力時，表9-3に従って不当な文字をチェックします。

CBLXML-WR-Interface-BaseElementアクセスルーチンでXMLドキュメント出力時に不当な文字を見つけた場合，ステータス11を返します。該当部分の要素，属性には空の値が出力されます。CBLXML-RD-Interface-BaseElementアクセスルーチンで，XMLドキュメントの入出力時に不当な文字を見つけた場合，ステータス8を返します。

type属性の値が「numeric」，「packed」，「binary」，「float」，および「double」のとき，数字，符号，小数点，"E"，および"e"以外の文字は無視して入力されます。なお，XMLとして不正な文字は，XMLドキュメントを開く際にチェックされ，XMLアクセスルーチンのエラーステータス110（CBLXML-XML-PARSE-FAIL）が返されます。XML不正文字については，「付録E.2(1)　XML標準仕様での文字の範囲」を参照してください。

表9‒2　出力時にチェックする文字

type属性値

チェックする文字（-chkcharオプション指定あり）

不当な文字・数値があった場合の出力結果

alphanumeric

シフトJIS の場合

0x00〜0x08，0x0b，0x0c，0x0e〜0x1f，0x80，0xa0，0xfd〜0xffとシフトJISの多バイト文字以外

日本語EUCの場合

0x00〜0x08，0x0b，0x0c，0x0e〜0x1f，0x80，0xa0，0xffと日本語EUCコードの多バイト文字以外

Unicodeの場合（環境変数CBLLANGがUNICODE）

0x00〜0x08，0x0b，0x0c，0x0e〜0x1fとコード範囲（1バイト〜4バイト）以外

空の要素，属性を出力する。

national

シフトJIS の場合

0x00〜0x08，0x0b，0x0c，0x0e〜0x1f，0x80，0xa0，0xfd〜0xffとシフトJISの多バイト文字以外

日本語EUCの場合

0x00〜0x08，0x0b，0x0c，0x0e〜0x1f，0x80，0xa0，0xffと日本語EUCコードの多バイト文字以外

Unicodeの場合（環境変数CBLLANGがUNICODE）

UCS-2（0x0009，0x000a，0x000d，0x0020〜0x4dff，0x4e00〜0x9fff，0xe000〜0xf8ff，0xf900〜0xfffd）の範囲以外

空の要素，属性を出力する。

numeric

packed

数字・符号以外（COBOLの字類条件での数字検査（IS NUMERIC）を満たさない文字）

空の要素，属性を出力する。

binary

float

double

−

結果は保証しない。

（凡例）

−：チェックしない。

表9‒3　入力時にチェックする文字

type属性の値

チェックする文字

不当な文字・数値があった場合の入力結果

-chkcharオプション指定なし

-chkcharオプション指定あり

alphanumeric

−

−

結果は保証しない。

national

Unicode機能を使用しない場合：1バイトの文字

Unicode機能を使用する場合：　−

Unicode機能を使用しない場合：1バイトの文字

Unicode機能を使用する場合：　−

1バイト文字は「[図データ]」（げた記号）※に置き換える。

その他の不当な文字の結果は保証しない。

numeric

packed

binary

−

数値以外

sign="unsigned"指定時に負値を入力した場合

けた数が320を超えた場合

結果は保証しない。

float

double

−

数値以外

けた数が320を超えた場合

結果は保証しない。

（凡例）

−：チェックしない。

注※　「[図データ]」（げた記号）は次に示すコードになります。

シフトJIS：0x81ac

日本語EUC（UNIXの場合）：0xa2ae

UTF-16（Unicode機能を使用した場合）：0x3013

9.3　XMLサービスルーチンを使用した機能

XML連携機能には次のようなサービスルーチンが用意されています。

次に，XMLサービスルーチンの一覧を示します。

CBLXML-CREATE-XML-POINTERサービスルーチン

空のXMLドキュメントのポインタを割り当てるサービスルーチンです。

CBLXML-FREE-XML-POINTERサービスルーチン

割り当てたXMLドキュメントのポインタを解放するサービスルーチンです。

CBLXML-GET-ERRORサービスルーチン

直前に実行したXMLアクセスルーチンの詳細なエラー情報を取得するサービスルーチンです。

CBLXML-READ-CATALOG-FILEサービスルーチン

公開識別子で利用するカタログファイルを入力するサービスルーチンです。

CBLXML-GET-NEXT-BEサービスルーチン

入力または更新モードで開いたXMLドキュメントに対し，次に入力するBaseElement要素のXMLドキュメント上での位置情報を取得するサービスルーチンです。

CBLXML-SET-ENTITYLIMITサービスルーチン

XMLドキュメントの入力時に，エンティティ参照回数を制限するサービスルーチンです。

注意事項（Windows(x86)の場合）

XMLサービスルーチンをstdcall呼び出し規約で呼び出すことはできません。

XMLサービスルーチンはC（cdecl）呼び出し規約で呼び出してください。

注意事項（Windows，Linuxの場合）

-bigendianbinオプションを使用してXMLアクセスルーチンを生成する場合，-BigEndian,Binコンパイラオプションを指定してコンパイルしなければなりません。このとき，XMLサービスルーチンの引数で指定する数字項目（2進形式）がビッグエンディアン形式になるため，正常に動作しません。この場合は，引数となる数字項目（2進形式）をCOMP-5で定義してください。

9.3.1　XMLサービスルーチンの初期処理と終了処理

XMLサービスルーチンを使用する機能のエラー情報取得機能や公開識別子では，XMLドキュメントを開く（CBLXML-OP-Interface，CBLXML-OB-Interface）アクセスルーチンの前に，XMLサービスルーチンの初期処理としてCBLXML-CREATE-XML-POINTERサービスルーチンを呼び出して空のXMLドキュメントのポインタを作成し，XMLドキュメントを閉じる（CBLXML-CL-Interface，CBLXML-CN-Interface）アクセスルーチンのあとにCBLXML-FREE-XML-POINTERサービスルーチンでXMLドキュメントのポインタを解放する必要があります。

次に，XMLサービスルーチンの初期処理と終了処理となるCBLXML-CREATE-XML-POINTERサービスルーチンとCBLXML-FREE-XML-POINTERサービスルーチンを説明します。

(1)　CBLXML-CREATE-XML-POINTERサービスルーチン

CBLXML-CREATE-XML-POINTERサービスルーチンは，空のXMLドキュメントのポインタを割り当てます。このサービスルーチンは，エラー情報取得機能や公開識別子のカタログファイルの入力で使用します。

形式

CALL 'CBLXML-CREATE-XML-POINTER' USING XML-POINTER.

引数

引数のデータ型

指定

説明

01 XML-POINTER

USAGE POINTER.

○

XMLドキュメントのポインタを受け取るポインタ項目を指定する。

（凡例）

○：サービスルーチンの呼び出し時，値を設定しておく項目

戻り値

戻り値

内容

0

正常終了した。

-1

操作を続けるためのメモリが不足した。

注

戻り値は，RETURN-CODE特殊レジスタに設定されます。

規則

XMLドキュメントのポインタ割り当てに成功した場合，CBLXML-FREE-XML-POINTERサービスルーチンでXMLドキュメントのポインタを解放しなければなりません。

CBLXML-CREATE-XML-POINTERサービスルーチンは，XMLドキュメントを開くアクセスルーチン（CBLXML-OP-Interface，CBLXML-OB-Interface）の前に呼び出さなければなりません。

CBLXML-CREATE-XML-POINTERサービスルーチンを呼び出すたびに，異なる空のXMLドキュメントのポインタを返します。

(2)　CBLXML-FREE-XML-POINTERサービスルーチン

CBLXML-FREE-XML-POINTERサービスルーチンは，割り当てたXMLドキュメントのポインタを解放します。

形式

CALL 'CBLXML-FREE-XML-POINTER' USING XML-POINTER.

引数

引数のデータ型

指定

説明

01 XML-POINTER USAGE POINTER.

○

CBLXML-CREATE-XML-POINTERサービスルーチンで割り当てたXMLドキュメントのポインタを受け取るポインタ項目を指定する。

（凡例）

○：サービスルーチンの呼び出し時，値を設定しておく項目

戻り値

戻り値

内容

0

正常終了した。

-1

CBLXML-FREE-XML-POINTERサービスルーチンの引数の値が不正である。

-2

XMLドキュメントを閉じていない状態で，CBLXML-FREE-XML-POINTERサービスルーチンを実行した。

注

戻り値は，RETURN-CODE特殊レジスタに設定されます。

9.3.2　エラー情報の取得

エラー情報取得機能は，CBLXML-GET-ERRORサービスルーチンによってXMLアクセスルーチンの詳細なエラー情報を取得する機能です。

XMLアクセスルーチンのエラー情報を取得するには，XMLドキュメントを開くXMLアクセスルーチンの前にCBLXML-CREATE-XML-POINTERサービスルーチンを呼び出して作成した空のポインタを用いて，XMLポインタを入力するアクセスモード"E"を指定し，XMLドキュメントを開くXMLアクセスルーチンを呼び出さなければなりません。また，XMLドキュメントを閉じるXMLアクセスルーチンのあとにCBLXML-FREE-XML-POINTERサービスルーチンを呼び出してCBLXML-CREATE-XML-POINTERサービスルーチンで作成したXMLポインタを解放しなければなりません。これらを行い，各XMLアクセスルーチンの直後にCBLXML-GET-ERRORサービスルーチンで呼び出すことでエラー情報を取得できます。

次にXMLドキュメントを開くCBLXML-OP-Interfaceアクセスルーチンのエラー情報の取得例を示します。

（エラー情報の取得）

  :
01 CBLXML-RETURN-CODE PIC 9(9) COMP.
01 FILE-NAME PIC X(255).
01 XML-FILE-NAME USAGE POINTER VALUE NULL.
01 XML-FILE-NAME-LENGTH PIC 9(9) COMP VALUE 0.
01 XML-MODE PIC X(16).
01 XML-POINTER USAGE POINTER VALUE NULL.
01 MESSAGE-BUFFER PIC X(255).
01 MESSAGE-BUFFER-LENGTH PIC 9(9) COMP VALUE 255.
01 MESSAGE-LENGTH PIC 9(9) COMP VALUE 0.
  :
PROCEDURE DIVISION.
START-MAIN.
  :
    CALL 'CBLXML-CREATE-XML-POINTER'
        USING XML-POINTER.
    IF RETURN-CODE NOT = 0 THEN
        EXIT PROGRAM
    END-IF.
*open
    MOVE 'WE' TO XML-MODE.
    MOVE 'output.xml' TO FILE-NAME.
    MOVE 10 TO XML-FILE-NAME-LENGTH.
    COMPUTE XML-FILE-NAME = FUNCTION ADDR(FILE-NAME).
    CALL 'CBLXML-OP-EXAMPLE'
        USING XML-FILE-NAME
              XML-FILE-NAME-LENGTH
              XML-MODE
              XML-POINTER
        RETURNING CBLXML-RETURN-CODE.

    IF CBLXML-RETURN-CODE NOT = 0 THEN
        CALL 'CBLXML-GET-ERROR'
            USING XML-POINTER
                  MESSAGE-BUFFER
                  MESSAGE-BUFFER-LENGTH
                  MESSAGE-LENGTH
        DISPLAY 'ERROR = ' MESSAGE-BUFFER
    ELSE
*write
        CALL 'CBLXML-WR-EXAMPLE-BE'
            USING XML-POINTER root
            RETURNING CBLXML-RETURN-CODE
*close
        CALL 'CBLXML-CL-EXAMPLE'
            USING XML-POINTER
            RETURNING CBLXML-RETURN-CODE
    END-IF.

    CALL 'CBLXML-FREE-XML-POINTER'
        USING XML-POINTER.
  :

(1)　CBLXML-GET-ERRORサービスルーチン

直前に実行したXMLアクセスルーチンの詳細なエラー情報を取得します。エラー情報の取得対象となるXMLアクセスルーチンを次に示します。

（エラー情報の取得対象となるXMLアクセスルーチン）

CBLXML-OP-Interface

CBLXML-OB-Interface

CBLXML-RD-Interface-BaseElement

CBLXML-WR-Interface-BaseElement

CBLXML-CL-Interface

CBLXML-CN-Interface

形式

CALL 'CBLXML-GET-ERROR' USING XML-POINTER MESSAGE-BUFFER MESSAGE-BUFFER-LENGTH MESSAGE-LENGTH.

引数

引数のデータ型

指定

説明

01 XML-POINTER USAGE POINTER.

○

XMLドキュメントのポインタを受け取るポインタ項目を指定する。

01 MESSAGE-BUFFER PIC X(n).

○

エラー情報を受け取る領域を英数字項目で指定する。

01 MESSAGE-BUFFER-LENGTH PIC 9(9) COMP.

○

エラー情報を受け取る領域の長さを4バイトの2進項目で指定する。

01 MESSAGE-LENGTH PIC 9(9) COMP.

△

受け取ったエラー情報の長さが設定される。この項目は4バイトの2進項目で指定する。

（凡例）

○：サービスルーチンの呼び出し時，値を設定しておく項目

△：サービスルーチンの完了時，値が設定される項目

戻り値

戻り値

内容

1

エラー情報の長さがエラー情報を受け取る領域の長さを超えた。

0

正常終了した。

-1

CBLXML-GET-ERRORサービスルーチンの引数の値が不正である。

-2

操作を続けるためのメモリが不足した。

注

戻り値は，RETURN-CODE特殊レジスタに設定されます。

規則

受け取るエラー情報がない場合，MESSAGE-LENGTHに0が返されます。

MESSAGE-BUFFER-LENGTHに指定した長さより，受け取るエラー情報の長さが長い場合は，MESSAGE-BUFFER-LENGTHに指定した長さでエラー情報を切り捨てます。ただし，切り捨て位置が多バイト文字の途中の場合は，MESSAGE-BUFFER-LENGTHに指定した長さより1バイト短くなってMESSAGE-LENGTHに設定されます。MESSAGE-BUFFERの多バイト文字で切り捨てられる領域には半角空白文字が設定されます。

各アクセスルーチンのエラー情報を取得する場合，CBLXML-OP-InterfaceアクセスルーチンとCBLXML-OB-Interfaceアクセスルーチンでアクセスモード"E"を指定しなければなりません。アクセスモード"E"を指定しない場合，CBLXML-OP-InterfaceアクセスルーチンとCBLXML-OB-Interfaceアクセスルーチンのステータスが0で正常終了してもCBLXML-GET-ERRORサービスルーチンでエラー情報を取得できません。

Unicode機能を設定した場合，引数2で受け取るXMLパーサのエラーメッセージは，文字コードがUTF-8の文字列が返ります。引数3に指定した長さ（1バイト1文字）より，エラー情報の文字列が長い場合，引数3に指定した長さで文字列を切り捨てます。切る位置が文字を構成する多バイト列の途中の場合，該当する文字以降を文字単位に切り捨てます。

(2)　XMLアクセスルーチンのエラー情報

CBL-GET-ERRORサービスルーチンによって得られるエラー情報を表 9-4に示します。また，エラー情報の***番号***は，表 9-5に示す埋め字情報に従って埋め字に置き換わります。

表9‒4　エラー情報

ステータス

エラー情報

埋め字情報

0

（ステータス0はエラー情報を出力しない）

−

1

[1]△要素"***1***"を出力できない。

*** 1 ***: DTD

3

[3]△"***1***"を出力できない。

*** 1 ***: DTD

4

[4]△BaseElement要素に対応する要素を見つけられない。

−

5

[5]△BaseElement要素"***1***"を飛ばして，次のBaseElement要素を入力できない。

*** 1 ***: DTD

6

[6]△要素"***2***"の選択要素に対して，***1***個選択したために出力を決定できない。

***1***:選択要素で出力しようとした個数

***2***:選択要素の直下にある要素名

7

[7]△出力の＋付き要素の繰り返し回数に0が設定されている。

−

8

[8]△"***1***"に不当な文字がある。

*** 1 ***: Document

9

[9]△出力時のファイルまたはバッファを開けない。

−

10

[10]△"***1***"に入力した値がデータ項目の長さを超えた。

*** 1 ***: Document

11

[11]△"***1***"に不当な文字が設定されている。

*** 1 ***: DTD

12

[12]△XMLドキュメントを1回も更新していない。

−

13

[13]△更新の対象を指定しないでXMLドキュメントを更新した。

−

15

[15]△直前に同じBaseElement要素単位の入力を呼び出していない。

−

101

[101]△メモリを確保できない。

−

103

[103]△XMLドキュメントを開けない。

−

104

[104]△XMLドキュメントを閉じることができない。

−

105※1

[105]△アクセスモードに不当な値が設定された。

−

106

[106]△ファイルに出力できない。

−

109

[109]△再帰的に定義された要素は出力できない。

−

110

[110]△XMLドキュメントの解析でエラーが発生した。;***1***

*** 1 ***: XMLパーサのメッセージ

111

[111]△BaseElement要素に対応した要素が見つからない。

−

114

[114]△引数に無効なパラメタが指定された。

−

115

[115]△要素の出力中に指定したバッファ領域の長さに達した。

−

117

[117]△出力でファイルI／Oエラーが発生した。

−

118

[118]△ドキュメントを閉じることができない。

−

119

[119]△一つのXMLポインタに対して複数のXMLドキュメントを開こうとした。

−

121

[121]△内部エラーが発生した。

−

122

[122]△-unisrcオプションの指定と環境変数CBLLANGの設定に矛盾がある。

−

123※2

[123]△-unisrcオプションの指定と環境変数LANGの設定に矛盾がある。

−

124※3

[124]△互換性がない古いXMLアクセスルーチンを使用している。

−

（凡例）

△：半角空白文字

−：埋め字情報はありません。

注※1

アクセスモード"E"を指定した場合だけ取得できます。

注※2

AIX，Linuxの場合だけ出力されます。

注※3

64bit版COBOL2002の場合だけ出力されます。

表9‒5　埋め字情報

埋め字の種類

埋め字に出力する情報

DTD

埋め字に示される要素は「/」文字を区切り文字として，階層でルート要素から「ルート要素/要素/要素」を出力する。

属性は「@」文字を区切り文字として「要素@属性」で出力する。

Document

埋め字に示される要素は「/」文字を区切り文字として，階層でルート要素から「ルート要素/要素/要素」を出力する。

要素が繰り返しである場合，繰り返し順序を示す"[番号]"を要素に付ける。DTDで"*"または"+"によって繰り返しがあることが指定されている要素でも，XMLドキュメント中に1回しか現れない要素については，繰り返し順序を示す"[番号]"は付け加えられない。番号は1から開始し，取得できる要素の繰り返しの番号は，2,147,483,647までである。それを超えた場合は，保証しない。属性は"@"文字を区切り文字として"要素@属性"で出力する。

XMLパーサのメッセージ

XMLパーサが返すメッセージを出力する。

9.3.3　公開識別子が指定されたXMLドキュメント

XML連携機能では，カタログファイルに公開識別子とファイル名を対応づけることで，外部DTDや外部実体を取り込めます。

(1)　カタログファイル

カタログファイルは，公開識別子とファイル名を対応づけするファイルです。カタログファイルはcblxmlコマンドの-catalogオプション，または実行時にCBLXML-READ-CATALOG-FILEサービスルーチンで入力できます。

次に，カタログファイルの形式を示します。

(a)　カタログファイルの形式

公開識別子を対応づける場合，区切り文字「->」の左側に公開識別子，右側にファイル名を記述します。

公開識別子->ファイル名

開始文字「{」と終了文字「}」の間の文字列をコメントとみなします。

{ コメント }

DTDの公開識別子とカタログファイルを対応づけた例を次に示します。

（UNIXの場合）

（DTDの例）

          :
<!DOCTYPE root   PUBLIC "-//HITACHI//DTD test//EN" "/home/project1/myDTD.xml">
<!ENTITY  letter PUBLIC "-//HITACHI//ENT letter 1.0//EN" "/home/project1/letter.xml">
          :

（カタログファイルの例）

-//HITACHI//DTD test//EN->/home/local1/abc.xml
-//HITACHI//ENT letter 1.0//EN->/home/local1/xyz.xml

（Windowsの場合）

（DTDの例）

          :
<!DOCTYPE root   PUBLIC "-//HITACHI//DTD test//EN" "C:¥home¥project1¥myDTD.xml">
<!ENTITY  letter PUBLIC "-//HITACHI//ENT letter 1.0//EN" "C:¥home¥project1¥letter.xml">
          :

（カタログファイルの例）

-//HITACHI//DTD test//EN->C:¥home¥local1¥abc.xml
-//HITACHI//ENT letter 1.0//EN->C:¥home¥local1¥xyz.xml

(b)　公開識別子

公開識別子は，次の文字や数字で構成できます。

#x20　#xD　#xA　a〜z　A〜Z　0〜9　-　'　(　)　+　,　.　/　:　=　?　;　!　*　#　@　$　_　%

カタログファイルで指定できる公開識別子は，1,024バイト以下で指定してください。1,024バイトを超えた場合，cblxmlコマンドによるCOBOL原始プログラム生成時にエラーとなります。CBLXML-READ-CATALOG-FILEサービスルーチンは，戻り値として-2を返します。

(c)　ファイル名

ファイル名として使用できる文字を指定できます。

ファイル名は絶対パスまたは相対パスで指定します。ファイル名を相対パスで指定した場合，その相対パスはプロセスのカレントディレクトリ（フォルダ）からの相対パスとなります。

ファイル名は255バイト以下で指定してください。255バイトを超えた場合，cblxmlコマンドによるCOBOL原始プログラム生成時にエラーとなります。CBLXML-READ-CATALOG-FILEサービスルーチンは，戻り値として-2を返します。

(d)　注意事項

公開識別子の前後にある空白文字（スペース，タブ，および改行）は削除されます。

公開識別子の中に現れる連続する空白文字（スペース，タブ，および改行）は正規化され一つの1バイトスペースとみなします。

公開識別子を対応づけた行の右側にコメントを記述できません。

コメントの開始文字「{」と終了文字「}」を示す文字は，複数行にわたって指定できます。

（Windowsの場合）カタログファイルはシフトJISで記述します。

（UNIXの場合）カタログファイルは環境変数LANGに従って，シフトJIS，日本語EUC，またはUTF-8で記述します。

(2)　カタログファイルの使い方

公開識別子を使用する場合，カタログファイルで公開識別子とファイル名の対応づけを解決します。次に，cblxmlコマンド，および実行時でのカタログファイルの指定方法を示します。

(a)　cblxmlコマンド

cblxmlコマンドに指定するDTDに公開識別子がある場合，cblxmlコマンドの-catalogオプションでカタログファイルを指定します。カタログファイルには相対パス，絶対パスも指定できます。次に例を示します。

cblxmlコマンドでのカタログファイルの指定例

cblxml a.cxd -dtd a.xml -o a.cbl -catalog mycatalog.cxc

注意事項

カタログファイルの拡張子には「.cxc」を指定します。

カタログファイルが見つからない場合は，-catalogオプションに指定したカタログファイルのオープン処理中にエラーとなります。

カタログファイルのフォーマット不正などで入力できない場合は，エラーとなります。

-catalogオプションで入力したカタログファイルの情報は，実行時には有効となりません。

(b)　実行時

公開識別子を有効にするには，XMLドキュメントを開く前にカタログファイルを読み込む必要があります。そのため，CBLXML-READ-CATALOG-FILEサービスルーチンを，CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-Interfaceアクセスルーチンの前に呼び出さなければなりません。

次にカタログファイルを使う場合のXMLアクセスルーチン，およびXMLサービスルーチンの呼び出し順序の例を示します。

カタログファイルを使う場合の呼び出し順序

CBLXML-CREATE-XML-POINTER

XMLポインタを作成する。

CBLXML-READ-CATALOG-FILE

カタログファイルの情報を入力する。

CBLXML-OP-Interface

アクセスモード「E」を追加してXMLドキュメントを開く。

CBLXML-RD-Interface-BaseElement

XMLドキュメントを入力する。

CBLXML-CL-Interface

XMLドキュメントを閉じる。

CBLXML-FREE-XML-POINTER

XMLポインタを解放する。

注意事項

カタログファイルの入力に失敗した場合，CBLXML-OP-InterfaceアクセスルーチンはDTDに記述した公開識別子に対応するシステム識別子を公開識別子の代わりに参照します。システム識別子のファイルを入力できない場合は，CBLXML-OP-Interfaceアクセスルーチンがステータス110を返します。

(3)　CBLXML-READ-CATALOG-FILEサービスルーチン

CBLXML-READ-CATALOG-FILEサービスルーチンは，公開識別子で利用するカタログファイルを設定します。

形式

CALL 'CBLXML-READ-CATALOG-FILE' USING XML-POINTER CATALOG-FILE CATALOG-FILE-LENGTH.

引数

引数のデータ型

指定

説明

01 XML-POINTER USAGE POINTER.

○

XMLドキュメントのポインタを受け取るポインタ項目を指定する。

01 CATALOG-FILE

PIC X(n).

○

カタログファイル名の領域を英数字項目で指定する。

01 CATALOG-FILE-LENGTH PIC 9(9) COMP.

○

カタログファイル名の長さを4バイトの2進項目で指定する。

（凡例）

○：サービスルーチンの呼び出し時，値を設定しておく項目

戻り値

戻り値

内容

0

正常終了した。

-1

カタログファイルが見つからない。または，カタログファイルが読み込めない。

-2

カタログファイルの形式が不正。

-3

操作を続けるためのメモリが不足した。

注

戻り値は，RETURN-CODE特殊レジスタに設定されます。

規則

CBLXML-READ-CATALOG-FILEサービスルーチンはXMLドキュメントを開くアクセスルーチン（CBLXML-OP-Interface，CBLXML-OB-Interface）より前に呼び出してください。

カタログファイル名を相対パスで指定した場合，その相対パスはプロセスのカレントディレクトリ（フォルダ）からの相対パスとなります。

環境変数CBLLANGにUNICODEを設定した場合，CATALOG-FILEに指定されたファイル名は，UTF-8をシフトJISに変換した文字列でアクセスします。ただし，Linuxの場合は変換しないで，UTF-8の文字列でアクセスします。

9.3.4　次に入力するBaseElement要素の位置を取得する機能

CBLXML-GET-NEXT-BEサービスルーチンは，入力または更新モードで開いたXMLドキュメントに対し，次に入力するBaseElement要素のXMLドキュメント上での位置情報を取得できます。位置情報は"/"文字を区切り文字としての階層で，ルート要素からBaseElement要素までを設定します。BaseElement要素が繰り返しである場合，繰り返し順序を示す"[番号]"が要素に付け加えられます。DTDで"*"または"+"によって繰り返しがあることが指定されている要素でも，XMLドキュメント中に1回しか現れない要素については，繰り返し順序を示す"[番号]"は付け加えられません。番号は1から開始し，2,147,483,647までです。番号の範囲を超えた場合は，保証しません。

（位置情報の例）

/ルート要素/要素/BaseElement要素[番号]

形式

CALL 'CBLXML-GET-NEXT-BE' USING XML-POINTER BE-LOCALE-BUFFER BE-LOCALE-BUFFER-LENGTH BE-LOCALE-LENGTH.

引数

引数のデータ型

指定

説明

01 XML-POINTER USAGE POINTER.

○

XMLドキュメントのポインタを受け取るポインタ項目を指定する。

01 BE-LOCALE-BUFFER PIC X(n).

○

BaseElement要素の位置情報を受け取る領域を英数字項目で指定する。

01 BE-LOCALE-BUFFER-LENGTH PIC 9(9) COMP.

○

BaseElement要素の位置情報を受け取る領域の長さを4バイトの二進項目で指定する。

01 BE-LOCALE-LENGTH PIC 9(9) COMP.

△

受け取った位置情報の長さが設定される。この項目は4バイトの二進項目で指定する。

（凡例）

○：サービスルーチンの呼び出し時，値を設定しておく項目

△：サービスルーチンの完了時，値が設定される項目

戻り値

戻り値

内容

3

次に入力するBaseElement要素がない。

2

XMLドキュメントを開いていない状態で位置情報を取得した。または出力モードで開いたXMLドキュメントの位置情報を取得した。

1

BaseElement要素の位置情報の長さが位置情報を受け取る領域の長さを超えた。

0

正常終了した。

-1

CBLXML-GET-NEXT-BEサービスルーチンの引数の値が不正。

-2

操作を続けるためのメモリが不足した。

注

戻り値は，RETURN-CODE特殊レジスタに設定されます。

規則

BE-LOCALE-BUFFER-LENGTHに指定した長さより，受け取るBaseElement要素の位置情報の長さが長い場合は，BE-LOCALE-BUFFER-LENGTHに指定した長さで位置情報を切り捨てます。ただし，切り捨て位置が多バイト文字の途中に当たる場合は，BE-LOCALE-BUFFER-LENGTHに指定した長さより1バイト短くなってBE-LOCALE-LENGTHに設定されます。BE-LOCALE-BUFFERの多バイト文字で切り捨てられる領域には半角空白文字が設定されます。

環境変数CBLLANGにUNICODEを設定した場合，BE-LOCALE-BUFFERで受け取るBaseElement要素の位置情報は，シフトJISをUTF-8に変換後の文字列が返ります。BE-LOCALE-BUFFER-LENGTHに指定した長さ（1バイト1文字）より，位置情報の文字列が長い場合，BE-LOCALE-BUFFER-LENGTHに指定した長さで文字列を切り捨てます。切り捨て位置が多バイト文字を構成するバイト列の途中に当たる場合は，該当する文字以降を文字単位に切り捨て，1〜3バイト短くなってBE-LOCALE-LENGTHに設定されます。BE-LOCALE-BUFFERの多バイト文字で切り捨てられる領域には半角空白文字が設定されます。

次に入力するBaseElement要素の位置を取得し，該当するBaseElement要素を入力する例を次に示します。

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
  <!ELEMENT root (group1 | group2 | group3)>
  <!ELEMENT group1 (item1)>
  <!ELEMENT group2 (item1)>
  <!ELEMENT item1 (#PCDATA)>
  <!ELEMENT group3 (item3)>
  <!ELEMENT item3 (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
 <BaseElement elemName="item1">
  <Item elemName="item1" size="10"/>
 </BaseElement> <BaseElement elemName="item3">
  <Item elemName="item3" size="10"/>
 </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 item1 PIC X(10).
01 item3 PIC X(10).

次のXMLドキュメントdata.xmlを入力し，item3要素の内容"ABC"を読み込みます。

（入力データ）

  <?xml version="1.0" encoding="Shift_JIS"?>
  <root>
    <group3>
      <item3>ABC</item3>
    </group3>
  </root>

（COBOLプログラムのコーディング例）

    :
 01 CBLXML-RETURN-CODE PIC 9(9) COMP.
 01 FILE-NAME PIC X(255).
 01 XML-FILE-NAME USAGE POINTER.
 01 XML-FILE-NAME-LENGTH PIC 9(9) COMP VALUE 255.
 01 XML-MODE PIC X(16).
 01 XML-POINTER USAGE POINTER.
 01 BE-LOCALE-BUFFER PIC X(255).
 01 BE-LOCALE-BUFFER-LENGTH PIC 9(9) COMP VALUE 255.
 01 BE-LOCALE-LENGTH PIC 9(9) COMP VALUE 0.
 PROCEDURE DIVISION.
 START-MAIN.
    :
* open
     MOVE 'R' TO XML-MODE.
     MOVE 'data.xml' TO FILE-NAME.
     MOVE 8 TO XML-FILE-NAME-LENGTH.
     COMPUTE XML-FILE-NAME = FUNCTION ADDR(FILE-NAME).
     CALL 'CBLXML-OP-EXAMPLE'
          USING XML-FILE-NAME
                XML-FILE-NAME-LENGTH
                XML-MODE
                XML-POINTER
          RETURNING CBLXML-RETURN-CODE.
     IF CBLXML-RETURN-CODE NOT = 0 THEN
         DISPLAY 'ERROR - CBLXML-OP-EXAMPLE, STATUS = '
         CBLXML-RETURN-CODE
     END-IF.
* read
     CALL 'CBLXML-GET-NEXT-BE'　　…1.
         USING XML-POINTER
               BE-LOCALE-BUFFER
               BE-LOCALE-BUFFER-LENGTH
               BE-LOCALE-LENGTH.
     IF RETURN-CODE = 0 THEN
        IF BE-LOCALE-BUFFER = '/root/group1/item1' OR
           BE-LOCALE-BUFFER = '/root/group2/item1' THEN
            CALL 'CBLXML-RD-EXAMPLE-item1'　　…2.
                USING XML-POINTER   item1
                RETURNING CBLXML-RETURN-CODE
            IF CBLXML-RETURN-CODE NOT = 0 THEN
               DISPLAY 'ERROR - READ item1, STATUS = '
               CBLXML-RETURN-CODE
            END-IF

            DISPLAY 'BE-LOCALE-BUFFER = ' BE-LOCALE-BUFFER
            DISPLAY 'item1 = ' item1
        ELSE
        IF BE-LOCALE-BUFFER = '/root/group3/item2' THEN
           CALL 'CBLXML-RD-EXAMPLE-item3　　…3.
               USING XML-POINTER   item3
               RETURNING CBLXML-RETURN-CODE
           IF CBLXML-RETURN-CODE NOT = 0 THEN
               DISPLAY 'ERROR - READ item3, STATUS = '
               CBLXML-RETURN-CODE
           END-IF

           DISPLAY 'BE-LOCALE-BUFFER = ' BE-LOCALE-BUFFER
           DISPLAY 'item3 = ' item3
       END-IF
    END-IF.

* close
      CALL 'CBLXML-CL-EXAMPLE'
          USING XML-POINTER
          RETURNING CBLXML-RETURN-CODE.
      IF CBLXML-RETURN-CODE NOT = 0 THEN
          DISPLAY 'ERROR - CBLXML-CL-EXAMPLE, STATUS = '
          CBLXML-RETURN-CODE
      END-IF.
    :

（説明）

次に入力するBaseElement要素の位置を取得します。

item1要素の内容を入力します。

item3要素の内容を入力します。

9.3.5　文字エンコーディングが指定されたXMLドキュメント

(1)　CBLXML-SET-ENCODINGサービスルーチン

出力するXMLドキュメントの文字エンコーディングは，CBLXML-SET-ENCODINGサービスルーチンで指定できます。

形式

CALL 'CBLXML-SET-ENCODING' USING XML-POINTER ENCODING-CODE.

引数

引数のデータ型

指定

説明

01 XML-POINTER USAGE POINTER.

○

XMLドキュメントのポインタを受け取るポインタ項目を指定する。

01 ENCODING-CODE PIC 9(9) COMP.

○

文字エンコーディングフラグを設定する領域を4バイトの2進項目で指定する。指定する値は，XMLアクセス用データ定義（CBLXMLRC.cbl）に登録されている文字エンコーディングフラグの値でなければならない。

（凡例）

○：サービスルーチンの呼び出し時，値を設定しておく項目

戻り値

戻り値

内容

1

文字エンコーディングが無効である。

0

正常終了した。

-1

CBLXML-SET-ENCODINGサービスルーチンの引数の値が不正である。

-2

文字エンコーディングを変えることができない。

注

戻り値は，RETURN-CODE特殊レジスタに設定されます。

表9‒6　文字エンコーディングフラグ

登録集原文"CBLXMLRC.cbl"の定義名（78レベル）

文字エンコーディングフラグ値

文字エンコーディングの意味

CBLXML-EUC-ENCODING

1

EUC-JP

CBLXML-SJIS-ENCODING

2

Shift_JIS

CBLXML-UTF8-ENCODING

3

UTF-8

CBLXML-UTF16-ENCODING

4

Windows，Linuxの場合：UTF-16，リトルエンディアン

AIXの場合：UTF-16，ビッグエンディアン

CBLXML-UTF16BE-ENCODING

5

UTF-16，ビッグエンディアン

CBLXML-UTF16LE-ENCODING

6

UTF-16，リトルエンディアン

CBLXML-WIN31J-ENCODING

7

Windows-31J

規則

CBLXML-SET-ENCODINGサービスルーチンは，CBLXML-CREATE-XML-POINTERサービスルーチン，CBLXML-OP-Interfaceアクセスルーチン，またはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントのポインタを作成後，CBLXML-WR-Interface-BaseElementアクセスルーチンを呼び出す前に実行してください。

XMLアクセスルーチンのアクセスモード'R'を指定して開いたXMLドキュメントに対しては，CBLXML-SET-ENCODINGサービスルーチンの呼び出しは無効となり，戻り値として1を返します。

CBLXML-SET-ENCODINGサービスルーチンを複数回呼び出した場合，最後の呼び出しが有効となります。

XMLアクセスルーチンのアクセスモード'W'，または'U'を指定して開いたXMLドキュメントに対して，CBLXML-WR-Interface-BaseElementアクセスルーチンを呼び出したあと，CBLXML-CL-Interfaceアクセスルーチン，またはCBLXML-CN-Interfaceアクセスルーチンを呼び出す前にCBLXML-SET-ENCODINGサービスルーチンを実行した場合は出力エンコーディングを変えることはできません。この場合，CBLXML-SET-ENCODINGサービスルーチンは戻り値として-2を返します。

9.3.6　エンティティ参照回数を制限する機能

(1)　CBLXML-SET-ENTITYLIMITサービスルーチン

XMLドキュメントの入力時にエンティティ参照回数を制限するときは，CBLXML-SET-ENTITYLIMITサービスルーチンを呼び出して制限値を設定します。

形式

CALL 'CBLXML-SET-ENTITYLIMIT' USING XML-POINTER ENTITY-LIMIT.

引数

引数のデータ型

指定

説明

01 XML-POINTER USAGE POINTER.

○

XMLドキュメントのポインタを受け取るポインタ項目を指定します。

01 ENTITY-LIMIT PIC 9(9) COMP.

○

最大のエンティティ参照回数を指定する領域を4バイトの2進項目で指定します。指定できる値の範囲は，0〜2,147,483,647です。

（凡例）

○：サービスルーチンの呼び出し時，値を設定しておく項目

戻り値

戻り値

内容

0

正常終了した。

-1

CBLXML-SET-ENTITYLIMITサービスルーチンの引数の値が不正である。

規則

CBLXML-SET-ENTITYLIMITサービスルーチンは，CBLXML-CREATE-XML-POINTERサービスルーチンでXMLドキュメントのポインタを作成したあとで，呼び出してください。

CBLXML-SET-ENTITYLIMITサービスルーチンの設定は，XMLドキュメントの入力時に有効になります。CBLXML-SET-ENTITYLIMITサービスルーチンを呼び出したXMLドキュメントのポインタを指定して，XMLドキュメントを開くアクセスルーチン（CBLXML-OP-Interface，CBLXML-OB-Interface）を呼び出してください。

引数ENTITY-LIMITの値が範囲外の場合，制限値を設定していないとみなし，参照回数は制限されません。CBLXML-SET-ENTITYLIMITサービスルーチンの戻り値は-1になります。

環境変数CBLXML_ENTITYLIMITが指定されている状態でCBLXML-SET-ENTITYLIMITサービスルーチンを呼び出した場合，CBLXML-SET-ENTITYLIMITサービスルーチンに指定した値が有効になります。

9.4　小数点以下のけた落ちを判定する機能

XMLドキュメントの入力時に数字項目に対応づけた要素および属性の入力する値の小数点以下のけた数がDDFで指定したCOBOLデータ項目の小数点以下のけた数より長く，けたの切り落としが発生したときにオーバフローが発生したとみなしたい場合は環境変数CBLXML_CHKUFLOWにYESを指定します。オーバフローを判定するためには環境変数CBLXML_CHKUFLOWと同時に-chkovflowオプション，overflowValue属性，またはaccessInfo属性のどちらかを指定しなければなりません。

数字項目とは，DDFでItem要素のtype属性に"numeric"，"packed"，または"binary"のどれかを指定した項目です。

形式

（UNIXの場合）

sh（Bシェル）の場合

CBLXML_CHKUFLOW=YES
export CBLXML_CHKUFLOW

（Windowsの場合）

set CBLXML_CHKUFLOW=YES

けたの切り落としが発生する例

（DTDの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
<!ELEMENT root (item1)>
<!ELEMENT item1 (#PCDATA)>
]>
<root/>

（DDFの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
  <BaseElement elemName="root">
  <Item elemName="item1" type="numeric" size="9" fractionalDigits="3"/>
  </BaseElement>
</Interface>

（生成されるCOBOLデータ項目）

01 item1 PIC 9(6)V9(3).

（入力されるXMLドキュメント（けたの切り落としが発生する値））

<?xml version="1.0" encoding="Shift_JIS"?>

<root>
  <item1>123.4567</item1>※
</root>

注※

DDFで指定したCOBOLデータ項目の小数点以下のけた数を超えています。

注意事項

環境変数CBLXML_CHKUFLOWを指定しても-chkovflowオプション，overflowValue属性，またはaccessInfo属性のどちらかを指定しない場合は，それぞれの条件で-chkovflowオプション指定時のCBLXML-RD-Interface-BaseElementアクセスルーチンのステータス10（CBLXML-VALUE-OVERFLOW）やoverflowValue属性の設定値，accessInfo属性でのアクセス情報フラグのCBLXML-FLAG-OVERFLOWが設定されません。小数点以下のけた落ちを判定する場合は環境変数CBLXML_CHKUFLOWと同時に-chkovflowオプション，overflowValue属性，またはaccessInfo属性のどちらかを必ず指定してください。

小数点以下のけた落ちの判定は，有効数字以外の0を削除した値で判定します。

（例）

COBOLデータ項目9(4)V9(1)に対して，XMLの入力値が「123.400」である場合，右端の「00」を削除した有効数字123.4で判定を行います。このため，けたの切り落としが発生しません。

付録

付録A　データ定義言語（DDL）の文法形式

(1) Interface要素

<Interface interfaceName="インタフェース名"

〔accessInfo="yes|no"〕>

BaseElement要素 …

</Interface>

(2) BaseElement要素

<BaseElement elemName="XML要素の名称"

〔cobName="XMLアクセスルーチンの名称"〕

〔accessInfo="yes|no"〕

〔nameOfBaseVar="XMLアクセス用データ定義の名称"〕>

｛Group要素｜Item要素｜AttrItem要素｝

</BaseElement>

(3) Group要素

<Group

〔elemName="XMLの要素名"〕

〔cobName="Group要素に対応する名称"〕

〔nameOfFlagVar="アクセス情報フラグの名称"〕

〔nameOfGroupVar="入出力データ情報項目の名称"〕

〔update="yes"〕>

｛Group要素｜Array要素｜Item要素｜AttrItem要素｝…

</Group>

(4) Item要素

<Item elemName="XMLの要素名"

〔cobName="Item要素に対応する名称"〕

〔type="type属性値"〕

〔size="けた数"〕

〔fractionalDigits="けた数"〕

〔emptyValue="type属性値に対応したCOBOLの定数"〕

〔sign="符号種別"〕

〔trim="yes｜no"〕

〔nameOfFlagVar="アクセス情報フラグの名称"〕

〔nameOfLengthVar="データ長の名称"〕

〔verbatim="yes|no"〕

〔update="yes"〕

〔emptyContentValue="type属性値に対応したCOBOLの定数"〕

〔invalidCharValue="type属性値に対応したCOBOLの定数"〕

〔overflowValue="type属性値に対応したCOBOLの定数"〕

/>

(5) Array要素

<Array max="要素の最大繰り返し回数"

〔nameOfCountVar="繰り返し入出力数の名称"〕

〔nameOfTotalVar="繰り返し全要素数の名称"〕

〔countVar="yes|no"〕>

｛Group要素｜Item要素｜AttrItem要素｝

</Array>

(6) AttrItem要素

<AttrItem elemName="XMLの要素名"

attrName="属性名"

〔cobName="AttrItem要素に対応する名称"〕

〔type="type属性値"〕

〔size="けた数"〕

〔fractionalDigits="けた数"〕

〔emptyValue="type属性値に対応したCOBOLの定数"〕

〔sign="符号種別"〕

〔trim="データ項目の整形の有無"〕

〔nameOfFlagVar="アクセス情報フラグの名称"〕

〔nameOfLengthVar="データ長の名称"〕

〔emptyContentValue="type属性値に対応したCOBOLの定数"〕

〔invalidCharValue="type属性値に対応したCOBOLの定数"〕

〔overflowValue="type属性値に対応したCOBOLの定数"〕

/>

付録B　XML連携機能，XML連携機能の実行ライブラリで使用するファイル

使用するファイルの一覧を表B-1に示します。

表B‒1　XML連携機能，XML連携機能の実行ライブラリで使用するファイル

ファイル種別

拡張子

内容

出力元

入力先

共用ライブラリ

.so※1

.sl※1

.a※4

オブジェクトプログラムのライブラリを格納するファイル。

−

リンカ

DLLファイル

.dll※2

DLL（ダイナミックリンクライブラリ）を格納するファイル。

リンカ

−

ライブラリファイル

.lib

インポートライブラリファイル。

−

リンカ

COBOLソースファイル

.cblほか※3

COBOL原始プログラムを格納するファイル。

−

コンパイラ

XMLアクセス用データ定義

.cbl

XMLドキュメントへのアクセスに必要なCOBOLのデータ定義を格納するファイル。

拡張子は.cblでなければならない。

cblxml

コンパイラ

XMLアクセス用ステータス定義

.cbl

XMLアクセスルーチンのステータス名称を定義する登録集原文。

−

コンパイラ

XMLアクセスルーチン

.cbl

XMLドキュメントにアクセスするCOBOL副プログラムを格納するファイル。

拡張子は.cblでなければならない。

cblxml

コンパイラ

カタログファイル

.cxc

公開識別子とファイルの対応づけを定義するファイル。

拡張子は.cxcでなければならない。

−

cblxml，実行時

データ定義ファイル（DDFファイル）

.cxd

COBOLプログラムからアクセスするXMLドキュメント中の要素と，COBOLデータ項目との対応づけを指定するファイル。

拡張子は.cxdでなければならない。

−

cblxml

外部DTDファイル

.xml

DTDのDOCTYPE宣言の実体を記述したファイル。

−

cblxml

オブジェクトファイル

.o※1

.obj※2

コンパイルの結果であるオブジェクトプログラムを格納するファイル。

コンパイラ

リンカ

文書型定義ファイル（DTDファイル）

.xml

.dtd※2

XMLドキュメントで使用するマークづけ要素と要素の構成を定義するファイル。

拡張子は.xmlまたは.dtdでなければならない。

−

cblxml

XMLドキュメント

.xml

XML対応COBOLプログラムのアクセス対象となるXMLファイル。

実行時

実行時

実行可能ファイル

.exe

コンパイル，リンクをして実行可能になったプログラムを格納するファイル。

リンカ

−

（凡例）

−：該当しない。

注

出力元，入力先の欄の略称の意味は次のとおりです。

cblxml：cblxmlコマンド

コンパイラ：COBOL2002コンパイラ（ccbl2002コマンド）

リンカ：リンカ（AIXの場合xlCコマンド，Linuxの場合g++コマンド，Windowsの場合LINKコマンド）

実行時：XMLアクセス用実行時ライブラリ

注※1

UNIXの場合だけで有効

注※2

Windowsの場合だけで有効

注※3

目的に応じて次の拡張子を使用します。

固定形式正書法で書かれた原始プログラムをコンパイルする場合

.cbl，.cob，.ocb，またはCOBOLの環境変数CBLFIXで指定した拡張子

自由形式正書法で書かれた原始プログラムをコンパイルする場合

.cbf，.ocf，またはCOBOLの環境変数CBLFREEで指定した拡張子

注※4

AIXの場合だけで有効

付録C　制限事項

制限事項について説明します。

付録C.1　XML連携機能，XML連携機能の実行ライブラリの制限事項

(1)　DTD，DDFの制限事項

(a)　XMLの仕様

名前空間（ネームスペース）は使用できません。

XML宣言，文書の型宣言，要素宣言，属性リスト宣言，および実体宣言以外の宣言は，使用できません。それぞれの宣言の注意事項は，「2.1.2　XML連携機能で扱えるDTDの形式」を参照してください。

elemName属性に指定した名称について，XML規格のチェックはしていません。

(b)　COBOLの仕様

再帰的な構造のXML要素を，COBOL集団項目に対応づけることはできません。

次のような構成の混合内容は，DDLで対応づけられません。

<!ELEMENT 要素A (#PCDATA | 要素B)*>

DTDで，グループ内に同じXML要素を記述できません。

<!ELEMENT 要素A (要素B, 要素C, 要素B)>

(2)　製品の制限事項

XMLアクセスルーチンの引数に指定するポインタ項目に対して，NULL値や不当なアドレスを指定した場合，動作は保証しません。

XML対応COBOLプログラムでは，2GBを超えるXMLドキュメントを扱えません。

XMLドキュメントにアクセスすると，メモリ所要量は実際のファイルサイズより大幅に大きくなる場合があります。32bit版アプリケーションでは，一つのプロセスで扱える仮想アドレス空間の制限が2GBのため，実際のファイルサイズが2GB未満であっても，XML連携機能が使用するメモリ所要量が2GBを超えると，メモリ不足で実行時エラーとなります。アクセスするXMLドキュメントを分割するなど，メモリ所要量が2GBを超えないようにしてください。

付録C.2　COBOL2002との連携での制限事項

COBOL2002コンパイラは，COBOL原始プログラムが例外の伝播を抑止する条件に該当している場合，例外の伝播を自動的に無効とします。XML連携機能によって生成されたCOBOL原始プログラム（XMLアクセスルーチン）は，COBOL2002コンパイラが例外の伝播を抑止する条件に該当しているので，例外の伝播は無効になります。したがって，-Compati85,NoPropagateオプションを指定する必要はありません。例外の伝播を抑止する条件の詳細については，マニュアル「COBOL2002　使用の手引　手引編」または「COBOL2002　ユーザーズガイド」を参照してください。

XML連携機能が生成するCOBOL原始プログラムをコンパイルする場合，次に示すオプションは指定できません。これらのオプションを指定したときの動作は保証しません。

-SimMain，-Bin1Byte，-EquivRule,NotAny，-EquivRule,NotExtend，-EquivRule,StdCode，-V3Rec,Fixed，-V3Rec,Variable，-JPN,Alnum，-JPN,V3JPN，-CompatiV3，-DigitsTrunc，-V3Spec，-V3Spec,CopyEased，-LowerAsUpper，-V3RecFCSpace，-JPN,V3JPNSpace，-VOSCBL,OccursKey，-VOSCBL,ReportControl，-VOSCBL,DataComm，-VOSCBL,RedefinesData，-VOSCBL,AssignDataToDevice，-VOSCBL,EvaluateWhenOther

付録C.3　COBOL85／COBOL2002共存環境での制限事項

COBOL85／COBOL2002共存環境での制限事項を次に示します。

COBOL adapter for XML，およびCOBOL 拡張 Run Time System for XMLは，COBOL2002と連携して使用できません。

（UNIXの場合）

COBOL 拡張 Run Time System for XMLを使用する共用ライブラリと，COBOL2002　XML連携機能を使用する共用ライブラリを一つのプログラムに混在させることはできません。

付録C.4　64bit版COBOL2002　XML連携機能の制限事項

64bit版COBOL2002 XML連携機能では，32bit版のcblxmlコマンド※を使用して生成したXMLアクセス用データ定義，およびXMLアクセスルーチンは使用できません。

32bit版のcblxmlコマンド※を使用して生成したXMLアクセス用データ定義，およびXMLアクセスルーチンを使用してオブジェクトを作成した場合，アクセスルーチンの実行時にステータス124(CBLXML-PROG-FILE-TOO-OLD)が返されます。この場合，該当するバージョンの64bit版cblxmlコマンドを使用して再生成してください。

注※

COBOL adapter for XML，または32bit版COBOL2002 XML連携機能のcblxmlコマンドです。Windows(x86) COBOL2002 03-00以降，AIX(32) COBOL2002 03-02以降またはLinux(x86) COBOL2002で生成した場合は使用できます。

付録C.5　文字コードの制限事項

(1)　文字コード

XML連携機能では，使用するXMLドキュメントの文字エンコーディングに関連して，使用できる文字コードに相違があります。XML連携機能で使用できる文字コードについては，「付録G　XML連携機能のXMLドキュメントの文字エンコーディングと文字コード」を参照してください。また，XMLドキュメントで使用できる文字エンコーディングについては，「付録E.1　使用できる文字エンコーディング」を参照してください。

付録C.6　Windows OS固有の注意事項

WindowsでXML連携機能を使用する場合は，次の点に注意してください。

フォルダ名，ファイル名，プログラムへの入力文字列，および環境変数に指定できる文字は，シフトJISの範囲だけです。JIS X0213の第3水準漢字，および第4水準漢字を含むUnicodeの文字は使用できません。

cblxmlコマンドが生成するXMLアクセスルーチンやXMLアクセス用データ定義の出力先，XML連携機能を使用したXMLドキュメントのファイルの出力先や更新先として，Windowsリソース保護（WRP）対象のフォルダを指定しないでください。指定した場合，意図しないフォルダにリダイレクトされるか，または出力できません。WRPについては，各OSのヘルプなどを参照してください。

付録D　実体参照

付録D.1　定義済み実体参照

入力するXMLドキュメントの定義済み実体参照は表D-1に従ってCOBOLデータ項目に入力されます。例えば，"&amp;"の定義済み実体参照は"&"文字に変換されCOBOLデータ項目に入力されます。verbatim属性に"yes"を指定したItem要素に対応づけた要素や属性は，定義済み実体参照を示す文字列で入力されます。

cblxmlコマンドに-nopeconvオプションを指定して生成したCOBOL原始プログラムを使用して，XMLドキュメントを入力した場合は，COBOL adapter for XML 01-01までと互換のある動作で入力されます。

表D‒1　XMLドキュメント入力時の定義済み実体と対応する文字

入力するXMLドキュメントの定義済み実体参照とそれに対応する文字参照

COBOLデータ項目に入力される文字

-nopeconvオプション指定なし

-nopeconvオプション指定あり

（COBOL adapter for XML 01-01までの動作互換）

verbatim指定なし(verbatim="no")の要素，属性の値

verbatim="yes"指定ありの要素の値

verbatim指定なし(verbatim="no")の要素，属性の値

verbatim="yes"指定ありの要素（Group要素の子要素や子要素の属性を含む）

要素

属性

&lt;

&#60;

<

&lt;

<

&lt;

&lt;

&gt;

&#62;

>

&gt;

>

>

>

&amp;

&#38;

&

&amp;

&

&amp;

&amp;

&apos;

&#39;

'

&apos;

'

'

'

&quot;

&#34;

"

&quot;

"

"

&quot;※

注※

Group要素にverbatim="yes"指定のItem要素を対応づけたとき，Group要素の子要素に属性が宣言され，その値に"&quot;"，"&#34;"がある場合。

定義済み実体参照に対応する文字をXMLドキュメントに出力する場合，表D-2に従って要素，属性の値を変換してXMLドキュメントに出力します。verbatim属性に"yes"を指定したItem要素に対応づけた場合は，変換しないで出力されます。

cblxmlコマンドに-nopeconvオプションを指定して生成したCOBOL原始プログラムを使用して，XMLドキュメントを出力した場合は，COBOL adapter for XML 01-01までと互換のある動作で出力されます。

表D‒2　XMLドキュメント出力時に変換する文字

対応づけた項目

COBOLデータ項目の文字

XMLドキュメントに出力する文字

-nopeconvオプション指定なし

-nopeconvオプション指定あり

（COBOL adapter for XML 01-01までの動作互換）

verbatim指定なし(verbatim="no")の要素，属性の値

verbatim="yes"指定ありの要素の値

要素

属性

<

&lt;

<

<

>

&gt;

>

>

&

&amp;

&

&

'

&apos;

'

'

"

&quot;

"

"

注意事項

実体参照を入出力する場合，属性type="alphanumeric"を指定した項目だけで有効です。その他のtype属性値を指定した場合，動作は保証しません。

付録D.2　実体参照

入力するXMLドキュメントのDTDにENTITY宣言がある場合，宣言した実体参照を表D-3に従って入力してください。

表D‒3　XMLドキュメント入力時の実体参照

対応づけた項目

verbatim指定なし，またはverbatim="no"

verbatim="yes"指定あり

要素

変換した実体が入力される

変換しないで入力する

属性

変換した実体が入力される

変換した実体が入力される

verbatim属性の指定なしで対応づけた場合の，実体参照"&xxx;"の入力例を次に示します。

（入力されるXMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE table [
  <!ELEMENT table (item1, item2)>
  <!ELEMENT item1 (#PCDATA)>
   <!ELEMENT item2 (#PCDATA)>
   <!ENTITY  xxx "AAA">
]>
<table>
  <item1>a&xxx;b</item1>
  <item2>abc</item2>
</table>

表D‒4　COBOLデータ項目の入力値

COBOLデータ項目

入力値

01 item1 PIC X(10)

aAAAb

01 item2 PIC X(10)

abc

注意事項

実体参照を入力する場合，type属性値に"alphanumeric"を指定しなければなりません。その他のtype属性値を指定した場合，動作は保証しません。

XMLドキュメント出力時に実体参照で定義した名称は，実体参照に変換されません。

付録E　XMLドキュメントの解析に関する仕様

XML連携機能のXMLドキュメント解析処理（XMLパーサ）に関する仕様について説明します。

なお，XMLドキュメントの解析処理はCosminexus Interschema-Parsing KitのXMLパーサ機能を使用して実現しています。

付録E.1　使用できる文字エンコーディング

XML連携機能で処理するXMLドキュメントでは，次に示す文字エンコーディングを使用してください。

Shift_JIS

Windows-31J

EUC-JP

UTF-8

UTF-16

文字エンコーディングの指定を省略した場合はUTF-8を仮定します。

(1)　シフトJISでのコード範囲とUnicodeへの変換表

シフトJISコードのXMLドキュメントを解析する場合は，シフトJISコードからUnicodeへ変換して解析したあと，値をCOBOLデータ項目に入力するときに，UnicodeからシフトJISコードへ変換します。

XML不正文字は，Unicodeに変換したあとにチェックされ，エラーとして通知されます。XML不正文字については，「付録E.2(1)　XML標準仕様での文字の範囲」を参照してください。シフトJISコードからUnicodeへの変換表を表E-1に示します。

表E‒1　シフトJISでのコード範囲とUnicodeへの変換表

項番

説明

コード範囲（16進数）

備考

1

制御コード

00-20

※1

2

ASCII/JISローマ字

21-7e

x-sjis-cp932※2

3

半角かたかな

a1-df

4

JIS X 0208-1990（第1バイト）

81-9f e0-ec

5

JIS X 0208-1990（第2バイト）

40-7e 80-fc

6

ユーザ定義文字（第1バイト）

f0-f9

ユーザ外字※3

7

ユーザ定義文字（第2バイト）

40-7e 80-fc

8

NEC選定IBM拡張漢字（第1バイト）

ed-ee

x-sjis-cp932※2

9

NEC選定IBM拡張漢字（第2バイト）

40-7e 80-fc

10

IBM拡張漢字（第1バイト）

fa-fc

11

IBM拡張漢字（第2バイト）

40-7e 80-fc

12

項番1〜11以外の範囲

未定義※4

注※1

制御コード0x00〜0x20は，Unicodeの制御コード0x0000〜0x0020に変換されます。

注※2

変換規則x-sjis-cp932については，「付録E.2(2)　文字コード変換表」を参照してください。

注※3

シフトJISのユーザ定義文字の領域は，Unicodeの外字領域（Private Use Area）に変換されます。使用できる外字の範囲については，「付録E.1(6)　使用できる外字コード」を参照してください。

注※4

Unicodeの空白（0x0020）や中点（0x30fb）など適当な文字に置き換わります。XMLドキュメントの入力動作は保証しません。

(2)　日本語EUCでのコード範囲とUnicodeへの変換表

日本語EUCのXMLドキュメントを解析する場合は，日本語EUCからUnicodeへ変換して解析したあと，値をCOBOLデータ項目に入力するときに，Unicodeから日本語EUCへ変換します。

日本語EUCでは，半角かな文字に半角英数字2文字分の領域が必要です。このため，XMLドキュメントの入出力で半角かな文字を使用する場合は，COBOLプログラム中で長さの扱いに注意してください。

XML不正文字は，Unicodeに変換したあとにチェックされ，エラーとして通知されます。XML不正文字については，「付録E.2(1)　XML標準仕様での文字の範囲」を参照してください。日本語EUCからUnicodeへの変換表を表E-2に示します。

表E‒2　日本語EUCでのコード範囲とUnicodeへの変換表

項番

説明

コード範囲（16進数）

備考

1

制御コード

00-20

※1

2

ASCII/JISローマ字

21-7E

x-eucjp-open-19970715-ms※2

3

JIS X 0208-1990（第1バイト）

A1-FE

4

JIS X 0208-1990（第2バイト）

A1-FE

5

半角かたかな（第1バイト）

8E

6

半角かたかな（第2バイト）

A1-DF

7

項番1〜6以外の範囲

未定義※3

注※1

制御コード0x00〜0x20は，Unicodeの制御コード0x0000〜0x0020に変換されます。

注※2

変換規則x-eucjp-open-19970715-msについては，「付録E.2(2)　文字コード変換表」を参照してください。

注※3

JIS X 0212補助漢字の範囲では変換は保証しません。それ以外の範囲については，Unicodeの空白文字（0x0020），中点（0x30FB）など適当な文字に置き換えられます。

XMLドキュメントの入出力動作は保証しません。

(3)　UCS系エンコードでの利用可能なコード範囲

表E‒3　UTF-8でのコード範囲

項番

説明

UTF-8のコード範囲※1（1バイト目）

UTF-8のコード範囲※1（2バイト目）

UTF-8のコード範囲※1（3バイト目）

UTF-8のコード範囲※1（4バイト目）

ISO-10646-UCS-4のコード範囲※1

備考

1

1バイト形式

00-7f

00000000-0000007f

2

2バイト形式

c2-df

80-bf

00000080-000007ff

3

3バイト形式

e0-ef

80-bf

80-bf

00000800-0000ffff

4

4バイト形式

f0-f4

80-bf

80-bf

80-bf

00010000-0010ffff※2

5

項番1〜4以外の範囲

未定義※3

注※1

コード範囲は16進数で表しています。

注※2

UTF-8の4バイト形式はISO-10646-UCS-4で表現する0x00010000〜0x001fffffの範囲ですが，UTF-16のサロゲートペア（surrogate pairs）で表す範囲の上限値（0x0010ffff）より大きい範囲については未定義です。

また，JIS X0213の第3，4水準の文字は使用できません。

注※3

未定義の範囲については，空白(0x0020)など適当な文字に置き換わります。XMLドキュメントの入力動作は保証しません。

表E‒4　UTF-16でのコード範囲

項番

説明

UTF-16のコード範囲※1

ISO-10646-UCS-4のコード範囲※1※2

備考

1

サロゲートペア以外のコード範囲※2

0000-d7ff

00000000-0000d7ff

2

e000-ffff

0000e000-0000ffff

3

上位のサロゲートのコード範囲※3

d800-dbff

00010000-0010ffff

4

下位のサロゲートのコード範囲※3

dc00-dfff

5

項番1〜4以外の範囲

未定義※4

注※1

コード範囲は16進数で表しています。

注※2

XML連携機能ではUCS-2範囲でサポートしています。

ただし，JIS X0213の第3，4水準の文字は使用できません。

注※3

XML連携機能では使用できません。

注※4

未定義の範囲については，空白（0x0020）など適当な文字に置き換わります。 XMLドキュメントの入出力動作は保証しません。

表E‒5　ISO-10646-UCS-2でのコード範囲

項番

説明

コード範囲※1

備考

1

アルファベット，かな，記号など

0000-4dff

2

CJK統一文字

4e00-9fff

3

ユーザ定義外字領域

e000-f8ff

4

全角アルファベット，半角かな文字

f900-fffd

5

項番1〜4以外の範囲

未定義※2

注※1

コード範囲は16進数で表しています。

注※2

未定義の範囲については，空白(0x0020)など適当な文字に置き換わります。XMLドキュメントの入出力動作は保証しません。

(4)　UnicodeからシフトJISへの変換

UnicodeからシフトJISへの変換は，シフトJISのコード範囲で，x-sjis-cp932の逆変換となります。ただし，シフトJISからUnicodeへの変換で，同じ字形を表す複数のコードから，Unicodeの一つのコードへ対応づけられているものについては，対応するコードの一つが逆変換に使用されるため，完全な逆変換とはなりません。

(5)　Unicodeから日本語EUCへの変換

Unicodeから日本語EUCへの変換は，日本語EUCのコード範囲で，x-eucjp-open-19970715-msの逆変換となります。ただし，日本語EUCからUnicodeへの変換で，同じ字形を表す複数のコードから，Unicodeの一つのコードへ対応づけられているものについては，対応するコードの一つが逆変換に使用されるため，完全な逆変換とはなりません。

(6)　使用できる外字コード

XML連携機能，およびXML連携機能の実行ライブラリで使用できる外字コードを，次に示します。なお，外字コードは，要素の値だけに使用できます。

シフトJIS，Unicode以外の外字コードは使用できません。

表E‒6　使用できる外字コード

使用できるシフトJISでの外字コード（16進数）

Unicodeのユーザエリアでの文字コード（16進数）

f040〜f07e，f080〜f0fc

e000〜e0bb

f140〜f17e，f180〜f1fc

e0bc〜e177

f240〜f27e，f280〜f2fc

e178〜e233

f340〜f37e，f380〜f3fc

e234〜e2ef

f440〜f47e，f480〜f4fc

e2f0〜e3ab

f540〜f57e，f580〜f5fc

e3ac〜e467

f640〜f67e，f680〜f6fc

e468〜e523

f740〜f77e，f780〜f7fc

e524〜e5df

f840〜f87e，f880〜f8fc

e5e0〜e69b

f940〜f97e，f980〜f9fc

e69c〜e757

付録E.2　使用できる文字の範囲

(1)　XML標準仕様での文字の範囲

XML標準仕様では，XMLの解析対象実体で使用できる文字の範囲を，Unicodeで次のように定めています。

#x9，#xa，#xd，[#x20-#xd7ff]，[#xe000-#xfffd]，[#x10000-#x10ffff]

XML連携機能では，XML不正文字として，#xfeffおよび#x110000以降を除く上記以外の文字が現れた場合，エラーとします。#x110000以降の文字は#x20に置き換えられます。#xfeffはエラーとしないで削除されます。

(2)　文字コード変換表

文字コード変換表は下記のURLに定義されています。

http://www.w3.org/TR/japanese-xml/

付録E.3　外部識別子の解釈

XMLドキュメントでは，外部のファイルにあるDTDなど，外部エンティティの場所を示すために外部識別子が使用されます。外部識別子には，システム識別子と公開識別子があります。XMLパーサは，この外部識別子を解釈して外部エンティティの内容を参照します。

システム識別子には，ファイルの位置を示すパス名を直接記述します。

XMLパーサで使用するシステム識別子は，標準的なURI形式の仕様と次の点で異なります。

非ASCII文字（多バイト文字）を指定できます。このため，漢字を使用したファイル名を指定できます。

%HH形式（HH:16進数）のエスケープは最初に展開されるため，特殊記号のエスケープとしては使用できません。

公開識別子には，外部エンティティを識別する文字列を記述します。XML連携機能では，カタログファイルを用いて公開識別子と外部エンティティの対応づけができます。公開識別子とカタログファイルの詳細については，「9.3.3　公開識別子が指定されたXMLドキュメント」を参照してください。

XMLパーサは，公開識別子を解釈する場合，XML仕様に従った公開識別子の正規化を行います。

公開識別子を指定する場合には，システム識別子も同時に指定します。公開識別子の解決ができない場合（カタログファイルを指定していない場合，公開識別子が示す外部エンティティが存在しない場合など），システム識別子が外部エンティティの参照に用いられます。

(1)　システム識別子の解決

通常のファイルを指定する際に絶対パスや相対パスを指定するように，システム識別子でも絶対パスや相対パスでの指定ができます。

システム識別子を絶対パスで指定した場合，指定されたパスがそのままシステム識別子として解釈されます。

システム識別子を相対パスで指定した場合，相対パスは次のように解釈されます。

（アクセス対象のXMLドキュメントがファイル上にある場合）

アクセス対象のXMLドキュメントが存在するディレクトリ（フォルダ）からの相対パスとなります。

なお，アクセス対象のXMLドキュメントのパスが相対パスで指定された場合は，その相対パスはプロセスのカレントディレクトリ（フォルダ）が基点になります。

（アクセス対象のXMLドキュメントがバッファ（メモリ）上にある場合）

プロセスのカレントディレクトリ（フォルダ）からの相対パスとなります。

相対パスの場合のシステム識別子の解決例を次に示します。

アクセス対象のXMLドキュメントのパス

参照する外部エンティティのシステム識別子

解決されたシステム識別子

"dir1/MyDoc.xml"

"dir2/MyDtd.dtd"

"dir1/dir2/MyDtd.dtd"

"/home/dir1/MyDoc1.xml"

"dir2/MyDtd.dtd"

"/home/dir1/dir2/MyDtd.dtd"

(2)　使用できるシステム識別子

XMLパーサで使用できるシステム識別子の例を示します。

(a)　共通の記述形式

OSに依存しないXMLドキュメントを記述したい場合は，次に示す形式で記述するようにしてください。

絶対パス指定のシステム識別子の例

共通の記述形式はありません。

相対パス指定のシステム識別子の例

MyDirectory/MyXMLFile.xml

(b)　UNIXで使用できる記述形式

絶対パス指定の識別子の例

/usr/MyDirectory/MyXMLFile.xml

相対パス指定のシステム識別子の例

「(a)　共通の記述形式」に示す形式で記述してください。

(c)　Windowsで使用できる記述形式

絶対パス指定のシステム識別子の例

C:¥usr¥MyDirectory¥MyXMLFile.xml

C:/usr/MyDirectory/MyXMLFile.xml

相対パス指定のシステム識別子の例

MyDirectory¥MyXMLFile.xml

MyDirectory/MyXMLFile.xml

付録E.4　使用できる解析モードによる動作の違い

XML連携機能では，CBLXML-OP-Interfaceアクセスルーチン，CBLXML-OB-Interfaceアクセスルーチンの引数で，XMLドキュメントの解析モードを指定できます。

解析モードによって，XMLドキュメントの解析時に実行したいデータ構造の検証や外部エンティティの読み込みに関する動作が異なります。

表E‒7　解析モード

環境変数CBLXML_PARSE_NOXXEの値

解析モード

妥当性制約の検証

外部エンティティの読み込み

'YES'以外

または指定なし

アクセスモード'V'および'N'指定なし

×

○

アクセスモード'V'指定あり

○

○

アクセスモード'N'指定あり

×

×

'YES'

任意

×

×

（凡例）

○：該当する。

×：該当しない。

解析モードの詳細を次に示します。

アクセスモード'V'および'N'指定なし

DTDによるドキュメント構成の検証が必要ない場合に使用するモードです。

外部DTDサブセットを含むすべてのDTDが読み込まれ，エンティティ宣言，および属性宣言を認識できます。したがって，エンティティ参照や属性の初期値は次のように処理されます。

エンティティ参照は解決されます。

属性の初期値は供給されます。

属性値を正規化するとき，属性の型に従って処理されます。

なお，XMLドキュメントが正しい形式であるための制約（well-formedness constraint）を満たすために必要な場合を除き，DTDは必須ではありません。

アクセスモード'V'指定あり

DTDを使用してXMLドキュメントのタグの順序や属性などのドキュメント構成を検証したい場合に使用するモードです。外部DTDサブセットを含むすべてのDTDが検証され，エンティティ宣言，および属性宣言を認識できます。

環境変数CBLXML-PARSE-NOXXEに'YES'を指定，またはアクセスモード'N'指定あり

外部エンティティを読み込まない場合に使用するモードです。DTDによるドキュメント構成の検証はしません。DTDを読み込み，エンティティ宣言，および属性宣言を認識します。ただし，DTD内で外部DTDサブセットを使用している場合，外部DTDサブセットは読み込まれないので，DTD内の以後のマークアップ宣言を認識できません。また，XML文書内で外部エンティティが参照された場合も，外部エンティティは読み込まれません。

付録E.5　文字参照・実体参照の扱い

XMLドキュメントの構文要素「文字参照」を通常の文字と区別しません。XMLドキュメントの入力・更新時，文字参照は対応する文字に変換されます。

XMLドキュメント上で，属性値にエンティティ参照や文字参照が含まれる場合，すべて展開された状態で入力・更新されます。

次に示す二つの条件に該当する場合，エンティティは空白となります。

参照されたエンティティが宣言されていない。

参照しているエンティティの宣言を記述した外部DTDサブセットが読み込まれていない。

付録E.6　重複する宣言の扱い

XMLパーサは重複する宣言に対する扱いが宣言によって異なります。

エンティティ宣言

同一の実体が1回以上宣言されている場合，最初の宣言を用います。

要素型宣言

妥当性制約の検証を実行する場合

一つの要素型に対して2回以上宣言されている場合，エラーとなります。

妥当性制約の検証を実行しない場合

一つの要素型に対して2回以上宣言されている場合，最後の宣言を用います。

属性リスト宣言

ある要素型の同じ属性に複数の定義を与える場合には，最初の宣言を有効とし，他の宣言は無視します。

付録E.7　入力ドキュメントとの相違点

XMLドキュメント更新機能では，出力ドキュメントは入力ドキュメントと次の点で異なります。

文字参照，定義済み実体参照は展開されて出力されます。

属性値中のエンティティ参照は展開された値となります。

DTDでデフォルト値を設定した属性は追加されます。

改行コード（CR+LF，LF）は，UNIXの場合，LFで出力されます。Windowsの場合，CR+LF(0x0D0A)で出力されます。

XMLドキュメントを更新した場合，「<」，「>」と要素名の間の空白文字（スペース，タブ，および改行）は削除されます。また，タグの要素や属性の間の空白文字（スペース，タブおよび改行）は，一つのスペースに変換されます。

（例）

<ABC△> <ABC▲a="xx"▲b="yy"△>

注

△：削除します。

▲：一つのスペースにまとめます。

付録E.8　エンティティ参照の扱い

XML連携機能では，エンティティ参照の扱いを指定できます。

外部エンティティ参照の展開を無効にする

エンティティ参照の参照回数を制限する

(1)　外部エンティティ参照の展開を無効にする

CBLXML-OP-InterfaceまたはCBLXML-OB-Interfaceアクセスルーチンの引数（アクセスモード），または環境変数CBLXML_PARSE_NOXXEで，入力時の外部エンティティ参照の展開を無効にするかどうかを指定します。

環境変数CBLXML_PARSE_NOXXEにYESを指定すると，外部エンティティ参照を展開しないようにできます。このとき，アクセスモードで"N"（外部エンティティ参照を展開しないモード）を指定していなくても，外部エンティティ参照を展開しません。

外部エンティティ参照を展開しないとき，該当する個所にはテキストデータがないものとして解析します。

（例）外部エンティティ参照があるXMLドキュメント

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
 <!ENTITY var SYSTEM URI>
]>
<root>
 <tag1>&var;</tag1>
</root>

上記の外部エンティティ参照を展開しないように指定して読み込んだ結果は，次を読み込んだ場合と同じになります。

<?xml version="1.0" encoding="Shift_JIS"?>
<root>
 <tag1></tag1>
</root>

注意事項

XML連携機能の既定の動作では，すべての外部エンティティ参照を展開します（互換性のため）。システム全体で外部エンティティ参照を展開しない設定にするためには，環境変数CBLXML_PARSE_NOXXEにYESを指定してください。

XMLドキュメントを更新モードでオープンするとき，外部エンティティ参照を展開しないように設定すると出力結果にも展開されません。更新モードを使用するXMLドキュメントには，外部エンティティ参照を使用しないことをお勧めします。

外部エンティティ参照を展開しないモードで入力するとき，入力XMLドキュメントの妥当性チェック機能は無効となります。妥当性チェック機能については，「付録E.4　使用できる解析モードによる動作の違い」を参照してください。

内部エンティティ参照を展開しないように指定する機能はありません。

(a)　アクセスルーチンのアクセスモードで無効にする

CBLXML-OP-Interfaceアクセスルーチンで外部エンティティ参照の展開を無効にする例を次に示します。この例は，アクセスモードで「N」を指定した場合です。

CBLXML-OP-Interfaceアクセスルーチンについては「4.2.2　CBLXML-OP-Interfaceアクセスルーチン」を，CBL XML-OB-Interfaceアクセスルーチンについては「4.2.3　CBLXML-OB-Interfaceアクセスルーチン」を参照してください。

      *> 外部エンティティ参照の展開を無効にして
      *> XMLドキュメントを入力する設定
           MOVE 'RN' TO XML-MODE.

      *> XMLドキュメントを開く
           CALL 'CBLXML-OP-Interface'
                USING XML-FILE-NAME
                      XML-FILE-NAME-LENGTH
                      XML-MODE
                      XML-POINTER
                RETURNING CBLXML-RETURN-CODE.

(b)　環境変数CBLXML_PARSE_NOXXEで展開しないように設定する

環境変数CBLXML_PARSE_NOXXEで外部エンティティ参照を展開しないように設定します。

形式

CBLXML_PARSE_NOXXE=YES

規則

環境変数を省略，または'YES'以外を指定したときは，XMLドキュメントを開くアクセスルーチン（CBLXML-OP-Interface，CBLXML-OB-Interface）に指定したアクセスモードでXMLドキュメントを入力します。

(2)　エンティティ参照の参照回数を制限する

CBLXML-SET-ENTITYLIMITサービスルーチンを呼び出すか，または環境変数CBLXML_ENTITYLIMITに値を指定して，入力時のエンティティ参照回数の制限値を指定します。再帰的なエンティティ参照などで参照回数が膨大になったときのメモリ不足を抑止できます。使用できるメモリ量に合わせて，有効な制限値を指定してください。XMLドキュメントを入力する場合のメモリ所要量については，「7.4　実行時のメモリ所要量」を参照してください。

エンティティ参照回数が指定した値を超えた場合，CBLXML-OP-InterfaceまたはCBLXML-OB-Interfaceアクセスルーチンのステータスとして110（CBLXML-XML-PARSE-FAIL）が返されます。

エンティティ参照回数の数え方

XML連携機能では，入力中に検出した内部エンティティおよび外部エンティティの個数をエンティティ参照回数としてカウントします。定義済み実体参照や文字参照はカウントしません。

外部エンティティ参照を展開しない場合でも，外部エンティティ参照自身は検出したエンティティとしてカウントされます。また，その外部エンティティの参照先に含まれるエンティティは解析対象にならないため，カウントされません。

カウントの例を次に示します。

（XMLドキュメントの例）

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root SYSTEM "sample.dtd" [
<!ENTITY xxe10 SYSTEM "xxes/xxe10.ent">
<!ENTITY var1 "12345">
<!ENTITY var2 "67890">
<!ENTITY varX "XXXXX&var1;">
]>
<root>
 &xxe10;
 <tag1>&var1;&var2;</tag1>
</root>

（XMLドキュメントで参照する外部エンティティxxes/xxe10.entの例）

<tag1>&varX;</tag1>

説明

環境変数CBLXML_PARSE_NOXXEにYESを指定したときなど，入力時の外部エンティティ参照の展開を無効にした場合，入力するXMLドキュメントの「&xxe10;」は検出したエンティティとしてカウントされますが，"xxes/xxe10.ent"に含まれる「&varX;」は解析されないため，カウントされません。

参照回数は，入力したXMLドキュメントの「&var1;&var2;」を加えて3になります。

外部エンティティ参照を展開する場合，「&varX;」は「&var1;」を展開するので，"xxes/xxe10.ent"の内容の参照回数は2になります。このとき，「&xxe10;」も検出したエンティティとしてカウントされるため，参照回数は全体で5となります。

注意事項

XML連携機能の既定の動作では，エンティティ参照回数を制限しません（互換性のため）。システム全体でエンティティ参照回数を制限するためには，環境変数CBLXML_ENTITYLIMITに制限値を指定してください。

入力するXMLドキュメントでエンティティ参照を使用する場合，十分に妥当な値を検証して設定してください。制限値に0を指定した場合，1件でもエンティティ参照が見つかったときは解析を中断します。

(a)　CBLXML-SET-ENTITYLIMITサービスルーチンで制限値を指定する

エンティティ参照回数を512回までに制限して入力する例を次に示します。

        01 XML-POINTER USAGE POINTER VALUE NULL.
        01 XML-ENTITY-LIMIT PIC 9(9) USAGE COMP VALUE 512.

      *> 空のXMLドキュメントのポインタを作成する
           CALL 'CBLXML-CREATE-XML-POINTER'
               USING XML-POINTER.
           IF RETURN-CODE NOT = 0 THEN
               EXIT PROGRAM
           END-IF.

      *> エンティティ参照回数の制限値を指定する
           CALL 'CBLXML-SET-ENTITYLIMIT'
               USING XML-POINTER XML-ENTITY-LIMIT.

      *> XMLドキュメントを開く（READ）
           MOVE 'RE' TO XML-MODE.
           CALL 'CBLXML-OP-Interface'
                USING XML-FILE-NAME
                      XML-FILE-NAME-LENGTH
                      XML-MODE
                      XML-POINTER
                RETURNING CBLXML-RETURN-CODE.

注意事項

CBLXML-SET-ENTITYLIMITサービスルーチンの指定は，CBLXML-CREATE-XML-POINTERサービスルーチンで割り当てたXMLドキュメントのポインタごとに有効です。CBLXML-OP-InterfaceまたはCBLXML-OB-InterfaceアクセスルーチンでXMLドキュメントを入力する前に呼び出してください。CBLXML-SET-ENTITYLIMITサービスルーチンについては，「9.3.6　エンティティ参照回数を制限する機能」を参照してください。

CBLXML-SET-ENTITYLIMITサービスルーチンの指定は，環境変数CBLXML_ENTITYLIMITの指定よりも優先されます。

(b)　環境変数CBLXML_ENTITYLIMITで制限値を指定する

XMLドキュメントの入力時に，エンティティ参照回数を制限します。

形式

CBLXML_ENTITYLIMIT=参照回数

規則

参照回数に指定できる値は，0〜2,147,483,647の範囲です。

環境変数を省略，または参照回数に範囲外の値を指定したとき，エンティティの参照回数は制限されません。

付録F　XML連携機能サービスルーチンファイル（Windowsの場合）

XML連携機能では，次のサービスルーチンファイルを提供しています。

表F‒1　XML連携機能で提供するサービスルーチンファイル

ファイル名

登録内容

COBOL2002XML連携機能サービスルーチン.svw

COBOL2002　XML連携機能のサービスルーチンファイル名

サービスルーチンファイルは，次のフォルダに格納されます。

COBOL2002のインストールフォルダ¥template

COBOLエディタのカスタマイズでこのサービスルーチンファイルを登録すると，XML連携機能で提供しているサービスルーチンのキーワードを入力したとき，色分け表示や補完ができます。登録方法の詳細，色分け表示，およびキーワード補完については，マニュアル「COBOL2002　操作ガイド」を参照してください。

付録G　XML連携機能のXMLドキュメントの文字エンコーディングと文字コード

XML連携機能では，複数のXMLドキュメントの文字エンコーディングと複数の文字コードをサポートします。cblxmlコマンドとXMLアクセス用実行時ライブラリが使用するXMLドキュメントの文字エンコーディングとファイルの文字コードの関連を図G-1，図G-2に示します。

図G‒1　cblxmlコマンドが入出力するファイルとメッセージ

注意事項

（UNIXの場合）cblxmlコマンドによるXMLアクセスルーチン（COBOLソース）を生成する場合と，XML連携機能を使用した実行可能ファイルを実行する場合の環境変数LANGの設定値は同じでなければなりません。もし，環境変数LANGの設定値が異なる場合は動作は保証しません。

（AIXの場合）Unicode機能を使用する場合，環境変数LANGはシフトJISを設定しなければなりません。シフトJIS以外を設定した場合はエラーが出力されます。

（Linuxの場合）環境変数LANGはUTF-8を設定しなければなりません。UTF-8以外を設定した場合はエラーが出力されます。

図G‒2　XMLライブラリが入出力するファイルとメッセージ

注意事項

（Windowsの場合）入力したXMLドキュメントの内容をシフトJISに変更してCOBOLのデータ項目に格納します。

（UNIXの場合）入力したXMLドキュメントの内容を環境変数LANGの設定値に従って，文字コードを変更してCOBOLのデータ項目に格納します。

Unicode機能を使用する場合，英数字項目をUTF-8，日本語項目をUTF-16に変更してCOBOLのデータ項目に格納します。

（Windowsの場合）COBOLデータ項目に格納された値をシフトJISとみなし，XMLドキュメントの文字エンコーディングに合わせて変更して出力します。

（UNIXの場合）COBOLデータ項目に格納された値を環境変数LANGの設定値に従った文字コードとみなし，XMLドキュメントの文字エンコーディングに合わせて変更して出力します。

Unicode機能を使用する場合，英数字項目をUTF-8，日本語項目をUTF-16とみなし，XMLドキュメントの文字エンコーディングに合わせて変更して出力します。

付録G.1　XMLドキュメントの文字エンコーディング

cblxmlコマンドが入力できるDTD，DDFファイルや，XMLアクセスルーチンが入力，出力，更新するXMLドキュメントには次に示す文字エンコーディングが使用できます。

表G‒1　入力するXMLドキュメントに使用できる文字エンコーディング

項番

文字エンコーディング

1

Shift_JIS

2

Windows-31J※

3

EUC-JP

4

UTF-8

5

UTF-16

（エンディアンを自動判定し入力します）

注※

XMLアクセスルーチンが入力するXMLドキュメントでだけ使用できます。DTDやDDFファイルでは使用できません。

表G‒2　出力，更新するXMLドキュメントに使用できる文字エンコーディング

項番

文字エンコーディング

1

Shift_JIS

2

Windows-31J

3

EUC-JP

4

UTF-8

5

UTF-16

（出力時ビッグエンディアン，リトルエンディアンの指定ができます）

注意事項

XMLドキュメントに指定した文字エンコーディングと文字コードは同一でなければなりません。例えば，文字エンコーディングにShift_JISを指定した場合，文字コードはシフトJISでなければなりません。

UTF-16のXMLドキュメントを出力した場合，XMLドキュメントの先頭にはBOM(Byte Order Mark)を出力します。UTF-8のXMLドキュメントを出力した場合，XMLドキュメントの先頭にはBOMを出力しません。また，BOMの有無を指定することもできません。

(1)　出力するXMLドキュメントの文字エンコーディングの設定

XMLアクセスルーチンを使用して出力するXMLドキュメントの文字エンコーディングは，CBLXML-SET-ENCODINGサービスルーチン，cblxmlコマンドの-outencodingオプションのどちらかを用いて指定します。優先順位は次の1.，2.の順になります。

CBLXML-SET-ENCODINGサービスルーチン

cblxmlコマンドの-outencodingオプション

1.，2.のどちらも指定がない場合は，文字エンコーディングに次の値が設定されます。

UNIXの場合：環境変数LANGの値

環境変数LANGの値が文字エンコーディングに設定されます。環境変数LANGの設定がない場合は動作は保証しません。

Windowsの場合：Shift_JIS

文字エンコーディングにShift_JISが設定されます。

表G‒3　出力するXMLドキュメントの文字エンコーディングの設定方法

CBLXML-SET-ENCODINGサービスルーチンの指定

cblxmlコマンドの-outencodingオプションの値

環境変数LANGの値（コード系）

出力するXMLドキュメントの文字エンコーディング（encoding属性の値）

CBLXML-SJIS-ENCODINGフラグ

−

−

Shift_JIS

CBLXML-WIN31J-ENCODINGフラグ

−

−

Windows-31J

CBLXML-EUC-ENCODINGフラグ

−

−

EUC-JP

CBLXML-UTF8-ENCODINGフラグ

−

−

UTF-8

CBLXML-UTF16-ENCODINGフラグ

−

−

Windows，Linuxの場合：UTF-16，リトルエンディアン

AIXの場合：UTF-16，ビッグエンディアン

CBLXML-UTF16BE-ENCODINGフラグ

−

−

UTF-16，ビッグエンディアン

CBLXML-UTF16LE-ENCODINGフラグ

−

−

UTF-16，リトルエンディアン

CBLXML-SET-ENCODING

サービスルーチンを呼び出さない

sjis

−

Shift_JIS

win31j

−

Windows-31J

euc

−

EUC-JP

utf8

−

UTF-8

utf16

−

Windows，Linuxの場合：UTF-16，リトルエンディアン

AIXの場合：UTF-16，ビッグエンディアン

utf16be

−

UTF-16，ビッグエンディアン

utf16le

−

UTF-16，リトルエンディアン

指定なし

シフトJIS

Shift_JIS

日本語EUC

EUC-JP

UTF-8（Linuxの場合）

UTF-8

シフトJIS，日本語EUC，UTF-8以外

Windows，AIXの場合：Shift_JIS

Linuxの場合：EUC-JP

（凡例）

−：指定を無視します。

CBLXML-SET-ENCODINGサービスルーチンについては「9.3.5　文字エンコーディングが指定されたXMLドキュメント」を，cblxmlコマンドの-outencodingオプションについては「4.1.1(2)　cblxmlコマンドの実行」を参照してください。

付録G.2　文字コード

(1)　cblxmlコマンド

（UNIXの場合）

cblxmlコマンドは環境変数LANGに指定された値に従った文字コードのXMLアクセスルーチンとXMLアクセス用データ定義のCOBOLソースを生成します。また，入力するカタログファイルは環境変数LANGに対応する文字コードで記述しなければなりません。

cblxmlコマンドが対応する環境変数LANGの値を表G-4に示します。

表G‒4　cblxmlコマンドが対応する環境変数LANGの値

OS

環境変数LANGの値

対応する文字コード

AIX

Ja_JP

シフトJIS

ja_JP

日本語EUC

Linux

ja_JP.UTF-8

COBOLソースの場合：シフトJIS

カタログファイルの場合：UTF-8

（Windowsの場合）

cblxmlコマンドは，シフトJISの文字コードのXMLアクセスルーチンとXMLアクセス用データ定義のCOBOLソースを作成します。また，入力するカタログファイルの文字コードはシフトJISです。

(2)　XMLアクセス用実行時ライブラリ

（UNIXの場合）

XML連携機能を使用するプログラムは，環境変数LANGに設定した文字コードに従って動作します。そのため，CBLXML-READ-CATALOGサービスルーチンで入力するカタログファイルは環境変数LANGに従った文字コードでなければなりません。表G-5に対応する環境変数LANGの値を示します。

表G‒5　XMLアクセス用実行時ライブラリが対応する環境変数LANGの値

OS

環境変数LANGの値

対応する文字コード

AIX

Ja_JP

シフトJIS

ja_JP

日本語EUC

Linux

ja_JP.UTF-8

UTF-8

（Windowsの場合）

XML連携機能を使用するプログラムは，文字コードがシフトJISとして動作します。そのため，CBLXML-READ-CATALOGサービスルーチンで入力するカタログファイルの文字コードはシフトJISでなければなりません。

ただし，Unicode機能を使用した場合，COBOLのデータ項目に入出力する文字コードはUnicodeになります。

付録H　Unicode機能

COBOL2002のUnicode機能を次に示します。

コンパイル時に，シフトJISで記述されたCOBOLソースから，コード系がUnicodeのオブジェクトを生成します。その際，英数字定数をUTF-8の文字コードへ変換し，日本語定数をUTF-16に変換します。

実行時に，用途がDISPLAYの項目の文字コードをUTF-8として扱い，用途がNATIONALの項目の文字コードをUTF-16として扱います。

日本語定数や用途がNATIONALの項目のバイトオーダを設定できます。

XML連携機能では，COBOL2002のUnicode機能に対応したXML対応COBOLプログラムが作成できます。

付録H.1　COBOL2002のUnicode機能に対応したXML連携機能を使用するCOBOLプログラムの作成

COBOL2002のUnicode機能に対応したXML連携機能を使用する場合，Unicode機能に対応したデータ定義ファイル(DDF)を作成し，cblxmlコマンドでUnicode機能に対応したXMLアクセスルーチンを生成する必要があります。

また，生成したXMLアクセスルーチン(COBOLソース)やXMLアクセス用データ定義(登録集原文)，それを呼び出すユーザプログラムのCOBOLソースは，コンパイル時に-UniObjGenオプションを指定して，Unicode機能に対応したコンパイルを行う必要があります。

次にUnicode機能に対応したプログラムの作成手順を示します。

(1)　Unicode機能に対応したCOBOLソースの作成

Unicode機能に対応したCOBOLソースの作成については，マニュアル「COBOL2002　使用の手引　手引編」または「COBOL2002　ユーザーズガイド」を参照してください。

(2)　Unicode機能に対応したデータ定義ファイル(DDF)の作成

COBOL2002のUnicode機能を使用する場合，XMLドキュメントから入力する値や，DDFでItem要素のemptyValue属性などに指定する値が，Unicodeに変換されることを考慮した設計が必要です。

例えば，COBOLの英数字項目(UTF-8)に，文字エンコーディングがShift_JIS(シフトJIS)のXMLドキュメントから値'日立'を入力する場合，表H-1に示すように文字コードによって1文字を構成するバイト数が異なるため，DDFに指定するsize属性のけた数は，UTF-8の文字列として格納できるけた数を設定する必要があります。この例ではUTF-8に変換されることを考慮し，DDFでのsize属性には6を指定する必要があります。

表H‒1　文字コードによる長さの違いの例

文字

日

立

シフトJIS

0x93FA

0x97A7

UTF-8

0xE697A5

0xE7AB8B

次の仕様に従ってデータ定義ファイル(DDF)を作成してください。

Item要素，AttrItem要素に指定するsize属性には，XMLドキュメントから入力した値をUnicode(英数字項目の場合UTF-8，日本語項目の場合UTF-16)に変換した文字列を格納するのに十分な大きさを指定してください。

Item要素，AttrItem要素に指定した次に示す属性の値は，Unicodeに変換した文字列になります。そのため，size属性に指定するけた数は，おのおのの値をUnicodeに変換した文字列の長さが収まるけた数を指定してください。

emptyValue属性

emptyContentValue属性

invalidCharValue属性

overflowValue属性

Interface要素，BaseElement要素のcobName属性(省略時はelemName属性)に指定する値に，UTF-8に変換すると多バイトになる文字は指定できません。

(3)　Unicode機能に対応したXMLアクセスルーチンやXMLアクセス用データ定義の生成

Unicode機能に対応したXMLアクセスルーチンやXMLアクセス用データ定義を生成するため，cblxmlコマンドに-unisrcオプションを指定してください。-unisrcオプションを指定した場合，cblxmlコマンドの-oオプションにUnicodeに変換すると多バイトになる文字は指定できません。

(4)　Unicode機能に対応したCOBOLソースのコンパイル

-unisrcオプションを指定したUnicode機能に対応したXMLアクセスルーチンやXMLアクセス用データ定義，Unicode機能に対応したユーザプログラムのCOBOLソースをコンパイルする場合，ccbl2002コマンドに-UniObjGenオプションを指定します。また，日本語項目の定数のバイトオーダを指定したい場合は-UniEndianオプションを指定します。

(5)　オブジェクトのリンク

-UniObjGenオプションを指定して，生成されたオブジェクトをリンクします。

図H-1にXML連携機能を使用するUnicode機能に対応したCOBOLプログラムの作成の概略を示します。

図H‒1　Unicode機能に対応したXML連携機能を使用するCOBOLプログラムの作成概略

付録H.2　COBOL2002のUnicode機能に対応したXML連携機能を使用するCOBOLプログラムの実行

(1)　Unicode機能の実行時環境変数

Unicode機能のCOBOLプログラムを実行する場合，COBOL2002の実行時環境変数CBLLANG=UNICODEを指定する必要があります。また，日本語項目のバイトオーダを指定したい場合，COBOL2002の実行時環境変数CBLUNIENDIANを指定してください。詳細についてはマニュアル「COBOL2002　使用の手引　手引編」または「COBOL2002　ユーザーズガイド」を参照してください。

(2)　XML連携機能の動作

XML連携機能のUnicode機能に対応したXMLアクセスルーチンは，英数字項目の文字コードをUTF-8，日本語項目の文字コードをUTF-16(UCS-2範囲)として扱います。日本語項目のバイトオーダはCOBOL2002の実行時環境変数CBLUNIENDIANの指定値に従います。また，XML連携機能が提供するサービスルーチン(CBLXML-GET-ERROR, CBLXML-READ-CATALOG-FILE, CBLXML-GET-NEXT-BE)は，Unicodeへ変換した結果を返します。

図H-2にUnicode機能に対応したXML連携機能を使用するCOBOLプログラムの文字コードを示します。

図H‒2　Unicode機能に対応したXML連携機能を使用するCOBOLプログラムでの文字コード

注※

バイトオーダはCOBOL2002の実行時環境変数CBLUNIENDIANの指定に従います。

注意事項

cblxmlコマンドで-unisrcオプションを指定したUnicode機能に対応したXMLアクセスルーチンの実行時に，COBOL2002の実行時環境変数CBLLANGの値がUNICODE以外の場合は，CBLXML-OP-InterfaceとCBLXML-OB-Interfaceアクセスルーチンで実行環境が不正であるステータス122を返します。また，Unicode機能に対応していないXMLアクセスルーチンの実行時に，COBOL2002の実行時環境変数CBLLANGの値がUNICODEの場合もCBLXML-OP-InterfaceとCBLXML-OB-Interfaceアクセスルーチンで実行環境が不正であるステータス122を返します。

（Windows，AIXの場合）Unicode機能を使用する場合，カタログファイルの文字コードはシフトJISでなければなりません。

（Linuxの場合）Unicode機能を使用する場合，カタログファイルの文字コードはUTF-8でなければなりません。

（UNIXの場合）CBLXML-OP-InterfaceとCBLXML-OB-Interfaceアクセスルーチンの実行時に，cblxmlコマンドの-unisrcオプションの指定の有無と環境変数LANGの設定値の整合性チェックを行い，整合性に矛盾がある場合はステータス123を返します。

付録H.3　Unicode機能に対応したXML連携機能の入出力ファイルの文字コード

Unicode機能に対応したXML連携機能の入出力ファイルの文字コードを次に示します。

分類

入出力

入出力ファイル

文字コード

cblxmlコマンド

入力

DTDファイル

encoding属性に依存

DDFファイル

encoding属性に依存

カタログファイル

Windows，AIXの場合：シフトJIS

Linuxの場合：UTF-8

cblxmlコマンドのコマンドラインの引数

Windows，AIXの場合：シフトJIS

Linuxの場合：UTF-8

出力

XMLアクセスルーチン（COBOLソース）

シフトJIS

XMLアクセス用データ定義(登録集原文)

シフトJIS

エラーメッセージ

Windows，AIXの場合：シフトJIS

Linuxの場合：UTF-8

実行時

入力

XMLドキュメント

encoding属性に依存

カタログファイル

Windows，AIXの場合：シフトJIS

Linuxの場合：UTF-8

出力

XMLドキュメント

encoding属性に依存

付録I　各バージョンの変更内容

各バージョンの変更内容を示します。

変更内容（3021-3-608-40）　COBOL2002 Net Developer 04-70，COBOL2002 Net Server Runtime 04-70，COBOL2002 Net Client Runtime 04-70，COBOL2002 Net Server Suite 04-70，COBOL2002 Net Client Suite 04-70，COBOL2002 Net Developer(64) 04-70，COBOL2002 Net Server Runtime(64) 04-70，COBOL2002 Net Server Suite(64) 04-70，COBOL2002 Developer Professional 04-70，COBOL2002 Developer Professional(64) 04-70

追加・変更内容

Windows COBOL2002で，XML連携機能が生成するCOBOL原始プログラムをコンパイルする場合の制限事項に，次のコンパイラオプションを追加した。

-VOSCBL,AssignDataToDevice

-VOSCBL,EvaluateWhenOther

変更内容（3021-3-608-30）　COBOL2002 Net Server Suite 04-41，COBOL2002 Net Server Runtime 04-41，COBOL2002 Net Server Suite(64) 04-41，COBOL2002 Net Server Runtime(64) 04-41

追加・変更内容

XML連携機能が生成するCOBOL原始プログラムをコンパイルする場合の制限事項に，-VOSCBL,RedefinesDataオプションを追加した。

変更内容（3021-3-608-20）　COBOL2002 Net Developer 04-10，COBOL2002 Net Server Runtime 04-10，COBOL2002 Net Client Runtime 04-10，COBOL2002 Net Server Suite 04-10，COBOL2002 Net Client Suite 04-10，COBOL2002 Net Developer(64) 04-10，COBOL2002 Net Server Runtime(64) 04-10，COBOL2002 Net Server Suite(64) 04-10，COBOL2002 Developer Professional 04-10，COBOL2002 Developer Professional(64) 04-10

追加・変更内容

次の製品の適用OSに「Windows Server 2019」を追加した。

P-2636-2344 COBOL2002 Net Developer

P-2436-5344 COBOL2002 Net Server Runtime

P-2436-6344 COBOL2002 Net Server Suite

P-2936-2344 COBOL2002 Net Developer(64)

P-2936-5344 COBOL2002 Net Server Runtime(64)

P-2936-6344 COBOL2002 Net Server Suite(64)

P-2636-7344 COBOL2002 Developer Professional

P-2936-7344 COBOL2002 Developer Professional(64)

Windows COBOL2002で，XMLドキュメントの文字エンコーディングとしてWindows-31Jをサポートした。

これに伴い，開発マネージャのプロジェクト設定ダイアログボックスで選択するXMLドキュメントの文字エンコーディングに，Windows-31Jを追加した。

XML連携機能が生成するCOBOL原始プログラムをコンパイルする場合の制限事項に，-VOSCBL,DataCommオプションを追加した。

変更内容（3021-3-608-10）　COBOL2002 Net Server Suite 04-00，COBOL2002 Net Server Runtime 04-00，COBOL2002 Net Server Suite(64) 04-00，COBOL2002 Net Server Runtime(64) 04-00

追加・変更内容

次に示す適用OSがサポート対象外となった。

AIX V6.1

Red Hat Enterprise Linux 5 (AMD/Intel 64)

Red Hat Enterprise Linux 5 Advanced Platform (AMD/Intel 64)

Red Hat Enterprise Linux Server 6 (64-bit x86_64)

XMLドキュメントの文字エンコーディングとしてWindows-31Jをサポートした。

付録J　このマニュアルの参考情報

このマニュアルを読むに当たっての参考情報を示します。

付録J.1　関連マニュアル

このマニュアルは次のマニュアルと関連があります。必要に応じてお読みください。

COBOL2002　ユーザーズガイド　（3021-3-600）

COBOL2002　操作ガイド　（3021-3-601）

COBOL2002　使用の手引　手引編　（3021-3-602）

COBOL2002　使用の手引　操作編　（3021-3-603）

COBOL2002　言語　標準仕様編　（3021-3-604）

COBOL2002　言語　拡張仕様編　（3021-3-605）

COBOL2002　Javaプログラム呼び出し機能ガイド　（3021-3-607）

COBOL2002　メッセージ　（3021-3-609）

付録J.2　このマニュアルでの表記

このマニュアルでは，マイクロソフト製品の名称を次のように表記しています。

マニュアルでの表記

製品名

Windows

Windows 7

Windows 7(x86)

Microsoft Windows 7 Professional 日本語版(32ビット版)

Microsoft Windows 7 Enterprise 日本語版(32ビット版)

Microsoft Windows 7 Ultimate 日本語版(32ビット版)

Windows 7(x64)

Microsoft Windows 7 Professional 日本語版(64ビット版)

Microsoft Windows 7 Enterprise 日本語版(64ビット版)

Microsoft Windows 7 Ultimate 日本語版(64ビット版)

Windows 8.1

Windows 8.1(x86)

Windows 8.1 Pro 日本語版(32ビット版)

Windows 8.1 Enterprise 日本語版(32ビット版)

Windows 8.1(x64)

Windows 8.1 Pro 日本語版(64ビット版)

Windows 8.1 Enterprise 日本語版(64ビット版)

Windows 10

Windows 10(x86)

Windows 10 Pro 日本語版(32ビット版)

Windows 10 Enterprise 日本語版(32ビット版)

Windows 10(x64)

Windows 10 Pro 日本語版(64ビット版)

Windows 10 Enterprise 日本語版(64ビット版)

Windows 11

Windows 11 Pro 日本語版

Windows 11 Enterprise 日本語版

Windows Server 2008 R2

Microsoft Windows Server 2008 R2 Standard 日本語版

Microsoft Windows Server 2008 R2 Enterprise 日本語版

Microsoft Windows Server 2008 R2 Datacenter 日本語版

Windows Server 2012

Microsoft Windows Server 2012 Standard 日本語版

Microsoft Windows Server 2012 Datacenter 日本語版

Windows Server 2012 R2

Microsoft Windows Server 2012 R2 Standard 日本語版

Microsoft Windows Server 2012 R2 Datacenter 日本語版

Windows Server 2016

Microsoft Windows Server 2016 Standard 日本語版

Microsoft Windows Server 2016 Datacenter 日本語版

Windows Server 2019

Windows Server 2019 Standard 日本語版

Windows Server 2019 Datacenter 日本語版

Windows Server 2022

Windows Server 2022 Standard 日本語版

Windows Server 2022 Datacenter 日本語版

このマニュアルは，製品種別によって相違点があります。本文中での製品種別ごとの表記を，次に示します。

マニュアルでの表記

該当する製品の形名

Windows

Windows(x86)

P-2636-2344

P-2436-5344

P-2636-3344

P-2436-6344

P-2636-4344

P-2636-7344

Windows(x64)

P-2936-2344

P-2936-5344

P-2936-6344

P-2936-7344

UNIX

AIX

AIX(32)

P-1M36-1141

P-1M36-2141

AIX(64)

P-1M36-1241

P-1M36-2241

Linux

Linux(x86)

−※

Linux(x64)

P-9W36-1241

P-9W36-2241

注※

該当する製品の形名の詳細は，「リリースノート」でご確認ください。

Windows(x64) COBOL2002，AIX(64) COBOL2002，Linux(x64) COBOL2002で機能差がない場合，64bit版COBOL2002と表記しています。

Windows(x86) COBOL2002，AIX(32) COBOL2002，Linux(x86) COBOL2002で機能差がない場合，32bit版COBOL2002と表記しています。

また，このマニュアルでは各製品を次のように表記しています。

マニュアルでの表記

製品名

UNIX

AIX

AIX V7.1

AIX V7.2

AIX 7.3

Linux

Linux Server 7 (64-bit x86_64)

Red Hat Enterprise Linux Server 7 (64-bit x86_64)

Linux Server 8 (64-bit x86_64)

Red Hat Enterprise Linux Server 8 (64-bit x86_64)

Linux Server 9 (64-bit x86_64)

Red Hat Enterprise Linux Server 9 (64-bit x86_64)

日立COBOL2002のことを日立COBOL2002，または単にCOBOL2002と表記しています。また，使用できる機能が異なるため，プラットフォームを明確にする必要がある場合は，「（UNIXの場合）」または「UNIX COBOL2002」，「（Windowsの場合）」または「Windows COBOL2002」のように表記しています。

コンパイラオプションの説明では，次の表記を使用します。

「XXXオプション」，または単に「XXX」とオプション名が表記されている場合

XXXオプションについて，サブオプションの組み合わせを含む，すべての場合を意味します。

「XXX,YYYオプション」，または単に「XXX,YYY」とサブオプションを含めたオプション名が表記されている場合

XXX,YYYオプションだけの場合を意味します。

「XXXコンパイラオプション」と表記されている場合

リンカオプションなど，ほかのオプションと明確に区別する必要がある場合を意味します。

（例1）

「-Compileオプション」または「-Compile」と記載している場合，-Compileオプションのサブオプションの組み合わせすべて（-Compile,CheckOnly／-Compile,NoLink）を意味します。

（例2）

「-Compile,CheckOnlyオプション」または「-Compile,CheckOnly」と記載している場合，-Compile,CheckOnlyだけを意味します。

付録J.3　KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

付録K　用語解説

（英字）

BOM（バイトオーダマーク）

ファイルの先頭に付加された，Unicodeの表現形式を表す情報。COBOL2002では，テキスト編成ファイルに対してこの情報を付加します。本文中では，Unicodeシグニチャと表記します。

DDF（Data Definition File）

XMLドキュメントのDTDで定義された要素のうち，COBOLプログラムからアクセスしたい要素とCOBOLのデータ項目との対応づけを記述するファイルです。

DDFは，データ定義ファイルともいいます。

DDL（Data Definition Language）

DDFに記述するマークアップ言語です。XML要素に対応するCOBOLのデータ項目の構造，データ名，データ型などを定義できます。

DDLは，データ定義言語ともいいます。

DOCTYPE宣言

DTDに記載する，文書の型を宣言する記述のことです。DOCTYPE宣言は，「<!DOCTYPE 〜」の形式で宣言されます。

DTD（Document Type Definition）

XMLドキュメントの構造を定義するものです。DTDを使うと，XMLドキュメントの構造の解析，検証などができます。XML連携機能では，DTDを基にCOBOLプログラムからアクセスするXML要素を指定します。

DTDは，文書型定義ともいいます。

IVS

漢字を表すUnicodeの直後にVariation Selectorと呼ばれるコードを付加し，漢字の「異体字」を表現する方法のことです。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目で使用します。

UCS-2（Universal multi-octet Character Set 2）

符号化文字集合の一つの形式です。1文字を2バイトで表現します。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目でサポートします。

UCS-4（Universal multi-octet Character Set 4）

符号化文字集合の一つの形式です。1文字を4バイトで表現します。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目でUCS-4の範囲をサポートします。

Unicode

1バイトでは表現できない文字セットを含めあらゆる文字セットをサポートした文字コード。代表的な符号化文字集合としてUCS-2，UCS-4があります。代表的なエンコーディングスキーマとしてUTF-8，UTF-16があります。

COBOL2002では，UCS-4の範囲（UCS-2の範囲を含む）をサポートします。

本文中では，符号化文字集合，およびエンコーディングスキーマを文字コードと表記します。

URI

Uniform Resource Identifierの略です。URLのようにWeb上のデータの位置を指定する方法と，Web上の特定のデータを固有の名前で指定する方法を持ち合わせた規格です。

URL

Uniform Resource Locatorの略です。Web上にある特定のデータの位置を指定する規格です。

UTF-16（16-bit UCS Transformation Format）

エンコーディングスキーマの一つの形式です。1つのコード単位を2バイトとし，1文字を1コード単位（2バイト），または2コード単位（4バイト）で表現します。UTF-16では2バイトのコード単位の1バイト目を先に書くビッグエンディアン形式（UTF-16BE）と1バイト目を後に書くリトルエンディアン形式（UTF-16LE）があります。

COBOL2002では，用途がNATIONALの項目でUCS-4の範囲（UCS-2の範囲を含む）をサポートします。

UTF-8（8-bit UCS Transformation Format）

エンコーディングスキーマの一つの形式です。ASCII文字を1バイト，日本語文字を3〜8バイト，半角かたかなを3バイトで表現します。

COBOL2002では，用途がDISPLAYの項目で使用します。

XML（eXtensible Markup Language）

World Wide Web Consortium（W3C）によって標準化が進められている，文章の構造を定義するための言語です。XMLでは，テキストファイル中の各データをタグ（<>）で囲むことによって，データの構造を定義します。

XMLアクセス用データ定義

XMLアクセスルーチンの戻り値や，アクセスするXML要素に対応したデータ項目を登録集原文として提供するものです。XMLアクセス用データ定義は，XMLドキュメントのDTDとユーザが作成したDDFを基に，cblxmlコマンドを使って生成します。

XMLアクセスルーチン

COBOLプログラムからXMLドキュメントにアクセスするときに呼び出す副プログラムです。XMLアクセスルーチンは，XMLドキュメントのDTDとユーザが作成したDDFを基に，cblxmlコマンドを使って生成します。

XML要素

XMLドキュメントで，XMLタグ，タグに付随する属性，およびタグに囲まれたデータのすべてのことです。

（ア行）

エンティティ

XML文書中で使用される画像データやPDFファイルなどのファイルや，置換する文字列などのデータを保持する実体です。

（カ行）

解析モード

XMLパーサがXML文書を解析するときの動作方式です。解析モードには，検証モードと非検証モードがあります。

公開識別子

外部DTDや外部実体を識別するための文字列です。XML連携機能では，公開識別子と，外部DTDや外部実体を含むファイルの対応を，カタログファイルで定義することで，公開識別子を用いて外部DTDや外部実体を参照するXMLドキュメントを処理できます。

（サ行）

サロゲート

UTF-16の拡張で，2つのコード単位（4バイト）で1文字を表す機能です。この2つのコード単位の組み合わせのことをサロゲートペアと呼びます。

COBOL2002では，用途がNATIONALの項目で使用します。

システム識別子

システム識別子とは，解析中のエンティティ（XML文書）を指す識別子のことです。

属性

XML要素のうち，タグに情報を追加するための修飾部分のことです。

（タ行）

タグ

XML要素のうち，データを意味づけするために囲んだ「<…>」部分のことです。

データ

XML要素のうち，XMLタグに囲まれた内容のことです。

登録集原文

COBOLプログラム中でよく利用される標準化した手続き，ファイル記述，レコード記述，または完全な一つのプログラムなどを，コンパイルするプログラムとは別のファイルに登録したものです。XML連携機能では，XMLアクセス用データ定義が登録集原文として生成されます。

（ハ行）

パーサ

パーサとは，XML文書を解析するプログラムのことです。

バイトオーダ

2バイト以上のデータの記録を行う順序のことです。例えば，0x1234のデータを0x1234のように最上位のバイトから順番に記録する方式をビッグエンディアン，0x3412のように最下位のバイトから順番に記録する方式をリトルエンディアンと呼びます。2バイトのUTF-16は，バイトオーダを意識します。

（マ行）

見た目幅

Unicode機能の組み込み関数で使用します，文字の見た目の幅です。半角文字の幅は1，全角文字の幅は2として扱います。

Unicode機能の組み込み関数で，文字を見た目幅で数える場合に使用します。

索引

記号

.a[1]

.cbl[1]、[2]、[3]、[4]

.cxc[1]

.cxd[1]

.dll[1]

.dtd[1]

.exe[1]

.lib[1]

.o[1]

.obj[1]

.sl[1]

.so[1]

.xml[1]、[2]、[3]

＋繰り返しを持つ選択要素[1]

-bigendianbinオプション[1]

-bigendianfloatオプション[1]

-genオプション[1]

-outencodingオプション[1]

数字

64bit版COBOL2002　XML連携機能の制限事項[1]

A

accessInfo属性[1]、[2]

alphanumeric[1]

Array要素[1]、[2]

AttrItem要素[1]

attrName属性[1]

B

BaseElement要素[1]、[2]

BaseElement要素に対応するXMLの要素名[1]

BaseElement要素の使い方[1]

binary[1]

BOM[1]

C

CBLLIB[1]、[2]

CBLXML_CHKUFLOW[1]

CBLXML_ENTITYLIMIT[1]

CBLXML_PARSE_NOXXE[1]

cblxmlコマンド[1]、[2]

cblxmlコマンドの格納パス[1]、[2]、[3]

cblxmlコマンドの実行[1]

cblxmlコマンドの使用方法[1]

cblxmlコマンドのメッセージ[1]

CBLXML-CL-Interfaceアクセスルーチン[1]

CBLXML-CN-Interfaceアクセスルーチン[1]

CBLXML-CREATE-XML-POINTERサービスルーチン[1]

CBLXML-FREE-XML-POINTERサービスルーチン[1]

CBLXML-GET-ERRORサービスルーチン[1]

CBLXML-GET-NEXT-BEサービスルーチン[1]

CBLXML-OB-Interfaceアクセスルーチン[1]

CBLXML-OP-Interfaceアクセスルーチン[1]

CBLXML-RD-Interface-BaseElementアクセスルーチン[1]

CBLXML-READ-CATALOG-FILEサービスルーチン[1]

CBLXML-SET-ENCODINGサービスルーチン[1]

CBLXML-SET-ENTITYLIMITサービスルーチン[1]

CBLXML-WR-Interface-BaseElementアクセスルーチン[1]

ccbl2002コマンド[1]

ccbl2002コマンドの格納パス[1]

CM[1]

cobName属性[1]、[2]、[3]、[4]

COBOL85／COBOL2002共存環境での制限事項[1]

COBOLソースファイル[1]

COBOLデータ項目に対応づけるXML要素の名称[1]

COBOLデータ項目のデータ型[1]

COBOLデータ項目の名称[1]、[2]

COBOLの集団項目名[1]

countVar属性[1]

D

DDF[1]、[2]

DDFファイル[1]

DDL[1]、[2]、[3]

DDLで使用する要素[1]

DDLの形式[1]

DLLファイル[1]

DOCTYPE宣言[1]、[2]

double[1]

DS[1]

DT[1]

DTD[1]、[2]

DTDファイル[1]

E

elemName属性[1]、[2]、[3]、[4]

emptyContentValue属性[1]

emptyValue属性[1]

EMPTYを指定した要素の入出力[1]

F

float[1]

fractionalDigits属性[1]

G

Group要素[1]、[2]

Group要素内のGroup要素の省略[1]

Group要素に対応するXMLの要素名[1]

Group要素の使い方[1]

I

interfaceName属性[1]

Interface要素[1]

invalidCharValue属性[1]

Item要素[1]、[2]

IVS[1]

L

LANG[1]、[2]

LD_LIBRARY_PATH[1]、[2]

leadingSeparate[1]

LIB[1]

LIBPATH[1]、[2]

M

MA[1]

max属性[1]

MC[1]、[2]

ML[1]

N

nameOfBaseVar属性[1]

nameOfCountVar属性[1]

nameOfFlagVar属性[1]、[2]

nameOfFlagVar属性の指定例[1]

nameOfGroupVar属性[1]

nameOfLengthVar属性[1]

nameOfLengthVar属性の指定例[1]

nameOfTotalVar属性[1]

nameOfTotalVar属性とnameOfCountVar属性の指定例[1]

national[1]

NLSPATH[1]、[2]

NS[1]

numeric[1]

O

OCCURS句[1]

overflowValue属性[1]

P

packed[1]

PATH〔UNIX〕[1]、[2]、[3]

PATH〔Windows〕[1]、[2]、[3]

S

signed[1]

sign属性[1]

size属性[1]

T

trim属性[1]

type属性[1]、[2]

type属性の値とsign属性の値の組み合わせ[1]

type属性の値とtrim属性の値の組み合わせ[1]

U

UCS-2[1]

UCS-4[1]

UDT[1]

UMA[1]

Unicode[1]、[2]

Unicode機能[1]

UNIXで作成したCOBOLプログラムのUNIXでのコンパイルとリンケージ[1]

unsigned[1]

UP[1]

update属性[1]、[2]

URI[1]

URL[1]

USS[1]

UTF-16[1]

UTF-8[1]

V

verbatim属性[1]

W

Windowsで作成したCOBOLプログラムのWindowsでのコンパイルとリンケージ[1]

X

XC[1]

xlCコマンド[1]

XML[1]、[2]

XMLアクセス用実行時ライブラリ[1]

XMLアクセス用ステータス定義[1]、[2]

XMLアクセス用データ定義[1]、[2]、[3]

XMLアクセスルーチン[1]、[2]、[3]

XMLアクセスルーチンが返すステータス[1]

XMLアクセスルーチン使用時の注意事項[1]

XMLアクセスルーチンのエラー情報[1]

XMLアクセスルーチンの名称形式[1]

XMLサービスルーチンを使用した機能[1]

XMLステータス定義（登録集原文CBLXMLRC.cbl）の格納パス[1]

XML宣言[1]

XML対応COBOLプログラムの作成手順[1]

XMLドキュメント[1]

XMLドキュメント解析処理[1]

XMLドキュメント書き込み時に設定する入出力データ情報項目[1]

XMLドキュメントの書き込み[1]

XMLドキュメントの更新[1]

XMLドキュメントの更新機能の注意事項[1]

XMLドキュメントの構造と異なるCOBOLの集団項目への対応づけ[1]

XMLドキュメントの種類[1]

XMLドキュメントの文字エンコーディング[1]

XMLドキュメントの読み込み[1]

XMLドキュメント読み込み時に設定される入出力データ情報項目[1]

XMLドキュメントを更新するためのメモリ所要量[1]

XMLドキュメントを閉じる[1]

XMLドキュメントを入出力，更新する場合のメモリ所要量[1]

XMLドキュメントを開く[1]、[2]

XMLパーサが出力するメッセージのパス[1]、[2]

XML要素[1]

XML要素の一意な参照[1]

XML連携機能[1]

XML連携機能およびXML連携機能の実行時ライブラリの提供する機能[1]

XML連携機能で扱えるDTDの形式[1]

XML連携機能を使ったプログラム開発の概要[1]

あ

アクセス情報フラグ[1]

アクセスする要素の定義[1]

アクセスモード文字列[1]、[2]

値の入力，出力の動作[1]

い

一般実体[1]

インタフェースの定義[1]

インタフェース名[1]

え

エラー情報の取得[1]

エラー情報の取得対象となるXMLアクセスルーチン[1]

エンティティ[1]

お

オブジェクトファイル[1]

か

概算式の計算例[1]

解析モード[1]

開発マネージャ上でのイメージ図[1]

開発マネージャ上でのファイルの表示名[1]

開発マネージャの操作[1]

開発マネージャ連携[1]

外部DTDファイル[1]

外部一般実体[1]

外部サブセット[1]

外部識別子[1]

外部パラメタ実体[1]

カタログファイル[1]、[2]

カタログファイルの形式[1]

カタログファイルの使い方[1]

環境変数[1]、[2]、[3]

き

共用ライブラリ[1]

共用ライブラリの格納パス[1]、[2]、[3]、[4]

く

位取りのけた数[1]

繰り返し全要素数[1]

繰り返し入出力数[1]

繰り返し要素[1]、[2]

繰り返し要素の定義[1]

け

けた数[1]

こ

公開識別子[1]、[2]、[3]

異なる要素の下に共通にある要素[1]

コメント[1]

コンパイル[1]

コンパイルとリンケージ[1]

さ

再帰的なXML構造[1]

サロゲート[1]

し

システム識別子[1]

実行[1]

実行可能ファイル[1]

実行時の動作に関する注意事項[1]

実行時のメモリ所要量[1]

実体参照[1]

実体宣言[1]

集団項目の定義[1]

出力したXMLドキュメント長を取得する[1]

出力時のアクセス情報フラグ[1]

出力時のデータ長[1]

出力するXMLドキュメントの文字エンコーディングの設定[1]

小数点以下のけた数[1]

使用するファイル[1]

使用できる文字エンコーディング[1]

省略可能な選択要素[1]

省略可能な要素へのアクセス[1]

す

ステータスの一覧[1]

ステータスの概要[1]

せ

制限事項[1]

選択要素[1]

選択要素へのアクセス[1]

選択要素をGroup要素に指定する場合[1]

そ

属性[1]

属性のデフォルト指定[1]

属性の入出力[1]

属性リスト宣言[1]

た

対応づけしない要素の扱い[1]

ダイナミックリンク[1]、[2]

タグ[1]

正しい形式のXMLドキュメント[1]

妥当なXMLドキュメント[1]

つ

次に入力するBaseElement要素の位置を取得する機能[1]

て

定義済み実体参照[1]

データ[1]

データ長[1]

データ定義言語[1]、[2]

データ定義ファイル[1]、[2]

データの書き込み[1]

データの読み込み[1]

テキスト宣言[1]

テストデバッグ機能を使用する[1]

と

登録集原文[1]

な

内部サブセット[1]

に

入出力時の拡張機能[1]

入出力データ情報項目[1]

入出力データ情報定義機能[1]

入出力データ情報定義機能の使用方法[1]

入出力データ情報定義とDDLの対応づけ[1]

入力XMLドキュメントの妥当性チェック機能[1]

入力時に不当な文字をチェックする機能[1]

入力時のアクセス情報フラグ[1]

入力時のオーバフローをステータスで返す機能[1]

入力時のデータ長[1]

は

パーサ[1]

バイトオーダ[1]

バイトオーダマーク[1]

パラメタ実体[1]

ひ

ビルド[1]

ふ

文書型定義[1]

文書型定義（DTD）の情報を保持するためのメモリ所要量[1]

文書型定義ファイル[1]

文書の型宣言[1]

ま

マルチスレッド[1]、[2]

み

見た目幅[1]

め

メッセージ[1]

メッセージの言語種別[1]、[2]

も

文字エンコーディング[1]

文字エンコーディングが指定されたXMLドキュメント[1]

文字コード[1]

戻り値[1]

よ

用語解説[1]

要素宣言[1]

要素に囲まれた要素の扱い[1]

要素の繰り返し回数の最大値[1]

要素の対応づけの定義[1]

ら

ライブラリファイル[1]

り

リンケージ[1]