[open-ils-commits] r12461 - in trunk/Open-ILS: src/perlmods/OpenILS/Application xsl (dbs)

svn at svn.open-ils.org svn at svn.open-ils.org
Fri Mar 6 20:57:16 EST 2009


Author: dbs
Date: 2009-03-06 20:57:15 -0500 (Fri, 06 Mar 2009)
New Revision: 12461

Added:
   trunk/Open-ILS/xsl/MARC21slim2FGDC.xsl
Modified:
   trunk/Open-ILS/src/perlmods/OpenILS/Application/SuperCat.pm
Log:
Add support for returning records in Federal Geographic Data Committee (FGDC) Content Standard for Digital Geospatial Metadata (CSDGM) format.

MARC21slim2FGDC.xsl was retrieved from http://oregonstate.edu/~reeset/marcedit/xslt/MARC21slim2FGDC.xsl and (as the comments in the stylesheet indicate) is available under a CC0 license.


Modified: trunk/Open-ILS/src/perlmods/OpenILS/Application/SuperCat.pm
===================================================================
--- trunk/Open-ILS/src/perlmods/OpenILS/Application/SuperCat.pm	2009-03-06 23:42:07 UTC (rev 12460)
+++ trunk/Open-ILS/src/perlmods/OpenILS/Application/SuperCat.pm	2009-03-07 01:57:15 UTC (rev 12461)
@@ -143,6 +143,18 @@
 	# and stash a transformer
 	$record_xslt{rss2}{xslt} = $_xslt->parse_stylesheet( $rss_xslt );
 
+	# parse the FGDC xslt ...
+	my $fgdc_xslt = $_parser->parse_file(
+		OpenSRF::Utils::SettingsClient
+			->new
+			->config_value( dirs => 'xsl' ).
+		"/MARC21slim2FGDC.xsl"
+	);
+	# and stash a transformer
+	$record_xslt{fgdc}{xslt} = $_xslt->parse_stylesheet( $fgdc_xslt );
+	$record_xslt{fgdc}{docs} = 'http://www.fgdc.gov/metadata/csdgm/index_html';
+	$record_xslt{fgdc}{schema_location} = 'http://www.fgdc.gov/metadata/fgdc-std-001-1998.xsd';
+
 	register_record_transforms();
 
 	return 1;

