Skip to content
Snippets Groups Projects
Commit 1bed1163 authored by usikora's avatar usikora :monkey:
Browse files

added first version of presentation and analysisation modul

parent 4a40c3ea
Branches
Tags
No related merge requests found
xquery version "3.1"; xquery version "3.1";
module namespace app="http://bdn-edition.de/intermediate_format/templates"; module namespace app="http://bdn-edition.de/intermediate_format/templates";
declare namespace tei = "http://www.tei-c.org/ns/1.0";
import module namespace templates="http://exist-db.org/xquery/templates" ; import module namespace templates="http://exist-db.org/xquery/templates" ;
import module namespace config="http://bdn-edition.de/intermediate_format/config" at "config.xqm"; import module namespace config="http://bdn-edition.de/intermediate_format/config" at "config.xqm";
import module namespace presentation="http://bdn-edition.de/intermediate_format/presentation" at "presentation/presentation.xqm";
import module namespace pre="http://bdn.edition.de/intermediate_format/preprocessing" at "intermediate_format/preprocessing.xqm";
import module namespace ident = "http://bdn.edition.de/intermediate_format/identification" at "intermediate_format/identification.xqm";
(:~ (:~
: This is a sample templating function. It will be called by the templating module if : This is a sample templating function. It will be called by the templating module if
...@@ -17,4 +21,36 @@ import module namespace config="http://bdn-edition.de/intermediate_format/config ...@@ -17,4 +21,36 @@ import module namespace config="http://bdn-edition.de/intermediate_format/config
declare function app:test($node as node(), $model as map(*)) { declare function app:test($node as node(), $model as map(*)) {
<p>Dummy template output generated by function app:test at {current-dateTime()}. The templating <p>Dummy template output generated by function app:test at {current-dateTime()}. The templating
function was triggered by the data-template attribute <code>data-template="app:test"</code>.</p> function was triggered by the data-template attribute <code>data-template="app:test"</code>.</p>
};
declare
%templates:wrap
%templates:default("doc", "/db/apps/interformat/data/samples/samples4.xml")
function app:present($node as node(), $model as map(*), $doc) {
<div class="serialisation">
{
let $nodes := doc($doc)
let $preprocessed-data := pre:preprocessing($nodes/tei:TEI)
let $intermediate-format := ident:walk($preprocessed-data, ())
return
presentation:tei-body($intermediate-format)
}
</div>
};
declare
%templates:wrap
%templates:default("doc", "/db/apps/interformat/data/samples/samples4.xml")
function app:tei-metadata($node as node(), $model as map(*), $doc) {
let $tei-header := doc($doc)//tei:teiHeader
return
<div class="metadata">
<div class="value">
<div><strong>uri:</strong></div>
<div>{ base-uri(doc($doc)) }</div>
</div>
{presentation:tei-header($tei-header)}
</div>
}; };
\ No newline at end of file
xquery version "3.0";
(:~
: PRESENTATION Module ("presentation", "http://bdn-edition.de/intermediate_format/presentation")
: *******************************************************************************************
: This module contains presentation functions for the intermediate format web-app
:
: @version 1.0 (2018-02-21)
: @status development
: @author Uwe Sikora
:)
module namespace presentation="http://bdn-edition.de/intermediate_format/presentation";
declare namespace tei="http://www.tei-c.org/ns/1.0";
(:############################# Modules Functions #############################:)
(:~
: presentation:html
: html presentation of an intermediate-format xml document
:
: @param $nodes the nodes to be converted
: @return item()* representing the converted node
:
: @version 1.2 (2017-10-15)
: @status working
: @author Uwe Sikora
:)
declare function presentation:tei-body
($nodes as node()*) as item()* {
for $node in $nodes
return
typeswitch($node)
case processing-instruction() return ()
case comment() return ( $node )
case text() return (
$node
)
case element(tei:abbr) return ()
case element(tei:aligned) return (
element{"span"}{
attribute {"style"}{"display:block"},
attribute {"class"}{"aligned ble"},
presentation:tei-body($node/node())
}
)
case element(tei:app) return (
presentation:tei-body($node/node())
)
case element(tei:body) return (
element{"div"}{
attribute {"class"}{"body"},
presentation:tei-body($node/node())
}
)
case element(tei:byline) return (
element{"div"}{
attribute {"class"}{"byline"},
presentation:tei-body($node/node())
}
)
case element(tei:choice) return (
presentation:tei-body($node/node())
)
case element(tei:div) return (
element{"div"}{
attribute {"class"}{"div ble"},
presentation:tei-body($node/node())
}
)
case element(tei:docAuthor) return (
element{"div"}{
attribute {"class"}{"docAuthor ble"},
presentation:tei-body($node/node())
}
)
case element(tei:docDate) return (
element{"span"}{
attribute {"class"}{"docDate"},
presentation:tei-body($node/node())
}
)
case element(tei:docEdition) return (
element{"div"}{
attribute {"class"}{"docEdition ble"},
presentation:tei-body($node/node())
}
)
case element(tei:docImprint) return (
element{"div"}{
attribute {"class"}{"docImprint ble"},
presentation:tei-body($node/node())
}
)
case element(tei:expan) return (
element{"span"}{
attribute {"class"}{"expan"},
(: attribute {"data-tooltip"}{data($node/following-sibling::tei:abbr)},:)
presentation:tei-body($node/node())
}
)
case element(tei:head) return (
let $hierarchies := $node/ancestor::node()[name() = "div" or name() = "list" or name() = "table"]
let $count := count($hierarchies)+1
return
element{concat("h", $count)}{
attribute {"class"}{"head ble"},
presentation:tei-body($node/node())
}
)
case element(tei:hi) return (
element{"span"}{
attribute {"class"}{"hi"},
presentation:tei-body($node/node())
}
)
case element(tei:index) return ()
case element(tei:item) return (
element{"li"}{
attribute {"class"}{"item ble"},
presentation:tei-body($node/node())
}
)
case element(tei:l) return (
element{"span"}{
attribute {"class"}{"l"},
presentation:tei-body($node/node())
}
)
case element(tei:label) return (
element{"span"}{
attribute {"class"}{"label"},
presentation:tei-body($node/node())
}
)
case element(tei:lb) return (
element{"br"}{}
)
case element(tei:lem) return (
presentation:tei-body($node/node())
)
case element(tei:list) return (
element{"ul"}{
attribute {"class"}{"list ble"},
presentation:tei-body($node/node())
}
)
case element(tei:milestone) return (
presentation:tei-body($node/node())
)
case element(tei:note) return (
element{"p"}{
attribute {"class"}{"note ble"},
presentation:tei-body($node/node())
}
)
case element(tei:p) return (
element{"p"}{
attribute {"class"}{"p ble"},
presentation:tei-body($node/node())
}
)
case element(tei:pb) return (
"|", <sup>{$node/string(@wit), $node/string(@n)}</sup>
)
case element(tei:persName) return (
element{"span"}{
attribute {"class"}{"persName"},
presentation:tei-body($node/node())
}
)
case element(tei:rdg) return (
presentation:rdg($node)
)
case element(tei:rdgMarker) return (
element {"span"}{
attribute {"class"}{"rdgMarker"},
presentation:rdgMarker($node)
}
)
case element(tei:seg) return (
element{"span"}{
attribute {"class"}{"seg"},
presentation:tei-body($node/node())
}
)
case element(tei:text) return (
element{"div"}{
attribute {"class"}{"text"},
presentation:tei-body($node/node())
}
)
case element(tei:TEI) return (
element{"div"}{
attribute {"class"}{"tei"},
presentation:tei-body($node/tei:text)
}
)
case element(tei:titlePage) return (
element{"div"}{
attribute {"class"}{"titlePage"},
presentation:tei-body($node/node())
}
)
case element(tei:titlePart) return (
element{"div"}{
attribute {"class"}{"titlePart ble"},
presentation:tei-body($node/node())
}
)
default return (
element {"span"}{
attribute {"style"}{"background:orange"},
$node/name(), ": ",
element{$node/name()}{
$node/@*,
presentation:tei-body($node/node())
}
}
)
};
(:~
: presentation:rdgMarker
: html presentation of an intermediate-format xml document
:
: @param $nodes the nodes to be converted
: @return item()* representing the converted node
:
: @version 1.2 (2017-10-15)
: @status working
: @author Uwe Sikora
:)
declare function presentation:rdgMarker
( $marker as node() ) as item()* {
let $wit := replace( $marker/string(@wit), " ", "" )
let $type := data($marker/@type)
let $mark := data($marker/@mark)
let $context := data($marker/@context)
return
if ( $marker[@type="pt" and @context="lem"] ) then (
if ($marker[@mark="open"]) then (
<span class="pt open lem">{concat("/", $wit)}</span>
)
else (
<span class="pt closeing lem">{concat($wit, "\")}</span>
)
)
else if ( $marker[@type="ptl" and @context="lem"] ) then (
if ($marker[@mark="open"]) then (
<span class="ptl open lem">{concat("/", $wit)}</span>
)
else (
<span class="ptl closeing lem">{concat($wit, "\||", $wit)}</span>
)
)
else if ( $marker[@type="ptl" and @context="rdg"] ) then (
if ($marker[@mark="open"]) then (
<sup>{$wit}</sup>
)
else (
<sup>{$wit}</sup>
)
)
else if ( $marker[@type="pp" and @context="lem"] ) then (
if ($marker[@mark="open"]) then (
<span class="pp open lem">{concat("~/", $wit)}</span>
)
else (
<span class="pp closeing lem">{concat($wit, "\~")}</span>
)
)
else if ( $marker[@type="ppl" and @context="lem"] ) then (
if ($marker[@mark="open"]) then (
<span class="ppl open lem">{concat("~/", $wit)}</span>
)
else (
<span class="ppl closeing lem">{concat($wit, "\~||", $wit)}</span>
)
)
else if ( $marker[@type="ppl" and @context="rdg"] ) then (
if ($marker[@mark="open"]) then (
<sup>{$wit}</sup>
)
else (
<sup>{$wit}</sup>
)
)
else if ( $marker[@type="v"] ) then (
if ($marker[@mark="open"]) then (
)
else (
<sup>{$wit}</sup>
)
)
else if ( $marker[@type="om"] ) then (
if ($marker[@mark="open"]) then (
<span class="om open">{$wit}</span>
)
else (
<span class="om closeing">{$wit}</span>
)
)
else (
element {"span"}{
attribute {"style"}{"background:orange"},
$marker/name(), ": ",
element{$marker/name()}{
$marker/@*,
presentation:tei-body($marker/node())
}
}
)
};
(:~
: presentation:rdgMarker
: html presentation of an intermediate-format xml document
:
: @param $nodes the nodes to be converted
: @return item()* representing the converted node
:
: @version 1.2 (2017-10-15)
: @status working
: @author Uwe Sikora
:)
declare function presentation:rdg
( $rdg as node() ) as item()* {
if ( $rdg[@type = "pt" or @type = "pp" or @type = "v" or @type="om"] ) then (
)
else (
presentation:tei-body($rdg/node())
)
};
(:~
: presentation:html
: html presentation of an intermediate-format xml document
:
: @param $nodes the nodes to be converted
: @return item()* representing the converted node
:
: @version 1.2 (2017-10-15)
: @status working
: @author Uwe Sikora
:)
declare function presentation:tei-header
($nodes as node()*) as item()* {
for $node in $nodes
return
typeswitch($node)
case processing-instruction() return ()
case comment() return ( $node )
case text() return (
$node
)
case element(tei:teiHeader) return (
presentation:tei-header($node/node())
)
case element(tei:fileDesc) return (
presentation:tei-header($node/node())
)
case element(tei:titleStmt) return (
presentation:tei-header($node/node())
)
case element(tei:title) return (
if ($node[@level]) then (
<div class="value">
<div><strong>title:</strong></div>
<div>{ presentation:tei-header($node/node()) }</div>
</div>
) else (
presentation:tei-header($node/node())
)
)
default return ()
};
<?xml version="1.0" encoding="UTF-8"?>
<div xmlns="http://www.w3.org/1999/xhtml" data-template="templates:surround" data-template-with="templates/page.html" data-template-at="content">
<div class="col-md-9">
<h1>Intermediate Format - Presentation</h1>
<div data-template="app:present"/>
</div>
<div class="col-md-3">
<h2>Metadata</h2>
<div data-template="app:tei-metadata"/>
</div>
</div>
\ No newline at end of file
/* Intermediate formate presentation styles go here */
.ble {
display: block;
background: #E9E8E9;
}
span.label {
font-size: 100%;
color: #000000;
}
span.rdgMarker {
font-weight: bold;
font-size: 16px;
}
span.rdgMarker .om.open::before, span.rdgMarker .om.closeing::after {
content: "om";
background: #FA81FE;
vertical-align: super;
font-size: 70%;
padding-left: 2px;
padding-right: 2px;
}
\ No newline at end of file
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
<meta data-template="config:app-meta"/> <meta data-template="config:app-meta"/>
<link rel="shortcut icon" href="$shared/resources/images/exist_icon_16x16.ico"/> <link rel="shortcut icon" href="$shared/resources/images/exist_icon_16x16.ico"/>
<link rel="stylesheet" type="text/css" href="$shared/resources/css/exist-2.2.css"/> <link rel="stylesheet" type="text/css" href="$shared/resources/css/exist-2.2.css"/>
<link rel="stylesheet" type="text/css" href="resources/css/style.css"/> <link rel="stylesheet" type="text/css" href="$resources/css/style.css"/>
<link rel="stylesheet" type="text/css" href="$resources/css/presentation.if.css"/>
<script type="text/javascript" src="$shared/resources/scripts/jquery/jquery-1.7.1.min.js"/> <script type="text/javascript" src="$shared/resources/scripts/jquery/jquery-1.7.1.min.js"/>
<script type="text/javascript" src="$shared/resources/scripts/bootstrap-3.0.3.min.js"/> <script type="text/javascript" src="$shared/resources/scripts/bootstrap-3.0.3.min.js"/>
<script type="text/javascript" src="$shared/resources/scripts/loadsource.js"/> <script type="text/javascript" src="$shared/resources/scripts/loadsource.js"/>
...@@ -37,6 +38,9 @@ ...@@ -37,6 +38,9 @@
</li> </li>
</ul> </ul>
</li> </li>
<li class="dropdown" id="about">
<a href="output.html">Output</a>
</li>
</ul> </ul>
</div> </div>
</nav> </nav>
......
<?xml version="1.0" encoding="UTF-8"?>
<div xmlns="http://www.w3.org/1999/xhtml" data-template="templates:surround" data-template-with="../index.html" data-template-at="index-body">
<div class="col-md-9">
<h1>Test</h1>
<div data-template="app:present"/>
</div>
</div>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment