次の例では、XMLMap名前空間要素の使い方を示します。XMLMap名前空間要素を使用すると、XML名前空間により修飾される同じ名前の要素を含むXMLドキュメントをインポートできるようになります。XMLMap名前空間要素を使うと、インポートされたXMLドキュメント内に含まれているXML名前空間を維持することや、SASデータセットから名前空間を含むXMLドキュメントをエクスポートすることが可能となります。
インポートするXMLドキュメントNSSample.xmlの内容は次のとおりです。このXMLドキュメントには3つのXML名前空間が含まれています。名前空間は、一意のURIへの参照を使用してADDRESS要素を修飾することにより、同要素を区別します。ADDRESS要素は、次に示す最初のPERSON反復要素内で強調表示されています。
<?xml version="1.0" encoding="UTF-8"?>
<PEOPLE xmlns:HOME="http://sample.url.org/home"
xmlns:IP="http://sample.url.org/ip"
xmlns:WORK="http://sample.url.org/work">
<PERSON>
<NAME>Joe Smith</NAME>
<HOME:ADDRESS>1234 Elm Street</HOME:ADDRESS>
<HOME:PHONE>999-555-0011</HOME:PHONE>
<WORK:ADDRESS>2001 Office Drive, Box 101</WORK:ADDRESS>
<WORK:PHONE>999-555-0101</WORK:PHONE>
<IP:ADDRESS>192.168.1.1</IP:ADDRESS>
</PERSON>
<PERSON>
<NAME>Jane Jones</NAME>
<HOME:ADDRESS>9876 Main Street</HOME:ADDRESS>
<HOME:PHONE>999-555-0022</HOME:PHONE>
<WORK:ADDRESS>2001 Office Drive, Box 102</WORK:ADDRESS>
<WORK:PHONE>999-555-0102</WORK:PHONE>
<IP:ADDRESS>172.16.1.2</IP:ADDRESS>
</PERSON>
<PERSON>
<NAME>Pat Perkinson</NAME>
<HOME:ADDRESS>1395 Half Way</HOME:ADDRESS>
<HOME:PHONE>999-555-0033</HOME:PHONE>
<WORK:ADDRESS>2001 Office Drive, Box 103</WORK:ADDRESS>
<WORK:PHONE>999-555-0103</WORK:PHONE>
<IP:ADDRESS>10.0.1.3</IP:ADDRESS>
</PERSON>
</PEOPLE>
このXMLドキュメントをインポートするのに使用したXMLMapの内容を次に示します。名前空間要素に関する説明も示します。
<SXLEMAP name="Namespace" version="2.1">
<NAMESPACES count="3"> 1
<NS id="1" prefix="HOME">http://sample.url.org/home</NS> 2
<NS id="2" prefix="IP">http://sample.url.org/ip</NS>
<NS id="3" prefix="WORK">http://sample.url.org/work</NS>
</NAMESPACES>
<TABLE description="PERSON" name="PERSON"> 3
<TABLE-PATH syntax="XPath">/PEOPLE/PERSON</TABLE-PATH>
<COLUMN name="NAME"> 4
<PATH syntax="XPath">/PEOPLE/PERSON/NAME</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>13</LENGTH>
</COLUMN>
<COLUMN name="ADDRESS"> 4
<PATH syntax="XPathENR">/PEOPLE/PERSON/{1}ADDRESS</PATH> 5
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>16</LENGTH>
</COLUMN>
<COLUMN name="PHONE"> 4
<PATH syntax="XPathENR">/PEOPLE/PERSON/{1}PHONE</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>12</LENGTH>
</COLUMN>
<COLUMN name="ADDRESS1"> 4
<PATH syntax="XPathENR">/PEOPLE/PERSON/{3}ADDRESS</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>26</LENGTH>
</COLUMN>
<COLUMN name="PHONE1"> 4
<PATH syntax="XPathENR">/PEOPLE/PERSON/{3}PHONE</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>12</LENGTH>
</COLUMN>
<COLUMN name="ADDRESS2"> 4
<PATH syntax="XPathENR">/PEOPLE/PERSON/{2}ADDRESS</PATH>
<TYPE>character</TYPE>
<DATATYPE>string</DATATYPE>
<LENGTH>11</LENGTH>
</COLUMN>
</TABLE>
</SXLEMAP>
-
NAMESPACES要素には、XML名前空間を定義するためのNS要素が含まれています。count=属性で、3つの定義済みXML名前空間が存在することを指定します。
-
3つのNS要素は、一意のURIを参照することによりXML名前空間を定義します。id=属性で、3つのXML名前空間のID番号として1、2、3を指定します。prefix=属性で、HOME、WORK、IPの各名前を、参照されるURIに割り当てます。
-
このXMLMap TABLE要素は、PERSON反復要素のデータセット定義を含んでいます。
-
このXMLMap COLUMN要素は、PERSON内部にあるネストされている各要素の変数定義を含んでいます。これには、NAME、ADDRESS、PHONE、ADDRESS1、PHONE1、ADDRESS2が含まれます。
-
PATH要素内では、各COLUMN要素に対して、構文型をXPathENR (埋め込み型の名前空間参照を持つXPath)として指定します。この構文型は、構文がXPath規格に準拠していないことを示します。また、定義される要素に先立って、ID番号を場所パス内に含めます。ID番号は中かっこで囲みます。たとえば、ADDRESS要素のPATH要素は次のようになります。
<PATH syntax="XPathENR">/PEOPLE/PERSON/{1}ADDRESS</PATH>
次のSASステートメントは、XMLドキュメントをインポートして、NSSample.mapという名前のXMLMapを指定します。続くPRINTプロシジャで、結果として生成されるSASデータセットを表示します。
filename ns 'C:\My Documents\XML\NSSample.xml';
filename nsmap 'C:\My Documents\XML\NSSample.map';
libname ns xmlv2 xmlmap=nsmap;
proc print data=ns.person noobs;
run;