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