Table2mediawiki.xslt
Jump to navigation
Jump to search
This is a fast-and-lousy proof-of-concept stylesheet that reads in a TEI (P5) document and writes out a MediWiki representation of each <table> therein. (Although it deliberately ignores tables that are inside other tables.)
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" xmlns:tei="http://www.tei-c.org/ns/1.0"> <xd:doc scope="stylesheet"> <xd:desc> <xd:p><xd:b>Written</xd:b>: 2009-12-12</xd:p> <xd:p><xd:b>Author</xd:b>: Syd Bauman</xd:p> <xd:p><xd:b>Status</xd:b>: Copyleft 2009 Syd Bauman and the Brown University Women Writers Project</xd:p> <xd:p><xd:b>Input</xd:b>: A TEI (P5) document</xd:p> <xd:p><xd:b>Output</xd:b>: a rudimentary representation of each table in the input (that is not itself inside a table) in the MediaWiki language</xd:p> <xd:p><xd:b>Known issues</xd:b>: <xd:ul> <xd:li>ignores all attributes except role= of <row></xd:li> <xd:li>only knows about "label" and "data" values of role= of <row></xd:li> <xd:li>no processing of phrase-level elements (yet :-) — after all, this is really intended as a proof-of-concept at this point</xd:li> <xd:li>should be parameratized a bit better (e.g., user should be able to specify border= and cellpadding=)</xd:li> <xd:li>someday should handle multiple wiki-languages</xd:li> </xd:ul> </xd:p> </xd:desc> </xd:doc> <xsl:output method="text"/> <xsl:strip-space elements="*"/> <xsl:template match="/"> <xsl:apply-templates select="//tei:table[not( ancestor::tei:table )]"/> </xsl:template> <xsl:template match="tei:table"> <xsl:apply-templates select="tei:head"/> <!-- ignore elements from model.global --> <!-- start: --> <xsl:text>{| border="1" cellpadding="2"</xsl:text> <xsl:text>
</xsl:text> <!-- process rows: --> <xsl:apply-templates select="tei:row"/> <!-- finish up: --> <xsl:text>|}</xsl:text> <xsl:text>
</xsl:text> <xsl:text>
</xsl:text> </xsl:template> <xsl:template match="tei:row"> <xsl:variable name="sepChar"> <xsl:choose> <xsl:when test="@role='label'">!</xsl:when> <xsl:when test="@role='data' or not(@role)">|</xsl:when> <xsl:otherwise> <xsl:message>warning: unrecognized role= of <xsl:number/> <row>; presuming "data"</xsl:message> <xsl:text>|</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:text>|-</xsl:text> <xsl:text>
</xsl:text> <xsl:value-of select="$sepChar"/> <xsl:for-each select="tei:cell"> <xsl:apply-templates select="."/> <xsl:choose> <xsl:when test="following-sibling::tei:cell"> <xsl:value-of select="$sepChar"/> <xsl:value-of select="$sepChar"/> </xsl:when> <xsl:otherwise> <xsl:text>
</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> <xsl:template match="tei:head"> <xsl:text>|+</xsl:text> <xsl:value-of select="normalize-space(.)"/> <xsl:text>
</xsl:text> </xsl:template> <xsl:template match="tei:cell"> <xsl:text> </xsl:text> <xsl:value-of select="normalize-space(.)"/> <xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet>