前のページ|次のページ

AUTOMAP=オプションを使用してXMLMapを生成し、XMLドキュメントをインポートする

次の例では、AUTOMAP=オプションを使用してXMLMapファイルを自動生成し、そのXMLMapを使ってXMLファイルをインポートする方法を示します。LIBNAMEステートメントでAUTOMAP=オプションを指定すると、SASシステムは指定されたXMLドキュメントの構造を分析した上で、同ドキュメントに含まれているXMLマークアップをSASデータセット、変数(列)、オブザベーション(行)に変換する方法を記述したXMLMap構文を生成します。
インポートするXMLドキュメントNHL.XMLの内容は次のとおりです。XMLMapを使用せずにこのドキュメントのインポートを試みると、同ドキュメント内のデータはサポートされている形式を持たないというエラーが表示されます。
<?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>
次のSASステートメントは、XMLドキュメントNHL.XMLをインポートします。
filename nhl 'C:\My Documents\XML\Nhl.xml'; 1
filename map 'C:\My Documents\XML\NhlGenerate.map'; 2

libname nhl xmlv2 automap=replace xmlmap=map; 3

proc print data=nhl.team; 4
run;
  1. 最初のFILENAMEステートメントは、ファイル参照名NHLを、インポートされるXMLドキュメントNHL.XMLの物理的な場所(完全なパス名、ファイル名、ファイル拡張子を含むもの)に割り当てます。
  2. 2番目のFILENAMEステートメントは、ファイル参照名MAPを、NHLGenerate.MAPという名前で生成されるXMLMapファイルの物理的な場所に割り当てます。
  3. このLIBNAMEステートメントの引数についての説明を次に示します。
    • このLIBNAMEステートメントは、ライブラリ参照名NHLを割り当てます。このライブラリ参照名は、最初のFILENAMEステートメントで割り当てられたファイル参照名と一致します。ライブラリ参照名とファイル参照名が一致しているため、インポートされるXMLドキュメントの物理的な場所をLIBNAMEステートメントで指定する必要はありません。
    • エンジンとしてXMLV2 Engineを指定します。
    • AUTOMAP=REPLACEオプションで、XMLMapファイルを生成するよう要求します。同じ名前のファイルが存在する場合、既存のファイルは上書きされます。デフォルトの設定はPREFIXATTRIBUTES=YESであり、この場合、個々のXMLMapのCOLUMN要素の生成時に、要素名を属性名に連結することにより、SAS変数名が定義されます。
    • XMLMAP=オプションで、ファイル参照名MAPを指定します。これは2番目のFILENAMEステートメントで割り当てられたファイル参照名に一致します。このファイル参照名は、生成されるXMLMapファイルの物理的な場所に関連付けられます。
  4. PRINTプロシジャ出力により、インポートが正しく行われたことを検証します。
生成されたXMLMapファイルNHLGenerate.mapの内容は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>

<!-- ############################################################ -->
<!-- 2012-09-21T10:30:48 -->
<!-- SAS XML Libname Engine Map -->
<!-- Generated by XML Mapper, 904000.4.0.20120905190000_v940 -->
<!-- ############################################################ -->
<!-- ###  Validation report                                   ### -->
<!-- ############################################################ -->
<!-- XMLMap validation completed successfully. -->
<!-- ############################################################ -->
<SXLEMAP name="AUTO_GEN" version="2.1">

    <NAMESPACES count="0"/>

    <!-- ############################################################ -->
    <TABLE description="NHL" name="NHL">
        <TABLE-PATH syntax="XPath">/NHL</TABLE-PATH>

        <COLUMN class="ORDINAL" name="NHL_ORDINAL">
            <INCREMENT-PATH beginend="BEGIN" syntax="XPath">/NHL</INCREMENT-PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>

    </TABLE>

    <!-- ############################################################ -->
    <TABLE description="CONFERENCE" name="CONFERENCE">
        <TABLE-PATH syntax="XPath">/NHL/CONFERENCE</TABLE-PATH>

        <COLUMN class="ORDINAL" name="NHL_ORDINAL">
            <INCREMENT-PATH beginend="BEGIN" syntax="XPath">/NHL</INCREMENT-PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>

        <COLUMN class="ORDINAL" name="CONFERENCE_ORDINAL">
            <INCREMENT-PATH beginend="BEGIN" syntax="XPath">/NHL/CONFERENCE</INCREMENT-PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>

        <COLUMN name="CONFERENCE">
            <PATH syntax="XPath">/NHL/CONFERENCE</PATH>
            <TYPE>character</TYPE>
            <DATATYPE>string</DATATYPE>
            <LENGTH>12</LENGTH>
        </COLUMN>

    </TABLE>

    <!-- ############################################################ -->
    <TABLE description="DIVISION" name="DIVISION">
        <TABLE-PATH syntax="XPath">/NHL/CONFERENCE/DIVISION</TABLE-PATH>

        <COLUMN class="ORDINAL" name="CONFERENCE_ORDINAL">
            <INCREMENT-PATH beginend="BEGIN" syntax="XPath">/NHL/CONFERENCE</INCREMENT-PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>

        <COLUMN class="ORDINAL" name="DIVISION_ORDINAL">
            <INCREMENT-PATH beginend="BEGIN" syntax="XPath">/NHL/CONFERENCE/DIVISION</INCREMENT-PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>

        <COLUMN name="DIVISION">
            <PATH syntax="XPath">/NHL/CONFERENCE/DIVISION</PATH>
            <TYPE>character</TYPE>
            <DATATYPE>string</DATATYPE>
            <LENGTH>28</LENGTH>
        </COLUMN>

    </TABLE>

    <!-- ############################################################ -->
    <TABLE description="TEAM" name="TEAM">
        <TABLE-PATH syntax="XPath">/NHL/CONFERENCE/DIVISION/TEAM</TABLE-PATH>

        <COLUMN class="ORDINAL" name="DIVISION_ORDINAL">
            <INCREMENT-PATH beginend="BEGIN" syntax="XPath">/NHL/CONFERENCE/DIVISION</INCREMENT-PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>

        <COLUMN class="ORDINAL" name="TEAM_ORDINAL">
            <INCREMENT-PATH beginend="BEGIN" syntax="XPath">/NHL/CONFERENCE/DIVISION/TEAM</INCREMENT-PATH>
            <TYPE>numeric</TYPE>
            <DATATYPE>integer</DATATYPE>
        </COLUMN>

        <COLUMN name="TEAM_name">
            <PATH syntax="XPath">/NHL/CONFERENCE/DIVISION/TEAM/@name</PATH>
            <TYPE>character</TYPE>
            <DATATYPE>string</DATATYPE>
            <LENGTH>10</LENGTH>
        </COLUMN>

        <COLUMN name="TEAM_abbrev">
            <PATH syntax="XPath">/NHL/CONFERENCE/DIVISION/TEAM/@abbrev</PATH>
            <TYPE>character</TYPE>
            <DATATYPE>string</DATATYPE>
            <LENGTH>3</LENGTH>
        </COLUMN>

    </TABLE>

</SXLEMAP>
NHL.TEAMのPRINTプロシジャ出力は次のようになります。
NHL.TEAMのPRINTプロシジャ出力
NHL.TEAMのPRINTプロシジャ出力
前のページ|次のページ|ページの先頭へ