Skip to content

Instantly share code, notes, and snippets.

@turbolent
Created August 12, 2011 14:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save turbolent/1142173 to your computer and use it in GitHub Desktop.
Save turbolent/1142173 to your computer and use it in GitHub Desktop.
Chaos Communication Camp 2011 Fahrplan RDF converter
<?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: &lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
@prefix rdfs: &lt;http ://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix event: &lt;http://purl.org/NET/c4dm/event.owl#&gt; .
@prefix tl: &lt;http://purl.org/NET/c4dm/timeline.owl#&gt; .
@prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; .
@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; .
</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>
&lt;</xsl:text>
<xsl:value-of select="$events-base"/>
<xsl:value-of select="@id"/>
<xsl:text>&gt; a event:Event ;
event:place &lt;</xsl:text><xsl:value-of select="$rooms-Base"/><xsl:value-of select="room"/><xsl:text>&gt; ;
rdfs:label "</xsl:text>
<xsl:call-template name="replace">
<xsl:with-param name="text" select="title"/>
<xsl:with-param name="pattern" select="'&quot;'"/>
<xsl:with-param name="subst" select="'\&quot;'"/>
</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 &lt;</xsl:text><xsl:value-of select="$speakers-base"/><xsl:value-of select="@id"/><xsl:text>&gt; ;
] ;
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment