COBOL2002 XML連携機能ガイド


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>
(説明)
  1. group1要素の中でgroup1要素を参照する再帰的構造です。

  2. 再帰の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種類に分かれているので,名称が一意に特定できます。