Added: trunk/Open-ILS/xsl/MARC21slim2FGDC.xsl
===================================================================
--- trunk/Open-ILS/xsl/MARC21slim2FGDC.xsl	                        (rev 0)
+++ trunk/Open-ILS/xsl/MARC21slim2FGDC.xsl	2009-03-07 01:57:15 UTC (rev 12461)
@@ -0,0 +1,737 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="marc">
+    <xsl:import href="MARC21slimUtils.xsl"/>
+    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
+
+<xsl:template match="/">
+    <metadata>
+        <xsl:apply-templates/>
+    </metadata>
+</xsl:template>
+
+    <xsl:template match="marc:record">
+        <idinfo>
+            <citation>
+                <citeinfo>
+
+                <xsl:if test="marc:datafield[@tag=100]/marc:subfield[@code='a']!=''">
+                    <origin><xsl:value-of select="marc:datafield[@tag=100]/marc:subfield[@code='a']" /></origin>
+                </xsl:if>
+
+                <xsl:if test="marc:datafield[@tag=110]/marc:subfield[@code='a']!=''">
+                    <origin><xsl:value-of select="marc:datafield[@tag=110]/marc:subfield[@code='a']" /></origin>
+                </xsl:if>
+
+                <xsl:if test="marc:datafield[@tag=111]/marc:subfield[@code='a']!=''">
+                    <origin><xsl:value-of select="marc:datafield[@tag=111]/marc:subfield[@code='a']" /></origin>
+                </xsl:if>
+
+                <pubdate><xsl:value-of select="marc:datafield[@tag=260]/marc:subfield[@code='c']" /></pubdate>
+                <pubtime><xsl:value-of select="marc:datafield[@tag=260]/marc:subfield[@code='c']" /></pubtime>
+
+                <title><xsl:value-of select="marc:datafield[@tag=245]/marc:subfield[@code='a']" /></title>
+
+                <edition><xsl:value-of select="marc:datafield[@tag=250]/marc:subfield[@code='a']" /></edition>
+
+                <pubinfo>
+                    <pubplace><xsl:value-of select="marc:datafield[@tag=260]/marc:subfield[@code='a']" /></pubplace>
+                    <publish><xsl:value-of select="marc:datafield[@tag=260]/marc:subfield[@code='b']" /></publish>
+                </pubinfo>
+
+                <xsl:for-each select="marc:datafield[@tag=500]">
+                    <othercit><xsl:value-of select="marc:subfield[@code='a']" /></othercit>
+                </xsl:for-each>
+
+                <xsl:for-each select="marc:datafield[@tag=856]">
+                    <onlink><xsl:value-of select="marc:subfield[@code='u']" /></onlink>
+                </xsl:for-each>
+
+                </citeinfo>
+            </citation>
+            <descript>
+                <xsl:for-each select="marc:datafield[@tag=520]">
+                    <abstract><xsl:value-of select="marc:subfield[@code='a']" /></abstract>
+                </xsl:for-each>
+            </descript>
+            <timeperd>
+            </timeperd>
+            <status>
+                <update><xsl:value-of select="marc:datafield[@tag=310]/marc:subfield[@code='c']" /></update>
+
+                <xsl:for-each select="marc:datafield[@tag=583]">
+                    <progress><xsl:value-of select="marc:subfield[@code='a']" /></progress>
+                </xsl:for-each>
+
+            </status>
+            <spdom>
+                <bounding>
+                    <westbc><xsl:value-of select="marc:datafield[@tag=034]/marc:subfield[@code='d']" /></westbc>
+                    <eastbc><xsl:value-of select="marc:datafield[@tag=034]/marc:subfield[@code='e']" /></eastbc>
+                    <northbc><xsl:value-of select="marc:datafield[@tag=034]/marc:subfield[@code='f']" /></northbc>
+                    <southbc><xsl:value-of select="marc:datafield[@tag=034]/marc:subfield[@code='g']" /></southbc>
+                </bounding>
+                <dsgpoly>
+                    <dsgpolyo>
+                        <grngpoin>
+                            <gringlat><xsl:value-of select="marc:datafield[@tag=034]/marc:subfield[@code='s']" /></gringlat>
+                            <gringlon><xsl:value-of select="marc:datafield[@tag=034]/marc:subfield[@code='t']" /></gringlon>
+                        </grngpoin>
+                    </dsgpolyo>
+                </dsgpoly>
+            </spdom>
+            <keywords>
+                <xsl:for-each select="marc:datafield[@tag=650]">
+                    <theme>
+                        <themekt><xsl:value-of select="marc:subfield[@code='2']" /></themekt>
+                        <themekey><xsl:value-of select="marc:subfield[@code='a']" /></themekey>
+                    </theme>
+                </xsl:for-each>
+
+                <xsl:for-each select="marc:datafield[@tag=651]">
+                    <place>
+                        <placekt><xsl:value-of select="marc:subfield[@code='2']" /></placekt>
+                        <placekey><xsl:value-of select="marc:subfield[@code='a']" /></placekey>
+                    </place>
+                </xsl:for-each>
+
+
+            </keywords>
+
+            <xsl:for-each select="marc:datafield[@tag=506]">
+                <acconst><xsl:value-of select="marc:subfield[@code='a']" /></acconst>
+            </xsl:for-each>
+
+            <xsl:for-each select="marc:datafield[@tag=540]">
+                <useconst><xsl:value-of select="marc:subfield[@code='a']" /></useconst>
+            </xsl:for-each>
+
+
+            <xsl:for-each select="marc:datafield[@tag=856]">
+                <browse>
+                    <browsen><xsl:value-of select="marc:subfield[@code='f']" /></browsen>
+                    <browsed><xsl:value-of select="marc:subfield[@code='z']" /></browsed>
+                </browse>
+            </xsl:for-each>
+
+            <xsl:for-each select="marc:datafield[@tag=700]|marc:datafield[@tag=710]|marc:datafield[@tag=711]">
+                <datacred><xsl:value-of select="marc:subfield[@code='a']" /></datacred>
+            </xsl:for-each>
+
+            <xsl:for-each select="marc:datafield[@tag=355]">
+                <secinfo>
+                    <secsys><xsl:value-of select="marc:subfield[@code='e']" /></secsys>
+                    <secclass><xsl:value-of select="marc:subfield[@code='a']" /></secclass>
+                    <sechandl><xsl:value-of select="marc:subfield[@code='b']" /></sechandl>
+                </secinfo>
+            </xsl:for-each>
+
+            <xsl:for-each select="marc:datafield[@tag=538]">
+                <native><xsl:value-of select="marc:subfield[@code='a']" /></native>
+            </xsl:for-each>
+
+            <crossref>
+            </crossref>
+
+        </idinfo>
+
+        <dataqual>
+            <attracc>
+                <attraccr><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='a']" /></attraccr>
+                <qattracc>
+                    <attraccv><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='b']" /></attraccv>
+                    <attracce><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='c']" /></attracce>
+                </qattracc>
+            </attracc>
+
+
+
+            <logic><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='d']" /></logic>
+            <complete><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='e']" /></complete>
+
+            <posacc>
+                <horizpa><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='f']" /></horizpa>
+                <qhorizpa>
+                    <horizpav><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='g']" /></horizpav>
+                    <horizpae><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='h']" /></horizpae>
+                </qhorizpa>
+
+                <vertacc>
+                    <vertaccr><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='i']" /></vertaccr>
+                    <qvertpa>
+                        <vertaccv><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='j']" /></vertaccv>
+                        <vertacce><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='k']" /></vertacce>
+                    </qvertpa>
+                </vertacc>
+            </posacc>
+
+            <lineage>
+
+                <srcinfo>
+                    <srcscale><xsl:value-of select="marc:datafield[@tag=786]/marc:subfield[@code='m']" /></srcscale>
+                    <typesrc><xsl:value-of select="marc:datafield[@tag=786]/marc:subfield[@code='h']" /></typesrc>
+                    <srctime>
+                        <srccurr><xsl:value-of select="marc:datafield[@tag=786]/marc:subfield[@code='j']" /></srccurr>
+                    </srctime>
+                    <srccitea><xsl:value-of select="marc:datafield[@tag=786]/marc:subfield[@code='p']" /></srccitea>
+                    <srccontr><xsl:value-of select="marc:datafield[@tag=786]/marc:subfield[@code='v']" /></srccontr>
+                </srcinfo>
+
+                <procstep>
+                    <procdesc><xsl:value-of select="marc:datafield[@tag=583]/marc:subfield[@code='a']" /></procdesc>
+                    <procdate><xsl:value-of select="marc:datafield[@tag=583]/marc:subfield[@code='c']" /></procdate>
+                    <proctime><xsl:value-of select="marc:datafield[@tag=583]/marc:subfield[@code='c']" /></proctime>
+                    <srcprod><xsl:value-of select="marc:datafield[@tag=583]/marc:subfield[@code='b']" /></srcprod>
+
+                </procstep>
+            </lineage>
+
+            <cloud><xsl:value-of select="marc:datafield[@tag=514]/marc:subfield[@code='m']" /></cloud>
+
+
+        </dataqual>
+
+        <spdoinfo>
+            <indspref><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='i']" /></indspref>
+            <direct><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='a']" /></direct>
+            <xsl:variable name="object" select="marc:datafield[@tag=352]/marc:subfield[@code='a']" />
+
+            <xsl:if test="contains(translate($object,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'raster')=false">
+
+                <ptvctinf>
+                    <sdtsterm>
+                        <sdtstype><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='b']" /></sdtstype>
+                        <ptvctcnt><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='c']" /></ptvctcnt>
+                    </sdtsterm>
+
+                    <vpfterm>
+                        <vpflevel><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='g']" /></vpflevel>
+                        <vpfinfo><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='b']" /></vpfinfo>
+                    </vpfterm>
+                </ptvctinf>
+            </xsl:if>
+
+            <xsl:if test="contains(translate($object,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'raster')">
+                <rastinfo>
+                    <rasttype><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='b']" /></rasttype>
+                    <rowcount><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='d']" /></rowcount>
+                    <colcount><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='e']" /></colcount>
+                    <vrtcount><xsl:value-of select="marc:datafield[@tag=352]/marc:subfield[@code='f']" /></vrtcount>
+                </rastinfo>
+            </xsl:if>
+        </spdoinfo>
+
+        <spref>
+            <xsl:for-each select="marc:datafield[@tag=342]">
+                <!--This is the branch for the horizontal grid system-->
+                <xsl:if test="@ind1=0">
+                    <horizsys>
+                        <geograph>
+                            <latres><xsl:value-of select="marc:subfield[@code='c']" /></latres>
+                            <longres><xsl:value-of select="marc:subfield[@code='d']" /></longres>
+                            <geogunit><xsl:value-of select="marc:subfield[@code='b']" /></geogunit>
+                        </geograph>
+
+                        <xsl:if test="@ind2=3">
+                            <!--Planar system-->
+                            <planar>
+                                <mapproj>
+
+                                   <mapprojn><xsl:value-of select="marc:subfield[@code='a']" /></mapprojn>
+                                   <xsl:variable name="mapproj" select="marc:subfield[@code='a']" />
+
+                                    <xsl:if test="contains(translate($mapproj,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'albers')">
+                                        <albers>
+                                            <mapprojp>
+                                                <stdparll><xsl:value-of select="marc:subfield[@code='e']" /></stdparll>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </albers>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'azimuthal equidistant')">
+                                        <azimequi>
+                                            <mapprojp>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </azimequi>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'equidistant conic')">
+                                        <equicon>
+                                            <mapprojp>
+                                                <stdparll><xsl:value-of select="marc:subfield[@code='e']" /></stdparll>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </equicon>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'equirectangular')">
+                                        <equirect>
+                                            <mapprojp>
+                                                <stdparll><xsl:value-of select="marc:subfield[@code='e']" /></stdparll>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </equirect>
+                                    </xsl:if>
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'general vertical near')">
+                                        <gvnsp>
+                                            <mapprojp>
+                                                <heightpt><xsl:value-of select="marc:subfield[@code='l']" /></heightpt>
+                                                <longpc><xsl:value-of select="marc:subfield[@code='g']" /></longpc>
+                                                <latprjc><xsl:value-of select="marc:subfield[@code='h']" /></latprjc>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </gvnsp>
+                                    </xsl:if>
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'gnomonic')">
+                                        <gnomonic>
+                                            <mapprojp>
+                                                <longpc><xsl:value-of select="marc:subfield[@code='g']" /></longpc>
+                                                <latprjc><xsl:value-of select="marc:subfield[@code='h']" /></latprjc>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </gnomonic>
+                                    </xsl:if>
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'lambert azimuthal')">
+                                        <lamberta>
+                                            <mapprojp>
+                                                <longpc><xsl:value-of select="marc:subfield[@code='g']" /></longpc>
+                                                <latprjc><xsl:value-of select="marc:subfield[@code='h']" /></latprjc>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </lamberta>
+                                    </xsl:if>
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'lambert conformal')">
+                                        <lambertc>
+                                            <mapprojp>
+                                                <stdparll><xsl:value-of select="marc:subfield[@code='e']" /></stdparll>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </lambertc>
+                                    </xsl:if>
+
+                                   <xsl:if test="translate($mapproj,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='Mercator'">
+                                        <mercator>
+                                            <mapprojp>
+                                                <xsl:if test="@ind2=1">
+                                                    <stdparll><xsl:value-of select="marc:subfield[@code='e']" /></stdparll>
+                                                </xsl:if>
+                                                <xsl:if test="@ind1=1">
+                                                    <sfequat><xsl:value-of select="marc:subfield[@code='k']" /></sfequat>
+                                                </xsl:if>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </mercator>
+                                    </xsl:if>
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'alaska')">
+                                        <modsak>
+                                            <mapprojp>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </modsak>
+                                    </xsl:if>
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'miller cylindrical')">
+                                        <miller>
+                                            <mapprojp>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </miller>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'oblique mercator')">
+                                        <obqmerc>
+                                            <mapprojp>
+                                                <xsl:if test="@ind1=1">
+                                                    <sfctrlin><xsl:value-of select="marc:subfield[@code='k']" /></sfctrlin>
+                                                    <obqlazim>
+                                                        <azimangl><xsl:value-of select="marc:subfield[@code='m']" /></azimangl>
+                                                        <azimptl><xsl:value-of select="marc:subfield[@code='n']" /></azimptl>
+                                                    </obqlazim>
+                                                </xsl:if>
+
+                                                <xsl:if test="@ind2=1">
+                                                    <!--This should repeat, but I haven't set this up-->
+                                                    <obqlpt>
+                                                        <obqllat><xsl:value-of select="marc:subfield[@code='e']" /></obqllat>
+                                                        <obqllong><xsl:value-of select="marc:subfield[@code='f']" /></obqllong>
+                                                    </obqlpt>
+                                                    <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                    <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                    <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                                </xsl:if>
+
+                                            </mapprojp>
+                                        </obqmerc>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'orthographic')">
+                                        <orthogr>
+                                            <mapprojp>
+                                                <longpc><xsl:value-of select="marc:subfield[@code='g']" /></longpc>
+                                                <latprjc><xsl:value-of select="marc:subfield[@code='h']" /></latprjc>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </orthogr>
+                                    </xsl:if>
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'polar stereographic')">
+                                        <polarst>
+                                            <mapprojp>
+                                                <svlong><xsl:value-of select="marc:subfield[@code='n']" /></svlong>
+                                                <xsl:if test="@ind1=1">
+                                                    <stdparll><xsl:value-of select="marc:subfield[@code='e']" /></stdparll>
+                                                </xsl:if>
+
+                                                <xsl:if test="@ind2=1">
+                                                    <sfprjorg><xsl:value-of select="marc:subfield[@code='k']" /></sfprjorg>
+                                                </xsl:if>
+
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </polarst>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'polyconic')">
+                                        <polycon>
+                                            <mapprojp>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </polycon>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'robinson')">
+                                        <robinson>
+                                            <mapprojp>
+                                                <longpc><xsl:value-of select="marc:subfield[@code='g']" /></longpc>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </robinson>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'sinusoidal')">
+                                        <sinusoid>
+                                            <mapprojp>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </sinusoid>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'space oblique mercator')">
+                                        <spaceobq>
+                                            <mapprojp>
+                                                <landsat><xsl:value-of select="marc:subfield[@code='o']" /></landsat>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </spaceobq>
+                                    </xsl:if>
+
+
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'stereographic')">
+                                        <stereo>
+                                            <mapprojp>
+                                                <longpc><xsl:value-of select="marc:subfield[@code='g']" /></longpc>
+                                                <latprjc><xsl:value-of select="marc:subfield[@code='h']" /></latprjc>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </stereo>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'transverse mercator')">
+                                        <transmer>
+                                            <mapprojp>
+                                                <sfctrmer><xsl:value-of select="marc:subfield[@code='k']" /></sfctrmer>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </transmer>
+                                    </xsl:if>
+
+                                    <xsl:if test="contains(translate($mapproj, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'van der grinten')">
+                                        <vdgrin>
+                                            <mapprojp>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                            </mapprojp>
+                                        </vdgrin>
+                                    </xsl:if>
+
+
+                                </mapproj>
+                            </planar>
+                        </xsl:if>
+                        <xsl:if test="@ind2=2">
+                            <!--Grid Coordinate system-->
+                            <gridsys>
+                                <gridsysn><xsl:value-of select="marc:subfield[@code='a']" /></gridsysn>
+                                <xsl:variable name="gridname" select="marc:subfield[@code='a']" />
+                                <xsl:if test="contains(translate($gridname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'universal transverse mercator')">
+                                    <utm>
+                                        <utmzone><xsl:value-of select="marc:subfield[@code='p']" /></utmzone>
+                                        <mapprojp>
+                                                <sfctrmer><xsl:value-of select="marc:subfield[@code='k']" /></sfctrmer>
+                                                <longcm><xsl:value-of select="marc:subfield[@code='g']" /></longcm>
+                                                <latprjo><xsl:value-of select="marc:subfield[@code='h']" /></latprjo>
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                        </mapprojp>
+                                    </utm>
+                                </xsl:if>
+
+                                <xsl:if test="contains(translate($gridname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'), 'universal polar stereographic')">
+                                    <ups>
+                                        <upszone><xsl:value-of select="marc:subfield[@code='p']" /></upszone>
+                                        <mapprojp>
+                                                <svlong><xsl:value-of select="marc:subfield[@code='n']" /></svlong>
+                                                <xsl:if test="@ind1=1">
+                                                    <stdparll><xsl:value-of select="marc:subfield[@code='e']" /></stdparll>
+                                                </xsl:if>
+
+                                                <xsl:if test="@ind2=1">
+                                                    <sfprjorg><xsl:value-of select="marc:subfield[@code='k']" /></sfprjorg>
+                                                </xsl:if>
+
+                                                <feast><xsl:value-of select="marc:subfield[@code='i']" /></feast>
+                                                <fnorth><xsl:value-of select="marc:subfield[@code='j']" /></fnorth>
+                                        </mapprojp>
+                                    </ups>
+                                </xsl:if>
+
+                                <xsl:if test="contains(translate($gridname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'1927')">
+                                    <spcs>
+                                        <spcszone>1927</spcszone>
+                                    </spcs>
+                                </xsl:if>
+
+                                <xsl:if test="contains(translate($gridname, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'1983')">
+                                    <spcs>
+                                        <spcszone>1983</spcszone>
+                                    </spcs>
+                                </xsl:if>
+
+                                <xsl:if test="contains(translate($gridname,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'arc')">
+                                    <arcsys>
+                                        <arczone><xsl:value-of select="marc:subfield[@code='p']" /></arczone>
+                                    </arcsys>
+                                </xsl:if>
+
+                                <xsl:if test="translate(contains($gridname,'other'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')">
+                                    <othergrd>
+                                    </othergrd>
+                                </xsl:if>
+                            </gridsys>
+                        </xsl:if>
+
+                        <planci>
+                            <plance><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='a']" /></plance>
+                            <coordrep>
+                                <absres><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='c']" /></absres>
+                                <ordres><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='d']" /></ordres>
+                            </coordrep>
+                            <distbrep>
+                                <distres><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='e']" /></distres>
+                                <bearres><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='f']" /></bearres>
+                                <bearunit><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='a']" /></bearunit>
+                                <bearrefd><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='n']" /></bearrefd>
+                                <bearrefm><xsl:value-of select="marc:datafield[@tag=343]/marc:subfield[@code='i']" /></bearrefm>
+                            </distbrep>
+                        </planci>
+
+
+                    </horizsys>
+                </xsl:if>
+                <xsl:if test="@ind1=1">
+                    <vertdef>
+                        <altsys>
+                            <altdatum><xsl:value-of select="marc:subfield[@code='a']" /></altdatum>
+                            <altres><xsl:value-of select="marc:field[@code='t']" /></altres>
+                            <altunits><xsl:value-of select="marc:subfield[@code='b']" /></altunits>
+                            <altenc><xsl:value-of select="marc:subfield[@code='u']" /></altenc>
+                        </altsys>
+
+
+                    </vertdef>
+
+                </xsl:if>
+
+
+            </xsl:for-each>
+
+        </spref>
+
+
+        <eainfo>
+            <xsl:for-each select="marc:datafield[@tag=552]">
+                <detailed>
+
+                    <enttype>
+                        <enttypl><xsl:value-of select="marc:subfield[@code='a']" /></enttypl>
+                        <enttypd><xsl:value-of select="marc:subfield[@code='b']" /></enttypd>
+                    </enttype>
+
+                    <attr>
+                        <attrlabl><xsl:value-of select="marc:subfield[@code='c']" /></attrlabl>
+                        <attrdef><xsl:value-of select="marc:subfield[@code='d']" /></attrdef>
+                        <attrdomv>
+                            <edom>
+                                <edomv><xsl:value-of select="marc:subfield[@code='e']" /></edomv>
+                                <edomvd><xsl:value-of select="marc:subfield[@code='f']" /></edomvd>
+                            </edom>
+
+                            <rdom>
+                                <rdommin><xsl:value-of select="substring-before(marc:subfield[@code='g'],'-')" /></rdommin>
+                                <rdommax><xsl:value-of select="substring-after(marc:subfield[@code='g'],'-')" /></rdommax>
+                            </rdom>
+                            <codesetd>
+                                <codesets><xsl:value-of select="marc:subfield[@code='h']" /></codesets>
+                            </codesetd>
+                            <udom><xsl:value-of select="marc:subfield[@code='i']" /></udom>
+                        </attrdomv>
+
+                        <attrunit><xsl:value-of select="marc:subfield[@code='j']" /></attrunit>
+                        <begdatea><xsl:value-of select="substring-before(marc:subfield[@code='k'],'-')" /></begdatea>
+                        <enddatea><xsl:value-of select="substring-after(marc:subfield[@code='k'],'-')" /></enddatea>
+                        <attrvai>
+                            <attrva><xsl:value-of select="marc:subfield[@code='l']" /></attrva>
+                            <attrvae><xsl:value-of select="marc:subfield[@code='m']" /></attrvae>
+                        </attrvai>
+
+                        <attrmfrq><xsl:value-of select="marc:subfield[@code='n']" /></attrmfrq>
+                    </attr>
+
+                    <overview>
+                        <eaover><xsl:value-of select="marc:subfield[@code='o']" /></eaover>
+                        <eadetcit><xsl:value-of select="marc:subfield[@code='p']" /></eadetcit>
+                    </overview>
+
+                </detailed>
+            </xsl:for-each>
+
+        </eainfo>
+
+
+        <distinfo>
+            <xsl:for-each select="marc:datafield[@tag=037]">
+                <stdorder>
+                    <nondig><xsl:value-of select="marc:subfield[@code='f']" /></nondig>
+                    <digform>
+                        <digtinfo>
+                            <formname><xsl:value-of select="marc:subfield[@code='g']" /></formname>
+                            <formspec><xsl:value-of select="marc:subfield[@code='h']" /></formspec>
+                            <formcont><xsl:value-of select="marc:subfield[@code='n']" /></formcont>
+                        </digtinfo>
+                        <digtopt>
+                            <onlinopt>
+                                 <computer>
+                                    <dialinst>
+                                        <lowbps><xsl:value-of select="substring-before(marc:datafield[@tag='856']/marc:subfield[@code='j'],'-')" /></lowbps>
+                                        <highbps><xsl:value-of select="substring-after(marc:datafield[@tag='856']/marc:subfield[@code='j'],'-')" /></highbps>
+                                        <numdata><xsl:value-of select="marc:datafield[@tag='856']/marc:subfield[@code='r']" /></numdata>
+                                        <compress><xsl:value-of select="marc:datafield[@tag='856']/marc:subfield[@code='c']" /></compress>
+                                        <dialtel><xsl:value-of select="marc:datafield[@tag='856']/marc:subfield[@code='b']" /></dialtel>
+                                        <dialfile><xsl:value-of select="marc:datafield[@tag='856']/marc:subfield[@code='f']" /></dialfile>
+                                    </dialinst>
+                                    <accinstr><xsl:value-of select="marc:datafield[@tag='856']/marc:subfield[@code='i']" /></accinstr>
+                                </computer>
+                            </onlinopt>
+                        </digtopt>
+                    </digform>
+                    <custom><xsl:value-of select="marc:subfield[@code='c']" /></custom>
+                </stdorder>
+                <availabl>
+                    <timeinfo>
+                        <sngdate>
+                            <caldate><xsl:value-of select="marc:datafield[@tag=045]/marc:subfield[@code='b']" /></caldate>
+                        </sngdate>
+
+                    </timeinfo>
+                </availabl>
+            </xsl:for-each>
+        </distinfo>
+
+        <metainfo>
+            <metd><xsl:value-of select="marc:datafield[@tag=583]/marc:subfield[@code='c']" /></metd>
+            <metrd><xsl:value-of select="marc:datafield[@tag=583]/marc:subfield[@code='z']" /></metrd>
+            <metc>
+                <cntinfo>
+                    <cntperp>
+                        <cntper><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='p']" /></cntper>
+                        <cntorg><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='q']" /></cntorg>
+                    </cntperp>
+                    <cntaddr>
+                        <addrtype><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='i']" /></addrtype>
+                        <address><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='a']" /></address>
+                        <city><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='b']" /></city>
+                        <state><xsl:value-of select="substring-before(marc:datafield[@tag=270]/marc:subfield[@code='c'],',')" /></state>
+                        <postal><xsl:value-of select="substring-after(marc:datafield[@tag=270]/marc:subfield[@code='c'],',')" /></postal>
+                        <country><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='d']" /></country>
+                    </cntaddr>
+                    <cntvoice><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='k']" /></cntvoice>
+                    <cnttdd><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='h']" /></cnttdd>
+                    <cntemail><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='m']" /></cntemail>
+                    <hours><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='r']" /></hours>
+                    <cntinst><xsl:value-of select="marc:datafield[@tag=270]/marc:subfield[@code='z']" /></cntinst>
+                </cntinfo>
+            </metc>
+            <metstdn><xsl:value-of select="marc:datafield[@tag=583]/marc:subfield[@code='f']" /></metstdn>
+            <metac><xsl:value-of select="marc:datafield[@tag=506]/marc:subfield[@code='a']" /></metac>
+        </metainfo>
+
+
+
+    </xsl:template>
+</xsl:stylesheet>
+<!--http://creativecommons.org/licenses/zero/1.0/
+Creative Commons 1.0 Universal
+The person who associated a work with this document has dedicated this work to the 
+Commons by waiving all of his or her rights to the work under copyright law and all 
+related or neighboring legal rights he or she had in the work, to the extent allowable by law. 
+-->



More information about the open-ils-commits mailing list