Last active
December 4, 2016 02:20
-
-
Save AdamSteffanick/de35a4bce50479e2a5631f0faf79c5ec to your computer and use it in GitHub Desktop.
Files associated with my post https://www.steffanick.com/adam/blog/convert-tei-xml-to-html-with-xquery/
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
<div lang="la" id="tei-document"> | |
<p data-paragraph="1"> | |
<span data-sentence="1">Lorem ipsum dolor sit amet, consectetur adipiscing <span class="quotes">‘elit’</span>.</span> | |
<span data-sentence="2">Vestibulum nec lorem vitae dui varius <i>gravida</i>.</span> | |
<span data-sentence="3">Cras eget tristique <b>eros</b>, id ultrices eros. Mauris nec turpis elit.</span> | |
<span data-sentence="4">In tincidunt eget ante quis semper.</span> | |
<span data-sentence="5">Praesent a mi et nisi ullamcorper feugiat nec non ipsum.</span> | |
<span data-sentence="6">Ut malesuada finibus lorem nec gravida.</span> | |
<span data-sentence="7">Praesent lobortis magna sed scelerisque molestie.</span> | |
<span data-sentence="8">Aenean nec sapien quis quam commodo aliquam et et lorem.</span> | |
<span data-sentence="9">Quisque commodo blandit neque quis scelerisque.</span> | |
<span data-sentence="10">Fusce nec ultrices enim.</span> | |
<span data-sentence="11">Cras dignissim convallis mi.</span> | |
</p> | |
<blockquote> | |
<p data-paragraph="2"> | |
<span data-sentence="12">Sed vitae aliquet tellus.</span> | |
<span data-sentence="13">Maecenas eget orci nec elit efficitur rutrum ac vitae enim.</span> | |
<span data-sentence="14">Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque ullamcorper porttitor est a malesuada.</span> | |
<span data-sentence="15">Nullam scelerisque pulvinar risus a elementum.</span> | |
<span data-sentence="16">Praesent eleifend ligula odio, non ultricies tortor scelerisque id.</span> | |
<span data-sentence="17">Nulla augue tortor, venenatis pretium elementum vitae, ullamcorper ac sem.</span> | |
<span data-sentence="18">Duis at nibh nisl.</span> | |
<span data-sentence="19">Etiam dictum ligula non rhoncus placerat.</span> | |
<span data-sentence="20">Pellentesque nibh augue, bibendum sit amet leo ut, ornare sollicitudin est.</span> | |
<span data-sentence="21">Sed tellus orci, posuere et ultrices ut, fermentum non nisi.</span> | |
<span data-sentence="22">Integer lobortis justo a leo elementum, ut sagittis lorem suscipit.</span> | |
<span data-sentence="23">Aliquam semper orci mauris, et hendrerit est vulputate eu.</span> | |
</p> | |
</blockquote> | |
<p data-paragraph="3"> | |
<span data-sentence="24">Sed mollis mi nec suscipit hendrerit.</span> | |
<span data-sentence="25">Praesent velit orci, facilisis ultricies ultricies ac, varius vitae arcu.</span> | |
<span data-sentence="26">Cras aliquam posuere turpis a aliquam.</span> | |
<span data-sentence="27">Nunc id suscipit ex.</span> | |
<span data-sentence="28">Curabitur posuere tincidunt neque in hendrerit.</span> | |
<span data-sentence="29">Aenean ac malesuada nulla.</span> | |
<span data-sentence="30">Ut eleifend porttitor accumsan.</span> | |
<span data-sentence="31">Phasellus eros risus, imperdiet quis elit eget, ultricies rhoncus ex.</span> | |
<span data-sentence="32">Quisque purus quam, <q>luctus sit amet imperdiet id,</q> cursus eget dolor.</span> | |
<span data-sentence="33">Fusce fermentum convallis gravida.</span> | |
<span data-sentence="34">Etiam nulla lorem, vehicula ac augue ullamcorper, convallis tincidunt erat.</span> | |
<span data-sentence="35">Nam maximus et metus placerat interdum.</span> | |
</p> | |
</div> |
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
xquery version "3.1"; | |
declare namespace tei = "http://www.tei-c.org/ns/1.0"; | |
(: XQuery for converting TEI XML to HTML :) | |
declare function local:dispatch($nodes as node()*) as item()* { | |
for $node in $nodes | |
return | |
typeswitch($node) | |
case text() return $node | |
case element(tei:s) return local:s($node) | |
case element(tei:p) return local:p($node) | |
case element(tei:hi) return local:hi($node) | |
case element(tei:quote) return local:quote($node) | |
case element(tei:q) return local:q($node) | |
case element(tei:body) return local:body($node) | |
default return local:passthru($node) | |
}; | |
(: Recurse through child nodes :) | |
declare function local:passthru($node as node()*) as item()* { | |
element {name($node)} {($node/@*, local:dispatch($node/node()))} | |
}; | |
(: <s> to <span> with attributes :) | |
declare function local:s($node as element(tei:s)) as element() { | |
let $sentence := $node/@n | |
return | |
<span data-sentence="{$sentence}">{local:dispatch($node/node())}</span> | |
}; | |
(: <p> to <p> with attributes :) | |
declare function local:p($node as element(tei:p)) as element() { | |
let $paragraph := $node/@n | |
return | |
<p data-paragraph="{$paragraph}">{local:dispatch($node/node())}</p> | |
}; | |
(: <hi> to <b>, <i>, or <span> :) | |
declare function local:hi($node as element(tei:hi)) as element() { | |
let $rend := $node/@rend | |
return | |
if ($rend = 'bold') then | |
<b>{local:dispatch($node/node())}</b> | |
else if ($rend = 'italic') then | |
<i>{local:dispatch($node/node())}</i> | |
else | |
<span>{local:dispatch($node/node())}</span> | |
}; | |
(: <quote> to <span> :) | |
declare function local:quote($node as element(tei:quote)) as element() { | |
let $rend := $node/@rend | |
return | |
if ($rend = 'blockquote') then | |
<blockquote>{local:dispatch($node/node())}</blockquote> | |
else | |
<q>{local:dispatch($node/node())}</q> | |
}; | |
(: <q> to quote :) | |
declare function local:q($node as element(tei:q)) as element() { | |
<span class="quotes">‘{local:dispatch($node/node())}’</span> | |
}; | |
(: <body> to <div> with id attribute :) | |
declare function local:body($node as element(tei:body)) as element() { | |
<div lang="la" id="tei-document">{local:dispatch($node/node())}</div> | |
}; | |
let $document := fetch:xml("https://raw.githubusercontent.com/AdamSteffanick/Sample-TEI-XML-Files/49a10fbac2df9c1cef3e5fd57fb484cd1fd49ce4/sample-tei-xml-document-latin.xml", map { 'chop': false() }) | |
let $tei := $document//tei:body | |
let $html := local:dispatch($tei) | |
return $html |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment