Skip to content
Snippets Groups Projects
ifweb.xql 4.18 KiB
Newer Older
  • Learn to ignore specific revisions
  • xquery version "3.1";
    
    (:
     : Copyright (c) 2018 Uwe Sikora
     : Copyright (c) 2018–2019 Michelle Weidling
     : Copyright (c) 2020 Stefan Hynek
     :
     : This file is part of intermediate-format.
     :
     : intermediate-format is free software: you can redistribute it and/or modify
     : it under the terms of the GNU General Public License as published by
     : the Free Software Foundation, either version 3 of the License, or
     : (at your option) any later version.
     :
     : intermediate-format is distributed in the hope that it will be useful,
     : but WITHOUT ANY WARRANTY; without even the implied warranty of
     : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     : GNU General Public License for more details.
     :
     : You should have received a copy of the GNU General Public License
     : along with intermediate-format.  If not, see <https://www.gnu.org/licenses/>.
     :)
    
    
     : ifweb.xql offers a simple interface for creating the website specific BdN
     : intermediate format of a given resource.
    
     : @author Michelle Rodzis
     : @version 1.0
    
     :)
    
    module namespace ifweb="http://bdn-edition.de/intermediate_format/ifweb";
    
    declare namespace tei = "http://www.tei-c.org/ns/1.0";
    
    
    MRodz's avatar
    MRodz committed
    import module namespace console="http://exist-db.org/xquery/console";
    
    import module namespace pre="http://bdn-edition.de/intermediate_format/preprocessing" at "preprocessing.xqm";
    import module namespace ident = "http://bdn-edition.de/intermediate_format/identification" at "identification.xqm";
    import module namespace config = "http://bdn-edition.de/intermediate_format/config" at "../config.xqm";
    
    
    declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=no indent=no";
    
    
    declare variable $ifweb:replace-whitespace := true();
    
    MRodz's avatar
    MRodz committed
    
    
    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"
    
    MRodz's avatar
    MRodz committed
        return ifweb:transform($doc, $filename)
    };
    
    
    
    declare function ifweb:transform($doc as node()*, $filename as xs:string)
    
    MRodz's avatar
    MRodz committed
    as node()* {
    
        let $preprocessed-data := pre:preprocessing($doc/tei:TEI, $ifweb:replace-whitespace)
    
        let $intermediate-format := ident:walk($preprocessed-data, ())
    
    MRodz's avatar
    MRodz committed
        let $store := xmldb:store($config:sade-data, $filename, $intermediate-format)
    
    MRodz's avatar
    MRodz committed
        return $intermediate-format
    };
    
    
    
    declare function ifweb:transform($doc as node()*, $filename as xs:string,
    $target-dir as xs:string) as node()* {
        let $preprocessed-data := pre:preprocessing($doc/tei:TEI, $ifweb:replace-whitespace)
        let $intermediate-format := ident:walk($preprocessed-data, ())
        let $store := xmldb:store($target-dir, $filename, $intermediate-format)
    
        return $intermediate-format
    };
    
    
    
    declare function ifweb:complete-xml($author as xs:string, $xml as node()*)
    
    MRodz's avatar
    MRodz committed
    as node()* {
        let $filename := $author || "-full-if.xml"
        return ifweb:transform($xml, $filename)
    };
    
    
    declare function ifweb:single-xml($filename as xs:string, $src-dir as xs:string,
    $target-dir as xs:string) as node()* {
        let $resource := doc($src-dir || $filename)
        return ifweb:transform($resource, $filename, $target-dir)
    
    declare function ifweb:transform-split-xml($xml as node()*, $filename as xs:string,
    
    $dir as xs:string) {
    
        let $preprocessed-data := pre:preprocessing($xml/*, $ifweb:replace-whitespace)
    
    Michelle Weidling's avatar
    Michelle Weidling committed
        let $editorial-notes := pre:get-editorial-notes($xml/*, $ifweb:replace-whitespace)
    
        let $intermediate-format := ident:walk($preprocessed-data, ())
    
    
        (: sometimes we have structural variance on chapter level - in these cases
        tei:app is the root element of $xml, not tei:div. for the HTML serialization
        of the structural variance to function properly we have to preserve the
        tei:app :)
        let $content :=
            if($xml[self::tei:app]) then
                element tei:app {
    
                    $xml/@*,
                    attribute id {generate-id($xml)},
    
                    $intermediate-format
                }
    
            else
                ($xml/@*,
                attribute id {generate-id($xml)},
                $intermediate-format)
    
        let $transformed :=
                element tei:div {
    
    Michelle Weidling's avatar
    Michelle Weidling committed
                    $content,
                    $editorial-notes
    
                }
        let $store := xmldb:store($dir, $filename, $transformed)
    
    
        return $intermediate-format
    };