OpenCSA Liaison Subcommittee

 View Only

Re: Schematron in SCA Specs - request for an example

  • 1.  Re: Schematron in SCA Specs - request for an example

    Posted 07-09-2008 08:59


    Yours,  Mike.

    Strategist - Emerging Technologies, SCA & SDO.
    Co Chair OASIS SCA Assembly TC.
    IBM Hursley Park, Mail Point 146, Winchester, SO21 2JN, Great Britain.
    Phone & FAX: +44-1962-818014    Mobile: +44-7802-467431  
    Email:  mike_edwards@uk.ibm.com

    Folks,

    Here is a follow up regarding the proposal for  Use of Schematron in the SCA Specifications:

    This is from Danny van der Rijn of Tibco and his example relates to the BPEL specification:


    First, let me be clear that I'm not suggesting on recasting parts of the SCA spec.

    "PROPOSAL: Define SchemaTron rules in our specification that formalize the constraints that are now limited to either informal verbal constraints, or implied constraints. "

    The point is to augment what is currently there with some formalism.

    I'm attaching a schematron schema which enforces 3 simple rules expressed or implied in SCA-BPEL 3.3. 
    - a bpel:partnerLink may not have both an sca-bpel:service and an sca-bpel:reference
    - an sca-bpel:service is only legal on a bpel:partnerLink
    - an sca-bpel:reference is only legal on a bpel:partnerLink

    This is to give you a flavor of what is possible. Other rules I would include from this section:
    - the value of an sca-bpel:service must be unique
    - the value of an sca-bpel:reference must be unique


    That's a lot of rules for 14 lines of spec text, not one of which is formally encoded by our spec.

    ---------------------------------------
    <?xml version="1.0" ?>
    <schema xmlns="http://purl.oclc.org/dsdl/schematron">

    <ns uri="http://docs.oasis-open.org/ns/opencsa/sca/200712" prefix="sca-bpel" />
    <ns uri="http://docs.oasis-open.org/ns/opencsa/sca/200712" prefix="sca" />
    <ns uri="http://docs.oasis-open.org/wsbpel/2.0/process/executable/" prefix="bpel" />


    <!--
    SCA-BPEL Section 3.3

    -->

    <pattern name="sca-bpel:service">

    <rule context="*[@sca-bpel:service]">

    <!--
    sca-bpel:service can only appear on a bpel:partnerLink.
    The 'value-of' is just to output the partnerLink's name
    -->

    <assert test="self::bpel:partnerLink">
    <value-of select="@name" /> : An @sca-bpel:service may only appear on a bpel:partnerLink

    </assert>

    <!--
    a bpel:partnerLink can't have both an sca-bpel:service and an sca-bpel:reference.
    The 'value-of' is just to output the partnerLink's name
    -->
    <assert test="not(@sca-bpel:reference)">

    <value-of select="@name" /> : A bpel:partnerLink can't have both an @sca-bpel:service and an @sca-bpel:reference
    </assert>


    </rule>
    </pattern>


    <pattern name="sca-bpel:reference">

    <rule context="*[@sca-bpel:reference]">

    <!--
    sca-bpel:reference can only appear on a bpel:partnerLink.
    The 'value-of' is just to output the partnerLink's name
    -->

    <assert test="self::bpel:partnerLink">
    <value-of select="@name" /> : An sca-bpel:reference may only appear on a bpel:partnerLink

    </assert>
    </rule>

    </pattern>
    </schema>

    -----------------------------------------





    Unless stated otherwise above:
    IBM United Kingdom Limited - Registered in England and Wales with number 741598.
    Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU