<!DOCTYPE mepuris [
<!ENTITY inout  "http://..../in-out" >
<!ENTITY inoptionalout  "http://..../in-opt-out" >
<!ENTITY inonly  "http://..../in-only" >
<!ENTITY robustinonly  "http://..../robust-in-only" >
]>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
    <ns prefix="wsdl" uri="http://www.w3.org/2006/01/wsdl"></ns>
    <pattern>
       <!-- TODO: improve reporting -->
       <!-- TODO: parameterize the pattern -->
       <rule context="//wsdl:description/wsdl:interface/wsdl:operation[@pattern='&inout;' or not(@pattern)">
            <report test="count(wsdl:input) != 1">
        	    Exactly one input must be present.
            </report>
            <report test="count(wsdl:output) != 1">
        	    Exactly one output must be present.
            </report>
            <report test="count(wsdl:infault) != 0">
		    No infault is allowed.
	    </report>
        </rule>
        <rule context="//wsdl:description/wsdl:interface/wsdl:operation[@pattern='&inoptionalout;']">
            <report test="count(wsdl:input) != 1">
        	    Exactly one input must be present.
            </report>
            <report test="count(wsdl:output) &gt; 1">
        	    One output at max is allowed.
            </report>
            <report test="count(wsdl:infault) != 0">
		    No infault is allowed.
           </report>
        </rule>
        <rule context="//wsdl:description/wsdl:interface/wsdl:operation[@pattern='&inonly;']">
            <report test="count(wsdl:input) != 1">
        	    Exactly one input must be present.
            </report>
            <report test="count(wsdl:output) != 0">
		    No output is allowed.
            </report>
            <report test="count(wsdl:infault) != 0">
		    No infault is allowed.
            </report>
            <report test="count(wsdl:outfault) != 0">
		    No outfault is allowed.
            </report>
        </rule>
        <rule context="//wsdl:description/wsdl:interface/wsdl:operation[@pattern='&robustinonly;']">
            <report test="count(wsdl:input) != 1">
        	    Exactly one input must be present.
            </report>
            <report test="count(wsdl:output) != 0">
		    No output is allowed.
            </report>
            <report test="count(wsdl:infault) != 0">
		    No infault is allowed.
            </report>
        </rule>
    </pattern>
</schema>

