This example illustrates
the XMLMap namespace elements. The XMLMap namespace elements enable
you to import an XML document with like-named elements that are qualified
with XML namespaces. The XMLMap namespace elements maintain XML namespaces
from the imported XML document to export an XML document with namespaces
from the SAS data set.
Here is an XML document
named NSSample.xml to be imported. The XML document contains three
XML namespaces. The namespaces distinguish ADDRESS elements by qualifying
them with references to unique URIs. The ADDRESS elements are highlighted
below in the first PERSON repeating element:
<?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>
Here is the XMLMap that
was used to import the XML document. Notations describe the namespace
elements.
<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>
-
A NAMESPACES element
contains NS elements for defining XML namespaces. The count= attribute
specifies that there are three defined XML namespaces.
-
Three NS elements define
the XML namespaces by referencing unique URIs. The id= attribute specifies
the identification numbers 1, 2, and 3 for the three XML namespaces.
The prefix= attribute assigns the names HOME, WORK, and IP to the
referenced URIs.
-
The XMLMap TABLE element
contains the data set definition for the PERSON repeating element.
-
XMLMap COLUMN elements
contain variable definitions for each nested element within PERSON,
which includes NAME, ADDRESS, PHONE, ADDRESS1, PHONE1, and ADDRESS2.
-
In the PATH element
for each COLUMN element, the type of syntax is specified as XPathENR
(XPath with Embedded Namespace Reference). This type indicates that
the syntax is not compliant with the XPath specification. In addition,
the identification number is included in the location path preceding
the element that is being defined. The identification number is enclosed
in braces. For example, this is the PATH element for the ADDRESS element:
<PATH
syntax="XPathENR">/PEOPLE/PERSON/{1}ADDRESS</PATH>
.
The following SAS statements
import the XML document and specify an XMLMap named NSSample.map.
The PRINT procedure shows the resulting SAS data set:
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;
PRINT Procedure Output for NS.PERSON