総務省でe-Gov(イーガブ)という「電子政府の総合窓口」なるものが運営されている。
ここでは法令検索ができて、法令の全文が閲覧できるだけでなく、有難いことにXMLデータもダウンロードすることができる(二次利用も自由とのこと)。こっからいい感じに法令をデータベース化して容易に条文検索できるツール用意すれば最高なんじゃねって思ってはいるのだが、今のところそこまでの技量がないので、ひとまずe-Govの表示よりマシなHTML形式のデータが出力できればいいかな~ってことで、ちょっと前にXSLT1eXtensible Stylesheet Language Transformationの略らしいをさくっと勉強して、提供されているXMLスキーマを参考にコードを書いた(transform.xsl)。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Law/LawBody">
<html>
<head>
<title><xsl:value-of select="LawTitle"/></title>
<link href="hoge.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1><xsl:value-of select="LawTitle"/></h1>
<div class="TOC">
<xsl:for-each select="TOC/TOCChapter">
<a>
<xsl:attribute name="href">#c<xsl:value-of select="@Num"/></xsl:attribute>
<xsl:value-of select="ChapterTitle"/>
</a>
</xsl:for-each>
</div>
<xsl:for-each select="MainProvision/Chapter">
<div class="chapter">
<xsl:attribute name="id">c<xsl:value-of select="@Num"/></xsl:attribute>
<h3><xsl:value-of select="ChapterTitle"/></h3>
<xsl:for-each select="Article">
<div id="" class="article">
<h6 class="article_title"><xsl:value-of select="ArticleTitle"/></h6>
<span class="caption"><xsl:value-of select="ArticleCaption"/></span>
<xsl:for-each select="Paragraph">
<p class="paragraph">
<xsl:value-of select="ParagraphSentence/Sentence"/>
</p>
</xsl:for-each>
</div>
</xsl:for-each>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
ほんで、CSSを適当に用意(拙作はこちら)。
最後にXML形式の法令ファイルの先頭にこの一行を追加。
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
その結果がこちら(2019-03-01 スマホなど一部環境では上手く変換されないっぽいのでとりあえず変換後のhtmlをup)。正直CSSを使いこなせてなくてダサい感じになった気もするけど、まあ細かいことは気にしない方向で。あと今更気付いたのだが、各号列記の部分を出力させるのを忘れていた。かなり致命的な気もするがこれもまあいつか直すので許して☆って感じで。
本当は労基法だけでなくて安衛法、安衛則、その他煩わしい法令すべてを一括でやってしまえれば大変都合がいいのだけれど、一部の法令(特に安衛則)は編、章、節、款といったこまごました枝分かれが多く、それをどうスマートに処理するのかが今後の課題になる。
