<
p:declare-step xmlns:p=
"http://www.w3.org/ns/xproc" xmlns:px=
"http://www.daisy.org/ns/pipeline/xproc" xmlns:cx=
"http://xmlcalabash.com/ns/extensions" xmlns:xs=
"http://www.w3.org/2001/XMLSchema" xmlns:d=
"http://www.daisy.org/ns/pipeline/data" version=
"1.0" type=
"px:dtbook-load" name=
"main">
<
p:documentation> Loads the DTBook XML fileset. </
p:documentation>
<
p:input port=
"source.fileset" primary=
"true">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>The input fileset containing the DTBook files (marked with
<
code>media-type="application/x-dtbook+xml"</
code>.</
p>
<
p>Will also be used for loading other resources. If files are present in memory, they
are expected to be <
code>c:data</
code> documents. Only when files are not present in
this fileset, it will be attempted to load them from disk.</
p>
</
p:documentation>
</
p:input>
<
p:input port=
"source.in-memory" sequence=
"true">
<
p:empty/>
</
p:input>
<
p:option name=
"validation" cx:as=
"xs:boolean" select=
"false()">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>Whether to perform validation of the input.</
p>
</
p:documentation>
</
p:option>
<
p:option name=
"mathml-version" select=
"'3.0'" cx:type=
"3.0|2.0">
<
p:documentation>
<
p>Version of MathML in the DTBook file</
p>
</
p:documentation>
</
p:option>
<
p:option name=
"check-images" select=
"false()" cx:as=
"xs:boolean">
<
p:documentation>
<
p>Check to see that referenced images exist on disk</
p>
</
p:documentation>
</
p:option>
<
p:option name=
"nimas" cx:as=
"xs:boolean" select=
"false()">
<
p:documentation>
<
p>Validate against NIMAS 1.1</
p>
</
p:documentation>
</
p:option>
<
p:output port=
"result.fileset" primary=
"true">
<
p:pipe step=
"fileset" port=
"result.fileset"/>
</
p:output>
<
p:output port=
"result.in-memory" sequence=
"true">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>Fileset containing all the DTBook files and any resources they reference (images
etc.). Only contains resources that actually exist on disk. The DTBooks are loaded into
memory. The <
code>original-href</
code> attributes reflects which files are stored on
disk.</
p>
</
p:documentation>
<
p:pipe step=
"dtbooks" port=
"result"/>
</
p:output>
<
p:output port=
"validation-report" sequence=
"true" px:media-type=
"application/vnd.pipeline.report+xml">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>The validation report</
p>
<
p>Can contain as many report documents as there are DTBook files in the input.</
p>
<
p>The port is empty if the <
code>validation</
code> option is set to false or if the
input contains no invalid DTBook files.</
p>
</
p:documentation>
<
p:pipe step=
"validate" port=
"report"/>
</
p:output>
<
p:output port=
"validation-status" px:media-type=
"application/vnd.pipeline.status+xml">
<
p:documentation xmlns=
"http://www.w3.org/1999/xhtml">
<
p>The <
a href=
"http://daisy.github.io/pipeline/StatusXML">validation status</
a>
document</
p>
<
p>'ok' if the input does not contain invalid DTBook files, 'error' otherwise.</
p>
</
p:documentation>
<
p:pipe step=
"validate" port=
"status"/>
</
p:output>
<
p:import href=
"http://www.daisy.org/pipeline/modules/common-utils/library.xpl">
<
p:documentation>
px:assert
px:parse-xml-stylesheet-instructions
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/fileset-utils/library.xpl">
<
p:documentation>
px:fileset-join
px:fileset-load
px:fileset-purge
px:fileset-filter
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/mediatype-utils/library.xpl">
<
p:documentation>
px:mediatype-detect
</
p:documentation>
</
p:import>
<
p:import href=
"http://www.daisy.org/pipeline/modules/css-utils/library.xpl">
<
p:documentation>
px:css-to-fileset
</
p:documentation>
</
p:import>
<
p:import href=
"validate-dtbook/validate-dtbook.xpl">
<
p:documentation>
px:dtbook-validate
</
p:documentation>
</
p:import>
<
px:fileset-load media-types=
"application/x-dtbook+xml" name=
"dtbooks">
<
p:input port=
"in-memory">
<
p:pipe step=
"main" port=
"source.in-memory"/>
</
p:input>
</
px:fileset-load>
<
p:for-each>
<
p:xslt>
<
p:input port=
"stylesheet">
<
p:document href=
"dtbook-fileset.xsl"/>
</
p:input>
<
p:with-param port=
"parameters" name=
"context.fileset" select=
"/">
<
p:pipe step=
"main" port=
"source.fileset"/>
</
p:with-param>
<
p:with-param port=
"parameters" name=
"context.in-memory" select=
"collection()">
<
p:pipe step=
"main" port=
"source.in-memory"/>
</
p:with-param>
</
p:xslt>
</
p:for-each>
<
px:fileset-join/>
<
px:mediatype-detect/>
<
p:identity name=
"resources-mathml"/>
<
p:sink/>
<
p:for-each>
<
p:iteration-source>
<
p:pipe step=
"dtbooks" port=
"result"/>
</
p:iteration-source>
<
px:parse-xml-stylesheet-instructions name=
"parse-pi"/>
<
p:sink/>
<
p:delete match=
"d:file[not(@media-type='text/css')]">
<
p:input port=
"source">
<
p:pipe step=
"parse-pi" port=
"fileset"/>
</
p:input>
</
p:delete>
</
p:for-each>
<
p:identity name=
"css-from-pi"/>
<
p:sink/>
<
p:group name=
"referenced-from-css">
<
p:output port=
"result"/>
<
px:fileset-join>
<
p:input port=
"source">
<
p:pipe step=
"resources-mathml" port=
"result"/>
<
p:pipe step=
"css-from-pi" port=
"result"/>
</
p:input>
</
px:fileset-join>
<
px:css-to-fileset/>
</
p:group>
<
p:sink/>
<
px:fileset-join>
<
p:input port=
"source">
<
p:pipe step=
"dtbooks" port=
"result.fileset"/>
<
p:pipe step=
"resources-mathml" port=
"result"/>
<
p:pipe step=
"css-from-pi" port=
"result"/>
<
p:pipe step=
"referenced-from-css" port=
"result"/>
</
p:input>
</
px:fileset-join>
<
px:fileset-purge name=
"fileset">
<
p:input port=
"source.in-memory">
<
p:pipe step=
"dtbooks" port=
"result"/>
</
p:input>
</
px:fileset-purge>
<
p:choose name=
"validate">
<
p:when test=
"not($validation)">
<
p:output port=
"status" primary=
"true">
<
p:inline>
<
d:validation-status result=
"ok"/>
</
p:inline>
</
p:output>
<
p:output port=
"report" sequence=
"true">
<
p:empty/>
</
p:output>
<
p:sink/>
</
p:when>
<
p:otherwise px:message=
"Validating DTBook">
<
p:output port=
"status" primary=
"true"/>
<
p:output port=
"report" sequence=
"true">
<
p:pipe step=
"each" port=
"report"/>
</
p:output>
<
px:fileset-load media-types=
"application/x-dtbook+xml" name=
"load">
<
p:input port=
"in-memory">
<
p:pipe step=
"dtbooks" port=
"result"/>
</
p:input>
</
px:fileset-load>
<
p:for-each name=
"each">
<
p:output port=
"report" sequence=
"true">
<
p:pipe step=
"status-and-report" port=
"report"/>
</
p:output>
<
p:output port=
"status" primary=
"true"/>
<
p:identity name=
"single-dtbook"/>
<
p:sink/>
<
px:fileset-add-entry media-type=
"application/x-dtbook+xml" name=
"single-dtbook-fileset">
<
p:input port=
"entry">
<
p:pipe step=
"single-dtbook" port=
"result"/>
</
p:input>
</
px:fileset-add-entry>
<
px:dtbook-validate name=
"dtbook-validate">
<
p:input port=
"source.in-memory">
<
p:pipe step=
"single-dtbook-fileset" port=
"result.in-memory"/>
</
p:input>
<
p:with-option name=
"nimas" select=
"$nimas"/>
<
p:with-option name=
"mathml-version" select=
"$mathml-version"/>
<
p:with-option name=
"check-images" select=
"$check-images"/>
</
px:dtbook-validate>
<
p:sink/>
<
p:identity>
<
p:input port=
"source">
<
p:pipe step=
"dtbook-validate" port=
"validation-status"/>
</
p:input>
</
p:identity>
<
p:choose name=
"status-and-report">
<
p:when test=
"/d:validation-status[@result='ok']">
<
p:output port=
"status" primary=
"true"/>
<
p:output port=
"report" sequence=
"true">
<
p:empty/>
</
p:output>
<
p:identity/>
</
p:when>
<
p:otherwise>
<
p:output port=
"status" primary=
"true"/>
<
p:output port=
"report">
<
p:pipe step=
"dtbook-validate" port=
"html-report"/>
</
p:output>
<
p:identity/>
</
p:otherwise>
</
p:choose>
</
p:for-each>
<
p:template>
<
p:input port=
"template">
<
p:inline><
d:validation-status result=
"{$status}"/></
p:inline>
</
p:input>
<
p:input port=
"source">
<
p:empty/>
</
p:input>
<
p:with-param port=
"parameters" name=
"status" select=
"if (collection()//d:validation-status[@result='error']) then 'error' else 'ok'"/>
</
p:template>
</
p:otherwise>
</
p:choose>
</
p:declare-step>