Difference between revisions of "MediaWiki:SMWToRDF.xsl"
From TDWG Terms Wiki
m (added skos:altLabel) |
m (some refactoring (make the RDF at least resolve the SKOS terms)) |
||
Line 1: | Line 1: | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
− | |||
− | |||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | ||
− | xmlns:skos="http://www.w3.org/2004/02/skos/core#" | + | xmlns:skos="http://www.w3.org/2004/02/skos/core#" |
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
xmlns:swivt="http://semantic-mediawiki.org/swivt/1.0#" | xmlns:swivt="http://semantic-mediawiki.org/swivt/1.0#" | ||
Line 10: | Line 8: | ||
xmlns:property="http://terms.gbif.org/wiki/Special:URIResolver/Property-3A" | xmlns:property="http://terms.gbif.org/wiki/Special:URIResolver/Property-3A" | ||
version="1.0"> | version="1.0"> | ||
− | |||
<xsl:output indent="yes" /> | <xsl:output indent="yes" /> | ||
<xsl:variable name="terms" select=" rdf:RDF/swivt:Subject" /> | <xsl:variable name="terms" select=" rdf:RDF/swivt:Subject" /> | ||
− | |||
− | |||
<xsl:template match="/"> | <xsl:template match="/"> | ||
<rdf:RDF xmlns:vs="http://www.w3.org/2003/06/sw-vocab-status/ns#" | <rdf:RDF xmlns:vs="http://www.w3.org/2003/06/sw-vocab-status/ns#" | ||
− | xmlns:vann="http://purl.org/vocab/vann/" | + | xmlns:vann="http://purl.org/vocab/vann/" |
− | xmlns:dcterms="http://purl.org/dc/terms/" | + | xmlns:dcterms="http://purl.org/dc/terms/" |
− | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | + | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
− | xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" | + | xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" |
xml:base="http://rs.tdwg.org/dwc/terms/" | xml:base="http://rs.tdwg.org/dwc/terms/" | ||
xmlns:dwcattributes="http://rs.tdwg.org/dwc/terms/attributes/"> | xmlns:dwcattributes="http://rs.tdwg.org/dwc/terms/attributes/"> | ||
<!-- | <!-- | ||
− | + | ||
Each RDF description uses the following: | Each RDF description uses the following: | ||
rdfs:label | rdfs:label | ||
Line 37: | Line 32: | ||
dcterms:modified | dcterms:modified | ||
rdf:type | rdf:type | ||
− | + | ||
− | + | ||
− | + | ||
--> | --> | ||
<!-- Mutable RDF goes here --> | <!-- Mutable RDF goes here --> | ||
Line 48: | Line 41: | ||
<xsl:attribute name="rdf:value"><xsl:value-of select="$terms[1]/dc:identifier/@rdf:resource" /></xsl:attribute> | <xsl:attribute name="rdf:value"><xsl:value-of select="$terms[1]/dc:identifier/@rdf:resource" /></xsl:attribute> | ||
</rdf:Description> | </rdf:Description> | ||
− | + | ||
<dcterms:title> | <dcterms:title> | ||
<xsl:attribute name="xml:lang"><xsl:text>en</xsl:text></xsl:attribute> | <xsl:attribute name="xml:lang"><xsl:text>en</xsl:text></xsl:attribute> | ||
Line 59: | Line 52: | ||
<dc:description><xsl:value-of select="$terms[1]/dc:description" /></dc:description> | <dc:description><xsl:value-of select="$terms[1]/dc:description" /></dc:description> | ||
</xsl:if> | </xsl:if> | ||
− | + | ||
<dc:publisher><xsl:value-of select="$terms[1]/dc:publisher" /></dc:publisher> | <dc:publisher><xsl:value-of select="$terms[1]/dc:publisher" /></dc:publisher> | ||
− | + | ||
<dcterms:bibliographicCitation><xsl:value-of select="$terms[1]/dcterms:bibliographicCitation" /></dcterms:bibliographicCitation> | <dcterms:bibliographicCitation><xsl:value-of select="$terms[1]/dcterms:bibliographicCitation" /></dcterms:bibliographicCitation> | ||
− | + | ||
<xsl:for-each select="$terms[1]/dcterms:contributor"> | <xsl:for-each select="$terms[1]/dcterms:contributor"> | ||
<dcterms:contributor><xsl:value-of select="."/></dcterms:contributor> | <dcterms:contributor><xsl:value-of select="."/></dcterms:contributor> | ||
Line 71: | Line 64: | ||
<dc:contributor><xsl:value-of select="."/></dc:contributor> | <dc:contributor><xsl:value-of select="."/></dc:contributor> | ||
</xsl:for-each> | </xsl:for-each> | ||
− | + | ||
<xsl:for-each select="$terms[1]/dcterms:creator"> | <xsl:for-each select="$terms[1]/dcterms:creator"> | ||
<dcterms:creator><xsl:value-of select="."/></dcterms:creator> | <dcterms:creator><xsl:value-of select="."/></dcterms:creator> | ||
Line 79: | Line 72: | ||
<dc:creator><xsl:value-of select="."/></dc:creator> | <dc:creator><xsl:value-of select="."/></dc:creator> | ||
</xsl:for-each> | </xsl:for-each> | ||
− | + | ||
<!-- the remaining $term elements describe individual Concepts in the ConceptScheme --> | <!-- the remaining $term elements describe individual Concepts in the ConceptScheme --> | ||
Line 88: | Line 81: | ||
<xsl:attribute name="rdf:value"> | <xsl:attribute name="rdf:value"> | ||
<xsl:value-of select="@rdf:about" /></xsl:attribute> | <xsl:value-of select="@rdf:about" /></xsl:attribute> | ||
− | + | ||
− | + | ||
− | + | <!-- ?there is no equivalent in rdf for skos:altLabel --> | |
− | + | <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> | <skos:altLabel> | ||
− | + | <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /> </xsl:attribute> | |
− | + | <xsl:value-of select="$thisContentStrippedIsoLanguage" /> | |
− | + | </skos:altLabel> | |
− | </skos:altLabel> | + | </xsl:for-each> |
− | + | ||
<xsl:for-each select="skos:prefLabel"> | <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> | |
− | + | <!--<xsl:if test="$isoLanguage ='en'">--> | |
<rdfs:label> | <rdfs:label> | ||
− | + | <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /></xsl:attribute> | |
− | + | <xsl:value-of select="$thisContentStrippedIsoLanguage" /> | |
− | + | </rdfs:label> | |
− | </rdfs:label> | + | <!--</xsl:if>--> |
− | + | ||
</xsl:for-each> | </xsl:for-each> | ||
− | + | ||
<xsl:for-each select="skos:definition"> | <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> | |
− | + | <!--<xsl:if test="$isoLanguage ='en'">--> | |
<rdfs:comment> | <rdfs:comment> | ||
− | + | <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /></xsl:attribute> | |
− | + | <xsl:value-of select="$thisContentStrippedIsoLanguage" /> | |
− | + | </rdfs:comment> | |
− | </rdfs:comment> | + | <!--</xsl:if>--> |
− | </xsl:if> | + | |
</xsl:for-each> | </xsl:for-each> | ||
− | |||
− | |||
<!-- dcterms:description is not needed for concepts - use rdfs:comment instead | <!-- dcterms:description is not needed for concepts - use rdfs:comment instead | ||
<xsl:for-each select="skos:definition"> | <xsl:for-each select="skos:definition"> | ||
− | <xsl:variable name=" | + | <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> | |
− | + | <xsl:if test="$isoLanguage ='en'"> | |
− | + | <dcterms:description> <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /></xsl:attribute> | |
− | + | <xsl:value-of select="$thisContentStrippedIsoLanguage" /> | |
− | + | </dcterms:description> | |
− | <xsl:value-of select="$ | + | </xsl:if> |
− | + | ||
− | + | ||
</xsl:for-each> | </xsl:for-each> | ||
--> | --> | ||
− | + | ||
<rdfs:isDefinedBy> | <rdfs:isDefinedBy> | ||
<xsl:attribute name="rdf:resource"> | <xsl:attribute name="rdf:resource"> | ||
− | <xsl:value-of select="rdfs:isDefinedBy[2]/@rdf:resource" /></xsl:attribute> | + | <xsl:choose> |
− | </rdfs:isDefinedBy> | + | <xsl:when test="string-length(rdfs:isDefinedBy[2]/@rdf:resource) != 0"><xsl:value-of select="rdfs:isDefinedBy[2]/@rdf:resource" /></xsl:when> |
− | <xsl:if test="dcterms:issued != ''"> | + | <xsl:otherwise><xsl:value-of select="rdfs:isDefinedBy/@rdf:resource" /></xsl:otherwise> |
− | <dcterms:issued> | + | </xsl:choose> |
− | + | </xsl:attribute> | |
− | </dcterms: | + | </rdfs:isDefinedBy> |
+ | <xsl:if test="dcterms:issued != ''"> | ||
+ | <dcterms:issued> <xsl:value-of select="dcterms:issued" /> </dcterms:issued> | ||
+ | </xsl:if> | ||
+ | <xsl:if test="dcterms:modified != ''"> | ||
+ | <dcterms:modified> <xsl:value-of select="dcterms:modified" /> </dcterms:modified> | ||
</xsl:if> | </xsl:if> | ||
− | + | <xsl:for-each select="swivt:type/@rdf:resource"> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | <xsl:for-each select="swivt:type/@rdf:resource"> | + | |
<rdf:type> | <rdf:type> | ||
<!--<xsl:attribute name="rdf:resource"> | <!--<xsl:attribute name="rdf:resource"> | ||
<xsl:value-of select="property:concept_type/@rdf:resource" /> --> | <xsl:value-of select="property:concept_type/@rdf:resource" /> --> | ||
− | + | <xsl:value-of select="./." /> <!--</xsl:attribute> --> | |
− | </rdf:type> | + | </rdf:type> |
</xsl:for-each> | </xsl:for-each> | ||
− | + | <!-- | |
<dcterms:hasVersion> | <dcterms:hasVersion> | ||
<xsl:attribute name="rdf:resource"> | <xsl:attribute name="rdf:resource"> | ||
<xsl:value-of select="ZZZ" /></xsl:attribute> | <xsl:value-of select="ZZZ" /></xsl:attribute> | ||
</dcterms:hasVersion> | </dcterms:hasVersion> | ||
− | + | ||
<dcterms:replaces> | <dcterms:replaces> | ||
<xsl:attribute name="rdf:resource"> | <xsl:attribute name="rdf:resource"> | ||
<xsl:value-of select="ZZZ" /></xsl:attribute> | <xsl:value-of select="ZZZ" /></xsl:attribute> | ||
− | </dcterms:replaces> | + | </dcterms:replaces> |
− | + | --> | |
− | + | <xsl:for-each select="vs:term_status" > | |
− | + | <vs:term_status><xsl:value-of select="vs:term_status"/></vs:term_status> | |
+ | </xsl:for-each> | ||
+ | <!-- AP (2019-12-17 14:13:56) is there a rdf equivalent? | ||
<skos:closeMatch><xsl:value-of select="skos:closeMatch/@rdf:resource" /></skos:closeMatch> | <skos:closeMatch><xsl:value-of select="skos:closeMatch/@rdf:resource" /></skos:closeMatch> | ||
− | + | --> | |
− | <!-- vann:termGroup replaces dwc:organizedInClass | + | |
+ | <!-- | ||
+ | vann:termGroup replaces dwc:organizedInClass | ||
<vann:termGroup> | <vann:termGroup> | ||
<xsl:attribute name="rdf:resource"> | <xsl:attribute name="rdf:resource"> | ||
<xsl:value-of select="ZZZ" /></xsl:attribute> | <xsl:value-of select="ZZZ" /></xsl:attribute> | ||
</vann:termGroup> | </vann:termGroup> | ||
− | + | --> | |
− | + | ||
</rdf:Description> | </rdf:Description> | ||
</xsl:for-each> | </xsl:for-each> |
Latest revision as of 15:15, 17 December 2019
<?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#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:property="http://terms.gbif.org/wiki/Special:URIResolver/Property-3A" version="1.0">
<xsl:output indent="yes" />
<xsl:variable name="terms" select=" rdf:RDF/swivt:Subject" />
<xsl:template match="/"> <rdf:RDF xmlns:vs="http://www.w3.org/2003/06/sw-vocab-status/ns#" xmlns:vann="http://purl.org/vocab/vann/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:base="http://rs.tdwg.org/dwc/terms/" xmlns:dwcattributes="http://rs.tdwg.org/dwc/terms/attributes/">
<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> <xsl:if test="boolean($terms[1]/dcterms:description)"> <dcterms:description><xsl:value-of select="$terms[1]/dcterms:description" /></dcterms:description> </xsl:if> <xsl:if test="boolean($terms[1]/dc:description)"> <dc:description><xsl:value-of select="$terms[1]/dc:description" /></dc:description> </xsl:if>
<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[1]/dc:contributor"> <dc:contributor><xsl:value-of select="."/></dc:contributor> </xsl:for-each>
<xsl:for-each select="$terms[1]/dcterms:creator"> <dcterms:creator><xsl:value-of select="."/></dcterms:creator> </xsl:for-each>
<xsl:for-each select="$terms[1]/dc:creator"> <dc:creator><xsl:value-of select="."/></dc:creator> </xsl:for-each>
<xsl:for-each select="$terms[position() != 1]">
<rdf:Description> <xsl:attribute name="rdf:value"> <xsl:value-of select="@rdf:about" /></xsl:attribute>
<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> <rdfs:label> <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /></xsl:attribute> <xsl:value-of select="$thisContentStrippedIsoLanguage" /> </rdfs:label> </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> <rdfs:comment> <xsl:attribute name="xml:lang"> <xsl:value-of select="$isoLanguage" /></xsl:attribute> <xsl:value-of select="$thisContentStrippedIsoLanguage" /> </rdfs:comment> </xsl:for-each>
<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:if test="dcterms:issued != "> <dcterms:issued> <xsl:value-of select="dcterms:issued" /> </dcterms:issued> </xsl:if> <xsl:if test="dcterms:modified != "> <dcterms:modified> <xsl:value-of select="dcterms:modified" /> </dcterms:modified> </xsl:if> <xsl:for-each select="swivt:type/@rdf:resource"> <rdf:type> <xsl:value-of select="./." /> </rdf:type> </xsl:for-each> <xsl:for-each select="vs:term_status" > <vs:term_status><xsl:value-of select="vs:term_status"/></vs:term_status> </xsl:for-each>
</rdf:Description> </xsl:for-each> </rdf:RDF> </xsl:template>
</xsl:stylesheet>