<p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:px="http://www.daisy.org/ns/pipeline/xproc" xmlns:pxi="http://www.daisy.org/ns/pipeline/xproc/internal/daisy3-to-daisy202" xmlns:cx="http://xmlcalabash.com/ns/extensions" xmlns:xs="http://www.w3.org/2001/XMLSchema" type="px:daisy3-to-daisy202" version="1.0" name="main"> <p:documentation xmlns="http://www.w3.org/1999/xhtml"> <h1>DAISY 3 to DAISY 2.02</h1> <p>Transforms an audio-only DAISY 3 DTB into an audio-only DAISY 2.02 DTB.</p> </p:documentation> <p:input port="fileset.in" primary="true"/> <p:input port="in-memory.in" sequence="true"/> <p:output port="fileset.out" primary="true"/> <p:output port="in-memory.out" sequence="true"> <p:pipe step="ensure-core-media" port="in-memory"/> </p:output> <p:option name="date" select="''"> <p:documentation xmlns="http://www.w3.org/1999/xhtml"> <p>Date of publication of the result DAISY 2.02 DTB.</p> <p>Must be a ISO8601 date - recommended format is YYYY-MM-DD.</p> <p>Defaults to the current date.</p> </p:documentation> </p:option> <p:option name="output-dir" required="true"/> <p:option name="temp-dir" required="true" cx:as="xs:anyURI"> <p:documentation> <p>Empty directory dedicated to this step.</p> </p:documentation> </p:option> <p:option name="ensure-core-media" cx:as="xs:boolean" select="false()"> <p:documentation> <p>Ensure that the output DAISY 2.02 uses allowed file formats only.</p> </p:documentation> </p:option> <p:serialization port="fileset.out" indent="true"/> <p:serialization port="in-memory.out" indent="true"/> <p:import href="http://www.daisy.org/pipeline/modules/common-utils/library.xpl"> <p:documentation> px:assert </p:documentation> </p:import> <p:import href="http://www.daisy.org/pipeline/modules/fileset-utils/library.xpl"> <p:documentation> px:fileset-load px:fileset-rebase px:fileset-create px:fileset-add-entry px:fileset-join </p:documentation> </p:import> <p:import href="http://www.daisy.org/pipeline/modules/file-utils/library.xpl"> <p:documentation> px:set-base-uri </p:documentation> </p:import> <p:import href="http://www.daisy.org/pipeline/modules/daisy3-utils/library.xpl"> <p:documentation> px:daisy3-upgrade </p:documentation> </p:import> <p:import href="http://www.daisy.org/pipeline/modules/daisy202-utils/library.xpl"> <p:documentation> px:daisy202-audio-transcode </p:documentation> </p:import> <p:import href="convert-smils.xpl"> <p:documentation> pxi:daisy3-to-daisy202-smils </p:documentation> </p:import> <p:import href="oebps-to-ncc-metadata.xpl"> <p:documentation> px:oebps-to-ncc-metadata </p:documentation> </p:import> <px:daisy3-upgrade name="upgrade"> <p:input port="source.in-memory"> <p:pipe port="in-memory.in" step="main"/> </p:input> </px:daisy3-upgrade> <px:fileset-load media-types="application/oebps-package+xml" name="opf"> <p:input port="in-memory"> <p:pipe step="upgrade" port="result.in-memory"/> </p:input> </px:fileset-load> <px:fileset-rebase> <p:input port="source"> <p:pipe step="upgrade" port="result.fileset"/> </p:input> <p:with-option name="new-base" select="resolve-uri('.',base-uri(/*))"> <p:pipe step="opf" port="result"/> </p:with-option> </px:fileset-rebase> <p:identity name="fileset.in"/> <p:documentation>Convert OPF metadata to NCC metadata</p:documentation> <px:oebps-to-ncc-metadata name="metadata"> <p:input port="source"> <p:pipe port="result" step="opf"/> </p:input> </px:oebps-to-ncc-metadata> <p:documentation>Generate the NCC from the NCX</p:documentation> <p:group name="ncc" px:message="Generating NCC document"> <p:output port="fileset" primary="true"> <p:pipe port="result" step="ncc.fileset"/> </p:output> <p:output port="in-memory"> <p:pipe port="result" step="ncc.doc"/> </p:output> <px:fileset-load media-types="application/x-dtbncx+xml"> <p:input port="fileset"> <p:pipe step="fileset.in" port="result"/> </p:input> <p:input port="in-memory"> <p:pipe step="upgrade" port="result.in-memory"/> </p:input> </px:fileset-load> <px:assert error-code="XXXX" test-count-min="1" test-count-max="1" name="ncx" message="The input DTB must contain exactly one NCX file (media-type 'application/x-dtbncx+xml')"/> <p:sink/> <p:xslt name="ncx-to-ncc"> <p:input port="source"> <p:pipe port="result" step="ncx"/> <p:pipe port="result" step="metadata"/> </p:input> <p:input port="stylesheet"> <p:document href="ncx-to-ncc.xsl"/> </p:input> <p:with-param name="date" select="$date"/> </p:xslt> <px:set-base-uri name="ncc.doc"> <p:with-option name="base-uri" select="concat($output-dir,'ncc.html')"/> </px:set-base-uri> <p:group name="ncc.fileset"> <p:output port="result"/> <px:fileset-create> <p:with-option name="base" select="$output-dir"/> </px:fileset-create> <px:fileset-add-entry media-type="application/xhtml+xml"> <p:input port="entry"> <p:pipe step="ncc.doc" port="result"/> </p:input> </px:fileset-add-entry> </p:group> </p:group> <p:sink/> <pxi:daisy3-to-daisy202-smils name="smils" px:message="Downgrading SMIL documents"> <p:input port="source.fileset"> <p:pipe step="fileset.in" port="result"/> </p:input> <p:input port="source.in-memory"> <p:pipe step="upgrade" port="result.in-memory"/> </p:input> <p:with-option name="input-dir" select="base-uri(/*)"> <p:pipe step="fileset.in" port="result"/> </p:with-option> <p:with-option name="output-dir" select="$output-dir"/> </pxi:daisy3-to-daisy202-smils> <px:fileset-join name="result-fileset"> <p:input port="source"> <p:pipe step="ncc" port="fileset"/> <p:pipe step="smils" port="result.fileset"/> </p:input> </px:fileset-join> <p:sink/> <p:identity name="result-docs"> <p:input port="source"> <p:pipe step="ncc" port="in-memory"/> <p:pipe step="smils" port="result.in-memory"/> </p:input> </p:identity> <p:sink/> <p:choose name="ensure-core-media"> <p:when test="$ensure-core-media"> <p:output port="fileset" primary="true"/> <p:output port="in-memory" sequence="true"> <p:pipe step="transcode" port="result.in-memory"/> </p:output> <px:daisy202-audio-transcode new-audio-file-type="audio/mpeg" name="transcode"> <p:input port="source.fileset"> <p:pipe port="result" step="result-fileset"/> </p:input> <p:input port="source.in-memory"> <p:pipe step="result-docs" port="result"/> </p:input> <p:with-option name="temp-dir" select="$temp-dir"/> </px:daisy202-audio-transcode> </p:when> <p:otherwise> <p:output port="fileset" primary="true"/> <p:output port="in-memory" sequence="true"> <p:pipe step="result-docs" port="result"/> </p:output> <p:identity> <p:input port="source"> <p:pipe port="result" step="result-fileset"/> </p:input> </p:identity> </p:otherwise> </p:choose> </p:declare-step>