IST logo
WS2 brochure front page

Using Web services: hands on experience

Yves Lafon, ylafon@w3.org
XML Protocol Working Group
Web Services Choreography Working Group
XML Schema Patterns for Databinding Working Group

Demonstrators

Demonstrate which technologies?

SOAP 1.2 & WSDL 2.0 Demonstrator

Goals:

Why a Web Service Interface?

Current ways of extracting the information:

Developpement

Timeline

Interaction example: Request

Interaction example: Reply

<?xml version='1.0' encoding="utf-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
  <env:Body>
    <m:cssvalidationresponse 
       env:encodingStyle="http://www.w3.org/2003/05/soap-encoding" 
       xmlns:m="http://www.w3.org/2005/07/css-validator"> 
      <m:uri>http://www.w3.org/</m:uri> 
      <m:checkedby>http://jigsaw.w3.org/css-validator/</m:checkedby>
      <m:csslevel>css2</m:csslevel>
      <m:date>2006.03.05T06:04:35Z</m:date>
      <m:validity>true</m:validity>
      <m:result>
        <m:errors xml:lang="en">
          <m:errorcount>0</m:errorcount>
        </m:errors>
        <m:warnings xml:lang="en">
          <m:warningcount>75</m:warningcount>
          <m:warninglist>
            <m:uri>http://www.w3.org/StyleSheets/home.css</m:uri>
            <m:warning>
              <m:line>24</m:line>
              <m:level>2</m:level>
              <m:message>Redefinition of margin-bottom</m:message>
              <m:context>#logo</m:context>
            </m:warning>
         [..]     
          </m:warninglist>
        </m:warnings>
      </m:result>
    </m:cssvalidationresponse>
  </env:Body>
</env:Envelope>

Is this valid?

Easy check with XSL (but can be done in multiple ways):

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
  xmlns:validator="http://www.w3.org/2005/07/css-validator"
  version="1.0">

  <xsl:output 
    method="text"
    />
  
  <xsl:strip-space elements="*" />
  
  <xsl:template match="/|soap:Envelope|soap:Body|validator:cssvalidationresponse">
    <xsl:apply-templates/>
  </xsl:template>
  
  <xsl:template match="validator:validity">
    <xsl:value-of select="."/>
  </xsl:template>
  
  <xsl:template match="*">
  </xsl:template>

</xsl:stylesheet>

Easy integration

Sample UNIX shell script

#!/bin/sh

# return 0, both validation OK
#        1, one of them is not valid
#        2, URI issue

if [ ! $# -eq 1 ]; then
    echo "Usage: $0 URI"
    exit 2
fi

# construct URI according to the validator definition at
# http://qa-dev.w3.org/wmvs/HEAD/docs/api

# first encore the URI to check in form-urlencoded mode

uri=`echo $1 | sed 's/:/%3A/g' | sed 's|/|%2F|g' | sed 's,\?,%3F,g'`

# construct the URI
requri="http://qa-dev.w3.org/wmvs/HEAD/check?uri=${uri}&output=soap12"

tmpfile=/tmp/val-$$
# do the request on the markup validator
wget -o /dev/null -O $tmpfile $requri

# check for mustUnderstand (to be a valid SOAP processor)
grep "mustUnderstand=\"true\"" $tmpfile > /dev/null
if [ $? -eq 0 ]; then
    echo "a mustUnderstand - unable to process"
    exit 2
fi

# use XSLT to extract the "validity" part of the output

markupvalid=`xsltproc ismarkupok.xsl $tmpfile`

# and output the retult
if [ $markupvalid = "true" ]; then
    echo "Markup OK for $1"
else
    echo "Bad Markup for $1"
    rm $tmpfile
    exit 1
fi

# construct now the CSS Validator request
requri="http://jigsaw.w3.org/css-validator/validator?uri=${uri}&output=soap12"
# do the request on the CSS validator
wget -o /dev/null -O $tmpfile $requri

# check for mustUnderstand (to be a valid SOAP processor)
grep "mustUnderstand=\"true\"" $tmpfile > /dev/null
if [ $? -eq 0 ]; then
    echo "a mustUnderstand - unable to process"
    exit 2
fi

cssvalid=`xsltproc iscssok.xsl $tmpfile`

# and output the retult
if [ $cssvalid = "true" ]; then
        echo "CSS OK for $1"
else
        echo "Bad CSS for $1"
        rm $tmpfile
        exit 1
fi

echo "CONGRATULATIONS $1 is Valid!"
rm $tmpfile
exit 0

AJAX Integration

W3C validators, Ajax & SOAP: a different way to test markup and CSS validity