前のページ|次のページ

XMLMapを使用し、XMLドキュメントを1つのSASデータセットとしてインポートする

次の例では、XMLMapの作成および使用方法を示します。XMLMapを使用すると、XMLマークアップをSASデータセット、変数、オブザベーションに対応付ける方法をXML Engineに伝えることができます。
インポートするXMLドキュメントNHL.XMLの内容は次のとおりです。このXMLドキュメントは、単純で比較的読みやすい構成を持っていますが、そのXMLマークアップは必要な物理構造を備えていないため、同ドキュメントは正しくインポートできません。
<?xml version="1.0" encoding="iso-8859-1" ?>
<NHL>
  <CONFERENCE> Eastern
    <DIVISION> Southeast
      <TEAM name="Thrashers"  abbrev="ATL" />
      <TEAM name="Hurricanes" abbrev="CAR" />
      <TEAM name="Panthers"   abbrev="FLA" />
      <TEAM name="Lightning"  abbrev="TB" />
      <TEAM name="Capitals"   abbrev="WSH" />
   </DIVISION>
 </CONFERENCE>

 <CONFERENCE> Western
   <DIVISION> Pacific
     <TEAM name="Stars"   abbrev="DAL" />
     <TEAM name="Kings"   abbrev="LA" />
     <TEAM name="Ducks"   abbrev="ANA" />
     <TEAM name="Coyotes" abbrev="PHX" />
     <TEAM name="Sharks"  abbrev="SJ" />
   </DIVISION>
  </CONFERENCE>
</NHL>
このXMLドキュメントを正しくインポートするには、XMLMapが必要となります。インポートするデータを十分に把握したら、そのデータを正しくインポートするために、XMLMap構文をコーディングします。このXMLドキュメントをインポートするのに使用されるXMLMapの内容は次のようになります。
<?xml version="1.0" ?>
<SXLEMAP version="2.1">
  <TABLE name="TEAMS"> 1
        <TABLE-PATH syntax="XPath"> 2
           /NHL/CONFERENCE/DIVISION/TEAM
         </TABLE-PATH>

        <COLUMN name="NAME"> 3
          <PATH> 5
             /NHL/CONFERENCE/DIVISION/TEAM@name
            </PATH>
            <TYPE>character</TYPE>
            <DATATYPE>STRING</DATATYPE>
            <LENGTH>30</LENGTH>
         </COLUMN>

        <COLUMN name="ABBREV"> 3
          <PATH> 5
           /NHL/CONFERENCE/DIVISION/TEAM/@abbrev
            </PATH>
            <TYPE>character</TYPE>
            <DATATYPE>STRING</DATATYPE>
            <LENGTH>3</LENGTH>
         </COLUMN>

       <COLUMN name="CONFERENCE" retain="YES"> 4
          <PATH>/NHL/CONFERENCE</PATH> 5
            <TYPE>character</TYPE>
            <DATATYPE>STRING</DATATYPE>
            <LENGTH>10</LENGTH>
        </COLUMN>

       <COLUMN name="DIVISION" retain="YES"> 4
           <PATH> 5
              /NHL/CONFERENCE/DIVISION
            </PATH>
            <TYPE>character</TYPE>
            <DATATYPE>STRING</DATATYPE>
            <LENGTH>10</LENGTH>
        </COLUMN>
  </TABLE>
</SXLEMAP>
前述のXMLMap構文は、次のようなデータ調査手順を使用して、XMLマークアップを変換する方法を定義します。
1 情報を含んでいる表を特定します。
ナショナルホッケーリーグの複数のチームを含むSASデータセット(表)が必要であるとします。それがXMLドキュメントに含まれている唯一の情報であるため、XMLMap内でTEAMSという名前の単一データセットを定義します(これ以外のXMLドキュメントでは、関連情報の表を複数含んでいる場合もあることに注意してください。複数の表のインポートをサポートするXMLMap構文については、XMLMapを使用し、XMLドキュメントを複数のSASデータセットとしてインポートするを参照してください)。
2 SASデータセットのオブザベーション境界を指定します。オブザベーション境界は、一定の個数の列を伴う任意の個数の行の集合(すなわち表)に変換されます。
このXMLドキュメント内では、各チームに関する情報は、<CONFERENCE>タグおよび<DIVISION>タグにより囲まれた領域内にある<TEAM>タグ内に記述されています。TEAM要素を読み込むたびに、新しいオブザベーションを生成する必要があります。
3 各表の列定義を収集します。
このXMLドキュメントでは、データのコンテンツ形式が混合されています。XML PCDATAとして記述されているデータもあれば(例: CONFERENCE)、属性と値のペアとして記述されているデータ(例: NAME)もあります。データ型はすべて文字列値です。構成されるオブザベーションは、チームの名前(NAME)と略称(ABBREV)を含むことになります。NAMEの長さは30文字で十分であり、ABBREVフィールドの内容を表すには3文字で十分です。
4 外部キーまたは必要な外部コンテキストを追加します。
チームの所属リーグに関する情報を含めるとします。また、CONFERENCEデータとDIVISIONデータの抽出も行うとします。
注: 列定義内のretain=属性は、オブザベーションを出力データセットに書き出した後、処理されたデータが保持されるようにします。外部キーフィールドはオブザベーション境界の外側で発生する(すなわち、階層的なXMLデータ内では、外部キーフィールドが、SASオブザベーション内に比べて、よりまばらに出現する)ため、追加行での外部キーフィールドの値は、当該フィールドを検出する時点まで保持する必要があります。
5 各変数定義の場所パスを定義します。
PATH要素は、各列の値が取り出されるXMLドキュメント内の位置を指定します。要素-PCDATA (構文解析対象文字データ)は、属性値とは異なる方法で扱われます。関連する条件付きの選択基準は存在しません。
次のSASステートメントは、XMLドキュメントNHL.XMLをインポートします。
filename nhl 'C:\My Documents\XML\Nhl.xml'; 1
filename map 'C:\My Documents\XML\Nhl.map'; 2

libname nhl xmlv2 xmlmap=map; 3

proc print data=nhl.teams; 4
run;
1 最初のFILENAMEステートメントは、ファイル参照名NHLを、NHL.XMLという名前のXMLドキュメントの物理的な場所(完全なパス名、ファイル名、ファイル拡張子を含むもの)に割り当てます。
2 2番目のFILENAMEステートメントは、ファイル参照名MAPを、NHL.MAPという名前のXMLMapファイルの物理的な場所に割り当てます。
3 このLIBNAMEステートメントは、ファイル参照名NHLを使用してXMLドキュメントを参照します。同ステートメントでは、エンジンとしてXMLV2 Engineを指定した上で、ファイル参照名MAPを使用してXMLMapを参照しています。
4 PRINTプロシジャにより出力を生成することで、インポートが正常に行われたことを確認します。
NHL.TEAMSのPRINTプロシジャ出力
NHL.TEAMSのPRINTプロシジャ出力
前のページ|次のページ|ページの先頭へ