Just a gentle reminder... despite its esoteric title, it's asking serious questions :-) ...
Thanks, Eric Le jeudi 20 janvier 2005 � 23:22 +0100, Eric van der Vlist a �crit : > Hi, > > I am creating an action to reload a XML dump of my eXist database and > that raises several questions showing that the behaviour of the pipes > called from an action isn't as straightforward as I had thought. > > The bizdoc example shows several cases of such pipes without output that > lead to database operations and the database processors seem to act as > sinks that pull the input of pipes even when they don't have any output, > such as in: > > <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline"> > <p:param name="document-id" type="input" schema-href="../document-id.rng"/> > <p:processor name="oxf:xslt"> > <p:input name="data" href="#document-id"/> > <p:input name="config"> > <xdb:delete xsl:version="2.0" collection="/db/orbeon/bizdoc-example" > xmlns:xdb="http://orbeon.org/oxf/xml/xmldb"> > <xsl:text > xmlns:xsl="http://www.w3.org/1999/XSL/Transform">/document-info[document-id = > '</xsl:text> > <xsl:value-of select="." xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/> > <xsl:text xmlns:xsl="http://www.w3.org/1999/XSL/Transform">']</xsl:text> > </xdb:delete> > </p:input> > <p:output name="data" id="query"/> > </p:processor> > <p:processor name="oxf:xmldb-delete"> > <p:input name="datasource" href="datasource.xml"/> > <p:input name="query" href="#query"/> > </p:processor> > </p:config> > > That's not the case of other processors and if you write an action such > as: > > <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline" > xmlns:oxf="http://www.orbeon.com/oxf/processors" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xdb="http://orbeon.org/oxf/xml/xmldb" > xmlns:bk="http://apiculteurs.info/namespace/" > xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> > <p:param name="instance" type="input"/> > <p:processor name="oxf:identity"> > <p:input name="data" href="#instance" debug="instance"/> > <p:output name="data" id="unused"/> > </p:processor> > </p:config> > > the identity processor is never executed. That's logical and the result > of a good optimisation since the output of the identity processor is > never used. > > Is the difference of behaviour only because the oxf:xmldb-delete has no > output while the oxf:identity processor is it a special property of the > oxf:xmldb-delete processor to act as a sink? > > My database dumps are RDF documents in which I'd like to split each top > level element in a separate document in the eXist database (embedded in > its own rdf root element to make it snippet a valid RDF document). > > The p:for-each loop seems to be the right tool to do so. > > Unfortunately, the for-each has a mandatory output that I need to > declare even if the branches of the for-each are oxf:xmldb-insert that > have no output. > > As a result of that, the for-each loop isn't considered as a sink and > isn't executed when the action is called. > > The workaround I have found for that is to create a fake result that I > remove with an XPointer expression before generating the output: > > <p:config xmlns:p="http://www.orbeon.com/oxf/pipeline" > xmlns:oxf="http://www.orbeon.com/oxf/processors" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xdb="http://orbeon.org/oxf/xml/xmldb" > xmlns:bk="http://apiculteurs.info/namespace/" > xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> > <p:param name="instance" type="input"/> > <p:param name="data" type="output"/> > <p:processor name="oxf:pipeline"> > <p:input name="config" href="read-uri.xpl"/> > <p:input name="uri" href="aggregate('uri', > #instance#xpointer(string(/form/files/file)))" > debug="uri"/> > <p:output name="data" id="document" debug="upload"/> > </p:processor> > <p:for-each href="#document" select="/rdf:RDF/*" root="unused" > id="unused"> > <p:processor name="oxf:xmldb-insert"> > <p:input name="datasource" > href="data-access/exist/datasource.xml"/> > <p:input name="query"> > <xdb:insert collection="/db/apiculteurs/apiculteurs"/> > </p:input> > <p:input name="data" href="aggregate('rdf:RDF', current())" > debug="individualFile"/> > </p:processor> > <p:processor name="oxf:identity"> > <p:input name="data" href="current()"/> > <p:output name="data" ref="unused"/> > </p:processor> > </p:for-each> > <p:processor name="oxf:identity"> > <p:input name="data" href="aggregate('foo', #instance, #unused)"/> > <p:output name="data" id="hack"/> > </p:processor> > <p:processor name="oxf:identity"> > <p:input name="data" href="#hack#xpointer(/foo/form)"/> > <p:output name="data" ref="data"/> > </p:processor> > </p:config> > > That's working, but this is neither elegant, readable nor (probably) > efficient. > > Is there a simpler way of doing that? > > Would it solve the problem if the id attribute of p:for-each was made > optional and the for-each considered as a sink when the attribute > missing? > > Thanks, > > Eric -- Have you ever thought about unit testing XSLT templates? http://xsltunit.org ------------------------------------------------------------------------ Eric van der Vlist http://xmlfr.org http://dyomedea.com (ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax (W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema ------------------------------------------------------------------------ ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ orbeon-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/orbeon-user
