- From: Conal Tuohy <conal.tuohy@versi.edu.au>
- Date: Mon, 12 Mar 2012 17:42:50 +1100
- To: XProc Dev <xproc-dev@w3.org>
Embarrassing isn't it, when you ask for help and then immediately see a better alternative yourself? I managed to remove the p:choose[@name='whether-to-save-record'] within the p:viewport moving the conditional into a predicate in the p:viewport's select statement (see below). I guess I could also convert the resumptionToken handling to use a p:viewport rather than a p:choose. The sub-pipeline of the p:viewport would run either once (if there were a resumptionToken) or not at all. Perhaps the rule of thumb I'm looking for is: To implement a simple "if", always use a p:viewport rather than a p:choose (because the p:otherwise would be a pain). > <?xml version="1.0"?> > <p:declare-step > version="1.0" > xmlns:p="http://www.w3.org/ns/xproc" > xmlns:fn="http://www.w3.org/2005/xpath-functions" > xmlns:harvester="tag:conal.tuohy@versi.edu.au,2012:oai-pmh" > xmlns:oai="http://www.openarchives.org/OAI/2.0/" > xmlns:tdar="http://www.tdar.org/namespace" > > > > <harvester:list-records > name="harvest" > base-uri="http://ahad.edu.au/oai-pmh/oai" > base-storage-uri="/tmp/harvest/" > metadata-prefix="tdar"/> > > <p:declare-step type="harvester:list-records" name="list-records"> > <p:option name="base-uri" required="true"/> > <p:option name="base-storage-uri" required="true"/> > <p:option name="metadata-prefix"/> > <p:option name="resumption-token"/> > <p:variable name="uri" select="concat($base-uri, > '?verb=ListRecords&')"/> > <!-- query the OAI-PMH server --> > <p:choose name="resumption-token-or-metadata-prefix"> > <p:when test="p:value-available('resumption-token')"> > <p:load name="query-with-resumption-token"> > <p:with-option name="href" select="concat($uri, 'resumptionToken=', > $resumption-token)"/> > </p:load> > </p:when> > <p:otherwise> > <p:load name="query-with-metadata-prefix"> > <p:with-option name="href" select="concat($uri, 'metadataPrefix=', > $metadata-prefix)"/> > </p:load> > </p:otherwise> > </p:choose> > <p:identity name="query-results"/> > <p:viewport name="record" > match="oai:OAI-PMH/oai:ListRecords/oai:record[oai:metadata[tdar:dataset | > tdar:project | tdar:person | tdar:institution | tdar:image | > tdar:sensoryData]]"> > <!-- double-encode the record identifier so as to produce URI-encoded > file name --> > <p:variable name="file-name" > select="concat(fn:encode-for-uri(fn:encode-for-uri(/oai:record/oai:header/oai:identifier)), > '.xml')"/> > <!-- save the record --> > <p:store name="save-record" indent="true"> > <p:input port="source" select="oai:record/oai:metadata/*"/> > <p:with-option name="href" select="concat($base-storage-uri, > $file-name)"/> > </p:store> > <p:identity> > <p:input port="source"> > <p:pipe step="save-record" port="result"/> > </p:input> > </p:identity> > </p:viewport> > > <!-- query again (recursively) if a resumptionToken was returned in > the query results --> > <p:choose name="whether-to-resume-query"> > <p:variable name="resumption-token-returned" > select="/oai:OAI-PMH/oai:ListRecords/oai:resumptionToken"/> > <p:when test="normalize-space($resumption-token-returned)"> > <harvester:list-records> > <p:with-option name="base-uri" select="$base-uri"/> > <p:with-option name="base-storage-uri" select="$base-storage-uri"/> > <p:with-option name="resumption-token" > select="$resumption-token-returned"/> > </harvester:list-records> > </p:when> > <p:otherwise> > <!-- no resumption token (or empty resumption token) returned; nothing > to do --> > <p:identity name="dummy1"/> > <p:sink name="dummy2"/> > </p:otherwise> > </p:choose> > > </p:declare-step> > > </p:declare-step> -- Conal Tuohy eResearch Business Analyst Victorian eResearch Strategic Initiative +61-466324297
Received on Monday, 12 March 2012 06:43:26 UTC