NAMESPACE 句

多くの XML ドキュメントはネームスペースを持っています。NAMESPACE 句を使用すると、ネームスペースを COBOL で設定したり、識別したりできます。NAMESPACE 句はデータ記述項で指定します。NAMESPACE 句の例を次に示します。

NAMESPACE の使用

0010  xd book-file.
0020  78  book-ns value "http://xml.microfocus.com/book.xsd".
0030  01  book                identified by "book"
0040                          namespace is book-ns.
0050      05  publisher pic x(80)
0060              identified by "name"
0070              namespace is
0080              "http://xml.microfocus.com/publisher.xsd".
0090 
0100      05  author identified by "name"
0110                 namespace is
0120                 "http://xml.microfocus.com/author.xsd".
0130          10  author-first identified by "firstname"
0140                           pic x(80).
0150          10  author-last  identified by "lastname"
0160                           pic x(80).
0170      05  title            identified by "title"
0180                           pic x(80).

0020 行目:

0020  78  book-ns value "http://xml.microfocus.com/book.xsd".

ネームスペースおよびその値を定義しています。

0030 から 0040 行目:

0030  01  book                identified by "book"
0040                          namespace is book-ns.

book-ns 内の値に等しいネームスペースを持つデータ レコードを定義しています。

0050 から 0080 行目:

0050      05  publisher pic x(80)
0060              identified by "name"
0070              namespace is
0080              "http://xml.microfocus.com/publisher.xsd".

ネームスペースを特定の URI (Uniform Resource Identifier) に設定しています。URI とは Web 上でアクセスする特定の一点を意味し、この例では指定された XML スキーマ ファイルを指します。

0100 から 0120 行目:

0100      05  author identified by "name"
0110                 namespace is
0120                 "http://xml.microfocus.com/author.xsd".

ネームスペースを特定の URI に設定しています。

0130 から 0160 行目:

0130          10  author-first identified by "firstname"
0140                           pic x(80).
0150          10  author-last  identified by "lastname"
0160                           pic x(80).

これらのデータ項目は author グループに属しているため、author と同じネームスペースを使用します。

0170 から 0180 行目:

0170      05  title            identified by "title"
0180                           pic x(80).

title は book グループに属し、ネームスペースを指定されていないため、book と同じネームスペースを継承します。

入力時には、タグとネームスペースの両方が、XML ストリーム内のタグおよびネームスペースと一致する必要があります。出力時には、タグは指定されたネームスペースで修飾されます。例「NAMESPACE の使用」のコードは、次のような XML ストリームを生成します。

<?xml version="1.0" encoding="utf-8" ?>
<book xmlns="http://xml.microfocus.com/book.xsd">
   <name xmlns="http://xml.microfocus.com/publisher.xsd">
      Just a publisher
   </name>
   <name xmlns="http://xml.microfocus.com/author.xsd">
      <firstname>AuthorFirstname</firstname>
      <lastname>AuthorFirstname</lastname>
   </name>
   <title>
      This is the title
   </title>
</book>

特定の NAMESPACE の値はデータ名に置き換えることが可能で、それによって XML 内のネームスペースの動的な検出が容易になります。この場合は、入力ではネームスペースの照合は行われず、かわりに一致するタグのネームスペースが、NAMESPACE で指定されるデータ項目内に追加されます。出力では、データ名で参照されるネームスペースの値が、出力タグの修飾に使用されます。たとえば、次のレコードおよび XML ストリーム入力を例に挙げます。まず、レコード例を示します。

     xd generic-file.
     01  generic-tag identified by generic-tag-name
                     namespace is generic-tag-namespace.
         05  generic-tag-name           pic x(80).
         05  generic-tag-namespace      pic x(80).
         05  generic-tag-value          pic x(80).

続いて XML ストリーム入力の例を示します。

   <name xmlns="http://xml.microfocus.com/publisher.xsd">
      Just a publisher
   </name>

この場合は、generic-tag-name として「name」、generic-tag-namespace として「http://xml.microfocus.com/publisher.xsd」、generic-tag-value として「Just a publisher」が得られます。