diff DVN-web/installer/dvninstall/config/mif2ddi.xsl @ 6:1b2188262ae9

adding the installer.
author "jurzua <jurzua@mpiwg-berlin.mpg.de>"
date Wed, 13 May 2015 11:50:21 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DVN-web/installer/dvninstall/config/mif2ddi.xsl	Wed May 13 11:50:21 2015 +0200
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.icpsr.umich.edu/DDI" xmlns:a="http://www.thedataweb.org/mif" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="a">
+    <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
+    <xsl:strip-space elements="*"/>
+    <xsl:param name="schemaLocation">http://www.icpsr.umich.edu/DDI/Version1-3.xsd</xsl:param>
+    <xsl:param name="fileDscrId" select="concat('ID',generate-id())"/>
+    <!-- *** -->
+    <!-- 	Default Template to start processng of MIF Document    -->
+    <!-- *** -->
+    <xsl:template match="/">
+            <xsl:choose>
+                <xsl:when test="a:mifSet">
+                    <xsl:apply-templates select="a:mifSet/a:mif[position() = 1]"/>
+    		    <!-- TODO: Deal with multiple docs in a mifset-->
+                </xsl:when>
+                <xsl:otherwise>
+                    <xsl:apply-templates select="a:mif"/>
+                </xsl:otherwise>
+            </xsl:choose>
+    </xsl:template>
+    
+    <xsl:template match="a:mif">
+	<!-- Nest all in a codebook element -->
+        <xsl:element name="codeBook" namespace="http://www.icpsr.umich.edu/DDI">
+            <xsl:attribute name="xsi:schemaLocation"><xsl:text>http://www.icpsr.umich.edu/DDI </xsl:text>
+		<xsl:value-of select="$schemaLocation"/></xsl:attribute>
+            <docDscr>
+            	<citation>
+        	    <xsl:call-template name="titlStmt"/>
+        	    	<xsl:if test="normalize-space(a:documentDescription/a:producer) != '' or normalize-space(a:documentDescription/a:producer/@prodDate) != ''">
+                    	<prodStmt>
+                    		<xsl:if test="normalize-space(a:documentDescription/a:producer) != ''">
+                         		<producer>
+                                	<xsl:value-of select="normalize-space(a:documentDescription/a:producer)"/>
+                          		</producer>
+                          	</xsl:if>
+                          	<xsl:if test="normalize-space(a:documentDescription/a:producer/@prodDate) != ''">
+                          		<prodDate>
+                          			<xsl:attribute name="date"><xsl:value-of select="normalize-space(a:documentDescription/a:producer/@prodDate)"/></xsl:attribute>
+                          		</prodDate>
+                          	</xsl:if>
+                    	</prodStmt>
+                    </xsl:if>
+                    <distStmt>
+                    <!--  We are adding this temporarily. Census should provide this information in the MIF.  -->
+           			 	<distrbtr>
+               				<ExtLink URI="http://www.thedataweb.org/images/ferrett_dataweb.jpg" title="Logo" role="image"/>
+                        	U.S. Census Bureau
+                        	<ExtLink URI="http://www.thedataweb.org/index.html" title="URL"/>
+            			</distrbtr>
+        			 </distStmt>
+                    <xsl:if test="normalize-space(a:documentDescription/a:version/@versionnum) != ''">
+                    	<verStmt>
+                        	<version>
+                             <xsl:attribute name="date"><xsl:value-of select="normalize-space(a:documentDescription/a:version/@modDate)"/></xsl:attribute>
+                             <xsl:value-of select="normalize-space(a:documentDescription/a:version/@versionnum)"/>
+                        	 </version>
+                    	</verStmt>
+                    </xsl:if>
+                    <!--  Add holdings for all studies from thedataweb -->
+                    <holdings URI="http://www.thedataweb.org"/>
+                </citation>
+            </docDscr>
+            <stdyDscr>
+            	<citation>
+        	    <xsl:call-template name="titlStmt"/>
+                    <xsl:if test="normalize-space(a:dataSet/a:providerInfo) != '' and (normalize-space(a:dataSet/a:providerInfo/@name) != 0 or normalize-space(a:dataSet/a:providerInfo/@name) != '' )">
+                    	<rspStmt>
+                         	<AuthEnty>
+                            	 <xsl:value-of select="normalize-space(a:dataSet/a:providerInfo/@name)"/>
+                    	     	<xsl:text>:</xsl:text>
+                             	<xsl:value-of select="normalize-space(a:dataSet/a:providerInfo)"/>
+                        	</AuthEnty>   
+                    	</rspStmt>
+                    </xsl:if>
+                    <xsl:if test="normalize-space(a:dataSet/a:sponsorInfo/@name) != '' or normalize-space(a:dataSet/a:sponsorInfo/@imageUrl) != '' or normalize-space(a:dataSet/a:sponsorInfo/@homepageUrl) != ''">
+                    <distStmt>
+                       <distrbtr>
+                        <xsl:if test="normalize-space(a:dataSet/a:sponsorInfo/@imageUrl) != ''">
+                       		<ExtLink title="Logo" role="image">
+                       		<xsl:attribute name="URI"><xsl:value-of select="normalize-space(a:dataSet/a:sponsorInfo/@imageUrl)"/></xsl:attribute>
+                       	    </ExtLink>
+                       	</xsl:if>
+                        	<xsl:value-of select="normalize-space(a:dataSet/a:sponsorInfo/@name)"/>
+                        <xsl:if test="normalize-space(a:dataSet/a:sponsorInfo/@homepageUrl) != ''">
+                        	<ExtLink title="URL">
+                       		<xsl:attribute name="URI"><xsl:value-of select="normalize-space(a:dataSet/a:sponsorInfo/@homepageUrl)"/></xsl:attribute>
+                       	    </ExtLink>
+                        </xsl:if>
+                       </distrbtr>
+                    </distStmt>
+                    </xsl:if>
+                </citation>
+                <stdyInfo>
+		    <subject>
+			<topcClas source="archive" vocab="TheDataWeb">TheDataWeb</topcClas> 
+			<!-- TODO: Grab variable concepts and put them here --> 
+		    </subject>
+		    	<xsl:if test="normalize-space(a:dataSet/a:abstract) != ''">
+                    <abstract>
+						<xsl:value-of select="a:dataSet/a:abstract"/>	
+                    </abstract>
+                 </xsl:if>
+                 <xsl:if test="normalize-space(a:dataSet/a:collectDate/@end) != '' or normalize-space(a:dataSet/a:collectDate/@start) != '' or  normalize-space(a:dataSet/a:category) != '' ">               
+                    <sumDscr>
+                       <xsl:if test="normalize-space(a:dataSet/a:collectDate/@end) != '' or normalize-space(a:dataSet/a:collectDate/@start) != ''">
+                         <collDate>
+                             <xsl:attribute name="date"><xsl:value-of select="normalize-space(a:dataSet/a:collectDate/@start)"/></xsl:attribute>
+			    			 <xsl:attribute name="event">start</xsl:attribute>
+						</collDate>
+                         <collDate>
+                            <xsl:attribute name="date"><xsl:value-of select="normalize-space(a:dataSet/a:collectDate/@end)"/></xsl:attribute>
+			     <xsl:attribute name="event">end</xsl:attribute>
+                         </collDate>
+                         </xsl:if>
+                         <xsl:if test="normalize-space(a:dataSet/a:category) != ''">
+                         <dataKind>
+                              <xsl:value-of select="normalize-space(a:dataSet/a:category)"/>
+                         </dataKind>
+                         </xsl:if>
+                    </sumDscr>
+                  </xsl:if>
+                </stdyInfo>
+
+		<!-- The original MIFs should have some text in restrictions explaining where to get the data. -->
+        
+        	<xsl:if test="normalize-space(a:dataSet/a:restriction/@originaluri) != ''">   
+			<dataAccs>
+					<useStmt>
+            			<specPerm>
+            			<xsl:attribute name="URI"><xsl:value-of select="normalize-space(a:dataSet/a:restriction/@originaluri)"/></xsl:attribute>
+            			You must agree to the terms and conditions described here: <xsl:value-of select="normalize-space(a:dataSet/a:restriction/@originaluri)"/></specPerm>
+            		</useStmt>     	
+ 			</dataAccs>
+			</xsl:if>
+
+            </stdyDscr>
+            <xsl:if test="a:dataSet/a:extractionHost">
+               <fileDscr>
+                    <xsl:attribute name="ID"><xsl:value-of select="$fileDscrId"/></xsl:attribute>
+                    <xsl:attribute name="URI">
+			<!-- TODO: Add virtualid match for round-tripping -->
+			<!-- TODO: Need to url-encode these -->
+			<!-- TODO: Need to  add port-->
+			<xsl:value-of select="a:dataSet/a:extractionHost/@uri"/>
+			<xsl:text>/TheDataWeb_Tabulation/VDCRepositoryServlet/</xsl:text>	
+			<xsl:value-of select="a:dataSet/a:shortName"/>
+			<xsl:text>/</xsl:text>	
+			<xsl:value-of select="a:dataSet/a:subsurveyName"/>
+			<xsl:text>/</xsl:text>	
+			<xsl:value-of select="a:dataSet/a:component"/>
+			<xsl:text>/</xsl:text>	
+			<xsl:value-of select="a:dataSet/a:instance"/>
+			<xsl:text>/</xsl:text>	
+			<xsl:value-of select="a:dataSet/a:extractionHost/@type"/>
+                    </xsl:attribute>
+                    <fileTxt>
+                        <fileName>Data File</fileName>
+                        <fileCont><xsl:value-of select="a:dataSet/a:longName"/></fileCont>
+                    </fileTxt>                 
+               </fileDscr>
+            </xsl:if>
+            <xsl:apply-templates select="a:variables"/>
+        </xsl:element>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                        Variables Template: matches variable section of MIF Document                                      ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:variables">
+        <dataDscr>
+            <xsl:apply-templates select="a:var"/>
+        </dataDscr>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                        Variable Template: transforms each MIF Variable to a DDI Variable                                 ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:var">
+        <var>
+            <xsl:attribute name="name"><xsl:value-of select="@id"/></xsl:attribute>
+            <xsl:attribute name="ID"><xsl:value-of select="@id"/></xsl:attribute>
+            <xsl:if test="./a:type/@isweight = 'Y'">
+                <xsl:attribute name="wgt">wgt</xsl:attribute>
+            </xsl:if>
+            <xsl:if test="./a:type/@weightvar">
+                <xsl:attribute name="wgt-var"><xsl:value-of select="./a:type/@weightvar"/></xsl:attribute>
+            </xsl:if>
+            <xsl:if test="./a:type/@decimal and ./a:type/@decimal > 0">
+                <xsl:attribute name="dcml"><xsl:value-of select="./a:type/@decimal"/></xsl:attribute>
+            </xsl:if>
+            <xsl:if test="./a:type/@datatype and ./a:type/@decimal">
+                <xsl:attribute name="intrvl"><xsl:choose>
+                    <xsl:when test="(./a:type/@datatype = 'numeric' or ./a:type/@datatype = 'impliedDecimal') and ./a:type/@decimal > 0 ">contin</xsl:when>
+                    <xsl:when test="./a:type/@datatype = 'numeric' and ./a:type/@decimal = 0 and ./a:values">discrete</xsl:when>
+                    <xsl:otherwise>contin</xsl:otherwise>
+                </xsl:choose></xsl:attribute>
+            </xsl:if>
+            <location fileid="{$fileDscrId}"/>
+            <xsl:apply-templates select="a:label"/>
+            <xsl:apply-templates select="a:security"/>
+            <xsl:apply-templates select="a:values"/>
+            <xsl:apply-templates select="a:universe"/>
+            <!--xsl:apply-templates select="a:longDscr"/-->
+            <!--xsl:apply-templates select="a:type/a:categories/a:catValu"/-->
+            <!--xsl:apply-templates select="a:concept"/-->
+            <!-- DDI MAPPING NOTE: codeBook/stdyDescr/var/varFormat, var[-->
+	    <varFormat>
+	    <xsl:attribute name="type">
+               <xsl:choose>
+                 <xsl:when test="./a:type[@datatype='floatingPoint']">numeric</xsl:when>
+                 <xsl:when test="./a:type[@datatype='numeric']">numeric</xsl:when>
+                 <xsl:when test="./a:type[@datatype='impliedDecimal']">numeric</xsl:when>
+                 <xsl:otherwise>character</xsl:otherwise>
+                </xsl:choose>
+            </xsl:attribute>
+	    <xsl:attribute name="formatname"><xsl:value-of select="./a:type[@datatype]"/></xsl:attribute>
+	    <xsl:attribute name="schema">other</xsl:attribute>
+	    </varFormat>
+            <xsl:apply-templates select="a:period"/>
+            <xsl:apply-templates select="a:attachment"/>
+            <xsl:apply-templates select="a:synonyms"/>
+        </var>
+    </xsl:template>
+    <xsl:template match="a:synonyms">
+        <xsl:for-each select="a:synonym">
+            <notes type="mif/variables/var/synonyms/synonym">
+                <xsl:value-of select="."/>
+            </notes>
+        </xsl:for-each>
+    </xsl:template>
+    <xsl:template match="a:attachment">
+        <notes type="mif/variables/var/attachment[{position()}]/@type">
+            <xsl:value-of select="@type"/>
+        </notes>
+        <notes type="mif/variables/var/attachment[{position()}]/@title">
+            <xsl:value-of select="@title"/>
+        </notes>
+        <notes type="mif/variables/var/attachment[{position()}]/@uri">
+            <xsl:value-of select="@uri"/>
+        </notes>
+        <notes type="mif/variables/var/attachment[{position()}]/text()">
+            <xsl:value-of select="."/>
+        </notes>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                        Long Description Template                                                                                                 ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:longDscr">
+        <xsl:if test=". != ''">
+        <txt>
+            <xsl:value-of select="."/>
+        </txt>
+        </xsl:if>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                        values Templates                                                                                                             ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:values">
+    	<xsl:variable name="iNodes" select="count(a:item)"/>
+    	<xsl:variable name="rNodes" select="count(a:range)"/>
+    	
+    	<xsl:if test="$rNodes > 0 or $iNodes > 0">
+    		<valrng>
+    			<xsl:if test="$rNodes > 0">
+    				<xsl:apply-templates select="a:range" mode="range"/>
+    			</xsl:if>
+    			<xsl:if test="$iNodes > 0">
+    				<xsl:apply-templates select="a:item" mode="items"/>
+    			</xsl:if>
+    			<xsl:if test="$rNodes > 0">
+    				<key><xsl:text>&#xA;</xsl:text>
+    					<xsl:apply-templates select="a:range" mode="rkey"/>
+    				</key>
+    			</xsl:if>
+
+    		</valrng>
+    	</xsl:if>
+    	<xsl:if test="$iNodes > 0">
+    		<xsl:apply-templates select="a:item" mode="categry"/>
+    	</xsl:if>
+    </xsl:template>
+    
+    
+    <xsl:template match="a:range" mode="range">
+            <range>
+                <xsl:attribute name="min"><xsl:value-of select="./@min"/></xsl:attribute>
+                <xsl:attribute name="max"><xsl:value-of select="./@max"/></xsl:attribute>
+                <!-- xsl:value-of select="."/ -->
+            </range>
+            <!-- notes>
+                <xsl:value-of select="normalize-space(.)"/>
+            </notes -->
+    </xsl:template>
+    
+    <xsl:template match="a:item" mode="items">
+        <item>
+                <xsl:attribute name="VALUE"><xsl:value-of select="./@value"/></xsl:attribute>
+        </item>
+    </xsl:template>
+
+
+    <xsl:template match="a:range" mode="rkey">
+                <xsl:text>(</xsl:text><xsl:value-of select="./@min"/><xsl:text>-</xsl:text><xsl:value-of select="./@max"/><xsl:text>) = (</xsl:text><xsl:value-of select="normalize-space(.)"/><xsl:text>)&#xA;</xsl:text>
+    </xsl:template>
+
+    <xsl:template match="a:item" mode="categry">
+        <catgry>
+            <xsl:if test="./@missing">
+                <xsl:attribute name="missing"><xsl:choose><xsl:when test="./@missing = 'Y'">Y</xsl:when><xsl:otherwise>N</xsl:otherwise></xsl:choose></xsl:attribute>
+            </xsl:if>
+            <catValu>
+                <xsl:value-of select="./@value"/>
+            </catValu>
+            <labl>
+            	<xsl:value-of select="normalize-space(.)"/>
+            </labl>
+            <xsl:if test="./@count">
+                <catStat type="freq">
+                    <xsl:value-of select="./@count"/>
+                </catStat>
+            </xsl:if>
+        </catgry>
+    </xsl:template>
+    
+    
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                       Universe Template                                                                                                              ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:universe">
+        <universe>
+        	<xsl:if test=". != ''">
+            <txt>
+                <xsl:value-of select="normalize-space(.)"/>
+            </txt>
+            </xsl:if>
+            <concept>
+                <xsl:value-of select="./@type"/>
+            </concept>
+        </universe>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                       Universe Template                                                                                                              ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:concept">
+        <concept>
+            <xsl:attribute name="vocab"><xsl:value-of select="./@type"/></xsl:attribute>
+            <xsl:value-of select="normalize-space(.)"/>
+        </concept>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                       Variable Label Template                                                                                                      ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:label">
+        <labl level="variable">
+            <xsl:value-of select="normalize-space(.)"/>
+        </labl>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                       Security Template                                                                                                               ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:security">
+        <security>
+            <xsl:attribute name="date"><xsl:value-of select="./@date"/></xsl:attribute>
+            <xsl:value-of select="./@level"/>
+        </security>
+    </xsl:template>
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                       Value Range Template                                                                                                        ***-->
+    <!-- ********************************************************************************************************************************-->
+    <!-- ********************************************************************************************************************************-->
+    <!-- ***                       Variable Period Template                                                                                                    ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template match="a:period">
+        <notes type="mif/variables/var/period/@start">
+            <xsl:value-of select="./@start"/>
+        </notes>
+        <notes type="mif/variables/var/period/@end">
+            <xsl:value-of select="./@end"/>
+        </notes>
+    </xsl:template>
+
+    <xsl:template match="*|@*">
+        <xsl:comment><xsl:call-template name="full-path"/><xsl:value-of select="concat('=',.)"/></xsl:comment>
+    </xsl:template>
+<!-- ********************************************************************************************************************************-->
+    <!-- ***                       Title/ handle Template                                                                                                    ***-->
+    <!-- ********************************************************************************************************************************-->
+    <xsl:template name="titlStmt">
+               	   <titlStmt>
+                      <titl>                      
+                           <xsl:value-of select="normalize-space(a:dataSet/a:longName)"/>
+                           <xsl:if test="normalize-space(a:dataSet/a:shortName) != ''">
+                    			<xsl:text>(</xsl:text>
+								<xsl:value-of select="normalize-space(a:dataSet/a:shortName)"/>
+                    			<xsl:text>)</xsl:text>
+                    		</xsl:if>
+                    		<xsl:if test="normalize-space(a:dataSet/a:subsurveyName) != ''">
+                    			<xsl:text>:</xsl:text>
+								<xsl:value-of select="normalize-space(a:dataSet/a:subsurveyName)"/>
+							</xsl:if>
+							<xsl:if test="normalize-space(a:dataSet/a:inheritedComponent) != ''">
+                    			<xsl:text>:</xsl:text>
+								<xsl:value-of select="normalize-space(a:dataSet/a:inheritedComponent)"/>
+							</xsl:if>
+							<xsl:if test="normalize-space(a:dataSet/a:component) != ''">	
+                    			<xsl:text>:</xsl:text>
+ 								<xsl:value-of select="normalize-space(a:dataSet/a:component)"/>
+ 							</xsl:if>
+ 							<xsl:if test="normalize-space(a:dataSet/a:component) != ''">	
+                    			<xsl:text>:</xsl:text>
+ 								<xsl:value-of select="normalize-space(a:dataSet/a:instance)"/>
+ 							</xsl:if>
+ 							
+                       </titl>
+                       <IDNo agency="producer">
+                                <xsl:value-of select="normalize-space(a:dataSet/a:shortName)"/>
+                    		<xsl:text>/</xsl:text>
+				<xsl:value-of select="normalize-space(a:dataSet/a:subsurveyName)"/>
+                    		<xsl:text>/</xsl:text>
+				<xsl:value-of select="normalize-space(a:dataSet/a:component)"/>
+                    		<xsl:text>/</xsl:text>
+				<xsl:value-of select="normalize-space(a:dataSet/a:instance)"/>
+                        </IDNo>
+                    </titlStmt>
+        </xsl:template>
+
+        <xsl:template name="full-path">
+            <xsl:for-each select="ancestor-or-self::*">
+		<xsl:variable name="id" select="generate-id(.)"/>
+		<xsl:variable name="name" select="name()"/>
+		<xsl:value-of select="concat('/',name())"/>
+		<xsl:for-each select="../*[name()=$name]">
+                    <xsl:if test="generate-id(.)=$id">
+			<xsl:text>[</xsl:text>
+			<xsl:value-of select="position()"/>
+			<xsl:text>]</xsl:text>
+                    </xsl:if>
+		</xsl:for-each>
+            </xsl:for-each>
+            <xsl:if test="not(self::*)">
+                <xsl:choose>
+                    <xsl:when test="self::text()">
+                    	<xsl:text>/text()</xsl:text>
+                    	<xsl:text>[</xsl:text>
+							<xsl:value-of select="position()"/>
+						<xsl:text>]</xsl:text>
+                    </xsl:when>
+                    <xsl:when test="self::comment()">      
+                        <xsl:text>/comment()</xsl:text>
+                        <xsl:text>[</xsl:text>
+							<xsl:value-of select="position()"/>
+						<xsl:text>]</xsl:text>
+                    </xsl:when>
+                    <xsl:when test="self::processing-instruction()">   
+                       <xsl:text>/processing-instruction()</xsl:text>
+                       <xsl:text>[</xsl:text>
+							<xsl:value-of select="position()"/>
+						<xsl:text>]</xsl:text>
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <xsl:value-of select="concat('/@',name())"/>
+                    </xsl:otherwise>
+                </xsl:choose>
+            </xsl:if>
+        </xsl:template>
+
+</xsl:stylesheet>