前のページ|次のページ

XMLMapに名前空間要素を挿入する

次の例では、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>
  1. NAMESPACES要素には、XML名前空間を定義するためのNS要素が含まれています。count=属性で、3つの定義済みXML名前空間が存在することを指定します。
  2. 3つのNS要素は、一意のURIを参照することによりXML名前空間を定義します。id=属性で、3つのXML名前空間のID番号として1、2、3を指定します。prefix=属性で、HOME、WORK、IPの各名前を、参照されるURIに割り当てます。
  3. このXMLMap TABLE要素は、PERSON反復要素のデータセット定義を含んでいます。
  4. このXMLMap COLUMN要素は、PERSON内部にあるネストされている各要素の変数定義を含んでいます。これには、NAME、ADDRESS、PHONE、ADDRESS1、PHONE1、ADDRESS2が含まれます。
  5. 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;
NS.PERSONのPRINTプロシジャ出力
NS.PERSONのPRINTプロシジャ出力
前のページ|次のページ|ページの先頭へ