次の例では、XMLMapを使用して、XMLマークアップを2つのSASデータセットに対応付ける方法を定義します。この例で使用するXMLドキュメントRSS.XMLは、正しく構成されていないためXML
Engineにより正しく変換されず、その結果として正しくインポートできません。
注: XMLドキュメントRSS.XMLは、RSS (Rich Site Summary)というXMLフォーマットを使用します。RSSは、元々はMy Netscape Network
(MNN)コミュニティ内でコンテンツを交換するために、Netscapeにより設計されたものです。RSSフォーマットは、見出しやその他のWebコンテンツを共有するために広く採用されており、伝送フォーマットとしてのXMLの優れた事例となっています。
インポートするXMLドキュメントRSS.XMLの内容は次のとおりです。
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <rss version="0.91">
- <channel>
<title>WriteTheWeb</title>
<link>http://writetheweb.com</link>
<description>News for web users that write back</description>
<language>en-us</language>
<copyright>Copyright 2000, WriteTheWeb team.</copyright>
<managingEditor>editor@writetheweb.com</managingEditor>
<webMaster>webmaster@writetheweb.com</webMaster>
- <image>
<title>WriteTheWeb</title>
<url>http://writetheweb.com/images/mynetscape88.gif</url>
<link>http://writetheweb.com</link>
<width>88</width>
<height>31</height>
<description>News for web users that write back</description>
</image>
- <item>
<title>Giving the world a pluggable Gnutella</title>
<link>http://writetheweb.com/read.php?item=24</link>
<description>WorldOS is a framework on which to build programs that work like
Freenet or Gnutella -allowing distributed applications using peer-to-peer
routing.
</description>
</item>
- <item>
<title>Syndication discussions hot up</title>
<link>http://writetheweb.com/read.php?item=23</link>
<description>After a period of dormancy, the Syndication mailing list has become
active again, with contributions from leaders in traditional media and Web
syndication.
</description>
</item>
- <item>
<title>Personal web server integrates file sharing and messaging</title>
<link>http://writetheweb.com/read.php?item=22</link>
<description>The Magi Project is an innovative project to create a combined personal
web server and messaging system that enables the sharing and synchronization of
information across desktop, laptop and palmtop devices.</description>
</item>
- <item>
<title>Syndication and Metadata</title>
<link>http://writetheweb.com/read.php?item=21</link>
<description>RSS is probably the best known metadata format around. RDF is probably
one of the least understood. In this essay, published on my O'Reilly Network
weblog, I argue that the next generation of RSS should be based on RDF.
</description>
</item>
- <item>
<title>UK bloggers get organised</title>
<link>http://writetheweb.com/read.php?item=20</link>
<description>Looks like the weblogs scene is gathering pace beyond the shores of the
US. There's now a UK-specific page on weblogs.com, and a mailing list at egroups.
</description>
</item>
- <item>
<title>Yournamehere.com more important than anything</title>
<link>http://writetheweb.com/read.php?item=19</link>
<description>Whatever you're publishing on the web, your site name is the most
valuable asset you have, according to Carl Steadman.</description>
</item>
</channel>
</rss>
このXMLドキュメントを正しくインポートするには、同ドキュメントに含まれているXMLマークアップを対応付ける方法を定義したXMLMapを作成します。RSS.XMLを正しくインポートするために必要となる構文を含むXMLMapファイルRSS.MAPの内容は次のようになります。このXMLMap構文は、XMLマークアップの変換方法をXML
Engineに伝えます。変換方法の詳細については、後続の説明を参照してください。RSS.XMLをインポートすることで、2つのSASデータセットCHANNELおよびITEMSが生成されます。CHANNELはコンテンツ情報を、ITEMSは個々のニュース記事をそれぞれ含んでいます。
<?xml version="1.0" encoding="UTF-8"?>
<SXLEMAP name="SXLEMap" version="2.1"> 1
<TABLE name="CHANNEL"> 2
<TABLE-PATH syntax="XPath">/rss/channel</TABLE-PATH> 3
<COLUMN name="title"> 4
<PATH syntax="XPath">/rss/channel/title</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>200</LENGTH>
</COLUMN>
<COLUMN name="link"> 5
<PATH syntax="XPath">/rss/channel/link</PATH>
<DESCRIPTION>Story link</DESCRIPTION>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>200</LENGTH>
</COLUMN>
<COLUMN name="description">
<PATH syntax="XPath">/rss/channel/description</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>1024</LENGTH>
</COLUMN>
<COLUMN name="language">
<PATH syntax="XPath">/rss/channel/language</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>8</LENGTH>
</COLUMN>
<COLUMN name="version"> 6
<PATH syntax="XPath">/rss@version</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>8</LENGTH>
</COLUMN>
</TABLE>
<TABLE description="Individual news stories" name="ITEMS"> 7
<TABLE-PATH syntax="XPath">/rss/channel/item</TABLE-PATH>
<COLUMN name="title"> 8
<PATH syntax="XPath">/rss/channel/item/title</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>200</LENGTH>
</COLUMN>
<COLUMN name="URL"> 9
<PATH syntax="XPath">/rss/channel/item/link</PATH>
<DESCRIPTION>Story link</DESCRIPTION>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>200</LENGTH>
</COLUMN>
<COLUMN name="description"> 9
<PATH syntax="XPath">/rss/channel/item/description</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>1024</LENGTH>
</COLUMN>
</TABLE>
</SXLEMAP>
前述のXMLMapがXMLマークアップをどのように変換するかについて、次に説明します。
1 |
SASデータセットを定義するルート包含要素です。 |
2 |
CHANNELデータセットを定義する要素です。 |
3 |
この要素は、CHANNELデータセットの変数を収集するXMLドキュメント内の位置を定義する場所パスを指定します。 |
4 |
この要素は、CHANNELデータセット内の変数TITLEの属性を指定します。XPath構成は、現在のタグが見つかる場所、および指定の要素からデータにアクセスできる場所を指定します。 |
5 |
続くCOLUMN要素は、CHANNELデータセットの変数LINK、DESCRIPTION、LANGUAGEを定義します。 |
6 |
この要素は、CHANNELデータセット内にある最後の変数(VERSION)の属性を指定します。このXPath構成は、現在のタグが見つかる場所を指定し、属性フォームを使用して指定の要素からデータにアクセスします。 |
7 |
ITEMSデータセットを定義する要素です。 |
8 |
この要素は、ITEMSデータセットの変数TITLEの属性を指定します。 |
9 |
後続のCOLUMN要素は、ITEMSデータセット内の他の変数(URLおよびDESCRIPTION)を定義します。 |
次のSASステートメントでは、RSS.MAPという名前のXMLMapファイルを指定した上で、XMLドキュメントRSS.XMLをインポートします。その後、DATASETSプロシジャによりインポート結果を検証します。
filename rss 'C:\My Documents\rss.xml';
filename map 'C:\My Documents\rss.map';
libname rss xmlv2 xmlmap=map access=readonly;
proc datasets library=rss;
run;
quit;
2つのデータセットを表示するRSSライブラリのDATASETSプロシジャ出力