MediaWiki:SMWToSKOS.xsl

From TDWG Terms Wiki
Jump to: navigation, search

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:skos="http://www.w3.org/2004/02/skos/core#" 
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:swivt="http://semantic-mediawiki.org/swivt/1.0#"
 version="1.0">
 <xsl:output indent="yes" />
 <xsl:variable name="terms" select="rdf:RDF/swivt:Subject" />
 <xsl:template match="/">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:skos="http://www.w3.org/2004/02/skos/core#" 
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/">
     
     <rdf:Description>
       <xsl:attribute name="rdf:value">
       <xsl:value-of select="$terms[1]/dc:identifier/@rdf:resource" /></xsl:attribute>
     </rdf:Description>
     
     <dcterms:title>
       <xsl:attribute name="xml:lang">
       <xsl:text>en</xsl:text></xsl:attribute>
       <xsl:value-of select="$terms[1]/rdfs:label"/>
     </dcterms:title>
     
     <dcterms:description>
       <xsl:value-of select="$terms[1]/dcterms:description" />
     </dcterms:description>
     
     <dc:publisher>
       <xsl:value-of select="$terms[1]/dc:publisher" />
     </dc:publisher>
     
     <dcterms:bibliographicCitation>
       <xsl:value-of select="$terms[1]/dcterms:bibliographicCitation" />
     </dcterms:bibliographicCitation>
     
     
     <xsl:for-each select="$terms[1]/dcterms:contributor">
       <dcterms:contributor><xsl:value-of select="."/></dcterms:contributor>
     </xsl:for-each>
           
 
     <xsl:for-each select="$terms[position() != 1]">
     <xsl:variable name="nameSpace"><xsl:value-of select="@rdf:about"/></xsl:variable>
     <xsl:variable name="nameSpaceStripped"><xsl:value-of select="substring-before($nameSpace,'terms')" /></xsl:variable>
       <skos:Concept>
         <xsl:attribute name="rdf:about">
         <xsl:value-of select="@rdf:about" /></xsl:attribute>
         
         <skos:historyNote>
           <xsl:attribute name="rdf:about"><xsl:text>modified</xsl:text></xsl:attribute>
           <xsl:attribute name="dc:date">
           <xsl:choose>
             <xsl:when test="string-length(dcterms:modified) = 0"><xsl:value-of select="swivt:wikiPageModificationDate"/></xsl:when>
             <xsl:otherwise><xsl:value-of select="dcterms:modified"/></xsl:otherwise>
           </xsl:choose>
           </xsl:attribute>
         </skos:historyNote>
         <rdfs:isDefinedBy>
           <xsl:attribute name="rdf:resource">
             <xsl:choose>
               <xsl:when test="string-length(rdfs:isDefinedBy[2]/@rdf:resource) != 0"><xsl:value-of select="rdfs:isDefinedBy[2]/@rdf:resource" /></xsl:when>
               <xsl:otherwise><xsl:value-of select="rdfs:isDefinedBy/@rdf:resource" /></xsl:otherwise>
             </xsl:choose>
           </xsl:attribute>
         </rdfs:isDefinedBy>
         
         <xsl:for-each select="skos:altLabel">
           <xsl:variable name="thisContent"><xsl:value-of select="."/></xsl:variable> 
           <xsl:variable name="thisContentStrippedIsoLanguage"><xsl:value-of select="substring-after($thisContent,':')"/></xsl:variable>
           <xsl:variable name="isoLanguage"><xsl:value-of select="substring-before($thisContent,':')"/></xsl:variable>
           <skos:altLabel>
             <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /> </xsl:attribute>
             <xsl:value-of select="$thisContentStrippedIsoLanguage" />
           </skos:altLabel>                                                              
         </xsl:for-each>
         
         <xsl:for-each select="skos:prefLabel">
           <xsl:variable name="thisContent"><xsl:value-of select="."/></xsl:variable> 
           <xsl:variable name="thisContentStrippedIsoLanguage"><xsl:value-of select="substring-after($thisContent,':')"/></xsl:variable>
           <xsl:variable name="isoLanguage"><xsl:value-of select="substring-before($thisContent,':')"/></xsl:variable>
           <skos:prefLabel>
             <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /> </xsl:attribute>
             <xsl:value-of select="$thisContentStrippedIsoLanguage" />
           </skos:prefLabel>                                                              
         </xsl:for-each>
         
         <xsl:for-each select="skos:definition">
           <xsl:variable name="thisContent"><xsl:value-of select="."/></xsl:variable> 
           <xsl:variable name="thisContentStrippedIsoLanguage"><xsl:value-of select="substring-after($thisContent,':')"/></xsl:variable>
           <xsl:variable name="isoLanguage"><xsl:value-of select="substring-before($thisContent,':')"/></xsl:variable>
           <skos:definition>
             <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /> </xsl:attribute>
             <xsl:value-of select="$thisContentStrippedIsoLanguage" />
           </skos:definition>  
         </xsl:for-each>
         <xsl:for-each select="skos:broader">    
           <xsl:variable name="nameBroader" select="@rdf:resource" />
           <xsl:variable name="shortNameBroader"><xsl:value-of select="substring-after($nameBroader,':')" /></xsl:variable>            
           <skos:broader>
             <xsl:attribute name="rdf:resource"><xsl:value-of select="concat($nameSpaceStripped,'terms/',$shortNameBroader)"/></xsl:attribute>
           </skos:broader>
         </xsl:for-each>
         <xsl:for-each select="skos:narrower">    
           <xsl:variable name="nameNarrower" select="@rdf:resource" />
           <xsl:variable name="shortNameNarrower"><xsl:value-of select="substring-after($nameNarrower,':')" /></xsl:variable>            
           <skos:narrower>
             <xsl:attribute name="rdf:resource"><xsl:value-of select="concat($nameSpaceStripped,'terms/',$shortNameNarrower)"/></xsl:attribute>
           </skos:narrower>
         </xsl:for-each>
         <xsl:for-each select="skos:example">
           <xsl:variable name="thisContent"><xsl:value-of select="."/></xsl:variable> 
           <xsl:variable name="thisContentStrippedIsoLanguage"><xsl:value-of select="substring-after($thisContent,':')"/></xsl:variable>
           <xsl:variable name="isoLanguage"><xsl:value-of select="substring-before($thisContent,':')"/></xsl:variable>
         <skos:example>
           <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /> </xsl:attribute>
           <xsl:value-of select="$thisContentStrippedIsoLanguage" />
         </skos:example>                                                              
         </xsl:for-each>
         
         <xsl:copy-of select="skos:exactMatch" /> 
         <xsl:copy-of select="skos:closeMatch" /> 
         <xsl:copy-of select="skos:broader" /> 
         <xsl:copy-of select="skos:narrower" /> 
         <xsl:copy-of select="skos:inScheme" /> 
         
         <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property" />
             
       </skos:Concept>
       
     </xsl:for-each>
   </rdf:RDF>
 </xsl:template>

</xsl:stylesheet>