次の例では、Microsoft Accessデータベースにより作成されたXMLドキュメントをインポートします。このXMLドキュメントには埋め込み型のXMLスキーマが含まれているため、マークアップタイプとしてデフォルトのGENERICではなくMSACCESSを指定する必要があります。MSACCESSを指定すると、埋め込み型のスキーマから変数の属性が取得されます。
<?xml version="1.0" encoding="windows-1252" ?>
<root xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:od="urn:schemas-microsoft-com:officedata">
<xs:schema>
<xs:element name="dataroot">
<xs:complexType>
<xs:sequence>
<xs:element ref="SUPPLIERS" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SUPPLIERS">
<xs:complexType>
<xs:sequence>
<xs:element name="HOMEPAGE" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="94" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="FAX" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="15" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PHONE" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="15" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="COUNTRY" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="11" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="POSTALCODE" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="8" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="REGION" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="8" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="CITY" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="13" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ADDRESS" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="45" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="CONTACTTITLE" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="28" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="CONTACTNAME" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="26" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="COMPANYNAME" minOccurs="0"
od:jetType="text" od:sqlSType="nvarchar">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="38" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SUPPLIERID" minOccurs="0"
od:jetType="double" od:sqlSType="double"
type="xs:double" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<dataroot>
<SUPPLIERS>
<HOMEPAGE/>
<FAX/>
<PHONE>(272) 444-2222</PHONE>
<COUNTRY>UK</COUNTRY>
<POSTALCODE>EC1 4SD</POSTALCODE>
<REGION/>
<CITY>London</CITY>
<ADDRESS>49 Franklin St.</ADDRESS>
<CONTACTTITLE>Purchasing Manager</CONTACTTITLE>
<CONTACTNAME>Charlotte Smith</CONTACTNAME>
<COMPANYNAME>Exotic Flowers</COMPANYNAME>
<SUPPLIERID>1</SUPPLIERID>
</SUPPLIERS>
<SUPPLIERS>
<HOMEPAGE>#MYCAJUN.HTM#</HOMEPAGE>
<FAX/>
<PHONE>(512) 284-3677</PHONE>
<COUNTRY>USA</COUNTRY>
<POSTALCODE>70117</POSTALCODE>
<REGION>LA</REGION>
<CITY>New Orleans</CITY>
<ADDRESS>P.O. Box 78934</ADDRESS>
<CONTACTTITLE>Order Administrator</CONTACTTITLE>
<CONTACTNAME>Shelley Martin</CONTACTNAME>
<COMPANYNAME>New Orleans Cajun Foods</COMPANYNAME>
<SUPPLIERID>2</SUPPLIERID>
</SUPPLIERS>
.
.
.
</dataroot>
</root>
次のSASプログラムは、XMLドキュメントをSASデータセットとして変換します。
libname access xml '/u/myid/XML/suppliers.xml' xmltype=msaccess 1
xmlmeta=schemadata; 1
proc print data=access.suppliers (obs=2); 2
var contactname companyname;
run;
| 1 |
このLIBNAMEステートメントは、エンジンとしてXML Engineを指定した上で、ライブラリ参照名ACCESSを、XMLドキュメントの物理的な場所(完全なパス名、ファイル名、ファイル拡張子を含むもの)に割り当てます。デフォルトでは、XML
EngineはGENERICマークアップの使用を仮定するため、XMLTYPE=MSACCESSオプションを使用することにより、XML EngineがこのXMLドキュメントをMSACCESSマークアップタイプとして読み込み、埋め込み型のスキーマから変数の属性を取得するようにします。オプションXMLMETA=SCHEMADATAを指定すると、入力XMLドキュメントからデータ内容とメタデータ関連情報の両方がインポートされます。
|
| 2 |
PRINTプロシジャにより出力を生成します。同プロシジャでは、OBS=データセットオプションを使用することで、先頭の2つのオブザベーションのみを出力しています。また、VARステートメントにより、指定の変数(列)のみを出力しています。 |
ACCESS.SUPPLIERSのPRINTプロシジャ出力
CONTENTSプロシジャを使用することで、ファイルの属性や、変換された各列(変数)の属性を出力に表示できます。これらの属性には、埋め込み型のXMLスキーマから取得した変数の型や長さなどが含まれます。埋め込み型のXMLスキーマが存在しない場合、属性の結果はデフォルト値になります。
proc contents data=access.suppliers;
run;
ACCESS.SUPPLIERSのCONTENTSプロシジャ出力