W3C home > Mailing lists > Public > xproc-dev@w3.org > March 2011

Re: Adding p:group gets rid of ERR : Unbound primary output.. why?

From: Romain Deltour <rdeltour@gmail.com>
Date: Thu, 17 Mar 2011 16:42:01 +0100
Cc: XProc Dev <xproc-dev@w3.org>
Message-Id: <D5A6BA35-26A6-4359-89C2-9BFBED49E3B1@gmail.com>
To: Alex Muir <alex.g.muir@gmail.com>
Note also that you can decide to change the declaration of oh:save- 
output to make it's "result" output non-primary (@primary='false').  
The benefit is that you do not have to add "p:sink" when you want to  
ignore the output, the drawback is that you will not benefit from  
implicit primary port connections to the following steps (or parent  
container output port).

Romain.

Le 17 mars 11 à 16:38, Romain Deltour a écrit :

>> why in this case should there be something connected?
>
>
> The oh:save-output declares a primary output port named "result".  
> The spec says that all primary output ports  *must* be connected.
>
> In your pipeline, this primary output port is not bound in the  
> instance of oh:save-output named "SAVEME". It is not bound because  
> 1. there is no explicit connection and 2. the next sibling step  
> (identity) has its primary input explicitly connected to something  
> else.
>
> HTH,
> Romain.
>
> Le 17 mars 11 à 16:21, Alex Muir a écrit :
>
>> Well perhaps I'm not clear on your statements but the declaration  
>> oh:save-output specifies the result to be the identity. So when you  
>> mention "nothing is connected to the primary output port" the  
>> thought comes why in this case should there be something connected?  
>> The intention is to save a copy and then move on with a copy of  
>> what was saved to be used as input to the next step. Did I do this  
>> incorrectly or could it be improved?
>>
>> <p:declare-step name="saveDocument" type="oh:save-output">
>>     <p:input port="source" primary="true"/>
>>     <p:output port="result">
>>       <p:pipe port="result" step="ident"/>
>>     </p:output>
>>     <p:option name="step-name" required="true"/>
>>     <p:option name="save" select="'false'"/>
>>     <p:option name="href" required="true"/>
>>     <p:identity name="ident"/>
>>
>>     <p:choose>
>>       <p:when test="$save = 'true'">
>>         <p:store>
>>
>>           <p:with-option name="href" select="$href">
>>             <p:pipe port="result" step="ident"/>
>>           </p:with-option>
>>         </p:store>
>>       </p:when>
>>       <p:otherwise>
>>         <p:sink/>
>>       </p:otherwise>
>>     </p:choose>
>>   </p:declare-step>
>>
>> Thanks
>>
>> On Thu, Mar 17, 2011 at 3:11 PM, <vojtech.toman@emc.com> wrote:
>> A Calabash bug; no doubt about it now. You should get the error  
>> with or without the p:group wrapper as nothing is connected to the  
>> primary output port of SAVEME. If this is intentional and you  
>> really don’t care about the result of SAVEME, simply add p:sink  
>> right after it:
>>
>>
>> <oh:save-output name="SAVEME" step- 
>> name="saveidentifyDifferentOldNewOfficeCodes">
>>
>>   <p:with-option name="save" select="'true'"/>
>>
>>   <p:with-option name="href"  
>> select="$hrefIdentifyDifferentOldNewOfficeCodes"/>
>>
>> </oh:save-output>
>>
>> <p:sink/>
>>
>>
>> Thank should fix it.
>>
>>
>>
>> Vojtech
>>
>>
>> --
>>
>> Vojtech Toman
>>
>> Consultant Software Engineer
>>
>> EMC | Information Intelligence Group
>>
>> vojtech.toman@emc.com
>>
>> http://developer.emc.com/xmltech
>>
>>
>>
>>
>> From: Alex Muir [mailto:alex.g.muir@gmail.com]
>> Sent: Thursday, March 17, 2011 3:56 PM
>> To: Toman, Vojtech
>> Cc: xproc-dev@w3.org
>> Subject: Re: Adding p:group gets rid of ERR : Unbound primary  
>> output.. why?
>>
>>
>> Good call Vojtech,, I added a name to the save-output step and the  
>> error message is related to that step. I hadn't noticed that I was  
>> thinking the step-name was the name I suppose.
>>
>> E [Calabash XProc] ERR : Unbound primary output: [output result on  
>> SAVEME]
>>
>>    <oh:save-output name="SAVEME" step- 
>> name="saveidentifyDifferentOldNewOfficeCodes">
>>       <p:with-option name="save" select="'true'"/>
>>       <p:with-option name="href"  
>> select="$hrefIdentifyDifferentOldNewOfficeCodes"/>
>>     </oh:save-output>
>>
>>
>> Here is the code.
>> ---------
>> <?xml version="1.0" encoding="UTF-8"?>
>> <p:declare-step xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step 
>> " xmlns:cx="http://xmlcalabash.com/ns/extensions" xmlns:xs="http://www.w3.org/2001/XMLSchema 
>> " xmlns:oh="http://oami.europa.eu" version="1.0">
>>
>>   <p:input port="source">
>>     <p:inline>
>>       <xml/>
>>     </p:inline>
>>   </p:input>
>>
>>   <p:output port="result"/>
>>
>>   <p:declare-step name="saveDocument" type="oh:save-output">
>>     <p:input port="source" primary="true"/>
>>     <p:output port="result">
>>       <p:pipe port="result" step="ident"/>
>>     </p:output>
>>     <p:option name="step-name" required="true"/>
>>     <p:option name="save" select="'false'"/>
>>     <p:option name="href" required="true"/>
>>     <p:identity name="ident"/>
>>
>>     <p:choose>
>>       <p:when test="$save = 'true'">
>>         <p:store>
>>           <p:with-option name="href" select="$href">
>>             <p:pipe port="result" step="ident"/>
>>           </p:with-option>
>>         </p:store>
>>       </p:when>
>>       <p:otherwise>
>>         <p:sink/>
>>       </p:otherwise>
>>     </p:choose>
>>   </p:declare-step>
>>
>>
>>   <p:variable name="debugOutput" select="true()"/>
>>   <p:variable name="regexOffices" select="'^(Portugal):'"/>
>>   <p:variable name="regexSelectSchemaTypes" select="'\{\{Schema\s+ 
>> (E(lement|numeration)|Type|Attribute)'"/>
>>   <p:variable name="regexOfficeCodeList" select="'(PT)$'"/>
>>   <p:variable name="OfficeCodeList" select="'PT'" oh:doc="the  
>> office code list one wants to make a schema for"/>
>>   <p:variable name="OfficeCodeArgSeperator" select="','"/>
>>   <p:variable name="category" select="'D7'"/>
>>
>>
>>   <p:variable name="hrefdebugOutputFolder" select="'../debug/'"/>
>>   <p:variable name="hrefWikiDumpInput" select="'../in/p13- 
>> wikidump.xml'"/>
>>   <p:variable name="hrefFullRDF" select="'../in/p13.rdf'"/>
>>   <p:variable name="hrefRDF" select="'../in/p13_slim.rdf'"/>
>>   <p:variable name="hrefSchemaOutput" select="'../out/TM-XML- 
>> V1-4.xsd'"/>
>>   <p:variable name="hrefOfficeSpecificWikiDump" select="'../out/ 
>> officeSpecificOutput.xml'"/>
>>   <p:variable name="hrefOfficeSpecificWikiDumpCategoryAppended"  
>> select="'../out/officeSpecificWikiDumpCategoryAppended.xml'"/>
>>
>>   <p:variable name="hrefIdentifyDifferentOldNewOfficeCodes"  
>> select="'../out/DifferentOldNewOfficeCodes.xml'"/>
>>
>>   <p:group name="SlimRDF">
>>     <p:load>
>>       <p:with-option name="href" select="$hrefFullRDF"/>
>>     </p:load>
>>
>>     <p:xslt name="slim_RDF" version="1.0" oh:doc="run the  
>> stylesheet that slims the full RDF to be an office specific RDF">
>>       <p:input port="stylesheet">
>>         <p:document href="../xslt/slim_RDF.xsl"/>
>>       </p:input>
>>       <p:with-param name="regexOffices" select="$regexOffices"/>
>>       <p:with-param name="regexOfficeCodeList"  
>> select="$regexOfficeCodeList"/>
>>       <p:input port="parameters">
>>         <p:empty/>
>>       </p:input>
>>     </p:xslt>
>>
>>     <oh:save-output step-name="saveSlim_RDF">
>>       <p:with-option name="save" select="'true'"/>
>>       <p:with-option name="href" select="$hrefRDF"/>
>>     </oh:save-output>
>>
>>     <p:sink/>
>>   </p:group>
>>
>>   <p:group name="GenerateOfficeSpecificWIkiDump">
>>
>>     <p:load>
>>       <p:with-option name="href" select="$hrefWikiDumpInput"/>
>>     </p:load>
>>
>>     <oh:save-output step-name="debugOutputBeforeStripPagesNotInRDF">
>>       <p:with-option name="save" select="$debugOutput"/>
>>       <p:with-option name="href"  
>> select 
>> = 
>> "concat 
>> ($hrefdebugOutputFolder,'debugOutputBeforeStripPagesNotInRDF.xml')"/>
>>     </oh:save-output>
>>
>>     <p:xslt name="removePagesWithoutReferencedComponent"  
>> version="1.0">
>>       <p:input port="stylesheet">
>>         <p:document href="../xslt/ 
>> removePagesWithoutReferencedComponentKeyed.xsl"/>
>>       </p:input>
>>       <p:with-param name="hrefRDF" select="$hrefRDF"/>
>>       <p:with-param name="regexOfficeCodeList"  
>> select="$regexOfficeCodeList"/>
>>       <p:input port="parameters">
>>         <p:empty/>
>>       </p:input>
>>     </p:xslt>
>>
>>     <oh:save-output step-name="debugOutputBeforeGenerateOfficeCode">
>>       <p:with-option name="save" select="$debugOutput"/>
>>       <p:with-option name="href"  
>> select 
>> = 
>> "concat 
>> ($hrefdebugOutputFolder,'debugOutputBeforeGenerateOfficeCode.xml')"/>
>>     </oh:save-output>
>>
>>     <p:xslt name="GenerateOfficeCode" version="1.0" oh:doc="run  
>> xslt to append the office code list">
>>       <p:input port="stylesheet">
>>         <p:document href="../xslt/GenerateOfficeCodeKeyed.xsl"/>
>>       </p:input>
>>       <p:with-param name="hrefRDF" select="$hrefRDF"/>
>>       <p:with-param name="regexSelectSchemaTypes" select="'\{\ 
>> {Schema\s+(E(lement|numeration)|Type|Attribute)'"/>
>>       <p:input port="parameters">
>>         <p:empty/>
>>       </p:input>
>>     </p:xslt>
>>
>>     <oh:save-output step-name="saveOfficeSpecificWikiDump">
>>       <p:with-option name="save" select="'true'"/>
>>       <p:with-option name="href"  
>> select="$hrefOfficeSpecificWikiDump"/>
>>     </oh:save-output>
>>   </p:group>
>>
>>  <!-- <p:group  
>> name="CreateOfficeSpecificWikiDumpCategoryAppended">-->
>>     <p:identity name="PutCopyOfficeSpecificWikiDump"/>
>>
>>     <p:xslt name="identifyDifferentOldNewOfficeCodes" version="1.0"  
>> oh:doc="Creates a list of pages that have different old and new  
>> office codes">
>>       <p:input port="stylesheet">
>>         <p:document href="../xslt/ 
>> identifyDifferentOldNewOfficeCodes.xsl"/>
>>       </p:input>
>>       <p:with-param name="hrefRDF" select="$hrefRDF"/>
>>       <p:with-param name="regexSelectSchemaTypes" select="'\{\ 
>> {Schema\s+(E(lement|numeration)|Type|Attribute)'"/>
>>       <p:input port="parameters">
>>         <p:empty/>
>>       </p:input>
>>     </p:xslt>
>>
>>     <oh:save-output name="SAVEME" step- 
>> name="saveidentifyDifferentOldNewOfficeCodes">
>>       <p:with-option name="save" select="'true'"/>
>>       <p:with-option name="href"  
>> select="$hrefIdentifyDifferentOldNewOfficeCodes"/>
>>     </oh:save-output>
>>
>>     <p:identity name="GetCopyOfficeSpecificWikiDump">
>>       <p:input port="source">
>>         <p:pipe port="result" step="PutCopyOfficeSpecificWikiDump"/>
>>       </p:input>
>>     </p:identity>
>>
>>
>>     <p:xslt name="AppendCategory" version="1.0" oh:doc="Appends the  
>> category to things that have changed">
>>       <p:input port="stylesheet">
>>         <p:document href="../xslt/AppendCategory.xsl"/>
>>       </p:input>
>>       <p:with-param name="hrefDiff"  
>> select="$hrefIdentifyDifferentOldNewOfficeCodes"/>
>>       <p:with-param name="regexSelectSchemaTypes" select="'\{\ 
>> {Schema\s+(E(lement|numeration)|Type|Attribute)'"/>
>>       <p:with-param name="category" select="$category"/>
>>       <p:input port="parameters">
>>         <p:empty/>
>>       </p:input>
>>     </p:xslt>
>>
>>     <oh:save-output step- 
>> name="saveOfficeSpecificWikiDumpCategoryAppended">
>>       <p:with-option name="save" select="'true'"/>
>>       <p:with-option name="href"  
>> select="$hrefOfficeSpecificWikiDumpCategoryAppended"/>
>>     </oh:save-output>
>>
>>     <p:identity name="GetSecondCopyOfficeSpecificWikiDump">
>>       <p:input port="source">
>>         <p:pipe port="result" step="PutCopyOfficeSpecificWikiDump"/>
>>       </p:input>
>>     </p:identity>
>>
>> <!--  </p:group>-->
>>
>>   <p:group name="convertToSchemaWiki">
>>
>>     <oh:save-output step- 
>> name="debugOutputBeforeWikiMediaDumpToSchema">
>>       <p:with-option name="save" select="$debugOutput"/>
>>       <p:with-option name="href"  
>> select 
>> = 
>> "concat 
>> ($ 
>> hrefdebugOutputFolder 
>> ,'debugOutputBeforeWikiMediaDumpToSchema.xml')"/>
>>     </oh:save-output>
>>
>>     <p:xslt name="WikiMediaDumpToSchema" version="1.0" oh:doc="run  
>> the stylesheet that extracts the schema widgets from the wikimedia  
>> dump">
>>       <p:input port="stylesheet">
>>         <p:document href="../xslt/WikiMediaDumpToSchema.xsl"/>
>>       </p:input>
>>       <p:with-param name="OfficeCodeList" select="$OfficeCodeList"/>
>>       <p:with-param name="OfficeCodeArgSeperator"  
>> select="$OfficeCodeArgSeperator"/>
>>       <p:input port="parameters">
>>         <p:empty/>
>>       </p:input>
>>     </p:xslt>
>>
>>     <oh:save-output step-name="debugOutputBeforeUnescape-markup">
>>       <p:with-option name="save" select="$debugOutput"/>
>>       <p:with-option name="href"  
>> select="concat($hrefdebugOutputFolder,'debugOutputBeforeUnescape- 
>> markup.xml')"/>
>>     </oh:save-output>
>>
>>     <p:viewport match="//document" oh:doc="Convert the unescaped  
>> markup to xml">
>>       <p:unescape-markup>
>>         <p:with-option name="content-type" select="'application/ 
>> xml'"/>
>>       </p:unescape-markup>
>>     </p:viewport>
>>
>>     <p:unwrap match="/document" oh:doc="remove the surrounding  
>> element document"/>
>>   </p:group>
>>
>>   <oh:save-output step-name="output">
>>     <p:with-option name="save" select="'true'"/>
>>     <p:with-option name="href" select="$hrefSchemaOutput"/>
>>   </oh:save-output>
>>
>>   <p:identity/>
>> </p:declare-step>
>>
>>
>> ---------
>>
>> On Thu, Mar 17, 2011 at 2:23 PM, <vojtech.toman@emc.com> wrote:
>>
>> I assume that “!1.29” is the oh:save-output step as the other steps  
>> in the sub-pipeline have explicit names. I don’t know what the  
>> declaration of oh:save-output looks like, but if the step has a  
>> primary output port, then this output port is unconnected (no steps  
>> inside p:group are connected to it, and no steps outside of the  
>> p:group can connect it as it is out of scope). If you look at the  
>> connections between the steps in the subpipeline, there are  
>> actually two branches:
>>
>>
>> - PutCopyCitySpecificWikiDump -> identifyDifferentOldNewOfficeCodes  
>> -> oh:save-output
>>
>> - PutCopyCitySpecificWikiDump -> GetCopyCitySpecificWikiDump
>>
>>
>> My guess is that Calabash gets it wrong and somehow thinks that  
>> oh:save-output is the last step of the subpipeline, in which case  
>> it creates an implicit output port to p:group and connects it to  
>> the primary output port of oh:save-output. That would explain why  
>> you don’t get the error with p:group, but I think that is a bug in  
>> Calabash.
>>
>>
>> Regards,
>>
>> Vojtech
>>
>>
>> --
>>
>> Vojtech Toman
>>
>> Consultant Software Engineer
>>
>> EMC | Information Intelligence Group
>>
>> vojtech.toman@emc.com
>>
>> http://developer.emc.com/xmltech
>>
>>
>>
>>
>> -- 
>> Alex
>> -----
>> Currently:
>> Freelance Software Engineer 6+ yrs exp
>>
>> Previously:
>> https://sites.google.com/a/utg.edu.gm/alex/
>>
>>
>> A Bafila, is two rivers flowing together as one:
>> http://www.facebook.com/pages/Bafila/125611807494851
>>
>>
>>
>>
>>
>>
>> -- 
>> Alex
>> -----
>> Currently:
>> Freelance Software Engineer 6+ yrs exp
>>
>> Previously:
>> https://sites.google.com/a/utg.edu.gm/alex/
>>
>>
>> A Bafila, is two rivers flowing together as one:
>> http://www.facebook.com/pages/Bafila/125611807494851
>>
>>
>>
>
Received on Thursday, 17 March 2011 15:42:38 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Thursday, 17 March 2011 15:42:39 GMT