次の例では、XMLドキュメントをインポートする際に、最適な列の集合が生成されるようにオブザベーション境界を決定する方法を示します。
オブザベーション境界は、一定の個数の列を伴う任意の個数の行の集合(すなわち表)に変換されます。XMLMapを使用する場合、オブザベーション境界を決定するには、TABLE-PATH要素で場所パスを指定します。
次のXMLドキュメントには、オブザベーション境界として使用できる可能性のある要素としてPUBLICATIONが含まれています。PUBLICATIONをオブザベーション境界として使用すると、結果として3つの列TITLE、ACQUIRED、TOPICが生成されます。ただし、要素TOPICは単一のPUBLICATIONコンテナ内で任意に出現するため、結果としてTOPICが複数回出現する一連の列が生成されることになります。このため、要素PUBLICATIONではなく、要素TOPICをオブザベーション境界として使用する方がより適切な選択となります。この結果、4つの列TITLE、ACQUIRED、TOPIC、MAJORが生成されます。
<?xml version="1.0" encoding="iso-8859-1" ?>
<Library>
<Publication>
<Title>Developer's Almanac</Title>
<Acquired>12-11-2000</Acquired>
<Topic Major="Y">JAVA</Topic>
</Publication>
<Publication>
<Title>Inside Visual C++</Title>
<Acquired>06-19-1998</Acquired>
<Topic Major="Y">C</Topic>
<Topic>Reference</Topic>
</Publication>
<Publication>
<Title>Core Servlets</Title>
<Acquired>05-30-2001</Acquired>
<Topic Major="Y">JAVA</Topic>
<Topic>Servlets</Topic>
<Topic>Reference</Topic>
</Publication>
</Library>
前述のXMLドキュメントをインポートする場合に使用するXMLMap構文を次に示します。
<?xml version="1.0" ?>
<SXLEMAP version="1.2">
<TABLE name="Publication">
<TABLE-PATH syntax="XPath">
/Library/Publication/Topic 1
</TABLE-PATH>
<COLUMN name="Title" retain="YES">
<PATH>
/Library/Publication/Title
</PATH>
<TYPE>character</TYPE>
<DATATYPE>STRING</DATATYPE>
<LENGTH>19</LENGTH>
</COLUMN>
<COLUMN name="Acquired" retain="YES">
<PATH>
/Library/Publication/Acquired
</PATH>
<TYPE>numeric</TYPE>
<DATATYPE>FLOAT</DATATYPE>
<LENGTH>10</LENGTH>
<FORMAT width="10" >mmddyy</FORMAT> 2
<INFORMAT width="10" >mmddyy</INFORMAT>
</COLUMN>
<COLUMN name="Topic">
<PATH>
/Library/Publication/Topic</PATH>
<TYPE>character</TYPE>
<DATATYPE>STRING</DATATYPE>
<LENGTH>9</LENGTH>
</COLUMN>
<COLUMN name="Major">
<PATH>
/Library/Publication/Topic/@Major
</PATH>
<TYPE>character</TYPE>
<DATATYPE>STRING</DATATYPE>
<LENGTH>1</LENGTH>
<ENUM> 3
<VALUE>Y</VALUE>
<VALUE>N</VALUE>
</ENUM>
<DEFAULT>N</DEFAULT> 4
</COLUMN>
</TABLE>
</SXLEMAP>
前述のXMLMapは、XMLマークアップを次のように変換するようXML Engineに伝えます。
1 |
要素TOPICは、SASデータセットの変数をXMLドキュメント内のどこで収集するかを定義する場所パスを指定します。このXMLドキュメント内で終了タグ</TOPIC>を検出するたびに、1つのオブザベーションが出力されます。 |
2 |
列ACQUIREDの場合、XMLMap構文のFORMAT要素を使用してデータが作成されます。FORMATおよびINFORMATのような要素は、SASシステムで使用するためにデータを変換しなければならない場合に便利です。XML
Engineは、互いに独立して使用できるユーザー定義の出力形式と入力形式もサポートしています。
|
3 |
XMLMap構文は列挙もサポートしています。このENUM要素は、列MAJORの値がYまたはNのどちらかでなければならないことを指定します。入力された値がENUMリスト内に含まれていない場合、その値はMISSINGに設定されます。 |
4 |
デフォルトでは、欠損値はMISSINGに設定されます。DEFAULT要素は、欠損値のデフォルト値を指定します。この例では、欠損値のデフォルト値はNに指定されています。ENUM要素を使用する場合、DEFAULT要素に指定する値が有効となるためには、その値がENUM値の1つに指定されている必要があります。 |
次のSASステートメントは、XMLドキュメントをインポートして、XMLMapを指定します。その後、PRINTプロシジャによりインポート結果を検証します。
filename rep 'C:\My Documents\XML\Rep.xml';
filename map 'C:\My Documents\XML\Rep.map';
libname rep xml xmlmap=map;
proc print data=rep.publication noobs;
run;
REP.PUBLICATIONデータセットを表示するPRINTプロシジャ出力