Created
August 12, 2011 14:41
-
-
Save turbolent/1142173 to your computer and use it in GitHub Desktop.
Chaos Communication Camp 2011 Fahrplan RDF converter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<xsl:stylesheet version="1.0" | |
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> | |
<xsl:param name="rooms-base" select="'http://events.ccc.de/camp/2011/wiki/'" /> | |
<xsl:param name="events-base" select="'http://events.ccc.de/camp/2011/Fahrplan/events/'" /> | |
<xsl:param name="speakers-base" select="'http://events.ccc.de/camp/2011/Fahrplan/speakers/'" /> | |
<xsl:output method="text"/> | |
<xsl:strip-space elements="*" /> | |
<xsl:variable name="newline"><xsl:text> | |
</xsl:text></xsl:variable> | |
<xsl:template name="replace"> | |
<xsl:param name="text"/> | |
<xsl:param name="pattern"/> | |
<xsl:param name="subst"/> | |
<xsl:choose> | |
<xsl:when test="contains($text, $pattern)"> | |
<xsl:value-of select="substring-before($text, $pattern)"/><xsl:value-of select="$subst"/> | |
<xsl:call-template name="replace"> | |
<xsl:with-param name="text" select="substring-after($text, $pattern)"/> | |
<xsl:with-param name="pattern" select="$pattern" /> | |
<xsl:with-param name="subst" select="$subst" /> | |
</xsl:call-template> | |
</xsl:when> | |
<xsl:otherwise> | |
<xsl:value-of select="$text"/> | |
</xsl:otherwise> | |
</xsl:choose> | |
</xsl:template> | |
<xsl:template match="/"> | |
<xsl:text>@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |
@prefix rdfs: <http ://www.w3.org/2000/01/rdf-schema#> . | |
@prefix event: <http://purl.org/NET/c4dm/event.owl#> . | |
@prefix tl: <http://purl.org/NET/c4dm/timeline.owl#> . | |
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | |
@prefix foaf: <http://xmlns.com/foaf/0.1/> . | |
</xsl:text> | |
<xsl:apply-templates /> | |
</xsl:template> | |
<xsl:template match="*"><xsl:apply-templates select="child::*" /></xsl:template> | |
<xsl:template match="event"> | |
<xsl:param name="duration" select="duration" /> | |
<!-- TODO: days? --> | |
<xsl:param name="hours" select="substring-before($duration, ':')" /> | |
<xsl:param name="minutes" select="substring-after($duration, ':')" /> | |
<xsl:text> | |
<</xsl:text> | |
<xsl:value-of select="$events-base"/> | |
<xsl:value-of select="@id"/> | |
<xsl:text>> a event:Event ; | |
event:place <</xsl:text><xsl:value-of select="$rooms-Base"/><xsl:value-of select="room"/><xsl:text>> ; | |
rdfs:label "</xsl:text> | |
<xsl:call-template name="replace"> | |
<xsl:with-param name="text" select="title"/> | |
<xsl:with-param name="pattern" select="'"'"/> | |
<xsl:with-param name="subst" select="'\"'"/> | |
</xsl:call-template> | |
<xsl:text>" ; | |
rdfs:comment """</xsl:text> | |
<xsl:call-template name="replace"> | |
<xsl:with-param name="text" select="description"/> | |
<xsl:with-param name="pattern" select="$newline"/> | |
<xsl:with-param name="subst" select="'\n'"/> | |
</xsl:call-template> | |
<xsl:text>""" ; | |
event:time [ | |
a tl:Interval ; | |
tl:at "</xsl:text> | |
<xsl:value-of select="../../@date"/> | |
<xsl:text>T</xsl:text> | |
<xsl:value-of select="start" /> | |
<xsl:text>:00"^^xsd:dateTime ; | |
tl:duration "PT</xsl:text> | |
<xsl:value-of select="$hours"/> | |
<xsl:text>H</xsl:text> | |
<xsl:value-of select="$minutes" /> | |
<xsl:text>M"^^xsd:duration ; | |
] ;</xsl:text> | |
<xsl:apply-templates /> | |
<xsl:text> . </xsl:text> | |
</xsl:template> | |
<xsl:template match="person"> | |
<xsl:text> | |
event:agent [ | |
a foaf:Person; | |
foaf:name "</xsl:text><xsl:value-of select="."/><xsl:text>"; | |
rdfs:seeAlso <</xsl:text><xsl:value-of select="$speakers-base"/><xsl:value-of select="@id"/><xsl:text>> ; | |
] ; | |
</xsl:text> | |
</xsl:template> | |
</xsl:stylesheet> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment