diff --git a/modules/intermediate_format/ifweb.xql b/modules/intermediate_format/ifweb.xql new file mode 100644 index 0000000000000000000000000000000000000000..f7ea31ebc39c4a55b4c89f4035f702cffd7b8034 --- /dev/null +++ b/modules/intermediate_format/ifweb.xql @@ -0,0 +1,30 @@ +(:~ + : ifweb.xql offers a simple interface for creating the website specific BdN + : intermediate format of a given resource. + : + : @author Michelle Rodzis + : @version 1.0 + : + :) +xquery version "3.1"; + +module namespace ifweb="http://bdn-edition.de/intermediate_format/ifweb"; + +declare namespace tei = "http://www.tei-c.org/ns/1.0"; + +import module namespace pre="http://bdn-edition.de/intermediate_format/preprocessing" at "xmldb:exist:///db/apps/interformat/modules/intermediate_format/preprocessing.xqm"; +import module namespace ident = "http://bdn-edition.de/intermediate_format/identification" at "xmldb:exist:///db/apps/interformat/modules/intermediate_format/identification.xqm"; +import module namespace config = "http://bdn-edition.de/intermediate_format/config" at "xmldb:exist:///db/apps/interformat/modules/config.xqm"; + +declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=no indent=no"; + +declare function ifweb:main($resource as xs:string) as xs:string? { + let $doc := doc($config:sade-data || $resource) + let $filename := substring-before($resource, '.xml') || "-if.xml" + + let $replace-whitespace := false() + let $preprocessed-data := pre:preprocessing($doc/tei:TEI, $replace-whitespace) + let $intermediate-format := ident:walk($preprocessed-data, ()) + + return xmldb:store($config:sade-data, $filename, $intermediate-format) +}; \ No newline at end of file diff --git a/modules/intermediate_format/preprocessing.xqm b/modules/intermediate_format/preprocessing.xqm index 8c85ecae8f7939800d91b54283c86f61683e7ead..f8aa4cdabb0933a4a80433226c0630d480463eab 100644 --- a/modules/intermediate_format/preprocessing.xqm +++ b/modules/intermediate_format/preprocessing.xqm @@ -136,7 +136,7 @@ declare function pre:default-element : @author Uwe Sikora :) declare function pre:preprocessing - ($nodes as node()*) as item()* { + ($nodes as node()*, $replace-whitespace as xs:boolean) as item()* { for $node in $nodes return @@ -144,7 +144,12 @@ declare function pre:preprocessing case processing-instruction() return () case text() return ( + if($replace-whitespace) then ( whitespace:text($node, " ") + ) + else ( + $node + ) ) case comment() return () @@ -152,11 +157,11 @@ declare function pre:preprocessing case element(TEI) return ( element{$node/name()}{ $node/@*, - pre:preprocessing($node/node()), + pre:preprocessing($node/node(), $replace-whitespace), element{"editorialNotes"}{ for $editorial-note in $node//note[@type eq "editorial-commentary"] return - pre:default-element( $editorial-note, pre:preprocessing($editorial-note/node()) ) + pre:default-element( $editorial-note, pre:preprocessing($editorial-note/node(), $replace-whitespace) ) } } ) @@ -165,10 +170,10 @@ declare function pre:preprocessing case element(div) return ( if ($node[@type = 'section-group']) then ( - pre:preprocessing($node/node()) + pre:preprocessing($node/node(), $replace-whitespace) ) else ( - pre:default-element( $node, pre:preprocessing($node/node()) ) + pre:default-element( $node, pre:preprocessing($node/node(), $replace-whitespace) ) ) ) @@ -177,7 +182,7 @@ declare function pre:preprocessing element{$node/name()}{ $node/@*, attribute {"id"}{ generate-id($node)}, - pre:preprocessing($node/node()) + pre:preprocessing($node/node(), $replace-whitespace) } ) @@ -185,13 +190,13 @@ declare function pre:preprocessing element{$node/name()}{ $node/@*, attribute {"id"}{ generate-id($node)}, - pre:preprocessing($node/node()) + pre:preprocessing($node/node(), $replace-whitespace) } ) case element(note) return ( if ( $node[@type != "editorial-commentary"] or $node[ not(@type) ] ) then ( - pre:default-element( $node, pre:preprocessing($node/node()) ) + pre:default-element( $node, pre:preprocessing($node/node(), $replace-whitespace) ) ) else ( ) ) @@ -233,11 +238,11 @@ declare function pre:preprocessing if($node[@rend = 'right-aligned' or @rend = 'center-aligned']) then( element {'aligned'} { $node/@*, - pre:preprocessing($node/node()) + pre:preprocessing($node/node(), $replace-whitespace) } ) else ( - pre:default-element( $node, pre:preprocessing($node/node()) ) + pre:default-element( $node, pre:preprocessing($node/node(), $replace-whitespace) ) ) ) @@ -245,27 +250,27 @@ declare function pre:preprocessing if($node[@type = 'item']) then( element {'item'} { $node/@*[name() != 'type'], - pre:preprocessing($node/node()) + pre:preprocessing($node/node(), $replace-whitespace) } ) else if($node[@type = 'head']) then( element {'head'} { $node/@*[name() != 'type'], - pre:preprocessing($node/node()) + pre:preprocessing($node/node(), $replace-whitespace) } ) else if($node[@type = 'row']) then( element {'row'} { $node/@*[name() != 'type'], - pre:preprocessing($node/node()) + pre:preprocessing($node/node(), $replace-whitespace) } ) else ( - pre:default-element( $node, pre:preprocessing($node/node()) ) + pre:default-element( $node, pre:preprocessing($node/node(), $replace-whitespace) ) ) ) default return ( - pre:default-element( $node, pre:preprocessing($node/node()) ) + pre:default-element( $node, pre:preprocessing($node/node(), $replace-whitespace) ) ) }; diff --git a/rest/intermediate_format.xql b/rest/intermediate_format.xql index 4010b36db7764da9cb48236da83c794886b826ab..73b3166e871b95212fc670ce7b12f5a7278530db 100644 --- a/rest/intermediate_format.xql +++ b/rest/intermediate_format.xql @@ -13,9 +13,10 @@ declare option exist:serialize "method=xml media-type=text/xml omit-xml-declarat declare variable $resource-uri := request:get-parameter("resource", ("/db/apps/interformat/data/samples/samples.xml")); declare variable $uri := request:get-parameter("uri", ()); declare variable $mode := request:get-parameter("mode", ()); +declare variable $replace-whitespace := true(); let $doc := ifutils:get-resource($resource-uri) -let $preprocessed-data := pre:preprocessing($doc/tei:TEI) +let $preprocessed-data := pre:preprocessing($doc/tei:TEI, $replace-whitespace) let $intermediate-format := ident:walk($preprocessed-data, ()) let $store := if ($mode = "store") then ( let $filename := concat(replace($resource-uri, '.+/(.+)$', '$1'), ".out") @@ -26,4 +27,4 @@ let $store := if ($mode = "store") then ( return ( $intermediate-format -) \ No newline at end of file +)