Skip to content

Instantly share code, notes, and snippets.

@AdamSteffanick
Last active December 4, 2016 02:20
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 AdamSteffanick/de35a4bce50479e2a5631f0faf79c5ec to your computer and use it in GitHub Desktop.
Save AdamSteffanick/de35a4bce50479e2a5631f0faf79c5ec to your computer and use it in GitHub Desktop.
<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>
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">&#8216;{local:dispatch($node/node())}&#8217;</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