- From: Costello, Roger L. <costello@mitre.org>
- Date: Tue, 21 Apr 2009 08:56:00 -0400
- To: "'xproc-dev@w3.org'" <xproc-dev@w3.org>
Hi Norm, >>>> QUESTION >>>> >>>> The identity step only allows me to connect its input port to the >>>> output of one of the parallel workflows. I'm dumping the other >>>> workflow's output. This seems rather bad. I can't think of what else >>>> to do. Can you suggest a better way to handle the merging of two >>>> parallel workflows? >> >>> <p:identity> >>> <p:input port="source"> >>> <p:pipe step="branch-1" name="result"/> >>> <p:pipe step="branch-2" name="result"/> >>> </p:input> >>> </p:identity> >> >> I tried that, and got this error: >> >> Error : Pipeline failed: err:XD0006: >> 2 documents appear on the 'source' port. >> If sequence is not specified, or has the >> value false, then it is a dynamic error >> unless exactly one document appears on >> the declared port. >That's bizarre. The source port on p:identity *does* accept a >sequence. Looks like a Calabash bug. Can you reproduce it in 0.9.8 >released this morning? I just tried it. Same error. I put my files below, in case you'd like to try it for yourself. >> Even if it did work, what would it mean? Doesn't p:identity mean >> that the input flows unaltered to the output? Since there are two >> inputs, which one flows through to the output? >The output would be a sequence, the result from branch-1 preceding the >result from branch-2. I'm not sure what you *expect* the result of the >join to be... Thanks. I guess that I really don't know what I expect. I am a newbie to workflow management, and am seeking guidance from the community on how to handle the merging of two parallel workflows. /Roger ------------------------------------- parallel-workflow.xpl ------------------------------------- <p:declare-step xmlns:p="http://www.w3.org/ns/xproc" name="validate-and-track"> <p:input port="source"> <p:document href="document.xml"/> </p:input> <p:output port="result"> <p:pipe step="uuid" port="result"/> </p:output> <p:validate-with-xml-schema assert-valid="true" mode="strict" name="xsdValidation"> <p:input port="schema"> <p:document href="check-classifications.xsd"/> </p:input> </p:validate-with-xml-schema> <p:validate-with-schematron phase="classificationValidation" name="checkClassifications"> <p:input port="source"> <p:pipe step="validate-and-track" port="source" /> </p:input> <p:input port="schema"> <p:document href="check-classifications-and-reserved-words.sch"/> </p:input> <p:input port="parameters"> <p:empty/> </p:input> </p:validate-with-schematron> <p:validate-with-schematron phase="reservedWordValidation" name="checkReservedWords"> <p:input port="source"> <p:pipe step="checkClassifications" port="result" /> </p:input> <p:input port="schema"> <p:document href="check-classifications-and-reserved-words.sch"/> </p:input> <p:input port="parameters"> <p:empty/> </p:input> </p:validate-with-schematron> <p:identity name="merge"> <p:input port="source"> <p:pipe step="checkReservedWords" port="result" /> <p:pipe step="xsdValidation" port="result" /> </p:input> </p:identity> <p:insert position="first-child" match="/Document" name="insertTrackingElement"> <p:input port="insertion"> <p:inline> <TrackingNumber> </TrackingNumber> </p:inline> </p:input> </p:insert> <p:uuid match="/Document/TrackingNumber/text()" name="uuid"> <p:input port="source"> <p:pipe step="insertTrackingElement" port="result" /> </p:input> </p:uuid> </p:declare-step> ------------------------------------- check-classifications.xsd ------------------------------------- <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="Document"> <xs:complexType> <xs:sequence> <xs:element name="Para" maxOccurs="unbounded"> <xs:complexType> <xs:simpleContent> <xs:extension base="paraType"> <xs:attribute name="classification" type="classificationLevels" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="classification" type="classificationLevels" use="required"/> </xs:complexType> </xs:element> <xs:simpleType name="classificationLevels"> <xs:restriction base="xs:string"> <xs:enumeration value="top-secret"/> <xs:enumeration value="secret"/> <xs:enumeration value="confidential"/> <xs:enumeration value="unclassified"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="paraType"> <xs:restriction base="xs:string"> <xs:maxLength value="200"/> <xs:pattern value="[\sa-zA-Z0-9,;:\.]*"/> </xs:restriction> </xs:simpleType> </xs:schema> ------------------------------------- check-classifications-and-reserved-words.sch ------------------------------------- <?xml version="1.0"?> <sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron"> <sch:phase id="classificationValidation"> <sch:p>Validate that the document's security classification policy is valid.</sch:p> <sch:active pattern="SCP" /> </sch:phase> <sch:phase id="reservedWordValidation"> <sch:p>Validate that the document doesn't contain any reserved words.</sch:p> <sch:active pattern="RWF" /> </sch:phase> <sch:pattern name="Security Classification Policy" id="SCP"> <sch:p>A Para's classification value cannot be more sensitive than the Document's classification value.</sch:p> <sch:rule context="Para[@classification='top-secret']"> <sch:assert test="/Document/@classification='top-secret'"> If there is a Para is labeled "top-secret" then the Document should be labeled top-secret </sch:assert> </sch:rule> <sch:rule context="Para[@classification='secret']"> <sch:assert test="(/Document/@classification='top-secret') or (/Document/@classification='secret')"> If there is a Para is labeled "secret" then the Document should be labeled either secret or top-secret </sch:assert> </sch:rule> <sch:rule context="Para[@classification='confidential']"> <sch:assert test="(/Document/@classification='top-secret') or (/Document/@classification='secret') or (/Document/@classification='confidential')"> If there is a Para is labeled "confidential" then the Document should be labeled either confidential, secret or top-secret </sch:assert> </sch:rule> </sch:pattern> <sch:pattern name="Reserved Word Filter" id="RWF"> <sch:p>These reserved words are not allowed anywhere in the document: SCRIPT, FUNCTION.</sch:p> <sch:rule context="Document"> <sch:assert test="count(//node()[contains(.,'SCRIPT')]) = 0 and count(//node()[contains(.,'FUNCTION')]) = 0"> The document must not contain the words SCRIPT or FUNCTION </sch:assert> </sch:rule> </sch:pattern> </sch:schema> ------------------------------------- document.xml ------------------------------------- <?xml version="1.0"?> <Document classification="secret"> <Para classification="unclassified"> One if by land, two if by sea; </Para> <Para classification="confidential"> And I on the opposite shore will be, Ready to ride and spread the alarm </Para> <Para classification="unclassified"> Ready to ride and spread the alarm Through every Middlesex, village and farm, </Para> <Para classification="secret"> For the country folk to be up and to arm. </Para> </Document>
Received on Tuesday, 21 April 2009 12:56:36 UTC