前のページ|次のページ

GENERICマークアップタイプを使用したXMLドキュメントのインポートに必要な物理構造の条件について

必要とされる物理構造について

XMLドキュメントを正常にインポートするには、正しく構成されているXMLドキュメントに関する必要条件を次のように変換する必要があります。
  • XMLドキュメントのルート包含要素(トップレベルノード)とは、ドキュメントコンテナのことです。SASシステムでは、これはSASライブラリに該当します。
  • コンテナ内におけるネストされる要素(反復要素インスタンス)は、第2レベルのインスタンスタグにより開始されます。
  • このような反復要素インスタンスは、1つの矩形構造を表す必要があります。SASデータセットの場合、このようなインスタンスにより、一定の個数のを伴う任意の個数のの集合(すなわち表)を生成するオブザベーション境界が決定されます。
必要とされる物理構造を表すXMLドキュメントの例を次に示します。
<?xml version="1.0" encoding="windows-1252" ?>
<LIBRARY> 1
   <STUDENTS> 2
      <ID> 0755 </ID>
      <NAME> Brad Martin </NAME>
      <ADDRESS> 1611 Glengreen </ADDRESS>
      <CITY> Huntsville </CITY>
      <STATE> Texas </STATE>
   </STUDENTS>

   <STUDENTS> 3
      <ID> 1522 </ID>
      <NAME> Zac Harvell </NAME>
      <ADDRESS> 11900 Glenda </ADDRESS>
      <CITY> Houston </CITY>
      <STATE> Texas </STATE>
   </STUDENTS>
.
.  more instances of <STUDENTS>
.
</LIBRARY>
前述のXMLドキュメントをインポートする場合、次の処理が行われます。
1 XML Engineは、<LIBRARY>をルート包含要素として認識します。
2 XML Engineは第2レベルのインスタンスタグ(<STUDENTS>)に移動し、それをデータセット名に変換し、開始タグ<STUDENTS>と終了タグ</STUDENTS>の間にネストされている(含まれている)要素のスキャンを行って変数を見つけようとします。
3 インスタンスタグ<ID>、<NAME>、<ADDRESS>、<CITY>、<STATE>は、開始タグ<STUDENTS>と終了タグ</STUDENTS>に囲まれているため、XML Engineはこれらのインスタンスタグを変数として変換します。個々のインスタンスタグ名がデータセット変数名となります。反復要素インスタンスは、一定の個数の列を伴う任意の個数の行の集合(すなわち表)に変換されます。
次のステートメントを実行すると、次のSAS出力が生成されます。
libname test xml 'C:\My Documents\students.xml';

proc print data=test.students;
run;
TEST.STUDENTSのPRINTプロシジャ出力
TEST.STUDENTSのPRINTプロシジャ出力

特定の物理構造が必要な理由

XMLドキュメントが正しく構成されているかどうかは、その内容ではなく、構造により判定されます。このため、XML EngineはXMLドキュメントが正しく構成されているとは仮定できますが、ルート要素が単一ノード要素のインスタンスのみ(すなわち単一のデータセットのみ)を包含しているとは仮定できません。したがって、XML Engineは、複数のノード(すなわち複数のSASデータセット)の可能性を考慮に入れる必要があります。
たとえば、次のような正しく構成されているXMLドキュメントをインポートする場合、同ドキュメントは、2つのSASデータセットHIGHTEMPおよびLOWTEMPを含んでいるものとして認識されます。
<?xml version="1.0" encoding="windows-1252" ?>
<CLIMATE> 1
   <HIGHTEMP> 2
      <PLACE> Libya </PLACE>
      <DATE> 1922-09-13 </DATE>
      <DEGREE-F> 136 </DEGREE-F>
      <DEGREE-C> 58 </DEGREE-C>
   </HIGHTEMP>
.
.  more instances of <HIGHTEMP>
.
   <LOWTEMP> 3
      <PLACE> Antarctica </PLACE>
      <DATE> 1983-07-21 </DATE>
      <DEGREE-F> -129 </DEGREE-F>
      <DEGREE-C> -89 </DEGREE-C>
   </LOWTEMP>
.
.  more instances of <LOWTEMP>
.
</CLIMATE>
前述のXMLドキュメントをインポートする場合、次の処理が行われます。
1 XML Engineは、最初のインスタンスタグ<CLIMATE>をルート包含要素(すなわちドキュメントコンテナ)として認識します。
2 第2レベルのインスタンスタグ<HIGHTEMP>以降では、XML Engineは、反復要素インスタンスを、一定の個数の列を伴う任意の個数の行の集合(すなわち表)として使用します。
3 第2レベルのインスタンスタグが変化すると、XML Engineは、その変化を異なるSASデータセットとして解釈します。
結果として、2つのSASデータセットHIGHTEMPとLOWTEMPが生成されます。これらのデータセットは同じ変数を持ちますが、含まれているデータは異なります。
インポート結果が期待通りであることを確認するには、DATASETSプロシジャを使用します。たとえば、次のステートメントを実行すると、次のSAS出力が生成されます。
libname climate xml 'C:\My Documents\climate.xml';

proc datasets library=climate;
quit;
CLIMATEライブラリのDATASETSプロシジャ出力
CLIMATEライブラリのDATASETSプロシジャ出力

必要な物理構造を備えていないXMLドキュメントの処理

XMLドキュメントが必要な物理構造を備えていない場合、そのドキュメントを正しくインポートするには、同ドキュメントに含まれているXMLマークアップを解釈する方法をXML Engineに伝える必要があります。インポート時にXMLMapを使用する理由を参照してください。
前のページ|次のページ|ページの先頭へ